Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Converting PowerShell to Bash

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)
like image 279
cvandal Avatar asked Apr 01 '26 21:04

cvandal


1 Answers

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
like image 133
M.Hassan Avatar answered Apr 04 '26 09:04

M.Hassan



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!