Isilon: Uso de PowerShell con la API de plataforma: creación de objetos y RAN
Summary: En este artículo, se explica cómo usar PowerShell con la API de la plataforma OneFS para crear objetos y RAN.
Symptoms
Cause
Resolution
Introducción a JSON
PAPI utiliza JSON como formato de intercambio de datos. Es fundamental comprender cómo aprovecharlo para usar PAPI para crear, modificar o eliminar recursos. Hay información adicional sobre JSON disponible en www.json.org . El principio clave es que es un lenguaje de programación completamente independiente y se basa en dos estructuras:
- Una colección de pares de nombre y valor
- Una lista ordenada de valores
Un ejemplo de resultado de la obtención de un objeto de API podría verse así:
{
"<object>": {
"<property>": <value>,
...
}
Para saber qué salidas de texto JSON están disponibles, debemos emitir un comando POST para crear un objeto; ver la autodocumentación PAPI enviando la siguiente solicitud:
GET /platform/1/quota/quotas?describe
Este es el código de 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
En el resultado de ejemplo que aparece a continuación, se describe lo que debe POST para crear una nueva cuota. Preste atención a las propiedades requeridas, ya que es posible que no sean las mismas propiedades requeridas para el isi comando.
Con las propiedades de ejemplo, la siguiente es una cadena JSON de ejemplo que se puede usar para crear una cuota máxima de directorio:
$QuotaObject = @"
{"type":"directory","include_snapshots": false,"container": true, "path": /ifs/home/user1", "enforced": true, "thresholds": {"hard":10000000},"thresholds_include_overhead": false}
"@
Con la cadena JSON completada, todo lo que queda es compilar el Invoke-RestMethod parámetros y envíelos. En el código de ejemplo siguiente, la cadena JSON es el cuerpo del POST y el tipo de contenido es 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
Poner todo junto
Con un ejemplo, supongamos que su entorno tiene muchos directorios principales para los usuarios en un solo directorio principal (por ejemplo: /ifs/home) y desea establecer cuotas de directorio para cada uno de estos directorios principales. Utilice la API de acceso RESTful de Isilon al espacio de nombres (RAN) para obtener las rutas al directorio principal de cada usuario. El siguiente código obtiene los subdirectorios de una ruta especificada y, a continuación, establece una cuota de directorio en cada subdirectorio:
# 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
}
Aquí está el resultado de ejecutar el script adjunto a esta publicación: