Ich passe die Linux- users
Erstellung in meiner Rolle an. Ich brauche Benutzer meiner Rolle anpassen lassen home_directory
, group_name
, name
, password
.
Ich habe mich gefragt, ob es eine flexiblere Möglichkeit gibt, mit Standardwerten umzugehen.
Ich weiß, dass der folgende Code möglich ist:
- name: Create default
user:
name: "default_name"
when: my_variable is not defined
- name: Create custom
user:
name: "{{my_variable}}"
when: my_variable is defined
Aber wie gesagt, es gibt viele optionale Variablen und dies schafft viele Möglichkeiten.
Gibt es so etwas wie den obigen Code?
user:
name: "default_name", "{{my_variable}}"
Der Code sollte festgelegt werden, name="default_name"
wenn er my_variable
nicht definiert ist.
Ich könnte alle Variablen aktivieren defaults/main.yml
und den Benutzer so erstellen:
- name: Create user
user:
name: "{{my_variable}}"
Aber diese Variablen befinden sich in einem wirklich großen Hash und es gibt einige Hashes in diesem Hash, die kein Standard sein können.
ansible
ansible-2.x
Bernardo Vale
quelle
quelle
Antworten:
Sie können Jinjas verwenden
default
:quelle
default('/home/' {{ anothervar }})
eine Möglichkeit, diese Werte zu verketten?default_value
und es würde eine Variable namens default_value{{ dict.key | default(5) }}
. Es wird fehlschlagen, wenndict
es nicht definiert ist.[WARNING]: when statements should not include jinja2 templating delimiters such as {{ }} or {% %}.
Nicht vollständig verwandt, aber Sie können auch nach
undefined
UND- Variablenempty
(z. B.my_variable:
) suchen. (HINWEIS: Funktioniert nur mit ansible Version> 1.9, siehe: Link )quelle
Wenn Sie ein einzelnes Spiel haben, das Sie über die Elemente schleifen möchten, definieren Sie diese Liste in group_vars / all oder an einer anderen Stelle, die Sinn macht:
Dann kann Ihre Aufgabe folgendermaßen aussehen:
Übergeben Sie varlist als JSON-Array:
Zuvor möchten Sie möglicherweise auch eine Aufgabe, die überprüft, ob sich jedes Element in varlist auch in all_items befindet :
quelle
Wenn jemand nach einer Option sucht, die verschachtelte Variablen verarbeitet, gibt es in diesem Github-Problem mehrere solcher Optionen .
Kurz gesagt, Sie müssen den "Standard" -Filter für jede Ebene verschachtelter Variablen verwenden. Für eine Variable "a.nested.var" würde es so aussehen:
oder Sie können Standardwerte für leere Dikte für jede Vars-Ebene festlegen, indem Sie möglicherweise den Filter "Kombinieren" verwenden. Oder verwenden Sie den Filter "json_query". Die von mir gewählte Option erscheint mir jedoch einfacher, wenn Sie nur eine Verschachtelungsebene haben.
quelle
Wenn Sie Lookup verwenden, um den Standardwert für das Lesen aus der Umgebung festzulegen, haben Sie auch den zweiten Standardparameter auf true festgelegt:
Sie können auch mehrere Standarddefinitionen verketten:
quelle
Die Frage ist ziemlich alt, aber was ist mit:
Es sieht für mich weniger umständlich aus ...
quelle
Wenn Sie einen Standardwert für boolesche Fakten zuweisen, stellen Sie sicher, dass in default () keine Anführungszeichen verwendet werden.
Für andere Variablen wird dieselbe Methode wie in der verifizierten Antwort verwendet.
quelle