Il est nécessaire, sur votre système d'exploitation hôte que vous utilisez, que soit installé:
- ansible https://docs.ansible.com/. Nous vous recommandons d'installer aussi
ansible-lintpermettant l'analyse statique de fichier de configuration ansible. Voici la commande pour l'installer:pip3 install ansible-lint. Si vous utilisez vscode, vous pouvez installer l'extension "ansible" de Red Hat afin de permettre le support du language utilisé dans les fichiers de configuration ansible. Il est aussi possible d'installer le module docker afin de construire et déployer des conteneurs sur la machine invitée. Voici la commande pour le faire:ansible-galaxy collection install community.docker:2.7.9 - virtualbox https://www.virtualbox.org/
Vous pouvez télécharger sur coursenligne les dépendances nécessaires pour réaliser les exercices ou récupérer ces dépendances depuis le dépot disponible sur github. Ces dépendances contiennent notamment:
- un fichier
hostsqui permettra à ansible d'accéder à la machine à configurer (la machine virtuelle Virtualbox) - un fichier
ansible.cfgqui indiquera, notamment, l'utilisateur et sa clef privée permettant à ansible de se connecter à la machine virtuelle avec ssh
Pour permettre à ansible d'exécuter des tâches dans la machine virtuelle, nous devons configurer l'accès à ssh. Pour cela, nous allons: générer une clef publique et une clef privée afin de permettre la connexion à ssh sans saisir un mot de passe. Pour cela, nous devons enregistrer la clef publique dans le fichier de configuration ssh de l'utilisateur de la machine virtuelle.
# Génération de la clef publique et de la clef publique
# Note: la phrase secrète est vide, ceci n'est pas recommandé pour la mise en production mais facilite la configuration pour ce TP
# Terminal hôte (votre machine):
cd /home/<utilisateur_hote>/.ssh/
ssh-keygen -t rsa -b 4096 -f id_rsa_ansible -N ""
# Vérifier que vous avez bien deux fichiers "id_rsa_ansible" et id_rsa_ansible.pub contenant, respectivement, la clef privée et la clef publique
# Copie de la clef ssh publique dans la machine virtuelle
# Terminal hôte
ssh-copy-id -i id_rsa_ansible.pub -p 2222 <utilisateur_vm>@localhost
# Vérifions que ça fonctionne, normalement aucun mot de passe ne vous sera demandé
# Terminal hôte
ssh -p 2222 <utilisateur_vm>@localhost
# Ajouter le chemin de la clef privée au fichier ansible.cfg
# private_key_file = /home/<utilisateur_hote>/.ssh/id_rsa_ansible # chemin de la clef privée sur votre machine
# Tester ansible depuis le répertoire playbooks du dépôt git
ansible -i hosts serveurs -m ping
# Affichage attendu:
# vm_virtualbox | SUCCESS => {
# "ansible_facts" : {
# "discovered_interpreter_python": "/usr/bin/python3"
# },
# "changed": false,
# "ping": "pong"
# }Il sera aussi nécessaire pour ce TP de permettre à ansible d'exécuter des commandes en tant que root sur la machine invitée. Puisqu'elle se connecter avec l'utilisateur <utilisateur_vm>, il faut que celui-ci ait les droits.
# Vérifier si votre utilisateur a les droits sudo
# Terminal invité
sudo -l -U <utilisateur_vm>
# Vous devriez voir afficher: (ALL) ALL à la fin du retour de la commande
# Si l'utilisateur n'a pas les droits sudo
# Terminal invité
groups <utilisateur_vm>
sudo usermod -aG Wheel <utilisateur_vm>
# Se déconnecter et se reconnecterAfin qu'ansible n'ait pas à saisir de mot de passe pour exécuter des commandes en tant que sudo:
#Terminal invitée
sudo visudo
# Ajouter la ligne suivant à la fin du fichier
# <utilisateur_vm> ALL=(ALL) NOPASSWD: ALL
# L'éditeur est vim. Vous savez normalement comment sauvegarder un fichier et quitter l'éditeur
# En mode commande, le raccourci pour aller à la fin du fichier est GG
# En mode commande, le raccourci pour ajouter une ligne dessous et passer en mode insertion est oVous devez cloner le dépôt qui est herbégée sur github à l'adresse suivante: https://github.com/vbouquetnanterre/IVC_ansible.
Vous devez ensuite créer un dépot privé sur votre compte github et le synchroniser avec votre répertoire IVC_ansible local.
Créez un playbook afin d'enregistrer le nom d'utilisateur github et le mot de passe sur la machine virtuelle. Pour le mot de passe, vous devez générer un token depuis le site github. Voici un lien de la documentation expliquant la procédure afin de générer un token https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens.
Pour enregistrer le nom d'utilisateur et le token vous pouvez configurer un fichier .gitconfig et .git-credentials qui doit être placé dans le home du serveur distant. Pour générer ces fichiers, vous pouvez utiliser le prompt d'ansible, le module de copy et le module de template (utilisant jinja). Pour connaître la structure de ces fichiers, voir le lien de la documentation sur le stockage des données d'authentification avec git: https://git-scm.com/book/en/v2/Git-Tools-Credential-Storage
Créez un playbook afin de cloner et mettre à jour votre dépôt privé sur la machine virtuelle.
Nous considérons votre application fait en projet collaboratif devops. Proposez une solution pour découpler vos services afin de les exécuter dans différents conteneurs. Donnez ensuite les fichiers nécessaires à la construction des images qui permettront d'exécuter les services sur des conteneurs.
Créez un playbook afin de construire les images des conteneurs. Vous pouvez utilisez le module ansible.builtin.shell afin d'exécuter directement les commandes avec le client du conteneur (docker ou podman). Vous pouvez aussi utilisez les modules communautaires de docker ou de podman.
Créez un playbook afin d'exécuter les conteneurs. Vérifiez ensuite que l'application fonctionne correctement en accédant à l'url localhost:PORT (selon le port que vous avez choisi). Vérifier que le PORT est correctement redirigé avec virtualbox.
Proposez une solution afin de rendre la base de données persistante et modifiez les fichiers nécessaires. Créez ensuite un playbook pour faire une sauvegarde de la base de données toutes les heures grâce au module ansible.builtin.cron. Stockez cette sauvegarde dans le dossier /backup.
Créez un playbook afin d'installer nginx pour servir des pages statiques (html, css, png, pdf, etc.) qui seront présents dans le dossier /www/data à l'url localhost:8081. Vous pourrez ajouter les fichiers que vous souhaitez dans ce dossier. Essayez d'accéder à vos fichiers depuis le navigateur avec l'adresse localhost:8081/nom_dun_fichier.ext.
Créez un ou plusieurs playbooks afin d'exécuter les services comme si l'application était en production. Cela comprend l'utilisation de tls/ssl pour le chiffrement afin de pouvoir utiliser https mais aussi la sécurisation des informations d'authentification des différents services.
Déployez l'application en developpement et l'application en production sur deux machines virtuelles différentes en utilisant vagrant.