2010/7/21 Daniel Veillard <veillard(a)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