Auf der Spielebene müssen wir serial: 1
zulassen, dass wir das gesamte Spiel jeweils als Host ausführen können. Aber ich habe keinen einfachen Weg gefunden, dies für eine einzelne Aufgabe zu tun. Dies ist insbesondere dann relevant, wenn die betreffende Task (aus welchen Gründen auch immer) keine ordnungsgemäße Sperrung durchführt.
Eine naheliegende Antwort ist, die Aufgabe selbst in die Hand zu nehmen. Bei Rollen hilft das aber nicht. ( serial: 1
Das Stück mit der Rolle spielen zu müssen, ist nicht wirklich intuitiv.)
serial: 1
Lass es mich wenigstens auf ein Stück setzen. Aber ich möchte es nur auf einen Unterpunkt eines Stücks setzen (was auch immer der richtige Name dafür ist. Ich dachte, es war "Aufgabe", aber obiger Kommentar scheint nicht zu stimmen).serial: 1
macht etwas völlig anderes: Das ist, als würde man das Playbook für jeden Host nacheinander ausführen und auf den Abschluss des kompletten Playbooks warten, bevor man zum nächsten Host übergeht.forks=1
bedeutet, dass die erste Aufgabe in einem Spiel auf einem Host ausgeführt wird, bevor die gleiche Aufgabe auf dem nächsten Host ausgeführt wird, sodass die erste Aufgabe für jeden Host ausgeführt wird, bevor die nächste Aufgabe berührt wird. Sie möchten alsoforks=1
nur ein Stück spielen. leider ist das momentan nicht möglich.Wenn Sie es auf einem einzelnen Computer ausführen, tritt das Problem der exklusiven Sperren für mehr als einen Host auf. Sie sollten also einen nach dem anderen für alle Hosts ausführen. Dazu müssen Sie
--forks=1
beim Aufrufen eines ansible-Playbook-Befehls festgelegt sein. Zum Beispiel:ansible-playbook webserver.yml --forks=1
wo webserver.yml app01 und app02 in Ihrem hat[webserver]
quelle
Es gibt eine Problemumgehung für dieses Problem - man kann eine Liste von Hosts (oder einer Gruppe) übergeben
with_items
und danndelegate_to
mit dieser Liste verwenden. Auf diese Weise wird die Aufgabe Host für Host ausgeführt.Beispielsweise:
quelle
run_once: true
ist, probieren Sie es aus. Sie werden nicht mögen, was passiert. (so viele wiederholte Läufe aaaahhhh)Denken Sie, was Sie wollen, ist
run_once: true
quelle
Verwenden Sie für Befehle, die lokal ausgeführt werden können, eine Schleife, um alle Hosts im Spiel zu durchlaufen. Dies funktioniert NUR, wenn der Befehl lokal ausgeführt werden kann. Sie können auf diese Weise auch einen Befehl mit ssh einzeln für die Remotecomputer ausführen, wenn die Schlüssel eingerichtet sind. Wenn Sie jedoch von Eskalation sprechen, wird dies schwierig.
Z.B:
quelle
inventory_hostname
, da sonst die Schleife keinen Sinn ergibt.