2013-08-05 82 views
4

鑑於Ansible通過Jinja2的處理所有變量,做這樣的事情是可能的:如何格式化Ansible值的變量

- name: Debug sequence item value 
    debug: msg={{ 'Item\:\ %s'|format(item) }} 
    with_sequence: count=5 format="%02d" 

哪個正確插值的字符串:

ok: [server.name] => (item=01) => {"item": "01", "msg": "Item: 01"} 
ok: [server.name] => (item=02) => {"item": "02", "msg": "Item: 02"} 
ok: [server.name] => (item=03) => {"item": "03", "msg": "Item: 03"} 
ok: [server.name] => (item=04) => {"item": "04", "msg": "Item: 04"} 
ok: [server.name] => (item=05) => {"item": "05", "msg": "Item: 05"} 

爲什麼那麼這不工作:

- name: Debug sequence item value 
    debug: msg={{ 'Item\:\ %02d'|format(int(item)) }} 
    with_sequence: count=5 

這顯然會導致某種解析問題WHIC在我們所期望的字符串h導致被詳細呈現:

ok: [server.name] => (item=01) => {"item": "01", "msg": "{{Item\\:\\ %02d|format(int(item))}}"} 

注意到在上述示例中item是一個字符串,因爲with_sequence默認格式是%d,和format()並不的item值轉換爲所需的格式通過字符串插值%02d,因此需要用int()來施放。

這是一個錯誤還是我錯過了什麼?

回答

11

我花了一對夫婦的嘗試得到這個權利,但是試試這個,而是:

debug: msg={{ 'Item\:\ %02d'|format(item|int) }} 

Jinja2的是有點好笑。