我正在尝试从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,但它们似乎不符合我的需求。
答案 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的详细用法 希望对你有所帮助。