Debian 13 trixie

Ansible : Install AWX2025/10/14

 

Install Ansible AWX that is the community edition of Red Hat Ansible Tower.

To install Ansible AWX, it needs Kubernetes infrastructure.
It's OK with not full Kubernetes cluster but MicroK8s, K3s or Minikube and so on.
Understandably, RedHat OpenShift or OKD that is the community edition of OpenShift are also ready.

[1]

On this example, use Minikube for AWX.
So install Minikube like here.

[2] Install other required packages.
root@dlp:~#
apt -y install git make curl
[3] Start Minikube as a common user.
debian@dlp:~$
minikube start --vm-driver=kvm2 --cpus=4 --memory=8g --addons=ingress

* minikube v1.37.0 on Debian 13.1 (kvm/amd64)
* Using the kvm2 driver based on user configuration
* Downloading VM boot image ...
    > minikube-v1.37.0-amd64.iso....:  65 B / 65 B [---------] 100.00% ? p/s 0s
    > minikube-v1.37.0-amd64.iso:  153.15 MiB / 370.78 MiB  41.31% 14.57 MiB p/

.....
.....

* Verifying ingress addon...
* Enabled addons: storage-provisioner, default-storageclass, ingress

! /usr/bin/kubectl is version 1.32.3, which may have incompatibilities with Kubernetes 1.34.0.
  - Want kubectl v1.34.0? Try 'minikube kubectl -- get pods -A'
* Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default

debian@dlp:~$
minikube status

minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured

debian@dlp:~$
kubectl get pods -A

NAMESPACE       NAME                                       READY   STATUS      RESTARTS      AGE
ingress-nginx   ingress-nginx-admission-create-jbzwv       0/1     Completed   0             73s
ingress-nginx   ingress-nginx-admission-patch-ncxrv        0/1     Completed   1             73s
ingress-nginx   ingress-nginx-controller-9cc49f96f-9c5bh   1/1     Running     0             73s
kube-system     coredns-66bc5c9577-zh92m                   1/1     Running     0             73s
kube-system     etcd-minikube                              1/1     Running     0             78s
kube-system     kube-apiserver-minikube                    1/1     Running     0             78s
kube-system     kube-controller-manager-minikube           1/1     Running     0             78s
kube-system     kube-proxy-5jrsb                           1/1     Running     0             73s
kube-system     kube-scheduler-minikube                    1/1     Running     0             79s
kube-system     storage-provisioner                        1/1     Running     1 (42s ago)   77s
[4] Deploy Ansible AWX.
# get AWX Operator first

debian@dlp:~$
git clone https://github.com/ansible/awx-operator.git

Cloning into 'awx-operator'...
remote: Enumerating objects: 11245, done.
remote: Counting objects: 100% (67/67), done.
remote: Compressing objects: 100% (51/51), done.
remote: Total 11245 (delta 35), reused 17 (delta 16), pack-reused 11178 (from 3)
Receiving objects: 100% (11245/11245), 3.87 MiB | 5.52 MiB/s, done.
Resolving deltas: 100% (6538/6538), done.

debian@dlp:~$
cd awx-operator
# specify a version of AWX Operator
# make sure versions : https://github.com/ansible/awx-operator/releases

debian@dlp:~/awx-operator$
git checkout 2.19.1

Note: switching to '2.19.1'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at dd37ebd Update index.md (#1904)

# set any namespace you like for AWX and deploy Operator

debian@dlp:~/awx-operator$
export NAMESPACE=ansible-awx

debian@dlp:~/awx-operator$
make deploy

namespace/ansible-awx created
Warning: unrecognized format "int32"
customresourcedefinition.apiextensions.k8s.io/awxbackups.awx.ansible.com created
customresourcedefinition.apiextensions.k8s.io/awxmeshingresses.awx.ansible.com created
customresourcedefinition.apiextensions.k8s.io/awxrestores.awx.ansible.com created
customresourcedefinition.apiextensions.k8s.io/awxs.awx.ansible.com created
serviceaccount/awx-operator-controller-manager created
role.rbac.authorization.k8s.io/awx-operator-awx-manager-role created
role.rbac.authorization.k8s.io/awx-operator-leader-election-role created
clusterrole.rbac.authorization.k8s.io/awx-operator-metrics-reader created
clusterrole.rbac.authorization.k8s.io/awx-operator-proxy-role created
rolebinding.rbac.authorization.k8s.io/awx-operator-awx-manager-rolebinding created
rolebinding.rbac.authorization.k8s.io/awx-operator-leader-election-rolebinding created
clusterrolebinding.rbac.authorization.k8s.io/awx-operator-proxy-rolebinding created
configmap/awx-operator-awx-manager-config created
service/awx-operator-controller-manager-metrics-service created
deployment.apps/awx-operator-controller-manager created

debian@dlp:~/awx-operator$
kubectl get pods -n $NAMESPACE

NAME                                               READY   STATUS    RESTARTS   AGE
awx-operator-controller-manager-6686bb5899-c6j65   2/2     Running   0          64s

debian@dlp:~/awx-operator$
cp awx-demo.yml ansible-awx.yml

debian@dlp:~/awx-operator$
vi ansible-awx.yml
# change to any service name you like

---
apiVersion: awx.ansible.com/v1beta1
kind: AWX
metadata:
  name: ansible-awx
spec:
  service_type: nodeport

# set namespace for AWX you set to kubectl context and deploy AWX

debian@dlp:~/awx-operator$
kubectl config set-context --current --namespace=$NAMESPACE

Context "minikube" modified.
debian@dlp:~/awx-operator$
kubectl apply -f ansible-awx.yml

awx.awx.ansible.com/ansible-awx created
# possible to see installation progress on the logs

debian@dlp:~/awx-operator$
kubectl logs -f deployments/awx-operator-controller-manager -c awx-manager


.....
.....

----- Ansible Task Status Event StdOut (awx.ansible.com/v1beta1, Kind=AWX, ansible-awx/ansible-awx) -----


PLAY RECAP *********************************************************************
localhost                  : ok=88   changed=0    unreachable=0    failed=0    skipped=85   rescued=0    ignored=1

----------
{"level":"info","ts":"2025-10-14T00:47:16Z","logger":"runner","msg":"Ansible-runner exited successfully","job":"1534314669285920485","name":"ansible-awx","namespace":"ansible-awx"}
# that's OK if finished with [failed=0]


debian@dlp:~$
kubectl get pods -l "app.kubernetes.io/managed-by=awx-operator"

NAME                                 READY   STATUS      RESTARTS   AGE
ansible-awx-migration-24.6.1-dz8r6   0/1     Completed   0          5m43s
ansible-awx-postgres-15-0            1/1     Running     0          7m5s
ansible-awx-task-56b76c65f9-gljvr    4/4     Running     0          6m32s
ansible-awx-web-6f6c9cf7b6-7zjnh     3/3     Running     0          6m33s

debian@dlp:~$
kubectl get service -l "app.kubernetes.io/managed-by=awx-operator"

NAME                      TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
ansible-awx-postgres-15   ClusterIP   None            <none>        5432/TCP       7m27s
ansible-awx-service       NodePort    10.104.16.165   <none>        80:30333/TCP   6m57s

# display service URL

debian@dlp:~$
minikube service ansible-awx-service --url -n ansible-awx

http://192.168.39.176:30333
# confirm password for admin account

debian@dlp:~$
kubectl get secret ansible-awx-admin-password -o jsonpath="{.data.password}" | base64 --decode; echo

joXV5pVPnYdNYFZBkGvvzdkdFUBbM2Bl
# if you access from outside of Kubernetes cluster, it needs to set port forwarding
# [10445] ⇒ the port that Minikube installed host listens ⇒ specify any free port you like
# [80] ⇒ the port AWX container listens

debian@dlp:~$
kubectl port-forward service/ansible-awx-service --address 0.0.0.0 10445:80

Forwarding from 0.0.0.0:10445 -> 8052
[5] Access to Ansible AWX with Web browser.
If you access from Minikube installed localhost, specify the service URL confirmed above.
If you set port forwarding, access to the URL [http://(Minikube installed hostname or IP address):(forwarding port)] on any computer in your local network.
After successfully accessed, AWX login form is shown.
It's possible to login with user [admin] and its password is the one you confirmed above.
[6] If successfully logined, Ansible AWX Dashboard is displayed. That's OK to install AWX.
Matched Content