В 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...
Согласно документации 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.
Тем не менее, это, вероятно, по-прежнему предоставит больше информации, чем вы ищете.
Дополнительная документация
gather_facts
."setup.py
gather_facts
документация неполная"Дальнейшие вопросы и ответы
Вы можете использовать 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, возможно, согласно Ansible Проблема № 47603 "setup
gather_facts
документация неполная".
Я скопировал список из вывода ошибок после указания недопустимого подмножества. Вы можете найти их определения здесь.
Вы также должны взглянуть на кэширование фактов. Кэш по умолчанию находится в памяти и исчезает, как только плейбук готов. Использование даже простого кэша
jsonfile
может значительно улучшить последовательные запуски плейбука.