Ansible – Introduction et les 3 types d’installation

ansible linux-man

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

Laisser un commentaire