Isilon: Brug af Powershell med Platform API – oprettelse af objekter og RAN
Summary: Denne artikel beskriver, hvordan du bruger Powershell med OneFS Platform API til at oprette objekter og RAN.
Symptoms
Cause
Resolution
Introduktion til JSON
PAPI bruger JSON som dataudvekslingsformat. Det er vigtigt at forstå, hvordan man udnytter det til at bruge PAPI til at oprette, ændre eller slette ressourcer. Yderligere oplysninger om JSON findes på www.json.org . Hovedprincippet er, at det er et komplet uafhængigt programmeringssprog og er bygget på to strukturer:
- En samling af navne- og værdipar
- En ordnet liste over værdier
Eksempel på output fra hentning af et API-objekt kunne se sådan ud:
{
"<object>": {
"<property>": <value>,
...
}
For at vide, hvilke JSON-tekstoutput der er tilgængelige, skal vi udstede en POST-kommando for at oprette et objekt; se på PAPI-selvdokumentationen ved at sende følgende anmodning:
GET /platform/1/quota/quotas?describe
Her er den relevante PowerShell-kode:
#Get PAPI self documentation for quotas $resource = "/platform/1/quota/quotas?describe" $uri = $baseurl + $resource $ISIObject = Invoke-RestMethod -Uri $uri -Headers $headers -Method Get $ISIObject
Eksempeloutputtet nedenfor beskriver, hvad du skal POST for at oprette en ny kvote. Vær opmærksom på de krævede egenskaber, da de muligvis ikke er de samme egenskaber, der kræves til de tilsvarende isi Kommando.
Ved hjælp af eksempelegenskaberne er følgende et eksempel på en JSON-streng, der kan bruges til at oprette en hård kvote for mappen:
$QuotaObject = @"
{"type":"directory","include_snapshots": false,"container": true, "path": /ifs/home/user1", "enforced": true, "thresholds": {"hard":10000000},"thresholds_include_overhead": false}
"@
Når JSON-strengen er fuldført, er der kun tilbage at opbygge Invoke-RestMethod parametre og indsend. I eksempelkoden nedenfor er JSON-strengen brødteksten i POST, og at indholdstypen er application/json:
$headers = @{"Authorization"="Basic $($EncodedPassword)"}
$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
Sætter det hele sammen
Lad os som eksempel antage, at dit miljø har mange startmapper til brugere under en enkelt overordnet mappe (eksempel: /ifs/home), og du vil angive bibliotekskvoter for hver af disse hjemmemapper. Brug Isilon RESTful Access to the namespace (RAN) API til at hente stierne til hver brugers startmappe. Følgende kode henter undermapperne til en bestemt sti og angiver derefter en mappekvote for hver undermappe:
# Get subdirectories of path specified
$resource = '/namespace/' + $path
$uri = $baseurl + $resource
$ISIObject = Invoke-RestMethod -Uri $uri -Headers $headers -Method Get
#Loop through each directory and set the quota
ForEach($folder in $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
$ISIObject2 = Invoke-RestMethod -Uri $uri -Headers $headers -Body $QuotaObject -ContentType "application/json; charset=utf-8" -Method POST
Write-Host " Resulting Quota ID: " $ISIObject2.id
}
Her er outputtet fra at køre scriptet, der er knyttet til dette indlæg: