将var传递到Ansible中的selectattr语句

将var传递到Ansible中的selectattr语句,ansible,jinja2,ansible-2.x,Ansible,Jinja2,Ansible 2.x,我正在循环执行dict aws_ec2_volums_设置,并尝试将循环变量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_volu

我正在循环执行dict aws_ec2_volums_设置,并尝试将循环变量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[]就可以了。将变量[item.id]更改为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 }}"