Isilon: Používání Powershell s rozhraním API platformy – Vytváření objektů a RAN
Summary: Tento článek vysvětluje, jak používat PowerShell s rozhraním API platformy OneFS k vytváření objektů a sítí RAN.
Symptoms
Cause
Resolution
Úvod do JSON
PAPI používá JSON jako formát pro výměnu dat. Je důležité pochopit, jak jej využít k použití PAPI k vytváření, úpravě nebo odstraňování zdrojů. Další informace o JSON jsou k dispozici na adrese www.json.org . Klíčovým principem je, že se jedná o zcela nezávislý programovací jazyk a je postaven na dvou strukturách:
- Kolekce párů názvů a hodnot
- Uspořádaný seznam hodnot
Příklad výstupu z získání objektu rozhraní API by mohl vypadat takto:
{
"<object>": {
"<property>": <value>,
...
}
Abychom věděli, jaké textové výstupy JSON jsou k dispozici, musíme vydat příkaz POST k vytvoření objektu; nahlédněte do vlastní dokumentace PAPI zasláním následující žádosti:
GET /platform/1/quota/quotas?describe
Tady je příslušný kód PowerShellu:
#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
Následující příklad výstupu popisuje, co je nutné provést testem POST, aby bylo možné vytvořit novou kvótu. Věnujte pozornost požadovaným vlastnostem, protože se nemusí jednat o stejné vlastnosti požadované pro odpovídající isi .
Následuje příklad řetězce JSON, který se dá použít k vytvoření pevné kvóty adresáře:
$QuotaObject = @"
{"type":"directory","include_snapshots": false,"container": true, "path": /ifs/home/user1", "enforced": true, "thresholds": {"hard":10000000},"thresholds_include_overhead": false}
"@
Po dokončení řetězce JSON zbývá jen sestavit Invoke-RestMethod parametry a odeslat. V následujícím ukázkovém kódu je řetězec JSON textem POST a že typ obsahu je 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
Dát to všechno dohromady
Předpokládejme například, že vaše prostředí má mnoho domovských adresářů pro uživatele v jednom nadřazeném adresáři (příklad: /ifs/home) a pro každý z těchto domovských adresářů chcete nastavit kvóty adresářů. Pomocí rozhraní Isilon RESTful Access to the namespace API (RAN) získáte cesty k domovskému adresáři jednotlivých uživatelů. Následující kód získá podadresáře zadané cesty a pak pro každý podadresář nastaví kvótu adresáře:
# 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
}
Zde je výstup ze spuštění skriptu připojeného k tomuto příspěvku: