2017-09-18 2 views
0

Ich möchte ein Ansible Playbook auf mehreren Hosts ausführen und Ausgänge auf eine Variable registrieren. Jetzt möchte ich mit dieser Variable die Ausgabe in eine einzelne Datei kopieren. Das Problem ist, dass am Ende nur ein Host in der Datei ausgegeben wird. Wie kann ich nacheinander die Ausgabe aller Hosts in einer Datei hinzufügen? Ich möchte nicht serial = 1 verwenden, da es die Ausführung erheblich verlangsamt, wenn wir mehrere Hosts haben.ansible mehrere per-Host-Ausgabe in Datei

- 

    hosts: all 
     remote_user: cisco 
     connection: local 
     gather_facts: no 

     vars_files: 
     - group_vars/passwords.yml 

     tasks: 
     - name: Show command collection 
     ntc_show_command: 
      connection: ssh 
      template_dir: /ntc-ansible/ntc-templates/templates 
      platform: cisco_ios 
      host: "{{ inventory_hostname }}" 
      username: "{{ ansible_ssh_user }}" 
      password: "{{ ansible_ssh_pass }}" 
      command: "{{commands}}" 
     register: result 

     - local_action: 
      copy content="{{result.response}}" dest='/home/user/show_cmd_ouput.txt' 

Antwort

2

result Variable wird als Tatsache auf jedem Host registriert die Aufgabe ntc_show_command ausgeführt wurde, so sollten Sie den Wert durch hostvars Wörterbuch zugreifen.

- local_action: 
    module: copy 
    content: "{{ groups['all'] | map('extract', hostvars, 'result') | map(attribute='response') | list }}" 
    dest: /home/user/show_cmd_ouput.txt 
    run_once: true 

Sie müssen auch run_once, da die Aktion würde immer noch so oft als Gastgeber in der Gruppe durchgeführt werden.