Le but
Le but premier est de pouvoir stocker l’intégralité des hosts et des variables (hosts / groups) dans une base SQL.
Je suis tombé sur un script Python ici déjà très bien réalisé. J’ai donc décidé de le modifier, car les variables étaient stockées directement en format JSON, alors que je souhaitais pouvoir stocker les variables à plat et de générer le JSON à la volée.
De plus, je souhaitais pouvoir activer ou non chaque variable, host ou group.
Mon code se trouve ici
Explications
Mysql
Je ne pense pas avoir besoin d’expliquer les tables ‘host’ ou ‘group’ 😉
Pour la table ‘hostvars’
Ici nous stockons les variables dédiées à chaque host, par exemple la liste d’applications à installer, l’IP, le nom d’hôte, etc …
(2, 'itemlist', 'iotop,htop', 1), (3, 'hostip', '1.1.1.1', 1),
Cette entrée va générer le JSON suivant:
...
"hostip": "1.1.1.1",
"itemlist": [
"iotop",
"htop"
]
....
Exemple de playbook
- name: Change network configuration with IP {{ hostip }} action: template owner=root group=root mode=644 src=/templates/interfaces.template dest=/etc/network/interfaces backup=yes become: yes
Fichier interfaces.template
################################################# ###### NETWORK CONFIG FOR {{ hostname }} ################################################# # The loopback network interface auto lo iface lo inet loopback # The primary network interface # ETH0 : VLAN {{ hostvlanid }} allow-hotplug eth0 auto eth0 iface eth0 inet static address {{ hostip }} netmask {{ hostnetmask }} gateway {{ hostgateway }}
Pour la table ‘groupvars’
(5, 'user', 'mika,Mickael,mika,sudoer,ssh-dss public ssh key== mika@pc', 3, 1),
Cette entrée va générer le JSON suivant:
... "vars": { "user": [ [ "mika", "Mickael", "mika", "sudoer", "ssh-dss public ssh key== mika@pc" ], ...
Nous pouvons ensuite utiliser ces variables pour créer des utilisateurs, en y injectant leur clé SSH publique, group, etc …
N’ayant pas tout à fait terminé, j’approfondirai mes explications dans les autres parties.