В Ansible можно определить три типа настраиваемых фактов.
1) Глобальные факты: Эти факты доступны с каждого хоста в вашем файле инвентаризации.
2) Групповые факты: Эти факты доступны только из определенного набора хостов или группы хостов.
3) Факты о хосте: Эти факты доступны только с определенного хоста.
В этой статье я покажу вам, как работать с пользовательскими фактами Ansible. Итак, приступим.
Предпосылки:
Если вы хотите попробовать примеры из этой статьи,
1) На вашем компьютере должен быть установлен Ansible.
2) У вас должно быть не менее 6 хостов Linux, настроенных для автоматизации Ansible.
На LinuxHint есть много статей, посвященных установке Ansible и настройке хостов для автоматизации Ansible. Вы можете проверить их при необходимости.
Настройка каталога проекта:
Прежде чем мы начнем, давайте создадим каталог проекта, чтобы мы могли организовать файлы нашего проекта.
Чтобы создать каталог проекта таможенные факты / в твоей ДОМ каталог, выполните следующую команду:
$ mkdir -pv custom -acts / playbooks, host_vars, group_vars
Теперь перейдите к таможенные факты / каталог следующим образом:
$ cd custom -acts /
Создайте файл конфигурации Ansible анзибль.cfg в каталоге вашего проекта следующим образом:
$ нано доступный.cfg
Введите следующие строки: анзибль.cfg файл.
[по умолчанию]inventory = hosts
host_key_checking = Ложь
Когда вы закончите, нажмите
Теперь создайте файл инвентаризации Ansible хозяева в каталоге вашего проекта следующим образом:
$ nano хосты
Введите следующие строки в свой хозяин инвентарный файл.
vm1.нодекит.комvm2.нодекит.ком
[Интернет]
vm3.нодекит.ком
vm4.нодекит.ком
[база данных]
vm [5: 6].нодекит.ком
Когда вы закончите, нажмите
Чтобы перечислить все доступные хосты в вашем файле инвентаризации, выполните следующую команду:
$ ansible all --list-hostsКак видите, у меня в инвентаре шесть хостов.
Чтобы перечислить хосты, доступные в сеть группу вашего файла инвентаря, выполните следующую команду:
$ ansible web - список-хостовКак видите, у меня два хоста (vm3.нодекит.ком а также vm4.нодекит.ком) в сеть группа моего инвентарного файла.
Чтобы перечислить хосты, доступные в база данных группу вашего файла инвентаря, выполните следующую команду:
База данных $ ansible --list-hostsКак видите, у меня два хоста (vm5.нодекит.ком а также vm6.нодекит.ком) в база данных группа моего инвентарного файла.
Работа с Ansible Global Facts:
В этом разделе я покажу вам, как определить глобальные факты / переменные Ansible в вашем файле инвентаря и получить к ним доступ из ваших сборников пьес Ansible. Я также покажу вам, как определять глобальные факты / переменные в отдельном файле.
Сначала откройте хозяин файл инвентаризации с помощью следующей команды:
$ nano хосты
Теперь добавьте отмеченные строки в свой хозяин инвентарный файл. Когда вы закончите, нажмите
'
Вы добавляете глобальные факты в все: vars раздел. Здесь я добавил web_url глобальный факт.
Теперь создайте новую пьесу print_global_fact.ямл в пьесы / каталог следующим образом:
$ nano playbooks / print_global_fact.ямл
Затем введите следующие строки в print_global_fact.ямл файл.
- хосты: всепользователь: ansible
задачи:
- name: вывести значение глобального факта 'web_url'
отлаживать:
msg: 'Веб-URL: web_url'
Цель этого пособия - напечатать web_url глобальный факт.
Когда вы закончите, нажмите
Теперь запустите print_global_fact.ямл playbook следующим образом:
$ ansible-playbook плейбуки / print_global_fact.ямл
Как видите, все хосты в моем файле инвентаризации имеют доступ к глобальному факту web_url.
Вы также можете добавить глобальные факты в отдельный файл. Таким образом, вы можете сохранить файл инвентаря в чистоте. Посмотрим, как это сделать.
Во-первых, давайте удалим глобальные факты из хозяин инвентарный файл.
$ nano хосты
Теперь удалите отмеченные строки из файла инвентаря и нажмите
Затем создайте новый файл все в group_vars / каталог следующим образом:
$ nano group_vars / все
Чтобы добавить глобальный факт web_url, введите следующую строку в group_vars / все файл.
web_url: https: // www.linuxhint.комКогда вы закончите, нажмите
Чтобы проверить, можете ли вы получить доступ к глобальному факту web_url, запустить print_global_fact.ямл playbook снова следующим образом:
$ ansible-playbook плейбуки / print_global_fact.ямл
Как видите, все хосты в моем файле инвентаризации имеют доступ к глобальному факту web_url.
Работа с фактами группы Ansible:
В этом разделе я собираюсь показать вам, как определить факты / переменные группы Ansible в вашем файле инвентаря и получить к ним доступ из ваших сценариев Ansible. Я также покажу вам, как определить групповые факты / переменные в отдельном файле.
Сначала откройте хозяин файл инвентаризации с помощью следующей команды:
$ nano хосты
Если у вас есть группа хостов группа 1, затем вы добавляете групповые факты / переменные для этой группы хостов в group1: vars раздел вашего инвентарного файла.
[группа 1]…
[группа1: vars]
переменная1 = значение1
переменная2 = значение2
Например, чтобы добавить групповые факты / переменные доменное имя а также database_backends для сеть группу хостов, вы можете ввести отмеченные строки в вашем файле инвентаризации.
Когда вы закончите, нажмите
Чтобы распечатать и проверить, можем ли мы получить доступ к фактам группы, создайте новую книгу print_group_facts.ямл в пьесы / каталог следующим образом:
$ nano playbooks / print_group_facts.ямл
Введите следующие строки в свой print_group_facts.ямл файл.
- хосты: сетьпользователь: ansible
задачи:
- name: Распечатать групповые факты
отлаживать:
msg: 'Имя домена: domain_name Серверная часть базы данных: database_backend'
Когда вы закончите, нажмите
Теперь запустите print_group_facts.ямл playbook следующим образом:
$ ansible-playbook плейбуки / print_group_facts.ямл
Как видите, хосты в сеть группа может получить доступ к доменное имя а также database_backend группировать факты / переменные.
Теперь давайте очистим файл инвентаризации и посмотрим, как добавить групповые факты / переменные в отдельный файл.
Сначала откройте хозяин файл инвентаризации следующим образом:
Факты о $ nano
Удалите отмеченные линии из хозяин инвентарный файл. Когда вы закончите, нажмите
Поскольку мы добавляем групповые переменные для сеть группа хостов, создайте новый файл сеть (то же, что и название группы) в group_vars / каталог следующим образом:
$ nano group_vars / сеть
Чтобы добавить групповые факты доменное имя а также database_backend для сеть группу узлов, добавьте следующие строки в group_vars / сеть файл.
имя_домена: Интернет.linuxhint.комdatabase_backend: pgsql
Когда вы закончите, нажмите
Чтобы проверить, есть ли в сеть группа может получить доступ к фактам группы, запустить print_group_facts.ямл playbook следующим образом:
$ ansible-playbook плейбуки / print_group_facts.ямл
Как видите, хосты в сеть группа может получить доступ к доменное имя а также database_backend группировать факты / переменные.
Факты о работе с Ansible Host:
В этом разделе я покажу вам, как определить факты / переменные хоста Ansible в вашем файле инвентаря и получить к ним доступ из ваших сценариев Ansible. Я также покажу вам, как определить факты / переменные хоста в отдельном файле.
Сначала откройте хозяин файл инвентаризации с помощью следующей команды:
$ nano хосты
Вы можете добавить факты / переменные хоста после DNS-имени или IP-адреса хоста в вашем файле инвентаризации следующим образом:
www.домен1.com переменная1 = значение1 переменная2 = значение2192.168.22.2 переменная1 = значение3 переменная2 = значение4
Например, вы можете добавить факты / переменные хоста доменное имя а также database_backend для хозяев vm3.нодекит.ком а также vm4.нодекит.ком, как отмечено на скриншоте ниже.
Обратите внимание, что значение доменное имя а также database_backend факты / переменные разные для каждого хоста.
Когда вы закончите добавлять факты / переменные хоста, нажмите
Поскольку я добавил те же факты / переменные, что и в примере групповых фактов / переменных, мы можем использовать print_group_facts.ямл учебник для проверки доступности этих фактов / переменных.
Запустить print_group_facts.ямл playbook следующим образом:
$ ansible-playbook плейбуки / print_group_facts.ямл
Как видите, факты / переменные хоста доступны для их указанного хоста. Значения также разные для каждого хоста.
Поскольку каждый из хостов находится в отдельной строке в моем файле инвентаризации, я мог легко добавить факты / переменные хоста в свой файл инвентаря. Но если вы используете диапазоны для определения хостов в вашем файле инвентаризации, как отмечено на скриншоте ниже, вы не можете добавлять такие факты / переменные хоста.
Вы можете добавить факты / переменные хоста в отдельный файл, как вы это делали для глобальных и групповых фактов / переменных.
Чтобы добавить факты / переменные хоста для vm5.нодекит.ком хост, создайте новый файл vm5.нодекит.ком (то же, что и DNS-имя хоста) в host_vars / каталог следующим образом:
$ nano host_vars / vm5.нодекит.ком
Вы можете добавить факты / переменные хоста db_port а также db_name для хозяина vm5.нодекит.ком со следующими строками.
db_port: 3306db_name: demo1
Когда вы закончите, нажмите
Таким же образом, чтобы добавить факты / переменные хоста для хоста vm6.нодекит.ком, создать новый файл vm6.нодекит.ком в host_vars / каталог следующим образом:
$ нано host_vars / vm6.нодекит.ком
Вы можете добавить факты / переменные хоста db_port а также db_name для хозяина vm6.нодекит.ком со следующими строками.
db_port: 8877db_name: app1
Когда вы закончите, нажмите
Чтобы распечатать и проверить, можем ли мы получить доступ к фактам / переменным хоста, создайте новую книгу print_host_facts.ямл в пьесы / каталог следующим образом:
$ nano playbooks / print_host_facts.ямл
Теперь введите следующие строки в print_host_facts.ямл файл.
- хосты: база данныхпользователь: ansible
задачи:
- name: Распечатать факты о хосте
отлаживать:
msg: 'Имя базы данных: db_name Порт базы данных: db_port'
Когда вы закончите, нажмите
Чтобы проверить, vm5.нодекит.ком а также vm6.нодекит.ком может получить доступ к фактам / переменным хоста, запустите print_host_facts.ямл playbook следующим образом:
плейбуки $ ansible-playbook / print_host_facts.ямл
Как видите, хозяева vm5.нодекит.ком а также vm6.нодекит.ком может получить доступ к db_name а также db_port факты / переменные хоста.
Собираем все вместе: приоритет Ansible Facts
В этом разделе я собираюсь поговорить о приоритете фактов / переменных в Ansible. Итак, приступим.
Прежде чем мы начнем, давайте очистим файл инвентаря.
Открой хозяин файл инвентаризации с помощью следующей команды:
$ nano хосты
Удалите отмеченный раздел из инвентарного файла.
Вот как должен выглядеть ваш файл инвентаря на этом этапе.
Теперь добавьте отмеченную строку в свой файл инвентаря. Эти строки добавляют глобальные факты / переменные fact_scope а также порт.
Затем добавьте отмеченные строки в свой файл инвентаря. Эти строки добавляют fact_scope а также порт факты / переменные для хостов в база данных группа.
Наконец, добавьте fact_scope а также порт факты / переменные хоста для vm3.нодекит.ком а также vm4.нодекит.ком хосты, как отмечено на скриншоте ниже.
Когда вы закончите, нажмите
Чтобы распечатать значение глобальных, групповых и основных фактов / переменных, создайте новую книгу воспроизведения fact_precendence.ямл в пьесы / каталог следующим образом:
$ nano playbooks / fact_precedence.ямл
Введите следующие строки в fact_precedence.ямл файл.
- хосты: всепользователь: ansible
задачи:
- имя: Распечатать все факты
отлаживать:
msg: 'Fact Scope: fact_scope Порт: port'
Когда вы закончите, нажмите
Чтобы распечатать глобальные, групповые и основные факты / переменные, запустите fact_precedence.ямл playbook следующим образом:
playbooks $ ansible-playbook / fact_precedence.ямл
Как видите, глобальные, групповые и основные факты / переменные печатаются.
Обратите внимание, что групповые факты / переменные заменили глобальные факты / переменные (1). Также обратите внимание, что основные факты / переменные заменили как групповые, так и глобальные факты / переменные (2).
Приоритет фактов / переменных в Ansible следующий:
Факт организатора> Факт группы> Глобальный фактЗаключение:
После прочтения этой статьи вы сможете комфортно работать с глобальными, групповыми и хостовыми фактами / переменными Ansible. Помните приоритет пользовательских фактов Ansible. Это поможет вам легче отлаживать свои пьесы на Ansible.