Ansible-Playbook – Mehr als einen Host begrenzen?

Ansible-Playbook – Mehr als einen Host begrenzen?

Aus verschiedenen Gründen/Einschränkungen kann ich in der Inventardatei keine neuen Gruppen erstellen und muss diese --limit/-lzur 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

  1. 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
  1. 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
  1. 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-playbookwürde es verstehen.

Ich habe mein Problem behoben, indem ich -lim 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

verwandte Informationen