Hi Sharwari,

This is the key fix, changing from colon syntax to equal sign syntax:

    - name: Create an instance
      ec2: >
        state=present
        image="{{ ami_base_image_id }}"
        instance_type=t1.micro
        group="{{ instance_security_groups }}"
        key_name="{{ environment_public_ssh_key_name }}"
        vpc_subnet_id="{{ environment_vpc_public_subnet_az1_id }}"
        user_data="{{ lookup('template', '../templates/user_data.json') }}"
        assign_public_ip=yes
        wait=yes
        wait_timeout=600
        region="{{ vpc_region }}"
        aws_access_key="{{ aws_access_key }}"
        aws_secret_key="{{ aws_secret_key }}"
      register: new_instance
      when: environment_instance is not defined

On Thursday, October 15, 2015 at 5:59:41 AM UTC-4, Sharwari Phadnis wrote:
>
> HI, I am facing the same problem. I went through the link which  you've 
> posted but couldn't find the exact solution. Could you please post the 
> solution which you've tried?
>
> On Saturday, October 3, 2015 at 1:15:51 AM UTC+5:30, 
> [email protected] wrote:
>>
>> 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/13581e28-9d98-464e-9abd-24f74612f4d9%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to