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.