Интеграция с бандлом

При загрузке нового бандла в ADCM добавляется информация о прототипах на основе описания, указанного в бандле при его разработке. Ниже описаны этапы процесса интеграции ADCM и нового бандла.

Загрузка бандла

При загрузке бандла в ADCM на бэкенд-сервер приходит запрос, который запускает процесс, описанный ниже.

Все файлы бандла распаковываются и помещаются в файловую систему (<adcm container mount point>/bundle/<bundle hash>). При этом каждый бандл распаковывается в соответствующую ему директорию и обладает уникальным хешем. Это позволяет playbook и role разных продуктов не перемешиваться — каждый playbook хранится в соответствующем ему бандле.

После распаковки бандла ADCM обрабатывает (parsing) специальный файл, который называется config.yaml либо config.yml. Этот файл может располагаться в любой директории бандла. Бандл может содержать несколько файлов config.yaml. В этом случае ADCM находит в бандле все файлы с этими именами.

После поиска файлов config.yaml (или config.yml) каждый из этих файлов подвергается обработке. Эта обработка подразумевает создание в ADCM сущностей прототипов на основе описаний, содержащихся в указанных файлах. Таким образом формируются метаданные об объектах ADCM. Происходит взаимодействие бэкенд-сервера с базой данных: в базу данных записываются все описанные прототипы, их action, конфигурации и другая связанная информация.

Схема последовательности для загрузки бандла
Схема последовательности для загрузки бандла
Схема последовательности для загрузки бандла
Схема последовательности для загрузки бандла

Запуск action

Процесс запуска action на объекте ADCM состоит из трех этапов:

Подготовка запуска

После получения запроса на запуск action бэкенд-сервер запрашивает из базы данных метаданные, необходимые для подготовки запуска:

  • правила сопоставления хостов и компонентов (hc_acl);

  • конфигурацию action (config или config_template), если перед запуском требуется запросить у пользователя дополнительные параметры.

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

После подтверждения запуска веб-интерфейс передает запрос на бэкенд-сервер. Бэкенд-сервер получает из базы данных метаданные action, формирует job и сохраняет его в базе данных для последующей обработки, после чего возвращает ответ в веб-интерфейс, который выводит пользователю уведомление о старте job.

Планирование цепочки subjob

Периодически Job Scheduler опрашивает базу данных на наличие новых job. В зависимости от используемых компонентов ADCM планирование и распределение цепочки subjob выполняется по одному из двух сценариев:

  • При использовании Local Executor: Job Scheduler формирует цепочку subjob в базе данных и инициирует их выполнение через Local Executor.

  • При использовании Celery Worker: Job Scheduler формирует внутренний объект Celery Chain Runner и сохраняет его в базе данных. Celery Worker получает этот объект и на его основе формирует цепочку Celery tasks, обеспечивающую последовательное выполнение subjob.

    ПРИМЕЧАНИЕ
    Celery Chain Runner — внутренний механизм ADCM, который преобразует job в цепочку Celery tasks, обеспечивающую последовательное выполнение subjob экземплярами Celery Worker.

Выполнение subjob

Для каждого subjob выполняется стандартный цикл операций:

  1. Подготавливается окружение для запуска Ansible playbook. Процесс включает генерацию inventory-файла, тегов и других параметров. Если используется Celery Worker, на этом этапе Vault дополнительно предоставляет необходимые чувствительные данные и токены.

  2. Запускается Ansible playbook, указанный в свойстве script соответствующего action. Запуск происходит внутри каталога бандла как отдельный процесс в терминологии UNIX. В окружении этого процесса Ansible playbook задействует модули и плагины ADCM для Ansible.

  3. Полученный от Bundle результат выполнения Ansible playbook сохраняется в базе данных, после чего subjob отмечается как завершенный.

После завершения всей цепочки subjob выполнение job считается завершенным. Статус-сервер фиксирует изменение статуса job и передает соответствующее событие в веб-интерфейс по протоколу WebSocket.

Схема последовательности для запуска action с использованием Local Executor
Схема последовательности для запуска action с использованием Local Executor
Схема последовательности для запуска action с использованием Local Executor
Схема последовательности для запуска action с использованием Local Executor
Схема последовательности для запуска action с использованием Celery Worker
Схема последовательности для запуска action с использованием Celery Worker
Схема последовательности для запуска action с использованием Celery Worker
Схема последовательности для запуска action с использованием Celery Worker
Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней