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

Продолжим разговор о возможностях системы 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 практики и инструменты»!

По материалам https://medium.com/@jezhalford/ansible-custom-facts-1e1d1bf65db8.