=====Ansible Tower / AWX unter Cent OS Linux 8=====
Für die Verwaltung von Ansible steht als OpenSource Projekt Ansible AWX ( https://github.com/ansible/awx ) zur Verfügung , die gleiche Applikation mit Support von Red Hat als Ansible Tower (https://www.ansible.com/).
Nach dem Installation von Ansible => [[linux:oracle_linux_8_ansible|Ein Oracle Linux 8 Basis System für Ansible verwenden - eine Oracle Umgebung mit Ansible warten]] kann auch über Ansible die Verwaltungsoberfläche "Tower" bzw. AWX installiert werden.
Unter Oracle Linux 8 läuft aber leider die Automatische Installation von Redhat nicht, evtl. würde es funktionieren, wenn man selber die Versionsabfragen auf centos_8 umbiegt...
Problem unter Oracle Linux 8:
TASK [fail for unsupported distribution] ***************************************************************************************************
fatal: [localhost]: FAILED! => {"changed": false, "msg": "OracleLinux 8.4 is not a supported OS for an Ansible Automation Platform installation. Supported OSes include Red Hat Enterprise Linux 7.7+ and CentOS 7.7+."}
Ansible AWX hat sich nach einem ersten Test als recht umfangreich in der Installation herausgestellt, es ist doch so einiges an Basis Knowhow bzgl. Kubes etc. notwendig, daher für die Demo Umgebung auf CenOS8 umgestiegen.
Aber inzwischen gibt es AWX auch direkt von Oracle => [[linux:oracle_linux_8_ansible_tower|Oracle Linux Automation Manager OLAM (aka “Oracle Ansible Tower”) unter Oracle Linux 8]]
----
==== CentOS Basis System bereitstellen ====
* VM unter https://www.linuxvmimages.com/images/centos-8/ landen
* In Betrieb nehmen (Name, IP Adresse etc. einstellen)
=== Ansible bereitstellen==
* EPL Repository enablen
* ansible installieren
dnf update
dnf search epel
dnf install epel-release.noarch
dnf search ansible
dnf install ansible ansible-doc vim-ansible
----
==== Ansible Tower installieren ====
Ablauf:
* Persönlichen Account bei ReadHat anlegen
* Download Tower von https://www.redhat.com/en/technologies/management/ansible/try-it
* Alternativ von https://docs.ansible.com/ansible-tower/latest/html/quickinstall/download_tower.html bzw. https://releases.ansible.com/ansible-tower/setup-bundle/
* Entpacken
* Passwörter definieren
* mit "setup.sh" Playbook für die Installation starten
* Umgebung Registieren bzw. bei CentOS Lizenz importieren
=== Download und entpacken===
Auf der Zielmaschine als root:
dnf install wget
cd
wget https://releases.ansible.com/ansible-tower/setup/ansible-tower-setup-latest.tar.gz
#entpacken
tar xvzf ansible-tower-setup-latest.tar.gz
----
=== Setup Konfigurieren===
cd ansible-tower-setup-3.8.3-1/
vi inventory
#Für alle Password Variablen ein Password angeben
----
=== Setup starten===
./setup
=== Anmelden und 60 Tage Demo Lizenz auswählen===
Nach der Installation über die IP Adresse der Maschine in Ansible Tower mit dem zuvor vergebenen Admin Passwort anmelden.
Der Versuch über den RedHat Account nun das Demo zu aktiveren, schlägt fehl:
Problem:
Error Fetching Licenses
ERROR: Unable to open certificate bundle /etc/rhsm/ca/redhat-uep.pem. Check that Ansible Tower is running on Red Hat Enterprise Linux.
Siehe dazu https://access.redhat.com/solutions/4996571
Unter CentOS muss die Lizenz importiert werden!
Diese auf dem Portal wie im Link https://docs.ansible.com/ansible-tower/latest/html/userguide/import_license.html#obtain-sub-manifest
beschrieben anlegen und herunterladen, die Lizenz Seite neu laden, darauf achten das kein User/Password angeben ist und mit "Browse" die Lizenz Datei laden und mit "Submit" installieren.
Nun ist die Tower Umgebung bereit.
----
----
==== Ansible Tower Cli installieren ====
Um die RestAPI von Tower für das Skripting auch per Console zu verwenden, ist das CLI hilfreich.
siehe => https://docs.ansible.com/ansible-tower/latest/html/towercli/usage.html#installation
# als root
yum-config-manager --add-repo https://releases.ansible.com/ansible-tower/cli/ansible-tower-cli-centos7.repo
# install
yum install ansible-tower-cli
Erster Test mit:
awx --conf.host https://10.10.10.10 --conf.username admin --conf.password Secret1 --conf.insecure inventory list
Anwendung=>https://docs.ansible.com/ansible-tower/latest/html/towercli/examples.html
----
==== Job Parameter einstellen ====
Damit Playbooks auch vom den Ausgaben in der richtigen Zeitzone laufen (Default ist immer UTC) diese für den Job setzen
https://access.redhat.com/solutions/4124131
unter Settings/Job/EXTRA ENVIRONMENT Variables
{
"TZ": "Europe/Berlin"
}
----
==== Start mit Ansible Tower====
=== Hosts importieren ===
über " awx-manage" kann auch eine Liste von Hosts inkl. der Gruppen Zuordnung importiert werden.
Zuvor ein Inventory in Tower anlegen, in dieses Inventory werden die Hosts dann importiert.
awx-manage --version
awx-manage inventory_import --inventory-name GPI_CONSULT --source inventory
Ruf man das auch einem Playbook auf das auch "group_vars" und "host_vars" enthält werden diese mit importiert!
Eine Host Manuell mit Beschreibung anlegen:
awx hosts create [-h] --name TEXT [--description TEXT] --inventory ID [--enabled BOOLEAN] [--instance_id TEXT] [--variables JSON/YAML]
=== Credential für den Host Zugriff anlegen ===
Nach dem inistalisieren des Hosts mit dem Ansible User soll auf diesen nur noch mit dem Key des Ansible Users zugeriffen werden, nicht mit einem Passwort.
Dazu ein Machine Credential mit dem Usernamen des Ansible Users auf der Umgebung mit mit dem Private Key des Ansible Users hinterlegen.
----
----
==== Anmerkungen zu Ansible AWX ====
Die Opensource Variante ist etwas komplexter in der Installation und wird über den AWX Operator =>
https://github.com/ansible/awx-operator durchgeführt.
Dazu wird aber eine MiniKube Umgebung benötigt https://minikube.sigs.k8s.io/docs/start/
Installation Kube:
dnf install docker
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-latest.x86_64.rpm
rpm -Uvh minikube-latest.x86_64.rpm
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
Start eines Kube:
su - ansible
minikube start --addons=ingress --cpus=4 --cni=flannel --install-addons=true --kubernetes-version=stable --memory=2g
kubectl get nodes
NAME STATUS ROLES AGE VERSION
minikube Ready control-plane,master 11m v1.20.7
#Mit der letzten Release Nummer
kubectl apply -f https://raw.githubusercontent.com/ansible/awx-operator/0.10.0/deploy/awx-operator.yaml
customresourcedefinition.apiextensions.k8s.io/awxs.awx.ansible.com created
customresourcedefinition.apiextensions.k8s.io/awxbackups.awx.ansible.com created
customresourcedefinition.apiextensions.k8s.io/awxrestores.awx.ansible.com created
clusterrole.rbac.authorization.k8s.io/awx-operator created
clusterrolebinding.rbac.authorization.k8s.io/awx-operator created
serviceaccount/awx-operator created
deployment.apps/awx-operator created
kubectl get pods
NAME READY STATUS RESTARTS AGE
awx-operator-5dd757f594-9qbm7 1/1 Running 0 81s
vi awx-demo.yml
---
apiVersion: awx.ansible.com/v1beta1
kind: AWX
metadata:
name: awx-demo
spec:
service_type: nodeport
ingress_type: none
hostname: awx01.pipperr.local
kubectl apply -f awx-demo.yml
awx.awx.ansible.com/awx-demo created
kubectl get pods -l "app.kubernetes.io/managed-by=awx-operator"
NAME READY STATUS RESTARTS AGE
awx-demo-postgres-0 0/1 ContainerCreating 0 10s
kubectl get pods -l "app.kubernetes.io/managed-by=awx-operator"
NAME READY STATUS RESTARTS AGE
awx-demo-7744b86597-s2x4w 4/4 Running 0 2m52s
awx-demo-postgres-0 1/1 Running 0 3m11s
Zugriff:
minikube service list
|---------------|------------------------------------|--------------|---------------------------|
| NAMESPACE | NAME | TARGET PORT | URL |
|---------------|------------------------------------|--------------|---------------------------|
| default | awx-demo-postgres | No node port |
| default | awx-demo-service | http/80 | http://192.168.49.2:32390 |
| default | awx-operator-metrics | No node port |
| default | kubernetes | No node port |
| ingress-nginx | ingress-nginx-controller | http/80 | http://192.168.49.2:30491 |
| | | https/443 | http://192.168.49.2:31215 |
| ingress-nginx | ingress-nginx-controller-admission | No node port |
| kube-system | kube-dns | No node port |
|---------------|------------------------------------|--------------|---------------------------|
Im Detail siehe auch => https://asciinema.org/a/416946
Nur wie kann ich jetzt von außen auf den Kub auf eine VM zugreifen etc. .. daher erstmal an dieser Stelle abgebrochen.
----
----
==== Quellen ====
Tower:
* https://www.rogerperkin.co.uk/network-automation/ansible/how-to-install-ansible-tower-on-ubuntu-16-04/
* https://www.unixsysadmin.com/ansible-resources-best-practices-awx-tower/