我正在尝试创建一个Ansible剧本,该剧本会将多个EC2实例恢复为给定状态,并保存为图像。每个实例都是唯一的。我想仅基于AWS标签作为开始信息来执行此操作,因此它适用于任何实例集。
流程如下:
到目前为止,这很简单,我已经使用ec2_eni和ec2模块完成了它。 困难的部分是这样:
所以我得到这样的设置:
- 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 ID又包含ENI ID的列表/词典?像这样:
[["eni-11111111111111111",
"ami-11111111111111111",
"WBH dbmr"],
........]
我对Ansible和Python还是很陌生,所以可能有些明显的东西我不见了。 我遍历了Ansible过滤器文档以及循环。我还尝试过从结构正确的空文件开始,然后使用json_modify逐渐填充它,如下所示:best way to modify json in ansible
但是我遇到了同样的问题-无法正确匹配数据。我事先不知道我正在处理多少个实例,因此无法一一完成。