====== Ansible ====== * [[https://opensource.com/article/19/2/ansible-windows-admin]] * [[https://blog.stephane-robert.info/post/introduction-ansible/|Apprendre et Maitriser Ansible l'outil de gestion de configuration]] * [[https://blog.microlinux.fr/formation-ansible-02-labo/|Ansible par la pratique (2) – Un labo pour Ansible]] et le [[https://gitlab.com/kikinovak/rocky-9-ansible|dépôt correspondant]] * https://pyinfra.com ==== Syntaxe globale ==== - hosts: all tasks: - name: echo coucou shell: echo "coucou" - name: set ip become: yes shell: | echo "ip ok" ==== Inclure des variables ==== Dans une //task//: - name: include vars include_vars: file: vars.yaml Le fichier //vars.yaml// contient la définition des variables, sous la forme d'un dictionnaire : var1: value1 var2: value2 Les variables sont ensuite accessibles par ''{{ var1 }}''. ==== Tasks ==== === Définir l'IP === - 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 === - 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 === - name: ensure nginx is at the latest version become: yes apt: name=nginx state=latest === S'assurer que le service Nginx est lancé === - 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 : - 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 === * https://docs.ansible.com/ansible/latest/user_guide/become.html#risks-and-limitations-of-become 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) : [ssh_connection] pipelining = true