Isilon: Utilizzo di PowerShell con l'API della piattaforma - Creazione di object e RAN
Summary: Questo articolo spiega come utilizzare PowerShell con l'API della piattaforma OneFS per creare object e RAN.
Symptoms
Cause
Resolution
Introduzione a JSON
PAPI utilizza JSON come formato di scambio dei dati ed è fondamentale capire come utilizzarlo per utilizzare PAPI per creare, modificare o eliminare risorse. È possibile ottenere ulteriori informazioni su JSON in www.json.org , ma il principio chiave è che si tratta di un linguaggio di programmazione indipendente completo ed è costruito su due strutture:- Una raccolta di coppie nome/valore
- Elenco ordinato di valori
L'output di esempio derivante dall'ottenimento di un oggetto di sistema sarà simile al seguente:
{
"<object>": {
"<proprietà>": <valore>,
...
}
Per sapere quale testo JSON è necessario eseguire il POST per creare un oggetto, esaminare la documentazione self-service PAPI inviando la seguente richiesta:
GET /platform/1/quota/quotas?describe
Di seguito è riportato il codice PowerShell pertinente:
#Get documentazione self-service PAPI per le quote
$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 ciò che è necessario eseguire il POST per creare una nuova quota. Prestare attenzione alle proprietà richieste poiché potrebbero non essere le stesse proprietà richieste per il comando isi corrispondente.
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, resta solo la creazione dei parametri Invoke-RestMethod e l'invio. Nel codice di esempio riportato di seguito, la stringa JSON è il corpo del POST e il tipo di contenuto è application/json:
$uri = $baseurl + $resource
$ISIObject = Invoke-RestMethod -Uri $uri -Headers $headers -Body $QuotaObject -ContentType "application/json; carset=utf-8" -Method POST
Write-Host " RESULTING Quota ID: " $ ISIObject.id
Mettere insieme tutto
Utilizzando un esempio, supponiamo che l'ambiente disponga di molte home directory per gli utenti in una singola directory padre (ad esempio: /ifs/home) e si desidera impostare quote di directory per ciascuna di queste home directory. Utilizzare l'API RESTful Isilon RESTful all'API namespace (RAN) per ottenere i percorsi per ogni directory home dell'utente. Il codice seguente otterrà le sottodirectory di un percorso specificato e quindi imposterà una quota di directory su ciascuna sottodirectory:
# Ottieni sottodirectory del percorso specificato
$resource = '/namespace/' + $path
$uri = $baseurl + $resource
$ISIObject = Invoke-RestMethod -Uri $uri -Headers $headers -Method Get
#Loop tramite ogni directory e impostare la 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
$ISIObject 2 = Invoke-RestMethod -Uri $uri -Headers $headers -Body $QuotaObject -ContentType "application/json; carset=utf-8" -Method POST
Write-Host " RESULTING Quota ID: " $ ISIObject2.id
}
Ecco l'output dell'esecuzione dello script collegato a questo post:
