I solved the problem after a lot of digging. In case it's of use to anyone else: https://github.com/ansible/ansible/issues/7005
On Thursday, October 1, 2015 at 4:02:29 PM UTC-4, [email protected] wrote: > > Hi all, > > Similar to > https://groups.google.com/forum/#!topic/ansible-project/ba5PPAgYGXc but > slightly different. > > I am trying to use variable substitution like so, putting the variable > my_var in the body parameter, which should be a json string: > > vars: > my_var: hello_world > > tasks: > - uri: > url: https://localhost/api/v1/ > method: POST > body: '{ "name": "test", "var": "{{ my_var }}", "location": > "usa" }' > HEADER_Content-Type: "application/json" > status_code: 201 > validate_certs: no > user: admin > password: password > > I get this error (stacktrace with a TypeError: unhashable type): > > TASK: [uri ] > ****************************************************************** > failed: [localhost] => {"failed": true, "parsed": false} > Traceback (most recent call last): > File > "/Users/mzb/.ansible/tmp/ansible-tmp-1443729077.78-98124067847188/uri", > line 2067, in <module> > main() > File > "/Users/mzb/.ansible/tmp/ansible-tmp-1443729077.78-98124067847188/uri", > line 419, in main > resp, content, dest = uri(module, url, dest, user, password, body, > method, dict_headers, redirects, socket_timeout, validate_certs) > File > "/Users/mzb/.ansible/tmp/ansible-tmp-1443729077.78-98124067847188/uri", > line 312, in uri > resp, content = h.request(url, method=method, body=body, > headers=headers) > File "/Library/Python/2.7/site-packages/httplib2/__init__.py", line > 1609, in request > (response, content) = self._request(conn, authority, uri, request_uri, > method, body, headers, redirections, cachekey) > File "/Library/Python/2.7/site-packages/httplib2/__init__.py", line > 1351, in _request > (response, content) = self._conn_request(conn, request_uri, method, > body, headers) > File "/Library/Python/2.7/site-packages/httplib2/__init__.py", line > 1273, in _conn_request > conn.request(method, request_uri, body, headers) > File > "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", > > line 973, in request > self._send_request(method, url, body, headers) > File > "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", > > line 1007, in _send_request > self.endheaders(body) > File > "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", > > line 969, in endheaders > self._send_output(message_body) > File > "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", > > line 833, in _send_output > self.send(message_body) > File > "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", > > line 805, in send > self.sock.sendall(data) > File > "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ssl.py", > > line 229, in sendall > v = self.send(data[count:]) > TypeError: unhashable type > > If I don't use quotes around the variable substition, like this: > > vars: > my_var: hello_world > > tasks: > - uri: > url: https://localhost/api/v1/ > method: POST > body: '{ "name": "test", "var": {{ my_var }}, "location": > "usa" }' > HEADER_Content-Type: "application/json" > status_code: 201 > validate_certs: no > user: admin > password: password > > then, I get this error (No JSON type could be decoded): > > failed: [localhost] => {"allow": "GET, POST, HEAD, OPTIONS", "connection": > "close", "content": "{\"detail\": \"JSON parse error - No JSON object could > be decoded\"}", "content_type": "application/json", "date": "Thu, 01 Oct > 2015 19:50:56 GMT", "failed": true, "json": {"detail": "JSON parse error - > No JSON object could be decoded"}, "redirected": false, "server": > "Apache/2.4.7 (Ubuntu)", "status": 400, "transfer_encoding": "chunked", > "vary": "Accept,Cookie", "x_api_time": "0.001s"} > msg: Status code was not [201] > > Any ideas? Thanks in advance! > -- 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/1cd5f9de-8c18-496b-9670-343dad3e0ccc%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
