Isilon: Powershell gebruiken met platform-API - Objecten en RAN maken
Summary: In dit artikel wordt uitgelegd hoe u PowerShell kunt gebruiken met de OneFS Platform API om objecten en RAN te maken.
Symptoms
Cause
Resolution
Inleiding tot JSON
De PAPI gebruikt JSON als het formaat voor gegevensuitwisseling. Het is van cruciaal belang om te begrijpen hoe u het kunt gebruiken om PAPI te gebruiken om bronnen te maken, te wijzigen of te verwijderen. Aanvullende informatie over JSON is beschikbaar op www.json.org . Het belangrijkste principe is dat het een volledig onafhankelijke programmeertaal is en is gebouwd op twee structuren:
- Een verzameling naam- en waardeparen
- Een geordende lijst met waarden
Voorbeelduitvoer van het ophalen van een API-object zou er als volgt uit kunnen zien:
{
"<object>": {
"<property>": <value>,
...
}
Om te weten welke JSON-tekstuitvoer beschikbaar is, moeten we een POST-opdracht geven om een object te maken; kijk naar de PAPI-zelfdocumentatie door het volgende verzoek te sturen:
GET /platform/1/quota/quotas?describe
Hier is de relevante Powershell-code:
#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
In de onderstaande voorbeelduitvoer wordt uiteengezet wat u moet POSTEN om een nieuw quotum te maken. Besteed aandacht aan de vereiste eigenschappen, aangezien dit mogelijk niet dezelfde eigenschappen zijn die nodig zijn voor de overeenkomstige isi Opdracht.
Met behulp van de voorbeeldeigenschappen is het volgende een voorbeeld van een JSON-tekenreeks die kan worden gebruikt om een hard quotum voor directory's te maken:
$QuotaObject = @"
{"type":"directory","include_snapshots": false,"container": true, "path": /ifs/home/user1", "enforced": true, "thresholds": {"hard":10000000},"thresholds_include_overhead": false}
"@
Als de JSON-string is voltooid, hoeft u alleen nog maar de Invoke-RestMethod parameters en indienen. In de onderstaande voorbeeldcode is de JSON-tekenreeks de hoofdtekst van de POST en is het inhoudstype 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
Alles op een rijtje
Laten we er aan de hand van een voorbeeld van uitgaan dat uw omgeving veel home directory's heeft voor gebruikers in één bovenliggende directory (bijvoorbeeld: /ifs/home) en u wilt mapquota instellen voor elk van deze home directory's. Gebruik de Isilon RESTful Access to the namespace (RAN) API om de paden naar de homedirectory van elke gebruiker op te halen. De volgende code haalt de submappen van een opgegeven pad op en stelt vervolgens een mapquota in op elke submap:
# 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
}
Hier is de uitvoer van het uitvoeren van het script dat bij dit bericht is gevoegd: