Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Pass auth headers for virtualHubVnetConnection support across different tenants #11237

Merged
merged 6 commits into from
Mar 11, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions src/Network/Network/ChangeLog.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,11 @@
--->

## Upcoming Release
* Updated cmdlets to allow cross-tenant VirtualHubVnetConnections
- New-AzVirtualHubVnetConnection
- Update-AzVirtualHubVnetConnection
- New-AzVirtualHub
- Update-AzVirtualHub

## Version 2.3.1
* Added one extra parameter note for parameter `-EnableProxyProtocol` for `New-AzPrivateLinkService` cmdlet.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,8 @@ public class NewHubVirtualNetworkConnectionCommand : HubVnetConnectionBaseCmdlet
public override void Execute()
{
base.Execute();

Dictionary<string, List<string>> auxAuthHeader = null;

if (ParameterSetName.Contains(CortexParameterSetNames.ByVirtualHubObject))
{
this.ResourceGroupName = this.ParentObject.ResourceGroupName;
Expand Down Expand Up @@ -182,6 +183,14 @@ public override void Execute()
parentVirtualHub.VirtualNetworkConnections = new List<PSHubVirtualNetworkConnection>();
}

List<string> resourceIds = new List<string>();
resourceIds.Add(hubVnetConnection.RemoteVirtualNetwork.Id);
var auxHeaderDictionary = GetAuxilaryAuthHeaderFromResourceIds(resourceIds);
if (auxHeaderDictionary != null && auxHeaderDictionary.Count > 0)
{
auxAuthHeader = new Dictionary<string, List<string>>(auxHeaderDictionary);
}

parentVirtualHub.VirtualNetworkConnections.Add(hubVnetConnection);

ConfirmAction(
Expand All @@ -190,7 +199,7 @@ public override void Execute()
() =>
{
WriteVerbose(String.Format(Properties.Resources.CreatingLongRunningOperationMessage, this.ResourceGroupName, this.Name));
this.CreateOrUpdateVirtualHub(this.ResourceGroupName, this.ParentResourceName, parentVirtualHub, parentVirtualHub.Tag);
this.CreateOrUpdateVirtualHub(this.ResourceGroupName, this.ParentResourceName, parentVirtualHub, parentVirtualHub.Tag, auxAuthHeader);
var createdVirtualHub = this.GetVirtualHub(this.ResourceGroupName, this.ParentResourceName);

WriteObject(createdVirtualHub.VirtualNetworkConnections.FirstOrDefault(hubConnection => hubConnection.Name.Equals(this.Name, StringComparison.OrdinalIgnoreCase)));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@ public class UpdateAzureRmHubVirtualNetworkConnectionCommand : HubVnetConnection
public override void Execute()
{
base.Execute();
Dictionary<string, List<string>> auxAuthHeader = null;

//// Resolve the VirtualHub
if (ParameterSetName.Equals(CortexParameterSetNames.ByHubVirtualNetworkConnectionObject, StringComparison.OrdinalIgnoreCase))
Expand Down Expand Up @@ -127,12 +128,20 @@ public override void Execute()
connectionToModify.EnableInternetSecurity = this.EnableInternetSecurity.Value;
}

List<string> resourceIds = new List<string>();
resourceIds.Add(connectionToModify.RemoteVirtualNetwork.Id);
var auxHeaderDictionary = GetAuxilaryAuthHeaderFromResourceIds(resourceIds);
if (auxHeaderDictionary != null && auxHeaderDictionary.Count > 0)
{
auxAuthHeader = new Dictionary<string, List<string>>(auxHeaderDictionary);
}

ConfirmAction(
Properties.Resources.SettingResourceMessage,
this.Name,
() =>
{
this.CreateOrUpdateVirtualHub(this.ResourceGroupName, this.ParentResourceName, parentVirtualHub, parentVirtualHub.Tag);
this.CreateOrUpdateVirtualHub(this.ResourceGroupName, this.ParentResourceName, parentVirtualHub, parentVirtualHub.Tag, auxAuthHeader);
var updatedVirtualHub = this.GetVirtualHub(this.ResourceGroupName, this.ParentResourceName);

WriteObject(updatedVirtualHub.VirtualNetworkConnections.FirstOrDefault(hubConnection => hubConnection.Name.Equals(this.Name, StringComparison.OrdinalIgnoreCase)));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,7 @@ public class NewAzureRmVirtualHubCommand : VirtualHubBaseCmdlet
public override void Execute()
{
base.Execute();
Dictionary<string, List<string>> auxAuthHeader = null;

if (this.IsVirtualHubPresent(this.ResourceGroupName, this.Name))
{
Expand Down Expand Up @@ -155,6 +156,19 @@ public override void Execute()
if (this.HubVnetConnection != null)
{
virtualHub.VirtualNetworkConnections.AddRange(this.HubVnetConnection);

// get auth headers for cross-tenant hubvnet conn
List<string> resourceIds = new List<string>();
foreach (var connection in this.HubVnetConnection)
{
resourceIds.Add(connection.RemoteVirtualNetwork.Id);
}

var auxHeaderDictionary = GetAuxilaryAuthHeaderFromResourceIds(resourceIds);
if (auxHeaderDictionary != null && auxHeaderDictionary.Count > 0)
{
auxAuthHeader = new Dictionary<string, List<string>>(auxHeaderDictionary);
}
}

virtualHub.RouteTable = this.RouteTable;
Expand All @@ -169,7 +183,8 @@ public override void Execute()
this.ResourceGroupName,
this.Name,
virtualHub,
this.Tag));
this.Tag,
auxAuthHeader));
});
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,7 @@ public override void Execute()
{
base.Execute();
PSVirtualHub virtualHubToUpdate = null;
Dictionary<string, List<string>> auxAuthHeader = null;

if (ParameterSetName.Equals(CortexParameterSetNames.ByVirtualHubObject, StringComparison.OrdinalIgnoreCase))
{
Expand Down Expand Up @@ -142,6 +143,19 @@ public override void Execute()
{
virtualHubToUpdate.VirtualNetworkConnections = new List<PSHubVirtualNetworkConnection>();
virtualHubToUpdate.VirtualNetworkConnections.AddRange(this.HubVnetConnection);

// get auth headers for cross-tenant hubvnet conn
List<string> resourceIds = new List<string>();
foreach (var connection in this.HubVnetConnection)
{
resourceIds.Add(connection.RemoteVirtualNetwork.Id);
}

var auxHeaderDictionary = GetAuxilaryAuthHeaderFromResourceIds(resourceIds);
if (auxHeaderDictionary != null && auxHeaderDictionary.Count > 0)
{
auxAuthHeader = new Dictionary<string, List<string>>(auxHeaderDictionary);
}
}

//// VirtualHubRouteTable
Expand All @@ -166,7 +180,8 @@ public override void Execute()
this.ResourceGroupName,
this.Name,
virtualHubToUpdate,
this.Tag));
this.Tag,
auxAuthHeader));
});
}
}
Expand Down
17 changes: 15 additions & 2 deletions src/Network/Network/Cortex/VirtualHub/VirtualHubBaseCmdlet.cs
Original file line number Diff line number Diff line change
Expand Up @@ -71,13 +71,26 @@ public bool IsVirtualHubPresent(string resourceGroupName, string name)
return psVirtualHub == null ? false : true;
}

public PSVirtualHub CreateOrUpdateVirtualHub(string resourceGroupName, string virtualHubName, PSVirtualHub virtualHub, Hashtable tags)
public PSVirtualHub CreateOrUpdateVirtualHub(string resourceGroupName, string virtualHubName, PSVirtualHub virtualHub, Hashtable tags, Dictionary<string, List<string>> customHeaders = null)
{
var virtualHubModel = NetworkResourceManagerProfile.Mapper.Map<MNM.VirtualHub>(virtualHub);
virtualHubModel.Location = virtualHub.Location;
virtualHubModel.Tags = TagsConversionHelper.CreateTagDictionary(tags, validate: true);
MNM.VirtualHub virtualHubCreatedOrUpdated;

if (customHeaders == null)
{
virtualHubCreatedOrUpdated = this.VirtualHubClient.CreateOrUpdate(resourceGroupName, virtualHubName, virtualHubModel);
}
else
{
// Execute the create call and pass the custom headers.
using (var _result = this.VirtualHubClient.CreateOrUpdateWithHttpMessagesAsync(resourceGroupName, virtualHubName, virtualHubModel, customHeaders).GetAwaiter().GetResult())
{
virtualHubCreatedOrUpdated = _result.Body;
}
}

var virtualHubCreatedOrUpdated = this.VirtualHubClient.CreateOrUpdate(resourceGroupName, virtualHubName, virtualHubModel);
PSVirtualHub hubToReturn = this.ToPsVirtualHub(virtualHubCreatedOrUpdated);
hubToReturn.ResourceGroupName = resourceGroupName;

Expand Down