git模块无法解释bool参数(假定为Unicode) – 1.9.2

我打开这个作为前一个问题的更一般的案例,并做了更广泛的故障排除之后。 我已经在Ubuntu 14.04上testing了Ansible 1.9.2。

我会尽力解释如何重现这一点。 首先,Ansible / Jinja / YAML代码:

.......................................................... varprefix__git_update: true .......................................................... varprefix__deploy: repo: dir: "repo" extract: - to: "rrrrr" git: url: "{{ varprefix__git_repo }}" update: "{{ varprefix__git_update|default(false)|bool }}" .......................................................... - debug: msg: "{{ varprefix__deploy.repo.extract }}" - name: deploy via git git: repo: "{{ item.git.url }}" dest: "/tmp/path/to/repo" clone: yes update: true #!!!update: "{{ item.git.update }}" #!!!update: "{{ item.git.update |default(true) }}" #!!!update: "{{ item.git.update |default(true) |bool }}" with_items: varprefix__deploy.repo.extract .......................................................... 

注意标有“#!!!”的行 为以后。

第一次执行(硬连线值为“update:”) – 为了可读性添加换行符:

 TASK: [moduleprefix--somemodule | debug ] **************************************** ok: [local-vm] => { "msg": [ { "git": { "update": "True", "url": "ssh://[email protected]/uuuuu/ggggggggggggggggggggg.git", "version": "master" }, "to": "rrrrr" } ] } TASK: [moduleprefix--somemodule | somemodule (git clone)] ********** <local-vm> REMOTE_MODULE git version=master depth=1 repo=ssh:********@bitbucket.org/uuuuu/ggggggggggggggggggggg.git accept_hostkey=True dest=/var/www/site.rrrrr_website/repo/rrrrr recursive=False force=False failed: [local-vm] => (item={'to': 'rrrrr', 'git': {'url': u'ssh://[email protected]/uuuuu/ggggggggggggggggggggg.git', 'version': u'master', 'update': u'True'}}) => {"failed": true, "item": {"git": {"update": "True", "url": "ssh://[email protected]/uuuuu/ggggggggggggggggggggg.git", "version": "master"}, "to": "rrrrr"}} msg: Local modifications exist in repository (force=no). FATAL: all hosts have already failed -- aborting 

不要错过最后的错误。 这意味着git正在按照预期工作(在这种情况下,更新不带强制参数的更改)。 有趣的是variables看起来是正确的(在debugging中),也是在debugging消息的第二部分,但显示为*'版本':u'master','update':u'True'* when reported在“item =”中。 但是,在这种情况下,一切都会好的。

现在,第二次更新:“{{item.git.update}}”

 TASK: [moduleprefix--somemodule | debug ] **************************************** ok: [local-vm] => { "msg": [ { "git": { "update": "True", "url": "ssh://[email protected]/uuuuu/ggggggggggggggggggggg.git", "version": "master" }, "to": "rrrrr" } ] } <local-vm> REMOTE_MODULE git version=master depth=1 repo=ssh:********@bitbucket.org/uuuuu/ggggggggggggggggggggg.git update='<built-in method update of dict object at 0x7f11f96fec58>' accept_hostkey=True dest=/var/www/site.rrrrr_website/repo/rrrrr recursive=False force=False failed: [local-vm] => (item={'to': 'rrrrr', 'git': {'url': u'ssh://[email protected]/uuuuu/ggggggggggggggggggggg.git', 'version': u'master', 'update': u'True'}}) => {"failed": true, "item": {"git": {"update": "True", "url": "ssh://[email protected]/uuuuu/ggggggggggggggggggggg.git", "version": "master"}, "to": "rrrrr"}} msg: Boolean <built-in method update of dict object at 0x7f11f96fec58> not in either boolean list FATAL: all hosts have already failed -- aborting 

在这一点上,布尔值的扩展似乎会导致某种问题。

更新的第三次尝试:“{{item.git.update | default(true)| bool}}”

 TASK: [moduleprefix--somemodule | debug ] **************************************** ok: [local-vm] => { "msg": [ { "git": { "update": "True", "url": "ssh://[email protected]/uuuuu/ggggggggggggggggggggg.git", "version": "master" }, "to": "rrrrr" } ] } TASK: [moduleprefix--somemodule | somemodule (git clone)] ********** <local-vm> REMOTE_MODULE git version=master depth=1 repo=ssh:********@bitbucket.org/uuuuu/ggggggggggggggggggggg.git update=False accept_hostkey=True dest=/var/www/site.rrrrr_website/repo/rrrrr recursive=False force=False ok: [local-vm] => (item={'to': 'rrrrr', 'git': {'url': u'ssh://[email protected]/uuuuu/ggggggggggggggggggggg.git', 'version': u'master', 'update': u'True'}}) => {"after": "1d9b80fd6a5aa4b61d150b10f3923668e61709e1", "before": "1d9b80fd6a5aa4b61d150b10f3923668e61709e1", "changed": false, "item": {"git": {"update": "True", "url": "ssh://[email protected]/uuuuu/ggggggggggggggggggggg.git", "version": "master"}, "to": "rrrrr"}} 

在这里,它(不正确)完成,因为它跳过更新存储库,即使更新设置为True。

这种行为也发生在其他模块。 它“默默地”失败的事实是阴险的,因为它没有给你任何线索。

任何帮助表示赞赏。

谢谢