将 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 }}"