Ansible¶
Qu’est-ce que Ansible ?¶
Ansible est un outil d’automatisation basé sur Python. Ce dernier permet d’administrer tant bien des infrastructures complètes que des petits serveurs/postes clients dans leur coins. Il peut travailler sur du Windows (WinRM/Ssh), Linux (SSH), commutateurs réseaux …
Installation¶
pip¶
Pour disposer des dernières version d’Ansible, je préfère passer par Pip. Afin d’éviter d’avoir les commandes ansibles toujours actives, je vais les installer dans un environnement virtuel python (virtualenv).
apt install python3-virtualenv
virtualenv /var/lib/jenkins/.local/ansible
source /var/lib/jenkins/.local/ansible/bin/activate
pip install ansible
Nous voilà donc avec un ansible d’installé.
pipX¶
Dernièrement, j’ai découvert pipx. Ce dernier a l’avantage de créer un venv, et de mettre automatiquement la liste des outils installés dans le PATH de l’utilisateur. Donc un jolie compromis entre isolation et fonctionnalité à mon goût.
apt install pipx
pipx install --include-deps ansible #Particularité, le --include-deps est nécessaire ici pour avoir l'ensemble des commandes d'ansible.
pipx inject --include-app ansible ansible-lint #Rajout ansible-lint au venv ansible & propose l'application dans le path.
Configuration¶
Sécurisation¶
Fixer une version d’ansible lors de l’installation¶
On peut imaginer fixer une version d’ansible pour tester par exemple son code sur plusieurs versions. Dans ce cas, on va faire plusieurs environnements et installer ansible à chaque fois.
ansible_version="2.12 2.13 2.14"
for i in $ansible_version ; do
virtualenv /var/lib/jenkins/.local/ansible-${i}
source /var/lib/jenkins/.local/ansible-${i}/bin/activate
pip install https://github.com/ansible/ansible/archive/stable-${i}.tar.gz --disable-pip-version-check
done
Utilisation¶
Inventaire dynamique¶
Terraform permet de gérer de façon automatique l’inventaire de Ansible. Ça permet de donner à Terraform la partie déploiement de VM/déploiement initial des paramètres puis de focaliser Ansible sur le MCO. C’est plutôt cool à faire je trouve. Mais pour ça, quelques étapes :
Préciser dans son fichier inventaire qu’il doit charger ses infos depuis terraform :
---
plugin: cloud.terraform.terraform_provider
Et télécharger le module du même nom :
ansible-galaxy collection install cloud.terraform
Ensuite, quand on utilise l’inventaire, on trouve les machines provisionnées
ansible-inventory -i ./inventory.yml --graph