Ansible: les playbooks ...

Quelques exemples de playbooks.

Ansible: playbooks: Template basique

Voici un template basique pour démarrer un nouveau playbook Ansible.

- name: Description du playbook
  hosts: all
  gather_facts: true
  tasks:
    ...


Le format est en YAML.
Il faut être très rigoureux concernant l'indentation.
Enormément d'erreurs sont dues à une mauvaise indentation.

La clé name permet de nommer le playbook
La clé hosts permet d'indiquer la liste des hosts présents dans l'inventaire à utiliser
La clé gather_facts permet d'obtenir un inventaire complet des hosts (true ou false)
La clé tasks permet de renseigner toutes les tâches que le playbook doit exécuter.

Concernant la clé hosts, la sélection est multiple.

Par exemple, le mot clé all permet d'indiquer la liste complète de tous les hosts.
Si je veux un host en particulier
    hosts: SERVER1 # (attention à la casse pour les nom de hosts).
Si je veux deux hosts
    hosts: SERVER1:SERVER2
Si je veux tous les hosts exceptés le SERVER2
    hosts: all:!SERVER2
Si je veux mes hosts nginx de prod
    hosts: nginx:&prod

Etiquettes: 

Ansible: playbooks: Template élaboré

Voici un template plus élaboré pour démarrer un nouveau playbook Ansible et prenant en compte des variables.

---
# Description
- name: Description du playbook
  hosts: localhost
  gather_facts: true
  gather_subset: all
  become: true
  serial: false
  collections:
    - community.vmware
  vars:
    bar: 1
    foo: "bar"
    bar_dict: {
      foo: {bar: "foo", foo: 2},
      bar: {bar: "bar", foo: 3}
    }
    date: "{{lookup('pipe','date +%Y%m%d')}}"
    bar_list:
      - bar
      - foo
    tmp_dir: /tmp
    tmp_file: "{{ tmp_dir }}/toto"
    enc_vault_password: !vault |
          $ANSIBLE_VAULT;1.1;AES256
          32326566396363316431393632363934396534323464343139636430386337633930383363303531
          3765303765326332316633316565356533623630383337320a306131613737336662616234343135
          37373938646264653264653639386262303662366464396163346366666230646332393639653532
          3761333761623763610a656337316333393963386466303734663066313334396234656166383731
          3830
    ansible_distro: "{{ ansible_distribution | lower }}"
  vars_prompt:
    - name: install_git
      prompt: Faut-il installer le programme git (o/n) ?
      private: false
      default: o
  pre_tasks:
      - include_vars: vars.yaml
  tasks:
    - name: the first task
      # Comment
      ansible.builtin.debug:
        msg: |
          let's go
          inventory_hostname: {{ inventory_hostname }}
          bar: {{ bar }}
          foo: {{ foo }}
          bar_dict: {{ bar_dict }}
          bar_dict['bar']['foo']: {{ bar_dict['bar']['foo'] }}
          date: {{ date }}
          bar_list: {{ bar_list }}
          tmp_dir: {{ tmp_dir }}
          tmp_file: {{ tmp_file }}
          dec_vault_password: {{ enc_vault_password }}
          install_git: {{ install_git }}
          include_vars__other: {{ other }}
          ansible_distribution: {{ ansible_distribution }}
          ansible_distro: {{ ansible_distro }}
        verbosity: 0
 

 

Quelques petites explications:

- gather_facts (true/false) permet d'obtenir l'inventaire du ou des hosts
- gather_subset (liste exhaustive)  permet d'obtenir des informations supplémentaire concernant le ou les hosts
- become (true/false) permet d'obtenir les droits SUDO
- serial (true/false) permet d'indiquer s'il faut exécuter les tâches en série, host par host ou simultanément sur tous les hosts
- collections permet d'inclure des plugins Ansible supplémentaires
- vars permet d'inclure différentes variables (string, int, dict, list)
- vars_prompt permet d'inclure des variables initialisées par un prompt lors de l'exécution du playbook
- pre_tasks permet d'exécuter des tâches avant l'exécution des tâches du playbook (j'inclus des variables globales grâce à include_vars)

Pour info, la commande lookup('pipe', ...) permet de récupérer le résultat de la sortie standard de la commande passée en paramètre.
Plus d'info ici

Etiquettes: