Ansible avec un inventaire dynamique Mysql (partie 1)

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.

Votre commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s

%d blogueurs aiment cette page :