[libvirt] Hyper-V driver API version support
Daniel P. Berrange
berrange at redhat.com
Fri Aug 9 16:15:05 UTC 2013
On Fri, Aug 09, 2013 at 06:08:38PM +0200, Matthias Bolte wrote:
> 2013/8/9 <surface at me.is-a-linux-user.org>:
> >> On Fri, Aug 09, 2013 at 10:13:03AM +0200, surface at me.is-a-linux-user.org
> >> wrote:
> >>>
> >>> Hello
> >>>
> >>> The "version" function is not supported by the hyperv driver:
> >>> $ virsh --connect=hyperv://hypervhost version
> >>> Compiled against library: libvirt 1.1.1
> >>> Using library: libvirt 1.1.1
> >>> Using API: Hyper-V 1.1.1
> >>> error: failed to get the hypervisor version
> >>> error: this function is not supported by the connection driver:
> >>> virConnectGetVersion
> >>>
> >>> But we need this funtion for the "external/libvirt" stonith plugin
> >>> of clusterglue:
> >>>
> >>> $ cat /usr/lib/stonith/plugins/libvirt | more
> >>> # get status of stonith device (*NOT* of the domain).
> >>> # If we can retrieve some info from the hypervisor
> >>> # the stonith device is OK.
> >>> libvirt_status() {
> >>> out=$($VIRSH -c $hypervisor_uri version 2>&1)
> >>> if [ $? -eq 0 ]
> >>> then
> >>> out=`echo "$out" | tail -1`
> >>> ha_log.sh notice "$hypervisor_uri: $out"
> >>> return 0
> >>> fi
> >>>
> >>> ha_log.sh err "Failed to get status for $hypervisor_uri"
> >>> ha_log.sh err "$out"
> >>> return 1
> >>> }
> >>>
> >>> So, we can't implement libvirt stonith with hyperv support in our
> >>> corosync/pacemaker cluster. Is it possible to implement the
> >>> "version" function for hyperv into virConnectGetVersion? Or exist
> >>> any workaround for this problem?
> >>
> >>
> >> I'm sure its possible, but it needs someone with knowledge of the
> >> Hyper-V apis to write a patch and there's only a couple of people
> >> in libvirt comunity who can do that. Patches welcome from any able
> >> person...
> >>
> >> Daniel
> >
> >
> > Hi Daniel
> >
> > I don't know which api is used for the driver handling, maybe you mean this
> > one here: http://msdn.microsoft.com/en-us/library/aa155227.aspx
> >
> > I tested the following command on our micro$oft server:
> > PS C:\Users\administrator> gwmi -namespace "root\virtualization"
> > Msvm_VirtualSystemManagementService
> >
> >
> > __GENUS : 2
> > __CLASS : Msvm_VirtualSystemManagementService
> > __SUPERCLASS : CIM_VirtualSystemManagementService
> > __DYNASTY : CIM_ManagedElement
> > __RELPATH :
> > Msvm_VirtualSystemManagementService.CreationClassName="Msvm_VirtualSystemManagementService",N
> >
> > ame="vmms",SystemCreationClassName="Msvm_ComputerSystem",SystemName="VSRV1"
> > __PROPERTY_COUNT : 21
> > __DERIVATION : {CIM_VirtualSystemManagementService, CIM_Service,
> > CIM_EnabledLogicalElement,
> > CIM_LogicalElement...}
> > __SERVER : VSRV1
> > __NAMESPACE : root\virtualization
> > __PATH :
> > \\VSRV1\root\virtualization:Msvm_VirtualSystemManagementService.CreationClassName="Msvm_
> >
> > VirtualSystemManagementService",Name="vmms",SystemCreationClassName="Msvm_ComputerSystem",Sys
> > temName="VSRV1"
> > Caption : Hyper-V Virtual System Management Service
> > CreationClassName : Msvm_VirtualSystemManagementService
> > Description : Service for creating, manipulating, and managing
> > virtual systems
> > ElementName : Hyper-V Virtual System Management Service
> > EnabledDefault : 2
> > EnabledState : 2
> > HealthState : 5
> > InstallDate : 20130717120539.000000-000
> > Name : vmms
> > OperationalStatus : {2}
> > OtherEnabledState :
> > PrimaryOwnerContact :
> > PrimaryOwnerName :
> > RequestedState : 12
> > Started : True
> > StartMode :
> > Status : OK
> > StatusDescriptions : {The service is running normally}
> > SystemCreationClassName : Msvm_ComputerSystem
> > SystemName : VSRV1
> > TimeOfLastStateChange : 20130801095437.000000-000
> > PSComputerName : VSRV1
> >
> > so I think we can query the state like this:
> > PS C:\Users\administrator> gwmi -namespace "root\virtualization"
> > Msvm_VirtualSystemManagementService | select Status
> >
> >
> > Status
> > ------
> > OK
> >
> > It's not the version, but we need something to let libvirt stonith know,
> > that the stonith device can connect to hyperv and the hyperv service is
> > running..
>
> The Hyper-V driver in libvirt already checks if the host has the
> Hyper-V role installed on connect. It does this by checking for the
> existance of an Msvm_ComputerSystem object, if there is non then
> "virsh connect" fails. This means if "virsh connect" succeeds then the
> URI you specified points to an Hyper-V server. No need to abuse the
> version command for such a check.
>
> If you think that it is useful to check that an
> Msvm_VirtualSystemManagementService object exists on the host then
> this could be done in addition to the existing checks.
What they really want, per the first mail, is for
virConnectGetVersion
to be implemented for hyper-v
Daniel
--
|: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org -o- http://virt-manager.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
More information about the libvir-list
mailing list