Skip to content

Commit 2d56d12

Browse files
authored
Updating New-AzLoadBalancer and Set-AzLoadBalancer to validate surface level parameters for global tier load balancers (#21285)
* Transferring commits from private repo https://github.com/Azure/azure-powershell-pr/pull/1927/commits - Add validations for tcp reset, idle timeout, inbound nat rules, outbound rules, and probes to new and set loadbalancer commands for global tier resources - Add UT for set command and modify checks to account for empty lists - Account for null lb rule list - Update changelog.md - Removing unnecessary file * Add null check for lb sku and tier to lb commands * Update failing zones test
1 parent 2c61475 commit 2d56d12

File tree

8 files changed

+1939
-1106
lines changed

8 files changed

+1939
-1106
lines changed

src/Network/Network.Test/ScenarioTests/LoadBalancerTests.ps1

Lines changed: 57 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,11 @@ function Test-LoadBalancerCRUD-Public
3838
{
3939
# Create the resource group
4040
$resourceGroup = New-AzResourceGroup -Name $rgname -Location $rglocation -Tags @{ testtag = "testval"}
41-
41+
4242
# Create the Virtual Network
4343
$subnet = New-AzVirtualNetworkSubnetConfig -Name $subnetName -AddressPrefix 10.0.1.0/24
4444
$vnet = New-AzVirtualNetwork -Name $vnetName -ResourceGroupName $rgname -Location $location -AddressPrefix 10.0.0.0/16 -Subnet $subnet
45-
45+
4646
# Create the publicip
4747
$publicip = New-AzPublicIpAddress -ResourceGroupName $rgname -name $publicIpName -location $location -AllocationMethod Dynamic -DomainNameLabel $domainNameLabel
4848

@@ -2858,6 +2858,8 @@ function Test-LoadBalancerCRUD-PublicStandardSkuGlobalTier
28582858
$backendAddressPoolName = Get-ResourceName
28592859
$probeName = Get-ResourceName
28602860
$lbruleName = Get-ResourceName
2861+
$inboundNatRuleName = Get-ResourceName
2862+
$outboundRuleName = Get-ResourceName
28612863
$rglocation = Get-ProviderLocation ResourceManagement
28622864
$resourceTypeParent = "Microsoft.Network/loadBalancers"
28632865
$gviplocation = "eastus2euap"
@@ -2866,23 +2868,22 @@ function Test-LoadBalancerCRUD-PublicStandardSkuGlobalTier
28662868
{
28672869
# Create the resource group
28682870
$resourceGroup = New-AzResourceGroup -Name $rgname -Location $rglocation -Tags @{ testtag = "testval"}
2869-
2871+
28702872
# Create the Virtual Network
28712873
$subnet = New-AzVirtualNetworkSubnetConfig -Name $subnetName -AddressPrefix 10.0.1.0/24
28722874
$vnet = New-AzVirtualNetwork -Name $vnetName -ResourceGroupName $rgname -Location $gviplocation -AddressPrefix 10.0.0.0/16 -Subnet $subnet
2873-
2875+
28742876
# Create the publicip
28752877
$publicip = New-AzPublicIpAddress -ResourceGroupName $rgname -name $publicIpName -Location $gviplocation -AllocationMethod Static -DomainNameLabel $domainNameLabel -Sku Standard -Tier Global
28762878

28772879
# Create LoadBalancer
28782880
$frontend = New-AzLoadBalancerFrontendIpConfig -Name $frontendName -PublicIpAddress $publicip
28792881
$backendAddressPool = New-AzLoadBalancerBackendAddressPoolConfig -Name $backendAddressPoolName
2880-
$probe = New-AzLoadBalancerProbeConfig -Name $probeName -RequestPath healthcheck.aspx -Protocol http -Port 80 -IntervalInSeconds 15 -ProbeCount 2
2881-
$lbrule = New-AzLoadBalancerRuleConfig -Name $lbruleName -FrontendIPConfiguration $frontend -BackendAddressPool $backendAddressPool -Probe $probe -Protocol Tcp -FrontendPort 80 -BackendPort 80 -IdleTimeoutInMinutes 15 -EnableFloatingIP -LoadDistribution SourceIP -DisableOutboundSNAT
2882-
$actualLb = New-AzLoadBalancer -Name $lbName -ResourceGroupName $rgname -Location $gviplocation -FrontendIpConfiguration $frontend -BackendAddressPool $backendAddressPool -Probe $probe -LoadBalancingRule $lbrule -Sku Standard -Tier Global
2883-
2884-
$expectedLb = Get-AzLoadBalancer -Name $lbName -ResourceGroupName $rgname
2882+
$lbrule = New-AzLoadBalancerRuleConfig -Name $lbruleName -FrontendIPConfiguration $frontend -BackendAddressPool $backendAddressPool -Protocol Tcp -FrontendPort 80 -BackendPort 80 -EnableFloatingIP -LoadDistribution SourceIP -DisableOutboundSNAT
2883+
$actualLb = New-AzLoadBalancer -Name $lbName -ResourceGroupName $rgname -Location $gviplocation -FrontendIpConfiguration $frontend -BackendAddressPool $backendAddressPool -LoadBalancingRule $lbrule -Sku Standard -Tier Global
28852884

2885+
$expectedLb = Get-AzLoadBalancer -Name $lbName -ResourceGroupName $rgname
2886+
28862887
# Verification
28872888
Assert-AreEqual $expectedLb.ResourceGroupName $actualLb.ResourceGroupName
28882889
Assert-AreEqual $expectedLb.Name $actualLb.Name
@@ -2891,34 +2892,71 @@ function Test-LoadBalancerCRUD-PublicStandardSkuGlobalTier
28912892
Assert-AreEqual "Succeeded" $expectedLb.ProvisioningState
28922893
Assert-NotNull $expectedLb.ResourceGuid
28932894
Assert-AreEqual 1 @($expectedLb.FrontendIPConfigurations).Count
2894-
2895+
28952896
Assert-AreEqual $frontendName $expectedLb.FrontendIPConfigurations[0].Name
28962897
Assert-AreEqual $publicip.Id $expectedLb.FrontendIPConfigurations[0].PublicIpAddress.Id
28972898
Assert-Null $expectedLb.FrontendIPConfigurations[0].PrivateIpAddress
2898-
2899+
28992900
Assert-AreEqual $backendAddressPoolName $expectedLb.BackendAddressPools[0].Name
2900-
2901-
Assert-AreEqual $probeName $expectedLb.Probes[0].Name
2902-
Assert-AreEqual $probe.RequestPath $expectedLb.Probes[0].RequestPath
2903-
2901+
29042902
Assert-AreEqual $lbruleName $expectedLb.LoadBalancingRules[0].Name
29052903
Assert-AreEqual $expectedLb.FrontendIPConfigurations[0].Id $expectedLb.LoadBalancingRules[0].FrontendIPConfiguration.Id
29062904
Assert-AreEqual $expectedLb.BackendAddressPools[0].Id $expectedLb.LoadBalancingRules[0].BackendAddressPool.Id
2907-
2905+
29082906
# List
29092907
$list = Get-AzLoadBalancer -ResourceGroupName $rgname
29102908
Assert-AreEqual 1 @($list).Count
29112909
Assert-AreEqual $expectedLb.Etag $list[0].Etag
29122910
Assert-AreEqualObjectProperties $expectedLb.Sku $list[0].Sku
29132911
Assert-AreEqual $expectedLb.FrontendIPConfigurations[0].Etag $list[0].FrontendIPConfigurations[0].Etag
29142912
Assert-AreEqual $expectedLb.BackendAddressPools[0].Etag $list[0].BackendAddressPools[0].Etag
2915-
Assert-AreEqual $expectedLb.Probes[0].Etag $list[0].Probes[0].Etag
29162913
Assert-AreEqual $expectedLb.LoadBalancingRules[0].Etag $list[0].LoadBalancingRules[0].Etag
2914+
2915+
# Creating or setting global loadbalancer with probe should fail
2916+
$probe = New-AzLoadBalancerProbeConfig -Name $probeName -RequestPath healthcheck.aspx -Protocol http -Port 80 -IntervalInSeconds 15 -ProbeCount 2
2917+
Assert-ThrowsContains { New-AzLoadBalancer -Name $lbName -ResourceGroupName $rgname -Location $gviplocation -FrontendIpConfiguration $frontend -BackendAddressPool $backendAddressPool -Probe $probe -LoadBalancingRule $lbrule -Sku Standard -Tier Global } "User defined probes are not supported on global load balancers."
2918+
2919+
$modifyLb = Get-AzLoadBalancer -Name $lbName -ResourceGroupName $rgname
2920+
Add-AzLoadBalancerProbeConfig -Loadbalancer $modifyLb -Name $probeName -Protocol http -Port 80 -IntervalInSeconds 15 -ProbeCount 2
2921+
Assert-ThrowsContains { Set-AzLoadBalancer -LoadBalancer $modifyLb } "User defined probes are not supported on global load balancers."
2922+
2923+
# Creating or setting global loadbalancer with tcp reset should fail
2924+
$lbrule = New-AzLoadBalancerRuleConfig -Name $lbruleName -FrontendIPConfiguration $frontend -BackendAddressPool $backendAddressPool -Protocol Tcp -FrontendPort 80 -BackendPort 80 -EnableFloatingIP -LoadDistribution SourceIP -DisableOutboundSNAT -EnableTcpReset
2925+
Assert-ThrowsContains { New-AzLoadBalancer -Name $lbName -ResourceGroupName $rgname -Location $gviplocation -FrontendIpConfiguration $frontend -BackendAddressPool $backendAddressPool -LoadBalancingRule $lbrule -Sku Standard -Tier Global } "TCP reset is not supported on global load balancers."
29172926

2927+
$modifyLb = Get-AzLoadBalancer -Name $lbName -ResourceGroupName $rgname
2928+
$lbRuleName += "_1"
2929+
Add-AzLoadBalancerRuleConfig -Loadbalancer $modifyLb -Name $lbruleName -FrontendIPConfiguration $frontend -BackendAddressPool $backendAddressPool -Protocol Tcp -FrontendPort 80 -BackendPort 80 -EnableFloatingIP -LoadDistribution SourceIP -DisableOutboundSNAT -EnableTcpReset
2930+
Assert-ThrowsContains { Set-AzLoadBalancer -Loadbalancer $modifyLb } "TCP reset is not supported on global load balancers."
2931+
2932+
# Creating or setting global loadbalancer with idle timeout should fail
2933+
$lbrule = New-AzLoadBalancerRuleConfig -Name $lbruleName -FrontendIPConfiguration $frontend -BackendAddressPool $backendAddressPool -Protocol Tcp -FrontendPort 80 -BackendPort 80 -EnableFloatingIP -LoadDistribution SourceIP -DisableOutboundSNAT -IdleTimeoutInMinutes 15
2934+
Assert-ThrowsContains { New-AzLoadBalancer -Name $lbName -ResourceGroupName $rgname -Location $gviplocation -FrontendIpConfiguration $frontend -BackendAddressPool $backendAddressPool -LoadBalancingRule $lbrule -Sku Standard -Tier Global } "Idle timeout is not supported on global load balancers."
2935+
2936+
$modifyLb = Get-AzLoadBalancer -Name $lbName -ResourceGroupName $rgname
2937+
Add-AzLoadBalancerRuleConfig -Loadbalancer $modifyLb -Name $lbruleName -FrontendIPConfiguration $frontend -BackendAddressPool $backendAddressPool -Protocol Tcp -FrontendPort 80 -BackendPort 80 -EnableFloatingIP -LoadDistribution SourceIP -DisableOutboundSNAT -IdleTimeoutInMinutes 15
2938+
Assert-ThrowsContains { Set-AzLoadBalancer -Loadbalancer $modifyLb } "Idle timeout is not supported on global load balancers."
2939+
2940+
# Creating or setting global loadbalancer with an inbound nat rule should fail
2941+
$inboundNatRule = New-AzLoadBalancerInboundNatRuleConfig -Name $inboundNatRuleName -FrontendIPConfiguration $frontend -Protocol Tcp -FrontendPort 3389 -BackendPort 3389 -IdleTimeoutInMinutes 15 -EnableFloatingIP
2942+
Assert-ThrowsContains { New-AzLoadBalancer -Name $lbName -ResourceGroupName $rgname -Location $gviplocation -FrontendIpConfiguration $frontend -BackendAddressPool $backendAddressPool -LoadBalancingRule $lbrule -InboundNatRule $inboundNatRule -Sku Standard -Tier Global } "Only load balancing rules are supported on global load balancers."
2943+
2944+
$modifyLb = Get-AzLoadBalancer -Name $lbName -ResourceGroupName $rgname
2945+
Add-AzLoadBalancerInboundNatRuleConfig -Loadbalancer $modifyLb -Name $inboundNatRuleName -FrontendIPConfiguration $frontend -Protocol Tcp -FrontendPort 3389 -BackendPort 3389 -IdleTimeoutInMinutes 15 -EnableFloatingIP
2946+
Assert-ThrowsContains { Set-AzLoadBalancer -Loadbalancer $modifyLb } "Only load balancing rules are supported on global load balancers."
2947+
2948+
# Creating or setting global loadbalancer with an outbound rule should fail
2949+
$outboundRule = New-AzLoadBalancerOutboundRuleConfig -Name $outboundRuleName -FrontendIPConfiguration $frontend -BackendAddressPool $backendAddressPool -Protocol Tcp
2950+
Assert-ThrowsContains { New-AzLoadBalancer -Name $lbName -ResourceGroupName $rgname -Location $gviplocation -FrontendIpConfiguration $frontend -BackendAddressPool $backendAddressPool -LoadBalancingRule $lbrule -OutboundRule $outboundRule -Sku Standard -Tier Global } "Only load balancing rules are supported on global load balancers."
2951+
2952+
$modifyLb = Get-AzLoadBalancer -Name $lbName -ResourceGroupName $rgname
2953+
Add-AzLoadBalancerOutboundRuleConfig -Loadbalancer $modifyLb -Name $outboundRuleName -FrontendIPConfiguration $frontend -BackendAddressPool $backendAddressPool -Protocol Tcp
2954+
Assert-ThrowsContains { Set-AzLoadBalancer -Loadbalancer $modifyLb } "Only load balancing rules are supported on global load balancers."
2955+
29182956
# Delete
29192957
$deleteLb = Remove-AzLoadBalancer -Name $lbName -ResourceGroupName $rgname -PassThru -Force
29202958
Assert-AreEqual true $deleteLb
2921-
2959+
29222960
$list = Get-AzLoadBalancer -ResourceGroupName $rgname
29232961
Assert-AreEqual 0 @($list).Count
29242962
}
@@ -3046,7 +3084,7 @@ function Test-LoadBalancerZones
30463084
$frontend = New-AzLoadBalancerFrontendIpConfig -Name $frontendName -Subnet $subnet -Zone $zones
30473085

30483086
# Create loadBalancer
3049-
$actual = New-AzLoadBalancer -ResourceGroupName $rgname -name $rname -location $location -frontendIpConfiguration $frontend;
3087+
$actual = New-AzLoadBalancer -ResourceGroupName $rgname -name $rname -location $location -frontendIpConfiguration $frontend -Sku Standard
30503088
$expected = Get-AzLoadBalancer -ResourceGroupName $rgname -name $rname
30513089
Assert-AreEqual $expected.ResourceGroupName $actual.ResourceGroupName
30523090
Assert-AreEqual $expected.Name $actual.Name

src/Network/Network.Test/SessionRecords/Commands.Network.Test.ScenarioTests.LoadBalancerTests/TestLoadBalancerZones.json

Lines changed: 305 additions & 699 deletions
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)