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

use*_*995 8 ansible

我想比较两个列表 - 一个包含所有可用选项,第二个包含要选择的特定选项。例如,我有两个列表:

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"
Run Code Online (Sandbox Code Playgroud)

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

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

List1:
  - "Test2"
  - "Test3"
Run Code Online (Sandbox Code Playgroud)

我想从 FullList 中获取 List1 中的元素

即我期望

Result:
  - name: "Test2"
    value1: "blsdfsdfasfabla"
    value2: "someothervalue"
  - name: "Test3"
    value1: "sdjfbhsadbfv"
    value2: "someothervalue"
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激!

Vla*_*tka 12

使用过滤器 selectattr在 中进行测试 。例如,

  Result: "{{ FullList|selectattr('name', 'in', List1) }}"
Run Code Online (Sandbox Code Playgroud)

给出了预期的结果

  Result:
    - {name: Test2, value1: blsdfsdfasfabla, value2: someothervalue}
    - {name: Test3, value1: sdjfbhsadbfv, value2: someothervalue}
Run Code Online (Sandbox Code Playgroud)

用于测试的完整剧本示例

- 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
Run Code Online (Sandbox Code Playgroud)


Smi*_*ily 7

请尝试如下打印

  tasks:
  - debug:
     msg : "{{ item }}"
    when: item.name in List1
    loop: "{{FullList}}"

Run Code Online (Sandbox Code Playgroud)

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

  - name: test
    set_fact:
     test: "{{ item }}"
    when: item.name in List1
    loop: "{{FullList}}"
Run Code Online (Sandbox Code Playgroud)