Playbooks
Un playbook est un fichier au format YAML. Ce dernier va donner une liste d'instructions. Ces instructions sont passées à Ansible dans l'ordre de leur déclaration. L'avantage par rapport au mode ad hoc(ligne de commande) est que vous aurez ainsi tout décrit dans un fichier, y compris l'enchaînement des opérations.
- Un play est un dictionnaire yaml
- La section
hostsest obligatoire. Toutes les autres sont falcutatives ! - La section
taskspeut être remplacée ou complétée par une section roles et des sectionspre_taskspost_tasks - Les
handlerssont des tâches conditionnelles qui s’exécutent à la fin (post traitements conditionnels comme le redémarrage d’un service
Exemple d'un playbook d'un serveur web Apache
playbook.yml
---
# WEB SERVER
- hosts: web # Nom
become: true # Activer l'élevation de privilège
tasks:
- name: install apache and php last version
apt:
name:
- apache2
- php
- php-mysql
state: present
update_cache: yes
- name: Donner les droits sur le dossier http
file:
path: /var/www/html
state: directory
mode: '0755'
- name: remove default /var/www/html
file:
path: /var/www/html/*
state: absent
- name: upload web app source
copy:
src: app/
dest: /var/www/html/
- name: ensure apache service is start
service:
name: apache2
state: started
enabled: yes
Ordre d'exécution
- pre_tasks
- roles
- tasks
- post_tasks
- handlers
Rôles
Les rôles ne sont pas des tâches à proprement parler mais un ensemble de tâches et ressources regroupées dans un module, un peu comme une librairie dans le développement.
Bonnes pratique
- Toujours mettre un name: qui décrit lors de l’exécution la tâche en cours : un des principes de l’Infrastructure-as-Code est l’intelligibilité des opérations.
- Utiliser les arguments au format YAML (sur plusieurs lignes) pour la lisibilité, sauf s’il y a peu d’arguments
Pour valider la syntaxe il est possible d’installer et utiliser ansible-linter sur les fichiers YAML.
Utilisation
ansible-playbook -i inventory playbook.yml
Commande ansible-playbookavec options :
| Options | Description |
|---|---|
| -i | inventory |
| -l | limit > spécifier un/des groupes ou serveurs ou patterns |
| -u | user |
| -b | become > sudo |
| -k | password de ssh (à éviter) |
| -K | password sudo |
| -C | check > dry run |
| -D diff | > afficher les différences avant/après les actions du playbooks |
| --ask-vault | prompt pour le password vault |
| --vault-password-file | passer le vault password par un fichier |
| --syntax-check | vérifier la syntax |
| -e | surcharger n'importe quelle variable |
| -f | nombre de processus parallèle |
| --flush-cache | éviter l'utilisation du cache |
| --step | une tâche à la fois ( confirmation) |
| --start-at-task | commencer à une tâche spécifique |
| --list-tasks | liste des tâches qui sont être lancer |
Boucle : ici ou ici
Boucle dans un dictionnaire
Exemple :
```yaml title="dictPlaybook.yml
docker.yml
- hosts: web become: true
vars: foo: field1: one field2: two tasks:
- name: root user ; folder structure
ansible.builtin.file:
path: "/root/{{ item.value }}"
state: directory
owner: root
group: root
mode: '0750'
with_dict:
- "{{foo}}" ```