Isilon: Korzystanie z programu PowerShell z interfejsem API platformy — tworzenie obiektów i uruchamianie
Summary: W tym artykule wyjaśniono, jak używać programu PowerShell z interfejsem API platformy OneFS do tworzenia obiektów i sieci RAN.
Symptoms
Cause
Resolution
Wprowadzenie do formatu JSON
PAPI używa formatu JSON jako formatu wymiany danych. Bardzo ważne jest, aby zrozumieć, jak wykorzystać go do używania PAPI do tworzenia, modyfikowania lub usuwania zasobów. Dodatkowe informacje na temat formatu JSON są dostępne w www.json.org . Kluczową zasadą jest to, że jest to całkowicie niezależny język programowania i jest zbudowany na dwóch strukturach:
- Kolekcja par nazw i wartości
- Uporządkowana lista wartości
Przykładowe dane wyjściowe z pobierania obiektu interfejsu API mogą wyglądać następująco:
{
"<object>": {
"<property>": <value>,
...
}
Aby dowiedzieć się, jakie dane wyjściowe tekstu JSON są dostępne, musimy wydać polecenie POST, aby utworzyć obiekt; zapoznaj się z dokumentacją własnoręczną PAPI, wysyłając następujące żądanie:
GET /platform/1/quota/quotas?describe
Oto odpowiedni kod PowerShell:
#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
W poniższych przykładowych danych przedstawiono, co należy POST, aby utworzyć nowy przydział. Zwróć uwagę na wymagane właściwości, ponieważ mogą to nie być te same właściwości, które są wymagane dla odpowiedniego isi .
Korzystając z przykładowych właściwości, poniżej przedstawiono przykładowy ciąg JSON, którego można użyć do utworzenia przydziału twardego katalogu:
$QuotaObject = @"
{"type":"directory","include_snapshots": false,"container": true, "path": /ifs/home/user1", "enforced": true, "thresholds": {"hard":10000000},"thresholds_include_overhead": false}
"@
Po zakończeniu ciągu JSON pozostaje tylko zbudować plik Invoke-RestMethod parametrów i prześlij. W poniższym przykładowym kodzie ciąg JSON jest treścią żądania POST, a typ zawartości to 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
Składanie wszystkiego w całość
Korzystając z przykładu, załóżmy, że środowisko ma wiele katalogów macierzystych dla użytkowników w jednym katalogu nadrzędnym (przykład: /ifs/home) i chcesz ustawić przydziały katalogów dla każdego z tych katalogów głównych. Użyj interfejsu API Isilon RESTful Access to the namespace (RAN), aby uzyskać ścieżki do każdego katalogu macierzystego użytkownika. Poniższy kod pobiera podkatalogi o określonej ścieżce, a następnie ustawia przydział katalogu dla każdego podkatalogu:
# 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
}
Oto dane wyjściowe z uruchomienia skryptu dołączonego do tego posta: