Модуль setup и Gathers facts в Ansible | OTUS
🔥 BLACK FRIDAY!
Максимальная скидка -25% на всё. Успейте начать обучение по самой выгодной цене.
Выбрать курс

Курсы

Программирование
iOS Developer. Basic
-25%
Python Developer. Professional
-25%
Разработчик на Spring Framework
-25%
Golang Developer. Professional
-25%
Python Developer. Basic
-25%
iOS Developer. Professional
-25%
Highload Architect
-25%
JavaScript Developer. Basic
-25%
Kotlin Backend Developer
-25%
JavaScript Developer. Professional
-25%
Android Developer. Basic
-25%
Unity Game Developer. Basic
-25%
Разработчик C#
-25%
Программист С Web-разработчик на Python Алгоритмы и структуры данных Framework Laravel PostgreSQL Reverse-Engineering. Professional CI/CD Vue.js разработчик VOIP инженер Программист 1С Flutter Mobile Developer Супер - интенсив по Kubernetes Symfony Framework Advanced Fullstack JavaScript developer Супер-интенсив "Azure для разработчиков"
Инфраструктура
Мониторинг и логирование: Zabbix, Prometheus, ELK
-25%
DevOps практики и инструменты
-25%
Архитектор сетей
-25%
Инфраструктурная платформа на основе Kubernetes
-25%
Супер-интенсив «IaC Ansible»
-16%
Разработчик программных роботов (RPA) на базе UiPath и PIX
-25%
Супер-интенсив "SQL для анализа данных"
-16%
Базы данных Сетевой инженер AWS для разработчиков Cloud Solution Architecture Разработчик голосовых ассистентов и чат-ботов Внедрение и работа в DevSecOps Администратор Linux. Виртуализация и кластеризация Нереляционные базы данных Супер-практикум по использованию и настройке GIT IoT-разработчик Супер-интенсив «ELK»
Специализации Курсы в разработке Подготовительные курсы
+7 499 938-92-02

Модуль setup и Gathers facts в Ansible

DevOps_Deep_17.08_Site.png

В системе управления конфигурациями Ansible есть специальный модуль setup. Он выполняется первым, собирая информацию (Gathers facts) обо всех подключённых узлах (нодах). При выполнении модуля на хосте он собирает разные факты, включая дисковое пространство, версию и тип операционной системы, hostname машины, количество доступной памяти, архитектуру процессора, IP-адреса, сетевые интерфейсы и их состояние.

Собранная системная информация фиксируется в виде переменных, которые доступны только для чтения. Полученные факты можно в дальнейшем использовать в коде и сценариях плейбуков в своих целях. Например, вы можете писать условия в коде, при которых будут вноситься те либо иные изменения в зависимости от типа и версии операционной системы.

Посмотреть, какая информация собирается модулем setup и в какие переменные она упаковывается, можно следующим образом (вывод частично обрезан):

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
}

В целом модуль setup — очень полезный инструмент

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

Отключение модуля setup не вызывает сложностей, причём управление включением/выключением выполняется на уровне всего плейбука. Кроме того, в ansible.cfg можно управлять его поведением по умолчанию.

---
- hosts: appservers
  gather_facts: false

  vars_files:
    - "{{ inventory_dir }}/credentials.yml"

  tasks:
...

А как вы используете Gathers facts? Пишите в комментариях!

И если хотите узнать об Ansible более подробно, записывайтесь на курс «DevOps практики и инструменты» в OTUS!

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться
🎁 Максимальная скидка!
Черная пятница уже в OTUS! Скидка -25% на всё!