Ansible AWX is one of the upstream project for Red Hat Ansible Tower. AWX provides a web-based user interface, REST API, and task engine built on top of Ansible.
Installation of Ansible AWX is simple and pretty straightforward with latest version. (If you are trying to install older than version 18, then you need to follow the docker based method.) AWX will be installed using AWX Operator on top of Kubernetes or OpenShift cluster.
You can use any existing or new cluster or even spin up a minikube cluster on your laptop/workstation for testing purpose.
Read : How to Install a minikube on GCP or Install minikube using Vagrant and VirtualBox
Please note down the memory and cpu requirements as Ansible AWX pods need some minimum resource to run.
$ minikube start --addons=ingress --cni=flannel --install-addons=true \
--kubernetes-version=stable \
--vm-driver=docker --wait=false \
--cpus=4 --memory=6g
Enable Addons as needed
## Check addons
$ minikube addons list
$ minikube addons enable metrics-server
$ minikube dashboard
Access your cluster and deploy AWX operator; replace TAG
with the version from Release Page
$ kubectl apply -f https://raw.githubusercontent.com/ansible/awx-operator/<TAG>/deploy/awx-operator.yaml
Create a file awx-demo.yaml
with below content.
---
apiVersion: awx.ansible.com/v1beta1
kind: AWX
metadata:
name: awx-demo
spec:
service_type: nodeport
ingress_type: none
hostname: awx-demo.example.com
Create the resource.
$ kubectl apply -f awx-demo.yml
awx.awx.ansible.com/awx-demo created
Refer AWX Operator documentation for advanced installation options.
By default, the admin user is admin
and the password is available in the <resourcename>-admin-password
secret.
$ kubectl get secret awx-demo-admin-password \
-o jsonpath="{.data.password}" | base64 --decode
lxQ8uWlE9Wevkgmy5Kx2AqFdY80v34gx
You will find the NodePort
and IP for service awx-demo-service
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
awx-demo-postgres ClusterIP None <none> 5432/TCP 23m
awx-demo-service NodePort 10.110.146.161 <none> 80:31726/TCP 23m
awx-operator-metrics ClusterIP 10.104.113.88 <none> 8383/TCP,8686/TCP 23m
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 26m
Now you can access the Ansible AWX Portal at IP_ADDRESS:NODE_PORT
.
If your Kubernetes/minikube Cluster is on Remote Machine/VM (eg: Cloud Instance with Public IP) then you can access it using above method (if NodePort is same is remote IP) or you can use LoadBalancer methods.
In our case, we have deployed this in a Google Cloud instance without GUI and we need to enabled port-forwarding as below.
$ minikube ser## Forward localhost (minkube VM Localhost) port 7080 -> 80
$ kubectl port-forward service/awx-demo-service 7080:80
So the Ansible AWX service is available at minikube VM localhost:7080 now; but we dont have GUI there to access !!
So, we do a port-forwarding from our laptop/workstation via SSH Tunnel.
## On your Workstation/Laptop
## eg: ssh -L LOCAL_PORT:localhost:REMOTE_PORT U[email protected]_IP
$ ssh -L 7080:localhost:7080 [email protected]
Now, open a browser on your laptop/workstation and goto localhost:7080
; that’s it.
Enjoy Ansible AWX
running on top of Kubernetes
or minikube
.
Disclaimer: The views expressed and the content shared are those of the author and do not reflect the views of the author’s employer or techbeatly platform.
Gineesh Madapparambath
Gineesh Madapparambath is the founder of techbeatly and he is the author of the book - 𝗔𝗻𝘀𝗶𝗯𝗹𝗲 𝗳𝗼𝗿 𝗥𝗲𝗮𝗹-𝗟𝗶𝗳𝗲 𝗔𝘂𝘁𝗼𝗺𝗮𝘁𝗶𝗼𝗻.
He has worked as a Systems Engineer, Automation Specialist, and content author. His primary focus is on Ansible Automation, Containerisation (OpenShift & Kubernetes), and Infrastructure as Code (Terraform).
(aka Gini Gangadharan - iamgini.com)
This site uses Akismet to reduce spam. Learn how your comment data is processed.9 Responses
Leave a Reply Cancel reply
[email protected]:~$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
awx-demo-postgres ClusterIP None 5432/TCP 39m
awx-demo-service NodePort 10.108.179.119 80:32739/TCP 39m
awx-operator-metrics ClusterIP 10.109.103.45 8383/TCP,8686/TCP 40m
kubernetes ClusterIP 10.96.0.1 443/TCP 42m
[email protected]:~$ kubectl port-forward service/awx-demo-service 7080:80
error: timed out waiting for the condition
can you try any other service in that kubernetes cluster ?
just to make sure the networking is good (maybe some simple nginx)
I am looking for how to do this with AWS EKS, do you or anyone watching this space have instructions for that?
Thank you.
If you can install AWX operator, then the any kubernetes cluster is enough to install Ansible AWX.
The steps are same and you can start with “Deploy AWX Operator” step as the AWS EKS is already under your control (no need to worry about the minikube steps here)
Hi,
How do we bulk upload hosts to awx inventory.
awx-manage inventory_import –source=/ansible/inventory/ –inventory-name TESTINVENTORY
The above command gives error in awx-prod-web pod
error:- 1.006 WARNING This command is not able to run on kubernetes-based deployment. This action should be done using the API.
Not sure about the AWX version you are using.
you can use the Dynamic inventory (from file or Git) and sync it automatically from the GUI itself.
Check:https://docs.ansible.com/automation-controller/latest/html/userguide/inventories.html
Join https://t.me/techbeatly for discussions.
Hi @Gineesh Madapparambath,
how to install awx-manage command in awx-operator environmment ??
Thank you in Advance
Regards,
Chandru
Hi Gineesh Madapparambath
How to install awx-manage command in ansible-operator environment ??
Regards,
Chandru
Did you try this? https://access.redhat.com/solutions/4971631
Doc: https://docs.ansible.com/automation-controller/4.2.1/html/administration/tower-manage.html