概要
ESXi6.0 の API を使って ESXi の操作や VM の操作をしてみました
素の API はおそらく SOAP でそのまま使うのは辛いので Ruby のライブラリを使って Ruby から操作してみました
また、ESXi の API を操作するにあたって Managed Object Browser を有効にしておくと良いと思います
環境
- VirtualBox 5.1.10
- ESXi 6.0 update 2
- Windows7 Enterprise バージョン 6.1
- Intel Core i5-5300U CPU @ 2.30GHz
- メモリ 10GB
- ストレージ 120GB (SSD)
- Ruby 2.2.4p230
- rbvmomi 1.9.4
ライブラリのインストール
- bundle init
- vim Gemfile
gem "rbvmomi"
- bundle install
サンプルコード
いくつかサンプルコードを紹介します
一番はじめに「接続」を必ず行ってから各種コードを実行してください
接続
require 'rbvmomi'
vim = RbVmomi::VIM.connect(
host: '192.168.56.103',
user: 'your-user',
password: 'your-password',
insecure: 'true'
)
という感じで接続してください
host, user, password は各自の環境に併せて変更してください
HTTPS で接続しに行くので、証明書など設定していない場合は「insecure」を指定するようにしてください
ESXi のバージョン情報の取得
puts vim.serviceInstance.RetrieveServiceContent.about.fullName
データストアの一覧の取得
hosts = vim.serviceInstance.RetrieveServiceContent.rootFolder.childEntity
hosts.each {|h|
ds = h.datastore
ds.each {|d|
puts d.info.name
puts d.info.url
}
}
vSwitch の一覧の取得
hosts = vim.serviceInstance.RetrieveServiceContent.rootFolder.childEntity
hosts.each {|h|
ns = h.network
ns.each {|n|
puts n.name
puts n.vm.count
}
}
VM の一覧の取得
hosts = vim.serviceInstance.RetrieveServiceContent.rootFolder.childEntity
hosts.each {|h|
vmf = h.vmFolder
puts vmf.childEntity.count
vmf.childEntity.each {|vm|
puts vm.name
}
}
VM の起動
hosts = vim.serviceInstance.RetrieveServiceContent.rootFolder.childEntity
hosts.each {|h|
vmf = h.vmFolder
vmf.childEntity.each {|vm|
if vm.guest.guestState != "running"
puts vm.name
vm.PowerOnVM_Task.wait_for_completion
end
}
}
VM のステータスを見て起動中以外であれば PowerOn しています
全台パワーオンします
最後に
Ruby を使って ESXi の操作をしてみました
一部の API を使って操作しただけなので他にもできることはたくさんあります
おそらく Web Client でできることはすべてできると思うので独自の UI やツールを作ることができると思います
認証も ID/PW のみなので、簡単に使えますが権限が強いユーザだと VM の起動や停止の他に削除等の Mofity/Delete 系の操作もできてしまうので、その辺の操作をする際には気をつけてください
SOAP の通信内容が見たい場合は、接続時に debug: 'true'
を追加で指定すれば確認することができます
一点注意点として、今回使用したライブラリがあまりメンテナンスされていないようです
すべての API をコールしたわけではないのでわかりませんが、もしかすると ESXi6.0 だと対応されていない API があるかもしれません
0 件のコメント:
コメントを投稿