Assert 또는 다른 방법을 사용하여 Ansible에서 실패한 호스트에 대한 레지스터 출력을 리디렉션하는 방법

Assert 또는 다른 방법을 사용하여 Ansible에서 실패한 호스트에 대한 레지스터 출력을 리디렉션하는 방법
- name: Check the VolumeGroup has 5gb space
  assert:
    that: ansible_lvm.vgs.VG00.free_g|int >= 5
    fail_msg: 'VG has no free space'
    success_msg: "{{ ansible_lvm.vgs.rhel.free_g }}"
  register: vg00
- name: Line in file
  shell: echo -e "{{ ansible_fqdn }},VG_FREE=0" >> /tmp/failed.txt
  delegate_to: localhost
  when: "'FATAL' in vg00"

when 조건을 사용하여 리디렉션하려면 실패한 호스트만 필요하지만 작동하지 않습니다. 어떤 다른 상태라도 도움이 될 것입니다

답변1

존재하지 않는 사실을 이용하려는 것 같습니다(ansible 2.9.12에서 확인했습니다).

그래서 이것을 작동시키는 나의 방법은 다음과 같습니다.

---
- name: answer stack overflow
  hosts: all
  become: yes

  tasks:
    - name: Get VolumeGroup "mirror" free space in GB
      shell: vgs --units G|grep mirror|awk '{print $NF}'|tr -d 'G'
      register: vg_free
    - name: report your findings
      shell: echo {{ ansible_hostname }} has {{ vg_free.stdout }} GB free on VG mirror >> /tmp/hosts_with_vg_less_than_5GB_free_report.txt
      delegate_to: localhost
      when: {{ vg_free.stdout | int }} < 5

멱등성(Idempotence)으로 인해 쉘 모듈을 광범위하게 사용하는 것은 권장되지 않습니다.https://en.wikipedia.org/wiki/멱등성) 달성하기 어렵지만 보고 목적으로는 안 됩니다. :) .

관련 정보