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?
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% 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:
Wenn Sie den Standardspeicherort für Bestandslisten von /etc/ansible/hosts
verwenden, können Sie einfach Folgendes verwenden:
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):
Die Liste enthält möglicherweise mehr als eine IP-Adresse -i "192.168.1.21,192.168.1.22"
Hinzufügen zu Matts Antwort für mehrere Hosts.
Eingabebeispiel wäre 192.0.2.10,192.0.2.11
Tags und Links ansible ansible-inventory