如何在Ansible值中格式化变量

时间:2013-08-05 05:09:19

标签: jinja2 ansible

鉴于Ansible通过Jinja2处理所有变量,并且可以做这样的事情:

- 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

这显然会导致某种解析问题,导致我们所需的字符串呈现为详细信息:

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

请注意,在上面的示例中,item是一个字符串,因为with_sequence的默认格式为%d,而format()未投放{{1}的值字符串插值item所需的格式,因此需要使用%02d进行投射。

这是一个错误还是我错过了什么?

1 个答案:

答案 0 :(得分:21)

我花了几次尝试才能做到这一点,但试试这个,而不是:

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

Jinja2有点搞笑。