Bug 1263574 - vpx: Include dcpath output in libvirt XML
vpx: Include dcpath output in libvirt XML
Status: CLOSED ERRATA
Product: Red Hat Enterprise Linux 7
Classification: Red Hat
Component: libvirt (Show other bugs)
7.3
Unspecified Unspecified
high Severity high
: rc
: ---
Assigned To: Michal Privoznik
Virtualization Bugs
: ZStream
Depends On:
Blocks: TRACKER-bugs-affecting-libguestfs 952703 1154205 1236075 1256823 1292096 1292437 1305489
  Show dependency treegraph
 
Reported: 2015-09-16 04:39 EDT by Richard W.M. Jones
Modified: 2016-11-03 14:23 EDT (History)
14 users (show)

See Also:
Fixed In Version: libvirt-1.3.1-1.el7
Doc Type: Enhancement
Doc Text:
The virt-v2v utility now processes the "<vmware:datacenterpath>" tag, newly added to the domain XML file by the libvirt library, and maps the paths to the disk image on a VMware vCenter server. This feature enables accessing disk images on the VMware vCenter server without the need for the "--dcpath" command-line option.
Story Points: ---
Clone Of:
: 1305489 (view as bug list)
Environment:
Last Closed: 2016-11-03 14:23:55 EDT
Type: Bug
Regression: ---
Mount Type: ---
Documentation: ---
CRM:
Verified Versions:
Category: ---
oVirt Team: ---
RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: ---


Attachments (Terms of Use)

  None (edit)
Description Richard W.M. Jones 2015-09-16 04:39:32 EDT
Description of problem:

vpx:// paths looks like this:

  vpx://vcenter.example.com/MyFolder/MyDatacenter/MyCluster/esxi

but to connect to the datastore to read the underlying disk image,
libguestfs must form a URL like this:

  https://vcenter.example.com/folder/data/guest/guest-flat.vmdk?dcPath=MyFolder/MyDatacenter&dsName=datastore

All parts of this URL can be worked out from the URL or the libvirt
XML *except* the ?dcPath=... parameter.

The problem is that dcPath isn't a straight mapping from the vpx://
path.  The particular problem is that if there is a cluster name in
the path (eg 'MyCluster') it appears that we have to remove it.  ie:

  dcPath=MyFolder/MyDatacenter/MyCluster   - does not work
  dcPath=MyFolder/MyDatacenter             - works

That would be OK if there was always a cluster name at the end of the
path, but there isn't.  Clusters are completely optional, and AFAIK
you can't tell if something is a cluster path element just by
examining the name, since clusters can be given arbitrary names by the
vCenter admin.

Can we add some way to more easily map from vpx:// paths to
datastore URLs?  The whole process is very complex even without the
ambiguity - it takes a couple of pages of code to do the mapping.

A patch for this has been proposed and tested upstream:

https://www.redhat.com/archives/libvir-list/2015-September/msg00433.html

but is not yet included upstream nor in RHEL 7.

Version-Release number of selected component (if applicable):

libvirt-daemon-1.2.17-3.el7.x86_64

Additional info:

https://www.redhat.com/archives/libvir-list/2015-September/thread.html#00201
Comment 1 Richard W.M. Jones 2015-09-17 06:37:13 EDT
Pushed upstream in commit 636a99058758a0447482f3baad94de8de3ab1151.
Comment 3 Richard W.M. Jones 2015-10-09 07:55:17 EDT
Patches for libguestfs to use this field:
https://www.redhat.com/archives/libguestfs/2015-October/msg00118.html

This feature will be available in libguestfs RHEL 7.3.  There
is no separate bug for this, since it will be picked up in the
libguestfs rebase (bug 1218766).
Comment 4 Michal Skrivanek 2015-12-17 03:57:07 EST
is this feasible for a 7.2.z backport?
Comment 5 Richard W.M. Jones 2015-12-17 04:04:34 EST
The libvirt patch is fairly straightforward.

It needs a libguestfs backport too, because I didn't include
the patch to virt-v2v which gets the data from libvirt.
Comment 7 Richard W.M. Jones 2015-12-17 04:46:20 EST
It needs another bug against libguestfs.  Just backporting
the libvirt fix is not sufficient.
Comment 15 mxie@redhat.com 2016-02-26 05:06:48 EST
Verify the bug with the build:
libvirt-1.3.1-1.el7.x86_64

Steps:
1. Setting up some folder structure in vCenter.  In vCenter I added this:

  v2v-vcenter
  -> Folder(my is called mxie)
     -> Datacenter(my is called mxie-data)
        -> Cluster(my is called mxie-cluster)
           -> vmware [ESXi node]

2.Check the dcpath of guest rhel6.7-mxie in via vCenter server's web address, eg: https://vcenter/folder

2.1 Read the underlying disk image,the URL is :https://10.66.145.47/folder/rhel6%2e7%2dmxie?dcPath=mxie%252fmxie%252ddata&dsName=datastore1  


2.2 encode URL,dcpath=mxie/mxie-data



3.Check dcpath in libvirt xml:

3.1 #virsh -c vpx://root@10.66.145.47/mxie/mxie-data/mxie-cluster/10.66.144.40/?no_verify=1 
Enter root's password for 10.66.145.47: 
Welcome to virsh, the virtualization interactive terminal.

Type:  'help' for help with commands
       'quit' to quit

virsh # list --all
 Id    Name                           State
----------------------------------------------------
 164   VMware-vcenter-server-app      running
 -     app_vcenter600                 shut off
 -     Auto-esx6.0-win7-efi           shut off
 -     bug1260689-win2008R2-GPO-Macfee shut off
 -     rhel6.7-mxie                    shut off
 [etc]

3.2 Check dcpath in guest xml
virsh # dumpxml rhel6.7-mxie
<domain type='vmware' xmlns:vmware='http://libvirt.org/schemas/domain/vmware/1.0'>
  <name>rhel6.7-mxie</name>
  <uuid>423f07c2-18f5-6830-09bd-bff8e75c2f9b</uuid>
  <memory unit='KiB'>2097152</memory>
  <currentMemory unit='KiB'>2097152</currentMemory>
  <vcpu placement='static'>1</vcpu>
  <cputune>
    <shares>1000</shares>
  </cputune>
  <os>
    <type arch='x86_64'>hvm</type>
  </os>
  <clock offset='utc'/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>destroy</on_crash>
  <devices>
    <disk type='file' device='disk'>
      <source file='[datastore1] rhel6.7-mxie/rhel6.7-mxie.vmdk'/>
      <target dev='sda' bus='scsi'/>
      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
    </disk>
    <controller type='scsi' index='0' model='vmpvscsi'/>
    <interface type='bridge'>
      <mac address='00:50:56:bf:c1:73'/>
      <source bridge='VM Network'/>
      <model type='vmxnet3'/>
    </interface>
    <video>
      <model type='vmvga' vram='8192'/>
    </video>
  </devices>
  <vmware:datacenterpath>mxie/mxie-data</vmware:datacenterpath>
</domain>

Result now:
dcpath "<vmware:datacenterpath>mxie/mxie-data</vmware:datacenterpath>" has added in libvirt xml and match with the above one encoded from URL


So move the bug from ON_QA to VERIFIED
Comment 17 errata-xmlrpc 2016-11-03 14:23:55 EDT
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory, and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.

https://rhn.redhat.com/errata/RHSA-2016-2577.html

Note You need to log in before you can comment on or make changes to this bug.