How to use Citrix DaaS REST APIs

Ich nutzte sehr viel das Citrix PowerShell SDK um meine Citrix Umgebungen zu automatisieren und Informationen auszulesen.

Was mich dabei immer störte was, dass ich die PowerShell SDK immer auf dem neusten Stand halten musste und ich die Skripte nicht überall nutzen konnte.

Da ich habe ich angefangen mich mit den Citrix DaaS REST APIs auseinanderzusetzen.
About Citrix DaaS REST APIs | Citrix DaaS REST APIs

Die Dokumentation ist sehr gut und es gibt inzwischen auch PowerShell Beispiele. Get started with Citrix Cloud APIs | Citrix Cloud API overview

Die Voraussetzung um die REST APIs zu nutzen ist ein Citrix Cloud Account und ein „API Access Client“.
Wie man diesen generiert ist in der „Citrix Developer Documentation“ beschrieben:
https://developer-docs.citrix.com/en-us/citrix-cloud/citrix-cloud-api-overview/get-started-with-citrix-cloud-apis.html#create-an-api-client

Weiterhin benötigt man die Customer ID aus dem Citrix Cloud Portal.
Einfach anmelden an https://citrix.cloud.com und rechts oben findet man die „CCID“.

Bzw. unter den „Account Settings“.

Ich habe eine PowerShell Funktion, geschrieben mit der man sich einen „BearerToken“ holen kann.

function getBearerToken {
    param (
        [Parameter(Mandatory=$true)]
        [string] $baseURL,
        [Parameter(Mandatory=$true)]
        [string] $clientID,
        [Parameter(Mandatory=$true)]
        [string] $clientSecret
    )

    $tokenUrl = "https://$baseURL/cctrustoauth2/root/tokens/clients"

    $response = Invoke-WebRequest $tokenUrl -Method POST -Body @{
        grant_type = "client_credentials"
        client_id = $clientID
        client_secret = $clientSecret
    }

    # $tokenResponse = Invoke-RestMethod -Uri $tokenUrl -Method Post -Body $tokenBody
    # $accessToken = $tokenResponse.access_token

    $bearerToken = (ConvertFrom-Json $response.Content).access_token
    return $bearerToken
}

Für die weiteren Schritte benötigt man auch seine SiteID. Diese kann man über die folgende Funktion ermitteln.

function GetMe {
    param (
        [Parameter(Mandatory=$true)]
        [string] $baseURL,
        [Parameter(Mandatory=$true)]
        [string] $bearerToken,
        [Parameter(Mandatory=$true)]
        [string] $customerId
    )

    $requestUri = "https://$baseURL/cvad/manage/me"

    $headers = @{
        "Accept" = "application/json";
        "Authorization" = "CWSAuth Bearer=$bearerToken";
        "Citrix-CustomerId" = $customerid;
    }

    $response = Invoke-RestMethod -Uri $requestUri -Method GET -Headers $headers 

    return $response
}

Hier ein Beispiel wir man diese Funktionen nutzt und welche Informationen man noch angeben muss.

# Select your Citrix Cloud Region.
# In this excample EU region is assigned to the variable $baseURL

$baseAPACS = 'api-ap-s.cloud.com' # If your Citrix Cloud account is set to the Asia Pacific South region.
$baseEU = 'api-eu.cloud.com' # If your Citrix Cloud account is set to the European Union region.
$baseUS = 'api-us.cloud.com' # If your Citrix Cloud account is set to the United States region.
$baseJP = 'api.citrixcloud.jp' # If your Citrix Cloud account is set to the Japan region.

$baseURL = $baseEU

$customerId = "XXXXXXXXX"

$secureClientCSV = "PATH TO THE CSV"

$secureClient = Import-Csv $secureClientCSV 
$secretID = $secureClient.ID
$secret = $null

# Check if secureClient file contains german or english headers
if(($secureClient.PSObject.Properties.Name).contains('Secret')){
    $secret = $secureClient.Secret
}elseif(($secureClient.PSObject.Properties.Name).contains('Geheimnis')){
    $secret = $secureclient.Geheimnis
}else{
    Write-Error "Check your 'secureclient.csv file!"

}

$bearerToken = getBearerToken -baseURL $baseURL -clientID $secretID -clientSecret $secret
#$bearerToken

$response = GetMe $baseEU $bearerToken $customerId
$mysiteID = $response.Customers.Sites.Id

Mit dem BearerToken und der SiteID kann man z.B. sich dann z.B. alle Admins in der Citrix Cloud Umgebung, oder die DeliveryGroups ausgeben lassen bzw. auch MaschineCatalogs oder Applications anlegen.

Als Beispiel die Funktion, mit der man sich alle Citrix Cloud Admin Accounts abrufen kann:

function GetAdminAccounts {
    param (
        [Parameter(Mandatory=$true)]
        [string] $baseURL,
        [Parameter(Mandatory=$true)]
        [string] $bearerToken,
        [Parameter(Mandatory=$true)]
        [string] $customerid,
        [Parameter(Mandatory=$true)]
        [string] $siteId
    )

    $requestUri = "https://$baseURL/cvad/manage/Admin/Administrators"

    $headers = @{
        "Accept" = "application/json";
        "Content-Type" = "application/json; charset=utf-8";
        "Authorization" = "CWSAuth Bearer=$bearerToken";
        "Citrix-CustomerId" = $customerid;
        "Citrix-InstanceId" = $siteId;
    }

    $response = Invoke-RestMethod -Uri $requestUri -Method GET -Headers $headers 

    return $response
}

Mehr kommt in der nächsten Zeit.

Stay tuned 🙂