我试图使用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:"}'
管道lookup
到to_json
也不起作用。将var设置为以下内容并执行body: "{{ the_body }}"
也不起作用:
the_body:
channel: "chatops-test"
username: "Deploy"
text: "TEST!!!"
有什么想法吗?谢谢!
答案 0 :(得分:0)
我想你可能会遇到一个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开发人员会定期监控这两个问题,以便他们可以确认发生了什么,并希望如果他们认为这是一个错误,就可以解决这个问题。