Я пытаюсь добавить дополнительные security_groups к моим существующим ec2_ENI. Модуль ec2_eni кажется не идемпотентным. Когда я добавляю новую группу безопасности с помощью модуля ec2_eni, она удаляет существующие группы и добавляет только группу, которую я упомянул в книге игр.
Таким образом, оставленный мне вариант - получить существующие ec2_eni_facts и обновить его как факт. Проблема этого подхода заключается в том, что значения поступают во вложенные массивы, как показано в примере ниже. Как получить группы безопасности в одиночку как факт?
Ansible версия 2.5.1
Playbook:
---
- hosts: ansiblecontroller
gather_facts: false
connection: local
user: root
tasks:
- ec2_eni_facts:
filters:
network-interface-id: "eni-xxxxxxxxxxxx"
register: enifacts
- debug: msg="{{ enifacts }}"
- name: set empty list
set_fact:
name1: "ENI1"
grouplist: []
fact1: []
parthas: []
security_groups: []
- name: set empty list
set_fact:
fact1: "{{ enifacts | json_query('network_interfaces[*].groups[*]') }}"
grouplist: "{{ grouplist }} + [ '{{ name1 }}' ]"
- debug: msg="{{ grouplist }}"
- debug: msg="{{ fact1 }}"
Result:
TASK [debug] ************************************************************************************************************************************************
ok: [10.21.10.155] => {
"msg": "[u'ENI1'] + [ '[[{u'group_id': u'sg-0bf33819021de5d15', u'group_name': u'default'}, {u'group_id': u'sg-008569a91671d5090', u'group_name': u'Lab4-INTRA-VPC-Subnet-Traffic'}]]' ]"
}
TASK [debug] ************************************************************************************************************************************************
ok: [10.21.10.155] => {
"msg": [
[
{
"group_id": "sg-0bf33819021de5d15",
"group_name": "default"
},
{
"group_id": "sg-008569a91671d5090",
"group_name": "Lab4-INTRA-VPC-Subnet-Traffic"
}
]
]
}