0% ont trouvé ce document utile (0 vote)
119 vues22 pages

Ansible

Le document présente Ansible, un outil d'automatisation de l'infrastructure, en détaillant son installation, son utilisation et ses fonctionnalités. Il couvre les concepts clés tels que les playbooks, les modules, les rôles, et la gestion des variables, tout en fournissant des exemples pratiques. Enfin, il aborde des cas d'utilisation collaboratifs et des conseils pour une mise en œuvre efficace.

Transféré par

Elyes Bournane
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
119 vues22 pages

Ansible

Le document présente Ansible, un outil d'automatisation de l'infrastructure, en détaillant son installation, son utilisation et ses fonctionnalités. Il couvre les concepts clés tels que les playbooks, les modules, les rôles, et la gestion des variables, tout en fournissant des exemples pratiques. Enfin, il aborde des cas d'utilisation collaboratifs et des conseils pour une mise en œuvre efficace.

Transféré par

Elyes Bournane
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Automatiser

l’infrastructure avec
Ansible
par

Sébastien FLEURY 1 / 22
Introduction


Projet créé en 2012 entièrement en Python

Répond à des besoins de remplacement, de
déploiement ou de changements de serveur.

Agentless, accès SSH, pilote Windows,
Linux, Unix, Cisco, Juniper

D’autres produits ont un mode client/serveur :
Puppet en Ruby, Chef en Erlang, SaltStack
(également Agentless) en Python
2 / 22
Mise en oeuvre


Une installation simple (wsl sous windows)
– apt install ansible
– Mac M1 => Cliquer sur activer Rosetta dans le terminal

Un inventaire de l’infrastructure managée
– Organisé par groupe de machine
– Dans /etc/ansible ou dans un fichier inventory.yml qui serait
stocké dans votre projet

Des variables pour rendre les recettes génériques
– ansible_ssh_user définie l’utilisateur ssh utilisé

Utilisation du format YAML
3 / 22
Les outils


ansible : Execution d’une tâche

ansible-playbook : Execution de playbook (ensemble de tâches
à effectuer)

ansible-doc : Accès au listing + documentation des serveurs

ansible-vault : Gestion de fichiers chiffrés (stockage variable mot
de passe)

ansible-galaxy : Accès au dépôt des rôles d’ansible

Exemple :
ansible –i hosts all –m ping -k
ansible-doc --list

4 / 22
Les accès


En utilisant les informations de connexion dans l’inventaire
– ansible_host : IP Address
– ansible_user : remote_login

En précisant toutes les informations sur la ligne de commande ansible
– ansible -i inventory.yml all -m ping -u sfladmin -k

En configurant la machine de management pour une connexion
transparente
– Créer une paire de clé SSH (ssh-keygen)
– Déployer la clé publique sur chacun des serveurs

ssh-copy-id monuserdistant@monipdistante
– Le login utilisateur pour chaque hôte peut être spécifié dans l’inventaire
(ansible_user=remote_login)

5 / 22
Inventaire
webservers:
inventory.yml hosts:
foo.example.com:
ansible_host : 192.168.1.1
ansible_user : myuser
dbservers:
hosts:
one.example.com:
ansible_host : 192.168.1.2
ansible_user : myuser
two.example.com:
ansible_host : 192.168.1.3
ansible_user : myuser
three.example.com:
ansible_host : 192.168.1.4
ansible_user : myuser

6 / 22
ry
t o En tant qu’administrateur je souhaite initialiser un projet
S
r Ansible
e
Us


Créer un répertoire de projet ansible_tp1 et initialiser un dépôt Git

Créer une machine virtuelle VirtualBox ou Parallele (Mac) ou
mac.getutm.app (mac m1) en mode réseau bridge
– Pour obtenir son ip : ip a

Créer un fichier d’inventaire hosts.yml
– https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html

Valider la connexion ssh vers la machine virtuelle
– Installer SSH sur la machine virtuelle (apt install openssh-server)
– Voir slide suivant sur les accès pour générer son identité
– ansible -i hosts.yml all -m ping -k

Récupérer les facts et identifier la variable qui contient le type de système
d’exploitation
– ansible -i hosts.yml all -m setup -k

7
Les modules


Ce sont les actions executées par Ansible

Ils sont modulaires, réutilisables, configurables, idempotent

Quelques modules courants
– ping : validation de l’inventaire
– setup : retourne une liste d’informations matériels de l’hôte
– shell et command : permettent d’exécuter des commandes sur les hôtes
– user : permet de gérer des utilisateurs sur les hôtes
– file : permet de gérer des droits sur des fichiers
– service : permet de gérer les services systèmes tel que :
arrêt/démarrage/redémarrage ou activation et désactivation au boot
– yum/apt/zypper : permet de gérer l’installation, la mise à jour et la suppression de
paquets

https://docs.ansible.com/ansible/latest/collections/ansible/builtin/index.html

8 / 22
Les playbooks


Ils exécutent un ensemble de taches (tasks) sur des
hôtes (hosts) de manière séquentiel

Ils peuvent aussi :
– Emettre des notifications, qui seront utiles pour déclencher
une action dans certaines conditions
– Effectuer des actions conditionnelles selon leur valeur (par
exemple le type de distribution du système)
– Utiliser des templates pour créer ou modifier des fichiers

On trouve aussi :
– Des rôles à utiliser
– Des handlers (tâches spécifiques se déclenchant grâce à
une notification)
– Des éléments de configuration pour Ansible (par exemple
l’utilisation de sudo)
– Des variables spécifiques qui ne sont pas reliées à
l’inventaire.

ansible-playbook -i inventory.yml install_apache.yml 9 / 22


ry
t o User Story
S
r Déployer un administrateur
e
Us
Prerequis : Sur la VM (apt install sudo ET usermod -a -G sudo <monuser>)

Créer un playbook system.yml

Créer un user esiee
– Utiliser le module user
– Ajouter become: true au playbook
– Ajouter -K a la ligne de commande pour le sudo password

Déployer la clés SSH des administrateurs à l’utilisateur esiee
– Utiliser le module authorized_keys
– Renseigner les clés dans des fichiers du projet (pas de lookup)

Ajouter le user au groupe des sudoers
– Autoriser l’utilisateur à effectuer un sudo sans mot de passe en créant le fichier
/etc/sudoers.d/esiee:

esiee ALL=(ALL) NOPASSWD :ALL

Valider le bon fonctionnement
– ssh esiee@monip => pas de mdp + sudo su => pas de mdp
– Modifier votre inventaire pour utiliser l’utilisateur esiee désormais
10
Variables


Types des variables
– Simple

project_name : ‘persoalea’
– Dictionnaire

ssh_keys :
– "public_keys/sebastien-fleury"
– "public_keys/john-snow"

Utilisation {{project_name}}

Les facts sont les variables alimentées par la collecte des caractéristiques serveurs
– ansible –m setup hostname

Dans l’inventaire par machine ou par groupe
– db1.digitalseeder.net :
var1 : master
var2 : autrecontenudevariable

Dans le playbook pour surcharger les variables par défaut des rôles

Dans le rôle comme variable par défaut
– Peuvent être stockés dans les répertoires group_vars, ou host_vars
– group_vars/mygroup/main.yml

11 / 22
Structure de controle


S’appliquent sur les taches ou dans les templates

Les conditions
– when: ansible_os_family == ‘Debian’

Les boucles
– with_items:

vim

Emacs
– Chaque itération alimente la variable item avec l’index courant du
dictionnaire, on peut ainsi utiliser la variable "{{ item }}"

Les inclusions
– include: common-setup.yml

12 / 22
Templates


Au format jinga2

Utilisation des structures de contrôle

Acceptent les variables définies dans le
projet

- name: Copy a new sudoers file into place, after passing validation with visudo
ansible.builtin.template:
src: templates/sudoers/esiee
dest: /etc/sudoers.d/esiee
validate: /usr/sbin/visudo -cf %s

13 / 22
ry
t o User Story
S
r Déployer un message of the day
e
Us


Déployer un message of the day
– Le fichier /etc/motd sera affiché par le serveur à la
connexion

Utiliser le module templates pour déployer le fichier
– https://docs.ansible.com/ansible/latest/collections/ansible/
builtin/template_module.html

Utiliser une variable fact, une variable globale et une
variable dédiée à l’hote
– Host => server_description :
– Global=> project_name :
14
Roles et galaxy ansible


Les rôles sont des ensembles de taches génériques réutilisables,
testables et distribuables

Création de l’arborescence d’un rôle common
– ansible-galaxy init common


Des rôles disponibles en ligne
– ansible-galaxy install geerlingguy.apache

Les dépendances s’installent depuis un fichier requirements.yml
– ansible-galaxy install -r requirements.yml
– https://galaxy.ansible.com/docs/using/installing.html

Les roles sont téléchargés dans ~/.ansible/roles

15 / 22
Secure Vault


Stocker les credentials

ansible-vault create group_vars/all.yml
– Use password to encrypt

ansible-vault edit group_vars/all.yml
– https://devopssec.fr/article/vaults-ansible

Executer le playbook avec l’option
– --ask-vault-pass

16 / 22

http://docs.ansible.com/ansible/modules_by_
category.html

https://blog.stephane-robert.info/post/ansible-
inventaire-static-precedence-tips/

https://www.makeareadme.com/

17 / 22
ry
t o User Story
S
r TP Ansible collaboratif
e
Us


Vous êtes en groupes de 3
– 1 projet Gitlab + chaque collaborateur est ajouté

Vous créez un projet déployant
– 1 serveur web avec Wordpress

Des règles de sécurité iptables n’autorisant que le port HTTP et SSH
– 1 serveur de BDD, les mots de passes seront stockés dans Vault
– 1 serveur DNS supportant le domaine esiee-tp.local
– 1 backup de la bdd en local est effectué tous les jours à 1h00
– Il doit être possible de renseigner plusieurs noms de domaine client

Www.esiee99.local

Www.esiee98.local

Le playbook doit pouvoir être lancé du poste client

Vous utilisez une bonne organisation des variables

Vous aurez un rôle system

Vous pouvez utiliser les roles de la galaxy

Présentation à 16h00

18
ry
t o
S TIPS and TRICKS
er
Us


Vous pouvez utiliser les roles Galaxy
– geerlingguy mysql
– geerlingguy apache

Creer un ticket puis merge request => crée la
branche
– Git fetch pour récupérer en local
– Git checkout pour s’y rendre
– Git push pour envoyer sa branche
– Consulter ensuite sa Merge Request
19
ry
t o
S Playbook GitlabRunner
er
Us

Coté Gitlab
– Retirer les runner partagés sur votre groupe de projets Gitlab
– Récupérer le token de groupe pour le runner gitlab

Créer un playbook déployant un runner Gitlab
– Utiliser le rôle https://github.com/riemers/ansible-gitlab-runner/
– Enregistrer le runner sur Gitlab en surchargeant la variable
registration_token
– Ajouter le déploiement du serveur web Nginx

Créer un nouveau projet Git sample_web_page avec 1 page web
– Créer un fichier .gitlab-ci.yml dans le projet en s’aidant du modèle de la
CI/CD
– Déployer une page web sur un serveur Nginx dans le répertoire
/var/www/html
20
Expertise DevOps depuis
2016
21 / 22
www.digitalseeder.com
22 / 22

Vous aimerez peut-être aussi