Skip to content

Commit ec29a9e

Browse files
author
Shyam Dharmarajan
committed
Vwan: Use hubvnet CRUD api in virtual hub too
This retains backward compatibility with the existing virtual hub APIs. Also add a deprecation warning to remove specifying virtualnetwork connections in virtual hub.
1 parent 30533a9 commit ec29a9e

File tree

3 files changed

+83
-33
lines changed

3 files changed

+83
-33
lines changed

src/Network/Network/Cortex/VirtualHub/NewAzureRmVirtualHubCommand.cs

Lines changed: 8 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ namespace Microsoft.Azure.Commands.Network
2828
using Microsoft.Azure.Commands.ResourceManager.Common.ArgumentCompleters;
2929
using System.Linq;
3030
using Microsoft.Azure.Management.Internal.Resources.Utilities.Models;
31+
using Microsoft.WindowsAzure.Commands.Common.CustomAttributes;
3132

3233
[Cmdlet(VerbsCommon.New,
3334
ResourceManager.Common.AzureRMConstants.AzureRMPrefix + "VirtualHub",
@@ -78,6 +79,8 @@ public class NewAzureRmVirtualHubCommand : VirtualHubBaseCmdlet
7879
[ValidateNotNullOrEmpty]
7980
public string Location { get; set; }
8081

82+
public const String ChangeDesc = "VirtualNetworkConnection parameter is deprecated. Use AzVirtualHubVnet commands";
83+
[CmdletParameterBreakingChange("HubVnetConnection", ChangeDescription = ChangeDesc)]
8184
[Parameter(
8285
Mandatory = false,
8386
HelpMessage = "The hub virtual network connections associated with this Virtual Hub.")]
@@ -152,34 +155,21 @@ public override void Execute()
152155
Location = this.Location
153156
};
154157

155-
virtualHub.VirtualNetworkConnections = new List<PSHubVirtualNetworkConnection>();
158+
virtualHub.RouteTable = this.RouteTable;
159+
virtualHub.RouteTables = new List<PSVirtualHubRouteTable>();
160+
156161
if (this.HubVnetConnection != null)
157162
{
163+
virtualHub.VirtualNetworkConnections = new List<PSHubVirtualNetworkConnection>();
158164
virtualHub.VirtualNetworkConnections.AddRange(this.HubVnetConnection);
159-
160-
// get auth headers for cross-tenant hubvnet conn
161-
List<string> resourceIds = new List<string>();
162-
foreach (var connection in this.HubVnetConnection)
163-
{
164-
resourceIds.Add(connection.RemoteVirtualNetwork.Id);
165-
}
166-
167-
var auxHeaderDictionary = GetAuxilaryAuthHeaderFromResourceIds(resourceIds);
168-
if (auxHeaderDictionary != null && auxHeaderDictionary.Count > 0)
169-
{
170-
auxAuthHeader = new Dictionary<string, List<string>>(auxHeaderDictionary);
171-
}
172165
}
173166

174-
virtualHub.RouteTable = this.RouteTable;
175-
virtualHub.RouteTables = new List<PSVirtualHubRouteTable>();
176-
177167
if (string.IsNullOrWhiteSpace(this.Sku))
178168
{
179169
virtualHub.Sku = "Standard";
180170
}
181171

182-
WriteObject(this.CreateOrUpdateVirtualHub(
172+
WriteObject(CreateOrUpdateVirtualHub(
183173
this.ResourceGroupName,
184174
this.Name,
185175
virtualHub,

src/Network/Network/Cortex/VirtualHub/UpdateAzureRmVirtualHubCommand.cs

Lines changed: 29 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ namespace Microsoft.Azure.Commands.Network
2828
using Microsoft.Azure.Commands.ResourceManager.Common.ArgumentCompleters;
2929
using System.Linq;
3030
using Microsoft.Azure.Management.Internal.Resources.Utilities.Models;
31+
using Microsoft.WindowsAzure.Commands.Common.CustomAttributes;
3132

3233
[Cmdlet("Update",
3334
ResourceManager.Common.AzureRMConstants.AzureRMPrefix + "VirtualHub",
@@ -77,6 +78,8 @@ public class UpdateAzureRmVirtualHubCommand : VirtualHubBaseCmdlet
7778
HelpMessage = "The address space string for this virtual hub.")]
7879
public string AddressPrefix { get; set; }
7980

81+
public const String ChangeDesc = "VirtualNetworkConnection parameter is deprecated. Use AzVirtualHubVnet commands";
82+
[CmdletParameterBreakingChange("HubVnetConnection", ChangeDescription = ChangeDesc)]
8083
[Parameter(
8184
Mandatory = false,
8285
HelpMessage = "The hub virtual network connections associated with this Virtual Hub.")]
@@ -139,23 +142,29 @@ public override void Execute()
139142
}
140143

141144
//// HubVirtualNetworkConnections
145+
List<PSHubVirtualNetworkConnection> hubVnetConnectionList = null;
142146
if (this.HubVnetConnection != null)
143147
{
144-
virtualHubToUpdate.VirtualNetworkConnections = new List<PSHubVirtualNetworkConnection>();
145-
virtualHubToUpdate.VirtualNetworkConnections.AddRange(this.HubVnetConnection);
146-
147-
// get auth headers for cross-tenant hubvnet conn
148-
List<string> resourceIds = new List<string>();
149-
foreach (var connection in this.HubVnetConnection)
148+
// Simulate behavior of old API to clear all existing connections not in new request and then add new ones
149+
if (virtualHubToUpdate.VirtualNetworkConnections != null)
150150
{
151-
resourceIds.Add(connection.RemoteVirtualNetwork.Id);
151+
foreach (var connection in virtualHubToUpdate.VirtualNetworkConnections)
152+
{
153+
if (!this.HubVnetConnection.Any(conn => conn.Name == connection.Name))
154+
{
155+
this.HubVnetConnectionCmdlet.HubVirtualNetworkConnectionsClient.Delete(this.ResourceGroupName, this.Name, connection.Name);
156+
}
157+
}
152158
}
153159

154-
var auxHeaderDictionary = GetAuxilaryAuthHeaderFromResourceIds(resourceIds);
155-
if (auxHeaderDictionary != null && auxHeaderDictionary.Count > 0)
156-
{
157-
auxAuthHeader = new Dictionary<string, List<string>>(auxHeaderDictionary);
158-
}
160+
virtualHubToUpdate.VirtualNetworkConnections = new List<PSHubVirtualNetworkConnection>();
161+
virtualHubToUpdate.VirtualNetworkConnections.AddRange(this.HubVnetConnection);
162+
}
163+
else
164+
{
165+
// optimization to avoid unnecessary put on hubvnet connections
166+
hubVnetConnectionList = virtualHubToUpdate.VirtualNetworkConnections;
167+
virtualHubToUpdate.VirtualNetworkConnections = null;
159168
}
160169

161170
//// VirtualHubRouteTable
@@ -176,12 +185,18 @@ public override void Execute()
176185
() =>
177186
{
178187
WriteVerbose(String.Format(Properties.Resources.UpdatingLongRunningOperationMessage, this.ResourceGroupName, this.Name));
179-
WriteObject(this.CreateOrUpdateVirtualHub(
188+
var hubToReturn = this.CreateOrUpdateVirtualHub(
180189
this.ResourceGroupName,
181190
this.Name,
182191
virtualHubToUpdate,
183192
this.Tag,
184-
auxAuthHeader));
193+
auxAuthHeader);
194+
if (hubVnetConnectionList != null)
195+
{
196+
// patch back the hubvnet connection for backward compatibility
197+
hubToReturn.VirtualNetworkConnections = hubVnetConnectionList;
198+
}
199+
WriteObject(hubToReturn);
185200
});
186201
}
187202
}

src/Network/Network/Cortex/VirtualHub/VirtualHubBaseCmdlet.cs

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,20 @@ namespace Microsoft.Azure.Commands.Network
2626

2727
public class VirtualHubBaseCmdlet : NetworkBaseCmdlet
2828
{
29+
private HubVnetConnectionBaseCmdlet hubVnetConnectionBaseCmdlet;
30+
31+
public HubVnetConnectionBaseCmdlet HubVnetConnectionCmdlet
32+
{
33+
get
34+
{
35+
if (hubVnetConnectionBaseCmdlet == null)
36+
{
37+
hubVnetConnectionBaseCmdlet = new HubVnetConnectionBaseCmdlet();
38+
}
39+
return hubVnetConnectionBaseCmdlet;
40+
}
41+
}
42+
2943
public IVirtualHubsOperations VirtualHubClient
3044
{
3145
get
@@ -49,9 +63,10 @@ public PSVirtualHub GetVirtualHub(string resourceGroupName, string name)
4963
{
5064
//// The following code will throw if resource is not found
5165
MNM.VirtualHub virtualHub = this.VirtualHubClient.Get(resourceGroupName, name);
52-
5366
PSVirtualHub psVirtualHub = ToPsVirtualHub(virtualHub);
5467
psVirtualHub.ResourceGroupName = resourceGroupName;
68+
psVirtualHub.VirtualNetworkConnections = this.HubVnetConnectionCmdlet.ListHubVnetConnections(resourceGroupName, name);
69+
5570
return psVirtualHub;
5671
}
5772
catch (Exception ex)
@@ -73,6 +88,8 @@ public bool IsVirtualHubPresent(string resourceGroupName, string name)
7388

7489
public PSVirtualHub CreateOrUpdateVirtualHub(string resourceGroupName, string virtualHubName, PSVirtualHub virtualHub, Hashtable tags, Dictionary<string, List<string>> customHeaders = null)
7590
{
91+
var psHubVnetConnections = virtualHub.VirtualNetworkConnections;
92+
virtualHub.VirtualNetworkConnections = null;
7693
var virtualHubModel = NetworkResourceManagerProfile.Mapper.Map<MNM.VirtualHub>(virtualHub);
7794
virtualHubModel.Location = virtualHub.Location;
7895
virtualHubModel.Tags = TagsConversionHelper.CreateTagDictionary(tags, validate: true);
@@ -94,6 +111,32 @@ public PSVirtualHub CreateOrUpdateVirtualHub(string resourceGroupName, string vi
94111
PSVirtualHub hubToReturn = this.ToPsVirtualHub(virtualHubCreatedOrUpdated);
95112
hubToReturn.ResourceGroupName = resourceGroupName;
96113

114+
if (psHubVnetConnections == null)
115+
{
116+
return hubToReturn;
117+
}
118+
119+
// Crud operation on the vnet connections
120+
hubToReturn.VirtualNetworkConnections = new List<PSHubVirtualNetworkConnection>();
121+
122+
foreach (var psConnection in psHubVnetConnections)
123+
{
124+
var hubVnetConnnection = NetworkResourceManagerProfile.Mapper.Map<MNM.HubVirtualNetworkConnection>(psConnection);
125+
// get auth headers for cross-tenant hubvnet conn
126+
List<string> resourceIds = new List<string>();
127+
resourceIds.Add(psConnection.RemoteVirtualNetwork.Id);
128+
129+
var auxHeaderDictionary = GetAuxilaryAuthHeaderFromResourceIds(resourceIds);
130+
Dictionary<string, List<string>> auxAuthHeader = null;
131+
if (auxHeaderDictionary != null && auxHeaderDictionary.Count > 0)
132+
{
133+
auxAuthHeader = new Dictionary<string, List<string>>(auxHeaderDictionary);
134+
}
135+
136+
var psConnectionReturn = this.HubVnetConnectionCmdlet.CreateOrUpdateHubVirtualNetworkConnection(resourceGroupName, virtualHubName, psConnection.Name, hubVnetConnnection, customHeaders);
137+
hubToReturn.VirtualNetworkConnections.Add(psConnectionReturn);
138+
}
139+
97140
return hubToReturn;
98141
}
99142

@@ -110,6 +153,8 @@ public List<PSVirtualHub> ListVirtualHubs(string resourceGroupName)
110153
{
111154
PSVirtualHub virtualHubToReturn = ToPsVirtualHub(virtualHub);
112155
virtualHubToReturn.ResourceGroupName = NetworkBaseCmdlet.GetResourceGroup(virtualHub.Id);
156+
virtualHubToReturn.VirtualNetworkConnections = this.HubVnetConnectionCmdlet.ListHubVnetConnections(resourceGroupName, virtualHub.Name);
157+
113158
hubsToReturn.Add(virtualHubToReturn);
114159
}
115160
}

0 commit comments

Comments
 (0)