сохранение переменных из прогона playbook в ansible локальный файл хоста - PullRequest
0 голосов
/ 02 мая 2020

Я пытаюсь создать файл инвентаря из прогона ansible playbook. Я пытаюсь перечислить все хосты kvm и гостей, работающих на них, запустив оба service libvirtd status и, в случае успеха, virsh list --all, и сохранить значения в файле на хосте ansible. Я пробовал несколько разных структур playbook, но ни одна из них не была успешной при написании файла (используя local_action записал ansible_hostname только с одного хоста). Пожалуйста, кто-нибудь может подсказать мне, что я делаю не так? Это то, что я бегу:

- name: Determine KVM hosts
  hosts: all
  become: yes
  #gather_facts: false

  tasks:
    - name: Check if libvirtd service exists
      shell: "service libvirtd status"
      register: libvirtd_status
      failed_when: not(libvirtd_status.rc == 0)
      ignore_errors: true

    - name: List KVM guests
      shell: "virsh list --all"
      register: list_vms
      when: libvirtd_status.rc == 0
      ignore_errors: true

    - name: Write hostname to file
      lineinfile:
        path: /tmp/libvirtd_hosts
        line: "{{ ansible_hostname }} kvm guests: "
        create: true
    #local_action: copy content="{{ item.value }}" dest="/tmp/libvirtd_hosts"
      with_items:
          - variable: ansible_hostname
            value: "{{ ansible_hostname }}"
          - variable: list_vms
            value: "{{ list_vms }}"
      when: libvirtd_status.rc == 0 or list_vms.rc == 0

1 Ответ

0 голосов
/ 07 мая 2020

Был в состоянии сделать что-то, что в основном работает:

- name: Check if libvirtd service exists
      shell: "service libvirtd status"
      register: libvirtd_status
      failed_when: libvirtd_status.rc not in [0, 1]

    - name: List KVM guests
      #shell: "virsh list --all"
      virt:
        command: list_vms
      register: all_vms
      when: libvirtd_status.rc == 0
---
- name: List all KVM hosts
  hosts: production, admin_hosts, kvm_hosts
  become: yes

  tasks:
    - name: create file
      file:
          dest: /tmp/libvirtd_hosts
          state: touch
      delegate_to: localhost

    - name: Copy VMs list
      include_tasks: run_libvirtd_commands.yaml

    - name: saving cumulative result
      lineinfile:
         line: '{{ ansible_hostname }} has {{ all_vms }}'
         dest: /tmp/libvirtd_hosts
         insertafter: EOF
      delegate_to: localhost
      when: groups["list_vms"] is defined and (groups["list_vms"] | length > 0)

Теперь, если бы только я мог очистить вывод, чтобы отфильтровать ложные срабатывания (машины, которые не делают иметь статус libvirtd и иметь пустой / отсутствующий список виртуальных машин, потому что вышеприведенное на самом деле не работает.

Но, по крайней мере, есть выходные данные со всех хостов KVM!

...