Ansible

10 Playbooks

Un « Playbook » est un fichier écrit en YAML, dans lequel on liste des instructions demandant à Ansible d’effectuer des actions.

Il est possible de créer le premier fichier « Playbook » dans un répertoire de son choix, mais il peut être opportun de commencer à s’intéresser aux chapitre des bonnes pratiques de la documentation Ansible quant aux choix de l’organisation des répertoires. Le premier intérêt immédiat est qu’il existe un fonctionnement par défaut reposant sur une organisation des répertoires qui peut faire gagner du temps et de la syntaxe.

Nous pouvons créer notre premier « Playbook » nommé myFirstPlaybook.yml. Vous noterez l’extension « .yml » qui désigne ce fichier comme étant au format YAML avec une syntaxe particulière à respecter, comme ci-dessous :

---

- name: Test de ping sur toutes les machines
  hosts: Ansible
  gather_facts: no
  tasks:
  - name: run ping
    ping:
[root@overwatch playbook]# ansible-playbook myFirstPlaybook.yml

PLAY [Test de ping sur toutes les machines]

***********************************************************

TASK [run ping]

***********************************************************
 ok: [overwatch]

PLAY RECAP

***********************************************************
 overwatch : ok=1 changed=0 unreachable=0 failed=0

Ce premier « Playbook » est lancé directement avec la commande « ansible-playbook ». Il ne fait, pour l’instant, que des ping mais permet de comprendre un peu plus en détail la structure du fichier YAML et son fonctionnement avec Ansible.

Note : A la fin du playbook, l’instruction « ping: » se termine par « : » qu’il ne faut surtout pas oublier pour éviter une erreur.

Nous pouvons aussi réaliser un « Playbook » plus élaboré, permettant d’installer des paquets nécessaires pour un serveur web (vim, apache, php, mysql, pdo…).

---
- name: Installation de paquets de base
  hosts: Ansible
  gather_facts: no
  tasks:
  - name: Installation des paquets
    apt: name={{ item }} state= latest
    with_items:
      - vim
      - apache2
      - php
      - mysql
      - pdo
Ce « Playbook » permet d’installer les paquets dans leur dernière version (state= latest). La directive state peut également prendre les états present (installation du paquet), build-dep (installation des dépendances pour le package) ou absent (désinstallation du paquet). La syntaxe {{ item }} correspond à une variable qui utilise les valeurs présentes dans la directive with_items. Elle va itérer sur les valeurs permettant d’installer la liste de paquets.
Face à un commutateur ne possédant pas d’interpréteur Python, il est possible d’utiliser la commande « raw », présentée dans le chapitre précédent, pour réaliser un « Playbook ».
---
- name: Get system version
  hosts: ios_switch
  gather_facts: false

  tasks:
  - name: show version
    raw: "show version"
    register: display_return

  - debug: var=display_return.stdout_lines

Le fichier YAML peut être exécuté de la façon suivante :

ansible-playbook ios_playbook.yml -u myuser -k | grep "ok:\|Cisco IOS Software"

Ansible possède un certain nombre de « Network Modules », directement inclus dans la distribution de base, dont beaucoup sont associés à des constructeurs particuliers. Il existe un « Applications Store », appelé « Galaxy », depuis lequel il est possible de télécharger d’autres modules. Pour rebondir sur l’exemple précédent, il est possible d’illustrer le concept avec « ios_command Network Module » et l’usage des « Magic Variables », afin d’effectuer une sauvegarde de configuration. On peut noter l’escalade de privilèges pour exécuter la commande demandée.

---
- name: Get config and save it
  hosts: ios_switch
  gather_facts: false
  connection: local

  tasks:
  - name: get config
    ios_command:
      authorize: yes
      commands:
        - "show run"

    register: display_return

  - debug: var=display_return.stdout_lines

  - name: save output to a file
    copy:
      content="{{ display_return.stdout[0] }}"
      dest="./{{ inventory_hostname }}.txt"

Le « Playbook » s’exécute à l’aide de la commande :

ansible-playbook ios_playbook_module.yml -u myuser -k