Isilon: PowerShell gebruiken met Platform API - Objecten maken en RAN
Summary: In dit artikel wordt uitgelegd hoe u PowerShell gebruikt met de OneFS Platform API om objecten en RAN te maken.
Symptoms
Cause
Resolution
Inleiding tot JSON
De PAPI gebruikt JSON als indeling voor data-uitwisseling en het is van cruciaal belang om te begrijpen hoe deze kan worden gebruikt om PAPI te gebruiken om bronnen te maken, te wijzigen of te verwijderen. U kunt meer informatie over JSON vinden op www.json.org , maar het belangrijkste principe is dat het volledige onafhankelijke programmeertaal is en is gebouwd op twee structuren:- Een verzameling naam-/waardeparen
- Een bestelde lijst met waarden
Voorbeeld van uitvoer van het ophalen van een systeemobject ziet er als dit uit:
{
"<object>": {
"<eigenschap>": <waarde>,
...
}
Om te weten welke JSON-tekst we nodig hebben om een object te maken, bekijkt u de PAPI-zelfdocumentatie door de volgende aanvraag te verzenden:
GET /platform/1/quota/quotas?describe
Hier is de relevante PowerShell-code:
#Get PAPI-zelfdocumentatie voor quota
$resource = "/platform/1/quota/quotas?describe"
$uri = $baseurl + $resource
$ISIObject = Invoke-RestMethod -Uri $uri -Headers $headers -Method Get
$ISIObject
In het onderstaande voorbeeld wordt beschreven wat u moet POST om een nieuwe quota te maken. Let op de vereiste eigenschappen, omdat deze mogelijk niet dezelfde eigenschappen zijn die nodig zijn voor de bijbehorende isi-opdracht.
Met behulp van de voorbeeldeigenschappen is het volgende een voorbeeld JSON-tekenreeks die kan worden gebruikt om een harde directoryquota te maken:
$QuotaObject = @"
{"type":"directory", "include_snapshots": false,"container": true, "path": /ifs/home/user1", "enforced": true, "thresholds": {"hard":10000000},"thresholds_include_overhead": false}
" @
Nu de JSON-tekenreeks is voltooid, hoeft u alleen nog de Invoke-RestMethod-parameters te bouwen en te verzenden. In de onderstaande voorbeeldcode is de JSON-tekenreeks de body van de POST en dat het inhoudstype applicatie/json is:
$uri = $baseurl + $resource
$ISIObject = Invoke-RestMethod -Uri $uri -Headers $headers -Body $QuotaObject -ContentType "application/json; charset=utf-8" -Method POST
Write-Host " Resulterend quotum-ID: " $ISIObject.id
Alles in elkaar zetten
Als u een voorbeeld gebruikt, gaan we ervan uit dat uw omgeving veel homedirectory's heeft voor gebruikers onder een enkele bovenliggende directory (bijvoorbeeld: /ifs/home) en u wilt directoryquota instellen voor elk van deze home-directory's. Gebruik de Isilon RESTful Access to the Namespace (RAN) API om de paden naar elke homedirectory van de gebruiker te verkrijgen. De volgende code krijgt de submappen van een opgegeven pad en stelt vervolgens een mapquotum in op elke subdirectory:
# Submappen ophalen van het opgegeven
pad$resource = '/namespace/' + $path
$uri = $baseurl + $resource
$ISIObject = Invoke-RestMethod -Uri $uri -Headers $headers -Method Get
#Loop via elk directory en stel de quota
ForEach ($folder in $ISIObject.children) {
#Create quota
$resource ="/platform/1/quota/quota"
Write-Host "Setting a $quotasize byte quota on $quotapath"
$QuotaObject = @"
{"type":"directory","include_snapshots": false,"container": true, "path": "$quotapath", "afgedwongen": waar, "drempelwaarden": {"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 " Resulterend quotum-ID: " $ISIObject2.id
}
Hier is de uitvoer van het uitvoeren van het script dat aan dit bericht is gekoppeld:
