Cas pratique Ansible avec mes Raspberry Pi
Il y a un tas de bonnes pratiques et d'outils à découvrir et Ansible en fait parti, c'est une bibliothèque Python qui permet de déployer sur plusieurs machines les mêmes commandes à travers SSH.
Ça n'a l'air de rien comme ça mais c'est un véritable couteau suisse qui s'associe très bien à ce qui existe déjà, j'en ai trouvé rapidement une utilité avec mes Raspberry Pi. Lorsque je reinitialise le stockage principal d'un raspberry avec un nouvel OS, il me faut installer à nouveau un tas de logiciels et les paramétrer pour que je puisse me sentir comme à la maison. Une des solutions serait d'avoir ma propre image que j'installe partout... Mais ce serait du coup limité à une architecture et pas modifiable facilement. La deuxième solution serait de télécharger un script sur chaque machine et de l’exécuter, même si c'est déjà plus rapide, cela nécessite de se connecter sur chaque machine et de refaire la manipulation à chaque fois... Ce que permet justement de faire Ansible avec une unique commande.
Avoir Docker, Fish et Oh-My-Posh partout
Ma problématique
Je souhaite avoir Docker de configuré pour l'utilisateur par défaut ainsi que le Shell Fish dont le prompt serait celui que j'utilise partout via Oh-My-Posh.
La théorie
Il me faut donc appliquer la documentation d'installation officielle pour Docker, utiliser le gestionnaire de paquet pour installer fish, quelques commandes magiques pour changer le shell par défaut, télécharger ma configuration de posh. Le tout tient dans un ou plusieurs scripts shell.
Voyons ce que ça donne dans un playbook Ansible.
Le livret de jeu (playbook point yameul)
---
- name: Install Tools
connection: ssh
hosts: all
tasks:
- name: Update System
become: true
ansible.builtin.apt:
update_cache: true
only_upgrade: true
- name: Install Fish
become: true
ansible.builtin.apt:
name: fish
- name: Installing Docker
ansible.builtin.script: ./scritps/install-docker.sh
register: my_output
changed_when: my_output.rc
- name: Rights to docker
ansible.builtin.shell: sudo usermod -aG docker $USER
register: my_output
changed_when: my_output.rc
- name: Install Oh-My-Posh
ansible.builtin.script: ./scritps/install-ohmyposh.sh
register: my_output
changed_when: my_output.rc
- name: Set Fish as default shell
ansible.builtin.shell: sudo chsh -s /usr/bin/fish $USER
register: my_output
changed_when: my_output.rc
Cela applique sur chaque machine de l'inventaire les tâches listées et indique si tout s'est bien effectué.
Ansible va me devenir indispensable très rapidement et je vais trouver rapidement de nouveaux cas d'usages: Comme pour le déploiement d'applications et de services.
Discussion