[ovs-dev] [PATCH] Update the WMI Script handling Hyper-V friendly port names

Alin Serdean aserdean at cloudbasesolutions.com
Wed Oct 8 17:47:05 UTC 2014


Hi Ben,

The author is: Lucian Petrut. I just reviewed his work and tested it.

Think he has some environment problems with git send-email also:
Signed-off-by: Lucian Petrut <lpetrut at cloudbasesolutions.com>

Thanks,
Alin.

-----Mesaj original-----
De la: Ben Pfaff [mailto:blp at nicira.com] 
Trimis: Wednesday, October 8, 2014 8:44 PM
Către: Alin Serdean
Cc: Lucian Petrut; dev at openvswitch.org; Lucian Petrut
Subiect: Re: [ovs-dev] [PATCH] Update the WMI Script handling Hyper-V friendly port names

I'm confused.  The "From:" at the top of the email indicates you're the author.  You can't sensibly ack your own patch.

Who is the author?

Thanks,

Ben.

On Wed, Oct 08, 2014 at 05:20:50PM +0000, Alin Serdean wrote:
> Acked-by: Alin Gabriel Serdean <aserdean at cloudbasesolutions.com>
> 
> 
> 
> 
> -----Mesaj original-----
> De la: Lucian Petrut [mailto:petrutlucian94 at gmail.com]
> Trimis: Wednesday, October 8, 2014 8:05 PM
> C?tre: dev at openvswitch.org
> Cc: Alin Serdean; Lucian Petrut
> Subiect: [PATCH] Update the WMI Script handling Hyper-V friendly port 
> names
> 
> From: Alin Gabriel Serdean <aserdean at cloudbasesolutions.com>
> 
> 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 <lpetrut at cloudbasesolutions.com>
> Tested-by: Alin Gabriel Serdean <aserdean at cloudbasesolutions.com>
> ---
>  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.Po
> werShell")
>  
>  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
> dev at openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev



More information about the dev mailing list