Skip to content

Commit dad7b1a

Browse files
authored
Merge pull request Azure#4874 from matthchr/feature/batch-aad-common
Add common changes to support Azure Batch AAD
2 parents a6f2ca0 + 57d0ae5 commit dad7b1a

File tree

11 files changed

+80
-11
lines changed

11 files changed

+80
-11
lines changed

src/Common/Commands.Common.Authentication.Abstractions/AzureEnvironment.cs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ public class AzureEnvironment : IAzureEnvironment
5353
AzureDataLakeStoreFileSystemEndpointSuffix = AzureEnvironmentConstants.AzureDataLakeStoreFileSystemEndpointSuffix,
5454
GraphEndpointResourceId = AzureEnvironmentConstants.AzureGraphEndpoint,
5555
DataLakeEndpointResourceId = AzureEnvironmentConstants.AzureDataLakeServiceEndpointResourceId,
56+
BatchEndpointResourceId = AzureEnvironmentConstants.BatchEndpointResourceId,
5657
AdTenant = "Common"
5758
}
5859
},
@@ -77,6 +78,7 @@ public class AzureEnvironment : IAzureEnvironment
7778
AzureDataLakeAnalyticsCatalogAndJobEndpointSuffix = null,
7879
AzureDataLakeStoreFileSystemEndpointSuffix = null,
7980
GraphEndpointResourceId = AzureEnvironmentConstants.ChinaGraphEndpoint,
81+
BatchEndpointResourceId = AzureEnvironmentConstants.ChinaBatchEndpointResourceId,
8082
AdTenant = "Common"
8183
}
8284
},
@@ -101,6 +103,7 @@ public class AzureEnvironment : IAzureEnvironment
101103
AzureDataLakeAnalyticsCatalogAndJobEndpointSuffix = null,
102104
AzureDataLakeStoreFileSystemEndpointSuffix = null,
103105
GraphEndpointResourceId = AzureEnvironmentConstants.USGovernmentGraphEndpoint,
106+
BatchEndpointResourceId = AzureEnvironmentConstants.USGovernmentBatchEndpointResourceId,
104107
AdTenant = "Common"
105108
}
106109
},
@@ -125,6 +128,7 @@ public class AzureEnvironment : IAzureEnvironment
125128
AzureDataLakeAnalyticsCatalogAndJobEndpointSuffix = null,
126129
AzureDataLakeStoreFileSystemEndpointSuffix = null,
127130
GraphEndpointResourceId = AzureEnvironmentConstants.GermanGraphEndpoint,
131+
BatchEndpointResourceId = AzureEnvironmentConstants.GermanBatchEndpointResourceId,
128132
AdTenant = "Common"
129133
}
130134
}
@@ -228,6 +232,11 @@ public AzureEnvironment(IAzureEnvironment other)
228232
/// </summary>
229233
public string DataLakeEndpointResourceId { get; set; }
230234

235+
/// <summary>
236+
/// The token audience required for communicating with the Batch service in this enviornment
237+
/// </summary>
238+
public string BatchEndpointResourceId { get; set; }
239+
231240
/// <summary>
232241
/// The domain name suffix for Azure DataLake Catalog and Job services created in this environment
233242
/// </summary>
@@ -275,7 +284,8 @@ public static class Endpoint
275284
ManagementPortalUrl = "ManagementPortalUrl",
276285
AzureDataLakeAnalyticsCatalogAndJobEndpointSuffix = "AzureDataLakeAnalyticsCatalogAndJobEndpointSuffix",
277286
AzureDataLakeStoreFileSystemEndpointSuffix = "AzureDataLakeStoreFileSystemEndpointSuffix",
278-
DataLakeEndpointResourceId = "DataLakeEndpointResourceId";
287+
DataLakeEndpointResourceId = "DataLakeEndpointResourceId",
288+
BatchEndpointResourceId = "BatchEndpointResourceId";
279289

280290
}
281291
}

src/Common/Commands.Common.Authentication.Abstractions/AzureEnvironmentConstants.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,5 +125,10 @@ public static class AzureEnvironmentConstants
125125
/// The token audience for authorizing DataLake requests
126126
/// </summary>
127127
public const string AzureDataLakeServiceEndpointResourceId = "https://datalake.azure.net";
128+
129+
public const string BatchEndpointResourceId = "https://batch.core.windows.net/";
130+
public const string ChinaBatchEndpointResourceId = "https://batch.chinacloudapi.cn/";
131+
public const string USGovernmentBatchEndpointResourceId = "https://batch.core.usgovcloudapi.net/";
132+
public const string GermanBatchEndpointResourceId = "https://batch.cloudapi.de/";
128133
}
129134
}

src/Common/Commands.Common.Authentication.Abstractions/Extensions/AzureEnvironmentExtensions.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,9 @@ public static bool TryGetEndpointUrl(this IAzureEnvironment environment, string
6565
case AzureEnvironment.Endpoint.DataLakeEndpointResourceId:
6666
endpoint = new Uri(environment.DataLakeEndpointResourceId);
6767
break;
68+
case AzureEnvironment.Endpoint.BatchEndpointResourceId:
69+
endpoint = new Uri(environment.BatchEndpointResourceId);
70+
break;
6871
default:
6972
result = false;
7073
break;
@@ -138,6 +141,9 @@ public static bool TryGetEndpointString(this IAzureEnvironment environment, stri
138141
case AzureEnvironment.Endpoint.ServiceManagement:
139142
propertyValue = environment.ServiceManagementUrl;
140143
break;
144+
case AzureEnvironment.Endpoint.BatchEndpointResourceId:
145+
propertyValue = environment.BatchEndpointResourceId;
146+
break;
141147
default:
142148
break;
143149
}
@@ -226,6 +232,9 @@ public static void SetEndpoint(this IAzureEnvironment environment, string endpoi
226232
case AzureEnvironment.Endpoint.DataLakeEndpointResourceId:
227233
environment.DataLakeEndpointResourceId = propertyValue;
228234
break;
235+
case AzureEnvironment.Endpoint.BatchEndpointResourceId:
236+
environment.BatchEndpointResourceId = propertyValue;
237+
break;
229238
case AzureEnvironment.Endpoint.ActiveDirectory:
230239
environment.ActiveDirectoryAuthority = propertyValue;
231240
break;
@@ -440,6 +449,10 @@ public static void CopyFrom(this IAzureEnvironment environment, IAzureEnvironmen
440449
environment.AzureKeyVaultServiceEndpointResourceId =
441450
other.AzureKeyVaultServiceEndpointResourceId;
442451
}
452+
if (other.IsEndpointSet(AzureEnvironment.Endpoint.BatchEndpointResourceId))
453+
{
454+
environment.BatchEndpointResourceId = other.BatchEndpointResourceId;
455+
}
443456

444457
environment.VersionProfiles.Clear();
445458
foreach (var profile in other.VersionProfiles)

src/Common/Commands.Common.Authentication.Abstractions/Interfaces/IAzureEnvironment.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,11 @@ public interface IAzureEnvironment : IExtensibleModel
107107
/// </summary>
108108
string DataLakeEndpointResourceId { get; set; }
109109

110+
/// <summary>
111+
/// The token audience required to authenticate with the Azure Batch service
112+
/// </summary>
113+
string BatchEndpointResourceId { get; set; }
114+
110115
/// <summary>
111116
/// The domain name suffix for Azure DataLake Catalog and Job services
112117
/// </summary>

src/ResourceManager/Common/Commands.Common.Authentication.ResourceManager/Models/PSAzureEnvironment.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ public PSAzureEnvironment(PSObject other)
9595
AzureDataLakeStoreFileSystemEndpointSuffix = other.GetProperty<string>(nameof(AzureDataLakeStoreFileSystemEndpointSuffix));
9696
AzureKeyVaultDnsSuffix = other.GetProperty<string>(nameof(AzureKeyVaultDnsSuffix));
9797
AzureKeyVaultServiceEndpointResourceId = other.GetProperty<string>(nameof(AzureKeyVaultServiceEndpointResourceId));
98+
BatchEndpointResourceId = other.GetProperty<string>(nameof(BatchEndpointResourceId));
9899
DataLakeEndpointResourceId = other.GetProperty<string>(nameof(DataLakeEndpointResourceId));
99100
GalleryUrl = other.GetProperty<string>(nameof(GalleryUrl));
100101
GraphEndpointResourceId = other.GetProperty<string>(nameof(GraphEndpointResourceId));
@@ -227,6 +228,11 @@ public bool OnPremise
227228

228229
public IDictionary<string, string> ExtendedProperties { get; } = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
229230

231+
/// <summary>
232+
/// Gets or sets the Azure Batch AD resource ID.
233+
/// </summary>
234+
public string BatchEndpointResourceId { get; set; }
235+
230236
/// <summary>
231237
/// Determine equality of two PSAzureEnvironment instances.
232238
/// </summary>
@@ -253,7 +259,8 @@ public override bool Equals(object obj)
253259
&& SqlDatabaseDnsSuffix == other.SqlDatabaseDnsSuffix
254260
&& AzureDataLakeAnalyticsCatalogAndJobEndpointSuffix == other.AzureDataLakeAnalyticsCatalogAndJobEndpointSuffix
255261
&& AzureDataLakeStoreFileSystemEndpointSuffix == other.AzureDataLakeStoreFileSystemEndpointSuffix
256-
&& TrafficManagerDnsSuffix == other.TrafficManagerDnsSuffix;
262+
&& TrafficManagerDnsSuffix == other.TrafficManagerDnsSuffix
263+
&& BatchEndpointResourceId == other.BatchEndpointResourceId;
257264
}
258265

259266
return false;

src/ResourceManager/Profile/ChangeLog.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@
2828
- Clear-AzureRmDefault
2929
- Use this cmdlet to remove the current default resource group
3030
- ```Clear-AzureRmDefault -ResourceGroup```
31+
- Add-AzureRmEnvironment and Set-AzureRmEnvironment
32+
- Add the BatchAudience parameter, which allows you to specify the Azure Batch Active Directory audience to use when acquiring authentication tokens for the Batch service.
3133

3234
## Version 3.4.1
3335
* LocationCompleterAttribute added and available for cmdlets which use the -Location parameter

src/ResourceManager/Profile/Commands.Profile.Test/AzureRMProfileTests.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -733,6 +733,7 @@ public void SavingProfileWorks()
733733
""AzureKeyVaultServiceEndpointResourceId"": null,
734734
""GraphEndpointResourceId"": null,
735735
""DataLakeEndpointResourceId"": null,
736+
""BatchEndpointResourceId"": null,
736737
""AzureDataLakeAnalyticsCatalogAndJobEndpointSuffix"": null,
737738
""AzureDataLakeStoreFileSystemEndpointSuffix"": null,
738739
""AdTenant"": null,
@@ -784,6 +785,7 @@ public void SavingProfileWorks()
784785
""AzureKeyVaultServiceEndpointResourceId"": null,
785786
""GraphEndpointResourceId"": null,
786787
""DataLakeEndpointResourceId"": null,
788+
""BatchEndpointResourceId"": null,
787789
""AzureDataLakeAnalyticsCatalogAndJobEndpointSuffix"": null,
788790
""AzureDataLakeStoreFileSystemEndpointSuffix"": null,
789791
""AdTenant"": null,

src/ResourceManager/Profile/Commands.Profile.Test/EnvironmentCmdletTests.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -370,7 +370,8 @@ public void CanCreateEnvironmentWithAllProperties()
370370
StorageEndpoint = "https://StorageEndpoint",
371371
SqlDatabaseDnsSuffix = "SqlDatabaseDnsSuffix",
372372
TrafficManagerDnsSuffix = "TrafficManagerDnsSuffix",
373-
GraphAudience = "GaraphAudience"
373+
GraphAudience = "GaraphAudience",
374+
BatchEndpointResourceId = "BatchResourceId"
374375
};
375376

376377
var dict = new Dictionary<string, object>();
@@ -390,6 +391,7 @@ public void CanCreateEnvironmentWithAllProperties()
390391
dict["SqlDatabaseDnsSuffix"] = "SqlDatabaseDnsSuffix";
391392
dict["TrafficManagerDnsSuffix"] = "TrafficManagerDnsSuffix";
392393
dict["GraphAudience"] = "GaraphAudience";
394+
dict["BatchEndpointResourceId"] = "BatchResourceId";
393395
cmdlet.SetBoundParameters(dict);
394396

395397
cmdlet.InvokeBeginProcessing();
@@ -413,6 +415,7 @@ public void CanCreateEnvironmentWithAllProperties()
413415
Assert.Equal(cmdlet.SqlDatabaseDnsSuffix, actual.SqlDatabaseDnsSuffix);
414416
Assert.Equal(cmdlet.TrafficManagerDnsSuffix, actual.TrafficManagerDnsSuffix);
415417
Assert.Equal(cmdlet.GraphAudience, actual.GraphEndpointResourceId);
418+
Assert.Equal(cmdlet.BatchEndpointResourceId, actual.BatchEndpointResourceId);
416419
commandRuntimeMock.Verify(f => f.WriteObject(It.IsAny<PSAzureEnvironment>()), Times.Once());
417420
IAzureEnvironment env = AzureRmProfileProvider.Instance.Profile.GetEnvironment("KaTaL");
418421
Assert.Equal(env.Name, cmdlet.Name);

src/ResourceManager/Profile/Commands.Profile.Test/TypeConversionTests.cs

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ public void CanConvertNullEnvironments()
5555
Assert.Null(environment.SqlDatabaseDnsSuffix);
5656
Assert.Null(environment.StorageEndpointSuffix);
5757
Assert.Null(environment.TrafficManagerDnsSuffix);
58+
Assert.Null(environment.BatchEndpointResourceId);
5859
}
5960

6061
[Theory]
@@ -64,19 +65,19 @@ public void CanConvertNullEnvironments()
6465
"https://graph.windows.net", "https://graph.windows.net/", "https://manage.windowsazure.com",
6566
"https://manage.windowsazure.com/publishsettings", "https://management.azure.com",
6667
"https://management.core.windows.net", ".sql.azure.com", ".core.windows.net",
67-
".trafficmanager.windows.net")]
68+
".trafficmanager.windows.net", "https://batch.core.windows.net")]
6869
[Trait(Category.AcceptanceType, Category.CheckIn)]
6970
public void CanConvertValidEnvironments(string name, bool onPremise, string activeDirectory, string serviceResource,
7071
string adTenant, string dataLakeJobs, string dataLakeFiles, string kvDnsSuffix,
7172
string kvResource, string gallery, string graph, string graphResource, string portal,
7273
string publishSettings, string resourceManager, string serviceManagement,
73-
string sqlSuffix, string storageSuffix, string trafficManagerSuffix)
74+
string sqlSuffix, string storageSuffix, string trafficManagerSuffix, string batchResource)
7475
{
7576
AzureEnvironment azEnvironment = CreateEnvironment(name, onPremise, activeDirectory,
7677
serviceResource, adTenant, dataLakeJobs, dataLakeFiles, kvDnsSuffix,
7778
kvResource, gallery, graph, graphResource, portal, publishSettings,
7879
resourceManager, serviceManagement, sqlSuffix, storageSuffix,
79-
trafficManagerSuffix);
80+
trafficManagerSuffix, batchResource);
8081
var environment = (PSAzureEnvironment)azEnvironment;
8182
Assert.NotNull(environment);
8283
CheckEndpoint(AzureEnvironment.Endpoint.ActiveDirectory, azEnvironment,
@@ -113,6 +114,8 @@ public void CanConvertValidEnvironments(string name, bool onPremise, string acti
113114
environment.StorageEndpointSuffix);
114115
CheckEndpoint(AzureEnvironment.Endpoint.TrafficManagerDnsSuffix, azEnvironment,
115116
environment.TrafficManagerDnsSuffix);
117+
CheckEndpoint(AzureEnvironment.Endpoint.BatchEndpointResourceId, azEnvironment,
118+
environment.BatchEndpointResourceId);
116119
Assert.Equal(azEnvironment.Name, environment.Name);
117120
Assert.Equal(azEnvironment.OnPremise, environment.EnableAdfsAuthentication);
118121
}
@@ -144,6 +147,7 @@ public void CanConvertNullPSEnvironments()
144147
Assert.False(environment.IsEndpointSet(AzureEnvironment.Endpoint.SqlDatabaseDnsSuffix));
145148
Assert.False(environment.IsEndpointSet(AzureEnvironment.Endpoint.StorageEndpointSuffix));
146149
Assert.False(environment.IsEndpointSet(AzureEnvironment.Endpoint.TrafficManagerDnsSuffix));
150+
Assert.False(environment.IsEndpointSet(AzureEnvironment.Endpoint.BatchEndpointResourceId));
147151
}
148152
[Theory]
149153
[InlineData("TestAll", true, "https://login.microsoftonline.com", "https://management.core.windows.net/",
@@ -152,13 +156,13 @@ public void CanConvertNullPSEnvironments()
152156
"https://graph.windows.net", "https://graph.windows.net/", "https://manage.windowsazure.com",
153157
"https://manage.windowsazure.com/publishsettings", "https://management.azure.com",
154158
"https://management.core.windows.net", ".sql.azure.com", ".core.windows.net",
155-
".trafficmanager.windows.net")]
159+
".trafficmanager.windows.net", "https://batch.core.windows.net")]
156160
[Trait(Category.AcceptanceType, Category.CheckIn)]
157161
public void CanConvertValidPSEnvironments(string name, bool onPremise, string activeDirectory, string serviceResource,
158162
string adTenant, string dataLakeJobs, string dataLakeFiles, string kvDnsSuffix,
159163
string kvResource, string gallery, string graph, string graphResource, string portal,
160164
string publishSettings, string resourceManager, string serviceManagement,
161-
string sqlSuffix, string storageSuffix, string trafficManagerSuffix)
165+
string sqlSuffix, string storageSuffix, string trafficManagerSuffix, string batchResource)
162166
{
163167
PSAzureEnvironment environment = new PSAzureEnvironment
164168
{
@@ -180,7 +184,8 @@ public void CanConvertValidPSEnvironments(string name, bool onPremise, string ac
180184
ServiceManagementUrl = serviceManagement,
181185
SqlDatabaseDnsSuffix = sqlSuffix,
182186
StorageEndpointSuffix = storageSuffix,
183-
TrafficManagerDnsSuffix = trafficManagerSuffix
187+
TrafficManagerDnsSuffix = trafficManagerSuffix,
188+
BatchEndpointResourceId = batchResource
184189
};
185190
var azEnvironment = (AzureEnvironment)environment;
186191
Assert.NotNull(environment);
@@ -218,6 +223,8 @@ public void CanConvertValidPSEnvironments(string name, bool onPremise, string ac
218223
environment.StorageEndpointSuffix);
219224
CheckEndpoint(AzureEnvironment.Endpoint.TrafficManagerDnsSuffix, azEnvironment,
220225
environment.TrafficManagerDnsSuffix);
226+
CheckEndpoint(AzureEnvironment.Endpoint.BatchEndpointResourceId, azEnvironment,
227+
environment.BatchEndpointResourceId);
221228
Assert.Equal(azEnvironment.Name, environment.Name);
222229
Assert.Equal(azEnvironment.OnPremise, environment.EnableAdfsAuthentication);
223230
}
@@ -227,7 +234,7 @@ private AzureEnvironment CreateEnvironment(string name, bool onPremise, string a
227234
string adTenant, string dataLakeJobs, string dataLakeFiles, string kvDnsSuffix,
228235
string kvResource, string gallery, string graph, string graphResource, string portal,
229236
string publishSettings, string resourceManager, string serviceManagement,
230-
string sqlSuffix, string storageSuffix, string trafficManagerSuffix)
237+
string sqlSuffix, string storageSuffix, string trafficManagerSuffix, string batchResource)
231238
{
232239
var environment = new AzureEnvironment() { Name = name, OnPremise = onPremise };
233240
SetEndpoint(AzureEnvironment.Endpoint.ActiveDirectory, environment, activeDirectory);
@@ -263,7 +270,8 @@ private AzureEnvironment CreateEnvironment(string name, bool onPremise, string a
263270
storageSuffix);
264271
CheckEndpoint(AzureEnvironment.Endpoint.TrafficManagerDnsSuffix, environment,
265272
trafficManagerSuffix);
266-
273+
CheckEndpoint(AzureEnvironment.Endpoint.BatchEndpointResourceId, environment,
274+
batchResource);
267275
return environment;
268276

269277
}

src/ResourceManager/Profile/Commands.Profile/Environment/AddAzureRMEnvironment.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,11 @@ public string DataLakeAudience
146146
}
147147
}
148148

149+
[Parameter(Position = 20, Mandatory = false, ValueFromPipelineByPropertyName = true,
150+
HelpMessage = "The resource identifier of the Azure Batch service that is the recipient of the requested token.")]
151+
[Alias("BatchResourceId", "BatchAudience")]
152+
public string BatchEndpointResourceId { get; set; }
153+
149154
protected override void BeginProcessing()
150155
{
151156
// do not call begin processing there is no context needed for this cmdlet
@@ -285,6 +290,8 @@ public override void ExecuteCmdlet()
285290
nameof(GraphAudience));
286291
SetEndpointIfBound(newEnvironment, AzureEnvironment.Endpoint.DataLakeEndpointResourceId,
287292
nameof(DataLakeAudience));
293+
SetEndpointIfBound(newEnvironment, AzureEnvironment.Endpoint.BatchEndpointResourceId,
294+
nameof(BatchEndpointResourceId));
288295
WriteObject(new PSAzureEnvironment(profileClient.AddOrSetEnvironment(newEnvironment)));
289296
}
290297
});

0 commit comments

Comments
 (0)