Isilon: Usando o PowerShell com API de plataforma — criando objetos e RAN
Summary: Este artigo explica como usar o PowerShell com a API da plataforma OneFS para criar objetos e RAN.
Symptoms
Cause
Resolution
Introdução ao JSON
O PAPI usa JSON como o formato de troca de dados e é essencial entender como usá-lo para usar o PAPI para criar, modificar ou excluir recursos. Você pode saber mais sobre o JSON na www.json.org , mas o principal princípio é que ela é uma linguagem de programação independente completa e é baseada em duas estruturas:- Um conjunto de pares de nome/valor
- Uma lista ordenada de valores
Exemplo de resultado de obter um objeto do sistema seria assim:
{
"<objeto>": {
"<propriedade>": <valor>,
...
}
Para saber qual texto JSON precisamos publicar para criar um objeto, consulte a documentação automática da PAPI enviando a seguinte solicitação:
GET /platform/1/quota/quotas?describe
Este é o código relevante do PowerShell:
#Get documentação automática papi para cotas
$resource = "/platform/1/quota/quotas?describe"
$uri = $baseurl + $resource
$ISIObject = Invoke-RestMethod -Uri $uri -Headers $headers -Method Get
$ISIObject
O exemplo de resultado abaixo descreve o que você precisa fazer post para criar uma nova cota. Preste atenção às propriedades necessárias, pois elas podem não ser as mesmas necessárias para o comando isi correspondente.
Usando as propriedades de exemplo, o seguinte é um exemplo de string JSON que pode ser usada para criar uma cota fixa de diretório:
$QuotaObject = @"
{"type":"directory","include_snapshots": false,"container": true, "path": /ifs/home/user1", "imposto": true, "thresholds": {"hard":10000000},"thresholds_include_overhead": false}
" @
Com a string JSON concluída, tudo o que resta é criar os parâmetros Invoke-RestMethod e enviar. No código de exemplo abaixo, a string JSON é o corpo do POST e que o tipo de conteúdo é application/json:
$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
Reunindo tudo isso
Usando um exemplo, vamos supor que seu ambiente tenha muitos diretórios base para usuários em um só diretório principal (exemplo: /ifs/home) e você deseja definir cotas de diretório para cada um desses diretórios base. Use o Isilon RESTful Access to the Namespace (RAN) API para obter os caminhos para cada diretório base do usuário. O seguinte código obterá os subdiretórios de um caminho especificado e, em seguida, definirá uma cota de diretório em cada subdiretório:
# Obter subdiretórios
do caminho especificado$resource = '/namespace/' + $path
$uri = $baseurl + $resource
$ISIObject = Invoke-RestMethod -Uri $uri -Headers $headers -Method Get
#Loop through cada
diretório e defina a cota 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", "imposto": verdadeiro, "limites": {"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 " Resulting Quota ID: " $ISIObject2.id
}
Esta é a saída da execução do script anexado a esta publicação:
