Ansible, un projet libre et gratuit de Red Hat basé sur Python, est une plateforme populaire de gestion de la configuration et d’automatisation informatique.
Elle est multiplateforme et peut fonctionner avec la plupart des systèmes d’exploitation modernes, y compris Linux, Windows et Mac. Il prend en charge un langage déclaratif écrit en YAML
ou YAML Ain't Markup Language
pour décrire la configuration du système.
Ansible, ainsi que d’autres plateformes modernes de gestion de la configuration, a révolutionné l’automatisation informatique et les normes industrielles. Les outils de gestion de la configuration font désormais partie de la panoplie DevOps et sont indissociables du cycle de vie de tout processus informatique moderne. Cela s’applique à tout environnement d’infrastructure moderne, qu’il s’agisse d’un environnement sur site, hybride ou en nuage. Non seulement pour DevOps, mais Ansible peut également aider à automatiser de nombreuses tâches quotidiennes effectuées par un administrateur système.
L’un des avantages de l’utilisation d’Ansible est qu’il n’y a pas d’agent et qu’il n’a pas besoin de grand-chose pour démarrer, à part un accès SSH à la machine cible et la version prise en charge de Python, qui est déjà installée par défaut sur la plupart des systèmes d’exploitation modernes. En outre, comme il s’agit d’un outil léger, il peut être déployé et utilisé avec un héritage de systèmes innovants.
Utilisations d’Ansible
Orchestration
Ansible est un outil de choix pour l’orchestration de diverses tâches d’administration et de déploiement de systèmes. Les playbooks permettent d’utiliser les mêmes workflows d’orchestration dans différents projets et les données de configuration basées sur YAML
permettent de stocker et de versionner votre infrastructure sur un dépôt Git ou toute autre plateforme de contrôle de version prise en charge.
Déploiement d’applications
Qu’il s’agisse d’une simple application de quelques lignes de code ou d’un déploiement lourd à plusieurs niveaux, Ansible permet d’automatiser le cycle de vie du déploiement d’applications de bout en bout.
Sécurité et conformité
Ansible peut également vous aider à vous assurer que vos systèmes sont sécurisés conformément aux directives de votre organisation et aux normes de l’industrie. Il peut s’exécuter sur des milliers de serveurs, générer un audit et corriger les failles de sécurité, donnant ainsi à l’administrateur un contrôle total de l’environnement.
Examinons maintenant quelques-unes des tâches courantes d’administrateur système que vous pouvez automatiser avec Ansible.
Copier des fichiers à partir d’un système local ou distant
En tant qu’administrateur système, il est courant de copier des fichiers d’un répertoire à un autre. Les fichiers de configuration doivent souvent être copiés sur des serveurs distants, ou nous devons parfois déplacer des fichiers d’un emplacement distant à un autre.
Le module Ansible copy
peut vous aider à effectuer ces tâches dans un playbook.
C’est une tâche de routine pour un administrateur système de connaître l’état des serveurs gérés et d’effectuer des actions prédéfinies conformément aux politiques de l’organisation. L’une de ces tâches consiste à connaître le temps de disponibilité des serveurs. Avec Ansible, nous pouvons facilement récupérer les valeurs de temps de fonctionnement et les imprimer ensemble. Un exemple de copie de la configuration ntp
d’un serveur local vers un serveur distant à l’aide du module copy
est présenté ci-dessous :
---
- hosts : all
gather_facts : no
become : yes
tasks :
- name : Copy a new ntp configuration file and back up the original, if it different
copy :
src : ./ntp.conf
dest : /etc/ntp.conf
owner : root
group : root
mode : '0644'
backup : yes
Configurez des tâches cron supplémentaires
La mise en place de tâches planifiées pour effectuer des tâches de routine fait partie de la gestion de tout serveur. Vous pouvez programmer des sauvegardes automatiques, des correctifs, des audits, etc., à certaines heures de la journée ou du mois, de manière automatique, ce qui vous laisse du temps productif.
cron
est l’un des outils de Linux qui prend en charge la planification, et Ansible peut vous aider à ajouter ou à modifier ces tâches. À titre d’exemple, le playbook ci-dessous montre comment vous pouvez définir un travail rsync
en tant que root
sur certains ou tous vos serveurs facilement à l’aide d’Ansible.
---
- hosts : all
gather_facts : no
become : yes
tasks :
- name : Deploy cron job
cron :
name : "Set rsync job" (Définir le travail rsync)
user : root
minute : "5"
hour : "4"
job : "rsync -avz /chemin/vers/dossier1 /chemin/vers/dossier1 2>&1"
Gérer les disques et les systèmes de fichiers
Ansible peut être utilisé pour gérer les disques, les dispositions de partition, les systèmes de fichiers et les montages, y compris /etc/fstab
sur les serveurs Linux. Différents modules Ansible permettent de le faire. Voici un exemple qui crée une partition sur un disque de 100 Go
, la formate avec le système de fichiers ext4
, crée un nouveau répertoire pour le montage de la partition et enfin la monte sur un répertoire donné. Une entrée dans /etc/fstab
est également créée par un montage temporaire ou permanent en fonction des options du module.
---
- hosts : tous
gather_facts : no
become : yes
tasks :
- name : Create a partition
parted :
device : /dev/sdb
number : 1
part_end : "100%"
state : present
- name : Format new partition
filesystem :
fstype : ext4
dev : /dev/sdb1
- name : Create mount directory
file :
path : /data
état : répertoire
- name : Monter la partition
mount :
chemin : /data
src : /dev/sdb1
fstype : ext4
état : monté
Collectez les journaux du serveur
Il est parfois essentiel de conserver les journaux dans un endroit pratique pour des raisons de sécurité, d’audit et d’analyse. Ansible permet de collecter les logs des différents serveurs de votre environnement d’entreprise et de les conserver facilement à l’endroit que vous avez défini. Voici la procédure à suivre pour y parvenir :
---
- hosts : all
gather_facts : no
become : yes
tasks :
- name : Find logs
find :
paths : /var/log/
patterns : '*.log'
recurse : yes
register : _logs
- name : Récupérer les logs
fetch :
src : "{{ item.path }}"
dest : /tmp/logs
with_items : "{{ _logs.files }}"
Installer ou supprimer des paquets et des logiciels
Les paquets doivent souvent être installés à la demande des utilisateurs ou dans le cadre de la construction initiale du serveur. Nous pouvons également avoir besoin de supprimer certains paquets qui ne sont plus nécessaires ou qui ont des bogues critiques, etc. Ansible vous permet d’installer ou de supprimer facilement des paquets sans avoir à vous rendre sur chaque serveur et à exécuter des commandes manuelles. Voici un exemple d’installation et de suppression d’un paquetage pour des serveurs Linux basés sur Ubuntu et RHEL/CentOS.
---
- hosts : ubuntu
gather_facts : no
tasks :
- name : Installer l'utilitaire lsof
apt :
pkg : lsof
state : latest
sudo : yes
- nom : Supprimer l'utilitaire ARP Scan
apt :
pkg : arp-scan
state : absent
sudo : yes
---
- hôtes : centos
gather_facts : no
tasks :
- name : Installer l'utilitaire lsof
yum :
pkg : lsof
state : latest
sudo : yes
- nom : Supprimer l'utilitaire ARP Scan
yum :
pkg : arp-scan
state : absent
sudo : yes
Gestion des utilisateurs
Les utilisateurs et les groupes constituent la structure de base autour de laquelle les systèmes Unix/Linux gèrent les accès et les permissions. Dans une grande organisation, la gestion des utilisateurs et des groupes peut constituer un défi de taille malgré l’automatisation de l’environnement.
Avec Ansible, l’administrateur système dispose d’un excellent outil pour créer, modifier et supprimer des utilisateurs et des groupes avec toutes les possibilités offertes par le système d’exploitation.
Voici un exemple simple qui montre la création et la suppression d’utilisateurs et de groupes à l’aide d’Ansible. Après l’exécution de ce playbook, les serveurs cibles auront groupA
et groupB
créés avec les GID donnés tandis que user1
sera supprimé, s’il est présent. Un nouvel utilisateur sans shell sera créé en tant que user2
avec un UID donné, des groupes assignés et un mot de passe verrouillé.
---
- hosts : tous
gather_facts : no
become : yes
tâches :
- group :
gid : 12310
name : groupA
état : présent
- groupe :
gid : 12311
nom : groupB
état : présent
- user :
name : user1
état : absent
- utilisateur :
name : user2
uid : 12427
shell : /bin/false
password_lock : yes
groupes : groupA, groupB
Gestion des services
Les services sont des démons de processus qui s’exécutent en arrière-plan et servent un certain service, comme sshd
qui fournit la connectivité SSH, etc. Avec Ansible, vous pouvez gérer les services système et utilisateur, comme les démarrer, les arrêter et les redémarrer. Voici un exemple de playbook pour le démontrer :
---
- hosts : all
gather_facts : no
become : yes
tasks :
- name : Restart ssh daemon
service :
name : ssh
state : restarted
- name : Redémarrer le démon sssd
service :
name : sssd
state : stopped
- name : Redémarrer le démon httpd
service :
name : httpd
state : started
Dans l’exemple ci-dessus, le service SSH sera redémarré et le service SSSD sera ensuite arrêté. Le démon httpd
est démarré vers la fin. Comme Ansible est idempotent, tout service déjà démarré ou arrêté ne sera pas modifié, alors que le redémarrage modifie toujours l’état du service. N’oubliez pas de vérifier le nom du service car différentes distributions Linux utilisent d’autres noms même pour le même service comme ssh
et sshd
.
Résumé 👨💻
Ansible facilite la vie d’un administrateur système en vous permettant d’exécuter des tâches répétitives et fastidieuses de manière automatisée et en réduisant les erreurs et les efforts humains. De plus, il permet de stocker les données de configuration dans un dépôt de code central comme Git, ce qui permet à plusieurs utilisateurs de collaborer et d’examiner chaque activité.
Pour en savoir plus sur Ansible et ses nombreux modules, consultez sa documentation.