Isilon: Verwenden von PowerShell mit Plattform-API – Erstellen von Objekten und RAN
Summary: In diesem Artikel wird erläutert, wie Sie PowerShell mit der OneFS-Plattform-API verwenden, um Objekte und RAN zu erstellen.
Symptoms
Cause
Resolution
Einführung in JSON
Papi verwendet JSON als Datenaustauschformat und es ist wichtig zu verstehen, wie man es nutzt, um PAPI zum Erstellen, Ändern oder Löschen von Ressourcen zu verwenden. Sie können mehr über JSON bei www.json.org erfahren, aber das Wichtigste ist, dass es sich um eine vollständige unabhängige Programmiersprache handelt, die auf zwei Strukturen aufbaut:- Eine Sammlung von Namens-/Wertpaaren
- Eine sortierte Liste von Werten
Beispielausgabe vom Abrufen eines Systemobjekts würde wie folgt aussehen:
{
"<Objekt>": {
"<Eigenschaft>": <Wert>,
...
}
Um zu erfahren, welchen JSON-Text wir für den POST benötigen, um ein Objekt zu erstellen, sehen Sie sich die PAPI-Selbstdokumentation an, indem Sie die folgende Anforderung senden:
GET /platform/1/quota/quotas?describe
Hier ist der relevante PowerShell-Code:
#Get PAPI-Selbstdokumentation für Quotas
$resource = "/platform/1/quota/quotas?describe"
$uri = $baseurl + $resource
$ISIObject = Invoke-RestMethod -Uri $uri -Headers $headers -Method Get
$ISIObject
In der folgenden Beispielausgabe wird beschrieben, was Sie für den POST benötigen, um eine neue Quota zu erstellen. Achten Sie auf die erforderlichen Eigenschaften, da sie möglicherweise nicht dieselben Eigenschaften sind, die für den entsprechenden isi-Befehl erforderlich sind.
Mithilfe der Beispieleigenschaften ist die folgende Beispiel-JSON-Zeichenfolge, die verwendet werden kann, um eine Verzeichnis-Hard-Quota zu erstellen:
$QuotaObject = @"
{"type":"directory","include_snapshots": false,"container": true, "path": /ifs/home/user1", "enforced": true, "thresholds": {"hard":10000000},"thresholds_include_overhead": false}
" @
Wenn die JSON-Zeichenfolge abgeschlossen ist, bleibt nur noch das Erstellen der Invoke-RestMethod-Parameter und das Senden. Im folgenden Beispielcode ist die JSON-Zeichenfolge der Text des POST und der Inhaltstyp application/json:
$uri = $baseurl + $resource
$ISIObject = Invoke-RestMethod -Uri $uri -Headers $headers -Body $QuotaObject -ContentType "application/json; charset=utf-8" -Method POST
Write-Host " Resultierende Quota-ID: " ISIObject.id USD
Alles zusammensetzen
Angenommen, Ihre Umgebung verfügt über viele Stammverzeichnisse für Benutzer in einem einzigen übergeordneten Verzeichnis (Beispiel: /ifs/home) und Sie möchten Verzeichnis-Quotas für jedes dieser Stammverzeichnisse festlegen. Verwenden Sie die ISILON RESTful Access to the Namespace (RAN)-API, um die Pfade zu jedem Benutzerstammverzeichnis abzurufen. Der folgende Code ruft die Unterverzeichnisse eines angegebenen Pfads ab und legt dann eine Verzeichnis-Quota für jedes Unterverzeichnis fest:
# Get subdirectories of path specified
$resource = '/namespace/' + $path
$uri = $baseurl + $resource
$ISIObject = Invoke-RestMethod -Uri $uri -Headers $headers -Method Get
#Loop über jedes Verzeichnis und legen Sie die Quota
ForEach($folder in $ISIObject.children) {
#Create quota
$resource ="/platform/1/quota/quotas"
Write-Host "Setting a $quotasize byte quota on $quotapath"
$QuotaObject = @"
fest.{"type":"directory","include_snapshots": false,"container": true, "path": "$quotapath", "erzwungen": true, "thresholds": {"hard":$quotasize},"thresholds_include_overhead": false}
"@
$headers = @{"Authorization"="Basic $($EncodedPassword)"}
$uri = $baseurl + $resource
$ISIObject 2 = Invoke-RestMethod -Uri $uri -Headers $headers -Body $QuotaObject -ContentType "application/json; charset=utf-8" -Method POST
Write-Host " Resultierende Quota-ID: " $ ISIObject2.id
}
Hier ist die Ausgabe der Ausführung des an diesen Beitrag angehängten Skripts:
