Scott,

Was there ever a response on this or a fix you found?

Thanks,
Jason


On Tuesday, March 3, 2015 at 9:31:26 PM UTC-8, Scott Rankin wrote:
>
> Hey ansible community,
>
> I'm trying to do something which I thought would be fairly 
> straightforward, but I've run into a number of bugs/roadblocks and so I'm 
> coming to the community for some help solving my problem.
>
> What I'm trying to do is this: create a JSON request body and send a URI 
> request to a server.  Here's a slimmed-down version of my playbook:
>
> ---
> - hosts: 127.0.0.1
>   connection: local
>   vars:
>     cpu_count: 3
>     bar: "whooo"
>     bar2: "wheee"
>   tasks:
>     - set_fact:
>         request_body: {
>           "cpus": "{{cpu_count}}",
>           "mem": 1500,
>           "env": {
>               "FOO": "{{bar}}",
>               "FOO2": "{{bar2}}",
>           },
>           "constraints": [["123", "456"]]
>       }
>
>     - name: Kick off app
>       uri: url=http://requestb.in/1laafhn1
>            method=PUT
>            body='{{ request_body | to_json }}'
>            HEADER_Content-Type="application/json"
>            status_code=200,201,204
>
>
> When I run this, I get this string posted to my RequestBin:
>
> {"mem": 1500, "cpus": "3", "env": {"FOO": "whooo", "FOO2": "wheee"}, 
> "constraints": [["123", "456"]]}
>
> The problem with this is that I don't want the "cpus" variable quoted - it's 
> an integer, and my actual target server rejects it. I believe this is a known 
> issue (https://github.com/ansible/ansible/issues/9362).  And no, {{cpu_count 
> | int}} doesn't help.  It still quotes the value in the resulting JSON.  
>
> In an attempt to work around this, I tried doing something like this:
>
>     - set_fact:
>         request_string: '{{ request_body | to_json | regex_replace("cpus.: 
> .([0-9\\.]+).", "cpus\": \\1") }}'
>
>     - name: Kick off app
>       uri: url=http://requestb.in/1laafhn1
>            method=PUT
>            body='{{ request_string }}'
>            HEADER_Content-Type="application/json"
>            status_code=200,201,204
>
> This has the (somewhat strange to me) effect of stripping all quotes from the 
> value PUT on the server:
>
> {mem: 1500, cpus: 3, env: {FOO: whooo, FOO2: wheee}, constraints: [[123, 
> 456]]}
>
> And changing the single quotes in the URI module to double quotes makes my 
> JSON quoted with single quotes.  Also not helpful.  
>
> Lastly, I've tried to use the URI module with YAML-style output: 
>
>     - name: Kick off app
>       uri: 
>         url: http://requestb.in/1laafhn1
>         method: PUT
>         body: '{{ request_string }}'
>         HEADER_Content-Type: "application/json"
>         status_code: 200,201,204
>
> This results in an ansible stack trace, which appears to be this bug: 
> https://github.com/ansible/ansible-modules-core/issues/265
>
> If you've read this far - I would love some alternative suggestions on how to 
> accomplish this using Ansible. Thank you 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/f9e7e68e-8087-45f3-b144-77b4b64d93bc%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to