{{tag>Ansible Docker CA}}
= Ansible Docker Execution Environment
Voir :
* [[notes_ansible_ansible-navigator|ansible-navigator]]
* https://ansible.readthedocs.io/projects/creator/installing/#initialize-execution-environment-project
* https://github.com/redhat-cop/ee_utilities/blob/devel/examples/ee_builder_base.yaml
* [[https://developers.redhat.com/articles/2023/05/08/how-create-execution-environments-using-ansible-builder|How to create execution environments using ansible-builder]]
* https://docs.ansible.com/automation-controller/latest/html/userguide/ee_reference.html
* https://blog.stephane-robert.info/post/ansible-execution-environnement-runner-builder/
* https://www.redhat.com/sysadmin/ansible-execution-environment-unconnected
* https://ansible.readthedocs.io/projects/builder/en/stable/definition/
* https://www.techtransit.org/install-ansible-navigator-execution-environment/
* https://www.dbi-services.com/blog/create-and-manage-ansible-execution-environments/
* https://www.redhat.com/en/blog/the-anatomy-of-automation-execution-environments
* https://infohub.delltechnologies.com/fr-fr/l/dell-powermax-ansible-modules-best-practices-1/creating-ansible-execution-environments-using-ansible-builder/
Voir aussi les execution-environment.yml :
* https://github.com/kennedymeadows/awx-ee-juniper/tree/main et https://www.keepitsimplesimon.io/posts/awx-execution-environments
* https://docs.ansible.com/automation-controller/latest/html/userguide/ee_reference.html
* https://access.redhat.com/documentation/fr-fr/red_hat_ansible_automation_platform/2.4/html-single/creating_and_consuming_execution_environments/index
* https://github.com/ansible-community/images
* https://github.com/ansiblejunky/ansible-execution-environment
* https://github.com/ansible/awx-ee/
== Installation
pip install --user ansible-builder>=3.0.0
== Utilisation
Fichiers :
* execution-environment.yml
* ansible.cfg
* requirements.txt
* requirements.yml
* bindep.txt
podman login --tls-verify=false registry.acme.fr -u admin
# podman login --tls-verify=false registry.acme.fr -u admin -p P@ssw0rd
# Créer le dossier context/ avec le Containerfile
ansible-builder create #--file execution-environment-dev.yml
# Créer l'image du container à partir du Containerfile généré
podman build -f context/Containerfile -t img01:0.9.1
# Ou pour générer directement l'image du container :
ansible-builder build --tag img01:0.9.1
podman images
podman image prune
podman tag localhost/img01:0.9.1 aahub.acme.local/img01:0.9.1
podman images
podman push aahub.acme.local/img01:0.9.1
ansible-navigator images --eei aahub.acme.local/img01:0.9.1
cd ansible-2.3_rhel5-repo/
vim context/Containerfile
vim requirements.txt
vim requirements.yml
vim bindep.txt
vim execution-environment.yml
ansible-builder build -v 3 --tag img-rhel5_0.1
podman build -f context/Containerfile -t img-rhel5_0.1
pip3 download psutils
podman push --tls-verify=false twr00210f.acme.local/img-rhel5_0.2 --log-level debug
ansible-navigator --eei twr00210f.acme.local/acme-provisioning-dell:latest --tls-verify=false
ansible-navigator --eei twr00210f.acme.local/acme-provisioning-dell:latest --pa='--tls-verify=false'
ansible-navigator --eei twr00210f.acme.local/acme-provisioning-dell:latest
export ANSIBLE_NAVIGATOR_PULL_ARGUMENT="tls-verify=false"
vim /etc/containers/registries.conf
ansible-navigator -m stdout run reboot_idrac.yml -i inv.yml --eei twr00210f.acme.local/acme-provisioning-dell:latest
ansible-builder introspect --help
podman build -f context/Containerfile -t ee-test:0.3
mkdir plop
cd plop
Nettoyage
podman image prune
podman rmi
rm -rf ./context/
''ansible.cfg''
# Since Ansible 2.12 (core):
# To generate an example config file (a "disabled" one with all default settings, commented out):
# $ ansible-config init --disabled > ansible.cfg
#
# Also you can now have a more complete file by including existing plugins:
# ansible-config init --disabled -t all > ansible.cfg
# For previous versions of Ansible you can check for examples in the 'stable' branches of each version
# Note that this file was always incomplete and lagging changes to configuration settings
# for example, for 2.9: https://github.com/ansible/ansible/blob/stable-2.9/examples/ansible.cfg
[galaxy]
server_list = rh-certified_repo, published_repo, community_repo, galaxy
[galaxy_server.rh-certified_repo]
token=xxxxxxxxxxxxxx1
url=https://aahub.acme.local/api/galaxy/content/rh-certified/
[galaxy_server.published_repo]
token=xxxxxxxxxxxxxx2
url=https://aahub.acme.local/api/galaxy/content/published/
[galaxy_server.community_repo]
token=xxxxxxxxxxxxxx3
url=https://aahub.acme.local/api/galaxy/content/community/
[galaxy_server.galaxy]
url=https://galaxy.ansible.com/
''bindep.txt''
python3-jmespath
''requirements.yml''
---
collections:
- ansible.windows
- community.general
- ansible.posix
- awx.awx
''requirements.txt''
hvac
kafka-python
''execution-environment.yml''
---
version: 1
build_arg_defaults:
ANSIBLE_GALAXY_CLI_COLLECTION_OPTS: "-c"
EE_BASE_IMAGE: aahub.acme.local/ee-minimal-rhel8:latest
EE_BUILDER_IMAGE: aahub.acme.local/ansible-builder-rhel8:latest
ansible_config: 'ansible.cfg'
dependencies:
python: requirements.txt
galaxy: requirements.yml
system: bindep.txt
additional_build_steps:
prepend:
- RUN pip3 install --upgrade pip setuptools && echo "cacert ~/ca" > ~/.curlrc && mkdir -p ~/ca
- COPY ./cert.crt ~/ca
- RUN rpm --import https://srv1.acme.local/katello/api/v2/repositories/2406/gpg_key_content
''context/Containerfile''
ARG EE_BASE_IMAGE=aahub.acme.local/ee-minimal-rhel8:latest
ARG EE_BUILDER_IMAGE=aahub.acme.local/ansible-builder-rhel8:latest
FROM $EE_BASE_IMAGE as galaxy
ARG ANSIBLE_GALAXY_CLI_COLLECTION_OPTS=-c
USER root
ADD _build/ansible.cfg ~/.ansible.cfg
ADD _build /build
WORKDIR /build
RUN ansible-galaxy role install -r requirements.yml --roles-path "/usr/share/ansible/roles"
RUN ANSIBLE_GALAXY_DISABLE_GPG_VERIFY=1 ansible-galaxy collection install $ANSIBLE_GALAXY_CLI_COLLECTION_OPTS -r requirements.yml --collections-path "/usr/share/ansible/collections"
FROM $EE_BUILDER_IMAGE as builder
COPY --from=galaxy /usr/share/ansible /usr/share/ansible
ADD _build/requirements.txt requirements.txt
RUN ansible-builder introspect --sanitize --user-pip=requirements.txt --write-bindep=/tmp/src/bindep.txt --write-pip=/tmp/src/requirements.txt
RUN assemble
FROM $EE_BASE_IMAGE
USER root
RUN pip3 install --upgrade pip setuptools && echo "cacert ~/ca" > ~/.curlrc && mkdir -p ~/ca
COPY ./cert.crt ~/ca
RUN rpm --import https://srv1.acme.local/katello/api/v2/repositories/2406/gpg_key_content
COPY --from=galaxy /usr/share/ansible /usr/share/ansible
COPY --from=builder /output/ /output/
RUN /output/install-from-bindep && rm -rf /output/wheels
version: 3
dependencies:
galaxy: requirements.yml
python: requirements.txt
system: bindep.txt
# ansible_core:
# package_pip: ansible-core==2.14.4
#
# ansible_runner:
# package_pip: ansible-runner
#
# python_interpreter:
# package_system: python39 # (optional) name of a Python interpreter OS package to install
# python_path: /usr/bin/python3.9 # (optional) path to the Python interpreter to use
exclude:
python:
- docker
system:
- python3-Cython
images:
base_image:
# name: quay.io/centos/centos:stream9
# name: quay.io/ansible/ansible-runner:latest # Obsoltete
# name: ghcr.io/ansible-community/community-ee-minimal:2.16.0-1
# name: quay.io/ansible/awx-ee:latest
name: ghcr.io/ansible-community/community-ee-base:2.19.1-1
# additional_build_files:
# - src: files/ansible.cfg
# dest: configs
additional_build_steps:
# prepend_galaxy:
# - ADD _build/configs/ansible.cfg ~/.ansible.cfg
prepend_base:
# - RUN echo PLOP
append_final:
# - RUN groupadd --gid 1000 vscode
# - RUN adduser --home-dir /vscode --create-home --gid 1000 --uid 1000 vscode
- RUN ls -l
options:
user: '1000'
------------
''execution-environment.yml''
---
version: 3
dependencies:
galaxy: requirements.yml
python: requirements.txt
system: bindep.txt
images:
base_image:
name: ghcr.io/ansible-community/community-ee-base:2.19.1-1
options:
user: '1000'
''requirements.yml''
---
collections:
- ansible.utils
- ansible.posix
- ansible.windows
- ansible.netcommon
- community.general
- community.windows
- community.vmware
- community.crypto
- community.postgresql
- community.mysql
- community.network
- kubernetes.core
- containers.podman
- awx.awx
- vmware.vmware
- vmware.vmware_rest
- microsoft.ad
# - fortinet.fortios
''requirements.txt''
six
psutil
# pywinrm
jc
jmespath
''bindep.txt''
git
rsync
curl
wget
psmisc
tar
unzip
gzip
#python38-wheel [platform:centos-8 platform:rhel-8]
iputils [platform:rpm]
bind-utils [platform:rpm]
#python3-jmespath [platform:rpm]
#net-snmp-utils [platform:rpm]
Exemple de fichier bindep.txt :
* https://github.com/openstack/openstack-ansible/blob/master/bindep.txt