Можно ли в Ansible собрать только определенные факты?

В Ansible я могу использовать gather_facts: yes для сбора информации о моих хостах. Поскольку gather_facts собирает много информации, это занимает довольно много времени. В моем случае мне нужен только один факт: ansible_env.TEMP. Могу ли я ускорить процесс gather_facts, просто выбрав это конкретное значение? Моя текущая книга игр:

---
- hosts: all
  gather_facts: yes
  tasks:
    - name: Get TEMP
      debug:
        msg: "TEMP: {{ ansible_env.TEMP }}"

В качестве обходного пути я могу установить gather_facts на no и извлечь значение с помощью команды оболочки, но это просто не похоже на использование Ansible...

Вы также должны взглянуть на кэширование фактов. Кэш по умолчанию находится в памяти и исчезает, как только плейбук готов. Использование даже простого кэша jsonfile может значительно улучшить последовательные запуски плейбука.

Zeitounator 31.03.2022 15:26
Введение в Ansible Roles
Введение в Ansible Roles
Ansible - это отличный инструмент управления конфигурацией, который можно использовать для автоматизации настройки или развертывания на большом...
1
1
44
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Согласно документации setup – Собирает факты об удаленных хостах, если предоставляется параметр gather_subset с подмножеством

restrict the additional facts collected to the given subset.

---
- hosts: localhost
  become: false

  gather_facts: true
  gather_subset:
    - "env"
    - "!all"
    - "!min"

  tasks:

  - name: Show Gathered Facts
    debug:
      msg: "{{ ansible_facts }}"

в результате получается

TASK [Show Gathered Facts] ******
ok: [localhost] =>
  msg:
    env:
      HISTCONTROL:
      HISTSIZE:
      HOME:
      HOSTNAME:
      KRB5CCNAME:
      LANG:
      LESSOPEN:
      LOGNAME:
      LS_COLORS:
      MAIL:
      PATH:
      PWD:
      SELINUX_LEVEL_REQUESTED:
      SELINUX_ROLE_REQUESTED:
      SELINUX_USE_CURRENT_RANGE:
      SHELL:
      SHLVL:
      SSH_CLIENT:
      SSH_CONNECTION:
      SSH_TTY:
      TERM:
      TZ:
      USER:
      XDG_RUNTIME_DIR:
      XDG_SESSION_ID:
      _:
    gather_subset:
    - env
    - '!all'
    - '!min'
    module_setup: true

... Я предоставил только ключи и удалил все значения. Ключи могут меняться в зависимости от инфраструктуры из-за lib/ansible/module_utils/facts/system/env.py.

Тем не менее, это, вероятно, по-прежнему предоставит больше информации, чем вы ищете.

Дополнительная документация

Дальнейшие вопросы и ответы

Ответ принят как подходящий

Вы можете использовать collect_subset, чтобы захватить только env vars:

- hosts: localhost
  gather_subset: ['env','!all','!min']

  tasks:
    - debug:
        msg: "{{ ansible_facts }}"

выход:

TASK [debug] **************************************************************************************************************************************************************************
ok: [localhost] => {
    "msg": {
        "env": {
                ... vars here...
        },
        "gather_subset": [
            "env",
            "!all",
            "!min"
        ],
        "module_setup": true
    }
}

Разрешены параметры collect_subset: all, all_ipv4_addresses, all_ipv6_addresses, apparmor, архитектура, заглавные буквы, chroot, cmdline, date_time, default_ipv4, default_ipv6, устройства, аппаратное обеспечение, интерфейсы, is_chroot, iscsi, ядро, версия_ядра, локальный, младший бит, машина, идентификатор_машины, монтирование, сеть, nvme, ohai, os_family, pkg_mgr, платформа, процессор, процессорные_ядра, число_процессоров, python, версия_python, real_user_id, selinux, service_mgr, ssh_host_key_dsa_public, ssh_host_key_ecdsa_public, ssh_host_key_ed25519_public, ssh_host_key_rsa_public, ssh_host_pub_keys, ssh_pub_keys, система, system_capabilities, system_capabilities_enforced, пользователь, user_dir, user_gecos, user_gid, идентификатор_пользователя, user_shell, user_uid, виртуальная, virtualization_role, virtualization_tech_guest, virtualization_tech_host, virtualization_type»

У вас есть источник для данного списка в конце? В ваших связанных документах упоминаются лишь некоторые из них.

stackprotector 31.03.2022 16:06

@stackprotector, возможно, согласно Ansible Проблема № 47603 "setupgather_facts документация неполная".

U880D 31.03.2022 16:11

Я скопировал список из вывода ошибок после указания недопустимого подмножества. Вы можете найти их определения здесь.

jeroenflvr 31.03.2022 16:32

Другие вопросы по теме