====== 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