Acked-by: Alin Gabriel Serdean <[email protected]>
-----Mesaj original----- De la: Lucian Petrut [mailto:[email protected]] Trimis: Wednesday, October 8, 2014 8:05 PM Către: [email protected] Cc: Alin Serdean; Lucian Petrut Subiect: [PATCH] Update the WMI Script handling Hyper-V friendly port names From: Alin Gabriel Serdean <[email protected]> This patch ensures that the friendly port name has no more than 16 characters and also if it is not in use. The method which checks the WMI jobs has been updated in order to provide relevant error codes/descriptions. Methods retrieving the according VM and VM network adapter mapped to an OVS port have been added as well. They are called: Get-VMNetworkAdapterByOVSPort Get-VMByOVSPort Example of usage: 2 import-module .\OVS.psm1 3 $vnic = Get-VMNetworkAdapter test_2_1 4 $vnic[0] | Set-VMNetworkAdapterOVSPort -OVSPortName ovs-port-1 5 $vnic[1] | Set-VMNetworkAdapterOVSPort -OVSPortName ovs-port-1 6 $vnic[0] | Set-VMNetworkAdapterOVSPort -OVSPortName ovs-port-2 7 $vnic[1] | Set-VMNetworkAdapterOVSPort -OVSPortName ovs-port-1 8 Get-VMNetworkAdapterByOVSPort ovs-port-1 9 Get-VMByOVSPort ovs-port-2 Signed-off-by: Lucian Petrut <[email protected]> Tested-by: Alin Gabriel Serdean <[email protected]> --- datapath-windows/misc/OVS.psm1 | 88 +++++++++++++++++++++++++++++++++++++++--- 1 file changed, 83 insertions(+), 5 deletions(-) diff --git a/datapath-windows/misc/OVS.psm1 b/datapath-windows/misc/OVS.psm1 index 52ed3ba..b83b263 100644 --- a/datapath-windows/misc/OVS.psm1 +++ b/datapath-windows/misc/OVS.psm1 @@ -14,6 +14,10 @@ See the License for the specific language governing permissions and limitations under the License. #> +$WMI_JOB_STATUS_STARTED = 4096 +$WMI_JOB_STATE_RUNNING = 4 +$WMI_JOB_STATE_COMPLETED = 7 + $hvassembly = [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.HyperV.PowerShell") function Set-VMNetworkAdapterOVSPort @@ -25,12 +29,23 @@ function Set-VMNetworkAdapterOVSPort [Microsoft.HyperV.PowerShell.VMNetworkAdapter]$VMNetworkAdapter, [parameter(Mandatory=$true)] + [ValidateLength(1, 16)] [string]$OVSPortName ) process { $ns = "root\virtualization\v2" $EscapedId = $VMNetworkAdapter.Id.Replace('\', '\\') + + $sd = gwmi -namespace $ns -class Msvm_EthernetPortAllocationSettingData -Filter "ElementName = '$OVSPortName'" + if($sd) + { + if($sd.InstanceId.Contains($VMNetworkAdapter.Id)){ + throw "The OVS port name '$OVSPortName' is already assigned to this port." + } + throw "Cannot assign the OVS port name '$OVSPortName' as it is already assigned to an other port." + } + $sd = gwmi -namespace $ns -class Msvm_EthernetPortAllocationSettingData -Filter "InstanceId like '$EscapedId%'" if($sd) @@ -51,26 +66,89 @@ function Set-VMNetworkAdapterOVSPort } } +function Get-VMNetworkAdapterByOVSPort +{ + [CmdletBinding()] + param + ( + + [parameter(Mandatory=$true)] + [ValidateLength(1, 16)] + [string]$OVSPortName + ) + process + { + $ns = "root\virtualization\v2" + + $sd = gwmi -namespace $ns -class Msvm_EthernetPortAllocationSettingData -Filter "ElementName = '$OVSPortName'" + if($sd) + { + return $sd + } + } +} + +function Get-VMByOVSPort +{ + [CmdletBinding()] + param + ( + [parameter(Mandatory=$true)] + [ValidateLength(1, 16)] + [string]$OVSPortName + ) + process + { + $ns = "root\virtualization\v2" + + $vms = gwmi -namespace $ns -class Msvm_VirtualSystemSettingData + ForEach($vm in $vms) + { + $ports = gwmi -Namespace $ns -Query " + Associators of {$vm} Where + ResultClass = Msvm_EthernetPortAllocationSettingData" + if ($ports.ElementName -eq $OVSPortName){ + return $vm + } + } + } +} + function Check-WMIReturnValue($retVal) { if ($retVal.ReturnValue -ne 0) { - if ($retVal.ReturnValue -eq 4096) + if ($retVal.ReturnValue -eq $WMI_JOB_STATUS_STARTED) { do { $job = [wmi]$retVal.Job } - while ($job.JobState -eq 4) + while ($job.JobState -eq $WMI_JOB_STATE_RUNNING) - if ($job.JobState -ne 7) + if ($job.JobState -ne $WMI_JOB_STATE_COMPLETED) { - throw "Job Failed" + echo $job.ReturnValue + $errorString = "Job Failed. Job State: " + $job.JobState.ToString() + if ($job.__CLASS -eq "Msvm_ConcreteJob") + { + $errorString += " Error Code: " + $job.ErrorCode.ToString() + $errorString += " Error Details: " + $job.ErrorDescription + } + else + { + $error = $job.GetError() + if ($error.Error) + { + $errorString += " Error:" + $error.Error + } + } + throw $errorString } } else { - throw "Job Failed" + throw "Job Failed. Return Value: {0}" -f $job.ReturnValue } } } -- 1.9.4.msysgit.1 _______________________________________________ dev mailing list [email protected] http://openvswitch.org/mailman/listinfo/dev
