Isilon: Uso de PowerShell con 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 y es fundamental comprender cómo aprovecharlo para usar PAPI a fin de crear, modificar o eliminar recursos. Puede obtener más información sobre JSON en www.json.org , pero el principio clave es que es un lenguaje de programación independiente completo y se basa en dos estructuras:- Una recopilación de pares de nombre/valor
- Una lista ordenada de valores
El resultado de ejemplo de la obtención de un objeto del sistema se vería así:
{
"<object>": {
"<property>": <value>,
...
}
Para saber qué texto JSON debemos publicar para crear un objeto, consulte la documentación automática de PAPI enviando la siguiente solicitud:
GET /platform/1/quota/quotas?describe
Este es el código de PowerShell pertinente:
#Get documentación automática de PAPI para cuotas
$resource = "/platform/1/quota/quotas?describe"
$uri = $baseurl + $resource
$ISIObject = Invoke-Rest Ctrl -Uri $uri -Headers $headers -Method Get
$ISIObject
En la salida de ejemplo que aparece a continuación se describe lo que necesita para 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 comando isi correspondiente.
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", "aplicado": true, "thresholds": {"hard":100000000},"thresholds_include_overhead": false}
" @
Una vez completada la cadena JSON, todo lo que queda es crear los parámetros Invoke-Rest Rack y enviar. En el siguiente código de ejemplo, la cadena JSON es el cuerpo de la POST y el tipo de contenido es application/json:
$uri = $baseurl + $resource
$ISIObject = Invoke-Rest Pool -Uri $uri -Headers $headers -Body $QuotaObject -ContentType "application/json; charset=utf-8": Método POST
Write-Host " ID de cuota resultante: " $ISIObject.id
Juntando todo
Con un ejemplo, supongamos que su entorno tiene muchos directorios principales para los usuarios en un directorio principal único (por ejemplo: /ifs/home) y desea establecer cuotas de directorio para cada uno de estos directorios principales. Utilice isilon RESTful Access to the Namespace (RAN) API para obtener las rutas a cada directorio principal del usuario. El siguiente código obtendrá los subdirectorios de una ruta especificada y, a continuación, establecerá una cuota de directorio en cada subdirectorio:
# Obtener subdirectorios de la ruta especificada
$resource = '/namespace/' + $path
$uri = $baseurl + $resource
$ISIObject = Invoke-Rest Rack -Uri $uri -Headers $headers -Method Get
#Loop a través de cada directorio y configure la cuota
ForEach($folder en $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", "aplicado": verdadero, "umbrales": {"hard":$quotasize},"thresholds_include_overhead": false}
"@
$headers = @{"Authorization"="Basic $($EncodedPassword)"}
$uri = $baseurl + $resource
$ISIObject 2 = Invoke-Rest Action -Uri $uri -Headers $headers -Body $QuotaObject -ContentType "application/json; charset=utf-8": Método POST
Write-Host " ID de cuota resultante: " $ISIObject2.id
}
Esta es la salida de la ejecución del script adjunto a esta publicación:
