uri_module - json post

Hi guys,

this is the first time I ever use the “uri_module” and I’m facing a problem that I just can’t solve… here it is

  • name: Sending Stash to Sensu - {{ item }}

uri:
url=http://10.0.0.8:4567/stashes
method=POST
body_format=json
body=“{“path”: “silence/{{ item }}”,“content”: {“reason”: “Automatic Scale Down”},“expire”: 28800}”
HEADER_Content-Type=“application/json;charset=utf-8”
status_code=200
with_items:

  • c3_imagens_name
    tags:
  • stash

When I try to execute this piece of code I got the following error:

ERROR: Syntax Error while loading YAML script, ec2_rotate_imagens.yml
Note: The error may actually appear before this position: line 76, column 22

body_format=json
body=“{“path”: “silence/{{ item }}”,“content”: {“reason”: “Automatic Scale Down”},“expire”: 28800}”
^
We could be wrong, but this one looks like it might be an issue with
missing quotes. Always quote template expression brackets when they
start a value. For instance:

with_items:

  • {{ foo }}

Should be written as:

with_items:

  • “{{ foo }}”

I’m trying to POST something like this (using curl):

/usr/bin/curl -XPOST ‘http://10.0.0.8:4567/stashes’ -d ‘{
“path”: “silence/ip-10-0-4-217”,
“content”: {
“reason”: “Automatic Scale Down”
},
“expire”: 28800
}’

Could you please guys give me some help?

Thanks in advance

Escape your double quotes

body=“{"path": "silence/{{ item }}","content": {"reason": "Automatic Scale Down"},"expire": 28800}”

Hi Rob,

thanks for your reply. I’ll try that.

Hi guys,

I solved the issue with the following adjustments:

  • name: Sending Stash to Sensu - {{ item }}
    uri:
    url=http://10.0.0.8:4567/stashes
    method=POST
    body_format=json
    body=‘{“path”:“silence/{{ item }}”,“content”:{“reason”:“Automatic Scale Down”},“expire”:28800}’
    status_code=201
    HEADER_Content-Type=“application/json”
    with_items: c3_imagens_name
    tags:
  • stash

Thanks !

I simply copied the 2.0 uir.py into my ./modules. It supports body_format=json which will convert the body dict into json as well as set the appropriate headers.

Indeed I have done this for several modules that are scheduled for 2.0 or are pending PRs. Ansible is incredibly flexible in this manner. Just need be sure to clean up the hacks when the modules are actually released.

that will work for most modules, but some do depend on features only
in the version they were merged, so this will work most of the time
but not 100%.