はじめに

vcsim はシングルバイナリのvCenterシミュレーターで、vCenterを操作するシステム、ツールのテストをローカル環境でも手軽に行えます。 vCenterを操作できるCLI govc の練習にももってこいです。

シミュレーターなので当然実際のvSphereが動いているわけではないのですが、高い再現度で動作する機能も多くあります。

今回はその中のディスク作成について紹介します。

バージョン

$ vcsim version
Build Version: 0.27.4
Build Commit: 285e80cd
Build Date: 2022-02-11T04:56:04Z

$ govc version
govc 0.27.4

まずはvcsim起動

デフォルトでは以下のURLで起動します。

$ vcsim
export GOVC_URL=https://user:pass@127.0.0.1:8989/sdk GOVC_SIM_PID=191563
  • GOVC_URL=https://user:pass@127.0.0.1:8989/sdk
  • GOVC_INSECURE=true

を環境変数に設定すれば、govcからvcsimにリクエストできます。

$ govc about
FullName:     VMware vCenter Server 6.5.0 build-5973321 (govmomi simulator)
Name:         VMware vCenter Server
Vendor:       VMware, Inc.
Version:      6.5.0
Build:        5973321
OS type:      linux-amd64
API type:     VirtualCenter
API version:  6.5
Product ID:   vpx
UUID:         dbed6e0c-bd88-4ef6-b594-21283e1c677f

データストアとディスクを確認

vcsimでははじめからホストやvm等が作成されており(個数はオプションで指定可能)、vmにもdiskが1つささった状態になっています。

$ govc find .
/
/DC0
/DC0/vm
/DC0/vm/DC0_H0_VM0
/DC0/vm/DC0_H0_VM1
/DC0/vm/DC0_C0_RP0_VM0
/DC0/vm/DC0_C0_RP0_VM1
/DC0/host
/DC0/host/DC0_H0
/DC0/host/DC0_H0/DC0_H0
/DC0/host/DC0_H0/Resources
/DC0/host/DC0_C0
/DC0/host/DC0_C0/DC0_C0_H0
/DC0/host/DC0_C0/DC0_C0_H1
/DC0/host/DC0_C0/DC0_C0_H2
/DC0/host/DC0_C0/Resources
/DC0/datastore
/DC0/datastore/LocalDS_0
/DC0/network
/DC0/network/VM Network
/DC0/network/DVS0
/DC0/network/DVS0-DVUplinks-9
/DC0/network/DC0_DVPG0
$ govc device.info -vm DC0_H0_VM0 disk-*
Name:           disk-202-0
  Type:         VirtualDisk
  Label:        disk-202-0
  Summary:      10,485,760 KB
  Key:          255511522
  Controller:   pvscsi-202
  Unit number:  0
  File:         [LocalDS_0] DC0_H0_VM0/disk1.vmdk

ディスクはこちらのデータストア LocalDS_0 に入っています。

$ govc datastore.info
Name:        LocalDS_0
  Path:      /DC0/datastore/LocalDS_0
  Type:      OTHER
  URL:       /tmp/govcsim-DC0-LocalDS_0-312572150
  Capacity:  10240.0 GB
  Free:      10200.0 GB

vm関連のファイル

実は、ディスク等vm関連のファイルは、上記データストアのURLにちゃんと作成されています。

# データストアのURLはディレクトリパスに対応している
$ ls -l /tmp/govcsim-DC0-LocalDS_0-312572150
合計 16
drwx------ 2 syuparn syuparn 4096  2月 23 10:20 DC0_C0_RP0_VM0
drwx------ 2 syuparn syuparn 4096  2月 23 10:20 DC0_C0_RP0_VM1
drwx------ 2 syuparn syuparn 4096  2月 23 10:20 DC0_H0_VM0
drwx------ 2 syuparn syuparn 4096  2月 23 10:20 DC0_H0_VM1

$ ls -l /tmp/govcsim-DC0-LocalDS_0-312572150/DC0_H0_VM0
合計 4
-rw-r--r-- 1 syuparn syuparn   0  2月 23 10:20 DC0_H0_VM0.nvram
-rw-r--r-- 1 syuparn syuparn   0  2月 23 10:20 DC0_H0_VM0.vmx
-rw-r--r-- 1 syuparn syuparn   0  2月 23 10:20 disk1-flat.vmdk
-rw-r--r-- 1 syuparn syuparn   0  2月 23 10:20 disk1.vmdk
-rw-r--r-- 1 syuparn syuparn 118  2月 23 10:20 vmware.log

(中身こそ空ですが)vmxファイルやvmdkファイルが作成されています。ログファイルには、vcsim起動準備時の動作ログも記載されています。

$ cat /tmp/govcsim-DC0-LocalDS_0-312572150/DC0_H0_VM0/vmware.log
vmx 2022/02/23 10:20:30 created
vmx 2022/02/23 10:20:30 running power task: requesting poweredOn, existing poweredOff

逆に、この仕様のために存在しないディレクトリをデータストアパスに指定することはできません (以前ハマりました)。

# ok
$ ls myds
$ govc datastore.create -type local -path ~/myds DC0_H0
# ng
$ govc datastore.create -type local -path ~/notfoundds DC0_H0
govc: ServerFaultCode: stat /home/syuparn/notfoundds: no such file or directory

また、ブロックストレージを用いるVMFSデータストアもファイル格納方式を再現できないため非対応です。

$ govc datastore.create -type vmfs -path ~/myds DC0_H0
govc: ServerFaultCode: HostDatastoreSystem:hostdatastoresystem-15 does not implement: QueryAvailableDisksForVmfs

参考: create vmfs datastore using govc · Issue #1511 · vmware/govmomi

おわりに(次回予告?)

vcsim小ネタはまだいくつかストックがあるので、シリーズ化して記事にしたいと思います。