TGViewer
NetworkAdmin.ru NetworkAdmin.ru @networkadminru · 4.7K subscribers
Post #831 1.36K
❗️ Ansible facts: нестандартные приемы и кастомные факты

В Ansible многие используют facts только для базовых вещей: ansible_os_family, ansible_hostname, ansible_default_ipv4. Но механизм фактов куда мощнее, если копнуть глубже, можно строить динамичную и умную автоматизацию.

1️⃣ Отключаем сбор всего лишнего (и ускоряем playbook). По умолчанию Ansible собирает огромный набор фактов. Если они не нужны - это просто трата времени.


- hosts: all
gather_facts: false


А если нужны только сетевые:


- hosts: all
gather_facts: true
gather_subset:
- network


Это особенно заметно в больших инфраструктурах.

2️⃣ Используем facts как динамические условия. Например, разные действия для разных типов виртуализации:


- name: Install qemu tools
package:
name: qemu-guest-agent
state: present
when: ansible_virtualization_type == "kvm"```yaml

Или автоматический выбор пакетов по версии ОС:

```yaml
when: ansible_distribution_major_version | int >= 9


3️⃣ Кастомные факты (local facts). Самый недооцененный механизм.

Создаем на хосте файл:


/etc/ansible/facts.d/app.fact


Пример содержимого (JSON):


{
"role": "backend",
"env": "prod"
}


После этого факты будут доступны как:


ansible_local.app.role
ansible_local.app.env


Теперь сервер сам знает, кто он, а плейбук просто реагирует.

4️⃣ Динамические факты через set_fact. Можно вычислять значения на лету:


- set_fact:
is_prod: "{{ 'prod' in inventory_hostname }}"


И дальше использовать:


when: is_prod


Важно помнить: set_fact живет в рамках хоста и текущего play.

5️⃣ Делегированные факты. Иногда нужно собрать факт с одного хоста и использовать на другом:


- name: Get DB IP
command: hostname -I
register: db_ip
delegate_to: db01
run_once: true


Теперь можно передать IP в шаблон для backend-серверов.

6️⃣ Кэширование фактов. В больших инвентарях сбор фактов - это дорогая операция. Можно включить fact caching (например, в Redis или JSON):


fact_caching = jsonfile
fact_caching_connection = /tmp/ansible_facts_cache
fact_caching_timeout = 86400


7️⃣ Факты как источник архитектуры. Можно строить инфраструктурную логику без жестких групп:

если есть второй диск, то настраиваем RAID
если RAM > 16GB, то увеличиваем worker-пулы
если это VM, то отключаем tuned-профили для bare metal

Пример:


when: ansible_memtotal_mb > 16000


#ansible #devops

🧑‍💻 NetworkAdmin
  • 👍 7
  • ❤ 1
More from @networkadminru
  1. Sep 29, 2026🥱 Как быстро разобраться с дисками и маунтами Когда на сервере несколько дисков, LVM, отд…
  2. Sep 28, 2026🔎 TCP keepalive: как находить мертвые соединения до того, как они создадут проблему Иногд…
  3. Sep 25, 2026🤩 Как расшифровать код ошибки Windows через certutil При установке обновлений Windows ран…
  4. Sep 23, 2026💻 Как жестко перезагрузить linux, когда обычный reboot уже не помогает Иногда сервер зави…
  5. Sep 22, 2026🌚 watch: простая динамическая диагностика в терминале Иногда не нужен отдельный мониторин…
  6. Sep 21, 2026👌 Firewall default deny: как внедрять без внезапного отрезания доступа Идея простая: разр…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →