Как выполнить поиск в переменных в файлах Yaml для моего jinja 2 - PullRequest
1 голос
/ 09 июля 2020

Как мне проверить строку в переменной и вернуть другую часть этой переменной?

У меня есть следующее в моих host_vars

vrfs:
  - { vrf: vrf-sitea, enabled: y,}
  - { vrf: vrf-siteb, enabled: n,}
  - { vrf: vrf-sitec, enabled: y,}
  - { vrf: vrf-sited, enabled: y,}

И я пытаюсь вычислить узнайте, как я ищу строку внутри нее, и когда она совпадает, проверьте, есть ли там y.

Например, если vrf = vrf-siteb, тогда посмотрите, если enabled равно y.

Я хочу иметь возможность сделать vrf-siteb переменной, но не знаю, с чего начать.

Ответы [ 3 ]

2 голосов
/ 09 июля 2020

Вы можете использовать json_query и язык запросов JMESPath для этого:

- hosts: localhost
  gather_facts: no
  
  tasks:
    - debug: 
        msg: "{{ vrfs | json_query('[?enabled == `y`].vrf') }}"
      vars:
        vrfs:
          - { vrf: vrf-sitea, enabled: y,}
          - { vrf: vrf-siteb, enabled: n,}
          - { vrf: vrf-sitec, enabled: y,}
          - { vrf: vrf-sited, enabled: y,}

Дает:

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

TASK [debug] *******************************************************************
ok: [localhost] => {
    "msg": [
        "vrf-sitea",
        "vrf-sitec",
        "vrf-sited"
    ]
}

PLAY RECAP *********************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
1 голос
/ 09 июля 2020

Вы можете использовать фильтры, чтобы получить нужный объект с помощью selectattr, а затем получить значение enabled с помощью map:

{{ vrfs | selectattr('vrf', 'vrf-siteb') | map(attribute='enabled') }}
0 голосов
/ 09 июля 2020

Создать словарь. Например, введите items2dict

    - set_fact:
        vrfs_dict: "{{ vrfs|items2dict(key_name='vrf', value_name='enabled') }}"
    - debug:
        var: vrfs_dict

даст

  vrfs_dict:
    vrf-sitea: y
    vrf-siteb: n
    vrf-sitec: y
    vrf-sited: y

Тогда поиск будет тривиальным. Например,

    - debug:
        var: vrfs_dict['vrf-siteb']

дает

  vrfs_dict['vrf-siteb']: n

Из-за da sh "-" внутри имен ключи не являются допустимыми переменными . В результате формат с точками не может использоваться

    - debug:
        var: vrfs_dict.vrf-siteb

дает

  vrfs_dict.vrf-siteb: VARIABLE IS NOT DEFINED!
...