来自复杂结构的 Ansible 查找值?
Ansible lookup values from complex structure?
我正在编写 Ansible 剧本,其中我使用 ec2_vpc_subnet_facts
在 VPC 中注册有关子网的事实,例如:
- ec2_vpc_subnet_facts:
region: "{{ ec2_region }}"
filters:
vpc-id: "{{ vpc.vpc.id }}"
register: vpc_subnet_facts
从而取回如下结构(删除了不相关的属性):
"vpc_subnet_facts": {
"changed": false,
"subnets": [
{
...
"id": "subnet-0bb50753",
...
"tags": {
"Name": "mytag1"
},
...
},
{
...
"id": "subnet-0bb50754",
...
"tags": {
"Name": "mytag2"
},
...
}
]
}
稍后在剧本中,当创建 EC2 实例时,想法是根据 ec2
模块 vpc_subnet_id
属性的标记值查找子网 ID,即 mytag1
查找关联子网 ID subnet-0bb50753
.
我目前的方法是使用 ec2_vpc_subnet_facts
结果中的 set_facts
创建一个 tag => subnet-ID
字典,但我对替代方法很感兴趣。
此致,奥拉
selectattr 神社过滤器是你的朋友:
- debug: msg="{{ (vpc_subnet_facts.subnets | selectattr('tags.Name','equalto','mytag1') | first).id }}"
这里做了什么:从 vpc_subnet_facts.subnets
中创建一个元素子集,其中 tags.Name=='mytag1'
,取第一个元素,取 id
字段。
我正在编写 Ansible 剧本,其中我使用 ec2_vpc_subnet_facts
在 VPC 中注册有关子网的事实,例如:
- ec2_vpc_subnet_facts:
region: "{{ ec2_region }}"
filters:
vpc-id: "{{ vpc.vpc.id }}"
register: vpc_subnet_facts
从而取回如下结构(删除了不相关的属性):
"vpc_subnet_facts": {
"changed": false,
"subnets": [
{
...
"id": "subnet-0bb50753",
...
"tags": {
"Name": "mytag1"
},
...
},
{
...
"id": "subnet-0bb50754",
...
"tags": {
"Name": "mytag2"
},
...
}
]
}
稍后在剧本中,当创建 EC2 实例时,想法是根据 ec2
模块 vpc_subnet_id
属性的标记值查找子网 ID,即 mytag1
查找关联子网 ID subnet-0bb50753
.
我目前的方法是使用 ec2_vpc_subnet_facts
结果中的 set_facts
创建一个 tag => subnet-ID
字典,但我对替代方法很感兴趣。
此致,奥拉
selectattr 神社过滤器是你的朋友:
- debug: msg="{{ (vpc_subnet_facts.subnets | selectattr('tags.Name','equalto','mytag1') | first).id }}"
这里做了什么:从 vpc_subnet_facts.subnets
中创建一个元素子集,其中 tags.Name=='mytag1'
,取第一个元素,取 id
字段。