Comment formater une variable dans Ansible valeur
Étant donné que Ansible les processus de toutes les variables à travers Jinja2, et de faire quelque chose comme ceci est possible:
- name: Debug sequence item value
debug: msg={{ 'Item\:\ %s'|format(item) }}
with_sequence: count=5 format="%02d"
Qui correctement interpole la chaîne:
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"}
Pourquoi, alors, n'est-ce pas le travail:
- name: Debug sequence item value
debug: msg={{ 'Item\:\ %02d'|format(int(item)) }}
with_sequence: count=5
Ce qui, apparemment, provoque une sorte de problème d'analyse dont les résultats dans notre chaîne souhaitée rendu détaillé:
ok: [server.name] => (item=01) => {"item": "01", "msg": "{{Item\\:\\ %02d|format(int(item))}}"}
De noter que dans l'exemple ci-dessus item
est une chaîne, car le format par défaut de with_sequence
est %d
, et format()
ne jette pas la valeur de item
au format requis par la chaîne d'interpolation %02d
, d'où la nécessité de fonte avec int()
.
Est-ce un bug ou ai-je raté quelque chose?
OriginalL'auteur Ivan | 2013-08-05
Vous devez vous connecter pour publier un commentaire.
Il m'a fallu quelques essais pour obtenir ce droit, mais essayez plutôt ceci:
Jinja2 est un peu drôle.
OriginalL'auteur Tybstar