2015-04-09 10 views
7

Ben şablonda çok basit bir çizgi var:jinja2 listenin elemanlar.Poisson için tırnak ekleme (yanıtlayıcı ')

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

Ve ip için liste var:

ip: 
- 1.1.1.1 
- 2.2.2.2 
- 3.3.3.3 

Ama uygulama ile IP'leri istiyor alıntılar (ip = '1.1.1.1', '2.2.2.2').

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

Ama çok çirkin:

böyle yapabilirim. Listenin her elemanında sesli olarak alıntı eklemek için herhangi bir iyi bir yol var mı?

Teşekkürler!

cevap

10

deneyin:

- 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}})" 

Not: yanıtlayıcı 'i burada kötüye ettiğimi olan {{}} içinde piton kod yürütme biraz destekler.

+0

İnanılmaz! Teşekkür ederim! –

11

Bu çalışacaktır:

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

Özel bir filtre eklentisi de çalışacaktır. ansible.cfg yorumsuz filter_plugins içinde ve ona bir dosya adı verilen core.py. bu

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

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

koymak bir yol vermek Like this. Sonra sadece

ip|wrap|join(', ') 

kullanabilirsiniz Ve tırnak sarılmış her ip ile virgülle ayrılmış liste üretmelidir.

Ben Sen bu şekilde kullanabilirsiniz "

için özel wrap filtre

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

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

Eğer sarıcı özelleştirilebilir görebileceğiniz gibi ve varsayılan geliştirdik

+0

Bu bir çekicilik gibi çalışır. Ve bunu sadece bir proje/oyun kitabı için isterseniz, projenize bir 'filter_plugins' klasörü koyun ve daha önce de belirtildiği gibi 'core.py' dosyasını arayın. – incredibleholg

+1

Olmaması gereken 'ip = {{' \ "'+ ip | join (' \", \ "') +' \" '}} '? – LoicAG

1

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

Yasal Uyarı : Ben bir python ve ansible newbie