0 added
0 removed
Original
2026-01-01
Modified
2026-03-10
1
<p>Теги: ansible, devops, json, bash (bourne again shell), setup, custom facts, /etc/ansible/facts.d, расширение .fact, hostvars.host.ansible_local.custom.fact, files/custom.fact, bash</p>
1
<p>Теги: ansible, devops, json, bash (bourne again shell), setup, custom facts, /etc/ansible/facts.d, расширение .fact, hostvars.host.ansible_local.custom.fact, files/custom.fact, bash</p>
2
<p>Продолжим разговор о возможностях системы<strong>Ansible</strong>и поговорим о системной информации, которая собирается в виде фактов с помощью встроенного модуля<strong>setup</strong>. Правда, разговор наш будет проходить в несколько ином ракурсе.</p>
2
<p>Продолжим разговор о возможностях системы<strong>Ansible</strong>и поговорим о системной информации, которая собирается в виде фактов с помощью встроенного модуля<strong>setup</strong>. Правда, разговор наш будет проходить в несколько ином ракурсе.</p>
3
<p>Дело в том, что со сбором стандартных переменных по умолчанию всё предельно ясно. Но что делать, если мы хотим сформировать наши собственные переменные на всех хостах, чтобы в дальнейшем использовать их в нашем коде?</p>
3
<p>Дело в том, что со сбором стандартных переменных по умолчанию всё предельно ясно. Но что делать, если мы хотим сформировать наши собственные переменные на всех хостах, чтобы в дальнейшем использовать их в нашем коде?</p>
4
<p>Для этого существует возможность добавления<strong>Custom facts</strong>, что делается следующим образом: - на любом хосте, контролируемом<strong>Ansible</strong>, создаётся директория<strong>/etc/ansible/facts.d</strong>; - внутри каталога размещаются один либо несколько файлов с расширением<strong>.fact</strong>, например<strong>custom.fact</strong>; - файлы возвращают данные в формате<strong>JSON</strong>, которые и используются модулем для включения в системную информацию, собираемую в начале работы.</p>
4
<p>Для этого существует возможность добавления<strong>Custom facts</strong>, что делается следующим образом: - на любом хосте, контролируемом<strong>Ansible</strong>, создаётся директория<strong>/etc/ansible/facts.d</strong>; - внутри каталога размещаются один либо несколько файлов с расширением<strong>.fact</strong>, например<strong>custom.fact</strong>; - файлы возвращают данные в формате<strong>JSON</strong>, которые и используются модулем для включения в системную информацию, собираемую в начале работы.</p>
5
<p>В качестве примера можно привести команду для сбора даты и времени:</p>
5
<p>В качестве примера можно привести команду для сбора даты и времени:</p>
6
#! / bin / bash DATE = `date` echo" {\ "date \": \ "$ {DATE} \"} "<p>После того, как файлы будут загружены на удалённую машину, они станут доступны в<strong>hostvars.host.ansible_local.custom.fact</strong>. И вместо<strong>custom.fact</strong>вы можете использовать любое имя для файла, допустим,<strong>date_and_time.fact</strong>, если речь идёт о дате и времени.</p>
6
#! / bin / bash DATE = `date` echo" {\ "date \": \ "$ {DATE} \"} "<p>После того, как файлы будут загружены на удалённую машину, они станут доступны в<strong>hostvars.host.ansible_local.custom.fact</strong>. И вместо<strong>custom.fact</strong>вы можете использовать любое имя для файла, допустим,<strong>date_and_time.fact</strong>, если речь идёт о дате и времени.</p>
7
<h2>Автоматическая настройка Custom facts</h2>
7
<h2>Автоматическая настройка Custom facts</h2>
8
<p>Размещать вручную файлы на каждом контролируемом при помощи<strong>Ansible</strong>хосте не очень удобно. В некоторых ситуациях имеет смысл создать специальный плейбук, предполагающий, что у вас есть сценарий<strong>files/custom.fact</strong>, возвращающий некоторый<strong>JSON</strong>:</p>
8
<p>Размещать вручную файлы на каждом контролируемом при помощи<strong>Ansible</strong>хосте не очень удобно. В некоторых ситуациях имеет смысл создать специальный плейбук, предполагающий, что у вас есть сценарий<strong>files/custom.fact</strong>, возвращающий некоторый<strong>JSON</strong>:</p>
9
- 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<p>Однако вышеописанная схема позволит лишь установить<strong>Сustom fact</strong>, но не исполнить его. Ведь вся системная информация загружается модулем<strong>setup</strong>в начале работы. Если же вы хотите использовать переменную в одном и том же плейбуке, достаточно будет ещё раз запустить<strong>setup</strong>, что делается очень просто:</p>
9
- 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<p>Однако вышеописанная схема позволит лишь установить<strong>Сustom fact</strong>, но не исполнить его. Ведь вся системная информация загружается модулем<strong>setup</strong>в начале работы. Если же вы хотите использовать переменную в одном и том же плейбуке, достаточно будет ещё раз запустить<strong>setup</strong>, что делается очень просто:</p>
10
- name: "Re-run setup to use custom facts" setup: ~<p>Пожалуй, это всё, что вам нужно знать об использовании<strong>Custom facts</strong>. Если же хотите ещё больше расширить свои познания в этих вопросах, ждём вас на курсе "DevOps практики и инструменты"!</p>
10
- name: "Re-run setup to use custom facts" setup: ~<p>Пожалуй, это всё, что вам нужно знать об использовании<strong>Custom facts</strong>. Если же хотите ещё больше расширить свои познания в этих вопросах, ждём вас на курсе "DevOps практики и инструменты"!</p>
11
<p><em>По материалам https://medium.com/@jezhalford/ansible-custom-facts-1e1d1bf65db8.</em></p>
11
<p><em>По материалам https://medium.com/@jezhalford/ansible-custom-facts-1e1d1bf65db8.</em></p>
12
12