一つ前の記事に引き続き、Macbook が欲しいために「ConoHa」の API に関する記事を公開します。
以前、旧 ConoHa のオブジェクトストレージの API を用いて PowerShell で操作してみようという記事を公開しました。
そのときのコメントで、Tonghyun Kim さんが
Powershellなら、Invoke-RestMethodはどうでしょう。
とアドバイスしてくださったので、今回はそれを用いて新 ConoHa の API を操作したいと思います。
準備
Invoke-RestMethod を使用するには、PowerShell 3.0 が必要です。
Windows 8.1 では問題ありませんが、Windows 7 でこれまで PowerShell の開発をしたことがない方は気をつけてください。
スクリプトの実行がシステムで無効になっているため、ファイル ○○ を読み込めません。詳細については、「get-help about_signing」と入力してヘルプを参照してください。
上記のメッセージが表示される場合、管理者でPowerShellを起動し以下のコマンドを実行すると解決します。
Set-ExecutionPolicy RemoteSigned
トークンの取得
トークンの取得を Invoke-RestMethod で行うと、次のコードになります。
$apiUser = "APIユーザー名" $apiPassword = "APIパスワード" $tenantId = "テナントID" $identityServiceUrl = "https://identity.tyo1.conoha.io/v2.0" $body = '{"auth":{"passwordCredentials":{"username":"' + $apiUser + '","password":"'+$apiPassword+'"},"tenantId":"'+$tenantId+'"}}' $url = $identityServiceUrl+"/tokens" $result = Invoke-RestMethod $url -Method POST -Body $body $token = $mytokens.access.token
以前の記事で紹介した HttpWebRequest では、9行かけて表していたコードが Invoke-RestMethod により1行で表すことができました。
VNC(noVNC) コンソール URL の取得
前回の記事で紹介した noVNC コンソールの URL を開く処理を PowerShell の Invoke-RestMethod で書き換えてみました。
$apiUser = "APIユーザー名" $apiPassword = "APIパスワード" $tenantId = "テナントID" $identityServiceUrl = "https://identity.tyo1.conoha.io/v2.0" $computeService = "https://compute.tyo1.conoha.io/v2" $uuid = "VPS設定-UUID" # 有効な期間のトークンがあれば $token = "" # トークンの取得 function getToken([string] $tenantId, [string] $apiUser, [string] $apiPassword, [string] $authurl){ $body = '{"auth":{"passwordCredentials":{"username":"' + $apiUser + '","password":"'+$apiPassword+'"},"tenantId":"'+$tenantId+'"}}' $url = $identityServiceUrl+"/tokens" $result = Invoke-RestMethod $url -Method POST -Body $body return $result } # noVNC コンソールの URL 取得 function getVncConsole([string] $tenantId, [string] $uuid, [Hashtable] $tokenHeader, [string] $computeService){ $body = '{"os-getVNCConsole":{"type": "novnc"}}' $url = $computeService + "/" + $tenantId + "/servers/" + $uuid + "/action" $result = Invoke-RestMethod $url -Method POST -Body $body -Headers $tokenHeader return $result.console.url } # 処理 if ($token -eq "") { $mytokens = getToken $tenantId $apiUser $apiPassword $identityServiceUrl $token = $mytokens.access.token } $tokenHeader = @{"X-Auth-Token" = $token} $vncurl = getVncConsole $tenantId $uuid $tokenHeader $computeService # URL 表示 Write-Output $vncurl
PowerShell では &$変数名 とするとプログラムが起動できるようですが、URL では動作しないようです。
おわりに
現在友達の紹介キャンペーンを実施しており、こちらのリンクから ConoHa に登録していただくと、1000円分のクーポンがもらえますので是非登録し、試してみてください。