Веб-Сервисы Amazon — Динамическая Инвентаризация Ansible/Aws — Как Создавать Группы На Основе Тегов?

  • Автор темы Kapriz0n
  • Обновлено
  • 20, Oct 2024
  • #1

Я пытаюсь создавать собственные группы на основе тегов. Я использую этот документ в качестве ссылки: https://docs.ansible.com/ansible/latest/plugins/inventory.html#inventory-plugins

В качестве базовой линии в моем файле aws_ec2.yaml мои keyed_groups настроены следующим образом:

 
 
 
 
 @all:

|--@aws_ec2:

|  |--ec2-12-345-678-901.compute-1.amazonaws.com

|  |--ec2-98-765-432-10.compute-1.amazonaws.com

|  |--...

|--@development:

|  |--ec2-12-345-678-901.compute-1.amazonaws.com

|  |--ec2-98-765-432-10.compute-1.amazonaws.com

|--@tag_Name_ECS_Instance:

|  |--ec2-98-765-432-10.compute-1.amazonaws.com

|--@tag_Name_Test_Server:

|  |--ec2-12-345-678-901.compute-1.amazonaws.com

|--@ungrouped
 

Когда я запускаю ansible-inventory --graph, я вижу следующие группы тегов:

keyed_groups: - key: tags prefix: tag - key: placement.region prefix: aws_region groups: test: "'environment' in (tags|list)"

Теперь я хочу создать группы хостов на основе приведенных выше тегов согласно документации.

Из документации я вижу, что они настроили это так:

keyed_groups: # add hosts to tag_Name_value groups for each aws_ec2 host's tags.Name variable - key: tags.Name prefix: tag_Name_ separator: "" groups: # add hosts to the group development if any of the dictionary's keys or values is the word 'devel' development: "'devel' in (tags|list)"

Я хочу сделать то же самое для моего aws_ec2.yaml и соответствующих тегов, поэтому пытаюсь эмулировать пример следующим образом:

Мои keyed_groups и группы, которые мне нужны:

@all: |--@aws_ec2: -hostname -hostname -etc. |--@aws_region_us_west_2: -hostname -hostname -etc. |--@tag_Name_dev: -hostname -hostname -etc. |--@tag_environment_qa: -hostname -hostname -etc.

Когда я запускаю ansible-inventory --graph, я вижу, что группа @test создана, и нужный мне хост входит в созданную мной группу «test». Но я не могу подключить под ним несколько хостов. Мне нужно несколько хостов в группе, как в примере:

- key: tags prefix: tag - key: placement.region prefix: aws_region

Как я могу получить yaml своего инвентаря для создания этих групп, как в примере? И некоторые теги работают, а другие нет. Каковы для этого правила? Каков синтаксис сопоставления шаблонов? В комментарии к документу для групп говорится "# добавить хосты в группу разработки, если какой-либо из ключей или значений словаря является словом 'devel'"

В документе упоминается: «Если какой-либо из ключей или значений является словом «развить»». Так может ли мой шаблон содержать слово, которое я ищу, или оно должно быть точным совпадением?

Кроме того, что означает "(теги|список)" синтаксис означает? Я пробовал методом проб и ошибок пробовать разные совпадения с шаблонами, но это не сработало. я пробовал

В документе упоминается: «Если у хоста нет переменных в конфигурации выше (другими словами, tags.Name, tags, Private_ip_address), хост не будет добавлен в группы, кроме тех, которые создает плагин инвентаризации, и переменная хоста ansible_host не будет быть изменены».

Но у моих хостов есть переменные в конфигурации выше, то есть они содержат соответствующие теги и значение Private_ip_address, как показано в ansible-inventory --graph. Поэтому хосты следует добавить в созданную мной пользовательскую группу.

Есть идеи, как заставить это работать? Мне действительно нужно, чтобы это работало в моей среде. Спасибо.

#amazon-web-services #ansible #amazon-ec2 #linux #ansible-inventory

Kapriz0n


Рег
14 Jun, 2011

Тем
72

Постов
211

Баллов
581
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно