Ansible: формируем переменные на всех хостах с Custom facts | OTUS
👋 Канал OTUS в Telegram!
Посты от приглашенных гостей из IT-тусовки, полезные статьи, подборки вакансий от партнеров ➞
Подробнее

Курсы

Программирование
Web-разработчик на Python Разработчик Python Разработчик на Spring Framework Разработчик Golang iOS Разработчик. Продвинутый курс v 2.0. PostgreSQL Vue.js разработчик Архитектор программного обеспечения Разработчик C++ MS SQL Server разработчик Android-разработчик. Базовый курс Архитектор высоких нагрузок Backend-разработчик на PHP Алгоритмы для разработчиков Team Lead 2.0 Python-разработчик. Базовый курс VOIP инженер Базы данных Разработчик программных роботов (RPA) на базе UiPath и PIX Разработчик голосовых ассистентов и чат-ботов Agile Project Manager в IT
Специализации Курсы в разработке Подготовительные курсы
+7 499 938-92-02

Ansible: формируем переменные на всех хостах с Custom facts

DevOps_Deep_21.08_site.png

Продолжим разговор о возможностях системы Ansible и поговорим о системной информации, которая собирается в виде фактов с помощью встроенного модуля setup. Правда, разговор наш будет проходить в несколько ином ракурсе.

Дело в том, что со сбором стандартных переменных по умолчанию всё предельно ясно. Но что делать, если мы хотим сформировать наши собственные переменные на всех хостах, чтобы в дальнейшем использовать их в нашем коде?

Для этого существует возможность добавления Custom facts, что делается следующим образом: – на любом хосте, контролируемом Ansible, создаётся директория /etc/ansible/facts.d; – внутри каталога размещаются один либо несколько файлов с расширением .fact, например custom.fact; – файлы возвращают данные в формате JSON, которые и используются модулем для включения в системную информацию, собираемую в начале работы.

В качестве примера можно привести команду для сбора даты и времени:

#! / bin / bash 
DATE = `date` 
echo" {\ "date \": \ "$ {DATE} \"} "

После того, как файлы будут загружены на удалённую машину, они станут доступны в hostvars.host.ansible_local.custom.fact. И вместо custom.fact вы можете использовать любое имя для файла, допустим, date_and_time.fact, если речь идёт о дате и времени.

Автоматическая настройка Custom facts

Размещать вручную файлы на каждом контролируемом при помощи Ansible хосте не очень удобно. В некоторых ситуациях имеет смысл создать специальный плейбук, предполагающий, что у вас есть сценарий files/custom.fact, возвращающий некоторый JSON:

- name: "Create custom fact directory"
  file:
    path: "/etc/ansible/facts.d"
    state: "directory"
- name: "Insert custom fact file"
  copy:
    src: files/custom.fact
    dest: /etc/ansible/facts.d/custom.fact
    mode: 0755

Однако вышеописанная схема позволит лишь установить Сustom fact, но не исполнить его. Ведь вся системная информация загружается модулем setup в начале работы. Если же вы хотите использовать переменную в одном и том же плейбуке, достаточно будет ещё раз запустить setup, что делается очень просто:

- name: "Re-run setup to use custom facts"
  setup: ~

Пожалуй, это всё, что вам нужно знать об использовании Custom facts. Если же хотите ещё больше расширить свои познания в этих вопросах, ждём вас на курсе «DevOps практики и инструменты»!

Есть вопрос? Напишите в комментариях!

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

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

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

Автор
1 комментарий
0

А где ссылка на первоисточник?? https://medium.com/@jezhalford/ansible-custom-facts-1e1d1bf65db8

Для комментирования необходимо авторизоваться
🎁 Дарим сертификаты на скидку!
Запишитесь на июньскую трансляцию интересного вам дня открытых дверей и участвуйте в Акции ➞