[ English | Indonesia | русский | English (United Kingdom) | Deutsch ]

Формирование inventory

Скрипт, который создает inventory, находится в inventory/dynamic_inventory.py и устанавливается в ansible-runtime virtualenv как openstack-ansible-inventory.

В этом разделе объясняется, как Ansible выполняет inventory и как можно запустить ее вручную, чтобы увидеть ее поведение.

Выполнение скрипта dynamic_inventory.py вручную

При запуске команды Ansible (например, ansible, ansible-playbook или openstack-ansible) Ansible автоматически выполняет скрипт dynamic_inventory.py и использует его вывод в качестве inventory.

Выполните следующую команду:

# from the root folder of cloned OpenStack-Ansible repository
inventory/dynamic_inventory.py --config /etc/openstack_deploy/

Скрипт динамического inventory также устанавливается внутри virtualenv как скрипт. Так что в качестве альтернативы вы можете запустить следующее:

source /opt/ansible-runtime/bin/activate
openstack-ansible-inventory --config /etc/openstack_deploy/

Этот вызов полезен при тестировании изменений в скрипте динамического inventory.

Вводные

openstack-ansible-inventory принимает аргумент --config для каталога, содержащего конфигурацию, из которой создается inventory. Если не указано иное, по умолчанию используется /etc/openstack_deploy/.

В дополнение к этому аргументу, базовый скелет среды предоставляется в каталоге inventory/env.d кодовой базы OpenStack-Ansible.

Если каталог env.d будет найден в каталоге, указанном с --config, его содержимое будет добавлено в базовую среду, перезаписав любое предыдущее содержимое в случае конфликтов.

Примечание

Во всех версиях до 2024.2, этим аргументом был --file.

В каталоге конфигурации должен присутствовать следующий файл:

  • openstack_user_config.yml

Кроме того, конфигурация или среда могут быть распределены между двумя дополнительными подкаталогами:

  • conf.d

  • env.d (для настройки среды)

Скрипт динамического inventory выполняет следующие действия:

  • Генерирует имена каждого контейнера, который запускает службу

  • Создает сопоставления контейнеров и IP-адресов

  • Назначает контейнеры физическим хостам

В качестве примера рассмотрим следующий отрывок из openstack_user_config.yml:

identity_hosts:
  infra01:
    ip: 10.0.0.10
  infra02:
    ip: 10.0.0.11
  infra03:
    ip: 10.0.0.12

Словарь identity_hosts определяет группу inventory Ansible с именем identity_hosts, содержащую три хоста infra. Файл конфигурации inventory/env.d/keystone.yml определяет дополнительные группы inventory Ansible для контейнеров, которые развернуты на трех хостах, названных с префиксом infra.

Обратите внимание, что любые службы, отмеченные is_metal: true, будут работать на выделенном физическом хосте, а не в контейнере. Пример использования is_metal: true см. в inventory/env.d/cinder.yml в разделе container_skel.

Более подробную информацию см. в разделе Настройка inventory.

Выводы

После выполнения скрипт выведет файл openstack_inventory.json в каталог, указанный с помощью аргумента --config. Он используется как источник истины для повторных запусков.

Предупреждение

Файл openstack_inventory.json является источником истины для среды. Удаление этого в производственной среде означает, что часть UUID имен контейнеров будет сгенерирована заново, что затем приведет к созданию новых контейнеров. Контейнеры, сгенерированные в предыдущей версии, больше не будут распознаваться Ansible, даже если они доступны по SSH.

Та же структура JSON выводится в stdout, который используется Ansible в качестве inventory для плейбуков.

Проверка конфигурации inventory на наличие ошибок

Использование флага --check при запуске openstack-ansible-inventory запустит процесс создания inventory и выполнит поиск известных ошибок, но не запишет какие-либо файлы на диск.

Если в среде не найдены какие-либо группы, определенные в файлах openstack_user_config.yml или conf.d, будет выдано предупреждение.

Эта проверка не выполняет проверку синтаксиса YAML, хотя и завершится неудачей в случае обнаружения не поддающихся анализу ошибок.

Написание отладочных журналов

Параметр --debug/-d позволяет записывать подробный файл журнала для отладки поведения скрипта inventory. Вывод записывается в inventory.log в текущем рабочем каталоге.

Файл inventory.log добавляется, а не перезаписывается.

Как и --check, этот флаг не вызывается при запуске из ansible.

Выполнение с tox

В некоторых случаях вам может понадобиться сгенерировать inventory на локальных машинах оператора после изменения файлов openstack_user_config.yml или env.d/conf.d. Учитывая, что у вас уже есть каталог openstack_deploy на такой машине, вы можете создать файл tox.ini в этом каталоге со следующим содержимым:

[tox]
envlist = generate_inventory

[testenv]
skip_install = True
usedevelop = True
allowlist_externals =
    bash

[testenv:generate_inventory]
basepython = python3
deps = -rhttps://opendev.org/openstack/openstack-ansible/raw/branch/master/requirements.txt
install_command =
    pip install -c https://releases.openstack.org/constraints/upper/master {packages} -e git+https://opendev.org/openstack/openstack-ansible@master\#egg=openstack-ansible
commands =
    openstack-ansible-inventory --config {toxinidir}/openstack_deploy

Затем вы можете выполнить команду для создания inventory с помощью tox:

tox -e generate_inventory

В результате вы получите обновленный openstack_user_config.json. Вы также можете использовать этот метод для проверки действительности inventory.