Isilon: Uso di PowerShell con l'API Platform - Creazione di oggetti e RAN
Résumé: Questo articolo spiega come utilizzare PowerShell con l'API della piattaforma OneFS per creare oggetti e RAN.
Symptômes
Cause
Résolution
Introduzione a JSON
Il PAPI utilizza JSON come formato di interscambio dati. È fondamentale capire come sfruttarlo per utilizzare PAPI per creare, modificare o eliminare risorse. Ulteriori informazioni su JSON sono disponibili all'indirizzo www.json.org . Il principio chiave è che si tratta di un linguaggio di programmazione completo e indipendente ed è costruito su due strutture:
- Una raccolta di coppie nome e valore
- Un elenco ordinato di valori
L'output di esempio per ottenere un oggetto API potrebbe essere simile al seguente:
{
"<object>": {
"<property>": <value>,
...
}
Per sapere quali output di testo JSON sono disponibili, è necessario eseguire un comando POST per creare un oggetto; consultare l'autodocumentazione PAPI inviando la seguente richiesta:
GET /platform/1/quota/quotas?describe
Di seguito è riportato il codice PowerShell pertinente:
#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
L'output di esempio riportato di seguito descrive gli elementi di POST necessari per creare una nuova quota. Prestare attenzione alle proprietà richieste poiché potrebbero non essere le stesse proprietà richieste per il corrispondente isi .
Utilizzando le proprietà di esempio, di seguito è riportata una stringa JSON di esempio che può essere utilizzata per creare una quota rigida della directory:
$QuotaObject = @"
{"type":"directory","include_snapshots": false,"container": true, "path": /ifs/home/user1", "enforced": true, "thresholds": {"hard":10000000},"thresholds_include_overhead": false}
"@
Una volta completata la stringa JSON, non resta che creare il file Invoke-RestMethod parametri e inviare. Nel codice di esempio riportato di seguito, la stringa JSON è il corpo del POST e il tipo di contenuto è 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
Mettere tutto insieme
Usando un esempio, supponiamo che l'ambiente disponga di molte home directory per gli utenti in un'unica directory padre (esempio: /ifs/home) e si desidera impostare le quote di directory per ciascuna di queste directory principali. Utilizzare Isilon RESTful Access to the namespace (RAN) API per ottenere i percorsi della home directory di ciascun utente. Il codice seguente ottiene le sottodirectory di un percorso specificato e quindi imposta una quota di directory in ogni sottodirectory:
# 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
}
Ecco l'output dell'esecuzione dello script allegato a questo post: