Générer une CMDB avec Ansible
Ansible collecte énormément de données des serveurs qu’il configure via ce qu’on appelle les facts. Il existe un outil qui répond au nom d’Ansible-CMDB, qui prend en charge plusieurs types de sortie (html, csv, sql, json, markdown …) et qui donc permet d’obtenir rapidement l’état de santé de votre parc informatique. Par exemple, on peut voir quelle version d’OS, le dernier reboot, la version du kernel, la ram, le nombre de cpu, l’occupation des disques, le taux d’utilisation de la RAM, …
Installation d’Ansible-CMDB
Ansible-CMDB est un programme python et donc on peut l’installer comme Ansible dans une environnement virtuel avec pip.
Utilisation d’Ansible-CMDB
Il faut avant récupérer les facts et les déposer dans un répertoire. Pour cela il suffit d’utiliser le module setup avec l’option tree.
Ensuite on peut générer une page html avec la commande suivante :
Pour afficher rapidement son contenu :
Si vous avez accès à un inventaire dynamique comme celui de zabbix vous pouvez rapidement avoir un état de votre parc.
Customisation
Il est possible de modifier les templates existant. Il suffit de copier un existant depuis la source et d’y apporter vos modifications. Par exemple, si vous utiliser un environnement virtuel généré avec pyenv :
Il faut éditer le fichier html_fancy_defs.html pour y ajouter une colonne par exemple contenant le uptime. Cela se fait en deux opérations :
Ajouter une colonne :
On peut donc modifier l’état d’affichage par défaut en modifiant cette valeur à True
ou False
.
Ensuite, il faut ajouter la définition de la fonction “func”: col_uptime :
Ici on prend la fact ansible_facts.ansible_uptime_seconds que l’on convertit en jours/heure.
On peut ensuite utiliser ce template avec l’option -t
:
J’utilise aussi les options :
-c
qui permet de filtrer les colonnes à afficher-p
qui permet de modifier le comportement d’ansible-cmdb :host_details= 0|1
: affiche ou pas le détail complet des hostsskip_empty= 0|1
: si on inclue les hosts qui étaient inaccessible
Conclusion
Ce programme peut rapidement permettre de se créer un outil agent-less de monitoring de votre parc, ou de patch management en ajoutant des customs facts sur vos machines.