Skip to content

Commit 5d696ec

Browse files
authored
Merge pull request #11271 from Kotasudhakarreddy/master
[AppService]: #7682- Added new cmdlets for managing Routing Rules
2 parents 12082aa + 68b08d8 commit 5d696ec

21 files changed

+14881
-1
lines changed
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
// ----------------------------------------------------------------------------------
2+
//
3+
// Copyright Microsoft Corporation
4+
// Licensed under the Apache License, Version 2.0 (the "License");
5+
// you may not use this file except in compliance with the License.
6+
// You may obtain a copy of the License at
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
// Unless required by applicable law or agreed to in writing, software
9+
// distributed under the License is distributed on an "AS IS" BASIS,
10+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11+
// See the License for the specific language governing permissions and
12+
// limitations under the License.
13+
// ----------------------------------------------------------------------------------
14+
15+
16+
using Microsoft.Azure.ServiceManagement.Common.Models;
17+
using Microsoft.WindowsAzure.Commands.ScenarioTest;
18+
using Microsoft.WindowsAzure.Commands.Test.Utilities.Common;
19+
using Xunit;
20+
using Xunit.Abstractions;
21+
22+
namespace Microsoft.Azure.Commands.Websites.Test.ScenarioTests
23+
{
24+
public class RoutingRuleTests: RMTestBase
25+
{
26+
public XunitTracingInterceptor _logger;
27+
public RoutingRuleTests(ITestOutputHelper output)
28+
{
29+
_logger = new XunitTracingInterceptor(output);
30+
XunitTracingInterceptor.AddToContext(_logger);
31+
}
32+
33+
[Fact]
34+
[Trait(Category.AcceptanceType, Category.CheckIn)]
35+
public void TestAddWebAppTrafficRoutingRule()
36+
{
37+
WebsitesController.NewInstance.RunPsTest(_logger, "Test-AddWebAppTrafficRoutingRule");
38+
}
39+
40+
[Fact]
41+
[Trait(Category.AcceptanceType, Category.CheckIn)]
42+
public void TestRemoveWebAppTrafficRoutingRule()
43+
{
44+
WebsitesController.NewInstance.RunPsTest(_logger, "Test-RemoveWebAppTrafficRoutingRule");
45+
}
46+
47+
[Fact]
48+
[Trait(Category.AcceptanceType, Category.CheckIn)]
49+
public void TestGetWebAppTrafficRoutingRule()
50+
{
51+
WebsitesController.NewInstance.RunPsTest(_logger, "Test-GetWebAppTrafficRoutingRule");
52+
}
53+
54+
[Fact]
55+
[Trait(Category.AcceptanceType, Category.CheckIn)]
56+
public void TestUpdateWebAppTrafficRoutingRule()
57+
{
58+
WebsitesController.NewInstance.RunPsTest(_logger, "Test-UpdateWebAppTrafficRoutingRule");
59+
}
60+
}
61+
}
Lines changed: 246 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,246 @@
1+
# ----------------------------------------------------------------------------------
2+
#
3+
# Copyright Microsoft Corporation
4+
# Licensed under the Apache License, Version 2.0 (the "License");
5+
# you may not use this file except in compliance with the License.
6+
# You may obtain a copy of the License at
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
# Unless required by applicable law or agreed to in writing, software
9+
# distributed under the License is distributed on an "AS IS" BASIS,
10+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11+
# See the License for the specific language governing permissions and
12+
# limitations under the License.
13+
# ----------------------------------------------------------------------------------
14+
15+
<#
16+
.SYNOPSIS
17+
Tests creating a new Routing Rule.
18+
#>
19+
function Test-AddWebAppTrafficRoutingRule
20+
{
21+
# Setup
22+
$ReroutePercentage="15"
23+
$rgname = Get-ResourceGroupName
24+
$appname = Get-WebsiteName
25+
$location = Get-Location
26+
$slotName = "staging"
27+
$planName = Get-WebHostPlanName
28+
$tier = "Standard"
29+
$resourceType = "Microsoft.Web/sites"
30+
try
31+
{
32+
#Setup
33+
New-AzResourceGroup -Name $rgname -Location $location
34+
$serverFarm = New-AzAppServicePlan -ResourceGroupName $rgname -Name $planName -Location $location -Tier $tier
35+
36+
# Create new web app
37+
$actual = New-AzWebApp -ResourceGroupName $rgname -Name $appname -Location $location -AppServicePlan $planName
38+
39+
# Assert
40+
Assert-AreEqual $appname $actual.Name
41+
Assert-AreEqual $serverFarm.Id $actual.ServerFarmId
42+
43+
# Create deployment slot
44+
$job = New-AzWebAppSlot -ResourceGroupName $rgname -Name $appname -Slot $slotName -AsJob
45+
$job | Wait-Job
46+
$slot = $job | Receive-Job
47+
48+
$appWithSlotName = "$appname/$slotName"
49+
50+
# Assert
51+
Assert-AreEqual $appWithSlotName $slot.Name
52+
Assert-AreEqual $serverFarm.Id $slot.ServerFarmId
53+
54+
#Add Routing Rule for $slot
55+
$rule=Add-AzWebAppTrafficRouting -ResourceGroupName $rgname -WebAppName $appname -RoutingRule @{ActionHostName=$slot.DefaultHostName;ReroutePercentage=$ReroutePercentage;Name=$slotName}
56+
57+
# Assert
58+
Assert-AreEqual $ReroutePercentage $rule.ReroutePercentage
59+
Assert-AreEqual $slot.DefaultHostName $rule.ActionHostName
60+
Assert-AreEqual $slotName $rule.Name
61+
}
62+
finally
63+
{
64+
# Cleanup
65+
Remove-AzResourceGroup -Name $rgname -Force
66+
}
67+
}
68+
69+
<#
70+
.SYNOPSIS
71+
Tests Removing the given Routing Rule.
72+
#>
73+
function Test-RemoveWebAppTrafficRoutingRule
74+
{
75+
# Setup
76+
$ReroutePercentage="15"
77+
$rgname = Get-ResourceGroupName
78+
$appname = Get-WebsiteName
79+
$location = Get-Location
80+
$slotName = "staging"
81+
$planName = Get-WebHostPlanName
82+
$tier = "Standard"
83+
$resourceType = "Microsoft.Web/sites"
84+
try
85+
{
86+
#Setup
87+
New-AzResourceGroup -Name $rgname -Location $location
88+
$serverFarm = New-AzAppServicePlan -ResourceGroupName $rgname -Name $planName -Location $location -Tier $tier
89+
90+
# Create new web app
91+
$actual = New-AzWebApp -ResourceGroupName $rgname -Name $appname -Location $location -AppServicePlan $planName
92+
93+
# Assert
94+
Assert-AreEqual $appname $actual.Name
95+
Assert-AreEqual $serverFarm.Id $actual.ServerFarmId
96+
97+
# Create deployment slot
98+
$job = New-AzWebAppSlot -ResourceGroupName $rgname -Name $appname -Slot $slotName -AsJob
99+
$job | Wait-Job
100+
$slot = $job | Receive-Job
101+
102+
$appWithSlotName = "$appname/$slotName"
103+
104+
# Assert
105+
Assert-AreEqual $appWithSlotName $slot.Name
106+
Assert-AreEqual $serverFarm.Id $slot.ServerFarmId
107+
108+
#Add Routing Rule for $slot
109+
$rule=Add-AzWebAppTrafficRouting -ResourceGroupName $rgname -WebAppName $appname -RoutingRule @{ActionHostName=$slot.DefaultHostName;ReroutePercentage=$ReroutePercentage;Name=$slotName}
110+
111+
# Assert
112+
Assert-AreEqual $ReroutePercentage $rule.ReroutePercentage
113+
Assert-AreEqual $slot.DefaultHostName $rule.ActionHostName
114+
Assert-AreEqual $slotName $rule.Name
115+
116+
#remove
117+
$rule=Remove-AzWebAppTrafficRouting -ResourceGroupName $rgname -WebAppName $appname -RuleName $rule.Name
118+
119+
#Assert
120+
Assert-Null -eq $rule
121+
}
122+
finally
123+
{
124+
# Cleanup
125+
Remove-AzResourceGroup -Name $rgname -Force
126+
}
127+
}
128+
129+
<#
130+
.SYNOPSIS
131+
Tests Returns the given Routing Rule.
132+
#>
133+
function Test-GetWebAppTrafficRoutingRule
134+
{
135+
# Setup
136+
$ReroutePercentage="15"
137+
$rgname = Get-ResourceGroupName
138+
$appname = Get-WebsiteName
139+
$location = Get-Location
140+
$slotName = "staging"
141+
$planName = Get-WebHostPlanName
142+
$tier = "Standard"
143+
$resourceType = "Microsoft.Web/sites"
144+
try
145+
{
146+
#Setup
147+
New-AzResourceGroup -Name $rgname -Location $location
148+
$serverFarm = New-AzAppServicePlan -ResourceGroupName $rgname -Name $planName -Location $location -Tier $tier
149+
150+
# Create new web app
151+
$actual = New-AzWebApp -ResourceGroupName $rgname -Name $appname -Location $location -AppServicePlan $planName
152+
153+
# Assert
154+
Assert-AreEqual $appname $actual.Name
155+
Assert-AreEqual $serverFarm.Id $actual.ServerFarmId
156+
157+
# Create deployment slot
158+
$job = New-AzWebAppSlot -ResourceGroupName $rgname -Name $appname -Slot $slotName -AsJob
159+
$job | Wait-Job
160+
$slot = $job | Receive-Job
161+
162+
$appWithSlotName = "$appname/$slotName"
163+
164+
# Assert
165+
Assert-AreEqual $appWithSlotName $slot.Name
166+
Assert-AreEqual $serverFarm.Id $slot.ServerFarmId
167+
168+
#Add Routing Rule for $slot
169+
Add-AzWebAppTrafficRouting -ResourceGroupName $rgname -WebAppName $appname -RoutingRule @{ActionHostName=$slot.DefaultHostName;ReroutePercentage=$ReroutePercentage;Name=$slotName}
170+
#Get
171+
$rule= Get-AzWebAppTrafficRouting -ResourceGroupName $rgname -WebAppName $appname -RuleName $slotName
172+
173+
# Assert
174+
Assert-AreEqual $ReroutePercentage $rule.ReroutePercentage
175+
Assert-AreEqual $slot.DefaultHostName $rule.ActionHostName
176+
Assert-AreEqual $slotName $rule.Name
177+
}
178+
finally
179+
{
180+
# Cleanup
181+
Remove-AzResourceGroup -Name $rgname -Force
182+
}
183+
}
184+
185+
<#
186+
.SYNOPSIS
187+
Tests Updates the given Routing Rule.
188+
#>
189+
function Test-UpdateWebAppTrafficRoutingRule
190+
{
191+
# Setup
192+
$ReroutePercentage="15"
193+
$updatedReroutePercentage="20"
194+
$rgname = Get-ResourceGroupName
195+
$appname = Get-WebsiteName
196+
$location = Get-Location
197+
$slotName = "staging"
198+
$planName = Get-WebHostPlanName
199+
$tier = "Standard"
200+
$resourceType = "Microsoft.Web/sites"
201+
try
202+
{
203+
#Setup
204+
New-AzResourceGroup -Name $rgname -Location $location
205+
$serverFarm = New-AzAppServicePlan -ResourceGroupName $rgname -Name $planName -Location $location -Tier $tier
206+
207+
# Create new web app
208+
$actual = New-AzWebApp -ResourceGroupName $rgname -Name $appname -Location $location -AppServicePlan $planName
209+
210+
# Assert
211+
Assert-AreEqual $appname $actual.Name
212+
Assert-AreEqual $serverFarm.Id $actual.ServerFarmId
213+
214+
# Create deployment slot
215+
$job = New-AzWebAppSlot -ResourceGroupName $rgname -Name $appname -Slot $slotName -AsJob
216+
$job | Wait-Job
217+
$slot = $job | Receive-Job
218+
219+
$appWithSlotName = "$appname/$slotName"
220+
221+
# Assert
222+
Assert-AreEqual $appWithSlotName $slot.Name
223+
Assert-AreEqual $serverFarm.Id $slot.ServerFarmId
224+
225+
#Add Routing Rule for $slot
226+
$rule=Add-AzWebAppTrafficRouting -ResourceGroupName $rgname -WebAppName $appname -RoutingRule @{ActionHostName=$slot.DefaultHostName;ReroutePercentage=$ReroutePercentage;Name=$slotName}
227+
228+
# Assert
229+
Assert-AreEqual $ReroutePercentage $rule.ReroutePercentage
230+
Assert-AreEqual $slot.DefaultHostName $rule.ActionHostName
231+
Assert-AreEqual $slotName $rule.Name
232+
233+
#Update Routing Rule for $slot
234+
$rule=Update-AzWebAppTrafficRouting -ResourceGroupName $rgname -WebAppName $appname -RoutingRule @{ActionHostName=$slot.DefaultHostName;ReroutePercentage=$updatedReroutePercentage;Name=$slotName}
235+
236+
# Assert
237+
Assert-AreEqual $updatedReroutePercentage $rule.ReroutePercentage
238+
Assert-AreEqual $slot.DefaultHostName $rule.ActionHostName
239+
Assert-AreEqual $slotName $rule.Name
240+
}
241+
finally
242+
{
243+
# Cleanup
244+
Remove-AzResourceGroup -Name $rgname -Force
245+
}
246+
}

src/Websites/Websites.Test/SessionRecords/Microsoft.Azure.Commands.Websites.Test.ScenarioTests.RoutingRuleTests/TestAddWebAppTrafficRoutingRule.json

Lines changed: 3068 additions & 0 deletions
Large diffs are not rendered by default.

src/Websites/Websites.Test/SessionRecords/Microsoft.Azure.Commands.Websites.Test.ScenarioTests.RoutingRuleTests/TestGetWebAppTrafficRoutingRule.json

Lines changed: 3416 additions & 0 deletions
Large diffs are not rendered by default.

src/Websites/Websites.Test/SessionRecords/Microsoft.Azure.Commands.Websites.Test.ScenarioTests.RoutingRuleTests/TestRemoveWebAppTrafficRoutingRule.json

Lines changed: 3614 additions & 0 deletions
Large diffs are not rendered by default.

src/Websites/Websites.Test/SessionRecords/Microsoft.Azure.Commands.Websites.Test.ScenarioTests.RoutingRuleTests/TestUpdateWebAppTrafficRoutingRule.json

Lines changed: 3494 additions & 0 deletions
Large diffs are not rendered by default.

src/Websites/Websites.Test/Websites.Test.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@
2121
<None Update="ScenarioTests\Resources\nodejs-sample.zip">
2222
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
2323
</None>
24+
<None Update="ScenarioTests\RoutingRuleTests.ps1">
25+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
26+
</None>
2427
</ItemGroup>
2528

2629
<ItemGroup>

src/Websites/Websites/Az.Websites.psd1

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,11 @@ CmdletsToExport = 'Get-AzAppServicePlan', 'Set-AzAppServicePlan',
100100
'Publish-AzWebApp', 'Get-AzWebAppAccessRestrictionConfig',
101101
'Add-AzWebAppAccessRestrictionRule',
102102
'Remove-AzWebAppAccessRestrictionRule',
103-
'Update-AzWebAppAccessRestrictionConfig'
103+
'Update-AzWebAppAccessRestrictionConfig',
104+
'Add-AzWebAppTrafficRouting',
105+
'Remove-AzWebAppTrafficRouting',
106+
'Get-AzWebAppTrafficRouting',
107+
'Update-AzWebAppTrafficRouting'
104108

105109
# Variables to export from this module
106110
# VariablesToExport = @()

src/Websites/Websites/ChangeLog.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,11 @@
1818
- Additional information about change #1
1919
-->
2020
## Upcoming Release
21+
* Added support for working with webapp Traffic Routing Rules via below new cmdlets
22+
- `Get-AzWebAppTrafficRouting`
23+
- `Update-AzWebAppTrafficRouting`
24+
- `Add-AzWebAppTrafficRouting`
25+
- `Remove-AzWebAppTrafficRouting`
2126

2227
## Version 1.7.0
2328
* Added Tag parameter for `New-AzAppServicePlan` and `Set-AzAppServicePlan`

0 commit comments

Comments
 (0)