snippetMinor
How to log outcome from multiple hosts in Ansible?
Viewed 0 times
hostslogoutcomemultiplehowfromansible
Problem
I've a playbook that runs EOS commands against multiple devices. Currently the whole thing is done in bash, creates one massive text file log and an engineer compares each day's log to the previous one for irregularities.
I'm attempting to have one simple playbooks that runs the commands and logs to json from which it'll be easier to automate the comparison, but I've just realised only logs from one device are saved as opposed to the two I'm testing against.
Would there be way to log both (and eventually all production) devices in the same file?
I'm attempting to have one simple playbooks that runs the commands and logs to json from which it'll be easier to automate the comparison, but I've just realised only logs from one device are saved as opposed to the two I'm testing against.
---
- 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"Would there be way to log both (and eventually all production) devices in the same file?
Solution
This question has two approaches, and both has answers on SO:
-
Convert all Ansible output to JSON with
See this and this.
-
Make
See this.
-
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.
-
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: yesSee this.
Code Snippets
- debug:
msg: "{{ ansible_play_hosts | map('extract', hostvars, 'result') | map(attribute='stdout_lines') | list }}"
run_once: yesContext
StackExchange DevOps Q#2408, answer score: 8
Revisions (0)
No revisions yet.