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

问题描述 投票:0回答:1

我有一个这样的列表:

第一个清单:

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}}"
    ....

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

任何想法怎么样?

list ansible jinja2
1个回答
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}"
© www.soinside.com 2019 - 2024. All rights reserved.