=====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/