Andy Kurth created VCL-929:
------------------------------

             Summary: VMware.pm does not parse hardware version from .vmdk file 
correctly
                 Key: VCL-929
                 URL: https://issues.apache.org/jira/browse/VCL-929
             Project: VCL
          Issue Type: Bug
          Components: vcld (backend)
    Affects Versions: 2.4.2
            Reporter: Andy Kurth
            Assignee: Andy Kurth
             Fix For: 2.5


{{VIM_SSH.pm::get_virtual_disk_hardware_version}} calls the following command 
similar to the following to retrieve the hardware version from a .vmdk file: 
{noformat}
vim-cmd hostsvc/datastorebrowser/searchsubfolders 0 "[datastore-name] 
vmwarelinux-imagename-v9"{noformat}

It then parses the output:
{noformat}
(vim.host.DatastoreBrowser.SearchResults) [
   (vim.host.DatastoreBrowser.SearchResults) {
      dynamicType = <unset>,
      datastore = 'vim.Datastore:55921f72-785b973c-9fe6-6c0b8462bd80',
      folderPath = "[datastore-name] vmwarelinux-imagename-v9",
      file = (vim.host.DatastoreBrowser.FileInfo) [
         (vim.host.DatastoreBrowser.VmDiskInfo) {
            dynamicType = <unset>,
            path = "vmwarelinux-imagename-v9.vmdk",
            fileSize = 9457106944,
            modification = "2016-02-05T16:58:35Z",
            owner = <unset>,
            diskType = "vim.vm.device.VirtualDisk.FlatVer2BackingInfo",
            capacityKb = 31457280,
            hardwareVersion = 11,
            controllerType = "vim.vm.device.VirtualLsiLogicController",
            diskExtents = (string) [
               "[datastore-name] 
vmwarelinux-imagename-v9/vmwarelinux-imagename-v9-flat.vmdk"
            ],
            thin = true,
         }
      ],
   }
]
{noformat}

The important string is *hardwareVersion = 11*.  The code then extracts the 
part after the equals sign:
{code}my ($hardware_version) = $disk_info =~ 
/\shardwareVersion\s*=\s*(.+)/i;{code}

At this point, $hardware_version = '11,'.  The code does not specifically look 
for an integer at this point because the output may contain something such as 
'unset,'.

The code checks for 'unset', then proceeds to extract an integer with the 
following regex:
{code}$hardware_version =~ s/.*(\d+).*/$1/ig;{code}

This is problematic because it is not consistently returning only the integer.  
Sometimes it returns 1 and other times 0.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to