Сборный инвентарь#
Сборный инвентарь представляет собой список записей об управляемых узлах, сведения о которых получены путем копирования из обычных инвентарных списков. В этом документе обычные инвентарные списки, из которых копируются данные, называются источниками.
Сборный инвентарь имеет следующие особенности:
Для формирования сборного инвентаря требуется хотя бы один источник.
Сборный инвентарь хранит копии записей об управляемых узлах и группах управляемых узлов, а не ссылки на них. Это значит, что при обновлении источников сборный инвентарь не обновляется автоматически.
Существующие группы узлов импортируются из источника независимо от того, будет ли в них хотя бы один узел после выполнения условий отбора узлов.
Новые группы узлов создаются и заполняются автоматически в соответствии с параметрами, заданными в настройках расширения Ansible для работы с инвентарем.
Сведения об управляемых узлах копируются в сборный инвентарь при синхронизации. Для первичного заполнения сборного инвентаря ее необходимо запустить вручную.
Фильтрация узлов#
Параметры отбора управляемых узлов задаются в переменных source_vars и limit.
source_vars– параметры, определяющие название используемого расширения Ansible и правила его использования.Примечание
Для создания сборного инвентаря в Automation Controller используется расширение Ansible ansible.builtin.constructed.
limit– правила выборки записей из существующих или временных групп управляемых узлов, сформированных при обработке значения переменнойsource_vars.Важно
Для использования параметра
limitтребуется версия контроллера не ниже1.0-upd2и версия среды исполнения Control Plane Execution Environment не ниже0.5.1.
В самом простом случае сборный инвентарь формируется путем копирования сведений обо всех управляемых узлах из источников.
Значение переменной 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