0

Curl command to pass arguments in the ICINGA API:

I have a curl command and passing it on a Bash script, I need to have two variables in the POST method for this URL, How do i pass the parameter to the CURL command

curl -k -s -u 'root:icinga' -H 'Accept: application/json' \
  -X POST 'https://sample.com:5665/v1/actions/acknowledge-problem?type=Service' \
  -d '{ "author": "icingaadmin", "comment": " Working on it.", "notify": true, "filter": "host.name == {\"$1\} && service.name == {\"$2\}"" }''' \
  | python -m json.tool

The $1 and $2 should have hostname and servicenames respectively

Please help

thanks Aravind

1 Answer 1

1

If you use single quotes ('like this') in bash, you get a literal string with no variable expansion. That is, compare:

$ echo '$DISPLAY'
$DISPLAY

With:

$ echo "$DISPLAY"
:0

This is exactly the same situation as in your curl command line, where you have:

'{ "author": "icingaadmin", "comment": " Working on it.", "notify": true, "filter": "host.name == {\"$1\} && service.name == {\"$2\}"" }'''

There's actuall a number of quoting problems there starting with the ''' at the end, and including the "" just before the final }. If you want those variables to expand you will need to move them outside of your single quotes. You can do this:

'"host.name == {"'"$1"'"} && ...'

In this case, the "$1" is outside of the single quotation marks. Alternatively, you can do this:

"\"host.name == {\"$1\"} ** ..."

Here we're just using double quotes on the outside, so variable expansion works normally, but we have to escape every literal " inside the string.

Using the first option, the final argument to -d would look like something like this ("something" because I'm not familiar with icinga):

'{ "author": "icingaadmin", "comment": " Working on it.", "notify": true, "filter": "host.name == {"'"$1"'"} && service.name == {"'"$2"'"}}'

If $1 is foo and $2 is bar, this gives you:

{ "author": "icingaadmin", "comment": " Working on it.", "notify": true, "filter": "host.name == {"foo"} && service.name == {"bar"}}
Sign up to request clarification or add additional context in comments.

2 Comments

I was unable to execute with the same,Looks like the escape sequence is still not working.
In what way did it fail?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.