将 var 传递到 Ansible 中的 selectattr 语句
Passing a var into a selectattr statment in Ansible
我正在遍历字典“aws_ec2_volums_setting”,我试图将循环变量 item.id
传递给“” selectattr" 语句获取符合条件的列表。
- name: Set Filters
set_fact:
snapshot_list: "{{ ec2_snapshot_facts.snapshots | selectattr('volume_id', 'equalto', vars[item.id] ) | list }}"
with_items: "{{ aws_ec2_volums_setting }}"
如果我硬编码它工作正常的值:
- name: Set Filters
set_fact:
snapshot_list: "{{ ec2_snapshot_facts.snapshots | selectattr('volume_id', 'equalto', 'vol-xxxxxxxxx' ) | list }}"
with_items: "{{ aws_ec2_volums_setting }}"
如果我 运行 一个调试命令来检查 var 的值一切看起来都不错
- name: Check Val
debug:
msg: "{{ item.id }}"
with_items: "{{ aws_ec2_volums_setting }}"
输出:
TASK [aws_delete_snapshoot : Set Filters2] ****************************************************************************************
ok: [localhost] => (item={u'vol': u'Vol-01', u'id': u'vol-XXXXXX', u'server': u'us-nv-sat-01'}) => {
"changed": false,
"item": {
"id": "vol-vol-XXXXXX",
"server": "us-nv-sat-01",
"vol": "Vol-01"
},
"msg": "vol-XXXXXX"
}
在我看来,您只需删除 vars[],它应该可以正常工作。将 vars[[=15=]] 更改为 item.id.
尝试:
- name: Set Filters
set_fact:
snapshot_list: "{{ ec2_snapshot_facts.snapshots | selectattr('volume_id', 'equalto', item.id ) | list }}"
with_items: "{{ aws_ec2_volums_setting }}"
我正在遍历字典“aws_ec2_volums_setting”,我试图将循环变量 item.id
传递给“” selectattr" 语句获取符合条件的列表。
- name: Set Filters
set_fact:
snapshot_list: "{{ ec2_snapshot_facts.snapshots | selectattr('volume_id', 'equalto', vars[item.id] ) | list }}"
with_items: "{{ aws_ec2_volums_setting }}"
如果我硬编码它工作正常的值:
- name: Set Filters
set_fact:
snapshot_list: "{{ ec2_snapshot_facts.snapshots | selectattr('volume_id', 'equalto', 'vol-xxxxxxxxx' ) | list }}"
with_items: "{{ aws_ec2_volums_setting }}"
如果我 运行 一个调试命令来检查 var 的值一切看起来都不错
- name: Check Val
debug:
msg: "{{ item.id }}"
with_items: "{{ aws_ec2_volums_setting }}"
输出:
TASK [aws_delete_snapshoot : Set Filters2] ****************************************************************************************
ok: [localhost] => (item={u'vol': u'Vol-01', u'id': u'vol-XXXXXX', u'server': u'us-nv-sat-01'}) => {
"changed": false,
"item": {
"id": "vol-vol-XXXXXX",
"server": "us-nv-sat-01",
"vol": "Vol-01"
},
"msg": "vol-XXXXXX"
}
在我看来,您只需删除 vars[],它应该可以正常工作。将 vars[[=15=]] 更改为 item.id.
尝试:
- name: Set Filters
set_fact:
snapshot_list: "{{ ec2_snapshot_facts.snapshots | selectattr('volume_id', 'equalto', item.id ) | list }}"
with_items: "{{ aws_ec2_volums_setting }}"