esxcli in vSphere 5 has undergone significant updates compared to version in vSphere 4.1 which only had 6 major namespaces and 43 commands.
Namespace | Description |
---|---|
corestorage | VMware core storage commands |
network | VMware networking commands |
nmp | VMware Native Multipath Plugin (NMP) This is the VMware default implementation of the Pluggable Storage Architecture |
swiscsi | VMware iSCSI commands |
vaai | Vaai Namespace containing vaai code |
vms | Limited Operations on Virtual Machines |
With latest vSphere 5 release, esxcli now includes a total of 10 namespaces and 251 commands! You will notice some of the updated namespaces from vSphere 4.1, such as corestorage which is under the namespace storage and it also contains other sub-namespaces dealing with the storage stack.
Namespace | Description |
---|---|
esxcli | Commands that operate on the esxcli system itself allowing users to get additional information |
fcoe | VMware FCOE commands |
hardware | VMKernel hardware properties and commands for configuring hardware |
iscsi | VMware iSCSI commands |
license | Operations pertaining to the licensing of vmware and third party modules on the ESX host. These operations currently only include updating third party module licenses |
network | Operations that pertain to the maintenance of networking on an ESX host. This includes a wide variety of commands to manipulate virtual networking components (vswitch, portgroup, etc) as well as local host IP, DNS and general hsot networking settings |
software | Manage the ESXi software image and packages |
storage | VMware storage commands |
system | VMKernel system properties and commands for configuring properties of the kernel core system |
vm | A small number of operations that allow a user to Control Virtual Machine operations |
To get a complete list of the available esxcli commands in vSphere 5, you can run the following:
esxcli esxcli command list
The goal of esxcli is to provide a centralize, consistent and easy way of accessing and managing your ESXi host from both locally within ESXi Shell or remotely using vCLI and/or vMA. With the release of 5.0, the majority of the legacy esxcfg-*/vicfg-* commands have been migrated over to esxcli. At some point, hopefully not in the distant future, esxcli will be parity complete and the esxcfg-*/vicfg-* commands will be completely deprecated and removed including the esxupdate/vihostupdate utilities.
There are still several types of operations that require tools in addition to esxcli such as configuring licenses for standalone host, enabling/disabling local and remote ESXi Shell, enabling/disabling Fault Tolerance & vMotion traffic types just to name a few. For more details on some of the common operations that you may need to perform using both esxcli and other utilities, take a look at my ESXi 5 kickstart tip and tricks post.
The new remote version of esxcli is compatible with both ESXi 5 and ESX(i) 4.1 hosts. Due to the nature of the framework, the capabilities are located on the host and when you initially connect, it will automatically down the available namespaces that can be supported. The new namespaces in ESXi 5 will not be available on 4.1 but the old 4.1 namespaces will be. In the latest release, there are still no vSphere APIs exposed for esxcli, they are all still hidden. To access esxcli, you will need to either use local esxcli, remote esxcli using vCLI and/or vMA or PowerCLI's esxcli cmdlets.
The syntax of esxcli is very simple to understand:
To get more details on a namespace, you just need to specify the --help option after the namespace selection. In this diagram, we are accessing "network" namespace and we can see there are 5 additional namespaces we can access.
Let's say we're interested in the "firewall" and would like to know more, we can again specify --help option again.
Now we have a set of commands, let's go ahead and run the "get" command
As you might have guessed, the "get" command will get the network firewall status. The actual commands are pretty intuitive and you will find that most esxcli namespaces will support get, set and list operations. The other nice thing about esxcli is that the output is consistent whether you are running this locally on ESXi Shell or remotely using vCLI and/or vMA, which makes scripting extremely simple.
Note: With remote esxcli, you will need to specify the ESX(i) host and credentials to login to as it is going through the APIs.
You also have the ability to control the type of output that is generated whether that is xml, csv or keyvalue. To do so, you can specify --formatter option and specify one of those options. The xml and keyvalue pair works across all namespaces and csv works on majority of the namespaces.
Let's go ahead and run the same command as above but output it in keyvalue pair
~ # esxcli --formatter=keyvalue network firewall get
Firewall.DefaultAction.string=DROP
Firewall.Enabled.boolean=false
Firewall.Loaded.boolean=true
In addition to type of format output, you can also display specific columns of information using --format-param, this is useful in-conjunction with csv output.
Here is an example of listing the standard vSwitches without any formatting:
~ # esxcli network vswitch standard list
vSwitch0
Name: vSwitch0
Class: etherswitch
Num Ports: 128
Used Ports: 6
Configured Ports: 128
MTU: 1500
CDP Status: listen
Beacon Enabled: false
Beacon Interval: 1
Beacon Threshold: 3
Beacon Required By:
Uplinks: vmnic1, vmnic0
Portgroups: ESXSecretAgentNetwork, VM Network, vmk2, vmk1, Management Network
vSwitch1
Name: vSwitch1
Class: etherswitch
Num Ports: 128
Used Ports: 3
Configured Ports: 128
MTU: 1500
CDP Status: listen
Beacon Enabled: false
Beacon Interval: 1
Beacon Threshold: 3
Beacon Required By:
Uplinks: vmnic2
Portgroups: VMkernel
Here is the same example, but now only displaying Name, Num of Ports, MTU, CDP and Portgroups using the formatter and format-param options:
~ # esxcli --formatter=csv --format-param=fields="Name,Num Ports,MTU,CDP,Portgroups" network vswitch standard list
Name,NumPorts,MTU,Portgroups,
vSwitch0,128,1500,"ESXSecretAgentNetwork,VM Network,vmk2,vmk1,Management Network,",
vSwitch1,128,1500,"VMkernel,",
If you like to learn more about esxcli, you can take a look at the What's New in vSphere 5 Platform whitepaper. I would also highly encourage you to play with the new esxcli and see what the new capabilities are. Also, when the vSphere 5 documentation is released, a must read document is the Command-Line Management in vSphere 5.0 for Service Console Users which goes into detail about the specific esxcli commands to use in replacement of the esxcfg-*/vicfg-* commands.
Note: Hopefully it was okay to borrow some of these esxcli slides from VMware, I made some slight modifications. The diagrams are a great way to explain how esxcli namespaces work.
Kevin Kress says
Excellent article! Thanks for writing up such a concise and informative post about esxcli.
William says
@Kevin,
Thanks! Great job on CLI and hopefully the remainder issues will be solved shortly & APIs of course 😉
Don Williams says
Great article,
Another nice feature is 3rd party vendors can extend ESXCLI for their specific devices.
bobby damercer says
Hi
I downloaded 'VMware-vSphere-CLI-5.0.0-422456.exe', but I can't find this 'license' namespace..
Any idea?
bobby damercer says
Just to be sure, I checked on my vMA appliance, same result
vma5:~ # [bobby.vlab.local]# esxcli esxcli command list | cut -f 1 -d '.' | sort | uniq
esxcli
fcoe
hardware
iscsi
network
software
storage
system
vm
vma5:~ # [bobby.vlab.local]# head /etc/vma-release
vMA 5.0.0 BUILD-472630
William says
@bobby,
It looks like license namespace was removed after the beta. It's not related to ESX(i) licensing but related to OEM licensing.
Adrian Jordan says
Really useful. However I have been unable to successfully run a command to list my storage devices as I can only see the last 2 drives listed in the console. The info for the first 2 disks goes past too quickly to read. can I slow or truncate the output such that I see a portion at a time?