Benutzer-Werkzeuge

Webseiten-Werkzeuge


linux:ansible_tower_cli_awx

Mit der Ansible Tower CLI das Tower Inventory pflegen

Aufgabe: In einer Excel Liste stehen alle Server der Umgebung, diese Server sollen nun per Skript gepflegt werden.

Eine Möglichkeit ist auch die Server aus der Password Datei der Umgebung auszulesen und zu importieren, allerdings fehlen dann die Beschreibungen der Maschinen, siehe dazu ⇒ Keepass Datei mit Python auslesen um Ansible Konfiguration zu erzeugen

Die Ansible Tower Umgebung läßt sich aber auch über ein REST Interface konfigurieren, am einfachsten über das Kommando Zielen Tool „awx“.


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

Login to Tower

Um nicht jedesmal neu das Passwort hinterlegen zu müssen kann auch ein Personal Access Tocken erzeugt werden.

export TOWER_HOST=https://awx.example.org
$(TOWER_USERNAME=admin TOWER_PASSWORD=secret1 awx login -f human --conf.insecure )
awx config
Problem --conf.insecure

Wurde nur ein SelfSign Zertifikat in Tower hinterlegt muss mit „–conf.insecure“ der Python Check bzgl. dem Zertifikat abgeschaltet werden, sonst erhält man diese Fehlermeldung:

HTTPSConnectionPool(host='127.0.0.1', port=443): Max retries exceeded with url: /api/ (Caused by SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:877)'),))

Testen

Z.B. Inventory abfragen:

awx  inventory list --conf.insecure

Hosts verwalten

Die REST Api von Tower funktoiniert leider meist über die ID's der verwendeten Elemente.

Um einen Host zu pflegen muss daher zuvor die ID des Hosts und die ID des Inventory bekannt sein. Dazu kann direkt die Tower URL Verwendet werden wie https://localhost/#/inventories/inventory/4/hosts/edit/12, darau läßt sich erkennen das wir im Inventory 4 den Server 12 bearbieten.

Um jetzt aber aus einer Liste von Servernamen und Beschreibungen einen Liste von Befehlen zu erzeugen um diese Beschreibung anzupassen benötigen wir zuvor die Server ID in Ansbile.

Über den Namen können wir suchen.

Host Info filtern

Um jetzt aber aus einer Liste von Servernamen und Beschreibungen einen Liste von Befehlen zu erzeugen um diese Beschreibung anzupassen benötigen wir zuvor die Server ID in Ansible.

Über den Namen können wir suchen:

awx hosts list --name apex01 -f human --conf.insecure
id name
== ========
12 apex01 
 
awx hosts list --name apex01 -f human  --filter id --conf.insecure
id
==
12
 
awx hosts list --name apex01 -f human  --filter inventory  --conf.insecure
inventory
=========
4

Damit kennen wir schon mal die ID 12 für den Host und 4 für das Inventory.

Nun alle Server aus dem Inventory 4:

awx hosts list   -f human  --filter name,id,inventory  --inventory 4 --all --conf.insecure
 
name      id  inventory
========= ==  =========
apex01     12 4
ansible01  13 4
gpirac01   14 4
gpirac02   15 4
...

Eine Host ändern

Da wir nun die Server ID 12 für den Host und 4 für das Inventory kennen können wir den Host anpassen.

Kommentar hinzufügen:

awx hosts modify  --conf.insecure --inventory 4 --description "ENTW APEX"  12

In allen Servers in Inventory 4 die Host Vars zurücksetzen:

ALL_IDS=`awx hosts list   -f human  --filter id  --inventory 4 --all --conf.insecure | grep -o '[[:digit:]]*'`
 
for ID in $ALL_IDS
do
 echo Unset Host Vars for ID $ID
 awx hosts modify  --conf.insecure --inventory 4 --variables '{}' $ID
 
done

(Hintergrund: Inital mit Root Passwort importiert, nach dem Einrichten des Ansible Users diese nun wieder löschen!)


Eine Host anlegen

Eine Host Manuell mit Beschreibung anlegen:

awx hosts create [-h] 
 --name TEXT 
[--description TEXT] 
 --inventory ID 
[--enabled BOOLEAN] 
[--instance_id TEXT] 
[--variables JSON/YAML
 
]

Bespiel:

awx host create --conf.insecure --name gpiRac02 --inventory 5 --description "Rac Dev Host" --variables '{ "ansible_connection":"ssh","ansible_ssh_user":"root","insible_ssh_pass":"mysecret1"}'

Problem: „awx hosts create: argument –variables is not valid JSON or YAML“

Lösung auf die führenden „'“ und abschließenden „'“ Hochkomma achten!


Eine Host wieder löschen

usage: awx hosts delete [-h] id

# welche ID
awx hosts list   -f human --name apex01 --filter name,id,inventory --all --conf.insecure
 
# Löschen
 
name     id  inventory
======== ==  =========
apex01   36  4
 
awx hosts delete 36 --conf.insecure

Mehrere Hosts auf einmal löschen

Skript mit den Servernamen anlegen:

#! /bin/sh
# Remove a list of servers from tower
#
 
# create server list
 
SERVER_LIST=("gpi11" "gpi112" "gpi113" "gpi114" "gpi115" "gpi116" "gpi117" "gpi118" "gpi119" )
 
echo To remove this List of Servers from the inventory please enter YES
echo ${SERVER_LIST[@]}
 
read YES_NO_ANSWER
 
if [ ! -n "${YES_NO_ANSWER}" ]; then
            YES_NO_ANSWER=NO
fi
 
if [ "${YES_NO_ANSWER}" == 'YES' ]; then
 
 
 for i in ${SERVER_LIST[*]}; do
    echo Get ID for Server $i
        for s in `awx hosts list -f human --name $i --filter id --all --conf.insecure | grep -E '[[:digit:]]+' ` ; do
           echo ID for Server $i is $s
           echo Remove  $i from all inventories
           awx hosts delete $s --conf.insecure
           echo ==========================
    done
 done
 
else
  echo Do nothing
fi

Quellen

Cookies helfen bei der Bereitstellung von Inhalten. Diese Website verwendet Cookies. Mit der Nutzung der Website erklären Sie sich damit einverstanden, dass Cookies auf Ihrem Computer gespeichert werden. Außerdem bestätigen Sie, dass Sie unsere Datenschutzerklärung gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website. Weitere Information
"Autor: Gunther Pipperr"
linux/ansible_tower_cli_awx.txt · Zuletzt geändert: 2021/07/20 12:58 von gpipperr