- 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