For the past year I’ve been working quite a bit with VMWare’s vSphere virtualization suite. Managing vSphere through the web UI has been extremely frustrating though. The bugs, constant crashes and sluggishness have really impeded my ability to be productive. Being a command line user who loves to automate I decided to test out the govc command line utility to see if this would improve my experience. After a good deal of use I can affirmatively say that this gem makes a HUGE difference in productivity!
To get going with govc all you need is a Linux machine. The govc binary is opensource and the build team provides binary builds on their release page. Installing it is easy:
$ wget https://github.com/vmware/govmomi/releases/download/v0.16.0/govc_linux_amd64.gz
$ gunzip govc_linux_amd64.gz && mv govc_linux_amd64 /usr/local/bin/govc && chmod 755 /usr/local/bin/govc
If you want to live on the cutting edge you can also build govc from source:
$ mkdir govc
$ export GOPATH=/home/matty/govc
$ cd govc
$ go get -u github.com/vmware/govmomi/govc
$ cp bin/govc /usr/local/bin/govc && chmod 755 /usr/local/bin/govc
Once installed you can verify the binary works by running it with the about command:
$ govc about
Name: VMware vCenter Server
Vendor: VMware, Inc.
Version: 6.5.0
Build: 7119157
OS type: linux-x64
API type: VirtualCenter
API version: 6.5
Product ID: vpx
UUID: 93c8b2a5-3715-4a27-8a3a-4758848ddce0
To list all of the commands govc can be run without an argument:
$ govc
Usage of govc:
about
about.cert
cluster.add
cluster.change
cluster.create
datacenter.create
datacenter.info
datastore.cp
.....
To connect govc to a vCenter instance you will need to export a couple of variables (if you specify a root CA certificate bundle with the GOVC_TLS_CA_CERTS option you can leave out the first export):
$ export GOVC_INSECURE=true
$ export GOVC_URL='https://USER:PASSWORD@vcenter.prefetch.net/sdk'
$ export GOVC_DATACENTER=DC
To see the true utility of govc let me show a couple of examples. Govc takes a command as the first argument followed by one or more options. The following examples show how to list all of your vCenter objects and retrieve information about your data center:
$ govc ls
/DC/vm
/DC/network
/DC/host
/DC/datastore
$ govc datacenter.info
Name: DC
Path: /DC
Hosts: 2
Clusters: 1
Virtual Machines: 2
Networks: 7
Datastores: 6
To view all of your data stores you can use the datastore.info command:
$ govc datastore.info
Name: ds01
Path: /DC/datastore/ds01
Type: VMFS
URL: ds:///vmfs/volumes/586a9fb0-4b44f5b6-942c-001b21b97588/
Capacity: 225.2 GB
Free: 224.3 GB
To find an object you can use the find command (this is super handy):
$ govc find vm -name *kub*
vm/kub1
To get information about an ESXi host you can pass the name of the host to the host.info command:
$ govc host.info esx01.homefetch.net
Name: esx01
Path: /DC/host/ProdCluster/esx01
Manufacturer: MSI
Logical CPUs: 4 CPUs @ 3192MHz
Processor type: Intel(R) Core(TM) i5-6500 CPU @ 3.20GHz
CPU usage: 182 MHz (1.4%)
Memory: 65411MB
Memory usage: 14433 MB (22.1%)
Boot time: 2017-12-19 13:23:03.394348 +0000 UTC
State: connected
To retrieve all of the information about a VM you can use the vm.info command:
$ govc vm.info kub1
Name: kub1
Path: /DC/vm/kub1
UUID: 420fd911-0f20-0898-34ed-2b055519a54e
Guest name: Red Hat Enterprise Linux 7 (64-bit)
Memory: 4096MB
CPU: 1 vCPU(s)
Power state: poweredOn
Boot time: 2017-12-19 13:19:08.926664 +0000 UTC
IP address: 192.168.1.213
Host: esx02
Govc also provides access to the host and VM metrics. You can get a list of metrics for an object with the metric.ls command:
$ govc metric.ls vm/kub1
cpu.usagemhz.average
cpu.run.summation
cpu.overlap.summation
cpu.ready.summation
cpu.demand.average
cpu.readiness.average
cpu.entitlement.latest
To collect a sample you can use the metric.sample command:
$ while :; do govc metric.sample vm/kub1 cpu.usagemhz.average; sleep 1; done
kub1 - cpu.usagemhz.average 1777,17,8,17,11,9 MHz
kub1 0 cpu.usagemhz.average 1774,5,4,4,4,4 MHz
kub1 - cpu.usagemhz.average 1777,17,8,17,11,9 MHz
kub1 0 cpu.usagemhz.average 1774,5,4,4,4,4 MHz
In addition to the commands listed above I’ve found the following just as useful (you can get a full list of commands and their options on the govc github page):
datastore.upload - upload object to a data store
dvs.portgroup.info - get DVS port group info
events - view events
folder.create - create a folder
host.maintenance.enter - put a host into maintenance mode
host.maintenance.exit - take a host out of maintenance mode
logs - view specific logs
snapshot.create - create a snapshot
snapshot.remove - delete a snapshot
tasks - view vCenter tasks
vm.power - power a VM on and off
Huge thanks to the govc team as well as the maintainers of the govmomi library!