Isilon : Utilisation de PowerShell avec l’API de plate-forme : création d’objets et RAN
Summary: Cet article explique comment utiliser PowerShell avec l’API de plate-forme OneFS pour créer des objets et RAN.
Symptoms
Cause
Resolution
Présentation de JSON
Le PAPI utilise JSON comme format d’échange de données. Il est essentiel de comprendre comment en tirer parti pour utiliser PAPI afin de créer, modifier ou supprimer des ressources. Des informations supplémentaires sur JSON sont disponibles sur www.json.org . Le principe clé est qu’il s’agit d’un langage de programmation entièrement indépendant et qu’il repose sur deux structures :
- Ensemble de paires nom-valeur
- Liste ordonnée de valeurs
Voici un exemple de résultat résultant de l’obtention d’un objet API :
{
"<object>": {
"<property>": <value>,
...
}
Pour savoir quelles sorties de texte JSON sont disponibles, nous devons émettre une commande POST pour créer un objet ; consultez l’auto-documentation PAPI en envoyant la demande suivante :
GET /platform/1/quota/quotas?describe
Voici le code Powershell pertinent :
#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’exemple de sortie ci-dessous décrit ce que vous devez POST pour créer un nouveau quota. Faites attention aux propriétés requises, car il peut ne pas s’agir des mêmes propriétés requises pour les propriétés correspondantes. isi .
À l’aide des exemples de propriétés, vous trouverez ci-dessous un exemple de chaîne JSON qui peut être utilisée pour créer un quota strict de répertoire :
$QuotaObject = @"
{"type":"directory","include_snapshots": false,"container": true, "path": /ifs/home/user1", "enforced": true, "thresholds": {"hard":10000000},"thresholds_include_overhead": false}
"@
Une fois la chaîne JSON terminée, il ne reste plus qu’à construire le fichier Invoke-RestMethod paramètres et soumettre. Dans l’exemple de code ci-dessous, la chaîne JSON est le corps du POST et que le type de contenu est 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
Tout mettre ensemble
À l’aide d’un exemple, supposons que votre environnement dispose de nombreux répertoires personnels pour les utilisateurs sous un seul répertoire parent (exemple : /ifs/home) et vous souhaitez définir des quotas de répertoire pour chacun de ces répertoires de base. Utilisez l’API d’accès RESTful Isilon à l’espace de nommage (RAN) pour obtenir les chemins d’accès au répertoire de base de chaque utilisateur. Le code suivant obtient les sous-répertoires d’un chemin spécifié, puis définit un quota de répertoire sur chaque sous-répertoire :
# 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
}
Voici le résultat de l’exécution du script joint à cet article :