ansible cmdb? Whats the recommended way to store facts for later retrieval?

201 views
Skip to first unread message

Dennis McCarthy

unread,
Apr 1, 2020, 11:46:42 AM4/1/20
to Ansible Project
Hi,

I'm trying to set up a MySQL DB to hold all the ansible facts I produce from "ansible -m setup" (on lots of remote hosts), Store each .json file of each server in a directory but I'm having trouble finding a place to store them.

What do I want to do:
Well I've come from a puppet background, and one of the great things about puppet was puppetDB. I could query the DB for all sorts of facts (from facter including custom facts) and join them together. It was very powerful and I could get answers about my server estate quickly. So what I want is a way to setup the same thing in Ansible. Basically, to know how many of "something" I have in my estate (of 1000+ nodes) without having to use ansible to visit each one to find the answer.

What have I done so far:
It's a great tool and sort of does what I want but it doesn't list out all the fields in the DB that are in the .json file.

I get these:

mysql> DESCRIBE hosts;
+----------------+--------------+------+-----+---------+-------+
| Field          | Type         | Null | Key | Default | Extra |
+----------------+--------------+------+-----+---------+-------+
| name           | varchar(255) | YES  |     | NULL    |       |
| fqdn           | varchar(255) | YES  |     | NULL    |       |
| main_ip        | varchar(15)  | YES  |     | NULL    |       |
| os_name        | varchar(80)  | YES  |     | NULL    |       |
| os_version     | varchar(40)  | YES  |     | NULL    |       |
| system         | varchar(40)  | YES  |     | NULL    |       |
| kernel         | varchar(40)  | YES  |     | NULL    |       |
| arch_hardware  | varchar(12)  | YES  |     | NULL    |       |
| arch_userspace | varchar(12)  | YES  |     | NULL    |       |
| virt_type      | varchar(20)  | YES  |     | NULL    |       |
| virt_role      | varchar(20)  | YES  |     | NULL    |       |
| cpu_type       | varchar(60)  | YES  |     | NULL    |       |
| vcpus          | int(11)      | YES  |     | NULL    |       |
| ram            | float        | YES  |     | NULL    |       |
| disk_total     | float        | YES  |     | NULL    |       |
| disk_free      | float        | YES  |     | NULL    |       |
+----------------+--------------+------+-----+---------+-------+

But not all of the .json fields are available and no custom facts. Maybe I need to play with this a bit more.

What do I want:
I'd love to be able to get a .json host file and import it directly into MySQL. add to the exiting table and be able to run a select statement on it. I guess this is why ansible-cmdb is around because there is nothing that already does this.

Can anyone recommend anyway to store the data so it can be queried on mass?

Any help would be appreciated.

Thanks
Dennis

Phil Griffiths

unread,
Apr 1, 2020, 3:23:08 PM4/1/20
to Ansible Project
Hi Dennis

Does it have to be MySQL? The reason I ask, is that there are various cache plugins available: https://docs.ansible.com/ansible/latest/plugins/cache.html#plugin-list
One such plugin is, for example, redis. You could use that and then the redis module: https://docs.ansible.com/ansible/2.5/plugins/lookup/redis.html in playbooks to retrieve facts.

BUT, if you are going to all this trouble, then I would start looking at AWX/Tower as that has inbuilt fact caching. Why reinvent the wheel.

Regards
Phil.

Dennis McCarthy

unread,
Apr 1, 2020, 4:13:08 PM4/1/20
to ansible...@googlegroups.com
Thanks for your reply Phil.

I tried the redis option for fact caching but I'm not able to query redis for the data, only use it in my playbooks.

I think you're right though. Its alot of effort so I'll probably try AWX and see if that fits the bill.

Cheers.



--
You received this message because you are subscribed to the Google Groups "Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ansible-proje...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/86e64844-d8d3-48f1-8e40-796fdfaae9ba%40googlegroups.com.
Reply all
Reply to author
Forward
0 new messages