I'm trying to POST some JSON that I have in a file. 

This is the code I have:

task.yml:

---

- name: grafana | add graphite as data source
  uri:
    url: http://{{ ansible_host }}:3000/api/datasources
    method: POST
    user: "{{ grafana_admin_user }}"
    password: "{{ grafana_admin_password }}"
    body: "{{ lookup('template','add-datasource.json') }}"
    force_basic_auth: yes
    status_code: 200
    body_format: json
  delegate_to: localhost
  become: no

add-datasource.json:

{  "name":"grafite",  "type":"graphite",  "access":"proxy", 
 "url":"http://{{ ansible_host }}/",  "password":"",  "user":"", 
 "database":"",  "basicAuth":true,  "basicAuthUser":"", 
 "basicAuthPassword":"",  "withCredentials":false,  "isDefault":true, 
 "jsonData":null}

When I run that I get this error:

fatal: [mats -> localhost]: FAILED! => {"changed": false, "content": 
"[{\"classification\":\"DeserializationError\",\"message\":\"json: cannot 
unmarshal string into Go value of type 
models.AddDataSourceCommand\"},{\"fieldNames\":[\"Name\"],\"classification\":\"RequiredError\",\"message\":\"Required\"},{\"fieldNames\":[\"Type\"],\"classification\":\"RequiredError\",\"message\":\"Required\"},{\"fieldNames\":[\"Access\"],\"classification\":\"RequiredError\",\"message\":\"Required\"}]",
 
"content_length": "371", "content_type": "application/json; charset=utf-8", 
"date": "Wed, 10 Feb 2016 06:56:29 GMT", "failed": true, "invocation": 
{"module_args": {"backup": null, "body": "{  \"name\":\"grafite\", 
 \"type\":\"graphite\",  \"access\":\"proxy\", 
 \"url\":\"http://10.225.39.185/\";,  \"password\":\"\",  \"user\":\"\", 
 \"database\":\"\",  \"basicAuth\":true,  \"basicAuthUser\":\"\", 
 \"basicAuthPassword\":\"\",  \"withCredentials\":false, 
 \"isDefault\":true,  \"jsonData\":null}\n", "body_format": "json", 
"content": null, "creates": null, "delimiter": null, "dest": null, 
"directory_mode": null, "follow": false, "follow_redirects": "safe", 
"force": null, "force_basic_auth": true, "group": null, "method": "POST", 
"mode": null, "owner": null, "password": "W6v^tfVgv", "regexp": null, 
"remote_src": null, "removes": null, "return_content": false, "selevel": 
null, "serole": null, "setype": null, "seuser": null, "src": null, 
"status_code": ["200"], "timeout": 30, "url": 
"http://10.225.39.185:3000/api/datasources";, "user": "admin", 
"validate_certs": true}, "module_name": "uri"}, "json": [{"classification": 
"DeserializationError", "message": "json: cannot unmarshal string into Go 
value of type models.AddDataSourceCommand"}, {"classification": 
"RequiredError", "fieldNames": ["Name"], "message": "Required"}, 
{"classification": "RequiredError", "fieldNames": ["Type"], "message": 
"Required"}, {"classification": "RequiredError", "fieldNames": ["Access"], 
"message": "Required"}], "msg": "Status code was not [200]", "redirected": 
false, "status": 400}

When I use the json file inline as the body, then it succeeds:

task.yml:

---

- name: grafana | add graphite as data source
  uri:
    url: http://{{ ansible_host }}:3000/api/datasources
    method: POST
    user: "{{ grafana_admin_user }}"
    password: "{{ grafana_admin_password }}"
    body: { "name":"grafite",  "type":"graphite",  "access":"proxy", 
 "url":"http://{{ ansible_host }}/",  "password":"",  "user":"", 
 "database":"",  "basicAuth":true,  "basicAuthUser":"", 
 "basicAuthPassword":"",  "withCredentials":false,  "isDefault":true, 
 "jsonData":null }
    force_basic_auth: yes
    status_code: 200
    body_format: json
  delegate_to: localhost
  become: no

The problem might be related to issue 
https://github.com/ansible/ansible/issues/7005

Though I am using the same format as the uri example 
<http://docs.ansible.com/ansible/uri_module.html> for creating a JIRA issue.

Ansible version 2.0.0.2.

What am I missing?

- David

-- 
You received this message because you are subscribed to the Google Groups 
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/08e6a989-246c-4932-9868-b03577c4ed92%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to