Ansible条件匹配

Ansible conditional matching

我正在尝试从 ec2 库存信息列表中过滤出一部分信息。在这种情况下,符合特定条件的子网列表:

- name: Get the VPC ID
  ec2_vpc_subnet_facts:
    region: "{{ aws_region }}"
  register: subnet_facts

- debug: "var=subnet_facts.subnets"

- debug: "var={{ item }}"
  with_items: "{{ subnet_facts.subnets }}"
  when: "'Public Subnet' in item.tags.Name"
  register: public_subnets

不幸的是,我收到错误消息:

"The conditional check ''Public Subnet' in item.tags.Name' failed. The error was: error while evaluating conditional ('Public Subnet' in item.tags.Name): 'item' is undefined"

这是根据条件筛选信息列表的最佳方式吗?

我查看了 Ansible Filters,但它们似乎不符合我的需求。

我遇到了完全相同的问题,我已经编写了一个非常小的插件来解决它。这是该插件的代码:

from jinja2.utils import soft_unicode

'''
USAGE:
 - debug:
     msg: "{{ vpc.subnets | get_public_subnets_ids('Type','Public') }}"
'''

class FilterModule(object):
    def filters(self):
        return {
            'get_public_subnets_ids': get_public_subnets_ids,
        }

def get_public_subnets_ids(list, tag_key, tag_value):
    subnets_ids = []
    for item in list:
        for key, value in item['resource_tags'].iteritems():
            if key == tag_key and value == tag_value:
                subnets_ids.append(item['id'])

    return subnets_ids

你可以找到这个插件的详细用法here 希望对你有帮助。