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
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
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
Article(s) en relation(s)