2016-07-01 77 views
7

Sto cercando di compattare diversi pezzi di codice simile che assomiglia a:Set infatti con il nome chiave dinamica ansible

- ... 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 realtà, l'unica differenza tra loro è che io sto usando diversi nomi di lista qui invece di my_list

In realtà io voglio fare questo:

set_fact: 
    "{{ some var }}" : "{{ some value }}" 

mi sono imbattuto this post ma non ha trovato alcuna risposta qui.

È possibile farlo o c'è qualche soluzione?

risposta

11

un'occhiata a questo campione playbook:

--- 
- hosts: localhost 
    vars: 
    iter: 
     - key: abc 
     val: xyz 
     - key: efg 
     val: uvw 
    tasks: 
    - set_fact: {"{{ item.key }}":"{{ item.val }}"} 
     with_items: "{{iter}}" 
    - debug: msg="key={{item.key}}, hostvar={{hostvars['localhost'][item.key]}}" 
     with_items: "{{iter}}" 
+1

In realtà, la risposta semplificata sarebbe 'set_fact: { "{{chiave}}": "{{val}}"}' –

+0

Grazie per l'idea, ho avuto intorno utilizzando l'elenco dei dizionari '[{chiave: var1, val: val1}, {chiave: var2, val: val2}]' invece di un singolo dizionario '{var1: val1, var2: val2}'. – haridsv

2

È possibile che questo non funziona per me. Quello che finalmente funziona è

- set_fact: 
    example_dict: "{'{{ some var }}':'{{ some other var }}'}" 

Quale è, alla fine, ovvio. Costruisci una stringa (le doppie virgolette esterne) che viene quindi interpretata come un hash. In hash, la chiave e il valore devono essere virgolette singole (le virgolette interne singole attorno alle sostituzioni variabili). E infine basta posizionare le sostituzioni variabili come in qualsiasi altra stringa.

Stefan

+0

Qui, 'example_dict' finisce per essere una stringa, non un dizionario. – haridsv

+0

Ho dovuto definirlo in questo modo, circondato da virgolette doppie, con ansible 2.3.2.0. Non è finito come una stringa, stampandola con 'debug:' ha mostrato che aveva la struttura del dizionario corretta. – Matthew

Problemi correlati