Ceci est une ancienne révision du document !
Ansible
Syntaxe globale
- playbook.yml
- hosts: all tasks: - name: echo coucou shell: echo "coucou" - name: set ip become: yes shell: | echo "ip ok"
Inclure des variables
Dans une task:
- playbook.yml
- name: include vars include_vars: file: vars.yaml
Le fichier vars.yaml contient la définition des variables, sous la forme d'un dictionnaire :
- vars.yaml
var1: value1 var2: value2
Les variables sont ensuite accessibles par {{ var1 }}.
Tasks
Définir l'IP
- playbook.yml
- name: set ip become: yes shell: | EXIST=`ip route show 172.21.0.0 | wc -l` if [ $EXIST -eq 0 ] then ip addr add {{ ip }}/16 dev eth1 ip route change default via 172.21.255.254 fi
Définir le DNS
- playbook.yml
- name: set dns become: yes lineinfile: path: /etc/resolv.conf regexp: '^nameserver ' line: 'nameserver 10.210.18.138' firstmatch: yes
S'assurer que la dernière version de Nginx est installée
- playbook.yml
- name: ensure nginx is at the latest version become: yes apt: name=nginx state=latest
S'assurer que le service Nginx est lancé
- playbook.yml
- name: start nginx become: yes service: name: nginx state: started
Importer un fichier template
De l'hôte vers l'invité, en remplaçant des variables par des valeurs :
- playbook.yml
- name: adapt flag of website become: yes template: src: index.html dest: /var/www/html/index.html
Dans index.html, la variable est définie entre doubles accolades.
Utilisation de become qui ne fonctionne pas
Pour utiliser become, il faut que le paquet acl soit installé sur le système cible. S'il n'y pas de tâches qui font des transferts de fichiers ou utilisent des modules non-Python, utiliser le pipelining SSH suffit (les commandes à exécuter sont directement pipées dans le Python de la machine cible) :
- ansible.cfg
[ssh_connection] pipelining = true