将运行的playbook中的变量保存到ansible主机的本地文件中。

问题描述 投票:0回答:1

我试图通过运行ansible playbook来建立一个清单文件。service libvirtd status 而如果成功。virsh list --all我尝试了几种不同的playbook结构,但都没有成功写入文件(使用了 local_action 撰写 ansible_hostname from just one host).Please can someone guide me on what I'm doing wrong?This is what I'm running:

- 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
ansible centos7 centos6 debian-based
1个回答
0
投票

能够拼凑出一些东西,那就是 大多 工作。

- 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主机都有输出了!

© www.soinside.com 2019 - 2024. All rights reserved.