Skip to content

Commit 17b6a03

Browse files
authored
Merge pull request #6043 from taiwu/taiwu-gw-424
[Azure Analysis Services] Enable associate/dissociate gateway with AS.
2 parents ca5a272 + f008839 commit 17b6a03

20 files changed

+338
-124
lines changed

src/ResourceManager/AnalysisServices/ChangeLog.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
- Additional information about change #1
1919
-->
2020
## Current Release
21+
* Enable Gateway assocaite/disassociate operations on AS.
2122

2223
## Version 0.6.7
2324
* Set minimum dependency of module to PowerShell 5.0

src/ResourceManager/AnalysisServices/Commands.AnalysisServices.Test/ScenarioTests/AsTests.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,5 +93,13 @@ public void TestAnalysisServicesServerLoginWithSPN()
9393
{
9494
NewInstance.RunPsTest("Test-AnalysisServicesServerLoginWithSPN");
9595
}
96+
97+
[Fact]
98+
[Trait(Category.RunType, Category.LiveOnly)]
99+
public void TestAnalysisServicesServerGateway()
100+
{
101+
NewInstance.RunPsTest("Test-AnalysisServicesServerGateway");
102+
}
103+
96104
}
97105
}

src/ResourceManager/AnalysisServices/Commands.AnalysisServices.Test/ScenarioTests/AsTests.ps1

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -611,4 +611,40 @@ function Test-AnalysisServicesServerLoginWithSPN
611611
{
612612

613613
}
614+
}
615+
616+
<#
617+
.SYNOPSIS
618+
Tests Analysis Services server gateway scenarios (associate/dissociate).
619+
The assocaited gateway is a unified gateway, which required pre-setup.
620+
1. Install on-premise gateway on target host https://www.microsoft.com/en-us/download/details.aspx?id=53127
621+
2. Follow installation instruction to create azure on-premise gateway resource associating to the host.
622+
Afterward, use the gateway resource to associate with the AAS for testing.
623+
#>
624+
function Test-AnalysisServicesServerGateway
625+
{
626+
try
627+
{
628+
# Creating server
629+
$location = Get-Location
630+
$resourceGroupName = Get-ResourceGroupName
631+
$serverName = Get-AnalysisServicesServerName
632+
$gatewayName = $env:GATEWAY_NAME
633+
$gateway = Get-AzureRmResource -ResourceName $gatewayName -ResourceGroupName $resourceGroupName
634+
$serverCreated = New-AzureRmAnalysisServicesServer -ResourceGroupName $resourceGroupName -Name $serverName -Location $location -Sku S0 -GatewayResourceId $gateway.ResourceId -PassThru
635+
636+
Assert-True {$serverCreated.ProvisioningState -like "Succeeded"}
637+
Assert-True {$serverCreated.State -like "Succeeded"}
638+
Assert-AreEqual $gateway.ResourceId $serverCreated.GatewayDetails.GatewayResourceId
639+
640+
# Dissociate gateway from server
641+
$serverUpdated = Set-AzureRmAnalysisServicesServer -ResourceGroupName $resourceGroupName -Name $serverName -DisassociateGateway -PassThru
642+
Assert-True {[string]::IsNullOrEmpty($serverUpdated.GatewayDetails.GatewayResourceId)}
643+
}
644+
finally
645+
{
646+
# cleanup the resource group that was used in case it still exists. This is a best effort task, we ignore failures here.
647+
Invoke-HandledCmdlet -Command {Remove-AzureRmAnalysisServicesServer -ResourceGroupName $resourceGroupName -Name $serverName -ErrorAction SilentlyContinue} -IgnoreFailures
648+
Invoke-HandledCmdlet -Command {Remove-AzureRmResourceGroup -Name $resourceGroupName -ErrorAction SilentlyContinue} -IgnoreFailures
649+
}
614650
}

src/ResourceManager/AnalysisServices/Commands.AnalysisServices/Commands.AnalysisServices.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
<Compile Include="Models\PsAzureAnalysisServicesFirewallRule.cs" />
5656
<Compile Include="Models\AzureAnalysisServicesServer.cs" />
5757
<Compile Include="Models\ServerSku.cs" />
58+
<Compile Include="Models\ServerGateway.cs" />
5859
<Compile Include="Models\StringOrByteArrayInstance.cs" />
5960
<Compile Include="Properties\AssemblyInfo.cs" />
6061
<Compile Include="Properties\Resources.Designer.cs">

src/ResourceManager/AnalysisServices/Commands.AnalysisServices/Commands/NewAzureRmAnalysisServicesServer.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,10 @@ public class NewAnalysisServicesServer : AnalysisServicesCmdletBase
8282
HelpMessage = "Firewall configuration")]
8383
public PsAzureAnalysisServicesFirewallConfig FirewallConfig { get; set; }
8484

85+
[Parameter(ValueFromPipelineByPropertyName = true, Mandatory = false,
86+
HelpMessage = "Gateway resource ID")]
87+
public string GatewayResourceId { get; set; }
88+
8589
public override void ExecuteCmdlet()
8690
{
8791
if (ShouldProcess(Name, Resources.CreateNewAnalysisServicesServer))
@@ -144,7 +148,7 @@ public override void ExecuteCmdlet()
144148
ReadonlyReplicaCount = 0;
145149
}
146150

147-
var createdServer = AnalysisServicesClient.CreateOrUpdateServer(ResourceGroupName, Name, Location, Sku, Tag, Administrator, null, BackupBlobContainerUri, ReadonlyReplicaCount, DefaultConnectionMode, setting);
151+
var createdServer = AnalysisServicesClient.CreateOrUpdateServer(ResourceGroupName, Name, Location, Sku, Tag, Administrator, null, BackupBlobContainerUri, ReadonlyReplicaCount, DefaultConnectionMode, setting, GatewayResourceId);
148152
WriteObject(AzureAnalysisServicesServer.FromAnalysisServicesServer(createdServer));
149153
}
150154
}

src/ResourceManager/AnalysisServices/Commands.AnalysisServices/Commands/SetAzureRmAnalysisServicesServer.cs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ public class SetAzureAnalysisServicesServer : AnalysisServicesCmdletBase
3131
{
3232
private const string ParamSetDefault = "Default";
3333
private const string ParamSetDisableBackup = "DisableBackup";
34+
private const string ParamSetDisassociatGateway = "DisassociateGateway";
3435

3536
[Parameter(ValueFromPipelineByPropertyName = true, Position = 0, Mandatory = true,
3637
HelpMessage = "Name of the server.")]
@@ -88,6 +89,16 @@ public int ReadonlyReplicaCount
8889
HelpMessage = "Firewall configuration")]
8990
public PsAzureAnalysisServicesFirewallConfig FirewallConfig { get; set; }
9091

92+
[Parameter(ValueFromPipelineByPropertyName = true, Mandatory = false,
93+
ParameterSetName = ParamSetDefault,
94+
HelpMessage = "Gateway resource ID")]
95+
public string GatewayResourceId { get; set; }
96+
97+
[Parameter(ValueFromPipelineByPropertyName = true, Mandatory = false,
98+
ParameterSetName = ParamSetDisassociatGateway,
99+
HelpMessage = "Disassociate current gateway")]
100+
public SwitchParameter DisassociateGateway { get; set; }
101+
91102
public override void ExecuteCmdlet()
92103
{
93104
if (string.IsNullOrEmpty(Name))
@@ -147,7 +158,12 @@ public override void ExecuteCmdlet()
147158
ReadonlyReplicaCount = -1;
148159
}
149160

150-
AnalysisServicesServer updatedServer = AnalysisServicesClient.CreateOrUpdateServer(ResourceGroupName, Name, location, Sku, Tag, Administrator, currentServer, BackupBlobContainerUri, ReadonlyReplicaCount, DefaultConnectionMode, setting);
161+
if (DisassociateGateway.IsPresent)
162+
{
163+
GatewayResourceId = AnalysisServicesClient.DissasociateGateway;
164+
}
165+
166+
AnalysisServicesServer updatedServer = AnalysisServicesClient.CreateOrUpdateServer(ResourceGroupName, Name, location, Sku, Tag, Administrator, currentServer, BackupBlobContainerUri, ReadonlyReplicaCount, DefaultConnectionMode, setting, GatewayResourceId);
151167

152168
if(PassThru.IsPresent)
153169
{

src/ResourceManager/AnalysisServices/Commands.AnalysisServices/Models/AnalysisServicesClient.cs

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ public class AnalysisServicesClient
3333
private readonly AnalysisServicesManagementClient _client;
3434
private readonly Guid _subscriptionId;
3535
private readonly string _currentUser;
36+
public const string DissasociateGateway = "-";
3637

3738
public AnalysisServicesClient(IAzureContext context)
3839
{
@@ -65,7 +66,8 @@ public AnalysisServicesServer CreateOrUpdateServer(
6566
string backupBlobContainerUri = null,
6667
int ReadonlyReplicaCount = 0,
6768
string DefaultConnectionMode = null,
68-
IPv4FirewallSettings setting = null)
69+
IPv4FirewallSettings setting = null,
70+
string gatewayResourceId = null)
6971
{
7072
if (string.IsNullOrEmpty(resourceGroupName))
7173
{
@@ -87,6 +89,16 @@ public AnalysisServicesServer CreateOrUpdateServer(
8789
}
8890
}
8991

92+
GatewayDetails gatewayDetails = null;
93+
if (gatewayResourceId == DissasociateGateway)
94+
{
95+
gatewayDetails = new GatewayDetails();
96+
}
97+
else if (gatewayResourceId != null)
98+
{
99+
gatewayDetails = new GatewayDetails(gatewayResourceId);
100+
}
101+
90102
AnalysisServicesServer newOrUpdatedServer = null;
91103
if (existingServer != null)
92104
{
@@ -121,6 +133,11 @@ public AnalysisServicesServer CreateOrUpdateServer(
121133
updateParameters.IpV4FirewallSettings = setting;
122134
}
123135

136+
if (gatewayDetails != null)
137+
{
138+
updateParameters.GatewayDetails = gatewayDetails;
139+
}
140+
124141
newOrUpdatedServer = _client.Servers.Update(resourceGroupName, serverName, updateParameters);
125142
}
126143
else
@@ -131,6 +148,11 @@ public AnalysisServicesServer CreateOrUpdateServer(
131148
connectionMode = (ConnectionMode)Enum.Parse(typeof(ConnectionMode), DefaultConnectionMode, true);
132149
}
133150

151+
if (adminList.Count == 0)
152+
{
153+
adminList.Add(_currentUser);
154+
}
155+
134156
newOrUpdatedServer = _client.Servers.Create(
135157
resourceGroupName,
136158
serverName,
@@ -142,8 +164,9 @@ public AnalysisServicesServer CreateOrUpdateServer(
142164
Sku = GetResourceSkuFromName(skuName, ReadonlyReplicaCount + 1),
143165
Tags = tags,
144166
QuerypoolConnectionMode = connectionMode,
145-
IpV4FirewallSettings = setting
146-
});
167+
IpV4FirewallSettings = setting,
168+
GatewayDetails = gatewayDetails
169+
});
147170
}
148171

149172
return newOrUpdatedServer;
@@ -264,5 +287,5 @@ public void ResumeServer(string resourceGroupName, string serverName)
264287
}
265288

266289
#endregion
267-
}
290+
}
268291
}

src/ResourceManager/AnalysisServices/Commands.AnalysisServices/Models/AzureAnalysisServicesServer.cs

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,9 @@ public class AzureAnalysisServicesServer
4747

4848
public PsAzureAnalysisServicesFirewallConfig FirewallConfig { get; set; }
4949

50-
internal static AzureAnalysisServicesServerDetail FromAnalysisServicesServer(AnalysisServicesServer server)
50+
public ServerGateway GatewayInfo { get; set; }
51+
52+
internal static AzureAnalysisServicesServer FromAnalysisServicesServer(AnalysisServicesServer server)
5153
{
5254
if (server == null)
5355
{
@@ -77,7 +79,7 @@ internal static AzureAnalysisServicesServerDetail FromAnalysisServicesServer(Ana
7779
config = new PsAzureAnalysisServicesFirewallConfig(enablePowerBIService, rules);
7880
}
7981

80-
return new AzureAnalysisServicesServerDetail()
82+
return new AzureAnalysisServicesServer()
8183
{
8284
AsAdministrators = server.AsAdministrators == null
8385
? new List<string>()
@@ -89,29 +91,25 @@ internal static AzureAnalysisServicesServerDetail FromAnalysisServicesServer(Ana
8991
ProvisioningState = server.ProvisioningState,
9092
Id = server.Id,
9193
ServerFullName = server.ServerFullName,
92-
Sku = server.Sku != null ? ServerSku.FromResourceSku(server.Sku) : new Dictionary<string, string>(),
94+
Sku = server.Sku != null ? ServerSku.FromResourceSku(server.Sku) : new ServerSku(),
9395
Tag = server.Tags != null ? new Dictionary<string, string>(server.Tags) : new Dictionary<string, string>(),
9496
BackupBlobContainerUri = server.BackupBlobContainerUri == null ? String.Empty : server.BackupBlobContainerUri,
9597
DefaultConnectionMode = server.QuerypoolConnectionMode.ToString(),
96-
FirewallConfig = config
98+
FirewallConfig = config,
99+
GatewayInfo = server.GatewayDetails != null ? ServerGateway.FromResourceGateway(server.GatewayDetails) : null
97100
};
98101
}
99102

100-
internal static List<AzureAnalysisServicesServerDetail> FromAnalysisServicesServerCollection(List<AnalysisServicesServer> list)
103+
internal static List<AzureAnalysisServicesServer> FromAnalysisServicesServerCollection(List<AnalysisServicesServer> list)
101104
{
102105
if (list == null)
103106
{
104107
return null;
105108
}
106109

107-
var listAzureAnalysisServicesServer = new List<AzureAnalysisServicesServerDetail>();
110+
var listAzureAnalysisServicesServer = new List<AzureAnalysisServicesServer>();
108111
list.ForEach(server => listAzureAnalysisServicesServer.Add(FromAnalysisServicesServer(server)));
109112
return listAzureAnalysisServicesServer;
110113
}
111114
}
112-
113-
public class AzureAnalysisServicesServerDetail : AzureAnalysisServicesServer
114-
{
115-
public new System.Collections.Generic.IDictionary<string, string> Sku { get; set; }
116-
}
117115
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
using System.Threading.Tasks;
6+
using Microsoft.Azure.Management.Analysis.Models;
7+
8+
namespace Microsoft.Azure.Commands.AnalysisServices.Models
9+
{
10+
public class ServerGateway
11+
{
12+
public string GatewayResourceId { get; set; }
13+
14+
public string GatewayObjectId { get; set; }
15+
16+
public string DmtsClusterUri { get; set; }
17+
18+
internal static ServerGateway FromResourceGateway(GatewayDetails resourceGateway)
19+
{
20+
return new ServerGateway()
21+
{
22+
GatewayResourceId = resourceGateway.GatewayResourceId,
23+
GatewayObjectId = resourceGateway.GatewayObjectId != null ? resourceGateway.GatewayObjectId : null,
24+
DmtsClusterUri = resourceGateway.DmtsClusterUri != null ? resourceGateway.DmtsClusterUri : null
25+
};
26+
}
27+
}
28+
}

src/ResourceManager/AnalysisServices/Commands.AnalysisServices/Models/ServerSku.cs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,14 @@ public class ServerSku
1515

1616
public int Capacity { get; set; }
1717

18-
internal static Dictionary<string, string> FromResourceSku(ResourceSku resourceSku)
18+
internal static ServerSku FromResourceSku(ResourceSku resourceSku)
1919
{
20-
Dictionary<string, string> sku = new Dictionary<string, string>();
21-
sku["Name"] = resourceSku.Name;
22-
sku["Tier"] = resourceSku.Tier;
23-
sku["Capacity"] = resourceSku.Capacity == null ? "1" : resourceSku.Capacity.Value.ToString();
24-
return sku;
20+
return new ServerSku()
21+
{
22+
Name = resourceSku.Name,
23+
Tier = resourceSku.Tier,
24+
Capacity = resourceSku.Capacity == null ? 1 : resourceSku.Capacity.Value
25+
};
2526
}
2627
}
2728
}

src/ResourceManager/AnalysisServices/Commands.AnalysisServices/help/AzureRM.AnalysisServices.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
---
1+
---
22
Module Name: AzureRM.AnalysisServices
33
Module Guid: acace26c-1775-4100-85c0-20c4d71eaa21
44
Download Help Link: https://docs.microsoft.com/en-us/powershell/module/azurerm.analysisservices
@@ -14,6 +14,12 @@ This topic displays help topics for the Azure AnalysisServices cmdlets.
1414
### [Get-AzureRmAnalysisServicesServer](Get-AzureRmAnalysisServicesServer.md)
1515
Gets the details of an Analysis Services server.
1616

17+
### [New-AzureRmAnalysisServicesFirewallConfig](New-AzureRmAnalysisServicesFirewallConfig.md)
18+
Creates a new Analysis Services firewall config
19+
20+
### [New-AzureRmAnalysisServicesFirewallRule](New-AzureRmAnalysisServicesFirewallRule.md)
21+
Creates a new Analysis Services firewall rule
22+
1723
### [New-AzureRmAnalysisServicesServer](New-AzureRmAnalysisServicesServer.md)
1824
Creates a new Analysis Services server
1925

@@ -32,9 +38,3 @@ Suspends an instance of Analysis Services server
3238
### [Test-AzureRmAnalysisServicesServer](Test-AzureRmAnalysisServicesServer.md)
3339
Tests the existence of an instance of Analysis Services server
3440

35-
### [New-AzureRmAnalysisServicesFirewallConfig](New-AzureRmAnalysisServicesFirewallConfig.md)
36-
Creates a new firewall config for Analysis Services server
37-
38-
### [New-AzureRmAnalysisServicesFirewallRule](New-AzureRmAnalysisServicesFirewallRule.md)
39-
Creates a new firewall rule for Analysis Services server
40-

src/ResourceManager/AnalysisServices/Commands.AnalysisServices/help/Get-AzureRmAnalysisServicesServer.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
---
1+
---
22
external help file: Microsoft.Azure.Commands.AnalysisServices.dll-Help.xml
33
Module Name: AzureRM.AnalysisServices
44
online version: https://docs.microsoft.com/en-us/powershell/module/azurerm.analysisservices/get-azurermanalysisservicesserver

0 commit comments

Comments
 (0)