Reputation: 794
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)
Upvotes: 3
Views: 12409
Reputation: 11032
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
Upvotes: 5