Сборный инвентарь#

Сборный инвентарь представляет собой список записей об управляемых узлах, сведения о которых получены путем копирования из обычных инвентарных списков. В этом документе обычные инвентарные списки, из которых копируются данные, называются источниками.

Сборный инвентарь имеет следующие особенности:

  • Для формирования сборного инвентаря требуется хотя бы один источник.

  • Сборный инвентарь хранит копии записей об управляемых узлах и группах управляемых узлов, а не ссылки на них. Это значит, что при обновлении источников сборный инвентарь не обновляется автоматически.

  • Существующие группы узлов импортируются из источника независимо от того, будет ли в них хотя бы один узел после выполнения условий отбора узлов.

  • Новые группы узлов создаются и заполняются автоматически в соответствии с параметрами, заданными в настройках расширения Ansible для работы с инвентарем.

  • Сведения об управляемых узлах копируются в сборный инвентарь при синхронизации. Для первичного заполнения сборного инвентаря ее необходимо запустить вручную.

Фильтрация узлов#

Параметры отбора управляемых узлов задаются в переменных source_vars и limit.

  • source_vars – параметры, определяющие название используемого расширения Ansible и правила его использования.

    Примечание

    Для создания сборного инвентаря в Astra 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.ru
dc2.example.ru      timezone=Novosibirsk
dc3.example.ru      timezone=Chita
dc4.example.ru      timezone=Chita        env=testing

[rubackup]
rb1.example.ru
rb2.example.ru
rb3.example.ru      timezone=Chita
rb4.example.ru                            env=testing

[clients]
client1.example.ru
client2.example.ru
client3.example.ru  timezone=Novosibirsk
client4.example.ru                        env=testing
client5.example.ru  timezone=Novosibirsk  env=testing
client6.example.ru  timezone=Chita
client7.example.ru  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"
    
  • limittimezone_is_moscow:&env_is_testing.

Пример 2#

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

  • окружение не тестовое;

  • не входит в группу rubackup.

В этом случае параметры сборного инвентаря можно задать следующим образом:

  • source_vars:

    ---
    plugin: ansible.builtin.constructed
    strict: true
    groups:
      env_is_not_testing: env | default("production") != "testing"
    
  • limitenv_is_not_testing:!rubackup