L'automatisation des tâches de gestion des packages et des mises à jour est essentielle pour les administrateurs système et les développeurs. Ansible, un outil populaire de gestion de configuration, offre une solution efficace pour orchestrer ces opérations en utilisant des modules dédiés, notamment ceux liés à Apt, le gestionnaire de packages de Debian et ses dérivés.
Il s’agit d’un outil open source utilisé dans les environnements informatiques. Il permet aux équipes IT de déployer, de gérer et de mettre à jour de manière cohérente et efficace des infrastructures informatiques complexes.
L'architecture d'Ansible repose sur un modèle "agentless", ce qui signifie qu'aucun agent logiciel n'est nécessaire sur les machines cibles. Au lieu de cela, Ansible utilise SSH pour se connecter aux machines distantes et exécuter les tâches définies dans les playbooks, qui sont des scripts YAML décrivant les actions à effectuer.
Comment utiliser apt avec Ansible ?
Rappel : qu’est-ce que “apt” ?
C’est le gestionnaire de packages par défaut utilisé par les distributions basées sur Debian, telles que Ubuntu. Avec Ansible, il est possible de gérer les opérations liées à Apt de manière automatisée, en utilisant des modules spécifiques pour effectuer des mises à jour, des installations et des gestion des versions de packages.
Les actions effectuées par Ansible sont décrites dans des fichiers .yaml qui sont appelés des Playbooks. Ils contiennent des instructions pour définir de manière claire et structurée les actions à réaliser, les machines à cibler, les variables à utiliser et les conditions.
Mise à jour des paquets avec Ansible et apt
L'une des opérations les plus courantes de la gestion des packages avec Apt consiste à actualiser la liste des packages disponibles. Cela se fait généralement en utilisant les commandes "apt-get update". Il est possible d'automatiser cette tâche en utilisant le module "apt" pour exécuter ces commandes sur les machines cibles. Par exemple :
1name: Update apt package cache
2apt:
3 update_cache: 'yes'
Une fois que le cache Apt est à jour, il est possible de mettre à jour les packages installés sur les machines cibles. Ansible permet de réaliser cette opération en utilisant le module "apt" :
1name: Update all packages to the latest version
2apt:
3 upgrade: dist
4 update_cache: 'yes'
Gestion du cache avec Ansible
Bien que souvent négligé mais pour autant important, Ansible permet de gérer efficacement le cache des packages sur vos serveurs, contribuant ainsi à l’optimisation de la bande passante et de l’optimisation de la distribution.
Par exemple, vous pouvez spécifier l'option "update_cache: yes" dans votre playbook Ansible pour mettre à jour le cache des packages avant d'effectuer l'installation.
Vous pouvez également définir la durée de validité du cache, en utilisant par exemple l’option "cache_valid_time: 3600" dans votre playbook. Ici, le cache des packages reste valide pendant 3600 secondes, soit une heure, avant d’être mis à jour. Cette approche permet d’optimiser les performances des installations en évitant de télécharger systématiquement les informations sur les packages.
Installation de packages
Un des buts principaux de Ansible est d’automatiser l’installation de package. L’utilisation de state permet de spécifier si le package doit être installé (present) ou désinstallé (absent). La tâche suivante installe le package Apache2 sur les machines cibles s'il n'est pas déjà installé.
1name: Install Apache2 package
2apt:
3 name: apache2
4 state: present
Il est également possible de s’assurer que les postes cibles disposent toujours de la dernière version d’un package. Ici, cette tâche installe la dernière version du package Nginx sur les machines cibles en passant par un dépôt externe et en s'assurant qu'elles disposent toujours des versions les plus récentes :
1name: Add Nginx repository and install Nginx
2apt_repository:
3 repo: "deb https://nginx.org/packages/mainline/debian/ buster nginx"
4 state: present
5 apt:
6 name: nginx
7 state: latest
Installer des packages unitairement peut vite s’avérer chronophage. Voici un exemple pour installer donc une liste de packages :
1name: Install list of packages
2hosts: myserver
3become: yes
4tasks:
5 - name: Update apt cache
6 apt:
7 update_cache: yes
8
9 - name: Install list of packages
10 apt:
11 name: "{{ item }}"
12 state: present
13 loop:
14 - apache2
15 - nginx
16 - mysql-server
17 - php
La particularité ici est l’utilisation de la variable name: "{{ item }}" : elle parcourt chaque objet de la liste via la boucle loop , et installe chaque packages sur le système.
Gestion des versions
La gestion des versions des packages est un aspect crucial dans la maintenance des systèmes informatiques, car elle garantit la cohérence et la compatibilité des logiciels installés. Avec Ansible et apt, vous avez la possibilité de gérer précisément les versions des packages que vous souhaitez installer sur vos serveurs.
Pour installer une version spécifique de Nginx nous utiliserons ainsi le code suivant :
1name: Install a specific version of Nginx
2apt:
3 name: nginx=1.18.2
4 state: present
Exemple complet
Regardons maintenant un exemple complet d’un Playbook :
1name: Install applications on servers
2hosts:
3 - server1
4 - server2
5become: yes
6tasks:
7 - name: Update apt cache
8 apt:
9 update_cache: yes
10
11 - name: Install Apache2
12 apt:
13 name: apache2
14 state: present
15
16 - name: Install list of applications
17 apt:
18 name: "{{ item.name }}"
19 state: "{{ item.state }}"
20 loop:
21 - { name: nginx, state: present }
22 - { name: mysql-server=5.7, state: present }
23 - { name: php, state: present }
Ici, nous commençons par définir le nom du Playbook et les serveurs ciblés. La directive become: yes indique d’utiliser les autorisations maximales pour les installations.
- La première tâche consiste à mettre à jour le gestionnaire apt.
- Ensuite, nous installons Apache2.
- Et enfin, nous installons une liste d’applications. Les variables permettent d’itérer sur chaque élément de la boucle (si nous avions besoin d’état différents, nous aurions pu le stipuler ici). Les packages peuvent être également indiqués avec des versions spécifiques.
La combinaison d'Ansible et d'apt offre une solution puissante pour la gestion automatisée des packages sur vos serveurs. Les playbooks Ansible vous permettent de décrire de manière claire et structurée les actions à réaliser, allant de la mise à jour des caches à l'installation de packages spécifiques, en passant par la gestion des versions.
Avec Ansible, vous pouvez automatiser efficacement les tâches de gestion des packages, garantissant ainsi la cohérence et la fiabilité de vos systèmes. En spécifiant les états des packages, les versions à installer et en utilisant des loops, vous pouvez personnaliser vos playbooks pour répondre aux besoins spécifiques de votre infrastructure.