2015-04-09 11 views
7

ho molto semplice linea nel modello:Aggiungi virgolette per elemens della lista in Jinja2 (ansible)

ip={{ip|join(', ')}} 

E devo lista per ip:

ip: 
- 1.1.1.1 
- 2.2.2.2 
- 3.3.3.3 

Ma applicazione vuole IP con quotes (ip = '1.1.1.1', '2.2.2.2').

posso farlo in questo modo:

ip: 
- "'1.1.1.1'" 
- "'2.2.2.2'" 
- "'3.3.3.3'" 

ma è molto brutto. È un buon modo per aggiungere citazioni su ogni elemento della lista in ansible?

Grazie!

risposta

10

prova:

- hosts: localhost 
    tags: s20 
    gather_facts: no 
    vars: 
    ip: 
     - 1.1.1.1 
     - 2.2.2.2 
     - 3.3.3.3 
    joined_ip: "'{{ \"', '\".join(ip)}}'" 
    tasks: 
    - debug: msg="(ip={{joined_ip}})" 

PS: ansible supporta un po 'di esecuzione di codice python all'interno {{}}, che è quello che sto abusando qui.

+0

Incredibile! Grazie! –

11

Ciò funzionerà: plugin filtro

ip={{ '\"' + ip|join('\", \"' + '\"')}} 

Un'usanza funziona anche. In ansible.cfg filter_plugins rimuovere il commento e fare un percorso, dove abbiamo messo questo

def wrap(list): 
    return [ '"' + x + '"' for x in list] 

class FilterModule(object): 
    def filters(self): 
     return { 
      'wrap': wrap 
     } 

in un file chiamato core.py. Like this. Quindi puoi semplicemente usare

ip|wrap|join(', ') 

E dovrebbe produrre una lista separata da virgole con ogni ip racchiuso tra virgolette.

+0

Funziona come un fascino. E se lo vuoi solo per un progetto/playbook, metti semplicemente una cartella 'filter_plugins' nel tuo progetto e chiama il file, come già detto,' core.py'. – incredibleholg

+1

Non dovrebbe essere 'ip = {{'\"' + ip | join ('\ ", \"') + '\ "'}}'? – LoicAG

1

ho sviluppato una consuetudine wrap filtro

def wrap(value, wrapper = '"'): 
    return wrapper + value + wrapper 

class FilterModule(object): 
    def filters(self): 
    return { 
     'wrap': wrap 
    } 

Come si può vedere involucro è personalizzabile e le impostazioni predefinite per "

Si può usare in questo modo

ip={{ ip | map('wrap') | join(', ') }} 

responsabilità : Sono un novizio pitone e ansibile