Ansible - 检查项目是否在列表中

8

我希望对比两个列表-一个包含所有可用选项,另一个包含要选择的特定选项。

例如,我有两个列表:

FullList:
  - name: "Test1"
    value1: "blabla123"
    value2: "someothervalue"
  - name: "Test2"
    value1: "blsdfsdfasfabla"
    value2: "someothervalue"
  - name: "Test3"
    value1: "sdjfbhsadbfv"
    value2: "someothervalue"
  - name: "Test4"
    value1: "sdjkfnsjkf"
    value2: "sdjkfnsjkf"

它包含所有可用元素及其属性。

而我有第二个列表,其中包含特定的键来从完整列表中选择项。

List1:
  - "Test2"
  - "Test3"

我希望从FullList中获取与List1相同的元素。
即,我期望获得:
Result:
  - name: "Test2"
    value1: "blsdfsdfasfabla"
    value2: "someothervalue"
  - name: "Test3"
    value1: "sdjfbhsadbfv"
    value2: "someothervalue"

任何帮助都将不胜感激!
2个回答

11
使用filter selectattrtest in。例如,
  Result: "{{ FullList|selectattr('name', 'in', List1) }}"

给出了预期的结果
  Result:
    - {name: Test2, value1: blsdfsdfasfabla, value2: someothervalue}
    - {name: Test3, value1: sdjfbhsadbfv, value2: someothervalue}

Example of a complete playbook for testing

- hosts: all
  
  vars:

    FullList:
      - {name: Test1, value1: blabla123, value2: someothervalue}
      - {name: Test2, value1: blsdfsdfasfabla, value2: someothervalue}
      - {name: Test3, value1: sdjfbhsadbfv, value2: someothervalue}
      - {name: Test4, value1: sdjkfnsjkf, value2: sdjkfnsjkf}      
    List1: [Test2, Test3]

    Result: "{{ FullList|selectattr('name', 'in', List1) }}"

  tasks:

    - debug:
        var: Result|to_yaml
      run_once: true

非常感谢您,弗拉基米尔! - user41995

6
请按照以下步骤尝试打印:
  tasks:
  - debug:
     msg : "{{ item }}"
    when: item.name in List1
    loop: "{{FullList}}"

要保存到变量中,请按以下方式使用

  - name: test
    set_fact:
     test: "{{ item }}"
    when: item.name in List1
    loop: "{{FullList}}"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接