AWX


Was ist AWX?

AWX dient als grafische Benutzeroberfläche (GUI) und ist ein Open-Source Projekt. Das kommerzielle Red-Hat Produktion Automation Controller, bzw. früher Ansible Tower, nutzt im Endeffekt den AWX-Code in ihrem Produkt. Intern nutzt AWX Ansible für die Automation und Ausführung von Ansible-Playbooks. Über eine entsprechende Usersteuerung wird der Zugriff darauf gewährt.

Eigeninstallation, Vorgehen

AWX kann selbst installiert und genutzt werden. Am einfachsten geschieht dies über eine schon lauffähige Kubernetes-Plattform, z. B. Minikube.

Docker Client mit Minikube dauerhaft verbinden

Damit Docker-Images in Minikube geladen werden können, bitte die eigene .bash_rc am Ende erweitern um folgenden Eintrag:

eval $(minikube docker-env)

Nun nochmals erneut ab- und dann wieder anmelden, damit die Einstellungen auch geladen werden.

Erstellen eines eigenen AWX-Namespace in Kubernetes

user@host:~$ kubectl create namespace awx

Aktuellen Kontext auf awx wechseln

kubectl config set-context --current --namespace=awx

Clonen des AWX-Repository

user@host:~$ git clone https://github.com/ansible/awx-operator.git

Aktuelle Version auschecken und Verzeichnis wechseln

user@host:~$ git git checkout tags/2.19.1
user@host:~$ cd awx-operator

Hier nun eine Anpassung am Image in der Datei config/default/manager_auth_proxy_patch.yaml vornehmen. Wir tauschen dabei den Eintrag:
image: gcr.io/kubebuilder/kube-rbac-proxy:v0.15.0

aus in

image: quay.io/brancz/kube-rbac-proxy:v0.15.0

Siehe Codeausschnitt:

user@host:~/awx-operator$ cat config/default/manager_auth_proxy_patch.yaml 
# This patch inject a sidecar container which is a HTTP proxy for the
# controller manager, it performs RBAC authorization against the Kubernetes API using SubjectAccessReviews.
apiVersion: apps/v1
kind: Deployment
metadata:
  name: controller-manager
  namespace: system
spec:
  template:
    spec:
      containers:
      - name: kube-rbac-proxy
        securityContext:
          allowPrivilegeEscalation: false
          capabilities:
            drop:
            - "ALL"
        image: quay.io/brancz/kube-rbac-proxy:v0.15.0
        args:
        - "--secure-listen-address=0.0.0.0:8443"
...

Deploy starten

user@host:~/awx-operator$ make deploy

Erstellen einer AWX Instanz

Dazu wird die Datei awx-demo.yaml mit folgendem Inhalt erstellt:

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

Deployment AWX starten

user@host:~/awx-operator$ kubectl apply -f awx-demo.yaml -n awx

Dies dauert eine Weile, hier bitte Geduld haben. Das Ganze kann parallel geprüft werden mit:

user@host:~/awx-operator$ kubectl get pods -w -n awx
NAME                                              READY   STATUS      RESTARTS         AGE
awx-migration-24.6.1-rgjxz                        0/1     Completed   0                4h48m
awx-operator-controller-manager-55c68ccbd-p2gbb   2/2     Running     8 (4h24m ago)    4h52m
awx-postgres-15-0                                 1/1     Running     4 (4h24m ago)    4h50m
awx-task-5777b55759-cfhvz                         4/4     Running     13 (4h24m ago)   4h49m
awx-web-869c6bcb44-5bhr9                          3/3     Running     14 (27m ago)     4h49m

Sobald alle Pods in Ihrem Replicaset (READY x/x) vorhanden und im STATUS „Running“ sind, kann dies mit STRG + C abgebrochen werden.

Ermittlung Admin-Passwort

user@host:~/awx-operator$ kubectl get secret awx-admin-password -n awx -o jsonpath="{.data.password}" | base64 --decode
ADMIN_PWD
user@host:~/awx-operator$ 

Dieses Passwort des Users admin nun sicher verwahren, z. B. in keepass.

Webfrontend erreichen

Um das Webfrontend per Browser zu erreichen, startet man am einfachsten folgenden Befehl:

user@host:~/awx-operator$ minikube service awx-service -n awx
┌───────────┬─────────────┬─────────────┬───────────────────────────┐
│ NAMESPACE │    NAME     │ TARGET PORT │            URL            │
├───────────┼─────────────┼─────────────┼───────────────────────────┤
│ awx       │ awx-service │ http/80     │ http://192.168.49.2:32190 │
└───────────┴─────────────┴─────────────┴───────────────────────────┘
🎉  Öffne Service awx/awx-service im Default-Browser...
Wird in einer aktuellen Browsersitzung geöffnet.

Nun erscheint in einem Browser die WebGUI von AWX. Hier bitte den User „admin“ und das zuvor gesicherte Passwort für einen ersten Login eingeben.

Nach erfolgreichem Login meldet sich AWX mit folgender Übersicht:

Admin-Passwort vergessen bzw. selbst setzen?

Wurde das Admin-Passwort vergessen, kann dies mit folgendem Befehl neu gesetzt werden:

user@host:~$ kubectl exec -it awx-web-58b6b6cf5d-sjwwq -n awx -- awx-manage changepassword admin
Changing password for user 'admin'
Password: 
Password (again): 
Password changed successfully for user 'admin'
user@host:~$

AWX wieder komplett löschen

Soll ein funktionierendes AWX wieder komplett aus dem Kubernetes-Workspace gelöscht werden:

user@host:~$ kubectl delete namespace awx --ignore-not-found 

Dieser Vorgang kann jedoch eine gewisse Zeit in Anspruch nehmen.