Spec-Zone.ru › Ansible

Работа с динамической инвентаризацией

  • Пример скрипта инвентаризации: Cobbler
  • Другие скрипты инвентаризации
  • Использование каталогов инвентаризации и нескольких источников инвентаризации
  • Статические группы динамических групп

Если ваша инвентаризация Ansible со временем меняется, а узлы запускаются и останавливаются в ответ на потребности бизнеса, описанные в Как создать инвентаризацию статические решения для инвентаризации не удовлетворят ваши потребности. Возможно, вам потребуется отслеживать узлы из нескольких источников: облачных провайдеров, LDAP, Cobbler и/или корпоративных систем CMDB.

Ansible объединяет все эти возможности с помощью внешней системы динамической инвентаризации. Ansible поддерживает два способа подключения к внешней инвентаризации: плагины инвентаризации и inventory scripts.

Плагины инвентаризации используют самые последние обновления кода Ansible Core. Для динамической инвентаризации мы рекомендуем плагины вместо скриптов. Вы можете написать собственный плагин для подключения к дополнительным источникам динамической инвентаризации.

При желании вы по-прежнему можете использовать скрипты инвентаризации. При реализации плагинов инвентаризации мы обеспечили обратную совместимость с помощью плагина инвентаризации скриптов. В приведенных ниже примерах показано, как использовать скрипты инвентаризации.

Если для работы с динамической инвентаризацией вы предпочитаете графический интерфейс, база данных инвентаризации в AWX или Red Hat Ansible Automation Platform синхронизируется со всеми источниками динамической инвентаризации, предоставляет веб-доступ и доступ через REST к результатам, а также графический редактор инвентаризации. Благодаря записям обо всех узлах в базе данных вы можете сопоставлять историю предыдущих событий и видеть, на каких узлах возникали сбои при последнем запуске плейбуков.

Пример скрипта инвентаризации: Cobbler

Ansible без проблем интегрируется с Cobbler — сервером установки Linux, первоначально написанным Майклом Дехааном и ныне развиваемым Джеймсом Каммаратой, который работает в Ansible.

Хотя Cobbler в первую очередь используется для запуска установки ОС и управления DHCP и DNS, в нем есть универсальный уровень, который может представлять данные для нескольких систем управления конфигурацией (даже одновременно) и служить «легковесной CMDB».

Чтобы связать инвентаризацию Ansible с Cobbler, скопируйте этот скрипт в /etc/ansible и chmod +x файл. Запускайте cobblerd каждый раз при использовании Ansible и указывайте параметр командной строки -i (например, -i /etc/ansible/cobbler.py), чтобы взаимодействовать с Cobbler через XMLRPC API Cobbler.

Добавьте файл cobbler.ini в /etc/ansible, чтобы Ansible знал, где находится сервер Cobbler, и мог использовать некоторые улучшения кэширования. Например:

[cobbler]

# Set Cobbler's hostname or IP address
host = http://127.0.0.1/cobbler_api

# API calls to Cobbler can be slow. For this reason, we cache the results of an API
# call. Set this to the path you want cache files to be written to. Two files
# will be written to this directory:
#   - ansible-cobbler.cache
#   - ansible-cobbler.index

cache_path = /tmp

# The number of seconds a cache file is considered valid. After this many
# seconds, a new API call will be made, and the cache file will be updated.

cache_max_age = 900

Сначала проверьте скрипт, запустив непосредственно /etc/ansible/cobbler.py. Вы должны увидеть вывод с данными JSON, но пока он может быть пустым.

Рассмотрим, что происходит. В Cobbler предположим сценарий, примерно похожий на следующий:

cobbler profile add --name=webserver --distro=CentOS6-x86_64
cobbler profile edit --name=webserver --mgmt-classes="webserver" --ksmeta="a=2 b=3"
cobbler system edit --name=foo --dns-name="foo.example.com" --mgmt-classes="atlanta" --ksmeta="c=4"
cobbler system edit --name=bar --dns-name="bar.example.com" --mgmt-classes="atlanta" --ksmeta="c=5"

В приведенном выше примере к системе «foo.example.com» можно обратиться напрямую из Ansible, а также по именам групп «webserver» или «atlanta». Поскольку Ansible использует SSH, он подключается к системе foo только по адресу «foo.example.com», а не просто «foo». Аналогично, если попытаться выполнить «ansible foo», система не будет найдена… но команда «ansible ‘foo*’» сработает, поскольку DNS-имя системы начинается с «foo».

Скрипт предоставляет не только сведения об узлах и группах. Кроме того, в качестве бонуса при запуске модуля «setup» (это происходит автоматически при использовании плейбуков) переменные «a», «b» и «c» будут автоматически подставлены в шаблоны:

# file: /srv/motd.j2
Welcome, I am templated with a value of a={{ a }}, b={{ b }}, and c={{ c }}

Это можно выполнить следующим образом:

ansible webserver -m setup
ansible webserver -m template -a "src=/tmp/motd.j2 dest=/etc/motd"

Примечание

Название «webserver» поступило из Cobbler, как и переменные для файла конфигурации. Вы по-прежнему можете передавать собственные переменные обычным способом в Ansible, но переменные из внешнего скрипта инвентаризации переопределят переменные с такими же именами.

Итак, с приведенным выше шаблоном (motd.j2) в /etc/motd для системы «foo» будут записаны следующие данные:

Welcome, I am templated with a value of a=2, b=3, and c=4

А для системы «bar» (bar.example.com):

Welcome, I am templated with a value of a=2, b=3, and c=5

И хотя для этого нет веских причин, технически сработает и такой вариант:

ansible webserver -m ansible.builtin.shell -a "echo {{ a }}"

Иными словами, эти переменные можно использовать и в аргументах/действиях.

Другие скрипты инвентаризации

В Ansible 2.10 и более поздних версиях скрипты инвентаризации были перенесены в соответствующие коллекции. Многие из них теперь находятся в репозитории ansible-community/contrib-scripts. Вместо них мы рекомендуем использовать плагины инвентаризации.

Использование каталогов инвентаризации и нескольких источников инвентаризации

Если путь, переданный в -i в Ansible, указывает на каталог (или это задано в ansible.cfg), Ansible может одновременно использовать несколько источников инвентаризации. В этом случае в одном запуске Ansible можно сочетать динамические и статически управляемые источники инвентаризации. Мгновенное гибридное облако!

В каталоге инвентаризации исполняемые файлы рассматриваются как источники динамической инвентаризации, а большинство остальных файлов — как статические источники. Игнорируются файлы, оканчивающиеся на любое из следующих значений:

~, .orig, .bak, .ini, .cfg, .retry, .pyc, .pyo

Этот список можно заменить собственным, задав список inventory_ignore_extensions в ansible.cfg или установив переменную среды ANSIBLE_INVENTORY_IGNORE. В обоих случаях значение должно представлять собой список шаблонов, разделенных запятыми, как показано выше.

Все подкаталоги group_vars и host_vars в каталоге инвентаризации интерпретируются ожидаемым образом, что делает каталоги инвентаризации удобным способом организации различных наборов конфигураций. Дополнительные сведения см. в разделе Передача нескольких источников инвентаризации.

Статические группы динамических групп

При определении групп групп в статическом файле инвентаризации дочерние группы также должны быть определены в статическом файле инвентаризации, иначе Ansible вернет ошибку. Если вы хотите определить статическую группу динамических дочерних групп, задайте динамические группы в статическом файле инвентаризации как пустые. Например:

[tag_Name_staging_foo]

[tag_Name_staging_bar]

[staging:children]
tag_Name_staging_foo
tag_Name_staging_bar

См. также

Как создать инвентаризацию

Все о статических файлах инвентаризации

Общение

Есть вопросы? Нужна помощь? Хотите поделиться идеями? Посетите руководство по общению сообщества Ansible

© 2012–2018 Michael DeHaan
© 2018–2025 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/projects/ansible/latest/inventory_guide/intro_dynamic_inventory.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API