如何根据库存中的价值在Ansible上设置事实

时间:2020-06-12 02:26:11

标签: ansible jinja2

我的库存看起来像这样

host:
    vars:
        fruit:
            - {type: melon, id: 1}
            - {type: apple, id: 2}

目前,我曾经像下面那样获得ID

list: >-
   {{groups['host']|map('extract',hostvars,'fruits')|first}} 

- set_fact:
    fruit_id: "{{list[2].id}}"

如何通过使用等于apple的类型获取id值?

1 个答案:

答案 0 :(得分:2)

任务

    - debug:
        msg: "{{ list|
                 selectattr('type', '==', 'apple')|
                 map(attribute='id')|
                 list|first }}"

给予

    "msg": "2"

循环中的同一任务

    - debug:
        msg: "{{ list|
                 selectattr('type', '==', item)|
                 map(attribute='id')|
                 list|first }}"
      loop:
        - melon
        - apple

给予

    "msg": "1"
    "msg": "2"