Ansible Pour Devops: Par Dirane Tafen
Ansible Pour Devops: Par Dirane Tafen
Ansible Pour Devops: Par Dirane Tafen
DevOps
Par Dirane TAFEN
Plan
• Présentation du formateur
• Introduction au DevOps et Ansible
• Commandes AD-HOC
• Découverte du yaml
• Inventaire ansible
• Playbook
• Templating et loop, condition
• Securité
• Rôle ansible
• Mini-projet
Plan
• Présentation du formateur
• Introduction au DevOps et Ansible
• Commandes AD-HOC
• Découverte du yaml
• Inventaire ansible
• Playbook
• Templating, loop, condition
• Securité
• Rôle ansible
• Mini-projet
Présentation du
formateur
• Dirane TAFEN (formateur et consultant
DevOps)
• Capgemini
• Sogeti
• ATOS
• BULL
• AIRBUS
• ENEDIS
Plan
• Présentation du formateur
• Introduction au DevOps et Ansible
• Commandes AD-HOC
• Découverte du yaml
• Inventaire ansible
• Playbook
• Templating, loop, condition
• Securité
• Rôle ansible
• Mini-projet
Introduction au DevOps et Ansible (1/3):
DevOps
• Agile: méthode de
développement
• DevOps: agilité dans le Dev et
l’Ops = CI + CD
Introduction au
DevOps et Ansible
(2/3): CI/CD
• Intégration en continu
• Test en continu
• Déploiement en continu
• Automatisation ☺
• Docker
• C’est quoi ?
✓Cloud provisionneur
✓Configuration Management
Introduction au ✓Déploiement d’Application
• Pourquoi ?
DevOps et ✓Efficace: pas d’agent, copie de
petit bout de code sur les
Ansible (3/3): machines distantes
✓Securisé: pas d’agent, utilise
Ansible OpenSSH
✓Contribution: open-source,
python
TP-0: Découvrir la plateforme de TP
• Accès
• Labs
• Durée d’une session
• Données sensibles
• Agrandir la fenêtre du terminal
• Connexion ssh
• Installation de paquet
• Ouverture de port
TP-1: Installation de Ansible
• Présentation du formateur
• Introduction au DevOps et Ansible
• Commandes AD-HOC
• Découverte du yaml
• Inventaire ansible
• Playbook
• Templating, loop, condition
• Securité
• Rôle ansible
• Mini-projet
Commandes AD-HOC (1/1): Principes
• Test de module
• Lancement de tâche
rapidement
• Peut être lancé sur un groupe
de machine
TP-2: Utilisation des commandes ad-hoc
• Présentation du formateur
• Introduction au DevOps et Ansible
• Commandes AD-HOC
• Découverte du yaml
• Inventaire ansible
• Playbook
• Templating, loop, condition
• Securité
• Rôle ansible
• Mini-projet
Découverte du yaml (1/5): Déclaration
de variables
Découverte du yaml (2/5): les tableaux
Découverte du yaml (3/5): Structures clé/valeur
Découverte
du yaml
(4/5):
Tableau de
tables de
hachage
Découverte
du yaml
(5/5): • Depuis la version 2.4 de
Inventaire Ansible
• All et Hosts
TP-3: Inventaire au format yaml
• Modifiez le fichier hosts que vous avez écris au format INI afin qu’il soit en
au format yaml
• Testez à nouveau vos commandes ad-hoc avec le nouveau fichier
d’inventaire au format yaml
Plan
• Présentation du formateur
• Introduction au DevOps et Ansible
• Commandes AD-HOC
• Découverte du yaml
• Inventaire ansible
• Playbook
• Templating, loop, condition
• Securité
• Rôle ansible
• Mini-projet
Inventaire ansible (1/5):
Problématique
Inventaire ansible
(2/5): Structure INI
Inventaire
ansible (3/5):
Structure
YAML
Inventaire ansible (4/5): Variable d’inventaire
Inventaire ansible (5/5): Application des variables
TP-4: Inventaire et variable
• Présentation du formateur
• Introduction au DevOps et Ansible
• Commandes AD-HOC
• Découverte du yaml
• Inventaire ansible
• Playbook
• Templating, loop, condition
• Securité
• Rôle ansible
• Mini-projet
Playbook
(1/3):
Structure
Playbook (2/3):
Variables
• Surcharge des host et group vars
• Variables à partir d’un ficher
Playbook (3/3): Simple Ansible Project
• Présentation du formateur
• Introduction au DevOps et Ansible
• Commandes AD-HOC
• Découverte du yaml
• Inventaire ansible
• Playbook
• Templating, loop, condition
• Securité
• Rôle ansible
• Mini-projet
Templating,
loop, condition
(1/3):
Templating
Templating,
loop,
condition
(2/3): loop
Templating,
loop,
condition
(3/3):
Condition
TP-6: Déployez votre propre site
• Créez un cluster (1 ansible et 1 client) et récupérez le code webapp stocké sur github
• Créez un dossier templates avec comme contenu un fichier index.html.j2 qui devra permettre d’afficher sur le site
“bienvenue sur -nom de l’hôté-”
• Modifiez le playbook deploy.yml afin:
• D’utiliser les loop pour installer git et wget à l’aide du module yum
• D’utiliser une condition afin de n’installer wget et git uniquement si nous sommes sur un système CentOS
• Modifiez le site internet par defaut, en copiant un template index.html.j2 qui devra afficher “bienvenue sur -nom de
l’hôté-” –nom de l’hôte- étant recupéré dans les variables fournies par ansible
• Modifiez le déploiement du conteneur apache pour qu’il monte le fichier index.html dans le repertoire dans lequel il
lit le site internet par defaut (consulter la Doc de apache sur le Dockerhub), vous utiliserez la notion de montage de
volume
• Vérifiez que votre site est bien conforme aux attentes
• Poussez votre travail que votre github privé car l’environnement dans lequel vous travaillez est éphémère
Plan
• Présentation du formateur
• Introduction au DevOps et Ansible
• Commandes AD-HOC
• Découverte du yaml
• Inventaire ansible
• Playbook
• Templating, loop, condition
• Securité
• Rôle ansible
• Mini-projet
Sécurité (1/2): Paire de clé
• ssh-keygen
• authorized_keys
• ansible_ssh_common_args='-o
StrictHostKeyChecking=no
Sécurité
(2/2): Vault
TP-7: Key pair et Vault
• Créez un cluster (1 ansible et 1 client) et récupérez votre code du TP-6 depuis votre github
• Créez un repertoire files qui va lui-même contenir un dossier secrets qui lui-même va contenir un fichier credentials.vault
• Déplacez la variable contenant la variable du mot de passe admin dans ce fichier
• Ensuite vous allez encryptez ce fichier à l’aide de la commande ansible-vault encrypt
• Vous allez modifiez le playbook deploy.yml afin de lui demander de charger le fichier vaulté en tant que vars_files
• Générez une paire de clé (ssh-keygen -t rsa) en laissant tous les paramètres par defaut
• Copiez le contenu de la clé publique (id_rsa.pub) dans le fichier /home/admin/.ssh/authorized_host du client
• Modifiez le fichier d’inventaire afin de rajouter cette variable à tous les hôtes (all) ansible_ssh_common_args='-o StrictHostKeyChecking=no
• Lancez votre playbook en rajoutant le paramètre qui vous permettra de fournir la clé vault
• Vérifiez que tout s’est bien passé
• Afin de conserver votre travail, poussez le sur votre github
Plan
• Présentation du formateur
• Introduction au DevOps et Ansible
• Commandes AD-HOC
• Découverte du yaml
• Inventaire ansible
• Playbook
• Templating, loop, condition
• Securité
• Rôle ansible
• Mini-projet
Rôle ansible (1/3): Objectif
• Templating
• Réutilisable
• Evolutif
• Adaptable
Rôle ansible
(2/3):
Structure
Rôle ansible (3/3): Galaxy Ansible
• Rôle communautaire
• Classé par catégorie
• Activement maintenu
• Chaque rôle est lié à un repo
github
• Ansible-galaxy
TP-8: Déployez wordpress
• Présentation du formateur
• Introduction au DevOps et Ansible
• Commandes AD-HOC
• Découverte du yaml
• Inventaire ansible
• Playbook
• Templating, loop, condition
• Securité
• Rôle ansible
• Mini-projet
Mini-projet: Créez votre propre rôle webapp
• Vous avez reçu la demande d’une autre équipe qui souhaiterait utiliser votre playbook webapp, mais sous
forme de rôle car sous cette forme ils pourront mieux variabiliser et adapter à leur situation
• Leur objectif est que votre rôle possède un playbook tests afin de leur permettre de tester rapidement votre
rôle et ainsi l’intégrer à leur process de déploiement, exactement comme le rôle wordpress
• La dernière raison pour laquelle vous devez faire ce rôle est que votre entreprise souhaite mettre en place
une galaxy privée pour stocker tous les rôles fait dans l’entreprise https://github.com/diranetafen/ansible-
role-containerized-wordpress#example-playbook
• A la fin de votre travail, poussez votre rôle sur github et envoyez nous le lien de votre repo à
[email protected] et nous vous dirons si votre solution respecte les bonnes pratiques et si votre rôle
est utilisable par une entreprise
Merci et à bientôt sur
eazytraining