В анзибле у меня есть список таких слов, как:

- { name: "a" }
- { name: "b", cond: true }

Я хотел бы извлечь список имен, когда cond не определено или false (1), а также список, когда cond истинно или не определено (2):

1 => [ 'a' ]
2 => [ 'a', 'b' ]

Как это сделать? Я не нашел.

Благодарность

0
Raoul Debaze 21 Дек 2018 в 00:13

1 ответ

Лучший ответ

Вы можете сделать это с помощью фильтра json_query:

---
- hosts: localhost
  gather_facts: false
  vars:
    mylist:
      - name: a
      - name: b
        cond: true

  tasks:
    - set_fact:
        true_or_unset: "{{ mylist|json_query('[?cond == null || cond].[name]') }}"
        false_or_unset: "{{ mylist|json_query('[?cond == null || !cond].[name]') }}"

    - debug:
        msg:
          true_or_unset: "{{ true_or_unset }}"
          false_or_unset: "{{ false_or_unset }}"

Что производит:

PLAY [localhost] ******************************************************************************

TASK [set_fact] *******************************************************************************
ok: [localhost]

TASK [debug] **********************************************************************************
ok: [localhost] => {
    "msg": {
        "false_or_unset": [
            [
                "a"
            ]
        ], 
        "true_or_unset": [
            [
                "a"
            ], 
            [
                "b"
            ]
        ]
    }
}

PLAY RECAP ************************************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0   
1
larsks 20 Дек 2018 в 21:24