[libvirt] [PATCH v2] esx: Add autodetection for the SCSI controller model

Daniel Veillard veillard at redhat.com
Wed Jul 21 16:01:29 UTC 2010


On Tue, Jul 13, 2010 at 10:11:05PM +0200, Matthias Bolte wrote:
> This works for file-backed SCSI disk device with a datastore
> related source path.
> ---
> 
> v2:
> - check that ESX reports the same controller model for all disks attached to
>   the SCSI controller, otherwise let autodetection fail
> 
>  docs/drvesx.html.in            |    9 ++
>  docs/schemas/domain.rng        |    1 +
>  src/conf/domain_conf.c         |    1 +
>  src/conf/domain_conf.h         |    1 +
>  src/esx/esx_vi_generator.input |  149 +++++++++++++++++++++++
>  src/esx/esx_vi_generator.py    |    3 +
>  src/esx/esx_vmx.c              |  256 +++++++++++++++++++++++++++++++++++++---
[...]
> diff --git a/src/esx/esx_vi_generator.input b/src/esx/esx_vi_generator.input
> index ff65178..b4b33f6 100644
> --- a/src/esx/esx_vi_generator.input
> +++ b/src/esx/esx_vi_generator.input
> @@ -184,6 +184,40 @@ object Event
>  end
>  
>  
> +object FileInfo
> +    String                                   path                           r
> +    Long                                     fileSize                       o
> +    DateTime                                 modification                   o
> +end
> +
> +
> +object FileQuery
> +end
> +
> +
> +object FileQueryFlags
> +    Boolean                                  fileType                       r
> +    Boolean                                  fileSize                       r
> +    Boolean                                  modification                   r
> +end
> +
> +
> +object FloppyImageFileInfo extends FileInfo
> +end
> +
> +
> +object FloppyImageFileQuery extends FileQuery
> +end
> +
> +
> +object FolderFileInfo extends FileInfo
> +end
> +
> +
> +object FolderFileQuery extends FileQuery
> +end
> +
> +
>  object HostCpuIdInfo
>      Int                                      level                          r
>      String                                   vendor                         o
> @@ -194,6 +228,22 @@ object HostCpuIdInfo
>  end
>  
>  
> +object HostDatastoreBrowserSearchResults
> +    ManagedObjectReference                   datastore                      o
> +    String                                   folderPath                     o
> +    FileInfo                                 file                           ol
> +end
> +
> +
> +object HostDatastoreBrowserSearchSpec
> +    FileQuery                                query                          ol
> +    FileQueryFlags                           details                        o
> +    Boolean                                  searchCaseInsensitive          o
> +    String                                   matchPattern                   ol
> +    Boolean                                  sortFoldersFirst               o
> +end
> +
> +
>  object HostFileSystemVolume
>      String                                   type                           r
>      String                                   name                           r
> @@ -225,6 +275,14 @@ object HostVmfsVolume extends HostFileSystemVolume
>  end
>  
>  
> +object IsoImageFileInfo extends FileInfo
> +end
> +
> +
> +object IsoImageFileQuery extends FileQuery
> +end
> +
> +
>  object LocalDatastoreInfo extends DatastoreInfo
>      String                                   path                           o
>  end
> @@ -424,6 +482,14 @@ object TaskInfo
>  end
>  
>  
> +object TemplateConfigFileInfo extends VmConfigFileInfo
> +end
> +
> +
> +object TemplateConfigFileQuery extends VmConfigFileQuery
> +end
> +
> +
>  object TraversalSpec extends SelectionSpec
>      String                                   type                           r
>      String                                   path                           r
> @@ -502,6 +568,82 @@ object VirtualMachineSnapshotTree
>  end
>  
>  
> +object VmConfigFileInfo extends FileInfo
> +    Int                                      configVersion                  o
> +end
> +
> +
> +object VmConfigFileQuery extends FileQuery
> +    VmConfigFileQueryFilter                  filter                         o
> +    VmConfigFileQueryFlags                   details                        o
> +end
> +
> +
> +object VmConfigFileQueryFilter
> +    Int                                      matchConfigVersion             ol
> +end
> +
> +
> +object VmConfigFileQueryFlags
> +    Boolean                                  configVersion                  r
> +end
> +
> +
> +object VmDiskFileInfo extends FileInfo
> +    String                                   diskType                       o
> +    Long                                     capacityKb                     o
> +    Int                                      hardwareVersion                o
> +    String                                   controllerType                 o
> +    String                                   diskExtents                    ol
> +end
> +
> +
> +object VmDiskFileQuery extends FileQuery
> +    VmDiskFileQueryFilter                    filter                         o
> +    VmDiskFileQueryFlags                     details                        o
> +end
> +
> +
> +object VmDiskFileQueryFilter
> +    String                                   diskType                       ol
> +    Int                                      matchHardwareVersion           ol
> +    String                                   controllerType                 ol
> +end
> +
> +
> +object VmDiskFileQueryFlags
> +    Boolean                                  diskType                       r
> +    Boolean                                  capacityKb                     r
> +    Boolean                                  hardwareVersion                r
> +    Boolean                                  controllerType                 o
> +    Boolean                                  diskExtents                    o
> +end
> +
> +
> +object VmLogFileInfo extends FileInfo
> +end
> +
> +
> +object VmLogFileQuery extends FileQuery
> +end
> +
> +
> +object VmNvramFileInfo extends FileInfo
> +end
> +
> +
> +object VmNvramFileQuery extends FileQuery
> +end
> +
> +
> +object VmSnapshotFileInfo extends FileInfo
> +end
> +
> +
> +object VmSnapshotFileQuery extends FileQuery
> +end
> +
> +
>  object VmfsDatastoreInfo extends DatastoreInfo
>      HostVmfsVolume                           vmfs                           o
>  end
> @@ -658,6 +800,13 @@ method RevertToSnapshot_Task returns ManagedObjectReference r
>  end
>  
>  
> +method SearchDatastore_Task returns ManagedObjectReference r
> +    ManagedObjectReference                   _this                          r
> +    String                                   datastorePath                  r
> +    HostDatastoreBrowserSearchSpec           searchSpec                     o
> +end
> +
> +
>  method SessionIsActive returns Boolean r
>      ManagedObjectReference                   _this:SessionManager           r
>      String                                   sessionID                      r

  I'm somehow surprized that all those extension to the generator are
  needed for SCSI type detection :-)

[...]
> +    if (esxVI_VmDiskFileQuery_Alloc(&vmDiskFileQuery) < 0 ||
> +        esxVI_VmDiskFileQueryFlags_Alloc(&vmDiskFileQuery->details) < 0 ||
> +        esxVI_FileQuery_AppendToList
> +          (&searchSpec->query,
> +           esxVI_FileQuery_DynamicCast(vmDiskFileQuery)) < 0) {
> +        goto cleanup;
> +    }
> +
> +    vmDiskFileQuery->details->diskType = esxVI_Boolean_False;
> +    vmDiskFileQuery->details->capacityKb = esxVI_Boolean_False;
> +    vmDiskFileQuery->details->hardwareVersion = esxVI_Boolean_False;
> +    vmDiskFileQuery->details->controllerType = esxVI_Boolean_True;
> +    vmDiskFileQuery->details->diskExtents = esxVI_Boolean_False;
> +
> +    if (esxVI_String_Alloc(&searchSpec->matchPattern) < 0) {
> +        goto cleanup;
> +    }
> +
> +    searchSpec->matchPattern->value = fileName;
> +
> +    /* Search datastore for file */
> +    if (esxVI_SearchDatastore_Task(ctx, hostDatastoreBrowser, datastorePath,
> +                                   searchSpec, &task) < 0 ||
> +        esxVI_WaitForTaskCompletion(ctx, task, NULL, esxVI_Boolean_False,
> +                                    &taskInfoState) < 0) {
> +        goto cleanup;
> +    }

  Okay that explains some of it, you need to do a full query and sort
the controller type informations...


  ACK, patch looks fine to me

Daniel

-- 
Daniel Veillard      | libxml Gnome XML XSLT toolkit  http://xmlsoft.org/
daniel at veillard.com  | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library  http://libvirt.org/




More information about the libvir-list mailing list