Présentation d’Ansible
Ansible est un service d’orchestration et de gestion de configuration écrit en Python. Il permet d’automatiser des taches sur un ou plusieurs serveurs en même temps. L’intérêt d’utiliser Ansible est qu’il permet l’idempotence des tâches, c’est-à-dire que les taches exécuté auront le même résultat la première fois, la deuxième fois, la troisième fois, etc … .
Ainsi on peut gérer le déploiement de toute une infrastructure de manière automatisée et totalement réutilisable par nos successeurs en charge de l’infrastructure.
Aucune installation n’est nécessaire sur les nodes clientes car Ansible utilise SSH pour se connecter aux clients et effectuer les actions.
Installation
Il existe 3 possibilités pour installer notre orchestrateur de configuration :
- Installation via le binaire du dépôt Git
- Installation via pip
- Installation via les paquets
Personnellement ma préférée est l’installation via les paquets de distribution linux mais nous verrons les 3 types d’installation.
Installation via le binaire du repo Git
git clone https://github.com/ansible/ansible.git
cd ansible
source ./hacking/env-setup
sudo apt install python-pip
pip install --user -r ./requirements.txt
Installation via pip pour Centos
yum install python3 python3-pip
pip3 install --upgrade pip
pip3 install ansible
Installation via pip pour Ubuntu / Debian
apt install python3 python3-pip
pip3 install --upgrade pip
pip3 install ansible
Installation via les paquets ( pour centos )
yum update
yum install epel-release
yum update
yum install ansible
Installation via les paquets ( pour ubuntu / debian )
apt update
apt install ansible
Dans le prochain article, nous verrons comment déployer nos configurations à travers nos premiers playbook et les commandes CLI, en attendant si tu veux en savoir plus sur n’hésites pas à jeter un œil à la documentation officielle.
Fonctionnement d’Ansible
Les concepts clés d’Ansible sont les playbooks, les modules et les inventaires.
Playbooks
Les playbooks sont des scripts écrits en YAML qui décrivent les tâches à exécuter et l’ordre dans lequel elles doivent être exécutées.
La structure générale d’un playbook:
- les playbooks sont écrits en YAML
- un playbook est composé d’une ou plusieurs tâches (généralement décrites sous forme de modules)
- chacune des tâches peut avoir des paramètres (comme des variables)
- les tâches sont exécutées dans l’ordre dans lequel elles sont décrites dans le playbook
Les modules
Les modules sont des scripts préécrits qui effectuent des tâches spécifiques, comme la gestion des utilisateurs ou la configuration des services.
Les inventaires
Les inventaires sont des fichiers qui décrivent les noeuds clients sur lesquels Ansible doit exécuter des tâches.
Ansible se connecte aux noeuds clients en utilisant SSH.
Il utilise ensuite les informations de l’inventaire pour savoir sur quelles machines il doit exécuter les tâches décrites dans les playbooks. Il utilise également les modules pour effectuer les tâches spécifiques décrites dans les playbooks.
exemple d’inventaire :
[test]
serveur-test
serveur-test2
[webservers]
web1 ansible_host=192.168.1.100 ansible_user=ubuntu
web2 ansible_host=192.168.1.101 ansible_user=ubuntu
[dbservers]
db1 ansible_host=192.168.1.102 ansible_user=root
db2 ansible_host=192.168.1.103 ansible_user=root
Les rôles
Les rôles permettent de regrouper les tâches, les variables et les fichiers de configuration liés à une fonctionnalité ou à un composant spécifique d’une infrastructure.
exemple de structure de mon rôle bind :
bind/
├── defaults
│ └── main.yml
├── files
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── README.md
├── tasks
│ └── main.yml
├── templates
│ ├── db.ip.j2
│ ├── db.mondomaine.j2
│ ├── named.conf.local.j2
│ └── named.conf.options.j2
├── tests
│ ├── inventory
│ └── test.yml
└── vars
└── main.yml
- Le répertoire « defaults » contient des fichiers de variables par défaut pour le rôle. Le fichier « main.yml » contient les variables par défaut utilisées par le rôle.
- Le répertoire « files » contient des fichiers statiques qui seront utilisés par le rôle, tels que des fichiers de configuration ou des scripts.
- Le répertoire « handlers » contient des fichiers décrivant les tâches à exécuter en cas d’événement, comme un service qui redémarre.
- Le répertoire « meta » contient des informations sur le rôle, comme les dépendances et les informations de licence.
- Le fichier « README.md » est un fichier de documentation pour le rôle, contenant des informations sur son utilisation et sa configuration.
- Le répertoire « tasks » contient les tâches à exécuter pour configurer le rôle.
- Le répertoire « templates » contient des fichiers de modèles Jinja2 qui seront utilisés pour générer des fichiers de configuration.
- Le répertoire « tests » contient des fichiers pour tester le rôle, comme un inventaire d’équipements de test et des playbooks de test.
- Le répertoire « vars » contient des fichiers de variables pour le rôle. Le fichier « main.yml » contient les variables utilisées par le rôle.
En résumé, cette structure de rôle Ansible permet de regrouper tous les éléments nécessaires à la configuration de bind: les tâches, les variables, les fichiers de configuration et les templates, avec une structure claire et organisée pour faciliter la maintenance et la compréhension.
Exemple de playbook ansible
Un playbook qui appel un rôle :
---
- name: install bind
hosts: boss
become: yes
roles:
- bind
Un playbook avec des tâches :
---
- name: Configure Apache on webservers
hosts: webservers
become: true
tasks:
- name: Install Apache
apt:
name: apache2
state: present
- name: Start Apache service
service:
name: apache2
state: started
enabled: true
- name: Copy Apache config file
template:
src: templates/httpd.conf.j2
dest: /etc/apache2/httpd.conf
- name: Restart Apache service
service:
name: apache2
state: restarted
Ce playbook utilise le module « apt » pour installer Apache sur les équipements, le module « service » pour démarrer et activer le service Apache, le module « template » pour copier un fichier de configuration pour Apache à partir d’un modèle et enfin redémarre le service Apache pour appliquer les nouvelles configurations.
Dans cet exemple on utilise la commande become: true
pour exécuter les tâches en mode sudo.
On peut aussi utiliser des variables dans les playbooks pour rendre les tâches plus paramétrables et réutilisables.
Exemples d’utilisation
Configuration de systèmes
Ansible peut être utilisé pour configurer automatiquement les paramètres de systèmes tels que les paramètres réseau, la sécurité, les services et les logiciels.
Les administrateurs peuvent utiliser Ansible pour automatiser les tâches de configuration récurrentes telles que la mise à jour de la sécurité ou la configuration de nouveaux serveurs.
Déploiement d’applications
Il est également utilisé pour automatiser le déploiement d’applications y compris la configuration des serveurs, la mise en place des bases de données et la gestion des dépendances.
Les développeurs peuvent l’utiliser pour automatiser les tâches de déploiement telles que la configuration de l’environnement de développement ou la mise en production.
Gestion de la sécurité
Ansible peut être utilisé pour automatiser les tâches de sécurité comme la mise à jour des stratégies de sécurité, la configuration des pare-feux et la gestion des utilisateurs.
Les équipes de cybersécurité peuvent l’utiliser pour automatiser les tâches de sécurité courantes telles que la mise à jour des stratégies de sécurité ou la configuration des pare-feux.
Automatisation de la mise à jour
Ansible peut être utilisé pour automatiser les tâches de mise à jour, telles que la mise à jour des logiciels, la mise à jour des firmwares et la gestion des correctifs de sécurité.
Les administrateurs peuvent utiliser Ansible pour automatiser les tâches de mise à jour, telles que la mise à jour des logiciels ou la mise à jour des firmwares.
Surveiller les services
Il peut être utilisé pour automatiser les tâches de surveillance, telles que la surveillance des services, la surveillance des performances et la surveillance des erreurs. Les administrateurs peuvent utiliser Ansible pour automatiser les tâches de surveillance, telles que la surveillance des services ou la surveillance des performances.
Découvres comment Ansible Playbook peut t’aider à automatiser efficacement et en toute confiance la gestion de ton infrastructure informatique et comment il peut te faire gagner énormément de temps et réduire les erreurs humaines. => Ansible-playbook