根据特定键值组合Ansible中的字典

时间:2019-02-15 12:34:43

标签: amazon-ec2 ansible

我正在尝试创建一个Ansible剧本,该剧本会将多个EC2实例恢复为给定状态,并保存为图像。每个实例都是唯一的。我想仅基于AWS标签作为开始信息来执行此操作,因此它适用于任何实例集。

流程如下:

  1. 确保每个组件都有一个标记(tag1),该标记指示其所属的实例集。指向特定实例的另一个标签(tag2)-db01,web01等。
  2. 分离网络接口-我将重用这些接口。
  3. 终止所有正在运行的实例。网络接口将保留。

到目前为止,这很简单,我已经使用ec2_eni和ec2模块完成了它。 困难的部分是这样:

  1. 获取所有网络接口和属于该集合的所有图像的列表,并根据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 ID又包含ENI ID的列表/词典?像这样:

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

我对Ansible和Python还是很陌生,所以可能有些明显的东西我不见了。 我遍历了Ansible过滤器文档以及循环。我还尝试过从结构正确的空文件开始,然后使用json_modify逐渐填充它,如下所示:best way to modify json in ansible

但是我遇到了同样的问题-无法正确匹配数据。我事先不知道我正在处理多少个实例,因此无法一一完成。

0 个答案:

没有答案