0 added
0 removed
Original
2026-01-01
Modified
2026-03-10
1
<p>В системе управления конфигурациями<strong>Ansible</strong>есть специальный модуль<strong>setup</strong>. Он выполняется первым, собирая информацию (<strong>Gathers facts</strong>) обо всех подключённых узлах (нодах). При выполнении модуля на хосте он собирает разные факты, включая дисковое пространство, версию и тип операционной системы, hostname машины, количество доступной памяти, архитектуру процессора, IP-адреса, сетевые интерфейсы и их состояние.</p>
1
<p>В системе управления конфигурациями<strong>Ansible</strong>есть специальный модуль<strong>setup</strong>. Он выполняется первым, собирая информацию (<strong>Gathers facts</strong>) обо всех подключённых узлах (нодах). При выполнении модуля на хосте он собирает разные факты, включая дисковое пространство, версию и тип операционной системы, hostname машины, количество доступной памяти, архитектуру процессора, IP-адреса, сетевые интерфейсы и их состояние.</p>
2
<p>Собранная системная информация фиксируется в виде переменных, которые доступны только для чтения. Полученные факты можно в дальнейшем использовать в коде и сценариях плейбуков в своих целях. Например, вы можете писать условия в коде, при которых будут вноситься те либо иные изменения в зависимости от типа и версии операционной системы.</p>
2
<p>Собранная системная информация фиксируется в виде переменных, которые доступны только для чтения. Полученные факты можно в дальнейшем использовать в коде и сценариях плейбуков в своих целях. Например, вы можете писать условия в коде, при которых будут вноситься те либо иные изменения в зависимости от типа и версии операционной системы.</p>
3
<p>Посмотреть, какая информация собирается модулем<strong>setup</strong>и в какие переменные она упаковывается, можно следующим образом (вывод частично обрезан):</p>
3
<p>Посмотреть, какая информация собирается модулем<strong>setup</strong>и в какие переменные она упаковывается, можно следующим образом (вывод частично обрезан):</p>
4
ansible <myhost> -m setup localhost | SUCCESS => { "ansible_facts": { "ansible_all_ipv4_addresses": [ "10.20.30.40" ], "ansible_all_ipv6_addresses": [ "fe80::250:56ff:fe59:aa5e" ], "ansible_apparmor": { "status": "disabled" }, "ansible_architecture": "x86_64", "ansible_bios_date": "04/05/2016", "ansible_bios_version": "6.00", "ansible_cmdline": { "BOOT_IMAGE": "/vmlinuz-3.10.0-862.3.2.el7.x86_64", "LANG": "en_US.UTF-8", "crashkernel": "auto", "net.ifnames": "0", "quiet": true, "rd.lvm.lv": "rootvg/root", "rhgb": true, "ro": true, "root": "/dev/mapper/rootvg-root" }, "ansible_distribution": "RedHat", "ansible_distribution_file_parsed": true, "ansible_distribution_file_path": "/etc/redhat-release", "ansible_distribution_file_variety": "RedHat", "ansible_distribution_major_version": "7", "ansible_distribution_release": "Maipo", "ansible_distribution_version": "7.5", "ansible_dns": { "nameservers": [ "8.8.8.8", "8.8.4.4" ] }, "ansible_local": {}, "ansible_lsb": {}, "ansible_machine": "x86_64", "ansible_machine_id": "c120c1e3c00b442cabbab1f5a67a23c2", "ansible_memfree_mb": 60, "ansible_memory_mb": { "nocache": { "free": 516, "used": 476 }, "real": { "free": 60, "total": 992, "used": 932 }, "swap": { "cached": 2, "free": 1972, "total": 2045, "used": 73 } }, "ansible_memtotal_mb": 992, "ansible_nodename": "mynode-host", "ansible_os_family": "RedHat", "ansible_pkg_mgr": "yum", "ansible_processor": [ "0", "GenuineIntel", "Intel(R) Xeon(R) CPU E5-2680 v2 @ 2.80GHz" ], "ansible_processor_cores": 1, "ansible_processor_count": 1, "ansible_processor_threads_per_core": 1, "ansible_processor_vcpus": 1, "ansible_product_name": "VMware Virtual Platform", "ansible_product_serial": "NA", "ansible_product_uuid": "NA", "ansible_product_version": "None", "ansible_python_version": "2.7.5", "ansible_system_capabilities_enforced": "True", "ansible_system_vendor": "VMware, Inc.", "ansible_uptime_seconds": 2935287, "ansible_user_dir": "/home/serjs", "ansible_userspace_architecture": "x86_64", "ansible_userspace_bits": "64", "ansible_virtualization_role": "guest", "ansible_virtualization_type": "VMware", "gather_subset": [ "all" ], "module_setup": true }, "changed": false }<h2>В целом модуль setup - очень полезный инструмент</h2>
4
ansible <myhost> -m setup localhost | SUCCESS => { "ansible_facts": { "ansible_all_ipv4_addresses": [ "10.20.30.40" ], "ansible_all_ipv6_addresses": [ "fe80::250:56ff:fe59:aa5e" ], "ansible_apparmor": { "status": "disabled" }, "ansible_architecture": "x86_64", "ansible_bios_date": "04/05/2016", "ansible_bios_version": "6.00", "ansible_cmdline": { "BOOT_IMAGE": "/vmlinuz-3.10.0-862.3.2.el7.x86_64", "LANG": "en_US.UTF-8", "crashkernel": "auto", "net.ifnames": "0", "quiet": true, "rd.lvm.lv": "rootvg/root", "rhgb": true, "ro": true, "root": "/dev/mapper/rootvg-root" }, "ansible_distribution": "RedHat", "ansible_distribution_file_parsed": true, "ansible_distribution_file_path": "/etc/redhat-release", "ansible_distribution_file_variety": "RedHat", "ansible_distribution_major_version": "7", "ansible_distribution_release": "Maipo", "ansible_distribution_version": "7.5", "ansible_dns": { "nameservers": [ "8.8.8.8", "8.8.4.4" ] }, "ansible_local": {}, "ansible_lsb": {}, "ansible_machine": "x86_64", "ansible_machine_id": "c120c1e3c00b442cabbab1f5a67a23c2", "ansible_memfree_mb": 60, "ansible_memory_mb": { "nocache": { "free": 516, "used": 476 }, "real": { "free": 60, "total": 992, "used": 932 }, "swap": { "cached": 2, "free": 1972, "total": 2045, "used": 73 } }, "ansible_memtotal_mb": 992, "ansible_nodename": "mynode-host", "ansible_os_family": "RedHat", "ansible_pkg_mgr": "yum", "ansible_processor": [ "0", "GenuineIntel", "Intel(R) Xeon(R) CPU E5-2680 v2 @ 2.80GHz" ], "ansible_processor_cores": 1, "ansible_processor_count": 1, "ansible_processor_threads_per_core": 1, "ansible_processor_vcpus": 1, "ansible_product_name": "VMware Virtual Platform", "ansible_product_serial": "NA", "ansible_product_uuid": "NA", "ansible_product_version": "None", "ansible_python_version": "2.7.5", "ansible_system_capabilities_enforced": "True", "ansible_system_vendor": "VMware, Inc.", "ansible_uptime_seconds": 2935287, "ansible_user_dir": "/home/serjs", "ansible_userspace_architecture": "x86_64", "ansible_userspace_bits": "64", "ansible_virtualization_role": "guest", "ansible_virtualization_type": "VMware", "gather_subset": [ "all" ], "module_setup": true }, "changed": false }<h2>В целом модуль setup - очень полезный инструмент</h2>
5
<p>Однако нельзя не учитывать, что на выполнение сбора системной информации уходит определённое время. И если код плейбука, который будет применяться на сервере, никак не будет использовать эти факты, модуль лучше отключить. В результате чего переменные собираться не будут в рамках выполнения всего плейбука, что сэкономит время. Это может быть важно, например, если вы используете<strong>Ansible</strong>для деплоя, когда каждые пару секунд влияют на скорость внесения изменений.</p>
5
<p>Однако нельзя не учитывать, что на выполнение сбора системной информации уходит определённое время. И если код плейбука, который будет применяться на сервере, никак не будет использовать эти факты, модуль лучше отключить. В результате чего переменные собираться не будут в рамках выполнения всего плейбука, что сэкономит время. Это может быть важно, например, если вы используете<strong>Ansible</strong>для деплоя, когда каждые пару секунд влияют на скорость внесения изменений.</p>
6
<p>Отключение модуля<strong>setup</strong>не вызывает сложностей, причём управление включением/выключением выполняется на уровне всего плейбука. Кроме того, в<strong>ansible.cfg</strong>можно управлять его поведением по умолчанию.</p>
6
<p>Отключение модуля<strong>setup</strong>не вызывает сложностей, причём управление включением/выключением выполняется на уровне всего плейбука. Кроме того, в<strong>ansible.cfg</strong>можно управлять его поведением по умолчанию.</p>
7
--- - hosts: appservers gather_facts: false vars_files: - "{{ inventory_dir }}/credentials.yml" tasks: ...<p><em>А как вы используете<strong>Gathers facts</strong>? Пишите в комментариях!</em></p>
7
--- - hosts: appservers gather_facts: false vars_files: - "{{ inventory_dir }}/credentials.yml" tasks: ...<p><em>А как вы используете<strong>Gathers facts</strong>? Пишите в комментариях!</em></p>
8
<p><em>И если хотите узнать об<strong>Ansible</strong>более подробно, записывайтесь на курс "DevOps практики и инструменты" в OTUS!</em></p>
8
<p><em>И если хотите узнать об<strong>Ansible</strong>более подробно, записывайтесь на курс "DevOps практики и инструменты" в OTUS!</em></p>
9
9