Observium has a nice GUI, and you can find lots of information but it does not have a reports feature so you can save it to a file. This is usually useful when some other team needs some info for auditing purposes for example.
Observium has an API so I was thinking to use it to get the info I want. I could do it in Python but I’ve chosen Ansible this time. And to make it really easy for others to run it I’ve used AWX.
Also, I wanted to be able to display the info on screen, save it to a local file but also post the info in a Gitlab repository. This way I could share easily the info with other teams.

Starting with all these in mind I’ve written a small script which I am sharing with you.
First I used Observium API to get the information for all devices that have an os type.
- name : Get OS devices uri: url: "https://{{ansible_host}}/api/v0/devices/?os={{os}}" method: GET validate_certs: no return_content: yes user: "{{observium_user}}" password: "{{observium_password}}" force_basic_auth: yes body_format: json register: result |
The os variable is defining what type of os I am searching for and it can be found in the vars file (folder group_vars):
#os: arista_eos os: ios #os: asa #os: iosxe #os: iosxr #os: nxos #os: cumulus-os #os: fortigate |
Next, I am building a list:
- name : Add new JSON Objects to List set_fact: devices: " { { devices + [ { 'Hostname' : item.value.hostname , 'Hardware' : item.value.hardware , 'Vendor' : item.value.vendor , 'Version' : item.value.version , 'Features' : item.value.features , 'Serial' : item.value.serial } ] } } " loop: "{{ devices_list|dict2items }}" |
Next, I am writing to a local file and display it on screen:
- name : file lineinfile: dest: devices.txt line: "{{item.Hostname}},{{item.Vendor}},{{item.Hardware}},{{item.Version}},{{item.Features}},{{item.Serial}}" loop: "{{ devices }}" - name : display file command: cat devices.txt register: result - name : print file debug: msg: "{{result.stdout_lines}}" |
And finally, I am posting the info to a Gitlab Repository:
- name : post a file in gitlab uri: url: "https://git.website.com/api/v4/projects/11/repository/commits" method: POST validate_certs: no body_format: json status_code: 201 headers: PRIVATE-TOKEN: "{{git_token}}" body: { "branch" : "master" , "commit_message" : "ansible report on devices with {{os}} commit message" , "actions" : [ { "action" : "create" , "file_path" : "devices_{{os}}_{{day}}_{{time}}.txt" , "content" : "{{result.stdout_lines | to_nice_json}}" } ] } |
For example, the result for ios xe devices looks like this:

where each line represents: Device Name, Vendor, Hardware, Version, Features, Serial
This project/script is just an example. You can change the API request you make to Observium and build different reports.
Source project:
https://github.com/czirakim/Ansible.Observium.Reporting
Observium API:
https://docs.observium.org/api/