PowerShell の Invoke-RestMethod を使って ConoHa の API を触ってみた


一つ前の記事に引き続き、「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円分のクーポンがもらえますので是非登録し、試してみてください。


Comments

comments

コメントを残す

メールアドレスが公開されることはありません。

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)