Сборный инвентарь#
Сборный инвентарь представляет собой список записей об управляемых узлах, сведения о которых получены путем копирования из обычных инвентарных списков. В этом документе обычные инвентарные списки, из которых копируются данные, называются источниками.
Сборный инвентарь имеет следующие особенности:
Для формирования сборного инвентаря требуется хотя бы один источник.
Сборный инвентарь хранит копии записей об управляемых узлах и группах управляемых узлов, а не ссылки на них. Это значит, что при обновлении источников сборный инвентарь не обновляется автоматически.
Существующие группы узлов импортируются из источника независимо от того, будет ли в них хотя бы один узел после выполнения условий отбора узлов.
Новые группы узлов создаются и заполняются автоматически в соответствии с параметрами, заданными в настройках расширения Ansible для работы с инвентарем.
Сведения об управляемых узлах копируются в сборный инвентарь при синхронизации. Для первичного заполнения сборного инвентаря ее необходимо запустить вручную.
Фильтрация узлов#
Параметры отбора управляемых узлов задаются в переменных source_vars
и limit
.
source_vars
– параметры, определяющие название используемого расширения Ansible и правила его использования.Примечание
Для создания сборного инвентаря в Automation Controller используется расширение Ansible ansible.builtin.constructed.
limit
– правила выборки записей из существующих или временных групп управляемых узлов, сформированных при обработке значения переменнойsource_vars
.
В самом простом случае сборный инвентарь формируется путем копирования сведений обо всех управляемых узлах из источников.
Значение переменной source_vars
в этом случае задается следующим образом:
---
plugin: ansible.builtin.constructed
Здесь plugin
– переменная, в которой указывается название расширения Ansible, используемого для работы с инвентарем.
Это обязательная запись, значение которой должно быть равно ansible.builtin.constructed
или constructed
.
Примечание
Рекомендуется использовать полное название расширения – ansible.builtin.constructed
.
В настройки фильтрации может быть добавлен логический параметр strict
, значения которого интерпретируются следующим образом:
true
– считать любую ошибку обработки сведений об управляемых узлах критической и останавливать создание или обновление сборного инвентарного списка;false
– пропускать управляемые узлы, при обработке сведений о которых возникли ошибки.
Примеры#
В рассматриваемых далее примерах в качестве источника используются следующий инвентарь:
[controllers]
dc1.example.com
dc2.example.com timezone=Novosibirsk
dc3.example.com timezone=Chita
dc4.example.com timezone=Chita env=testing
[rubackup]
rb1.example.com
rb2.example.com
rb3.example.com timezone=Chita
rb4.example.com env=testing
[clients]
client1.example.com
client2.example.com
client3.example.com timezone=Novosibirsk
client4.example.com env=testing
client5.example.com timezone=Novosibirsk env=testing
client6.example.com timezone=Chita
client7.example.com timezone=Chita env=testing
Здесь:
controllers
– группа узлов контроллера домена;rubackup
– узлы кластера RuBackup;clients
– клиенты домена;timezone
– часовой пояс, в котором физически находится управляемый узел;env
– окружение, к которому относится управляемый узел.
Пример 1#
Пусть необходимо сформировать сборный инвентарь, узлы которого отбираются по следующим признакам:
часовой пояс не задан или равен
Moscow
;окружение тестовое.
В этом случае параметры сборного инвентаря можно задать следующим образом:
source_vars
:--- plugin: ansible.builtin.constructed strict: true groups: timezone_is_moscow: timezone | default("Moscow") == "Moscow" env_is_testing: env | default("production") == "testing"
limit
–timezone_is_moscow:&env_is_testing
.
Пример 2#
Пусть необходимо сформировать сборный инвентарь, узлы которого отбираются по следующим признакам:
окружение не тестовое;
не входит в группу
rubackup
.
В этом случае параметры сборного инвентаря можно задать следующим образом:
source_vars
:--- plugin: ansible.builtin.constructed strict: true groups: env_is_not_testing: env | default("production") != "testing"
limit
–env_is_not_testing:!rubackup