Ansible - Utiliser la valeur par défaut si une variable n'est pas définie
Je suis personnalisation de linux users
création à l'intérieur de mon rôle. J'ai besoin de laisser les utilisateurs de mon rôle de personnaliser home_directory
, group_name
, name
, password
.
Je me demandais si il y a une façon plus flexible pour faire face avec des 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 facultatives, et cela crée beaucoup de possibilités.
Est là quelque chose comme le code ci-dessus?
user:
name: "default_name", "{{my_variable}}"
Le code doit définir name="default_name"
quand my_variable
n'est pas défini.
Je pourrais définir toutes les variables sur defaults/main.yml
et créer l'utilisateur comme ceci:
- name: Create user
user:
name: "{{my_variable}}"
Mais ces variables sont à l'intérieur d'un très gros hachage et il y a quelques hachages de l'intérieur que de hachage qui ne peut pas être un défaut.
- connexes: stackoverflow.com/questions/19614027/...
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser Jinja est
default
:default('/home/' {{ anothervar }})
, est-il possible de concaténer ces valeurs?default_value
et elle serait d'utiliser une variable appelée default_value{{ dict.key | default(5) }}
. Ce sera un échec sidict
est pas défini.[WARNING]: when statements should not include jinja2 templating delimiters such as {{ }} or {% %}.
Si vous avez un jeu unique que vous souhaitez faire une boucle sur les éléments définir cette liste dans group_vars/tout, ou quelque part d'autre qui a du sens:
Votre tâche peut ressembler à ceci:
Passer dans varlist comme un tableau JSON:
Avant que, vous souhaitez peut-être également une tâche qui vérifie que chaque élément dans varlist est aussi dans all_items:
Pas totalement liés, mais vous pouvez également vérifier les deux
undefined
ETempty
(pour l'e.gmy_variable:
) de la variable. (NOTE: ne fonctionne qu'avec ansible version > 1.9, voir: lien)Dans le cas où vous utilisez la fonction rechercher pour définir par défaut en lecture à partir de l'environnement vous avez également défini le deuxième paramètre de défaut à true:
Vous pouvez également concaténer plusieurs définitions par défaut:
Si quelqu'un est à la recherche d'une option qui gère imbriquée variables, il y a plusieurs de ces options dans ce github problème.
En bref, vous devez utiliser le "défaut" de filtre pour chaque niveau d'imbrication des vars. Pour une variable de "un.imbriqués.var", il devrait ressembler à:
ou vous pouvez définir les valeurs par défaut de vide dicts pour chaque niveau de vars, peut-être à l'aide de "combiner" du filtre. Ou d'utiliser des "json_query" du filtre. Mais l'option que j'ai choisi semble plus simple pour moi si vous avez seulement un niveau d'imbrication.