Je personnalise la users
création Linux dans mon rôle. Je dois permettre aux utilisateurs de mon rôle customize home_directory
, group_name
, name
, password
.
Je me demandais s'il existe un moyen plus flexible de gérer les valeurs par défaut.
Je sais que le code ci-dessous est possible:
- 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
Mais comme je l'ai mentionné, il y a beaucoup de variables optionnelles et cela crée beaucoup de possibilités.
Y a-t-il quelque chose comme le code ci-dessus?
user:
name: "default_name", "{{my_variable}}"
Le code doit être défini name="default_name"
lorsqu'il my_variable
n'est pas défini.
Je pourrais définir toutes les variables defaults/main.yml
et créer l'utilisateur comme ça:
- name: Create user
user:
name: "{{my_variable}}"
Mais ces variables sont à l'intérieur d'un très gros hachage et il y a des hachages à l'intérieur de ce hachage qui ne peuvent pas être une valeur par défaut.
la source
Réponses:
Vous pouvez utiliser ceux de Jinja
default
:la source
default('/home/' {{ anothervar }})
, existe-t-il un moyen de concaténer ces valeurs?default_value
et il utiliserait une variable appelée default_value{{ dict.key | default(5) }}
. Il échouera s'ildict
n'est pas défini.[WARNING]: when statements should not include jinja2 templating delimiters such as {{ }} or {% %}.
Pas totalement lié, mais vous pouvez également vérifier les deux variables
undefined
ANDempty
(par exemplemy_variable:
). (REMARQUE: fonctionne uniquement avec la version ansible> 1.9, voir: lien )la source
Si quelqu'un recherche une option qui gère les variables imbriquées, il existe plusieurs de ces options dans ce problème github .
En bref, vous devez utiliser le filtre "par défaut" pour chaque niveau de variables imbriquées. Pour une variable "a.nested.var", cela ressemblerait à:
ou vous pouvez définir les valeurs par défaut des dictionnaires vides pour chaque niveau de variables, peut-être en utilisant le filtre "Combiner". Ou utilisez le filtre "json_query". Mais l'option que j'ai choisie me semble plus simple si vous n'avez qu'un seul niveau d'imbrication.
la source
Si vous avez une seule lecture que vous souhaitez boucler sur les éléments, définissez cette liste dans group_vars / all ou ailleurs qui a du sens:
Ensuite, votre tâche peut ressembler à ceci:
Passez varlist en tant que tableau JSON:
Avant cela, vous souhaiterez peut-être également une tâche qui vérifie que chaque élément de varlist est également dans all_items :
la source
Si vous utilisez la recherche pour définir la lecture par défaut à partir de l'environnement, vous avez également défini le deuxième paramètre par défaut sur true:
Vous pouvez également concaténer plusieurs définitions par défaut:
la source
La question est assez ancienne, mais qu'en est-il:
Cela me semble moins encombrant ...
la source
Si vous attribuez une valeur par défaut à un fait booléen, assurez-vous qu'aucun guillemet n'est utilisé dans default ().
Pour les autres variables, la même méthode est utilisée dans la réponse vérifiée.
la source