Installation
- Le serveur ansible sera nommé (ans) et la machine à piloter (foo).
- Sur ans (Ubuntu 18.04) : apt-get install ansible
- Sur ans, création d'une paire de clés : ssh-keygen
- A créer dans /root/.ssh/ansible
- Pas de Passphrase
- Sur ans, dans /etc/ansible/ansible.cfg :
- remote_port = 22
- host_key_checking = true ou false (au choix)
- remote_user = root
- private_key_file = /root/.ssh/ansible
- Configuration de la machine cible (@ip 1.2.3.4) :
- Sur foo, installez un serveur ssh
- sur foo, dans "/etc/ssh/sshd_config" :
- Port 2200 (par exemple)
- PermitRootLogin yes
- Sur foo, restart du serveur ssh
- Sur ans : ssh-copy-id -i /root/.ssh/ansible.pub -p 2200 root@1.2.3.4
- Sur foo : dans "/etc/ssh/sshd_config" :
- PermitRootLogin without-password
- Sur foo, restart du serveur ssh
- Sur ans, configurez le fichier /etc/ansible/hosts :
foo ansible_host=1.2.3.4 ansible_port=2200 ansible_user=root
Utilisation en ligne de commande
- En règle générale, il faut écrire "ansible" puis le nom du module utilisé "-m shell", puis les éventuelles options "-a cat /etc/fstab", et enfin la machine, ou le groupe de machine définie dans le fichier /etc/ansible/hosts "foo". Ce qui donne simplement : ansible -m shell -a "cat /etc/fstab" foo
- La liste complète des modules utilisables est disponible sur le site : https://docs.ansible.com
Le langage YAML
- Ce langage permet de décrire des listes, sans utiliser de balises. C'est un concurent au langage XML.
- L'indentation est très importante en YAML. Il faut utiliser 2 espaces, ou 4 espaces, ou encore 6 espaces, mais jamais les tabulations !
- Un tiret "-" déclare un élément dans une liste. Attention aux espaces !
- Ce tutoriel sur YAML est facile à comprendre : sweetohm.net
- eleve: ezola nom: ZOLA prenom: Emile - eleve: jverne nom: VERNE prenom: Jules classe: 1STMG
Utilisation des playbooks YAML
- Il est possible de regrouper plusieures commandes ansible dans un fichier YAML
- Exemple d'appel d'un playbook, avec passage de paramètres :
ansible-playbook /root/unTest.yml -e 'v1=yes v2=/tmp'
Exemple 1 : Backup d'un conteneur LXD (version simple)
- A utiliser avec la commande : ansible-playbook /root/exemple1.yml -e 'cible=uneMachineVirtuelle'
- Le script "scriptBackupLxd" est identique à celui-ci
- Le fichier txz sera copié sur un partage Microsoft "backup" à l'adresse 192.168.1.10
- hosts: localhost tasks: - shell: mount.cifs //192.168.1.10/backup /mnt -o vers=1.0,username=toto,password=azerty,noserverino failed_when: false - hosts: foo tasks: - copy: src=/root/scriptBackupLxd dst=/usr/local/sbin/scriptBackupLxd owner=root group=root mode=0750 - shell: /usr/local/sbin/scriptBackupLxd {{cible}} - fetch: src={{cible}}.txz dest=/mnt/{{cible}}.txz flat=yes - hosts: localhost tasks: - shell: umount /mnt
Exemple 2 : Backup d'un conteneur LXD (version à utiliser)
- Première amélioration : scriptBackupLxd est déposé sur un nas dans le partage ansible. Cela permet une meilleure gestion des versions.
- Deuxième amélioration : Utilisation d'un block. Si une erreur survient, par exemple en cas de "exit 1" sur scriptBackupLxd, la suite du block est ignorée et c'est la partie rescue qui est activée.
- hosts: localhost tasks: - shell: mount.cifs //192.168.1.10/ansible /media/iAnsible -o vers=1.0,username=tata,password=qsdfgh,noserverino failed_when: false - shell: mount.cifs //192.168.1.10/backup /media/iBackup -o vers=1.0,username=toto,password=azerty,noserverino failed_when: false - hosts: foo tasks: - block: - copy: src=/media/iAnsible/scriptBackupLxd dst=/usr/local/sbin/scriptBackupLxd owner=root group=root mode=0750 - debug: msg="Création de l'archive txz sur le serveur" - shell: /usr/local/sbin/scriptBackupLxd {{cible}} - debug: msg="Copie de l'archive sur le NAS" - fetch: src={{cible}}.txz dest=/mnt/{{cible}}.txz flat=yes - file: path={{cible}}.txz state=absent rescue: - debug: msg="Annulation du backup" - hosts: localhost tasks: - shell: umount /media/iAnsible - shell: umount /media/iBackup