Используйте переменную внутри 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'