首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法通过uri模块在Ansible和post中呈现JSON

无法通过uri模块在Ansible和post中呈现JSON
EN

Stack Overflow用户
提问于 2015-11-26 04:11:51
回答 1查看 1.9K关注 0票数 2

我尝试使用Ansible 1.9.4来发布一个JSON正文,但是什么都不起作用。

以下是我的其中一项任务:

代码语言:javascript
复制
- 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文件中尝试了以下方法,但都不起作用:

代码语言:javascript
复制
{"channel": "chatops","username": "Deploy","text": "TEST Deploy!","icon_emoji": ":ghost:"}

代码语言:javascript
复制
{
  "channel": "chatops",
  "username": "Deploy",
  "text": "TEST Deploy!",
  "icon_emoji": ":ghost:"
}

然而,在剧本中加入以下内容是有效的:

代码语言:javascript
复制
body: '{"channel": "chatops-test","username": "Deploy","text": "TEST Deploy!","icon_emoji": ":ghost:"}'

通过to_json传输lookup也不起作用。并且像下面这样设置var并执行body: "{{ the_body }}"也不起作用:

代码语言:javascript
复制
the_body:
  channel: "chatops-test"
  username: "Deploy"
  text: "TEST!!!"

有什么想法吗?谢谢!

EN

回答 1

Stack Overflow用户

发布于 2015-11-26 05:38:17

我想你可能在这里遇到了一个bug。我只是花了一些时间运行了一些测试,并不断遇到意想不到的问题,也是使用ansible 1.9.4。以下是我目前对您的问题所处的位置的简要介绍:

代码语言:javascript
复制
   - 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字符串:

代码语言:javascript
复制
{"channel": "chatops","username": "Deploy","text": "TEST Deploy!","icon_emoji": ":ghost:"}

其输出显示Ansible正在以一种奇怪的方式截断字符串:

代码语言:javascript
复制
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‘也显示截断值:

代码语言:javascript
复制
$ cat /tmp/foo.out
"{"channel": "chatops","username": "Deploy","text": "TEST

最重要的是,如果从set_fact调用中删除边界引号,则字符串将进一步截断。

我建议或者向Ansible project forum发布一个关于这个问题的问题,或者向Ansible on github提交错误报告。Ansible开发人员定期对这两种情况进行监控,因此他们很可能能够确认发生了什么,如果他们认为这是一个bug,就有希望解决它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33925594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档