Ansible zufällige UUID-Generierung

8

In meinem Ansible-Skript möchte ich UUIDs im laufenden Betrieb generieren und später verwenden.

Hier ist mein Ansatz:

%Vor%

Ich bekomme jedoch den folgenden Fehler:

%Vor%

Wie kann ich dieses Problem lösen?

    
Mudaer 28.05.2015, 19:58
quelle

5 Antworten

12

In Ansible 1.9 gibt es einen neuen Filter: to_uuid, der eine Zeichenfolge gibt, die eine ansible domänenspezifische UUID zurückgibt. Sie finden die Verwendung hier: Ссылка

    
Xingxing Gao 29.05.2015, 01:52
quelle
6

Wie von Xingxing Gao erwähnt, gibt es to_uuid , das mit einer ausreichend großen Zahl verwendet werden kann, und den random Filter, um eine zufällige UUID zu erzeugen. Je größer die Zahl, desto größer die Zufälligkeit. zB:

%Vor%

oder

%Vor%     
Willem van Ketwich 04.01.2017 02:14
quelle
4

Das ist sehr nah. Ich musste nur ein paar Dinge ändern. Ich habe das herausgefunden, indem ich die Aufgabe " debug: var=uuid_list " benutzt und iteriert habe.

%Vor%

Anmerkungen:

  1. echo hat zum Ausdruck der Zeichenfolge uuidgen geführt. entfernt echo , behalten uuidgen .
  2. item.item.stdout muss item.stdout sein
  3. Ich habe eine kurze Zeitüberschreitung verwendet, um dies zu testen, ohne einen Rest-Endpunkt verfügbar zu haben. Dies gibt Fehler Fehlermeldungen, aber es ist klar, dass es korrekt ist.
  4. uuid_list.stdout muss uuid_list.results sein
tedder42 28.05.2015 20:27
quelle
1

Eine Lösung, die immun gegen Caching / veraltete Faktenerfassung sein sollte und Ihnen bei jeder Verwendung eine relativ zufällige UUID gibt, ist:

{{ 999999999999999999999 | random | string + (lookup('pipe', 'date +%s%N')) | to_uuid() }}

Es verkettet eine Zufallszahl zwischen 0 und 999999999999999999999 mit den aktuellen Nanosekunden seit Unix-Epoche und speist diese durch den Filter von anisible to_uuid () (verfügbar seit Version 1.9). Das Fakt-Caching sollte kein Problem verursachen, da Nachschlagevorgänge immer bei jedem Aufruf ausgewertet werden.

Wenn Sie möchten, dass eine UUID während der Wiedergaben in einem Playbook konstant bleibt (aber nicht zwischen mehreren Aufrufen des Playbooks bleibt - selbst wenn das Fakt-Caching aktiviert ist), verwenden Sie:

set_fact: uuid={{ 999999999999999999999 | random | string + (lookup('pipe', 'date +%s%N')) | to_uuid() }}

    
corford 13.07.2017 12:31
quelle
0

Wenn Sie Willems Lösung verwenden, beachten Sie, dass Jinja und Ansible das Ergebnis für mehrere Ausführungen desselben Filters zwischenspeichern. Daher müssen Sie die Quellennummer jedes Mal ändern

%Vor%

und für Situationen, in denen Sie eine normale md5 anstelle von to_uuid benötigen, nimmt Hash ('md5') keine ganze Zahl. Der einfachste Weg, um den Zufall in eine Zeichenfolge zu konvertieren, die ich gefunden habe, ist to_uuid:

%Vor%     
James 16.02.2017 14:07
quelle

Tags und Links