2017-09-18 15 views
0

複数のホストでAnsibleプレイブックを実行し、出力を変数に登録したいと考えています。この変数を使用して、出力を1つのファイルにコピーします。問題は、最終的にファイルにホストが1つだけ出力されることです。どのようにしてファイル内のすべてのホストの出力を次々と追加することができますか? serial = 1を使用したくない場合は、複数のホストがある場合は実行が大幅に遅くなります。ファイルへの複数のホストごとの出力が可能

- 

    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' 

答えて

2

result変数は、このようにあなたがhostvars辞書を通じて値にアクセスする必要があり、タスクntc_show_commandが実行された各ホスト上の事実として登録されます。

- 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 

アクションはまだグループ内のホストのように何回も実行されますので、あなたもrun_onceを必要としています。

関連する問題