Объединение словарей в Ansible на основе определенного значения ключа - PullRequest
0 голосов
/ 15 февраля 2019

Я пытаюсь создать Ansible playbook, который вернул бы несколько экземпляров EC2 в заданное состояние, сохраненных в виде изображения.Каждый экземпляр уникален.Я хотел бы сделать это, основываясь исключительно на тегах AWS в качестве начальной информации, поэтому он будет работать для любого набора экземпляров.

Поток будет следующим:

  1. Makeубедитесь, что у каждого компонента есть тег (tag1), указывающий, к какому набору экземпляров он будет принадлежать.Еще один тег (tag2) для указания на конкретный экземпляр - db01, web01 и т. Д.
  2. Отключение сетевых интерфейсов - я буду их использовать.
  3. Завершить все запущенные экземпляры.Сетевые интерфейсы останутся.

Пока все просто, и я сделал это с помощью модулей ec2_eni и ec2.Самое сложное это:

Получите список всех сетевых интерфейсов и всех изображений, принадлежащих к набору, и сопоставьте их два по два на основе значения tag2.

Итак, я получаю наборы, подобные этому:

- name: Gather network interface facts
  ec2_eni_facts:
    filters:
      subnet-id: subnet-xxxxxxxxxx
      "tag:tag1": "{{ SID }}"
  register: discovered_eni_facts

- name: facts
  vars:
  set_fact:
    names: "{{ discovered_eni_facts | json_query('network_interfaces[*].[id, tag_set.tag2]') }}"

Output:

     [["eni-11111111111111111",
     "WBH dbmr"],
     ["eni-22222222222222222",
      "WBH dbw1r"],
     ["eni-33333333333333333",
      "WBH dbw1"],
     ["eni-44444444444444444",
      "WBS"],
     ["eni-55555555555555555",
      "WBH dbm"]]

Как я могу создать один список / словарь, который будет содержать как идентификатор AMI, так и идентификатор ENI на основе значения тега name?Примерно так:

     [["eni-11111111111111111",
       "ami-11111111111111111",
       "WBH dbmr"],
     ........]

Я совершенно новичок как в Ansible, так и в Python, поэтому может быть что-то очевидное, что мне не хватает.Я просмотрел документацию по фильтрам Ansible и циклы.Я также попытался начать с пустого файла с правильной структурой, а затем постепенно заполнять его, используя json_modify, как показано здесь: лучший способ изменить json в ansible

Но я попал в ту же проблему -не может сопоставить данные правильно.Я не знаю заранее, сколько экземпляров я работаю, поэтому я не могу сделать это один за другим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...