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
こういったエラーが出て実行できません。