Ansible条件匹配

时间:2016-05-27 16:15:35

标签: amazon-ec2 ansible ansible-playbook ansible-2.x

我正在尝试从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,但它们似乎不符合我的需求。

1 个答案:

答案 0 :(得分:1)

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

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的详细用法 希望对你有所帮助。