Aus verschiedenen Gründen/Einschränkungen kann ich in der Inventardatei keine neuen Gruppen erstellen und muss diese --limit/-l
zur Angabe der Hosts verwenden.
Mir wurde gesagt, ich solle etwas tun wie:
ansible-playbook -i /path/to/my/inventory/file.ini -l server.1.com server.2.com my-playbook.yml --check --diff
Dies hat einen Fehler ausgelöst:
ERROR! the playbook: server.2.com could not be found
Von demAnsible-DokumentationZu diesem Thema habe ich herausgefunden, dass Sie eine separate Datei verwenden können, um alle Hosts aufzulisten, die Sie einschränken möchten. So etwas wie:
ansible-playbook -i /path/to/my/inventory/file.ini -l @list-to-limit.txt my-playbook.yml
Ich muss jedoch alles inline erledigen, ohne eine zusätzliche Datei zu erstellen.
Antwort1
Das gleicheGängige Mustergelten für die Befehlszeilenoption -l
. Zitat aus der Anmerkung:
„Sie können entweder ein Komma (,) oder einen Doppelpunkt (:) verwenden, um eine Liste von Hosts zu trennen. Das Komma ist beim Umgang mit Bereichen und IPv6-Adressen vorzuziehen.“
Angesichts des Inventars
shell> cat hosts
[webservers]
test_01
test_02
[dbservers]
test_03
test_04
und das Spielbuch
shell> cat pb.yml
- hosts: all
tasks:
- debug:
var: inventory_hostname
Die verschiedenen Muster des Hosts funktionieren wie erwartet. Zum Beispiel
- Alle Hosts in Webservern plus alle Hosts in DB-Servern
shell> ansible-playbook -i hosts pb.yml -l webservers:dbservers
...
ok: [test_01] =>
inventory_hostname: test_01
ok: [test_02] =>
inventory_hostname: test_02
ok: [test_03] =>
inventory_hostname: test_03
ok: [test_04] =>
inventory_hostname: test_04
- Die Hosts test_02 und test_04
shell> ansible-playbook -i hosts pb.yml -l test_02,test_04
ok: [test_02] =>
inventory_hostname: test_02
ok: [test_04] =>
inventory_hostname: test_04
- Alle Hosts in Webservern außer dem Host test_02
shell> ansible-playbook -i hosts pb.yml -l webservers:\!test_02
inventory_hostname: test_01
Antwort2
So geht's:
ansible-playbook ./your_playbook --limit "host1,host2,host3,host4"
Antwort3
Ich war völlig abwesend und dachte damals, ich könnte einfach alle Hosts online auflisten und ansible-playbook
würde es verstehen.
Ich habe mein Problem behoben, indem ich -l
im Befehl einfach vor jedem Hostnamen Folgendes hinzugefügt habe.
(Mir ist bewusst, dass dies möglicherweise keine bewährte Vorgehensweise ist.)
Mein endgültiger Befehl sah ungefähr so aus:
ansible-playbook -i /path/to/my/inventory/file.ini -l server.1.com -l server.2.com my-playbook.yml --check --diff