Scripting Example: How to set the MPIO LB policy


The following scripting example shows how to set the MPIO Load Balancing policy via a script calling WMI:


Just to expand on the information below,


















FOO Failover Only
RR Round Robin
RRwS Round Robin with Subset
LQD Least Queue Depth
WP Weighted Paths

‘—————————————————————————–



‘ SET_LBP.vbs



‘ WScript which can be used to change MPIO Load Balance Policies on Windows 2008



‘ USAGE:



‘ SET_LBP.vbs <FOO | RR | RRwS | LQD | WP>


‘ Change to FOO: SET_LBP.vbs FOO


‘ Change to RR: SET_LBP.vbs RR


‘ Change to RRwS: SET_LBP.vbs RRwS


‘ Change to LQD: SET_LBP.vbs LQD


‘ Change to WP: SET_LBP.vbs WP



‘ Return value:


‘ Success: 0


‘ Failure: -1




‘—————————————————————————–



‘ Function returning ALUA or nonALUA flag



Function aluaflag(theInstance)


strComputer = “.”


Set objWMIService = GetObject(“winmgmts:\\” & strComputer & “\root\WMI”)


Set objShare = objWMIService.Get(“DSM_QueryLBPolicy_V2.InstanceName=” & _


“‘”&theInstance&”‘”)


For Each objDsmPath in objShare.LoadBalancePolicy.DSM_Paths


aluaflag = objDsmPath.ALUASupport


Exit for


Next


End Function


Dim Usage


Usage = “USAGE:” & vbCrLf & _


” SET_LBP.vbs <FOO | RR | RRwS | LQD | WP>” & vbCrLf



‘ Make sure we have the correct number of arguments.



If ( WScript.Arguments.Count <>1 ) Then


WScript.StdOut.Write Usage


WScript.Quit -1


End If



‘ Extract the arguments.



Dim bFlag, BOOL, LBP, LBPath, LBPolicy, foo, rr, rrws, lqd, wp


Dim fooValue, rrValue, rrwsValue, lqdValue, wpValue


LBP = WScript.Arguments(0): foo = “FOO” : rr = “RR” : rrws = “RRwS” : lqd = “LQD” : wp = “WP”


fooValue = StrComp(LBP, foo, 1)


rrValue = StrComp(LBP, rr, 1)


rrwsValue = StrComp(LBP, rrws, 1)


lqdValue = StrComp(LBP, lqd, 1)


wpValue = StrComp(LBP, wp, 1)


‘ ———-FOO———


If ( 0 = fooValue) Then


LBPolicy = 1


End If


‘ ———-RR———


If ( 0 = rrValue ) Then


LBPolicy = 2


End If


‘ ———-RRwS———


If ( 0 = rrwsValue ) Then


LBPolicy = 3


End If


‘ ———-LQD———


If ( 0 = lqdValue ) Then


LBPolicy = 4


End If


‘ ———-WP———


If ( 0 = wpValue ) Then


LBPolicy = 5


End If


If ( Err.Number = 0 ) Then


strComputer = “.”


Set objWMIService = GetObject(“winmgmts:\\” & strComputer & “\root\WMI”)



‘ Locate device



Set colSWbemObjectSet = objWMIService.InstancesOf(“DSM_QueryLBPolicy_V2”)



‘ Loop through all devices



For Each objSWbemObject In colSWbemObjectSet



‘ Set the boolean flag to FALSE



BOOL = 0


WScript.StdOut.Write “InstanceName= “& objSWbemObject.InstanceName & vbCrLf



‘ Flag for ALUA LUN



bFlag = aluaflag(objSWbemObject.InstanceName)



‘ If ALUA=True and LBPolicy=RoundRobin, don’t apply the change



Do


if LBPolicy = 2 Then


if bFlag > 0 Then Exit Do:


End if



‘ Set boolean flag to TRUE if ALUA



if bFlag > 0 Then


BOOL = 1


End if



‘Assign each WbemObject to LBPolicy object



Set objLBPolicy = objSWbemObject



‘ Obtain an instance of the the class using a key property value.



Set objShare = objWMIService.Get(“DSM_LB_Operations.InstanceName=” & _


“‘”&objSWbemObject.InstanceName&”‘”)



‘ Obtain an InParameters object specific to the method we are going to call.



Set objInParam = objShare.Methods_(“DsmSetLoadBalancePolicyALUA”).inParameters.SpawnInstance_()



‘ set to user-defined LB Policy



objLBPolicy.LoadBalancePolicy.LoadBalancePolicy = LBPolicy


Dim count


count = 0



‘ If LB Policy is set to FOO



‘ If it is the 1st path, Set to A/O


‘ If is is not the 1st Path, Set to A/U if ALUA or S/B if not ALUA




‘ else LB Policy is set to other than FOO



‘ If It is ALUA


‘ If TargetPortGroup State is A/O


‘ Set the associated paths to A/O


‘ If TargetPortGroup State is A/U


‘ Set the associated paths to A/U



‘ else It is not ALUA


‘ Set all paths to A/O




For Each objDSMPath In objLBPolicy.LoadBalancePolicy.DSM_Paths


if LBPolicy = 1 Then


if count = 0 Then


objDSMPath.PrimaryPath = 1


else


if BOOL = 1 Then


objDSMPath.OptimizedPath = 0


objDSMPath.PrimaryPath = 1


else


objDSMPath.OptimizedPath = 1


objDSMPath.PrimaryPath = 0


End if


End if


else


if BOOL = 1 Then


if objDSMPath.TargetPortGroup_State = 0 Then


objDSMPath.OptimizedPath = 1


objDSMPath.PrimaryPath = 1


else


objDSMPath.OptimizedPath = 0


objDSMPath.PrimaryPath = 1


End if


else


objDSMPath.PrimaryPath = 1


End if


End if


count = count + 1


Next


objInParam.Properties_.item(“LoadBalancePolicy”) = objLBPolicy.LoadBalancePolicy


WScript.StdOut.Write “DSM_LB_Operations.InstanceName=” & “‘”& _


objSWbemObject.InstanceName & “‘” & vbCrLf & vbCrLf


Set objOutParams = objWMIService.ExecMethod(“DSM_LB_Operations.InstanceName=” & _


“‘”&objSWbemObject.InstanceName&”‘”,”DsmSetLoadBalancePolicyALUA”, objInParam)


Loop Until True:


Next


If (LBPolicy = 5) Then


WScript.StdOut.Write “LB Policy has successfully changed to WP” & vbCrLf


End If


If (LBPolicy = 4) Then


WScript.StdOut.Write “LB Policy has successfully changed to LQD” & vbCrLf


End If


If (LBPolicy = 3) Then


WScript.StdOut.Write “LB Policy has successfully changed to RRwS” & vbCrLf


End If


If (LBPolicy = 2) Then


If(BOOL = 0) Then


WScript.StdOut.Write vbCrLf & “Found no applicable device for RR” & vbCrLf


else


WScript.StdOut.Write “LB Policy has successfully changed to RR” & vbCrLf


End If


End If


If (LBPolicy = 1) Then


WScript.StdOut.Write “LB Policy has successfully changed to FOO” & vbCrLf


End If


WScript.Quit 0


Else



‘ Something went wrong.



WScript.StdOut.Write “Failed to change LB Policy” & Err.Description & vbCrLf


WScript.Quit -1


End If


————————

Comments (0)