vHoge

VMwareのアレコレ備忘録。CLIでがんばるネタ多め。

govc で screenshot を取る

備忘録的小ネタ。書いてみたら大きくなりました。

先日某 vSphere のストレージでトラブった際 VM コンソールに Readonly 落ちが出ていないかを確認するのに govc をブン回して screenshot を取得したという苦労話を聞いた。

え、govc 単独で VM コンソールの screenshot を取れるの?ということで試してみる。

Usage

govmomi/USAGE.md at master · vmware/govmomi · GitHub
screenshot で探してみると確かにありますねぇ…

Usage: govc vm.console [OPTIONS] VM

Generate console URL or screen capture for VM.

One of VMRC, VMware Player, VMware Fusion or VMware Workstation must be installed to
open VMRC console URLs.

Examples:
  govc vm.console my-vm
  govc vm.console -capture screen.png my-vm  # screen capture
  govc vm.console -capture - my-vm | display # screen capture to stdout
  open $(govc vm.console my-vm)              # MacOSX VMRC
  open $(govc vm.console -h5 my-vm)          # MacOSX H5
  xdg-open $(govc vm.console my-vm)          # Linux VMRC
  xdg-open $(govc vm.console -h5 my-vm)      # Linux H5

Options:
  -capture=              Capture console screen shot to file
  -h5=false              Generate HTML5 UI console link
  -vm=                   Virtual machine [GOVC_VM]

govc とは

あれ govc の話って前にしなかったっけ?と思ったらあれは VMUG の中でのネタか…
なので、 public には何も出てないのでとりあえず資料から抜粋だけ。
詳細は割愛。ちょっと調べればいっぱい出てくる…はず。

https://github.com/vmware/govmomi/tree/master/govc
・Go 言語 (govmomi) で書かれた OSS の CLI ツール
・Windows / Linux / MacOS / FreeBSD 対応
・PowerCLI 相当の vCenter/ESXi 操作が可能
・vSAN や NSX などの他コンポーネントは未対応
・数MBのバイナリファイル1つのみなので可搬性が高い

取得してみる

試しに vCSA の VM コンソールを取得してみる。
vSphere Client 上でのコンソール表示は ↓ の感じ。
VM例 govc を叩いて screenshot をファイルに出力する(実行は WSL 上から)

# screenshot 取得、特にコンソール上に結果出力などはなし。
$ govc vm.console -capture screen.png Embedded-vCenter-Server-Appliance

# file で見てみる。
$ file screen.png
screen.png: PNG image data, 800 x 600, 8-bit/color RGB, non-interlaced

実際に取得したスクショのファイルは ↓
コンソール おぉぉ、すごい。ちゃんと取れてる。
ちなみに VMRC とかは入っていません。

PowerCLI でもできるのかな?

デフォルトの cmdlet だと入っていないが、自前でスクリプト書けばできるっぽい。
例えば ↓のページに実装例が載っています。 www.vcloudnine.de

MoRef

というか、↑ のページの PowerShell 見ていて知ったのですが。
下記の URL で VM のコンソール表示だけできるんですね…(要 vCenter UserID/Password)

https://【vCSA IP or ドメイン】/screen?id=【VM の moid】

コンソールページ vSphere Client から開くものとは異なっており、本当にコンソール表示だけで、ここでマウスとかキーボードとか操作しても VM 側には渡されていない…
というか、コンソールが画像として表示されています。
画像なのでコンソール出力に変化があっても再描画されない。 MoRef
ほーコンソールの画像生成はそもそも vCenter 側で行っていて、 PowerCLI も govc もこの生成された画像をダウンロードしているだけなのね。



余談

最初は govc の話だけだったはずが、ついでで PowerCLI 調べてみたらかなり話が広がってしまった…