BASH-Script zur Verwaltung verschiedener Ansible-Instanzen (VirtualENV)

Datum

Warum?

Ich hatte ja bereits in einem vergangenen Artikel beschrieben wie man verschiedene Ansible -Instanzen per VirtualENV parallel verwenden kann.
Wenn man nun ein playbook ausführen möchte und sich nicht mehr genau an den genauen Pfad erinnern kann wo das Virtualenv liegt, ist das schon nervig. Vor allem wenn man mehrere verschiedene Ansible-VirtualEnvs installiert hat.

Hier habe ich mir eine kleine Verwaltungs-UI in Bash geschrieben, welches ich unter einem Alias verwende und welches folgende Funktionen beeinhaltet:
  • alle VirtualEnvs liegen in einem Ordner
  • alle VirtualEnvs sind von jedem Ordner aus zu aktivieren
$ startansible 
[0]: ansible_2.7.8
[1]: Eine neue Ansible Version installieren
[2]: Die aktuellste Developer Version installieren
[3]: Abbruch
Option?
ansible_2.7.8 wird aktiviert...
Zum beenden "exit" eingeben
(ansible_2.7.8) bash-4.4$ ansible --version
ansible 2.7.8
...
  • Farben
  • es lässt sich ein beliebiges VirtualEnv, mit Angabe der Versionsnummer, hinzufügen
$ startansible                                                      
[0]: ansible_dev
[1]: ansible_2.4.3
[2]: ansible_2.7.0
[3]: ansible_2.7.5
[4]: Eine neue Ansible Version installieren
[5]: Die aktuellste Developer Version installieren
[6]: Abbruch
Option?
Welche Ansible Version soll eingerichtet werden?
2.6.0
[*] pip install --user --upgrade pip
[*] pip install --user virtualenv
[*] virtualenv ansible_2.6.0
[*] source ansible_2.6.0/bin/activate 
[*] pip install --upgrade setuptools 
[*] pip install ansible==2.6.0 
[*] pip install extra modules 
[*] modules for ansible-lint
### Ansible Aktivieren ###
zum Aktivieren jetzt:
source /home/rasputin/Ansible/ansible_2.6.0/bin/activate
...
  • wird keine Versionsnummer beim Hinzufügen einer neuen Ansible-Instanz angegeben, wird ein Standardwert (2.7.0) verwendet
  • es lässt sich die aktuelle Developer-Version verwenden, hierbei wird immer das aktuelle git-Repo geklont
  • Installationen der Ansible-Developer-Version werden durch Neuinstallation aktualisiert; sofern der entsprechende Ordner vorhanden ist, wird dieser vor dem erneuten git clone des Repos, gelöscht

Was habe ich dabei gelernt?
Ich bin beim erstellen des Scriptes auf verschiedenste kleine Problemchen in Sachen Shell-Scripting gestoßen. Shell-Scripte schreiben ist für mich nichts neues und ich habe über die Jahre schon öfter mal das eine oder andere Bash-Script erstellt und trotzdem habe ich hier noch folgende Dinge gelernt:
  • wie wunderbar sich Bash Parameter Substitution verwenden lässt
    • elif [[ "${arr[${EINGABE}]}" == "ende" ]] ;
  • wie die Addition bzw. das hochzählen in bash funktioniert
    • STARTNUM=$(( STARTNUM+1 ))
  • das verwenden von Arrays in bash
    • Hierbei wird jedem Array-Index ein inkrementaler Wert zugewiesen und als Value findet sich der letzte Teil des Pfad-Strings mit der Ansible-Version (z.B.: ansible_2.4.3)
    • ${arr[${EINGABE}]}
Das github-Repo

Das komplette Script ist hier zu finden: github.com

Autor
Kategorien Ansible, Linux

PRTG Map