TUTOS.EU

Première exemple d'utilisation de Ansible de A à Z


Cet article est là pour vous permettre d'avoir un premier exemple fonctionnel d'Ansible.

Il a été écrit après avoir visionné plusieurs des 127 vidéos de la playlist dédiée de xavki (trop long de tout regarder pour un premier essai),

Découverte de Ansible (très bien, un exemple de fou, des idées sur ce qu'on peut en faire, mais il manque du détail si on veut appliquer from scratch),

you need to learn ansible right now de NetworkChuck (bien mais il se connecte avec un login/mot de passe d'un compte root de base)

et une partie du getting_started de ansible.com


Le serveur Ansible s'installe obligatoirement sur une machine Linux.
Ansible fonctionnant sans agent, il va lui falloir les droits sur les machines cibles.
Pour cela on va ici créer un compte dédié sur la machine cible.

Avec les commande suivante, on passe root, on crée le compte

sudo -i
useradd -m myaccount4ansible
passwd myaccount4ansible
Lien vers le fichier : cliquez ici

Toujours sur la machine cible, on va donner les droits sudo à ce compte, sans qu'il ait à saisir un mot de passe pour cela.

Pour ce faire on va créer un fichier nommé admin sous /etc/sudoers.d avec nano

nano /etc/sudoers.d/admins
Lien vers le fichier : cliquez ici

Mettez y ceci

myaccount4ansible     ALL=(ALL)   NOPASSWD:ALL
Lien vers le fichier : cliquez ici

Il est préférable d'éviter d'utiliser un login/mot de passe.
Le mieux est de se connecter avec une clé SSH.

Donc, sur le serveur Ansible, passer sur le compte qui sera utilisé pour lancer les commandes

su -l ansible
Lien vers le fichier : cliquez ici

Si vous n'avez pas déjà une clé ssh, générez la avec

ssh-keygen -t ecdsa -b 521
Lien vers le fichier : cliquez ici

Il vous sera demandé un nom de fichier.
Ici le compte se nomme test donc j'ai nommé la clé testkey.
Elle sera placée à la racine du home du compte.

Vous trouverez deux fichiers, avec un en .pub pour la clé publique, et l'autre sans extension pour la clé privée.

Déclarez votre clé publique sur le serveur à piloter avec Ansible avec la commande ssh-copy-id.

192.168.0.170 est l'ip de la machine où déclarer la clé et myaccount4ansible est le compte sur lequel la copier

ssh-copy-id -i testkey.pub myaccount4ansible@192.168.0.170
Lien vers le fichier : cliquez ici

On va maintenant charger votre clé privée dans un agent.
Vérifiez qu'il n'y en a pas un de lancé avec

ssh-add -l
Lien vers le fichier : cliquez ici

Si il n'est pas lancé vous devez avoir le message
Could not open a connection to your authentication agent

Lancez l'agent et ajoutez y votre clé privée.
Ici elle s'appelle testkey

eval `ssh-agent`
ssh-add testkey
Lien vers le fichier : cliquez ici

Testez la connexion sur la machine cible.

ssh 'myaccount4ansible@192.168.0.170'
Lien vers le fichier : cliquez ici

Sur le serveur, installez simplement ansible avec

sudo apt install ansible
Lien vers le fichier : cliquez ici

Vérifiez la version avec

ansible --version
Lien vers le fichier : cliquez ici

Editez ansible.cfg

nano /etc/ansible/ansible.cfg
Lien vers le fichier : cliquez ici

Décommentez cette ligne pour ne pas à avoir à valider les fingerprint

host_key_checking = False

D'autres options pour ansible.cfg sont expliquées sur https://youtu.be/8Hb-i9lXdXA?t=368
On y parle par exemple de l'outil ansible-config, mais il n'est pas nécessaire ici.

Editez le fichier hosts

nano /etc/ansible/hosts
Lien vers le fichier : cliquez ici

On fait un groupe de machines nommé [linux]
On y place l'ip de notre machine cible
On indique également le login à utiliser pour se connecter


Faites un premier est simple avec un ping de la machine cible

ansible linux -m ping
Lien vers le fichier : cliquez ici

Vous devez avoir un retour en vert

Si vous avez un permission denied c'est peut être tout simplement que vous n'avez pas lancez votre agent ssh ni ajouté votre clé privée dedans (commandes eval `ssh-agent` et ssh-add)

Vous pouvez aussi lancer une commande, comme cat.
Ici on utilise cat pour avoir le type d'OS

ansible linux -a "cat /etc/os-release"
Lien vers le fichier : cliquez ici

Au lieu de lancer une commande, on peut demander à jouer un playbook, un recueil, une liste de choses à faire. Ils sont au format yml

On va en créé un avec

nano /etc/ansible/oneplaybook.yml
Lien vers le fichier : cliquez ici

Placez ceci dans le code.
Cela va installer nano sur la machine cible si le programme n'est pas présent.

---
 - name: lejob
   hosts: linux
   tasks:
    - name: check nano
      become: yes
      become_method: sudo
      apt:
       name: nano
       state: latest
Lien vers le fichier : cliquez ici

Pour jouer son contenu, taper

ansible-playbook /etc/ansible/oneplaybook.yml
Lien vers le fichier : cliquez ici

Le résultat est ici en vert, du coup c'est bon signe.
On a ok=2 pour dire qu'on a bien réussi à passer sudo et à faire l'installation de nano
changed=0 indique qu'il n'y a pas eu de modification, cad que nano était déjà installé.

Voici le détail du contenu du playbook

Attention l'indentation est très importante dans un fichier yml
L'indentation ce sont les retraits, les espaces et tabulations situés à gauche des lignes

Dans cet exemple j'ai écrit
---
- name: lejob


au lieu de
---
 - name: lejob

Le pire, c'est que le bug que cela provoque n'est pas indiqué à la bonne ligne.
Le programme indique ici à tort que l'erreur est au niveau de "hosts: linux"

Comme dit plus haut, /etc/ansible/ansible.cfg peut être paramétré avec ansible-config

ansible-config list donne tous les paramètres que l'on peut configurer et où. xavki en parle ici et il donne ces choses à modifier.

On peut par exemple avoir la durée de chaque task avec
[defaults]
callback_whitelist = profile_tasks

 

Pour gagner en temps d exécution :
[ssh_connection]
pipelining = True

 

Partager plusieurs sessions pour une même connection et mettre un peu de persistence
[ssh_connection]
ssh_args = -o ControlMaster=auto -o Controlpersist=60s

 

ajouter éventuellement ceci :
-o PreferredAuthentications=publickey

 

Pour gérer 30 serveurs à la fois
[defaults]
forks = 30