鉴于Ansible通过Jinja2处理所有变量,并且可以做这样的事情:
- name: Debug sequence item value
debug: msg={{ 'Item\:\ %s'|format(item) }}
with_sequence: count=5 format="%02d"
Run Code Online (Sandbox Code Playgroud)
正确插入字符串为:
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"}
Run Code Online (Sandbox Code Playgroud)
为什么这不起作用:
- name: Debug sequence item value
debug: msg={{ 'Item\:\ %02d'|format(int(item)) }}
with_sequence: count=5
Run Code Online (Sandbox Code Playgroud)
这显然会导致某种解析问题,导致我们所需的字符串呈现为冗长:
ok: [server.name] => (item=01) => {"item": "01", "msg": "{{Item\\:\\ %02d|format(int(item))}}"}
Run Code Online (Sandbox Code Playgroud)
注意在上面的例子中item是一个字符串,因为默认格式with_sequence是%d,并且format()没有将值item转换为字符串插值所需的格式%02d,因此需要进行强制转换int().
这是一个错误还是我错过了什么?
小智 25
我花了几次尝试才能做到这一点,但试试这个,相反:
debug: msg={{ 'Item\:\ %02d'|format(item|int) }}
Run Code Online (Sandbox Code Playgroud)
Jinja2有点好笑.
| 归档时间: |
|
| 查看次数: |
15990 次 |
| 最近记录: |