Ansible : organiser vos hôtes dans un fichier d’inventaire au format YAML

Dans ce tutoriel, je vais vous expliquer comment organiser vos hôtes dans un fichier d’inventaire au format YAML à la place du format du fichier d’origine avec Ansible.

Si vous découvrez ansible, je vous invite à lire ce tutoriel avant : Ansible : installation, configuration et utilisation avec Windows et Linux

Pour commencer voici notre fichier d’inventaire, pour faire « simple », le fichier ne sera constitué que de serveur Windows.

[windows]
LAB-DC1 ansible_host=192.168.100.1  
LAB-SRV-1 ansible_host=192.168.100.5
LAB-SRV-IIS-1 ansible_host=192.168.100.101
LAB-SRV-IIS-2 ansible_host=192.168.100.102

[windows:var]
[email protected]
ansible_password=secret_password
ansible_port=5985
ansible_connection=winrm
ansible_winrm_server_cert_validation=ignore
ansible_winrm_transport=credssp

Dans le fichier, nous avons un groupe windows qui contient la liste des serveurs puis la configuration de ce groupe avant les informations de connexions aux serveurs windows:var.

Dans la maintenance au quotidien, je souhaite faire jouer 2 playbook :

Pour répondre à cette solution, je vais créer un nouveau fichier d’inventaire au format YAML dans lequel, on va créer un sous-groupe (enfant) qui va contenir les serveurs IIS.

Dans un premier temps, nous allons transposer le fichier d’inventaire à l’identique au format YAML.

Voici le fichier d’inventaire :

all:
  hosts:
    LAB-DC1:
      ansible_host: 192.168.100.1
    LAB-SRV-1:
      ansible_host: 192.168.100.5
    LAB-SRV-IIS-1:
      ansible_host: 192.168.100.101
    LAB-SRV-IIS-2:
      ansible_host: 192.168.100.102

  vars:
    ansible_user: [email protected]
    ansible_password: secret_password
    ansible_port: 5985
    ansible_connection: winrm
    ansible_winrm_server_cert_validation: ignore
    ansible_winrm_transport: credssp

Dans le fichier, nous avons créer un premier groupe : all, qui contient tous les hôtes, par défaut lors de l’appel de ce fichier d’inventaire, le groupe all est appelé, le groupe vars est aligné sur la partie hosts du all.

Maintenant, on va créer un groupe enfant (iisservers) de all, qui va contenir les deux serveurs IIS.

Voici le fichier :

all:
  hosts:
    LAB-DC1:
      ansible_host: 192.168.100.1
    LAB-SRV-1:
      ansible_host: 192.168.100.5
    LAB-SRV-IIS-1:
      ansible_host: 192.168.100.101
    LAB-SRV-IIS-2:
      ansible_host: 192.168.100.102
  children:
    issservers:
      hosts:
        LAB-SRV-IIS-1:
        LAB-SRV-IIS-2:

  vars:
    ansible_user: [email protected]
    ansible_password: secret_password
    ansible_port: 5985
    ansible_connection: winrm
    ansible_winrm_server_cert_validation: ignore
    ansible_winrm_transport: credssp

Le groupe enfant iisservers est déclaré et on peut voir que celui-ci contient la déclaration des deux serveurs IIS qui se trouve dans all

Si vous avez regarder les deux playbooks au début de ce tutoriel, ils sont tous les deux appliqués aux groupes all.

Pour les mises à jour voici la commande :

ansible-playbook /path/file/playbook-wu-install-update.yml -i /path/file/hosts.yml -f 10

Ici l’appel du playbook se fait de façon « classique » en indiquant le chemin du fichier, le parametre –i permet d’indiquer le fichier d’inventaire et le paramètre -f optionnel, permet d’indiquer le nombre d’exécution simultané (ici il n’a pas d’intérêt).

Maintenant, on va passer au playbook pour les serveurs IIS, on va ajouter en plus un paramètre -l (limit) qui va prendre comme valeur le nom du groupe (iisservers)

Ce qui nous donne :

ansible-playbook /path/file/playbook-iis-logrotate.yml -i /path/file/hosts.yml -l iisservers -f 10

Le paramètre -l peut aussi prendre un hôte, si vous souhaitez appliquer le playbook à un seul hôte, ce qui peut être utile si vous utilisez un playbook pour planifier le redémarrage des serveurs.

Pour finir ce tutoriel, il est possible si cela est nécessaire, appliquer des variables au niveau de l’hôte, si par exemple celui-ci est hors domaine et que vous devez lui indiquer des identifiants différents.

Voici un exemple :

all:
  hosts:
    LAB-DC1:
      ansible_host: 192.168.100.1
    LAB-SRV-1:
      ansible_host: 192.168.100.5
    LAB-SRV-IIS-1:
      ansible_host: 192.168.100.101
    LAB-SRV-IIS-2:
      ansible_host: 192.168.100.102
    LAB-SRV-IIS-DMZ-3:
      ansible_host: 192.168.99.10
      ansible_user: administrateur
      ansible_password: LocalPassword
      ansible_port: 5985
      ansible_connection: winrm
      ansible_winrm_transport: basic
      ansible_winrm_scheme: http
  children:
    issservers:
      hosts:
        LAB-SRV-IIS-1:
        LAB-SRV-IIS-2:
        LAB-SRV-IIS-DMZ-3:

  vars:
    ansible_user: [email protected]
    ansible_password: secret_password
    ansible_port: 5985
    ansible_connection: winrm
    ansible_winrm_server_cert_validation: ignore
    ansible_winrm_transport: credssp

J’espère que ce tutoriel sur l’inventaire vous aura aider à y voir plus clair sur comment gérer vos hôtes avec Ansible.

Romain Drouche
Architecte Système | MCSE: Core Infrastructure
Expert en infrastructures IT avec plus de 15 ans d’expérience sur le terrain. Actuellement Chef de projet Systèmes et Réseaux et Référent SSI (Sécurité des Systèmes d’Information), je mets mon expertise au service de la fiabilité et de la sécurité des environnements technologiques.

Laisser un commentaire