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

Matthias Bolte matthias.bolte at googlemail.com
Sat Jul 24 19:38:29 UTC 2010


2010/7/21 Daniel Veillard <veillard at redhat.com>:
> 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 :-)

Don't worry most of that will be needed for the upcoming storage
volume handling anyway :)

> [...]
>> +    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...

Yes, I query for the FileInfo and to be on the safe side I need to be
able to handle all types that inherit from FileInfo.

You'll be surprised by the huge pile of new types I would have to add
once I would want to deserialize the error details from SOAP faults or
task errors. The vSphere API contains a type for every possible error.

>
>  ACK, patch looks fine to me
>
> Daniel
>

Thanks, pushed.

Matthias




More information about the libvir-list mailing list