Wie wird der Benutzer in Ansible aufgefordert, einen Zielhost anzugeben?

8

Ich möchte ein Bootstrapper-Playbook für neue Maschinen in Ansible schreiben, das die Netzwerkeinstellungen neu konfiguriert. Zum Zeitpunkt der ersten Ausführung haben Zielrechner eine DHCP-Adresse.

Der Benutzer, der das Playbook ausführen soll, kennt die zugewiesene IP-Adresse eines neuen Rechners. Ich möchte den Benutzer nach Wert fragen.

Das Modul

vars_prompt ermöglicht die Eingabe vom Benutzer, ist jedoch unter hosts definiert und verhindert so effektiv, dass die Hostadresse als erforderlicher Wert verwendet wird.

Ist es möglich, ohne ein Wrapper-Script zu verwenden, das die Inventardatei ändert?

    
techraf 14.10.2015, 07:23
quelle

4 Antworten

13

Der richtige Weg dazu besteht darin, einen dynamischen Host mit add_host zu erstellen und ihn in eine neue Gruppe zu legen und dann ein neues Spiel zu starten, das auf diese Gruppe zielt. Auf diese Weise können Sie, wenn Sie andere Verbindungsvariablen haben, die im Voraus gesetzt werden müssen (Anmeldeinformationen / Schlüssel / etc), diese in einer leeren Gruppe im Inventar festlegen und dann den Host dynamisch hinzufügen. Zum Beispiel:

%Vor%     
nitzmahone 13.04.2016, 17:02
quelle
4

Sie könnten es stattdessen mit extra-vars übergeben .

Machen Sie einfach Ihre hosts -Abschnitt eine Variable wie {{ hosts_prompt }} und übergeben Sie den Host dann in der Befehlszeile wie folgt:

%Vor%

Wenn Sie den Standardspeicherort für Bestandslisten von /etc/ansible/hosts verwenden, können Sie einfach Folgendes verwenden:

%Vor%     
ydaetskcoR 14.10.2015 07:32
quelle
1

Haftungsausschluss: Die akzeptierte Antwort bietet die beste Lösung für das Problem. Während dieser arbeitet, basiert es auf einem Hack und ich lasse es als eine Referenz.

Ich fand heraus, dass es möglich war, einen derzeit undokumentierten Hack zu verwenden (Guthaben < a href="https://StackOverflow.com/a/33334963/2947502"> Bruce P , um mich auf den Beitrag aufmerksam zu machen), der den Wert des Parameters -i / --inventory in eine Ad-hoc-Liste umwandelt von Hosts ( Referenz ). Mit nur dem Hostnamen / der IP-Adresse und einem nachgestellten Leerzeichen (wie unten) bezieht es sich auf einen einzelnen Host, ohne dass die Inventardatei existieren muss.

Befehl:

%Vor%

Und dementsprechend kann playbook.yml gegen alle Hosts ausgeführt werden (was im obigen Beispiel einem einzelnen Host 192.168.1.21 entspricht):

%Vor%

Die Liste enthält möglicherweise mehr als eine IP-Adresse -i "192.168.1.21,192.168.1.22"

    
techraf 26.10.2015 14:20
quelle
1

Hinzufügen zu Matts Antwort für mehrere Hosts.

Eingabebeispiel wäre 192.0.2.10,192.0.2.11

%Vor%     
Jacob Evans 25.09.2017 15:57
quelle

Tags und Links