Ansible : Automatisation, Orchestration et Déploiement
Génération des clés SSH et inventaire
Génération des clés SSH
la connectivité entre le Node-manager et les autres nodes est bien active, mais pas suffisante .
Nous devons générer une clé SSH sur le Node-manager afin de la transmettre aux autres hôtes. Cela permettra de sécuriser la connexion à distance et d’augmenter la rapidité de la connexion.
Pour générer une clé SSH, on utilise la commande : ssh-geygen -t ecdsa -b 5212
Pour copier la clé sur les différents hôtes, il faut taper la commande suivante : ssh-copy-id user-ansible@192.168.2.11 (ici, je l’ai fait uniquement pour le node1. Il faut le faire pour tous les nodes ) .
Si on essaye de se connecter via SSH au node1, on constatera que la passphrase est toujours demandée. Afin d’éviter cela (pour une connexion plus rapide), on peut mettre en place un agent SSH qui effectuera la connexion sans demander le mot de passe, ni la passphrase .
Si on essaye de faire un ping de ansible avec la commande ansible -i ‘node1,node2,node4,’ -m ping all, on se rendra compte que le mot de passe (ou la passphrase) SSH est demandé à chaque connexion. Si on a 100 clients à pinger, cela deviendra fastidieux.
Pour palier à cela, la solution est de mettre en place un agent SSH. Pour le faire, il faut entrer les commandes suivantes :
ssh-add -l #1 pour vérifier si l'agent SSH est lancé eval `ssh-agent` #2 pour lancer l'agent SSH ssh-add #3 pour embarquer l'identité de la clé SSH dans l'agent ssh-add -l #4 pour revérifier le lancement de l'agent
On peut à présent tester la connexion SSH : ssh user-ansible@192.168.2.11
On constate que la connexion se fait bien sans demander de mot de passe, ni de passphrase .
N’oubliez pas de tester cette connexion sur tous vos nodes .
Inventaire des nœuds .
L’inventaire peut se faire soit en utilisant un fichier yaml, soit en utilisant un fichier ini, soit en utilisant un autre type de fichier .
J’ai choisi d’utiliser un fichier yaml car c’est ce qui est recommandé par la communauté Ansible .
Il faut donc ouvrir notre fichier inventaire ou bien en créer un : sudo nano /etc/ansible/hosts et y mettre les informations suivantes :
Test de l’affichage de l’inventaire : ansible-inventory –list -y
Test du ping avec Ansible : ansible -i ‘node1,node2,node4,’ -m ping all
Dans ce test, j’ai effectué un ping vers les machines clientes node1, node2 et node3 .
On constate que le ping fonctionne bien sur les clients node 1 et node 2. Mais il y’a une erreur sur le client node4. Nous allons résoudre cette erreur ensemble.
L’erreur mentionnée est la suivante :
[WARNING]: No python interpreters found for host node4 (tried ['/usr/bin/python', 'python3.7', 'python3.6', 'python3.5', 'python2.7', 'python2.6', '/usr/libexec/platform-python', '/usr/bin/python3', 'python'])
Explication et résolution de l’erreur:
En effet, l’erreur nous précise que le système d’exploitation FreeBSD (du node4) n’inclut pas le répertoire /usr/bin/python. Cela signifie probablement que python n’est pas installé sur ce système. Pour le vérifier, il faut entrer la commande : which python ou python –version
On constate bien que python n’est pas installé. Je vais donc l’installer en entrant la commande : pkg install python
Ping des 3 nodes clients (node1 Debian, node2 Ubuntu, node4 FreeBSD) : Les connexions se font avec succès
Je n’ai pas fait de test pour le node3 car c’est une machine Windows.
Les clients Windows ont une configuration particulière, que nous verrons dans le chapitre suivant.