DeltaCloud0.4.1でESXiの仮想マシンを起動・停止してみる

前回の記事でDeltaCloud経由でESXi上に登録されている仮想マシンの一覧は取得できました。

今回は、もっと細かい仮想マシンの個別情報の取得と実際に起動・停止などの操作を実施してみたいと思います。

前回実施した通り、http://xxx.xxx.xxx.xxx:3001/api/instancesにアクセスすると仮想マシンの一覧が取得できます。
ここからさらにhttp://xxx.xxx.xxx.xxx:3001/api/instances/VM03のように個別の仮想マシンの詳細情報の確認を試みます。

すると、エラーが発生します。

NoMethodError - undefined method `map'

該当箇所のファイルを確認。
views/instances/show.html.hamlというhamlファイル内でエラーが発生しているようです。

        default
    %li{ :'data-role' => 'list-divider'} Public addresses
    %li
      %p{ :'data-role' => 'fieldcontain'}=@instance.public_addresses.map.join(',')   ←ここ
    %li{ :'data-role' => 'list-divider'} Private addresses
    %li      %p{ :'data-role' => 'fieldcontain'}=@instance.private_addresses.map.join(',')   ←ここ
    - if @instance.password or @instance.keyname

上記の2箇所を試しにコメントアウトしてみると表示されました。


どうやらPublic addressesとPrivate_addressesという項目が仮想マシンから取得できていないようでエラーになっているようです。

仮想マシンに割り当てられているCPU,メモリ,ディスクの情報やどこのストレージに保存されているかなどの情報がとってこれます。

操作をしてみます。
操作をするには、http://xxx.xxx.xxx.xxx:3001/api/instances/VM03/:action
という形でリクエストを投げると行えます。
VM03を起動する場合は、http://xxx.xxx.xxx.xxx:3001/api/instances/VM03/startです。

ただ、単純にGETリクエストで投げるとエラーになります。

# curl --user ユーザ名:パスワード http://xxx.xxx.xxx.xxx:3001/api/instances/VM03/start
<!DOCTYPE html>
<html>
<head>
  <style type="text/css">
  body { text-align:center;font-family:helvetica,arial;font-size:22px;
    color:#888;margin:20px}
  #c {margin:0 auto;width:500px;text-align:left}
  </style>
</head>
<body>
  <h2>Sinatra doesn't know this ditty.</h2>
  <img src='http://xxx.xxx.xxx.xxx:3001/__sinatra__/404.png'>
  <div id="c">
    Try this:
    <pre>get '/api/instances/VM03/start' do
  "Hello World"
end</pre>
  </div>
</body>
</html>

curlコマンドで実行したい場合はPOSTで投げればOKです。

# curl -X POST --user ユーザ名:パスワード http://xxx.xxx.xxx.xxx:3001/api/instances/VM03/start

停止も同様にPOSTでhttp://xxx.xxx.xxx.xxx:3001/api/instances/VM03/stopとリクエストを投げると実行されます。
ここで注意点があります。
stopを実行するとVMware側での処理は'''「パワーオフ」'''を実行します。
ソフトストップの実行は特に用意されていないようです。

ちなみに、今回試した環境は,VMwareESXi4.1の評価モードの環境です。
無償ライセンスを登録後のESXiの仮想マシンに対して起動・停止を実行しようとするとライセンス的にエラーになります。

RbVmomi::Fault - RestrictedVersion: fault.RestrictedVersion.summary

こういったエラーが出て実行できません。