Isilon: Använda PowerShell med Platform API – Skapa objekt och RAN
Summary: I den här artikeln beskrivs hur du använder PowerShell med OneFS-plattformens API för att skapa objekt och RAN.
Symptoms
Cause
Resolution
Introduktion till JSON
PAPI använder JSON som datautbytesformat och det är viktigt att förstå hur du använder PAPI för att skapa, ändra eller ta bort resurser. Du kan lära dig mer om JSON på www.json.org men den viktigaste principen är att det är fullständigt oberoende programmeringsspråk och bygger på två strukturer:- En samling namn-/värdepar
- En beställd värdelista
Exempel på utdata om att få ett systemobjekt att se ut så här:
{
"<object>": {
"<property>": <värde>,
...
}
Om du vill veta vilken JSON-text som krävs för att posta för att skapa ett objekt kan du titta på PAPI-självdokumentationen genom att skicka följande förfrågan:
GET /platform/1/quota/quotas?describe
Här är relevant PowerShell-kod:
#Get PAPI-självdokumentation för kvoter
$resource = "/platform/1/quota/quotas?describe"
$uri = $baseurl + $resource
$ISIObject = Invoke-RestMethod -Uri $uri -Headers $headers -Method Get
$ISIObject
I exemplet nedan beskrivs vad du behöver göra vid självtest för att skapa en ny kvot. Var uppmärksam på de egenskaper som krävs eftersom de kanske inte är samma egenskaper som krävs för motsvarande isi-kommando.
Med hjälp av exempelegenskaperna är följande ett exempel på en JSON-sträng som kan användas för att skapa en hård kvot för katalogen:
$QuotaObject = @"{"
type":"directory","include_snapshots": false,"container": true, "path": /ifs/home/user1", "enforced": true, "thresholds": {"hard":10000000},"thresholds_include_overhead": false}
" @
När JSON-strängen är klar är allt som återstår att skapa parametrarna Invoke-RestMethod och skicka. I exempelkoden nedan är JSON-strängen brödtexten i POST och att innehållstypen är application/json:
$uri = $baseurl + $resource
$ISIObject = Invoke-RestMethod -Uri $uri -Headers $headers -Body $QuotaObject -ContentType "application/json; charset=utf-8" -Method POST
Write-Host " Resulting Quota ID: " ISIObject.id USD
Sätta ihop allt
Anta att din miljö har många hemkataloger för användare under en enda överordnad katalog (exempel: /ifs/home) och du vill ange katalogkvoter för var och en av dessa hemkataloger. Använd Isilon RESTful-åtkomst till namnrymds-API:t (RAN) för att hämta sökvägarna till varje användares hemkatalog. Följande kod hämtar underkataloger för en angiven sökväg och ställer sedan in en katalogkvot på varje underkatalog:
# Hämta underkataloger för den angivna
sökvägen$resource = '/namespace/' + $path
$uri = $baseurl + $resource
$ISIObject = Invoke-RestMethod -Uri $uri -Headers $headers -Method Get
#Loop via varje katalog och ställ in kvoten
ForEach ($folder i $ISIObject.children) {
#Create quota
$resource ="/platform/1/quota/quotas"
Write-Host "Setting a $quotasize byte quota on $quotapath"
$QuotaObject = @"
{"type":"directory","include_snapshots": false,"container": true, "path": "$quotapath", "enforced": 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 " Resulting Quota ID: " ISIObject2.id
}
Här är utdata från körning av skriptet som är kopplat till det här självtestet:
