Skip to content

Commit 38778d4

Browse files
authored
Merge pull request #321 from ajinkyapotdarvjti/sdk-upd
Cmdlets: port grouping and Effective NSGs, ILB HA and DDoSProtection
2 parents ea5a01f + 7df9c11 commit 38778d4

28 files changed

+10028
-46
lines changed

src/Common/Commands.Common.Network/Models/EffectiveNetworkSecurityGroup.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,13 @@ public EffectiveNetworkSecurityGroup()
3636
/// that is applied.</param>
3737
/// <param name="effectiveSecurityRules">A collection of effective
3838
/// security rules.</param>
39-
public EffectiveNetworkSecurityGroup(SubResource networkSecurityGroup = default(SubResource), EffectiveNetworkSecurityGroupAssociation association = default(EffectiveNetworkSecurityGroupAssociation), IList<EffectiveNetworkSecurityRule> effectiveSecurityRules = default(IList<EffectiveNetworkSecurityRule>))
39+
/// <param name="tagMap">Tag map.</param>
40+
public EffectiveNetworkSecurityGroup(SubResource networkSecurityGroup = default(SubResource), EffectiveNetworkSecurityGroupAssociation association = default(EffectiveNetworkSecurityGroupAssociation), IList<EffectiveNetworkSecurityRule> effectiveSecurityRules = default(IList<EffectiveNetworkSecurityRule>), IDictionary<string, List<string>> tagMap = default(IDictionary<string, List<string>>))
4041
{
4142
NetworkSecurityGroup = networkSecurityGroup;
4243
Association = association;
4344
EffectiveSecurityRules = effectiveSecurityRules;
45+
TagMap = tagMap;
4446
CustomInit();
4547
}
4648

@@ -66,5 +68,10 @@ public EffectiveNetworkSecurityGroup()
6668
[JsonProperty(PropertyName = "effectiveSecurityRules")]
6769
public IList<EffectiveNetworkSecurityRule> EffectiveSecurityRules { get; set; }
6870

71+
/// <summary>
72+
/// Gets or sets the tag map.
73+
/// </summary>
74+
[JsonProperty(PropertyName = "tagMap")]
75+
public IDictionary<string, List<string>> TagMap { get; set; }
6976
}
7077
}

src/Common/Commands.Common/Utilities/GeneralUtilities.cs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -430,6 +430,28 @@ public static void EnsureDefaultProfileDirectoryExists()
430430
}
431431
}
432432

433+
/// <summary>
434+
/// Checks if collection has more than one element
435+
/// </summary>
436+
/// <typeparam name="T">Type of the collection.</typeparam>
437+
/// <param name="collection">Collection.</param>
438+
/// <returns></returns>
439+
public static bool HasMoreThanOneElement<T>(ICollection<T> collection)
440+
{
441+
return collection != null && collection.Count > 1;
442+
}
443+
444+
/// <summary>
445+
/// Checks if collection has only one element
446+
/// </summary>
447+
/// <typeparam name="T">Type of the collection.</typeparam>
448+
/// <param name="collection">Collection.</param>
449+
/// <returns></returns>
450+
public static bool HasSingleElement<T>(ICollection<T> collection)
451+
{
452+
return collection != null && collection.Count == 1;
453+
}
454+
433455
/// <summary>
434456
/// Clear the current storage account from the context - guarantees that only one storage account will be active
435457
/// at a time.

src/ResourceManager/Network/ChangeLog.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,21 @@
3434
* Added support for IkeV2 P2S
3535
- Updated New-AzureRmVirtualNetworkGateway: Added optional parameter -VpnClientProtocol, defaults to [ "SSTP", "IkeV2" ]
3636
- Updated Set-AzureRmVirtualNetworkGateway: Added optional parameter -VpnClientProtocol
37+
* Added support for MultiValued rules in Network Security Rules and Effective Network Security Rules
38+
- Updated Add-AzureRmNetworkSecurityRuleConfig: Updated SourcePortRange, DestinationPortRange, SourceAddressPrefix parameters to accept a list of strings
39+
- Updated New-AzureRmNetworkSecurityRuleConfig: Updated SourcePortRange, DestinationPortRange, SourceAddressPrefix parameter to accept a list of strings
40+
- Updated Set-AzureRmNetworkSecurityRuleConfig: Updated SourcePortRange, DestinationPortRange, SourceAddressPrefix parameter to accept a list of strings
41+
- Updated Add-AzureRmNetworkSecurityRuleConfig: Updated SourcePortRange, DestinationPortRange, SourceAddressPrefix parameter to accept a list of strings
42+
- Updated New-AzureRmNetworkSecurityGroup : Updated SecurityRules parameter to accept SourcePortRange, DestinationPortRange, SourceAddressPrefix parameters which are list of strings in PSSecurityRule object
43+
- Updated Get-AzureRmEffectiveNetworkSecurityGroup: Added parameter TagMap
44+
- Updated Get-AzureRmEffectiveNetworkSecurityGroup: Updated returned PSEffectiveSecurityRule object with SourcePortRange, DestinationPortRange, SourceAddressPrefix parameters which are list of strings.
45+
* Added support for DDoS protection for virtual networks
46+
- Updated New-AzureRmVirtualNetwork: Added switch parameters EnableDDoSProtection and EnableVmProtection
47+
- Added properties EnableDDoSProtection and EnableVmProtection in PSVirtualNetwork object
48+
* Added support for Highly Available Internal Load Balancer
49+
- Updated Add-AzureRmLoadBalancerRuleConfig: Added All as an acceptable value for Protocol parameter
50+
- Updated New-AzureRmLoadBalancerRuleConfig: Added All as an acceptable value for Protocol parameter
51+
- Updated Set-AzureRmLoadBalancerRuleConfig: Added All as an acceptable value for Protocol parameter
3752

3853
## Version 4.3.1
3954

src/ResourceManager/Network/Commands.Network.Test/Commands.Network.Test.csproj

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,12 @@
286286
<None Include="SessionRecords\Commands.Network.Test.ScenarioTests.ExpressRouteCircuitTests\TestExpressRouteBgpServiceCommunitiesGet.json">
287287
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
288288
</None>
289+
<None Include="SessionRecords\Commands.Network.Test.ScenarioTests.LoadBalancerTests\TestLoadBalancerCRUDInternalHighlyAvailableBasicSku.json">
290+
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
291+
</None>
292+
<None Include="SessionRecords\Commands.Network.Test.ScenarioTests.LoadBalancerTests\TestLoadBalancerCRUDInternalHighlyAvailableStandardSku.json">
293+
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
294+
</None>
289295
<None Include="SessionRecords\Commands.Network.Test.ScenarioTests.LoadBalancerTests\TestSetLoadBalancerCRUDInternalBasicSku.json">
290296
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
291297
</None>
@@ -298,6 +304,9 @@
298304
<None Include="SessionRecords\Commands.Network.Test.ScenarioTests.LoadBalancerTests\TestSetLoadBalancerCRUDPublicStandardSku.json">
299305
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
300306
</None>
307+
<None Include="SessionRecords\Commands.Network.Test.ScenarioTests.NetworkSecurityGroupTests\TestNetworkSecurityGroupMultiValuedRules.json">
308+
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
309+
</None>
301310
<None Include="SessionRecords\Commands.Network.Test.ScenarioTests.NetworkWatcherAPITests\TestFlowLog.json">
302311
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
303312
</None>
@@ -532,6 +541,9 @@
532541
<None Include="SessionRecords\Commands.Network.Test.ScenarioTests.VirtualNetworkTests\TestVirtualNetworkCRUD.json">
533542
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
534543
</None>
544+
<None Include="SessionRecords\Commands.Network.Test.ScenarioTests.VirtualNetworkTests\TestVirtualNetworkCRUDWithDDoSProtection.json">
545+
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
546+
</None>
535547
<None Include="SessionRecords\Commands.Network.Test.ScenarioTests.VirtualNetworkTests\TestVirtualNetworkPeeringCRUD.json">
536548
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
537549
</None>

src/ResourceManager/Network/Commands.Network.Test/ScenarioTests/LoadBalancerTests.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,5 +172,19 @@ public void TestSetLoadBalancerCRUDInternalStandardSku()
172172
{
173173
NetworkResourcesController.NewInstance.RunPsTest("Test-LoadBalancerCRUD-InternalStandardSku");
174174
}
175+
176+
[Fact]
177+
[Trait(Category.AcceptanceType, Category.CheckIn)]
178+
public void TestLoadBalancerCRUDInternalHighlyAvailableBasicSku()
179+
{
180+
NetworkResourcesController.NewInstance.RunPsTest("Test-LoadBalancerCRUD-InternalHighlyAvailableBasicSku");
181+
}
182+
183+
[Fact]
184+
[Trait(Category.AcceptanceType, Category.CheckIn)]
185+
public void TestLoadBalancerCRUDInternalHighlyAvailableStandardSku()
186+
{
187+
NetworkResourcesController.NewInstance.RunPsTest("Test-LoadBalancerCRUD-InternalHighlyAvailableStandardSku");
188+
}
175189
}
176190
}

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

Lines changed: 160 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,166 @@ function Test-LoadBalancerCRUD-InternalStatic
286286
}
287287
}
288288

289+
<#
290+
.SYNOPSIS
291+
Test creating a higly available internal Load balancer with basic sku.
292+
#>
293+
function Test-LoadBalancerCRUD-InternalHighlyAvailableBasicSku
294+
{
295+
# Setup
296+
$rgname = Get-ResourceGroupName
297+
$vnetName = Get-ResourceName
298+
$subnetName = Get-ResourceName
299+
$publicIpName = Get-ResourceName
300+
$domainNameLabel = Get-ResourceName
301+
$lbName = Get-ResourceName
302+
$frontendName = Get-ResourceName
303+
$backendAddressPoolName = Get-ResourceName
304+
$probeName = Get-ResourceName
305+
$inboundNatRuleName = Get-ResourceName
306+
$lbruleName = Get-ResourceName
307+
$rglocation = Get-ProviderLocation ResourceManagement
308+
$resourceTypeParent = "Microsoft.Network/loadBalancers"
309+
$location = Get-ProviderLocation $resourceTypeParent
310+
311+
try
312+
{
313+
# Create the resource group
314+
$resourceGroup = New-AzureRmResourceGroup -Name $rgname -Location $rglocation -Tags @{ testtag = "testval"}
315+
316+
# Create the Virtual Network
317+
$subnet = New-AzureRmVirtualNetworkSubnetConfig -Name $subnetName -AddressPrefix 10.0.1.0/24
318+
$vnet = New-AzureRmvirtualNetwork -Name $vnetName -ResourceGroupName $rgname -Location $location -AddressPrefix 10.0.0.0/16 -Subnet $subnet
319+
320+
# Create the publicip
321+
$publicip = New-AzureRmPublicIpAddress -ResourceGroupName $rgname -name $publicIpName -location $location -AllocationMethod Dynamic -DomainNameLabel $domainNameLabel
322+
323+
# Create LoadBalancer
324+
$frontend = New-AzureRmLoadBalancerFrontendIpConfig -Name $frontendName -Subnet $vnet.Subnets[0]
325+
$backendAddressPool = New-AzureRmLoadBalancerBackendAddressPoolConfig -Name $backendAddressPoolName
326+
$probe = New-AzureRmLoadBalancerProbeConfig -Name $probeName -RequestPath healthcheck.aspx -Protocol http -Port 80 -IntervalInSeconds 15 -ProbeCount 2
327+
$lbrule = New-AzureRmLoadBalancerRuleConfig -Name $lbruleName -FrontendIPConfiguration $frontend -BackendAddressPool $backendAddressPool -Probe $probe -Protocol All -FrontendPort 0 -BackendPort 0 -IdleTimeoutInMinutes 15 -EnableFloatingIP -LoadDistribution SourceIP
328+
$actualLb = New-AzureRmLoadBalancer -Name $lbName -ResourceGroupName $rgname -Location $location -FrontendIpConfiguration $frontend -BackendAddressPool $backendAddressPool -Probe $probe -LoadBalancingRule $lbrule -Sku Basic
329+
330+
$expectedLb = Get-AzureRmLoadBalancer -Name $lbName -ResourceGroupName $rgname
331+
332+
# Verification
333+
Assert-AreEqual $expectedLb.ResourceGroupName $actualLb.ResourceGroupName
334+
Assert-AreEqual $expectedLb.Name $actualLb.Name
335+
Assert-AreEqual $expectedLb.Location $actualLb.Location
336+
Assert-AreEqual "Succeeded" $expectedLb.ProvisioningState
337+
Assert-AreEqual 1 @($expectedLb.FrontendIPConfigurations).Count
338+
339+
Assert-AreEqual $frontendName $expectedLb.FrontendIPConfigurations[0].Name
340+
Assert-AreEqual $vnet.Subnets[0].Id $expectedLb.FrontendIPConfigurations[0].Subnet.Id
341+
Assert-NotNull $expectedLb.FrontendIPConfigurations[0].PrivateIpAddress
342+
343+
Assert-AreEqual $backendAddressPoolName $expectedLb.BackendAddressPools[0].Name
344+
345+
Assert-AreEqual $probeName $expectedLb.Probes[0].Name
346+
Assert-AreEqual $probe.RequestPath $expectedLb.Probes[0].RequestPath
347+
348+
Assert-AreEqual $lbruleName $expectedLb.LoadBalancingRules[0].Name
349+
Assert-AreEqual $expectedLb.FrontendIPConfigurations[0].Id $expectedLb.LoadBalancingRules[0].FrontendIPConfiguration.Id
350+
Assert-AreEqual $expectedLb.BackendAddressPools[0].Id $expectedLb.LoadBalancingRules[0].BackendAddressPool.Id
351+
Assert-AreEqual 0 $expectedLb.LoadBalancingRules[0].FrontendPort
352+
Assert-AreEqual 0 $expectedLb.LoadBalancingRules[0].BackendPort
353+
Assert-AreEqual All $expectedLb.LoadBalancingRules[0].Protocol
354+
355+
# Delete
356+
$deleteLb = Remove-AzureRmLoadBalancer -Name $lbName -ResourceGroupName $rgname -PassThru -Force
357+
Assert-AreEqual true $deleteLb
358+
359+
$list = Get-AzureRmLoadBalancer -ResourceGroupName $rgname
360+
Assert-AreEqual 0 @($list).Count
361+
}
362+
finally
363+
{
364+
# Cleanup
365+
Clean-ResourceGroup $rgname
366+
}
367+
}
368+
369+
<#
370+
.SYNOPSIS
371+
Tests creating a higly available internal Load balancer with standard sku.
372+
#>
373+
function Test-LoadBalancerCRUD-InternalHighlyAvailableStandardSku
374+
{
375+
# Setup
376+
$rgname = Get-ResourceGroupName
377+
$vnetName = Get-ResourceName
378+
$subnetName = Get-ResourceName
379+
$publicIpName = Get-ResourceName
380+
$domainNameLabel = Get-ResourceName
381+
$lbName = Get-ResourceName
382+
$frontendName = Get-ResourceName
383+
$backendAddressPoolName = Get-ResourceName
384+
$probeName = Get-ResourceName
385+
$inboundNatRuleName = Get-ResourceName
386+
$lbruleName = Get-ResourceName
387+
$rglocation = Get-ProviderLocation ResourceManagement
388+
$resourceTypeParent = "Microsoft.Network/loadBalancers"
389+
$location = Get-ProviderLocation $resourceTypeParent
390+
391+
try
392+
{
393+
# Create the resource group
394+
$resourceGroup = New-AzureRmResourceGroup -Name $rgname -Location $rglocation -Tags @{ testtag = "testval"}
395+
396+
# Create the Virtual Network
397+
$subnet = New-AzureRmVirtualNetworkSubnetConfig -Name $subnetName -AddressPrefix 10.0.1.0/24
398+
$vnet = New-AzureRmvirtualNetwork -Name $vnetName -ResourceGroupName $rgname -Location $location -AddressPrefix 10.0.0.0/16 -Subnet $subnet
399+
400+
# Create the publicip
401+
$publicip = New-AzureRmPublicIpAddress -ResourceGroupName $rgname -name $publicIpName -location $location -AllocationMethod Dynamic -DomainNameLabel $domainNameLabel
402+
403+
# Create LoadBalancer
404+
$frontend = New-AzureRmLoadBalancerFrontendIpConfig -Name $frontendName -Subnet $vnet.Subnets[0]
405+
$backendAddressPool = New-AzureRmLoadBalancerBackendAddressPoolConfig -Name $backendAddressPoolName
406+
$probe = New-AzureRmLoadBalancerProbeConfig -Name $probeName -RequestPath healthcheck.aspx -Protocol http -Port 80 -IntervalInSeconds 15 -ProbeCount 2
407+
$lbrule = New-AzureRmLoadBalancerRuleConfig -Name $lbruleName -FrontendIPConfiguration $frontend -BackendAddressPool $backendAddressPool -Probe $probe -Protocol All -FrontendPort 0 -BackendPort 0 -IdleTimeoutInMinutes 15 -EnableFloatingIP -LoadDistribution SourceIP
408+
$actualLb = New-AzureRmLoadBalancer -Name $lbName -ResourceGroupName $rgname -Location $location -FrontendIpConfiguration $frontend -BackendAddressPool $backendAddressPool -Probe $probe -LoadBalancingRule $lbrule -Sku Standard
409+
410+
$expectedLb = Get-AzureRmLoadBalancer -Name $lbName -ResourceGroupName $rgname
411+
412+
# Verification
413+
Assert-AreEqual $expectedLb.ResourceGroupName $actualLb.ResourceGroupName
414+
Assert-AreEqual $expectedLb.Name $actualLb.Name
415+
Assert-AreEqual $expectedLb.Location $actualLb.Location
416+
Assert-AreEqual "Succeeded" $expectedLb.ProvisioningState
417+
Assert-AreEqual 1 @($expectedLb.FrontendIPConfigurations).Count
418+
419+
Assert-AreEqual $frontendName $expectedLb.FrontendIPConfigurations[0].Name
420+
Assert-AreEqual $vnet.Subnets[0].Id $expectedLb.FrontendIPConfigurations[0].Subnet.Id
421+
Assert-NotNull $expectedLb.FrontendIPConfigurations[0].PrivateIpAddress
422+
423+
Assert-AreEqual $backendAddressPoolName $expectedLb.BackendAddressPools[0].Name
424+
425+
Assert-AreEqual $probeName $expectedLb.Probes[0].Name
426+
Assert-AreEqual $probe.RequestPath $expectedLb.Probes[0].RequestPath
427+
428+
Assert-AreEqual $lbruleName $expectedLb.LoadBalancingRules[0].Name
429+
Assert-AreEqual $expectedLb.FrontendIPConfigurations[0].Id $expectedLb.LoadBalancingRules[0].FrontendIPConfiguration.Id
430+
Assert-AreEqual $expectedLb.BackendAddressPools[0].Id $expectedLb.LoadBalancingRules[0].BackendAddressPool.Id
431+
Assert-AreEqual 0 $expectedLb.LoadBalancingRules[0].FrontendPort
432+
Assert-AreEqual 0 $expectedLb.LoadBalancingRules[0].BackendPort
433+
Assert-AreEqual All $expectedLb.LoadBalancingRules[0].Protocol
434+
435+
# Delete
436+
$deleteLb = Remove-AzureRmLoadBalancer -Name $lbName -ResourceGroupName $rgname -PassThru -Force
437+
Assert-AreEqual true $deleteLb
438+
439+
$list = Get-AzureRmLoadBalancer -ResourceGroupName $rgname
440+
Assert-AreEqual 0 @($list).Count
441+
}
442+
finally
443+
{
444+
# Cleanup
445+
Clean-ResourceGroup $rgname
446+
}
447+
}
448+
289449
<#
290450
.SYNOPSIS
291451
Tests creating a public Load balancer without InboundNAtRule
@@ -1698,7 +1858,6 @@ function Test-SetLoadBalancerObjectAssignment
16981858
}
16991859
}
17001860

1701-
17021861
<#
17031862
.SYNOPSIS
17041863
Tests creating a public Load balancer with basic sku.

src/ResourceManager/Network/Commands.Network.Test/ScenarioTests/NetworkSecurityGroupTests.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,5 +39,12 @@ public void TestNetworkSecurityGroupSecurityRuleCRUD()
3939
{
4040
NetworkResourcesController.NewInstance.RunPsTest("Test-NetworkSecurityGroup-SecurityRuleCRUD");
4141
}
42+
43+
[Fact]
44+
[Trait(Category.AcceptanceType, Category.CheckIn)]
45+
public void TestNetworkSecurityGroupMultiValuedRules()
46+
{
47+
NetworkResourcesController.NewInstance.RunPsTest("Test-NetworkSecurityGroup-MultiValuedRules");
48+
}
4249
}
4350
}

0 commit comments

Comments
 (0)