Einstellen der Tat mit dynamischen Schlüssel name in ansible
Ich versuche zu schrumpfen, mehrere Stücke von ähnlichem code, die wie folgt aussieht:
- ... 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...
In der Tat, der einzige Unterschied zwischen Ihnen ist, dass ich mich mit unterschiedlichen Listennamen hier statt my_list
In der Tat, dass ich dies tun möchten:
set_fact:
"{{ some var }}" : "{{ some value }}"
Stieß ich auf dieser Beitrag aber nicht finden, eine Antwort hier.
Ist es möglich, dies zu tun oder gibt es Abhilfe?
Du musst angemeldet sein, um einen Kommentar abzugeben.
werfen Sie einen Blick auf diese Probe playbook:
set_fact: {"{{ key }}":"{{ val }}"}
[{key: var1, val: val1}, {key: var2, val: val2}]
anstatt ein einzelnes Wörterbuch{var1: val1, var2: val2}
.Den oben funktioniert bei mir nicht. Was dann endlich funktioniert ist
Die am Ende offensichtlich. Erstellen Sie eine Zeichenfolge ein (die äußeren Anführungszeichen), die dann interpretiert werden als ein hash. In hashes Schlüssel und Wert müssen von einfachen Anführungszeichen (die inneren einfachen Anführungszeichen um die Variablen-Ersetzungen). Und schließlich Sie einfach Ihre variable Ersetzungen wie in jedem anderen string.
Stefan
example_dict
im Endeffekt ein string ist, nicht ein Wörterbuch.debug:
zeigte, hatte es die richtige dictionary-Struktur.environment:
auf Modul-Ebene beschrieben in der Dokumentation unter docs.ansible.com/ansible/latest/user_guide/..., und erstellen Sie die Variablen mit- "{'dynamic environment variable key name inkl. {{ vars }}':'{{ dynamic environment variable value}}'}"
(hier ist ein vollständiges Beispiel).Ab 2018, mit ansible v2.7.1, die syntax, die Sie vorschlagen, in deinem post funktioniert bestens.
Zumindest in meinem Fall, habe ich diese in der Rolle "a" :
Ist und dass in der Rolle "b" :
Und die Ausführung geht :
Er erzeugt einen string der inline-Modul-parameter-Ausdruck durch die Verkettung Wert von
some_var
fact, (name), separator=
und Wertsome_value
(fact-value).Dadurch wird eine variable "var1" mit Ihrer dynamischen Variablen key und value.