一千萬個為什麽

搜索

如何在Ansible中記錄多個主機的結果?



我有一個針對多個設備運行EOS命令的手冊。目前整個事情都是用bash完成的,創建一個大量的文本文件日誌,並且工程師將每天的日誌與前一個日誌進行比較,以發現違規情況。

我試圖讓一個簡單的劇本運行命令和日誌到json,從中可以更容易地自動比較,但是我剛剛意識到只有一個設備的日誌會被保存,而不是兩個我是測試反對。

---
- name: Checks
  hosts: myhosts
  connection: local

  tasks:
  - name: Run Commands
    eos_command:
     commands:
      - show ip pim neighbor | json
      - show ip bgp summary | json
    register: result

  - name: Save to file
    copy: 
     content: "{{ result.stdout_lines | to_nice_json }}"
    dest: "/home/homedirectory/results.json"

有沒有辦法在同一個文件中記錄兩個(並最終生產)設備?

轉載註明原文: 如何在Ansible中記錄多個主機的結果?

一共有 2 個回答:

這個問題有兩種方法,兩種都有SO的答案:

  1. Convert all Ansible output to JSON with json stdout callback and parse it with your favourite tools. The eos_command output for each device will be under different host key in the resulting json. See this and this.

  2. Make run_once task to collect data from other hosts, like this:

    - debug:
        msg: "{{ ansible_play_hosts | map('extract', hostvars, 'result') | map(attribute='stdout_lines') | list }}"
      run_once: yes
    

    See this.

使用Ansible回調。

停止查看日誌文件。使用Logstash等日誌聚合技術。

https://github.com/ujenmr/ansible-logstash-callback

see also: https://groups.google.com/forum/#!topic/ansible-project/zOjsYxLN578