Aller au contenu principal

Podman sous WSL pour tester du code Ansbile

· 5 minutes de lecture
Stéphane ROBERT

logo devops

Changement de mission donc changement de contexte. Je suis désormais contraint à utiliser wsl sur mon poste de travail, et j'ai ainsi cherché à optimiser son utilisation pour développer des rôles Ansible. Autre contrainte ne pas utiliser Docker Desktop, heureusement, il est possible d'installer podman

Introduction

Maintenant que le contexte est posé je vais vous expliquer comment installer podman sur wsl2, puis le configurer pour l'utiliser pour développer mes rôles et playbooks Ansible. Je compte utiliser aussi les environnements d'exécution d'Ansible.

Pourquoi utiliser les environnements d'exécution ? Pour éviter de devoir installer pour chaque projet toutes ses dépendances. En effet, un environnement d'exécution Ansible embarque tout ce qu'il faut pour exécuter un playbook et ses dépendances dans son contexte. Il permet ainsi de définir la version de python, la version d'ansible ainsi que celles des rôles et collections. J'ai détaillé son utilisation dans ce billet.

Installation de podman sur WSL2 Ubuntu

Je vais ajouter le dépot apt de podman pour obtenir la dernière version stable :

sudo mkdir -p /etc/apt/keyrings
curl -fsSL "https://download.opensuse.org/repositories/devel:kubic:libcontainers:unstable/xUbuntu_$(lsb_release -rs)/Release.key" \
| gpg --dearmor \
| sudo tee /etc/apt/keyrings/devel_kubic_libcontainers_unstable.gpg > /dev/null
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/devel_kubic_libcontainers_unstable.gpg]\
https://download.opensuse.org/repositories/devel:kubic:libcontainers:unstable/xUbuntu_$(lsb_release -rs)/ /" \
| sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:unstable.list > /dev/null
sudo apt update -qq
sudo apt -qq -y install podman

Test d'ansible-navigator

Dans un premier temps, nous allons installer ansible-navigator avec pipx :

sudo apt install python3-pip
sudo pip install pipx
pipx install ansible-navigator

Essayons de lancer ansible-navigator :

ansible-navigator
--------------------------------------------------------------------
Execution environment image and pull policy overview
--------------------------------------------------------------------
Execution environment image name: quay.io/ansible/creator-ee:v0.9.1
Execution environment image tag: v0.9.1
Execution environment pull arguments: None
Execution environment pull policy: tag
Execution environment pull needed: True
--------------------------------------------------------------------
Updating the execution environment
--------------------------------------------------------------------
Running the command: podman pull quay.io/ansible/creator-ee:v0.9.1
Trying to pull quay.io/ansible/creator-ee:v0.9.1...
Getting image source signatures
Copying blob 9f45cf1cd9f2 done

...

Warning: Issues were found while applying the settings.
Hint: Command provided: ''

Error: Execution environment support while using podman requires a '/dev/mqueue/' directory.
Hint: Try creating it with 'mkdir /dev/mqueue/' or reference the documentation for your operating system related to POSIX message
queues.

Note: Configuration failed, using default log file location.
(/home/dila/projets/work/snau/outils-transverse/ansible-navigator.log) Log level set to debug
Hint: Review the hints and log file to see what went wrong.

Création du dossier /dev/mqueue :

sudo mkdir /dev/mqueue

Relance :

ansible-navigator

0│Welcome ▒
1│————————————————————————————————————————————————————————————————————————————————————————————————————————————————————▒
2│ ▒
3│Some things you can try from here: ▒
4│- :collections Explore available collections ▒
5│- :config Explore the current ansible configuration ▒
6│- :doc <plugin> Review documentation for a module or plugin ▒
7│- :help Show the main help page ▒
8│- :images Explore execution environment images ▒
9│- :inventory -i <inventory> Explore an inventory ▒
10│- :log Review the application log ▒
11│- :lint <file or directory> Lint Ansible/YAML files (experimental)
12│- :open Open current page in the editor ▒
13│- :replay Explore a previous run using a playbook artifact
14│- :run <playbook> -i <inventory> Run a playbook in interactive mode
15│- :settings Review the current ansible-navigator settings
^b/PgUp page up ^f/PgDn page down ↑↓ scroll esc back :help help

Cela fonctionne cette fois :

Activation de l'extension Ansible vscode et activation de l'environnement d'exécution

Si vous n'avez pas encore installé l'extension officielle d'Ansible, vous pouvez vous rendre sur ce billet.

Activons l'utilisation de l'environnement d'exécution :

ansible vscode ee

Ouvrez un fichier ansible. Vous devriez au bout de quelques minutes, le temps de récupérer l'image EE, voir apparaitre dans la barre à droite de Vscode [EE] x.xx.x avec la version. Comme dans l'image ci-dessous.

ansible vscode ee

Configuration de podman sur WSL2 Ubuntu

Si jamais vous obtenez une erreur du type, /dev/mqueue is not mounted. Il faut dans un premier temps ajouter une commande dans le démarrage de wsl.

  • Sur un poste Windows 11, il faut éditer le fichier /etc/wsl.conf et y mettre ces lignes.
[boot]
command="sudo mkdir /dev/mqueue && sudo mount -t mqueue none /dev/mqueue"

Sur un poste windows 10 il faut créer un fichier podman.bat et y mettre ce contenu :

wsl ~ -u root -d Ubuntu -e sh -c "mkdir /dev/mqueue && mount -t mqueue none /dev/mqueue"

Vous l'aurez compris sur Windows 11 au prochain démarrage, tout sera configuré par défaut alors que sur un windows 10 il faudra exécuter le fichier podman.bat à chaque démarrage de wsl.

Après redémarrage de wsl tout devrait fonctionner.

Utilisation du driver podman avec molecule

Je vais vous montrer comment installer molecule accompagné de son driver podman. Pour ceux qui ne connaissent pas molecule, je vous renvoie ici. Je vais utiliser pyenv pour installer molecule et ses dépendances :

pyenv virtualenv 3.11.1 molecule
pyenv local molecule
pip install molecule molecule-podman molecule-vagrant molecule-

On va créer un nouveau rôle avec le driver podman :

molecule init role test.monrole --driver-name=podman
cd monrole
molecule converge

...

INFO Running default > prepare
WARNING Skipping, prepare playbook not configured.
INFO Running default > converge

PLAY [Converge] ****************************************************************

TASK [Gathering Facts] *********************************************************
ok: [instance]

TASK [Copy something to test use of synchronize module] ************************
changed: [instance]

TASK [Include test.monrole] ****************************************************

PLAY RECAP *********************************************************************
instance : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

Cela fonctionne du premier coup.

Plus loin

Il ne reste plus qu'à utiliser.... Je compléterai si je trouve d'autres astuces.