esxcli listing

I thought I’d post up a full listing of the esxcli command from vSphere 5.  It’s as much for my own future reference, but as 5.0 still isn’t GA I thought there are probably other folk who’d like to take a look through all the options.

Although the esxcli command was around before vSphere 5.0, it has been propelled into the spotlight with the news that esxcli will be the new standard that VMware will migrate towards while depreciating the other command line tools we have come to know.  It’s time to get comfortable with it.  As I pull together all the pieces for the vSphere 5 reference card, I’ll be changing the commands over to esxcli.

If you want to learn more about the esxcli command, pop over to William Lam‘s excellent posts on the subject.  In particular his post outlining the major enhancements.

One interesting point that I noticed from the listing, is that it was missing the “license” top-level namespace that William had identified.  I suspect this may be because I had joined the host to a vCenter instance.  Perhaps at this point the host realizes that it’s not authoritative for its licensing anymore and then excludes the namespace as an option.

Anyway, without further ado here is a full listing (created with esxcli esxcli command list):

Namespace                                           Command    
--------------------------------------------------  -----------
esxcli.command                                      list       
fcoe.adapter                                        list       
fcoe.nic                                            disable    
fcoe.nic                                            discover   
fcoe.nic                                            list       
hardware.bootdevice                                 list       
hardware.clock                                      get        
hardware.clock                                      set        
hardware.cpu.cpuid                                  get        
hardware.cpu.global                                 get        
hardware.cpu.global                                 set        
hardware.cpu                                        list       
hardware.memory                                     get        
hardware.pci                                        list       
hardware.platform                                   get        
iscsi.adapter.auth.chap                             get        
iscsi.adapter.auth.chap                             set        
iscsi.adapter.capabilities                          get        
iscsi.adapter.discovery                             rediscover
iscsi.adapter.discovery.sendtarget                  add        
iscsi.adapter.discovery.sendtarget.auth.chap        get        
iscsi.adapter.discovery.sendtarget.auth.chap        set        
iscsi.adapter.discovery.sendtarget                  list       
iscsi.adapter.discovery.sendtarget.param            get        
iscsi.adapter.discovery.sendtarget.param            set        
iscsi.adapter.discovery.sendtarget                  remove     
iscsi.adapter.discovery.statictarget                add        
iscsi.adapter.discovery.statictarget                list       
iscsi.adapter.discovery.statictarget                remove     
iscsi.adapter.discovery.status                      get        
iscsi.adapter.firmware                              get        
iscsi.adapter.firmware                              set        
iscsi.adapter                                       get        
iscsi.adapter                                       list       
iscsi.adapter.param                                 get        
iscsi.adapter.param                                 set        
iscsi.adapter                                       set        
iscsi.adapter.target                                list       
iscsi.adapter.target.portal.auth.chap               get        
iscsi.adapter.target.portal.auth.chap               set        
iscsi.adapter.target.portal                         list       
iscsi.adapter.target.portal.param                   get        
iscsi.adapter.target.portal.param                   set        
iscsi.ibftboot                                      get        
iscsi.ibftboot                                      import     
iscsi.logicalnetworkportal                          list       
iscsi.networkportal                                 add        
iscsi.networkportal.ipconfig                        get        
iscsi.networkportal.ipconfig                        set        
iscsi.networkportal                                 list       
iscsi.networkportal                                 remove     
iscsi.physicalnetworkportal                         list       
iscsi.physicalnetworkportal.param                   get        
iscsi.physicalnetworkportal.param                   set        
iscsi.plugin                                        list       
iscsi.session                                       add        
iscsi.session.connection                            list       
iscsi.session                                       list       
iscsi.session                                       remove     
iscsi.software                                      get        
iscsi.software                                      set        
network.fence                                       list       
network.fence.network.bte                           list       
network.fence.network                               list       
network.fence.network.port                          list       
network.firewall                                    get        
network.firewall                                    load       
network.firewall                                    refresh    
network.firewall.ruleset.allowedip                  add        
network.firewall.ruleset.allowedip                  list       
network.firewall.ruleset.allowedip                  remove     
network.firewall.ruleset                            list       
network.firewall.ruleset.rule                       list       
network.firewall.ruleset                            set        
network.firewall                                    set        
network.firewall                                    unload     
network.ip.connection                               list       
network.ip.dns.search                               add        
network.ip.dns.search                               list       
network.ip.dns.search                               remove     
network.ip.dns.server                               add        
network.ip.dns.server                               list       
network.ip.dns.server                               remove     
network.ip                                          get        
network.ip.interface                                add        
network.ip.interface.ipv4                           get        
network.ip.interface.ipv4                           set        
network.ip.interface.ipv6.address                   add        
network.ip.interface.ipv6.address                   list       
network.ip.interface.ipv6.address                   remove     
network.ip.interface.ipv6                           get        
network.ip.interface.ipv6                           set        
network.ip.interface                                list       
network.ip.interface                                remove     
network.ip.interface                                set        
network.ip.neighbor                                 list       
network.ip                                          set        
network.nic                                         down       
network.nic                                         get        
network.nic                                         list       
network.nic                                         set        
network.nic                                         up         
network.vswitch.dvs.vmware                          list       
network.vswitch.standard                            add        
network.vswitch.standard                            list       
network.vswitch.standard.policy.failover            get        
network.vswitch.standard.policy.failover            set        
network.vswitch.standard.policy.security            get        
network.vswitch.standard.policy.security            set        
network.vswitch.standard.policy.shaping             get        
network.vswitch.standard.policy.shaping             set        
network.vswitch.standard.portgroup                  add        
network.vswitch.standard.portgroup                  list       
network.vswitch.standard.portgroup.policy.failover  get        
network.vswitch.standard.portgroup.policy.failover  set        
network.vswitch.standard.portgroup.policy.security  get        
network.vswitch.standard.portgroup.policy.security  set        
network.vswitch.standard.portgroup.policy.shaping   get        
network.vswitch.standard.portgroup.policy.shaping   set        
network.vswitch.standard.portgroup                  remove     
network.vswitch.standard.portgroup                  set        
network.vswitch.standard                            remove     
network.vswitch.standard                            set        
network.vswitch.standard.uplink                     add        
network.vswitch.standard.uplink                     remove     
software.acceptance                                 get        
software.acceptance                                 set        
software.profile                                    get        
software.profile                                    install    
software.profile                                    update     
software.profile                                    validate   
software.sources.profile                            get        
software.sources.profile                            list       
software.sources.vib                                get        
software.sources.vib                                list       
software.vib                                        get        
software.vib                                        install    
software.vib                                        list       
software.vib                                        remove     
software.vib                                        update     
storage.core.adapter                                list       
storage.core.adapter                                rescan     
storage.core.adapter.stats                          get        
storage.core.claiming                               autoclaim  
storage.core.claiming                               reclaim    
storage.core.claiming                               unclaim    
storage.core.claimrule                              add        
storage.core.claimrule                              convert    
storage.core.claimrule                              list       
storage.core.claimrule                              load       
storage.core.claimrule                              move       
storage.core.claimrule                              remove     
storage.core.claimrule                              run        
storage.core.device.detached                        list       
storage.core.device.detached                        remove     
storage.core.device                                 list       
storage.core.device.partition                       list       
storage.core.device                                 set        
storage.core.device                                 setconfig  
storage.core.device.stats                           get        
storage.core.device.vaai.status                     get        
storage.core.device.world                           list       
storage.core.path                                   list       
storage.core.path                                   set        
storage.core.path.stats                             get        
storage.core.plugin                                 list       
storage.core.plugin.registration                    add        
storage.core.plugin.registration                    list       
storage.core.plugin.registration                    remove     
storage.filesystem                                  automount  
storage.filesystem                                  list       
storage.filesystem                                  mount      
storage.filesystem                                  rescan     
storage.filesystem                                  unmount    
storage.nfs                                         add        
storage.nfs                                         list       
storage.nfs                                         remove     
storage.nmp.device                                  list       
storage.nmp.device                                  set        
storage.nmp.path                                    list       
storage.nmp.psp.fixed.deviceconfig                  get        
storage.nmp.psp.fixed.deviceconfig                  set        
storage.nmp.psp.generic.deviceconfig                get        
storage.nmp.psp.generic.deviceconfig                set        
storage.nmp.psp.generic.pathconfig                  get        
storage.nmp.psp.generic.pathconfig                  set        
storage.nmp.psp                                     list       
storage.nmp.psp.roundrobin.deviceconfig             get        
storage.nmp.psp.roundrobin.deviceconfig             set        
storage.nmp.satp.generic.deviceconfig               get        
storage.nmp.satp.generic.deviceconfig               set        
storage.nmp.satp.generic.pathconfig                 get        
storage.nmp.satp.generic.pathconfig                 set        
storage.nmp.satp                                    list       
storage.nmp.satp.rule                               add        
storage.nmp.satp.rule                               list       
storage.nmp.satp.rule                               remove     
storage.nmp.satp                                    set        
storage.vmfs.extent                                 list       
storage.vmfs.snapshot.extent                        list       
storage.vmfs.snapshot                               list       
storage.vmfs.snapshot                               mount      
storage.vmfs.snapshot                               resignature
storage.vmfs                                        upgrade    
system.boot.device                                  get        
system.coredump.network                             get        
system.coredump.network                             set        
system.coredump.partition                           get        
system.coredump.partition                           list       
system.coredump.partition                           set        
system.hostname                                     get        
system.hostname                                     set        
system.module                                       get        
system.module                                       list       
system.module                                       load       
system.module.parameters                            list       
system.module.parameters                            set        
system.module                                       set        
system.process                                      list       
system.process.stats.load                           get        
system.process.stats.running                        get        
system.secpolicy.domain                             list       
system.secpolicy.domain                             set        
system.settings.advanced                            list       
system.settings.advanced                            set        
system.settings.kernel                              list       
system.settings.kernel                              set        
system.settings.keyboard.layout                     get        
system.settings.keyboard.layout                     list       
system.settings.keyboard.layout                     set        
system.stats.uptime                                 get        
system.syslog.config                                get        
system.syslog.config.logger                         list       
system.syslog.config.logger                         set        
system.syslog.config                                set        
system.syslog                                       mark       
system.syslog                                       reload     
system.time                                         get        
system.time                                         set        
system.uuid                                         get        
system.version                                      get        
system.visorfs                                      get        
system.visorfs.ramdisk                              add        
system.visorfs.ramdisk                              list       
system.visorfs.ramdisk                              remove     
system.visorfs.tardisk                              list       
system.welcomemsg                                   get        
system.welcomemsg                                   set        
vm.process                                          kill       
vm.process                                          list

The design options grow with vCenter 5

vCenter deployments are likely to change for large companies as they upgrade to vSphere 5.  Traditionally vCenter has been installed in one of two designs.  The primary decision was whether to split off the database onto a second server.  Smaller shops simply installed vCenter and MS SQL (or even MS SQL Express for the very small) on the same server.

Medium and large organisations commonly split out the database onto a separate server; their vCenter server is dedicated. As we know, larger companies like to divide out applications and databases onto their own server instances.  This is done for several reasons, not least to help scale up to heavier workloads.  So I think its fair to say, in most medium and large implementations, this is the “classic” vCenter deployment:

Now for very large deployments, some companies create a third separate server for the vCenter Update Manager (VUM).  This was particular important for anyone using the VM guest OS patching feature, as that capability could consume significant resources for a vCenter which managed lots of VMs.  However this guest OS patching was never a particularly popular feature with large enterprises, as they usually already had a working patch solution that they stuck with.  When VMware announced with the release of vSphere 4.1 that it would remove the guest OS patching feature in the next iteration, it really put the nail in the coffin.  So I’d postulate that this 2 server model is the one that the vast majority of vSphere users have at the moment.

So what’s new?

vSphere 5 comes with many more components which you now need to consider (new ones in blue):

  • vCenter itself
  • vCenter database
  • vSphere Update Manager (VUM) – note the vCenter > vSphere name change with v5 for VUM
  • VUM database
  • vSphere Web Client (* see note below)
  • ESXi Dump Collector
  • Syslog Collector
  • AutoDeploy
  • Authentication Proxy

 

With so many separate components, many deployment possibilities exist.  Arguably the largest of deployments can do this:

However, I think the most likely candidate for the Next Generation, is something modelled around a 3 server deployment for the larger deployments.  Companies can choose which additional components they might want and selectively install them on a Components Server. (Smaller companies can obviously consolidate services as they see fit across 1 or 2 servers)

Personally I think very large organisations with the most demanding of vSphere infrastructures are more likely to scale-out to multiple vCenter instances using Linked Mode, instead of further splitting this 3 server model.

The new Linux based vCenter Server Appliance currently has two limitations which will restrict its adoption in these larger deployments:

  • No Microsoft SQL support
  • No Linked Mode

Once these are overcome we’ll see an even more diverse mix of designs.  vSphere architects will be able to slice-and-dice with more efficiency, and scale as required in a more dynamic fashion.  For now I think we’ll see this 3 server design become de rigueur.

Note *

The Web Client has a “service” component that should be installed centrally.

The RC version of the vCenter Server and Host Management PDF states:

VMware recommends that you register a given vCenter Server system
with only one vSphere Web Client instance

Once this service is installed, it has to be registered via a browser (with Flash) on the server that it’s installed on.  It cannot be registered remotely.  I’m not sure how good I feel about having to install Adobe Flash alongside my critical vCenter components just for this registration step.

New Mastering vSphere 5 Book

Great news.  Scott Lowe (@scott_lowe) is getting ready to release a new version of his highly successful Mastering vSphere book.

The previous version – Mastering VMware vSphere 4 – is probably the single most popular vSphere 4 book published, and for good reason.   It was the base material used by both new users and established ESX administrators to get up to speed with vSphere 4 as soon as it was released.  It continues to be the benchmark for other books about vSphere and consistently gets 5 star ratings by buyers on Amazon.

I was lucky enough to have Scott to join me on the VMware vSphere Design book, and was delighted when he asked me to contribute to his latest version of the Mastering book.  Not wishing to overstate my part, I merely helped update some small parts for the soon to be released vSphere 5.  Again like the Design book, I was privileged to work alongside some VMware vExpert Rockstars on this project. This time, helping Scott out, I was joined by Gabrie van Zanten (@gabvirtualworld), Glenn Sizemore (@glnsize) and Technical Editor Duncan Epping (@DuncanYB).  Wow, with a lineup like that, you know this new version is worth every cent.  It’ll fly off the shelves, so go and pre-order your copy now.
    

Please, let's change the vCenter hierarchy views

In vSphere there are 4 different inventory views, along with a search option:

  • Hosts and Clusters
  • VMs and Templates
  • Datastores
  • Networking (BTW, why is this not “Networks”?)

The primary view, the one we’ve all come to know and love, is that of the Hosts and Clusters.  Let’s face it, it’s where we all spend 90% of our time.  However, this has never sat well with me, particularly since they added in the Datastores and Networking views.  I’ll explain why.

Firstly, I think everything should revolve around the VMs.  For most users, whether they are ESXi admins, Network engineers, Storage peeps, or VM users; are all concerned with the VMs (or at least how their part relates to the VMs).  Whatever we do, it should be focused on the VMs.

The Datacenter object is the fundamental building block to organizing a vCenter heirarchy.  It is reflected in all four views, and draws together hosts, networks and datastores into a container to service a group of VMs.  Despite this we focus on the compute cluster.  The compute cluster is obviously very important, but is literally only half the story (just CPU and Memory, the other half being Storage and Networks).

With the release of vSphere 5 this is even more obvious when we look at Storage DRS and Datastore Clusters.  And what is a vDS if it is not a Network Cluster object?  3 sets of objects: compute, datastores and networks each with clusters, organized under the principle datacenter object.  The datacenter is the one common thing which ties them all together.

Personally, I think that “Hosts and Clusters” should be renamed to just “Hosts”.  Otherwise we need to change the other views to “Datastores and Datastore Clusters (Storage Pods)” and “Networking and Distributed Switches.”

So what is the odd man out? VMs (and templates and vApps and Virtual Appliances).  The other 3 are infrastructure pieces. They are there to support the VMs.  So why do we focus on the Hosts and Clusters view?

Secondly, why-oh-why are VMs displayed in the Hosts and Clusters tree view?

The VMs are not shown in this way in the Networking or Datastores views.  If you step back and think about it, they shouldn’t be in the Hosts and Clusters view either.  The Hosts and Clusters view show, erm, hosts and clusters, not VMs.  When you highlight a Host (or any object for that matter) in the tree, the VMs are nicely listed in the VM tab. That’s where they should stay.

The allocation of VMs to Resource Pools should be done in the main panel, not in the tree view.

A biggest issue here is that users think that Resource Pools are a logical organizational object.  They’re not, and if you treat them as such bad things can happen.  I explain this in my book in Chapter 8. Duncan Epping has a great post The Resource Poll Priority-Pie Paradox, where he explains just the sort of unexpected consequence that can happen (TL;DR – don’t worry, fluffy kittens are not harmed, just some bad resource management).

The folders in the VM and Templates view is exactly what most users need here.  From the outset they are looking for a simple, logical hierarchy to organize their VMs into silos.  Now I recognize that this isn’t a panacea – for example, what happens when you have Production, Test and Development folders, but you also what to group by something else like application or guest OS?  Ask anyone who has tried to create the perfect AD structure just how frustrating it can be.

The fact that VMs are shown in the left-hand side of Hosts and Clusters view is the reason we all spend so much time there.  It makes the VMs and Templates view mostly redundant.  A lot of users never go to that view and never create VM folders because they forget it exists.  The Hosts and Clusters view is misappropriated for VM work because it’s easy to do so.

Yes, I know there is an option to hide VMs from the Inventory view.  But it doesn’t persist; as soon as you click away to another object it resets. And it’s not the default.

So I propose two fairly simple changes that I think would solve this confusing situation:

  1. Make VM and Templates the first inventory view.
  2. Remove VMs from the tree inventory in the Hosts and Clusters view.

I realize that although these are programmatically simple changes, it is a big change for the users as it encourages a different way of working/thinking.  But I think these two small changes would go a long way to showing, particularly less experienced users of vSphere, what is really happening.

So what do you think?  Are you willing to drink my kool-aid, do you think I’m nuts, or do I just spend an unhealthy amount of time thinking about vSphere Design?  Let me know…