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
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
ansible -i inventaire.ini -m ping http1 --user root --ask-pass
ansible -i inventaire.ini -m ping bdd1 --user root --ask-pass
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 :
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 !
localhost | SUCCESS => {
"msg": "$6$sceretsalt$tBcfGEgifQpQZsg5CIGZ79XC55h5vHy7UWrys7cAF37KNCQQbm7iCvy58MlLQLaS2fLF6ZjqDVHhVrkMdRi0f0"
}
Notre clef SHA-512 a bien été générée !
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 :
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
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 :
L'utilisateur a bien le droit de sudo !
Génération de clefs SSH :
ssh-keygen -t ecdsa
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 :
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
- tasks/
- MariaDB
- tasks/
- taches à exécuter pour installer MariaDB
- tasks/
- Commun
- defaults/
- Définition des variables globales
- defaults/
- ConfDB
- meta/
- Dépendance avec le rôle Commun
- tasks/
- Taches à exécuter pour installer la base de donnée
- meta/
- ConfApache
- meta/
- Dépendance avec le rôle Commun
- tasks/
- Taches à exécuter pour installer apache
- meta/
Pour simplifier la suite, nous allons créer un groupe de nodes :
nano inventaire.ini
[apache]
http1
[db]
bdd1
Création du répertoire roles :
mkdir roles
cd roles
Nous allons maintenant utiliser ansible-galaxy qui permet de télécharger, créer et gérer les rôles ansible :
ansible-galaxy init apache
Regardons ce qu'ansible-galaxy a créer :
rm ./apache/{README.md,defaults/,files/,templates/,tests/,vars/} -r
Création du rôle mariadb :
mkdir -p mariadb/tasks/
touch mariadb/tasks/main.yml
Création du rôle médiawiki :
mkdir mediawiki
mkdir -p mediawiki/commun/defaults/
touch mediawiki/commun/defaults/main.yml
mkdir -p mediawiki/confdb/meta mediawiki/confdb/tasks
touch mediawiki/confdb/tasks/main.yml
touch mediawiki/confdb/meta/main.yml
mkdir -p confapache/meta confapache/tasks
touch confapache/tasks/main.yml confapache/meta/main.yml
Ce qui nous donne cette arborescence là :












