Ansible

Как использовать Ansible Custom Facts

Как использовать Ansible Custom Facts
Факты похожи на переменные в Ansible. Ansible генерирует множество фактов в зависимости от хоста, который он автоматизирует. Если вам нужно, вы также можете определить пользовательские факты / переменные в Ansible.

В 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 = Ложь

Когда вы закончите, нажмите + Икс с последующим Y а также чтобы спасти анзибль.cfg конфигурационный файл.

Теперь создайте файл инвентаризации Ansible хозяева в каталоге вашего проекта следующим образом:

$ nano хосты

Введите следующие строки в свой хозяин инвентарный файл.

vm1.нодекит.ком
vm2.нодекит.ком
[Интернет]
vm3.нодекит.ком
vm4.нодекит.ком
[база данных]
vm [5: 6].нодекит.ком

Когда вы закончите, нажмите + Икс с последующим Y а также чтобы спасти хозяева инвентарный файл.

Чтобы перечислить все доступные хосты в вашем файле инвентаризации, выполните следующую команду:

$ ansible all --list-hosts

Как видите, у меня в инвентаре шесть хостов.

Чтобы перечислить хосты, доступные в сеть группу вашего файла инвентаря, выполните следующую команду:

$ ansible web - список-хостов

Как видите, у меня два хоста (vm3.нодекит.ком а также vm4.нодекит.ком) в сеть группа моего инвентарного файла.

Чтобы перечислить хосты, доступные в база данных группу вашего файла инвентаря, выполните следующую команду:

База данных $ ansible --list-hosts

Как видите, у меня два хоста (vm5.нодекит.ком а также vm6.нодекит.ком) в база данных группа моего инвентарного файла.

Работа с Ansible Global Facts:

В этом разделе я покажу вам, как определить глобальные факты / переменные Ansible в вашем файле инвентаря и получить к ним доступ из ваших сборников пьес Ansible. Я также покажу вам, как определять глобальные факты / переменные в отдельном файле.

Сначала откройте хозяин файл инвентаризации с помощью следующей команды:

$ nano хосты

Теперь добавьте отмеченные строки в свой хозяин инвентарный файл. Когда вы закончите, нажмите + Икс с последующим Y а также сохранить файл.

'

Вы добавляете глобальные факты в все: vars раздел. Здесь я добавил web_url глобальный факт.

Теперь создайте новую пьесу print_global_fact.ямл в пьесы / каталог следующим образом:

$ nano playbooks / print_global_fact.ямл

Затем введите следующие строки в print_global_fact.ямл файл.

- хосты: все
пользователь: ansible
задачи:
- name: вывести значение глобального факта 'web_url'
отлаживать:
msg: 'Веб-URL: web_url'

Цель этого пособия - напечатать web_url глобальный факт.

Когда вы закончите, нажмите + Икс с последующим Y а также чтобы спасти print_global_fact.ямл файл.

Теперь запустите print_global_fact.ямл playbook следующим образом:

$ ansible-playbook плейбуки / print_global_fact.ямл

Как видите, все хосты в моем файле инвентаризации имеют доступ к глобальному факту web_url.

Вы также можете добавить глобальные факты в отдельный файл. Таким образом, вы можете сохранить файл инвентаря в чистоте. Посмотрим, как это сделать.

Во-первых, давайте удалим глобальные факты из хозяин инвентарный файл.

$ nano хосты

Теперь удалите отмеченные строки из файла инвентаря и нажмите + Икс, с последующим Y а также сохранить файл инвентаря.

Затем создайте новый файл все в group_vars / каталог следующим образом:

$ nano group_vars / все

Чтобы добавить глобальный факт web_url, введите следующую строку в group_vars / все файл.

web_url: https: // www.linuxhint.ком

Когда вы закончите, нажмите + Икс с последующим Y а также чтобы спасти group_vars / все файл.

Чтобы проверить, можете ли вы получить доступ к глобальному факту 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 для сеть группу хостов, вы можете ввести отмеченные строки в вашем файле инвентаризации.

Когда вы закончите, нажмите + Икс с последующим Y а также сохранить файл инвентаря.

Чтобы распечатать и проверить, можем ли мы получить доступ к фактам группы, создайте новую книгу print_group_facts.ямл в пьесы / каталог следующим образом:

$ nano playbooks / print_group_facts.ямл

Введите следующие строки в свой print_group_facts.ямл файл.

- хосты: сеть
пользователь: ansible
задачи:
- name: Распечатать групповые факты
отлаживать:
msg: 'Имя домена: domain_name Серверная часть базы данных: database_backend'

Когда вы закончите, нажмите + Икс с последующим Y а также чтобы спасти print_group_facts.ямл файл.

Теперь запустите print_group_facts.ямл playbook следующим образом:

$ ansible-playbook плейбуки / print_group_facts.ямл

Как видите, хосты в сеть группа может получить доступ к доменное имя а также database_backend группировать факты / переменные.

Теперь давайте очистим файл инвентаризации и посмотрим, как добавить групповые факты / переменные в отдельный файл.

Сначала откройте хозяин файл инвентаризации следующим образом:

Факты о $ nano

Удалите отмеченные линии из хозяин инвентарный файл. Когда вы закончите, нажмите + Икс с последующим Y а также чтобы спасти хозяева инвентарный файл.

Поскольку мы добавляем групповые переменные для сеть группа хостов, создайте новый файл сеть (то же, что и название группы) в group_vars / каталог следующим образом:

$ nano group_vars / сеть

Чтобы добавить групповые факты доменное имя а также database_backend для сеть группу узлов, добавьте следующие строки в group_vars / сеть файл.

имя_домена: Интернет.linuxhint.ком
database_backend: pgsql

Когда вы закончите, нажмите + Икс с последующим Y а также чтобы спасти group_vars / сеть файл.

Чтобы проверить, есть ли в сеть группа может получить доступ к фактам группы, запустить print_group_facts.ямл playbook следующим образом:

$ ansible-playbook плейбуки / print_group_facts.ямл

Как видите, хосты в сеть группа может получить доступ к доменное имя а также database_backend группировать факты / переменные.

Факты о работе с Ansible Host:

В этом разделе я покажу вам, как определить факты / переменные хоста Ansible в вашем файле инвентаря и получить к ним доступ из ваших сценариев Ansible. Я также покажу вам, как определить факты / переменные хоста в отдельном файле.

Сначала откройте хозяин файл инвентаризации с помощью следующей команды:

$ nano хосты

Вы можете добавить факты / переменные хоста после DNS-имени или IP-адреса хоста в вашем файле инвентаризации следующим образом:

www.домен1.com переменная1 = значение1 переменная2 = значение2
192.168.22.2 переменная1 = значение3 переменная2 = значение4

Например, вы можете добавить факты / переменные хоста доменное имя а также database_backend для хозяев vm3.нодекит.ком а также vm4.нодекит.ком, как отмечено на скриншоте ниже.

Обратите внимание, что значение доменное имя а также database_backend факты / переменные разные для каждого хоста.

Когда вы закончите добавлять факты / переменные хоста, нажмите + Икс, с последующим Y а также чтобы спасти хозяин инвентарный файл.

Поскольку я добавил те же факты / переменные, что и в примере групповых фактов / переменных, мы можем использовать 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: 3306
db_name: demo1

Когда вы закончите, нажмите + Икс с последующим Y а также чтобы спасти vm5.нодекит.ком файл.

Таким же образом, чтобы добавить факты / переменные хоста для хоста vm6.нодекит.ком, создать новый файл vm6.нодекит.ком в host_vars / каталог следующим образом:

$ нано host_vars / vm6.нодекит.ком

Вы можете добавить факты / переменные хоста db_port а также db_name для хозяина vm6.нодекит.ком со следующими строками.

db_port: 8877
db_name: app1

Когда вы закончите, нажмите + Икс с последующим Y а также чтобы спасти vm6.нодекит.ком файл.

Чтобы распечатать и проверить, можем ли мы получить доступ к фактам / переменным хоста, создайте новую книгу print_host_facts.ямл в пьесы / каталог следующим образом:

$ nano playbooks / print_host_facts.ямл

Теперь введите следующие строки в print_host_facts.ямл файл.

- хосты: база данных
пользователь: ansible
задачи:
- name: Распечатать факты о хосте
отлаживать:
msg: 'Имя базы данных: db_name Порт базы данных: db_port'

Когда вы закончите, нажмите + Икс с последующим Y а также чтобы спасти print_host_facts.ямл файл.

Чтобы проверить, 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.нодекит.ком хосты, как отмечено на скриншоте ниже.

Когда вы закончите, нажмите + Икс с последующим Y а также сохранить файл инвентаря.

Чтобы распечатать значение глобальных, групповых и основных фактов / переменных, создайте новую книгу воспроизведения fact_precendence.ямл в пьесы / каталог следующим образом:

$ nano playbooks / fact_precedence.ямл

Введите следующие строки в fact_precedence.ямл файл.

- хосты: все
пользователь: ansible
задачи:
- имя: Распечатать все факты
отлаживать:
msg: 'Fact Scope: fact_scope Порт: port'

Когда вы закончите, нажмите + Икс с последующим Y а также чтобы спасти fact_precedence.ямл файл.

Чтобы распечатать глобальные, групповые и основные факты / переменные, запустите fact_precedence.ямл playbook следующим образом:

playbooks $ ansible-playbook / fact_precedence.ямл

Как видите, глобальные, групповые и основные факты / переменные печатаются.

Обратите внимание, что групповые факты / переменные заменили глобальные факты / переменные (1). Также обратите внимание, что основные факты / переменные заменили как групповые, так и глобальные факты / переменные (2).

Приоритет фактов / переменных в Ansible следующий:

Факт организатора> Факт группы> Глобальный факт

Заключение:

После прочтения этой статьи вы сможете комфортно работать с глобальными, групповыми и хостовыми фактами / переменными Ansible. Помните приоритет пользовательских фактов Ansible. Это поможет вам легче отлаживать свои пьесы на Ansible.

Лучшие игры с командной строкой для Linux
Командная строка - не только ваш главный союзник при использовании Linux - она ​​также может быть источником развлечений, потому что вы можете использ...
Лучшие приложения для сопоставления геймпадов для Linux
Если вам нравится играть в игры на Linux с помощью геймпада вместо стандартной системы ввода с клавиатуры и мыши, для вас есть несколько полезных прил...
Полезные инструменты для геймеров Linux
Если вам нравится играть в игры на Linux, скорее всего, вы использовали приложения и утилиты, такие как Wine, Lutris и OBS Studio, для улучшения игров...