Skip to content

Custom Execution Environment

What ?

AWX is currently running mostly in Kubernetes or single node Minikube Kubernetes cluster. It come with default Runtime/Execution Environment which is fine, until you start doing some kung-fu with json for example. The default is missing some Ansible Collections like community.general and some python modules.

You can't just install Ansible Collections with Ansible task at the start for example, because it will not load (Mostly issue with delegate to localhost).

So how it works ?

Evey time you run job/template, AWX is creating docker image to which it will inject your playbooks/tasks. This is the image we need to modify. We will extend the official Execution Environment with bunch of collections and python modules to have error fee runs or filter missing, like:

ERROR! template error while templating string: no filter named 'json_query'

How ?

Here is the guide on my GitLab: HERE

You can read almost all the information there, but I will copy it here as well.

First get some Linux computer with docker and Internet access, we need to build custom image and push it to registry. However you can freely use my already build Execution Environment if you like, then you can skip the build part.

Build docker image

Clone my repo

git clone https://gitlab.privatecloud.sk/vladoportos/create-custom-ee-for-awx.git
cd create-custom-ee-for-awx

Edit:

  • requirements.txt for python requirements
  • requirements.yml for Ansible collections

Check Dockerfile we are extending quay.io/ansible/awx-ee:0.2.0 check here if its the latest (don't use dev tagged).

Before the build

There is one thing to mention, your AWX needs to get to this Execution Environment somehow, it pulls by default the quay.io/ansible/awx-ee:0.2.0, so I registered on https://quay.io with free account and will be pushing the build image there. You can find mine HERE

So the following build example will work with my quay.io account.

docker image build --tag quay.io/vladoportos/custom-awx-ee:latest .
docker login quay.io
docker push quay.io/vladoportos/custom-awx-ee

Replace the quay.io links with yours.

Set the new Runtime Environment in AWX

Administration -> Execution Environments -> Add

Execution Environment

You can then choose this as Execution Environment in your templates.

Check for issues in minikube

Switch to minikube user (this is user I use for minikube server)

su - minikube
minikube kubectl get events

You should have something like this when you lunch job:

11s         Normal    Scheduled       pod/awx-job-170-mhz4t   Successfully assigned default/awx-job-170-mhz4t to minikube
11s         Normal    Pulling         pod/awx-job-170-mhz4t   Pulling image "quay.io/vladoportos/custom-awx-ee:latest"
5s          Normal    Pulled          pod/awx-job-170-mhz4t   Successfully pulled image "quay.io/vladoportos/custom-awx-ee:latest" in 5.316071635s
5s          Normal    Created         pod/awx-job-170-mhz4t   Created container worker
5s          Normal    Started         pod/awx-job-170-mhz4t   Started container worker

This is sign that it worked most likely. You might get errors like:

3m18s       Warning   InspectFailed   pod/awx-job-168-x5dlq   Failed to apply default image tag "docker pull quay.io/vladoportos/custom-awx-ee:latest": couldn't parse image reference "docker pull quay.io/vladoportos/custom-awx-ee:latest": invalid reference format
3m33s       Warning   Failed          pod/awx-job-168-x5dlq   Error: InvalidImageName

This happened when I put wrong name into AWX setting.

Logout from quay.io

docker logout quay.io

And that's it, this guide is based on AWX issues/312

That’s it for now, was it helpful to you? Now get some coffee and maybe get me one too 🙂


Last update: June 10, 2022

Comments