【问题标题】:ansible uri module fails (lineno\\": 0\\n}' is not of type u'object) (Input payload validation failed)ansible uri 模块失败(lineno\\": 0\\n}' 不是 u'object 类型)(输入有效负载验证失败)
【发布时间】:2019-05-30 12:06:27
【问题描述】:

ansible 2.7,对 curl 的相同调用工作正常>

curl -X POST " -H "accept: application/json" -H "Content-Type: application/json" -d "{ \"hostname\": \"string\", \"name\": \"string\", \"service\": \"string\", \"extra\": {}, \"args\": [ \"string\" ], \"module\": \"string\", \"filename\": \"string\", \"pathname\": \"string\", \"requestid\": \"string\", \"message\": \"string\", \"funcname\": \"string\", \"levelname\": \"INFO\", \"lineno\": 0}"

uri 模块给我以下错误:

[警告]:提供的主机列表为空,只有 localhost 可用。注意 2 隐式 localhost 不匹配 'all' 3 4 5 PLAY [update log via api] ****************************** ****************************** 20:37:30 6 7 任务 [uri] ************* ****************************************************** ****** 20:37:30 8 [弃用警告]:不推荐通过 HEADER_* 提供标头。请使用 9 个标头为请求提供标头。此功能将在 10 版本 2.9 中删除。可以通过在 ansible.cfg 中设置 11 deprecation_warnings=False 来禁用弃用警告。 12 致命:[本地主机]:失败! => {"access_control_allow_origin": "*", "changed": false, "connection": "Upgrade, close", "content": "{\"message\": \"输入有效载荷验证失败\", \"错误\": {\"\": \"u'{\n \"hostname\": \"string\",\n \"name\": \"string\",\n \"service\" : \"string\",\n \"extra\": {},\n \"args\": [\n \"string\"\n ],\n \"module\": \"string\ ",\n \"filename\": \"string\",\n \"pathname\": \"string\",\n \"requestid\": \"string\",\n \"message\ ": \"string\",\n \"funcname\": \"string\",\n \"levelname\": \"INFO\",\n \"lineno\": 0\n}' 是not of type u'object'\"}}\n", "content_length": "469", "content_type": "application/json", "date": "Thu, 30 May 2019 01:37:35 GMT" , "json": {"errors": {"": "u'{\n \"hostname\": \"string\",\n \"name\": \"string\",\n \" service\": \"string\",\n \"extra\": {},\n \"args\": [\n \"string\"\n ],\... 13 14 PLAY RECAP *** ****************************************************** ****************** 20:37:37 15 localhost : ok=0 changed=0 unreachable=0 failed=1

---
- hosts: localhost
  name: update log via api
  gather_facts: false
  vars_files:
   vars.yml
  vars:
  tasks:
  - uri:
      url: "{{ api_log_url }}"
      method: POST
      force_basic_auth: yes
      url_username: "{{ api_log_user }}"
      url_password: "{{ api_log_password }}"
      body_format: json
      return_content: yes
      HEADER_Content-Type: "application/json"
      validate_certs: false
      body: "{{ lookup('file','create_body.json') | to_json }}"

create_body.json:

{
  "hostname": "string",
  "name": "string",
  "service": "string",
  "extra": {},
  "args": [
    "string"
  ],
  "module": "string",
  "filename": "string",
  "pathname": "string",
  "requestid": "string",
  "message": "string",
  "funcname": "string",
  "levelname": "INFO",
  "lineno": 0
}

【问题讨论】:

  • 最重要的是:您为什么不听从它的建议并停止在标题中使用已弃用的语法?其次,作为“停止让我的眼睛流血”,您应该为您的 curl 正文使用单引号,因为整个有效负载是文字:-d '{"hostname": "string", etc etc}'
  • 另外,如果您没有截断您的错误消息,我们也许可以为您提供进一步的帮助,但我们在这里

标签: ansible


【解决方案1】:

"json": {"errors": {"": "u'{\n \"hostname\": \"string\",\n

我很确定您被 json-to-object-to-string 心理错误所困扰;因为你已经有了 JSON 文本,理想的结果不是将它解析成一个对象,然后再将它序列化回一个字符串,以免你冒着这里发生的事情的真正风险:调用 str(body) where @987654323 @是dict

只需从您的body: {{ }} 表达式中删除| to_json,我希望它会比您目前遇到的更好

【讨论】:

    猜你喜欢
    • 2018-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多