Я пытаюсь написать в задачу, когда существует раздел / var. Я использовал переменную assert
- name: Apply patch if /var exist and > 300MB
yum:
name: '*'
state: latest
loop: "{{ ansible_mounts }}"
when: item.mount == "/var" and item.size_available > 300000000
Он должен выйти из строя или пропустить, если / var не существует. Чего не происходит. Подскажите, пожалуйста, как пропустить, если / var не существует
вот что я сделал, чтобы это работало:
---
- name: answer serverfault
hosts: all
become: yes
tasks:
- name: Apply patch if /var exist and > 300MB
debug:
msg:
#- " Data type of 'ansible_facts['mounts'] is {{ ansible_facts['mounts'] | type_debug }} "
- item mount is {{ item.mount }}
- item size_available is {{ item.size_available }}
when: item.mount == "/data" and item.size_available > 300000000
loop: "{{ ansible_facts['mounts'] | flatten(levels=1) }}"
закомментированный раздел фактически показывает вам тип данных, с которым вы имеете дело. В данном случае это список.
Чтобы сгладить список, я использовал "{{ ansible_facts['mounts'] | flatten(levels=1) }}"
поскольку список изначально выглядит примерно так:
"ansible_mounts": [
{
"block_available": 109019876,
"block_size": 4096,
"block_total": 961159932,
"block_used": 852140056,
"device": "/dev/sde1",
"fstype": "ext4",
"inode_available": 243543185,
"inode_total": 164195328,
"inode_used": 513143,
"mount": "/data",
"options": "rw,relatime",
"size_available": 444545412096,
"size_total": 3236911081442,
"uuid": "a35a0282-6eac-132d-abdf-fbea3a835522"
},
Я тестировал playbook на своем /data*
точки монтирования, так как у меня нет сервера с /var
теперь доступно - но работает как положено.
некоторые ссылки: