Ansible:通过从另一个列表中提取多个属性来创建列表

时间:2017-12-19 11:16:49

标签: list ansible jinja2

我有一个这样的清单:

第一个清单:

volumes:
      - {device_name: '/dev/sda1', volume_type: 'gp2', volume_size: '80', delete_on_termination: true ,os_device_name: '/dev/xvda', mount_path: '/'}
      - {device_name: '/dev/xvdb', volume_type: 'standard', volume_size: '500', delete_on_termination: true, os_device_name: '/dev/xvdb', mount_path: '/data' }

我想创建一个包含以下属性的新列表:

device_name,volume_type,volume_size,delete_on_termination

在一行中看起来像这样:

第二个清单:

volumes:
      - {device_name: /dev/sda1, volume_type: 'gp2', volume_size: '80', delete_on_termination: true}
      - {device_name: '/dev/xvdb', volume_type: 'standard', volume_size: '500', delete_on_termination: true}

为什么吗

我需要使用ec2模块创建一个ec2实例,该模块在同一卷paramer中有几个卷

- name: Create new ec2 instance
  ec2:
    ....
    volumes: "{{volumes}}"
    ....

仅供参考:第二列表按预期工作但我无法找到一种方法来提取我需要的唯一特定属性来自第一个列表

任何想法如何?

1 个答案:

答案 0 :(得分:1)

  

我有这样的字典:

volumes:
      - ...
      - ...

这不是字典,而是列表。

这就是解决方案:

- set_fact:
    volumes: "{{ volumes | json_query(jsonquery) }}"
  vars:
    jsonquery: "[].{device_name: device_name, volume_type: volume_type, volume_size: volume_size, delete_on_termination: delete_on_termination}"