Aller au contenu

Environnement d'exécution

Introduction

Un environnement d’exécution (EE) ansible est un conteneur léger qui encapsule toutes les dépendances nécessaires pour exécuter des playbooks ansible de manière reproductible. Ces dépendances incluent la version d’Ansible, les collections Ansible, les rôles, la configuration d’ansible ainsi que les modules Python spécifiques.

Dans cet article nous allons créer un environment d'éxécution.

Pré-requis

Création

Pour créer notre environnement d'exécution nous avons besoin de plusieurs fichier. Pour les détails, je vous invite à consulter les sites cités dans le paragraphe sources ci-dessous.

Fichier Description
execution-environment.yml Fichier contenant la configuration de votre EE
requirements.txt Liste les modules Python spécifiques nécessaires à votre EE
requirements.yml Liste les modules ansible galaxy nécessaire à votre EE
bindep.txt Spécifie les paquets système nécessaires à l’exécution des tâches ansible

Nous allons créer ces fichiers dans le dossier $HOME/ee-awx

mkdir -p $HOME/ee-awx/context
cd ee-awx

Fichiers dans le dossier context

Copier dans le dossier context, les fichiers que vous souhaitez intégrer dans votre image (scripts, certificats, ...).
Dans cet exemple nous créons le fichier dummy.sh. Ce script n'est pas nécessaire mais il nous permettra de tester notre image docker.

cat << EOF > context/dummy.sh
#!/bin/bash
echo "Congratulations, the dummy.sh file is successfully executed"
ansible --version
EOF

Créer le fichier bindep.txt

cat << EOF > bindep.txt
git-core [platform:rpm]
libssl-dev [platform:dpkg]
openssl [platform:rpm]
EOF

Créer le fichier requirements.txt

cat << EOF > requirements.txt
ansible
ansible-core
ansible-runner
psycopg2-binary
wheel
PyVmOmi
EOF

Créer le fichier requirements.yml

cat << EOF > requirements.yml
---
collections:
  - ansible.posix
  - community.general
EOF

Créer le fichier execution-environment.yml

cat << EOF > execution-environment.yml
version: 3

dependencies:
  ansible_core:
    package_pip: ansible-core
  ansible_runner:
    package_pip: ansible-runner
  galaxy: requirements.yml
  python: requirements.txt
  system: bindep.txt

images:
  base_image:
    name: quay.io/centos/centos:stream9

additional_build_steps:
  prepend_base:
    - RUN yum install -y git
  append_final:
    #- COPY gmolabCA.crt /etc/pki/ca-trust/source/anchors/gmolabCA.crt
    #- RUN /usr/bin/update-ca-trust
    # example not needed
    - COPY --chmod=755 dummy.sh ./dummy.sh
EOF

Construire l'image

ansible-builder build --verbosity 3 --tag gmouchet/awx-ee-example:1.0

Tester l'image

docker run --name test --rm gmouchet/awx-ee-example:1.0 /bin/bash -c './dummy.sh'
Congratulations, the dummy.sh file is successfully executed

Tester l'image avec un playbook

Télécharger l'archive demo

curl https://gmodocs.dyndns.org/files/demo.tar.gz -o /tmp/demo.tar.gz

Décompresser l'archive

cd /tmp
tar zxvf demo.tar.gz

Tester le playboock

cd /tmp/demo
ansible-runner run ./ -i inventory/hosts -p test.yml --container-image gmouchet/awx-ee-example:1.0 --process-isolation --process-isolation-executable docker
PLAY [all] *********************************************************************

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

TASK [Get the hostname] ********************************************************
ok: [localhost] => {
    "msg": "Hostname: e1322765417e"
}

TASK [Get inventory hostname] **************************************************
ok: [localhost] => {
    "msg": "Inventory Hostname: localhost"
}

PLAY RECAP *********************************************************************
localhost                  : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Sources


Version Date Change Auteur
1.0 24.05.2025 Création GMo