[ 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.