Skip to main content

Installation & utilisation d'Ansible

Installation de l'environnement virtuel python

Création de l'utilisateur d'ansible :

adduser user-ansible

Installation de l'environnement virtuel python : 

apt-get install python-virtualenv sshpass

sshpass sert au bon fonctionnement de la suite !

Changement d'utilisateur : 

su - user-ansible

Lancement de l'environnement virtuel : 

virtualenv ansible4.6.0

Activation de l'environnement virtuel : 

source ansible4.6.0/bin/activate

Installation d'ansible

Installation d'ansible : 

pip install ansible==4.6.0

Est-ce que ansible est bien installé ?

ansible --version

image-1633383044412.png

Préparation de la communication avec les nodes

Définition des nodes :

Création du fichier de définition des nodes :

nano inventaire.ini
http1
bdd1

Modification de notre fichier host : 

nano /etc/hosts

On ajoute : 

# le node http1
34.88.193.243 http1
# le node bdd1
35.228.198.62 bdd1

Test du bon fonctionnement SSH des nodes :

ssh root@http1
ssh root@bdd1
Réalisation de pings sur nos nœuds : 
ansible -i inventaire.ini -m ping http1 --user root --ask-pass
ansible -i inventaire.ini -m ping bdd1 --user root --ask-pass

image-1633442685680.png

image-1633442696209.png

Installation de python à distance sur nos nœuds : 
ansible -i inventaire.ini -m raw -a "yum install -y python3" http1 --user root --ask-pass
ansible -i inventaire.ini -m raw -a "yum install -y python3" bdd1 --user root --ask-pass

Résultat :

image-1633385833649.png

Génération d'une chaine SHA-512 :
ansible localhost -i inventaire.ini -m debug -a "msg={{ 'passforce' | password_hash('sha512', 'sceretsalt') }}"

Le mot de passe pour l'utilisateur user-ansible est donc "passforce", choisissez-en un différent !

Résultat  :
localhost | SUCCESS => {
    "msg": "$6$sceretsalt$tBcfGEgifQpQZsg5CIGZ79XC55h5vHy7UWrys7cAF37KNCQQbm7iCvy58MlLQLaS2fLF6ZjqDVHhVrkMdRi0f0"
}

Notre clef SHA-512 a bien été générée !

Création d'un utilisateur nommé "ansible" sur tous les nodes : 
ansible -i inventaire.ini -m user -a 'name=user-ansible password=$6$sceretsalt$tBcfGEgifQpQZsg5CIGZ79XC55h5vHy7UWrys7cAF37KNCQQbm7iCvy58MlLQLaS2fLF6ZjqDVHhVrkMdRi0f0' --user root --ask-pass http1
ansible -i inventaire.ini -m user -a 'name=user-ansible password=$6$sceretsalt$tBcfGEgifQpQZsg5CIGZ79XC55h5vHy7UWrys7cAF37KNCQQbm7iCvy58MlLQLaS2fLF6ZjqDVHhVrkMdRi0f0' --user root --ask-pass bdd1

Résultat : 

image-1633442774848.png

image-1633442802700.png

Mettez évidement votre chaine à vous !

 

Ajout des droits de sudoers à nos nouveaux utilisateurs : 

ansible -i inventaire.ini -m user -a 'name=user-ansible groups=wheel append=yes ' --user root --ask-pass http1
ansible -i inventaire.ini -m user -a 'name=user-ansible groups=wheel append=yes ' --user root --ask-pass bdd1

image-1633443099352.png

Nos deux utilisateurs sont maintenant sudoers ! 

 

Nous vérifions maintenant que l'utilisateur  user-ansible dispose bien des droits sudo :

ansible -i inventaire.ini -m user -a 'name=user-ansible groups=wheel append=yes ' --user user-ansible --ask-pass --become --ask-become-pass all

Nous répondons : 

SSH password: passforce
BECOME password[defaults to SSH password]: passforce

En sortie nous avons :

image-1633446465335.png

L'utilisateur a bien le droit de sudo ! 

Génération de clefs SSH :

ssh-keygen -t ecdsa

image-1633443306629.png

Ajoutez la clé publique de l’utilisateur user-ansible sur les nodes :
ansible -i inventaire.ini -m authorized_key -a 'user=user-ansible state=present key="{{ lookup("file", "/home/user-ansible/.ssh/id_ecdsa.pub") }}"' --user user-ansible --ask-pass all

Le mot de passe demandé est "passforce" !

Résultat : 

image-1633446214381.png

Vérification du bon fonctionnement des clefs SSH :

ansible -i inventaire.ini -m authorized_key -a 'user=user-ansible state=present key="{{ lookup("file", "/home/user-ansible/.ssh/id_ecdsa.pub") }}"' --user user-ansible --become --ask-become-pass all
BECOME password: passforce 

Nous constatons, que on nous as demandé uniquement le mot de passe de sudo (BECOME password). Cela confirme que la liaison fonctionne bel et bien sans mot de passe ! 

Organisation de déploiement :

A titre d'exemple, nous allons installer la solution "MediaWiki".

Pour ce faire, nous commençons par définir les différentes étapes -  que l'on nommera des rôle - d'installation : 

  • Installation d'apache
  • Installation de MariaDB
  • Configuration d'apache
  • Configuration de MariaDB
  • Variables Globales

 

Structure d'un rôle : 

  • role/
    • files/             ---> Contient tous les fichier à copier sur le node
    • tasks/           ---> Contient les taches à exécuter 
      • main.yml
    • handlers/     ---> Contient les taches de notification
      • main.yml
    • defaults/      ---> Contient des variables par défaut
      • main.yml
    • meta/           ---> Contient des dépendances et des informations
      • main.yml

 

On applique ça à nos rôles à nous : 

 

  • Apache
    • tasks/
      • taches à exécuter pour installer apache et php
    • handlers
      • tache pour redémarrer le service apache
  • MariaDB
    • tasks/
      • taches à exécuter pour installer MariaDB
  • Commun
    • defaults/
      • Définition des variables globales
  • ConfDB
    • meta/
      • Dépendance avec le rôle Commun
    • tasks/
      • Taches à exécuter pour installer la base de donnée
  • ConfApache
    • meta/
      • Dépendance avec le rôle Commun
    • tasks/
      • Taches à exécuter pour installer apache