le fractionnement de la chaîne par des espaces et avant d'entrer à nouveau dans ansible/jinja2
Je suis en train de "nettoyage" des espaces dans une variable en Ansible (ansible-2.1.1.0-1.fc24.noarch) playbook et je pense que je vais d'abord split() et puis join(' ') de nouveau. Pour une raison que l'approche est de me donner l'erreur ci-dessous :-/
---
- hosts: all
remote_user: root
vars:
mytext: |
hello
there how are
you?
tasks:
- debug:
msg: "{{ mytext }}"
- debug:
msg: "{{ mytext.split() }}"
- debug:
msg: "{{ mytext.split().join(' ') }}"
...
Me donne:
TASK [debug] *******************************************************************
ok: [192.168.122.193] => {
"msg": "hello\nthere how are\nyou?\n"
}
TASK [debug] *******************************************************************
ok: [192.168.122.193] => {
"msg": [
"hello",
"there",
"how",
"are",
"you?"
]
}
TASK [debug] *******************************************************************
fatal: [192.168.122.193]: FAILED! => {"failed": true, "msg": "the field 'args' has an invalid value, which appears to include a variable that is undefined. The error was: 'list object' has no attribute 'join'\n\nThe error appears to have been in '.../tests.yaml': line 15, column 7, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n msg: \"{{ mytext.split() }}\"\n - debug:\n ^ here\n"}
Aucune idée sur ce que je fais mal? Il dit le champ 'args' a une valeur non valide, ce qui semble inclure une variable n'est pas définie. L'erreur était: liste d'objet' n'a pas d'attribut "rejoindre", mais selon filtres utiles docs, il devrait fonctionner.
OriginalL'auteur jhutar | 2016-09-30
Vous devez vous connecter pour publier un commentaire.
Vous devez utiliser le tuyau pour appliquer un filtre:
Dans cet exemple
split()
est un Python méthode de l'objet string. C'est donc un peu hackery.Et
join(' ')
est un Jinja2 filtre qui concatène une liste de chaîne.En appelant
mytext.split().join(' ')
vous obtenez l'erreur, car il n'est pasjoin
méthode pour les listes en Python.Il est
join
méthode de chaîne de caractères en Python et vous pouvez appeler' '.join(mytext.split())
, mais il sera un double hack.mytext.split() | join(' ')
deffierent demytext.split().join(' ')
de toute façon? Merci!!!!J'ai mis à jour ma réponse avec des explications.
OriginalL'auteur Konstantin Suvorov