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