Ich verwende Ansible 2.2, kann aber ein Upgrade durchführen, wenn es hilft.
Ich habe das gesehen und war ziemlich aufgeregt, aber es scheint nicht in dieser (oder einer anderen) Version der Ansible-Dokumentation zu sein.
Das Problem, das ich zu lösen versuche, ist, dass ich 1000 Benutzer habe, die ich auf einer Centos-Box verwalten muss.
Es dauert eine Weile, diese Aufgabe seriell auszuführen. Und noch ärgerlicher ist, dass alles als geändert angezeigt wird, da der Befehl "expires" auf dem Benutzermodul das Objekt immer als geändert markiert.
Dies sah ebenfalls vielversprechend aus, aber es dauerte genauso lange, bis jeder Befehl in der with_items-Schleife ausgeführt wurde, und ging nicht schneller (ich habe nie lange genug gewartet, um bis zum Ende zu kommen).
Das Überspringen von Aufgaben ist jetzt schnell (viel schneller als in Ansible 2.0). Wenn ich nicht herausfinden kann, wie dies parallel funktioniert, werde ich zurückgehen und herausfinden, wie sinnlose Aufgaben übersprungen werden können, und wenn überhaupt sonst schlägt fehl, ich schreibe mein eigenes Modul. Aber es scheint, als sollte ich das alles in Ansible schneller machen können.
Dies ist, was ich parallel ausführen möchte, host_authorizations
ist eine Liste von Benutzernamen und anderen Daten.
- name: Create/modify OS user accounts
user: name={{ item.username }} group=sshusers shell=/bin/bash home="/home/selinux-modules/{{ item.username }}" state=present expires={{item.expiredate|default(omit)}}
with_items: "{{ host_authorizations }}"
tags: full_maintenance
Antworten:
Wie @webKnja erwähnt hat, ist dies im
async
Modus möglich . Ich habe es kürzlich selbst entdeckt und gelernt, dass Sie es je nach Ihren Anforderungen auf drei verschiedene Arten verwenden können.Führen Sie die Ergebnisse aus und fragen Sie sie ab. Beachten Sie Folgendes
poll:5
: Dadurch werden die Ergebnisse alle 5 Sekunden abgefragt. Mit dieser Methode können Sie Zeit sparen.Feuer und vergessen
poll: 0
, Dies ist eine sehr schnelle Option, da Ansible nur diese Aufgaben erledigt. Der Nachteil ist, dass wir nicht wissen, was das Ergebnis der Aufgabe war, dhchanged: True/False
. Natürlich ist es ein Nachteil, wenn Sie sich für das Feedback interessieren;).async_status
Feuern und vergessen mit , die Syntax für die Aufgabe ist dieselbe wie in Beispiel 2, unabhängig davon, ob eine zusätzliche Aufgabe erforderlich istasync_status
. Das ist mein Favorit , da es relativ schnell ist (schneller als normal Looping oder dieexecute and poll
) und ermöglicht es Ihnen , das Feedback zu erfassen , obwohl muß mit neuen beschäftigenregister
für Ihreasync_task
.retries: 20
- wie viele Versuche vor dem Scheitern.delay: 2
- Wie viele Sekunden müssen zwischen den Umfragen gewartet werden?Ein Wort der Vorsicht , abhängig von der Aufgabe, die Sie möglicherweise nicht verwenden können
async
. Ich hatte Beispiele, in denen ich mit einem System interagierte, das nicht mehrere Anforderungen für dieselbe Ressource verarbeiten konnte. Ich fand dieasync
Option am besten, wenn ich dieselbe Aufgabe auf mehreren Hosts ausführen muss. Dort konnte ich die meiste Zeit "sparen".Da Sie den Link zur Ansible-Dokumentation in der Frage gepostet haben, werde ich das nicht tun.
quelle
poll
Wert in Beispiel 3 auf 0 ändern . Dies ist eine erstaunliche Erklärung !! Danke.async_status
erfordertjid
, nichtid
.Um Ihre Frage zu beantworten: Nein, Ansible kann derzeit keine Schleifen parallel ausführen.
Ich würde
newusers
stattdessen verwenden, was für die Erstellung von Massenbenutzern gemacht ist. Erstellen Sie eine Datei mit allen Benutzern, kopieren Sie sie auf den Host und führen Sie sienewusers /path/to/user/list
in einercommand
Aufgabe aus.quelle
Dies kann im
async
Modus erreicht werden. Nachfolgend finden Sie einige Referenzen dazu.Refs:
quelle