3

I need to convert the following PowerShell script to a Bash script. Could someone help me out? I'm really new to Bash and don't know how to manipulate the output from a curl command and then convert it to Json.

$headers = @{"X-Octopus-ApiKey"="<api_key>"}

$machine = Invoke-RestMethod "http://my.url/api/machines/discover?host=<ip_address>&type=ssh" -Headers $headers -Method Get
$machine.Name = "<hostname>"
$machine.Roles += "<role>"
$machine.EnvironmentIds += "<environment>"
$machine.Endpoint.AccountId = "<account_id>"

Invoke-RestMethod "http://my.url/api/machines" -Headers $headers -Method Post -Body ($machine | ConvertTo-Json -Depth 10)
1
  • 2
    SO is not a free translation service. What have you tried so far? What doesn't work as expected? Commented Oct 20, 2016 at 10:32

1 Answer 1

5

Powershell return object response from Invoke-RestMethod but curl return json string format. You have to parse the response of curl to extract the values of Roles and EnvironmentIds using json parser tool like jq.

Be sure that you installed jq

The following script is the conversion of the Powershell script:

    headers='{"X-Octopus-ApiKey"="<api_key>"}'
    #$machine = Invoke-RestMethod "http://my.url/api/machines/discover?host=<ip_address>&type=ssh" -Headers $headers -Method Get

    response=$(curl -s  -X GET -H $headers "http://my.url/api/machines/discover?host=<ip_address>&type=ssh")        
    echo $response
    Name="Myhostname"
    Roles=$(echo $response | jq -r ".Roles")
    echo $Roles
    Roles+="Myrole2"
    EnvironmentIds=$(echo $response | jq -r ".EnvironmentIds")
    echo $EnvironmentIds
    EnvironmentIds+="Myenvironment2"
    echo $EnvironmentIds
    AccountId="Myaccount_id"
    #compose json string to be passed as a body for the next curl call
    machine=$(printf '
    {"Name":"%s",
    "Roles":"%s" ,
    "EnvironmentIds":"%s" ,
    "Endpoint" : {
                   "AccountId" : "%s"      
                 }
    }' "$Name" "$Roles"  "$EnvironmentIds" "$AccountId")
    echo $machine

    #Invoke-RestMethod "http://my.url/api/machines" -Headers $headers -Method Post -Body ($machine | ConvertTo-Json -Depth 10)
    response=$(curl -s  -X POST -H $headers -d $machine  "http://my.url/api/machines")
    echo $response
Sign up to request clarification or add additional context in comments.

Comments

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.