L'automatisation est le grand idéal informatique et DevOps, mais d'après mon expérience, tout ce qui n'est pas immédiatement pratique peut tout aussi bien ne pas exister du tout. Il y a eu de nombreuses fois où j'ai trouvé une assez bonne solution pour une tâche, et je vais même la scripter, mais je m'arrête avant de la rendre littéralement automatisée parce que l'infrastructure pour une automatisation facile n'existe pas sur la machine Je travaille dessus.
En savoir plus sur Ansible
- Guide de démarrage rapide d'Ansible
- Aide-mémoire Ansible
- Cours en ligne gratuit :les bases d'Ansible
- Télécharger et installer Ansible
- eBook :L'entreprise automatisée
- Livre électronique :Ansible pour DevOps
- Livres numériques Ansible gratuits
- Derniers articles Ansible
Mon outil d'automatisation facile préféré était le système cron - ancien, fiable, orienté utilisateur et (à part une syntaxe de planification que je ne peux jamais mémoriser) simple. Cependant, le problème avec cron est qu'il suppose qu'un ordinateur est allumé 24 heures sur 24, tous les jours. Après avoir raté un trop grand nombre de sauvegardes planifiées, j'ai découvert anacron, le système cron basé sur des horodatages plutôt que sur des heures planifiées. Si votre ordinateur est éteint lorsqu'une tâche aurait normalement été exécutée, anacron s'assure qu'elle est exécutée lorsque l'ordinateur est rallumé. Créer une tâche est aussi simple que de déposer un script shell dans l'un des trois répertoires :cron.daily
, cron.weekly
, ou cron.monthly
(vous pouvez en définir plus si vous le souhaitez). Avec anacron, je me retrouve à mettre en place des scripts et des playbooks Ansible pour toutes sortes de tâches triviales, y compris des rappels contextuels des dates d'échéance ou des événements à venir.
C'est une solution simple et évidente à un problème moderne, mais cela ne me sert à rien si anacron n'est pas installé sur l'ordinateur.
Configuration du logiciel avec Ansible
Chaque fois que j'installe un nouvel ordinateur, qu'il s'agisse d'un ordinateur portable, d'un poste de travail ou d'un serveur, j'installe anacron. C'est facile, mais une installation anacron ne fournit que la commande anacron. Il ne configure pas l'environnement utilisateur anacron. J'ai donc créé un playbook Ansible pour configurer ce dont l'utilisateur a besoin pour utiliser anacron et installer la commande anacron.
Tout d'abord, le passe-partout Ansible standard :
---
- hosts: localhost
tasks:
Créer des répertoires avec Ansible
Ensuite, je crée l'arborescence de répertoires que j'utilise pour anacron. Vous pouvez considérer cela comme une sorte de crontab transparent.
- name: create directory tree
ansible.builtin.file:
path: "{{ item }}"
state: directory
with_items:
- '~/.local/etc/cron.daily'
- '~/.local/etc/cron.weekly'
- '~/.local/etc/cron.monthly'
- '~/.var/spool/anacron'
La syntaxe de ceci peut sembler un peu étrange, mais c'est en fait une boucle. Le with_items:
définit quatre répertoires à créer et Ansible parcourt le ansible.builtin.file:
directive une fois pour chaque répertoire (le nom du répertoire remplit le {{ item }}
variable). Comme pour tout dans Ansible, il n'y a pas d'erreur ou de conflit si le répertoire existe déjà.
Copier des fichiers avec Ansible
Le ansible.builtin.copy
module copie les fichiers d'un emplacement à un autre. Pour que cela fonctionne, j'avais besoin de créer un fichier appelé anacrontab
. Ce n'est pas un playbook Ansible, donc je le garde dans mon ~/Ansible/data
répertoire, où je conserve les fichiers de support pour mes playbooks.
- name: copy anacrontab into place
ansible.builtin.copy:
src: ~/Ansible/data/anacrontab
dest: ~/.local/etc/anacrontab
mode: '0755'
Mon anacrontab
est simple et imite celui que certaines distributions installent par défaut dans /etc/anacron
:
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
1 0 cron.day run-parts $HOME/.local/etc/cron.daily/
7 0 cron.wek run-parts $HOME/.local/etc/cron.weekly/
30 0 cron.mon run-parts $HOME/.local/etc/cron.monthly/
Exécuter anacron lors de la connexion
La plupart des distributions Linux configurent anacron pour lire les travaux depuis /etc/anacron
. J'utilise principalement anacron en tant qu'utilisateur régulier, donc je lance anacron depuis mon login ~/.profile
. Je ne veux pas avoir à me rappeler de le configurer moi-même, alors j'ai Ansible pour le faire. J'utilise le ansible.builtin.lineinfile
module, qui crée ~/.profile
s'il n'existe pas déjà et insère la ligne de lancement anacron.
- name: add local anacrontab to .profile
ansible.builtin.lineinfile:
path: ~/.profile
regexp: '^/usr/sbin/anacron'
line: '/usr/sbin/anacron -t ~/.local/etc/anacrontab'
create: true
Installer anacron avec Ansible
Pour la plupart de mes systèmes, le dnf
module fonctionnerait pour l'installation du paquet, mais mon poste de travail exécute Slackware (qui utilise slackpkg
), et parfois une distribution Linux différente fait son chemin dans ma collection. Le ansible.builtin.package
Le module fournit une interface générique pour l'installation des packages, je l'utilise donc pour ce playbook. Heureusement, je n'ai pas rencontré de dépôt qui s'appelle anacron
tout sauf anacron
, donc pour l'instant, je n'ai pas à tenir compte des différences potentielles dans les noms de packages.
Il s'agit en fait d'un jeu séparé car l'installation du package nécessite une élévation de privilèges, fournie par le becomes: true
directives.
- hosts: localhost
become: true
tasks:
- name: install anacron
ansible.builtin.package:
name: anacron
state: present
Utiliser anacron et Ansible pour une automatisation facile
Pour installer anacron avec Ansible, je lance le playbook :
$ ansible-playbook ~/Ansible/setup-anacron.yaml
À partir de là, je peux écrire des scripts shell pour effectuer des tâches triviales mais répétitives et les copier dans ~/.local/etc/cron.daily
pour qu'il s'exécute automatiquement une fois par jour (ou à peu près). J'écris également des playbooks Ansible pour des tâches telles que le nettoyage de mon dossier de téléchargements. Je place mes playbooks dans ~/Ansible
, où je garde mes lectures Ansible, puis je crée un script shell dans ~/.local/etc/cron.daily
pour exécuter la pièce. C'est facile, indolore et devient rapidement une seconde nature.