我有一本针对多个设备运行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"


是否可以在同一个文件中记录两个(最终所有生产的)设备?

#1 楼

这个问题有两种方法,都对SO有答案:


使用json stdout回调将所有Ansible输出转换为JSON并使用您喜欢的工具进行解析。每个设备的eos_command输出将在结果json中位于不同的主机密钥下。
请参见此内容。

执行run_once任务来从其他主机收集数据,如下所示:

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


请参见此。



#2 楼

使用Ansible回调。

停止查看日志文件。使用Logstash之类的日志聚合技术。

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

另请参见:
https:// groups .google.com / forum /#!topic / ansible-project / zOjsYxLN578