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

TroubleShooting