Как получить вложенную переменную в шаблоне? - PullRequest
0 голосов
/ 25 сентября 2019

Как получить переменную, которая вложена, как показано ниже:

mongoservers:
- mongo_master: dev_01
  label: mongomaster dev01
  urls:
    - mongomaster01.dev.local.net
    - mongomaster02.dev.local.net
- mongo_master: dev_02
  label: mongomaster dev02
  urls:
    - mongomaster.dev03.local.net
    - mongomaster.dev04.local.net

Я хочу получить доступ к URL-адресам в переменной из вышеупомянутого yaml, мое условие, если mongoservers.mongo_master равно dev01 Я хочу получитьвсе URL, принадлежащие ему.

1 Ответ

2 голосов
/ 25 сентября 2019

Вы можете отфильтровать и запросить свой список хэшей с помощью json_query.Прочитайте jmespath doc , чтобы понять язык запросов

В следующем примере книги воспроизведения я использую следующий запрос:

[?mongo_master=='dev_01'].urls[]

, который можно объяснитьas

Для каждого элемента входящего списка, имеющего элемент mongo_master, равный dev_01, выберите элемент urls внутри него и, наконец, сгладьте список

Вот полный пример игровой книги:

---
- name: Filter list
  hosts: localhost
  gather_facts: false

  vars:
    mongoservers:
    - mongo_master: dev_01
      label: mongomaster dev01
      urls:
        - mongomaster01.dev.local.net
        - mongomaster02.dev.local.net
    - mongo_master: dev_02
      label: mongomaster dev02
      urls:
        - mongomaster.dev03.local.net
        - mongomaster.dev04.local.net

  tasks:
    - name: filter
      vars:
        query: >-
          [?mongo_master=='dev_01'].urls[]
      debug:
        msg: "{{ mongoservers | json_query(query) | list }}"

, который дает:

PLAY [Filter list] ********************************************************************************************************************************************************************************************************

TASK [filter] *************************************************************************************************************************************************************************************************************
Wednesday 25 September 2019  17:57:39 +0200 (0:00:00.039)       0:00:00.039 *** 
ok: [localhost] => {
    "msg": [
        "mongomaster01.dev.local.net",
        "mongomaster02.dev.local.net"
    ]
}

PLAY RECAP ****************************************************************************************************************************************************************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
...