Necesito ayuda con este libro de jugadas. Utilizo el módulo de afirmación para afirmar que el espacio en disco es inferior al 30% y envío una notificación de inactividad con el mensaje de error. El módulo de afirmación recorre todos los FS en el servidor (alrededor de 10 FS). El mensaje enviado en Slack no fue el esperado. Lo que intento lograr es mostrar solo el elemento fallido en el bucle. Mostrar solo el mensaje del elemento fallido de afirmación.
tasks:
- name:
assert:
that: "{{ item.size_available > item.size_total | float * 0.30 }}"
msg: "Filesystem: {{ item.mount }} has less than 30% space. Consider increasing the FS size"
#success_msg: "Filesystem: {{ item.mount }} has more than 30% space. No action required"
register: fs_space
loop: "{{ ansible_mounts }}"
loop_control:
label: ""
ignore_errors: true
- debug:
msg: "HOST {{ ansible_hostname }}: {{ fs_space.results | json_query('[*].msg') }}
when: true in fs_space.results | json_query('[*].failed')
El resultado final se ve así:
HOST XYZ: [u'All assertions passed', u'All assertions passed', u'All assertions passed', u'All assertions passed', u'All assertions passed', u'Filesystem: /usr has less than 30% space. Consider increasing the FS size', u'All assertions passed', u'All assertions passed', u'All assertions passed', u'All assertions passed']
Pero necesito que el mensaje sea solo este:
HOST XYZ: Filesystem: /usr has less than 30% space. Consider increasing the FS size'
Respuesta1
P:"Quiero que la tarea finalice si algún punto de montaje no cumple con la afirmación."
R: Simplifica la condición. Por ejemplo
shell> cat playbook.yml
- hosts: localhost
vars:
my_mounts: [500, 600,700]
tasks:
- assert:
that: mounts_all == mounts_ok
vars:
mounts_all: "{{ my_mounts|length }}"
mounts_ok: "{{ my_mounts|select('gt', 400)|length }}"
da
TASK [assert] ******************************************************
ok: [localhost] => {
"changed": false,
"msg": "All assertions passed"
}
Silencia la devolución de llamada si no deseas mostrar el resultado. Por ejemplo
shell> ANSIBLE_DISPLAY_OK_HOSTS=false ansible-playbook playbook.yml
Para obtener detalles sobre la devolución de llamada, consulte
shell> ansible-doc -t callback default
La jugada fracasará si alguno de los elementos no cumple la condición. Por ejemplo
- assert:
that: mounts_all == mounts_ok
vars:
mounts_all: "{{ my_mounts|length }}"
mounts_ok: "{{ my_mounts|select('gt', 600)|length }}"
da
TASK [assert] *******************************************************
fatal: [localhost]: FAILED! => {
"assertion": "mounts_all == mounts_ok",
"changed": false,
"evaluated_to": false,
"msg": "Assertion failed"
}
P:"Mostrar solo el mensaje del elemento fallido de afirmación."
R: Agregue una tarea de depuración si desea mostrar los puntos de montaje fallidos. Por ejemplo
- hosts: localhost
vars:
my_mounts:
- {dev: da0, size: 500}
- {dev: da1, size: 600}
- {dev: da2, size: 700}
tasks:
- debug:
msg: >
Filesystems: {{ mounts_fail }} failed.
Consider increasing the FS size.
when: mounts_fail|length > 0
vars:
mounts_fail: "{{ my_mounts|
selectattr('size', 'lt', 600)|
map(attribute='dev')|list }}"
- assert:
that: mounts_all == mounts_ok
vars:
mounts_all: "{{ my_mounts|length }}"
mounts_ok: "{{ my_mounts|
selectattr('size', 'gt', 600)|length }}"
da
TASK [debug] *******************************************************
ok: [localhost] => {
"msg": "Filesystems: ['da0'] failed. Consider increasing the FS size.\n"
}
TASK [assert] ******************************************************
fatal: [localhost]: FAILED! => {
"assertion": "mounts_all == mounts_ok",
"changed": false,
"evaluated_to": false,
"msg": "Assertion failed"
}