Используйте переменную внутри json_query в ansible/jinja

Я пытаюсь зациклить пользовательский словарь в ansible, чтобы проверить некоторые точки монтирования на сервере linux, и я немного затрудняюсь с поиском правильного решения, найдите сейчас под моей книгой воспроизведения:

- name: Check lvm devs
  hosts: localhost
  vars:
    vg_os: vg_root
    fs_configuration: 
       - /:
           lvm_device: "/dev/mapper/{{ vg_os }}-lv_root"
           lvm_size: 8589934592
       - /var:
           lvm_device: "/dev/mapper/{{ vg_os }}-lv_var"
           lvm_size: 6442450944
       - /var/crash:
           lvm_device: "/dev/mapper/{{ vg_os }}-lv_crash"
           lvm_size: 6442450944
       - test:
           lvm_device: "/dev/mapper/{{ vg_os }}-lv_crash"
           lvm_size: 6442450944
  tasks:
  - name: Debug dict
    debug:
      msg: "{{ fs_configuration }}"   
  - name: Check Dev /
    assert:
      that:  "'{{ item.value.lvm_device }}' == '{{ ansible_mounts | json_query('[?mount == `/` ]  | [0].device') }}'"
    with_dict: "{{ fs_configuration }}"
    when: " item.key == '/' "

Я пытался создать пользовательский цикл для циклической обработки записей словаря и выполнить такую ​​же проверку с меньшим количеством кода, что-то вроде этого

  - name: Check Dev loop
    assert:
      that:  "'{{ item.value.lvm_device }}' == '{{ ansible_mounts | json_query('[?mount == `{{item.key}}` ]  | [0].device') }}'"
    with_dict: "{{ fs_configuration }}"

Но я не могу развернуть переменную внутри json_query ({{item.key}}). Я предполагаю, что есть способ избежать или передать переменную, но я не могу найти решение. Я предпочитаю сделать один цикл вместо написания нескольких задач для проверки всех файловых систем

failed: [localhost] (item={'value': {u'lvm_size': 8589934592, u'lvm_device': u'/dev/mapper/vg_root-lv_root'}, 'key': u'/'}) => {
    **"assertion": "'/dev/mapper/vg_root-lv_root' == ''",**   <-- not working
    "changed": false, 
    "evaluated_to": false, 
    "item": {
        "key": "/", 
        "value": {
            "lvm_device": "/dev/mapper/vg_root-lv_root", 
            "lvm_size": 8589934592
        }
    }
}

Спасибо!

1 ответ

Решение

Вы можете использовать переменную задачи:

  - name: Check Dev loop
    assert:
      that:  "'{{ item.value.lvm_device }}' == '{{ ansible_mounts | json_query(query) }}'"
    with_dict: "{{ fs_configuration }}"
    vars:
      query: '[?mount == `{{ item.key }}` ]  | [0].device'
Другие вопросы по тегам