我尝试使用Ansible 1.9.4来发布一个JSON正文,但是什么都不起作用。
以下是我的其中一项任务:
- name: Post
uri:
url: https://hooks.slack.com/endpoint
method: POST
return_content: no
HEADER_Content-Type: "application/json"
body: "{{ lookup('template', '../templates/my.json.j2', convert_data=False) }}"这总是会导致TypeError: unhashable type错误。我在该JSON文件中尝试了以下方法,但都不起作用:
{"channel": "chatops","username": "Deploy","text": "TEST Deploy!","icon_emoji": ":ghost:"}和
{
"channel": "chatops",
"username": "Deploy",
"text": "TEST Deploy!",
"icon_emoji": ":ghost:"
}然而,在剧本中加入以下内容是有效的:
body: '{"channel": "chatops-test","username": "Deploy","text": "TEST Deploy!","icon_emoji": ":ghost:"}'通过to_json传输lookup也不起作用。并且像下面这样设置var并执行body: "{{ the_body }}"也不起作用:
the_body:
channel: "chatops-test"
username: "Deploy"
text: "TEST!!!"有什么想法吗?谢谢!
发布于 2015-11-26 05:38:17
我想你可能在这里遇到了一个bug。我只是花了一些时间运行了一些测试,并不断遇到意想不到的问题,也是使用ansible 1.9.4。以下是我目前对您的问题所处的位置的简要介绍:
- name: set fact
set_fact: foo="{{ lookup('template', 'oneline.txt', convert_data=False) }}"
- debug: var=foo
- name: echo foo
shell: echo '{{ foo }}' > /tmp/foo.out文件'oneline.txt‘包含您的json字符串:
{"channel": "chatops","username": "Deploy","text": "TEST Deploy!","icon_emoji": ":ghost:"}其输出显示Ansible正在以一种奇怪的方式截断字符串:
PLAY [test] *******************************************************************
GATHERING FACTS ***************************************************************
ok: [localhost]
TASK: [set fact] **************************************************************
ok: [localhost]
TASK: [debug var=foo] *********************************************************
ok: [localhost] => {
"var": {
"foo": "\"{\"channel\": \"chatops\",\"username\": \"Deploy\",\"text\": \"TEST"
}
}
TASK: [echo foo] **************************************************************
changed: [localhost]
PLAY RECAP ********************************************************************
localhost : ok=4 changed=1 unreachable=0 failed=0文件'/tmp/foo.out‘也显示截断值:
$ cat /tmp/foo.out
"{"channel": "chatops","username": "Deploy","text": "TEST最重要的是,如果从set_fact调用中删除边界引号,则字符串将进一步截断。
我建议或者向Ansible project forum发布一个关于这个问题的问题,或者向Ansible on github提交错误报告。Ansible开发人员定期对这两种情况进行监控,因此他们很可能能够确认发生了什么,如果他们认为这是一个bug,就有希望解决它。
https://stackoverflow.com/questions/33925594
复制相似问题