10

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()してください。したがって、 を使用してキャストする必要があります。item%02dint()

これはバグですか、それとも何か不足していますか?

4

1 に答える 1

32

これを正しく行うには数回の試行が必要でしたが、代わりにこれを試してください:

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

Jinja2 は少しおかしいです。

于 2013-08-06T00:35:25.420 に答える