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 ran.
Symptoms
Cause
Resolution
Wprowadzenie do JSON
Papi używa JSON jako formatu wymiany danych i ważne jest, aby zrozumieć, jak wykorzystać go do tworzenia, modyfikowania lub usuwania zasobów za pomocą PAPI. Więcej informacji na temat oprogramowania JSON można znaleźć w witrynie www.json.org , ale kluczową zasadą jest to, że jest on kompletnym niezależnym językiem programistycznym i opiera się na dwóch strukturach:- Zbiór par nazw/wartości
- Zamówiona lista wartości
Przykładowe dane wyjściowe z uzyskania obiektu systemowego wyglądają następująco:
{
"<obiekt>": {
"<właściwość>": <wartość>,
...
}
Aby dowiedzieć się, jaki tekst JSON należy wykonać w celu utworzenia obiektu, należy zapoznać się z dokumentacją PAPI, wysyłając następujące żądanie:
GET /platform/1/quota/quotas?opisz
poniżej odpowiedni kod Programu PowerShell:
#Get samodzielną dokumentację PAPI dla przydziałów
$resource = "/platform/1/quota/quotas?describe"
$uri = $baseurl + $resource
$ISIObject = Invoke-RestMethod -Uri $uri -Headers $headers -Method Get
$ISIObject
Poniższe przykładowe dane wyjściowe określają, co jest potrzebne do testu POST, aby utworzyć nowy limit. Zwróć uwagę na wymagane właściwości, ponieważ mogą one nie być te same właściwości wymagane dla odpowiedniego polecenia isi.
Korzystając z przykładowych właściwości, poniżej przedstawiono przykładowy ciąg JSON, który może być użyty do utworzenia ścisłego limitu 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 pozostanie tylko zbudowanie parametrów Invoke-RestMethod i przesłanie. W poniższym przykładzie ciąg JSON jest treścią testu POST, a typem zawartości jest aplikacja/json:
$uri = $baseurl + $resource
$ISIObject = Invoke-RestMethod -Uri $uri -Headers $headers -Body $QuotaObject -ContentType "application/json; charset=utf-8" -Method POST
Write-Host " Wynikowy identyfikator limitu: " ISIObject.id USD
Łączenie wszystkich elementów
Korzystając z przykładu, załóżmy, że środowisko ma wiele katalogów domowych dla użytkowników w ramach jednego katalogu nadrzędnego (przykład: /ifs/home) i chcesz ustawić limity katalogów dla każdego z tych katalogów domowych. Użyj interfejsu API Isilon RESTful Access to the Namespace (RAN), aby uzyskać ścieżki do każdego katalogu głównego użytkownika. Poniższy kod otrzyma podkatalogi określonej ścieżki, a następnie ustawi limit katalogów w każdym podkatalogu:
# Uzyskaj podkatalogi ścieżki określonej
$resource = "/namespace/" + $path
$uri = $baseurl + $resource
$ISIObject = Invoke-RestMethod -Uri $uri -Headers $headers -Method Get
#Loop through każdy katalog i ustawić limit
ForEach($folder w $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", "egzekwowane": prawda, "progi": {"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 " Wynikowy identyfikator limitu: " ISIObject2.id
USD}
Poniżej przedstawiono dane wyjściowe z uruchomienia skryptu dołączonego do tego posta:
