Skip to content
This repository was archived by the owner on Feb 23, 2024. It is now read-only.

Commit 0ce6b3e

Browse files
authored
Add serviceUrl in Master Template (#547)
* Add serviceUrl in Master Template * Change test
1 parent 4720c1c commit 0ce6b3e

File tree

3 files changed

+50
-17
lines changed

3 files changed

+50
-17
lines changed

src/APIM_ARMTemplate/apimtemplate.test/Creator/TemplateCreatorTests/MasterTemplateCreatorTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ public void ShouldCreateLinkedMasterTemplateResourceFromValues()
8181
string[] dependsOn = new string[] { "dependsOn" };
8282

8383
// act
84-
MasterTemplateResource masterTemplateResource = masterTemplateCreator.CreateLinkedMasterTemplateResource(name, uriLink, dependsOn);
84+
MasterTemplateResource masterTemplateResource = masterTemplateCreator.CreateLinkedMasterTemplateResource(name, uriLink, dependsOn, null, false);
8585

8686
// assert
8787
Assert.Equal(name, masterTemplateResource.name);

src/APIM_ARMTemplate/apimtemplate/Commands/Create.cs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -139,8 +139,11 @@ public CreateCommand()
139139
{
140140
if (considerAllApiForDeployments || preferredApis.Contains(api.name))
141141
{
142-
if (creatorConfig.serviceUrlParameters != null && creatorConfig.serviceUrlParameters.Count > 0) {
143-
api.serviceUrl = creatorConfig.serviceUrlParameters.Any(s => s.apiName.Equals(api.name)) ?
142+
bool isServiceUrlParameterizeInYml = false;
143+
if (creatorConfig.serviceUrlParameters != null && creatorConfig.serviceUrlParameters.Count > 0)
144+
{
145+
isServiceUrlParameterizeInYml = creatorConfig.serviceUrlParameters.Any(s => s.apiName.Equals(api.name));
146+
api.serviceUrl = isServiceUrlParameterizeInYml ?
144147
creatorConfig.serviceUrlParameters.Where(s => s.apiName.Equals(api.name)).FirstOrDefault().serviceUrl : api.serviceUrl;
145148
}
146149
// create api templates from provided api config - if the api config contains a supplied apiVersion, split the templates into 2 for metadata and swagger content, otherwise create a unified template
@@ -157,7 +160,8 @@ public CreateCommand()
157160
dependsOnTags = api.tags != null,
158161
dependsOnLoggers = await masterTemplateCreator.DetermineIfAPIDependsOnLoggerAsync(api, fileReader),
159162
dependsOnAuthorizationServers = api.authenticationSettings != null && api.authenticationSettings.oAuth2 != null && api.authenticationSettings.oAuth2.authorizationServerId != null,
160-
dependsOnBackends = await masterTemplateCreator.DetermineIfAPIDependsOnBackendAsync(api, fileReader)
163+
dependsOnBackends = await masterTemplateCreator.DetermineIfAPIDependsOnBackendAsync(api, fileReader),
164+
isServiceUrlParameterize = isServiceUrlParameterizeInYml
161165
});
162166
}
163167
}

src/APIM_ARMTemplate/apimtemplate/Creator/TemplateCreators/MasterTemplateCreator.cs

Lines changed: 42 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -35,21 +35,21 @@ public Template CreateLinkedMasterTemplate(CreatorConfig creatorConfig,
3535
if (globalServicePolicyTemplate != null)
3636
{
3737
string globalServicePolicyUri = GenerateLinkedTemplateUri(creatorConfig, fileNames.globalServicePolicy);
38-
resources.Add(this.CreateLinkedMasterTemplateResource("globalServicePolicyTemplate", globalServicePolicyUri, new string[] { }));
38+
resources.Add(this.CreateLinkedMasterTemplateResource("globalServicePolicyTemplate", globalServicePolicyUri, new string[] { }, null, false));
3939
}
4040

4141
// apiVersionSet
4242
if (apiVersionSetTemplate != null)
4343
{
4444
string apiVersionSetUri = GenerateLinkedTemplateUri(creatorConfig, fileNames.apiVersionSets);
45-
resources.Add(this.CreateLinkedMasterTemplateResource("versionSetTemplate", apiVersionSetUri, new string[] { }));
45+
resources.Add(this.CreateLinkedMasterTemplateResource("versionSetTemplate", apiVersionSetUri, new string[] { }, null, false));
4646
}
4747

4848
// product
4949
if (productsTemplate != null)
5050
{
5151
string productsUri = GenerateLinkedTemplateUri(creatorConfig, fileNames.products);
52-
resources.Add(this.CreateLinkedMasterTemplateResource("productsTemplate", productsUri, new string[] { }));
52+
resources.Add(this.CreateLinkedMasterTemplateResource("productsTemplate", productsUri, new string[] { }, null, false));
5353
}
5454

5555
// productApi
@@ -58,42 +58,42 @@ public Template CreateLinkedMasterTemplate(CreatorConfig creatorConfig,
5858
// depends on all products and APIs
5959
string[] dependsOn = CreateProductAPIResourceDependencies(productsTemplate, apiInformation, fileNameGenerator);
6060
string productAPIsUri = GenerateLinkedTemplateUri(creatorConfig, fileNames.productAPIs);
61-
resources.Add(this.CreateLinkedMasterTemplateResource("productAPIsTemplate", productAPIsUri, dependsOn));
61+
resources.Add(this.CreateLinkedMasterTemplateResource("productAPIsTemplate", productAPIsUri, dependsOn, null, false));
6262
}
6363

6464
// property
6565
if (propertyTemplate != null)
6666
{
6767
string propertyUri = GenerateLinkedTemplateUri(creatorConfig, fileNames.namedValues);
68-
resources.Add(this.CreateLinkedMasterTemplateResource("propertyTemplate", propertyUri, new string[] { }));
68+
resources.Add(this.CreateLinkedMasterTemplateResource("propertyTemplate", propertyUri, new string[] { }, null, false));
6969
}
7070

7171
// logger
7272
if (loggersTemplate != null)
7373
{
7474
string loggersUri = GenerateLinkedTemplateUri(creatorConfig, fileNames.loggers);
75-
resources.Add(this.CreateLinkedMasterTemplateResource("loggersTemplate", loggersUri, new string[] { }));
75+
resources.Add(this.CreateLinkedMasterTemplateResource("loggersTemplate", loggersUri, new string[] { }, null, false));
7676
}
7777

7878
// backend
7979
if (backendsTemplate != null)
8080
{
8181
string backendsUri = GenerateLinkedTemplateUri(creatorConfig, fileNames.backends);
82-
resources.Add(this.CreateLinkedMasterTemplateResource("backendsTemplate", backendsUri, new string[] { }));
82+
resources.Add(this.CreateLinkedMasterTemplateResource("backendsTemplate", backendsUri, new string[] { }, null, false));
8383
}
8484

8585
// authorizationServer
8686
if (authorizationServersTemplate != null)
8787
{
8888
string authorizationServersUri = GenerateLinkedTemplateUri(creatorConfig, fileNames.authorizationServers);
89-
resources.Add(this.CreateLinkedMasterTemplateResource("authorizationServersTemplate", authorizationServersUri, new string[] { }));
89+
resources.Add(this.CreateLinkedMasterTemplateResource("authorizationServersTemplate", authorizationServersUri, new string[] { }, null, false));
9090
}
9191

9292
// tag
9393
if (tagTemplate != null)
9494
{
9595
string tagUri = GenerateLinkedTemplateUri(creatorConfig, fileNames.tags);
96-
resources.Add(this.CreateLinkedMasterTemplateResource("tagTemplate", tagUri, new string[] { }));
96+
resources.Add(this.CreateLinkedMasterTemplateResource("tagTemplate", tagUri, new string[] { }, null, false));
9797
}
9898

9999
string previousAPIName = null;
@@ -110,12 +110,12 @@ public Template CreateLinkedMasterTemplate(CreatorConfig creatorConfig,
110110
string initialAPIFileName = fileNameGenerator.GenerateCreatorAPIFileName(apiInfo.name, apiInfo.isSplit, true);
111111
string initialAPIUri = GenerateLinkedTemplateUri(creatorConfig, initialAPIFileName);
112112
string[] initialAPIDependsOn = CreateAPIResourceDependencies(globalServicePolicyTemplate, apiVersionSetTemplate, productsTemplate, loggersTemplate, backendsTemplate, authorizationServersTemplate, tagTemplate, apiInfo, previousAPIName);
113-
resources.Add(this.CreateLinkedMasterTemplateResource(initialAPIDeploymentResourceName, initialAPIUri, initialAPIDependsOn));
113+
resources.Add(this.CreateLinkedMasterTemplateResource(initialAPIDeploymentResourceName, initialAPIUri, initialAPIDependsOn, apiInfo.name, apiInfo.isServiceUrlParameterize));
114114

115115
string subsequentAPIFileName = fileNameGenerator.GenerateCreatorAPIFileName(apiInfo.name, apiInfo.isSplit, false);
116116
string subsequentAPIUri = GenerateLinkedTemplateUri(creatorConfig, subsequentAPIFileName);
117117
string[] subsequentAPIDependsOn = new string[] { $"[resourceId('Microsoft.Resources/deployments', '{initialAPIDeploymentResourceName}')]" };
118-
resources.Add(this.CreateLinkedMasterTemplateResource(subsequentAPIDeploymentResourceName, subsequentAPIUri, subsequentAPIDependsOn));
118+
resources.Add(this.CreateLinkedMasterTemplateResource(subsequentAPIDeploymentResourceName, subsequentAPIUri, subsequentAPIDependsOn, apiInfo.name, apiInfo.isServiceUrlParameterize));
119119

120120
// Set previous API name for dependency chain
121121
previousAPIName = subsequentAPIDeploymentResourceName;
@@ -129,7 +129,7 @@ public Template CreateLinkedMasterTemplate(CreatorConfig creatorConfig,
129129
string unifiedAPIFileName = fileNameGenerator.GenerateCreatorAPIFileName(apiInfo.name, apiInfo.isSplit, true);
130130
string unifiedAPIUri = GenerateLinkedTemplateUri(creatorConfig, unifiedAPIFileName);
131131
string[] unifiedAPIDependsOn = CreateAPIResourceDependencies(globalServicePolicyTemplate, apiVersionSetTemplate, productsTemplate, loggersTemplate, backendsTemplate, authorizationServersTemplate, tagTemplate, apiInfo, previousAPIName);
132-
resources.Add(this.CreateLinkedMasterTemplateResource(unifiedAPIDeploymentResourceName, unifiedAPIUri, unifiedAPIDependsOn));
132+
resources.Add(this.CreateLinkedMasterTemplateResource(unifiedAPIDeploymentResourceName, unifiedAPIUri, unifiedAPIDependsOn, apiInfo.name, apiInfo.isServiceUrlParameterize));
133133

134134
// Set previous API name for dependency chain
135135
previousAPIName = subsequentAPIDeploymentResourceName;
@@ -204,7 +204,7 @@ public string[] CreateProductAPIResourceDependencies(Template productsTemplate,
204204
return apiProductDependsOn.ToArray();
205205
}
206206

207-
public MasterTemplateResource CreateLinkedMasterTemplateResource(string name, string uriLink, string[] dependsOn)
207+
public MasterTemplateResource CreateLinkedMasterTemplateResource(string name, string uriLink, string[] dependsOn, string apiName, bool isServiceUrlParameterizeInApi)
208208
{
209209
// create deployment resource with provided arguments
210210
MasterTemplateResource masterTemplateResource = new MasterTemplateResource()
@@ -227,6 +227,16 @@ public MasterTemplateResource CreateLinkedMasterTemplateResource(string name, st
227227
},
228228
dependsOn = dependsOn
229229
};
230+
231+
if (name.IndexOf("APITemplate") > 0 && isServiceUrlParameterizeInApi)
232+
{
233+
TemplateParameterProperties serviceUrlParamProperty = new TemplateParameterProperties()
234+
{
235+
value = $"[parameters('{apiName}-ServiceUrl')]"
236+
};
237+
masterTemplateResource.properties.parameters.Add(apiName + "-ServiceUrl", serviceUrlParamProperty);
238+
}
239+
230240
return masterTemplateResource;
231241
}
232242

@@ -269,6 +279,24 @@ public Dictionary<string, TemplateParameterProperties> CreateMasterTemplateParam
269279
parameters.Add(ParameterNames.LinkedTemplatesUrlQueryString, linkedTemplatesUrlQueryStringProperties);
270280
}
271281
}
282+
283+
// add serviceUrl parameter for linked option
284+
if (creatorConfig.serviceUrlParameters != null && creatorConfig.serviceUrlParameters.Count > 0)
285+
{
286+
foreach (ServiceUrlProperty serviceUrlProperty in creatorConfig.serviceUrlParameters)
287+
{
288+
TemplateParameterProperties serviceUrlParamProperty = new TemplateParameterProperties()
289+
{
290+
metadata = new TemplateParameterMetadata()
291+
{
292+
description = "ServiceUrl parameter for API: " + serviceUrlProperty.apiName
293+
},
294+
type = "string"
295+
};
296+
parameters.Add(serviceUrlProperty.apiName + "-ServiceUrl", serviceUrlParamProperty);
297+
}
298+
}
299+
272300
return parameters;
273301
}
274302

@@ -388,6 +416,7 @@ public class LinkedMasterTemplateAPIInformation
388416
public bool dependsOnBackends { get; set; }
389417
public bool dependsOnAuthorizationServers { get; set; }
390418
public bool dependsOnTags { get; set; }
419+
public bool isServiceUrlParameterize { get; set; }
391420
}
392421

393422
}

0 commit comments

Comments
 (0)