Inventory-группы Ansible

На этой странице мы будем называть группой (или inventory-группой) набор хостов для Ansible inventory. Inventory-группы нужны для того, чтобы разработчик бандлов использовал их в playbooks. Количество и типы inventory-групп зависят от компонентов, определённых с помощью bundle DSL.

Inventory-файл с такими группами генерируется каждый раз, когда ADCM запускает любую операцию (action), задачу (job) или подзадачу (sub job). Сгенерированные inventory-файлы имеют названия inventory.json и находятся в точке монтирования (mount point) вашей файловой системы (обычно /opt/adcm/run/…​). Вы также можете скачать inventory-файл, используя иконку download.

Inventory-группы, которые может сформировать ADCM, описаны ниже.

Основные группы

Эти группы содержат хосты, выбранные по основным признакам.

Группа Описание Тип бандла

CLUSTER

Группа, которая содержит все хосты в кластере, кроме хостов, находящихся в режиме обслуживания

Продуктовый

PROVIDER

Группа, содержащая все хосты, созданные с помощью хостпровайдера

Инфраструктурный

HOST

Группа, содержащая хост, на котором запущена текущая операция (action)

Инфраструктурный

<service name>

Группа, содержащая все хосты, на которые добавлен соответствующий сервис, кроме хостов, находящихся в режиме обслуживания

Продуктовый

<service name>.<component name>

Группа, содержащая все хосты, на которые добавлен соответствующий компонент

Продуктовый

Группы для операций с атрибутом hc_acl

Эти группы генерируются в результате запуска action, у которого определён атрибут hc_acl. Группы названы в соответствии с операциями.

Группа Описание Тип бандла

<service name>.<component name>.add

Группа, содержащая все хосты, которые пользователь выбрал, чтобы добавить соответствующий компонент

Продуктовый

<service name>.<component name>.remove

Группа, содержащая все хосты, которые пользователь выбрал, чтобы удалить соответствующий компонент

Продуктовый

Группа для операций, определённых на хостах

Эта группа содержит хост, на котором был запущен action с атрибутом host_action: true.

Группа Описание Тип бандла

target

Группа, содержащая все хосты, на которых запущены операции

Продуктовый

Группы для режима обслуживания

Эти группы содержат хосты, которые находятся в режиме обслуживания.

Группа Описание Тип бандла

<service name>.maintenance_mode

Группа, содержащая все хосты, на которые добавлен соответствующий сервис, и при этом хосты находятся в режиме обслуживания

Продуктовый

<service name>.<component name>.maintenance_mode

Группа, содержащая все хосты, на которые добавлен соответствующий компонент, и при этом хосты находятся в режиме обслуживания

Продуктовый

CLUSTER.maintenance_mode

Группа, которая содержит все хосты кластера, находящиеся в режиме обслуживания

Продуктовый

Группы для операций special action

Эти группы содержат хосты, на которых запущены операции special action (adcm_turn_on_maintenance_mode, adcm_turn_off_maintenance_mode).

Группа Описание Тип бандла

<service name>.maintenance_mode.off

Группа, содержащая хост, на котором добавлен соответствующий сервис, и при этом хост выводится из режима обслуживания в определённый момент

Продуктовый

<service name>.maintenance_mode.on

Группа, содержащая хост, на котором добавлен соответствующий сервис, и при этом хост переводится в режим обслуживания в определённый момент

Продуктовый

<service name>.<component name>.maintenance_mode.off

Группа, содержащая хост, на котором добавлен соответствующий компонент, и при этом хост выводится из режима обслуживания в определённый момент

Продуктовый

<service name>.<component name>.maintenance_mode.on

Группа, содержащая хост, на котором добавлен соответствующий компонент, и при этом хост переводится в режим обслуживания в определённый момент

Продуктовый

Примеры

Пусть у нас есть кластер, содержащий 4 хоста. Компонент server находится на хосте test-zookeeper-1, а компонент client находится на хосте test-zookeeper-2. Компонент server также находится на хосте test-zookeeper-4, который переведён в режим обслуживания в отдельной группе.

Пусть у нас также есть сервис ZooKeeper, содержащий server и client в качестве компонентов. В сервис входят все хосты, на которых есть компоненты этого сервиса, следовательно, ZooKeeper включает test-zookeeper-1 и test-zookeeper-2.

Мы бы хотели иметь action, который расширяет ZooKeeper на хост test-zookeeper-3. В этом случае файл inventory.json будет выглядеть так, как показано ниже.

{
   "all": {
      "children": {
         "CLUSTER": {
            "hosts": {
               "test-zookeeper-1": {
                 ...
               },
               "test-zookeeper-2": {
                 ...
               },
               "test-zookeeper-3": {
                 ...
               }
            }
         },
         "zookeeper.server": {
            "hosts": {
               "test-zookeeper-1": {
                 ...
               }
            }
         },
         "zookeeper": {
            "hosts": {
               "test-zookeeper-1": {
                 ...
               },
               "test-zookeeper-2": {
                 ...
               }
            }
         },
         "zookeeper.client": {
            "hosts": {
               "test-zookeeper-2": {
                 ...
               }
            }
         },
         "zookeeper.server.add": {
            "hosts": {
               "test-zookeeper-3": {
                 ...
               }
            }
         },
         "zookeeper.server.maintenance_mode": {
            "hosts": {
               "test-zookeeper-4": {
                 ...
               }
            }
         }
      }
   }
}

Пусть теперь у нас есть бандл для хостпровайдера SSH и 2 хоста (ssh-1 и ssh-2), созданные с помощью этого хостпровайдера.

При запуске действия (action) Create users на этом хостпровайдере файл inventory.json будет выглядеть так, как показано ниже.

{
    "all": {
        "children": {
            "PROVIDER": {
                "hosts": {
                    "ssh-1": {
                        ...
                    },
                    "ssh-2": {
                        ...
                    }
                }
            }
        }
    }
}
Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней