Quiero que la tarea finalice si algún punto de montaje no cumple con la afirmación

Quiero que la tarea finalice si algún punto de montaje no cumple con la afirmación

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"
}

información relacionada