Force vCenter Server update to reflect .vmx changes

May 2nd, 2009 by jason Leave a reply »

Virtual infrastructure administrators may edit a VM’s .vmx configuration file by hand with vi or nano (my favorite) for a variety of reasons. Efficiency through bulk changes via scripting, troubleshooting a problem, adding unsupported/undocumented .vmx parameters, or a higher comfort level with command line interfaces to name just a few.

Modifying .vmx files by hand is all well and good. Administrators have been doing since since for as far back as I can remember with VMware products. There is an annoying caveat with VMware vCenter Server however. Changes made by hand in the .vmx file may take a while to show up in the Virtual Infrastructure Client. For example, if I’m looking at a VM’s configuration summary in the VIC, and then modify the .vmx file to change the memory configuration from 256MB to 512MB, save and exit, nothing seems to happen in the VIC. I’m looking at the VIC and configured memory of 256MB is staring back at me. It may end up staying this way for quite some time. Removing the VM from inventory and re-adding it to inventory will resolve the issue but that’s drastic, annoying, and it presents the opportunity for more problems. For instance, what if during the import of the VM it lands in the wrong resource pool or VM folder? Suddenly you’re exposed to potential resource contention issues impacting SLAs and incorrect permissions or patch management baselines on the VM.

There’s an easier way that involves a lot less risk using two vimsh commands at the service console. Here are the steps:

  1. Log on to the service console on the host that the VM is registered on.
  2. In the service console, make the configuration change in the .vmx file and save it.
  3. In the service console, run the command vimsh -ne “vmsvc/getallvms” |grep <vmname> to obtain the VmID of the VM. The VmID will be the first number displayed on the left. Excluding the |grep <vmname> portion of the command will display all VMs registered on the ESX host.
    Example:
    vimsh -ne “vmsvc/getallvms” |grep knoppix
    Returns:
    80 knoppix [msa1000_lun3] knoppix/knoppix.vmx otherLinuxGuest vmx-04 Veeam Backup: Time [4/30/2009 5:46:41 AM], Backup host [SKYWALKER], Backup file [V:\VeeamBackups\Galleon Cluster Backup.vbk]
  4. In the service console, run the command vimsh -ne “vmsvc/reload <VmID>” using the VmID obtained in the previous step.
    Example:
    vimsh -ne “vmsvc/reload 80”
  5. After a few seconds, the configuration change will be received by the vCenter Server and will be reflected in the VIC.

vimsh is a very powerful command line tool. To check out more of its goodness, take a look at xtravirt’s vimsh documentation.

Advertisement

No comments

  1. michael says:

    thanks for sharing good info

  2. Hi Jason,

    This is for ESX 3.5 and newer, right?

    I b e n

  3. jason says:

    Yes Iben as it makes use of VIMSH.

  4. Hey Jason,
    Tried this out on an ESX 3.5 U3 host and it was complaining about using the vimsh command with:
    File not found.
    Command not found
    So I dug through the atravirt documentation an instead used the “vmware-vim-cmd” wrapper for vimsh as they suggested and it worked like a charm. I just issued a “vmware-vim-cmd vmsvc/getallvms |grep ”
    Then a “vmware-vim-cmd vmsvc/reload ” and it worked beautifully. Hope that helps, and thanks for the article!!