Faire son premier playbook avec ansible

Print Friendly, PDF & Email

Vous êtes débutant sur ansible ? ou peut être un peu plus avancé mais vous cherchez à vous faire une piqûre de rappel pour remettre les choses en place ? Je vous propose de suivre ma formation ansible en ligne et totalement gratuite via des vidéos youtube mais également à travers les articles de ce blog devops.

Alors depuis quelques vidéos nous avons posé les bases avec :

  • l’inventaire
  • les groupes
  • les hosts
  • l’installation
  • la CLI

Nous allons continuer sur ce chemin pour débuter petit à petit avec cet orchestrateur.

Depuis le temps il est peut être venu le moment de faire quelques actions sur nos serveurs.

A quoi sert le playbook ??

C’est assez simple, dans les définitions et concepts, nous avons vu qu’il y a deux bulles. Avec d’un côté l’inventaire et de l’autre les tasks qui sont des actions individuels que l’on peut rassembler dans des rôles.

Mais comment savoir quelles tâches sont jouées sur quelles machines cibles ?

C’est là qu’intervient le playbook. Il permet de coordonner les deux bulles l’inventaire et les rôles/tasks.

Il s’ait donc ni plus ni moins d’un fichier qui va dire quels groupes ou machines reçoivent quelles actions ? et bien sûr tout cela en format yaml comme la plupart des fichiers dans ansible.

Le playbook minimum resemble à ceci en terme de contenu :

- name: Mon Playbook !!
  hosts: all
  tasks:
  - name: je debug
    debug:
      msg: "{{ var1 }}"

Découvrons un peu plus ce que l’on a écrit :

  • le nom du playbook « mon premier playbook »
  • son périmètre ou ses serveurs cibles, donc notre cas le groupe all (c’est à dire toutes les machines)
  • un bloc permettant de décrire les tasks
  • le nom de la première tâche « je debug »
  • l’appel à un module, en l’occurence « debug »
  • les paramètres passés à ce module « msg » (pour indiquer un message composé d’une variable au format jinja).

On est pas mal pour débuter avec notre playbook.

A côté il ne faut pas oublier d’avoir un inventaire, comme par exemple :

all:
  hosts:
    172.17.0.2:

Comprendre la ligne de commande ansible-playbook ?

Comment lancer le playbook ? Comprendre est peut être un bien grand mot mais au moins savoir un peu ce que l’on fait et ce que l’on peut faire avec ansible et ses playbooks.

Découvrez  [Ansible] : Find lister des fichiers et réaliser une action dessus

Dans ce qui est dessous nous allons parler du binaire ansible-playbook.

Voyons déjà une ligne de commande minimaliste pour lancer ce fichier :

ansible-playbook -i inventory.yml playbook.yml

Très simple non ? bon généralement il y aura souvent un peu plus d’options que cela dans votre terminal.

Voici donc quelques options plus ou moins connues (mais même les moins connues sont intéressantes… le diable se cache dans les détails).

	* -l : réduire le run à certaines machines ou certains groupes de votre inventaire
	* -u : spécifier un user particulier utilisé sur la où les machines distantes
	* -b : become est équivalent à taper sudo devant vos commandes pour élever vos privilèges
	* -k : pour recevoir la demande de saisie du mot de passe pour la connexion ssh
	* -K : le password pour l'élévation de privilège liée au sudo (become)
	* -C : check c'est le dry run... très utile quand on ne connait pas la fréquence des runs ansible
	* -D : diff c'est très utile pour avoir les différences et les modifications de ce que va faire ansible
	* --ask-vault : permet de saisir un password pour déchiffrer les secrets que vous aurez chiffré avec vault
	* --syntax-check : vérfier la syntax
	* --vault-password-file : passer le vault password par un fichier
	* -e : surcharger n'importe quelle variable
	* -f : forks, nombre de parallélisation
	* -t : filtrer sur les tags (--skip-tags)
	* --flush-cache : éviter l'utilisation du cache
	* --step : une tâche à la fois (confirmation via prompt)
	* --start-at-task : commencer à une tâche spécifiquement
	* --list-tags : lister tous les tags rencontrés
	* --list-tasks : liste les tâches qui vont être exécutées

Là on y voit plus clair.

Et maintenant commençons à jouer avec les fichiers grâce au module file.

Débuter avec le module FILE

Créer un fichier, un répertoire, leur affecter des droits, des propriétaires… ce sont des commandes courrantes en linux et généralement on apprend cela en débutant : mkdir, touch, chown, chmod, ln…. Et bien pour ansible c’est un peu pareil.

Découvrez  [Ansible] : Récupérer un rôle de Galaxy

Le module file peut prendre différents paramètres :

* attribute : définitions des paramètres particuliers d'un fichier : immutabilité etc... cf https://fr.wikipedia.org/wiki/Chattr
* force : pour les liens symboliques (créer même si le fichier source existe pas, la destination existe)
* group/owner : le propriétaire et le groupe du fichier ou du répertoire
* mode : les permissions sous les deux formats : "0755" ou "u=rwx,g=rx,o=rx"
* path : la localisation du fichier ou des répertoires
* recurse : création du chemin intermédiaire si n'existe pas (yes/no), attention cela est valable uniquement pour les répertoires
* src : pour les liens (hard ou symbolique)
* state : le type absent / directory / file / hard / link / touch
		touch > créé le fichier vide
		file > vérifie l'existence et les caractéristiques

Et donc nous voici prêt à écrire notre première task. Par exemple pour créer un répertoire :

- name: créer un répertoire
  file:
    path: /tmp/xavki/
    state: directory
    owner: root

Ici ansible va créer le répertoire xavki dans /tmp car le state est de type directory. Et le propriétaire de ce répertoire sera l’utilistaur root.

Avec l’utilisation du mode récursif :

  - name: création du répertoire /tmp/xavki
    file:
      path: /tmp/xavki/1/2/3/4
      recurse: yes
      state: directory
      owner: root
      group: root
      mode: 0755

Ou encore simplement créer un fichier vide avec touch :

  - name: création du répertoire /tmp/xavki
    file:
      path: /tmp/xavki/1/2/3/4/fichier.txt
      state: touch
      owner: root
      group: root
      mode: 0755

Ou encore sous forme de lien :

  - name: création du répertoire /tmp/xavki
    file:
      src: /tmp/xavki/1/2/3/4/
      dest: /tmp/symlink
      state: link  #hard
      owner: root
      group: root
      mode: 0755

Et enfin pour supprimer des fichiers ou des répertoires, il suffit d’utiliser le state absent très courrant dans les modules ansible.

  - name: dir sans idempotence
    file:
      path: /tmp/xavki.txt
      state: absent

Voilà j’espère que cette prise en main de ansible et que vous pouvez débuter en toute tranquilité à votre rythme. Je vous rappelle que vous pouvez venir découvrir plus de 900 vidéos sur la chaine xavki avec de nombreuses autres thématiques autour du devops bien sûr. Et retrouvez tous les fichiers de ces présentations sur le dépôt dédié à ansible.