ESXiの無償ライセンスだとwrite系のAPIは使えないけど、評価版ラインセスなら試せるのでまとめてみた。
業務の検証環境のvCenterだとたまに使うので"カンペ"が欲しかったのです。
確認した環境
$ govc version govc 0.22.1
環境変数設定
httpで動作してる場合GOVC_INSECURE
を設定する。
GOVC_URL
にはESXiのアドレスを設定。
アカウントは操作可能な権限を与えられているユーザを指定する。
export GOVC_INSECURE="1" export GOVC_USERNAME="root" export GOVC_PASSWORD="********" export GOVC_URL="192.168.0.240/sdk"
VM作成
vm.createを使う。
基本はこんな感じ。
GUESTOS=centos7_64Guest CPU=2 MEM=2048 NET=global-network ADAPTER=vmxnet3 DATASTORE=datastore1 DISK_CONTROLLER=pvscsi VERSION=6.5 VMNAME=example-vm govc vm.create \ -c $CPU \ -m $MEM \ -g $GUESTOS \ -net $NET \ -net.adapter $ADAPTER \ -ds $DATASTORE \ -disk.controller $DISK_CONTROLLER \ -version $VERSION \ -on=false \ $VMNAME
デフォルトのネットワーク(おそらくVM Network
)を使う場合は-net
は省略できる。(というか指定しても認識してくれなかった)
業務などでvCenter使ってる場合は、上記以外に-dc ${DATA_CENTER}
でデータセンタ、-host ${HOSTNAME}
でホストを指定。ホストの代わりに-pool
でリソースプールも指定可。
また、-folder
で作成するVMのフォルダも指定できる。
-g
で指定するゲストOSのID一覧はこの辺: VirtualMachineGuestOsIdentifier
設定パラメタの追加
例えばこのdisk.enableUUID=1
という値を設定したい場合はvm.change
でできる。
vm.create
には該当オプションはないので、一度VMを作成してから追加すればよい。
govc vm.change \ -e "disk.enableUUID=1" \ -vm $VMNAME
ちなみにこのパラメタはvSphere上でDynamic Provisioningするときに使用する。
ディスク作成
VM作成は、ディスク(ストレージ)作成のオプションがないので、別途作成してアタッチする必要がある。
複数のディスクが必要な場合は、都度作成する。
作成時に、-vm
でアタッチ対象のVMを指定できるので、作成とアタッチは同時に可能。
だいたいこんな感じ
DATASTORE=datastore1 DISK_SIZE=20GB VMNAME=example-vm govc vm.disk.create \ -size $DISK_SIZE \ -thick=false \ -ds $DATASTORE \ -name $VMNAME/$VMNAME.vmdk \ -vm $VMNAME
-name
で作成場所を指定する必要がある。
通常(UIでぽちぽち作成する場合)は、データストア上にVMのディレクトリ名以下にvmdkファイルが作成されるので、それに倣う場合は上記のように${vm名}/${vm名}.vmdk
と指定しておけばOK
上記はシンプロビジョニングでディスクを作成しているが、シックの場合は-thick=true
を指定する。
シックプロビジョニングで更にEager Zeroed指定する場合は、-eager=true
も指定する。
シンプロビジョニング と シックプロビジョニング の違い - VMware - Project Group
NICの追加
VM作成時にはNICは1個しか指定できない。
追加のNICがある場合は、NICの追加をする。
だいたいこんな感じ。
NET2=local-network ADAPTER=vmxnet3 VMNAME=example-vm govc vm.network.add \ -net $NET2 \ -net.adapter $ADAPTER \ -vm $VMNAME
VMの削除
説明不要だとうと思いつつ補足すると、ディスクも全部消える。
VMNAME=example-vm govc vm.destroy \ $VMNAME
ドキュメントにも記載ある通り、ディスクを残す場合は事前にディスクをデタッチした上でvm.destroy
でVMを削除する。
デタッチするにはdevice.remove
を使う。
ディスクをデタッチした上でVMを削除するには以下の通り。
VMNAME=example-vm govc device.remove \ -vm $VMNAME \ -keep disk-* govc vm.destroy \ $VMNAME
あとはわかるな?
Ansibleだと設定をYAMLで持たせたることができて、単純なシェルスクリプトでgovc
を使う場合に比べて繰り返し処理や設定の可読性などが強力なのでお勧め。
※ もちろん(PyVmomiのインストールに制限がないなど)使用可能であればvmware_guestでも問題ない
情報参照
この辺りは無償ライセンスのgovcでもできる。
host情報
$ govc host.info Name: localhost.naru.jp-z.jp Path: /ha-datacenter/host/localhost.naru.jp-z.jp/localhost.naru.jp-z.jp Manufacturer: Intel(R) Client Systems Logical CPUs: 8 CPUs @ 2712MHz Processor type: Intel(R) Core(TM) i7-8559U CPU @ 2.70GHz CPU usage: 652 MHz (3.0%) Memory: 65404MB Memory usage: 26946 MB (41.2%) Boot time: 2019-10-13 13:53:38.197109 +0000 UTC State: connected
-host hostname
で、対象ホストを指定できる
VM一覧
govc ls
でitemの一覧を列挙し、VMに該当するものを更に引数に指定する。
…でいいのかな?
$ govc ls /ha-datacenter/vm /ha-datacenter/network /ha-datacenter/host /ha-datacenter/datastore $ govc ls /ha-datacenter/vm : : /ha-datacenter/vm/okd4-master0.esxi.jp-z.jp /ha-datacenter/vm/okd4-master1.esxi.jp-z.jp /ha-datacenter/vm/okd4-master2.esxi.jp-z.jp /ha-datacenter/vm/okd4-worker0.esxi.jp-z.jp /ha-datacenter/vm/okd4-worker1.esxi.jp-z.jp /ha-datacenter/vm/pxe-sample /ha-datacenter/vm/win10-offline /ha-datacenter/vm/restricted-centos /ha-datacenter/vm/k8s-master01.esxi.jp-z.jp /ha-datacenter/vm/k8s-worker01.esxi.jp-z.jp /ha-datacenter/vm/k8s-worker02.esxi.jp-z.jp /ha-datacenter/vm/k8s-worker03.esxi.jp-z.jp /ha-datacenter/vm/esxi-host
VM情報
$ govc vm.info manager.local.jp-z.jp Name: manager.local.jp-z.jp Path: /ha-datacenter/vm/manager.local.jp-z.jp UUID: 564d13d6-d760-89aa-9174-883b8565a58c Guest name: CentOS 7 (64-bit) Memory: 8192MB CPU: 2 vCPU(s) Power state: poweredOn Boot time: 2020-02-17 10:47:01.574822 +0000 UTC IP address: 192.168.0.19 Host: localhost.naru.jp-z.jp
デバイス情報
VMにセットされている各種デバイス(NICやディスクやビデオカードなどなど)を表示
$ govc device.ls -vm manager.local.jp-z.jp ide-200 VirtualIDEController IDE 0 ide-201 VirtualIDEController IDE 1 ps2-300 VirtualPS2Controller PS2 controller 0 pci-100 VirtualPCIController PCI controller 0 sio-400 VirtualSIOController SIO controller 0 keyboard-600 VirtualKeyboard Keyboard pointing-700 VirtualPointingDevice Pointing device; Device video-500 VirtualMachineVideoCard Video card vmci-12000 VirtualMachineVMCIDevice Device on the virtual machine PCI bus that provides support for the virtual machine communication interface usb-7000 VirtualUSBController Auto connect Disabled pvscsi-1000 ParaVirtualSCSIController VMware paravirtual SCSI ahci-15000 VirtualAHCIController AHCI cdrom-16000 VirtualCdrom ISO [cheddar-share] disk2/archive/iso/CentOS-7-x86_64-Minimal-1804.iso cdrom-16001 VirtualCdrom ISO [cheddar-share] disk2/archive/iso/CentOS-7-x86_64-Minimal-1908.iso disk-1000-0 VirtualDisk 62,914,560 KB ethernet-0 VirtualVmxnet3 VM Network ethernet-1 VirtualVmxnet3 private-network-1 ethernet-2 VirtualVmxnet3 restricted-network-1
詳細を表示するにはdevice.info
$ govc device.info -vm manager.local.jp-z.jp Name: ide-200 Type: VirtualIDEController Label: IDE 0 Summary: IDE 0 Key: 200 Devices: Name: ide-201 : : Name: cdrom-16000 Type: VirtualCdrom Label: CD/DVD drive 1 Summary: ISO [cheddar-share] disk2/archive/iso/CentOS-7-x86_64-Minimal-1804.iso Key: 16000 Controller: ahci-15000 Unit number: 0 Connected: true Start connected: true Guest control: true Status: ok : : Name: disk-1000-0 Type: VirtualDisk Label: Hard disk 1 Summary: 62,914,560 KB Key: 2000 Controller: pvscsi-1000 Unit number: 0 File: [WDS100T2B0A] manager.local.jp-z.jp/manager.local.jp-z.jp-000001.vmdk Parent: [WDS100T2B0A] manager.local.jp-z.jp/manager.local.jp-z.jp.vmdk Name: ethernet-0 Type: VirtualVmxnet3 Label: Network adapter 1 Summary: VM Network Key: 4000 Controller: pci-100 Unit number: 7 Connected: true Start connected: true Guest control: true Status: ok MAC Address: 00:0c:29:65:a5:8c Address type: generated Name: ethernet-1 Type: VirtualVmxnet3 Label: Network adapter 2 : :
似たようなCLI操作はVirtualBoxでもできる