Jeu fait avec dynamique de nom de la clé dans ansible
Je suis en train de rétrécir plusieurs morceaux de code similaire qui ressemble à:
- ... multiple things is going here
register: list_register
- name: Generating list
set_fact: my_list="{{ list_register.results | map(attribute='ansible_facts.list_item') | list }}"
# the same code repeats...
En fait, la seule différence entre eux est que je suis à l'aide de différents noms de liste ici, au lieu de my_list
En fait je veux faire ceci:
set_fact:
"{{ some var }}" : "{{ some value }}"
Je suis tombé sur ce post mais n'ai pas trouvé de réponse ici.
Est-il possible de le faire ou est-il une solution de contournement?
OriginalL'auteur Nick Roz | 2016-07-01
Vous devez vous connecter pour publier un commentaire.
prendre un coup d'oeil à cet exemple playbook:
set_fact: {"{{ key }}":"{{ val }}"}
Merci pour l'idée, je suis autour de vous en utilisant la liste des dictionnaires
[{key: var1, val: val1}, {key: var2, val: val2}]
au lieu d'un seul dictionnaire{var1: val1, var2: val2}
.OriginalL'auteur Konstantin Suvorov
Le ci-dessus ne fonctionne pas pour moi. Ce qui fonctionne enfin est
Qui est à la fin évident. Vous construisez une chaîne de caractères (à l'extérieur des guillemets) qui est ensuite interprété comme une table de hachage. Dans les hachages de clé et la valeur doit être entre guillemets simples (l'intérieur des guillemets simples autour de la variable de remplacement). Et enfin il vous suffit de placer votre variable de remplacement comme dans n'importe quelle autre chaîne.
Stefan
example_dict
finit par être une chaîne de caractères, pas un dictionnaire.J'ai eu à le définir de cette façon, entouré par des guillemets, avec ansible 2.3.2.0. Il n'a pas de fin comme une chaîne de caractères, impression avec
debug:
a montré qu'il avait le bon dictionnaire de la structure.Merci beaucoup! Cela fonctionne aussi pour la situation, si votre variable d'environnement les noms de clés sont dynamiques basés sur des noms connus au moment de l'exécution. Par conséquent, on peut utiliser
environment:
au niveau du module décrit dans la doc docs.ansible.com/ansible/latest/user_guide/... et de créer les variables avec- "{'dynamic environment variable key name inkl. {{ vars }}':'{{ dynamic environment variable value}}'}"
(heres un exemple complet).OriginalL'auteur user2854753
Il crée une chaîne de inline module de paramètre d'expression par la concaténation de la valeur de
some_var
(nom), un séparateur=
et de la valeur desome_value
(valeur).OriginalL'auteur czerny
À compter de 2018, à l'aide de ansible v2.7.1, de la syntaxe que vous suggérez dans votre post fonctionne parfaitement bien.
Au moins dans mon cas, j'ai ceci dans le rôle de "une" :
Et que dans le rôle de "b" :
Et exécution passe :
OriginalL'auteur theenglishway