Isilon: Bruke Powershell med plattform-API – opprette objekter og RAN
Summary: Denne artikkelen forklarer hvordan du bruker Powershell med OneFS Platform API til å opprette objekter og RAN.
Symptoms
Cause
Resolution
Introduksjon til JSON
PAPI bruker JSON som datautvekslingsformat. Det er viktig å forstå hvordan du kan utnytte det til å bruke PAPI til å opprette, endre eller slette ressurser. Ytterligere informasjon om JSON er tilgjengelig på www.json.org . Hovedprinsippet er at det er et komplett uavhengig programmeringsspråk og er bygget på to strukturer:
- En samling av navn- og verdipar
- En sortert liste med verdier
Eksempelutdata fra å hente et API-objekt kan se slik ut:
{
"<object>": {
"<property>": <value>,
...
}
For å vite hvilke JSON-tekstutganger som er tilgjengelige, må vi utstede en POST-kommando for å lage et objekt; se på PAPI egendokumentasjon ved å sende følgende forespørsel:
GET /platform/1/quota/quotas?describe
Her er den relevante Powershell-koden:
#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
Eksempelutdataene nedenfor viser hva du må postere for å opprette en ny kvote. Vær oppmerksom på de nødvendige egenskapene, siden de kanskje ikke er de samme egenskapene som kreves for tilsvarende isi Kommandoen.
Ved hjelp av eksempelegenskapene er følgende et eksempel på en JSON-streng som kan brukes til å opprette en kataloghard kvote:
$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 fullført, er alt som gjenstår å bygge Invoke-RestMethod parametere og sende inn. I eksempelkoden nedenfor er JSON-strengen brødteksten i POST, og at innholdstypen 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
Setter alt sammen
La oss ved hjelp av et eksempel anta at miljøet har mange hjemmeområder for brukere under én overordnet katalog (eksempel: /ifs/home) og du vil angi katalogkvoter for hver av disse hjemmeområdene. Bruk Isilon RESTful Access to the namespace (RAN) API for å hente banene til hver brukers hjemmekatalog. Følgende kode henter underkatalogene for en angitt bane og angir deretter en katalogkvote 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 resultatet fra å kjøre skriptet knyttet til dette innlegget: