我有一些这样的任务:
- ec2_asg_facts:
region: us-west-2
tags:
Name: my-asg
register: asg
- set_fact:
current_lc: "{{ asg.results | map(attribute='launch_configuration_name') | first }}"
instances: "{{ asg.results | map(attribute='instances') | flatten | list }}"
- set_fact:
instances_to_rotate: "{{ instances | rejectattr('launch_configuration_name', 'equalto', current_lc) | list }}"
问题是,如果实例的启动配置被删除(当我将 ASG 的启动配置更新为新配置但尚未终止旧实例时,通常会出现这种情况)launch_configuration_name
属性丢失,因此第三个任务失败,并显示消息'dict object' has no attribute 'launch_configuration_name'
。如何过滤掉 instances
列表中 launch_configuration_name
属性不等于 current_lc
或具有 launch_configuration_name
的项目> 属性缺失?
最佳答案
答案是分两遍进行过滤;首先过滤掉属性未定义的项目,然后过滤掉属性不等于current_lc
的项目。
- set_fact:
instances_to_rotate: "{{ instances | rejectattr('launch_configuration_name', 'undefined') | rejectattr('launch_configuration_name', 'equalto', current_lc) | list }}"
关于amazon-ec2 - Ansible jinja 过滤掉属性不等于或属性缺失的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54081464/