HTML5 Console Access from Windows PC (Done)
前のエントリーで実現しきれなかった、Windows PC からの HTML5 コンソールへのアクセスが実現できましたのでご報告。
原因は、チケットを vCenter の CloneTicket としなければならないところを、仮想マシンの MKS Ticket としていたためです。CloneTicket は、現在のセッションと同じユーザーで vCenter にログインすることができる 短時間のみ有効、かつ、1 回だけ使用可能なチケットです (参考)。チケットの cst-VCT-* を見たときに、「どこかで見た文字列だな」とは思っていたのですが、3 年以上前のお仕事で CloneTicket を使ったときのモノでした。
MKS チケットはコンソールを開くためには必要な手続きなので、vCenter 側の Jetty 内部で使われていると思われます。Jetty から CloneTicket で vCenter にログインし、仮想マシンへの操作権限を確認しているんではないかと。
なお、VMware の Technical Marketing Engineer の William Lam 氏が 1 年前にすでに Blog で実現されていました。
修正した PowerCLI スクリプトは以下になります。
$VCenterThumbprint = "AA:BB:CC:DD:EE:FF:GG:HH:II:JJ:KK:LL:MM:NN:OO:PP:QQ:RR:SS:TT"
$VCenter = "vc-l-01sp.xxx.yyy"
Add-PSSnapin VMware.VimAutomation.Core
Connect-VIServer vc-l-01sp -User xxxx -Password zzzz
$Vm = Get-VM polaris
$SessionManager = Get-View $global:DefaultVIServer.ExtensionData.Content.SessionManager
$CloneTicket = $SessionManager.AcquireCloneTicket()
$VmName = $Vm.Name
$VmId = $Vm.ExtensionData.MoRef.Value
$SessionTicket = $CloneTicket
$URL = "http://"+$VCenter+":7331/console/?vmId="+$VmId+"&vmName="+$VmName+"&host="+$VCenter+"&sessionTicket="+$SessionTicket+"&thumbprint="+$VCenterThumbprint
& 'C:Program Files (x86)Mozilla Firefoxfirefox.exe' $URL
Disconnect-VIServer -Confirm:$false
1-2 行目: vCenter のホスト名と証明書の Thumbprint です。Thumbprint は PowerCLI では取れないようなので、どうしても Script で実現したいときは [Net.WebRequest] などを駆使してみるといいかもしれません
4-5 行目: PowerCLI の Snapin を追加し、vCenter に接続しています。
7 行目: 仮想マシン polaris のオブジェクト ID を取得しています。
9-11 行目: 今回の肝です。URL に渡すチケットは vCenter のログイン セッションの情報をクローンしたチケットです。SessionManager の AcquireCloneTicket() から取得します。
13-20 行目: URL を生成し、ブラウザーを起動します。
22 行目: vCenter への接続を切断します
もう少し気軽に HTML5 コンソールが利用できると良いのですが。