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

Commit 502eef4

Browse files
committed
add query string to creator linked url for private storage
1 parent 6e37a6b commit 502eef4

File tree

5 files changed

+50
-22
lines changed

5 files changed

+50
-22
lines changed

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ public class MasterTemplateCreatorTests
1111
public void ShouldCreateCorrectNumberOfDeploymentResources()
1212
{
1313
// arrange
14-
CreatorConfig creatorConfig = new CreatorConfig() { apimServiceName = "apimService" };
14+
CreatorConfig creatorConfig = new CreatorConfig() { apimServiceName = "apimService", linked = true };
1515
MasterTemplateCreator masterTemplateCreator = new MasterTemplateCreator();
1616
Template apiVersionSetsTemplate = new Template();
1717
Template productsTemplate = new Template();
@@ -24,7 +24,7 @@ public void ShouldCreateCorrectNumberOfDeploymentResources()
2424
int count = 5;
2525

2626
// act
27-
Template masterTemplate = masterTemplateCreator.CreateLinkedMasterTemplate(apiVersionSetsTemplate, productsTemplate, loggersTemplate, null, null, apiInfoList, creatorFileNames, creatorConfig.apimServiceName, fileNameGenerator);
27+
Template masterTemplate = masterTemplateCreator.CreateLinkedMasterTemplate(creatorConfig, apiVersionSetsTemplate, productsTemplate, loggersTemplate, null, null, apiInfoList, creatorFileNames, creatorConfig.apimServiceName, fileNameGenerator);
2828

2929
// assert
3030
Assert.Equal(count, masterTemplate.resources.Length);
@@ -55,13 +55,13 @@ public void ShouldCreateCorrectNumberOfParameterValuesWhenLinked()
5555
public void ShouldCreateCorrectNumberOfParametersWhenUnlinked()
5656
{
5757
// arrange
58+
CreatorConfig creatorConfig = new CreatorConfig() { apimServiceName = "apimService", linked = false };
5859
MasterTemplateCreator masterTemplateCreator = new MasterTemplateCreator();
59-
bool linked = false;
6060
// unlinked templates result in 1 value
6161
int count = 1;
6262

6363
// act
64-
Dictionary<string, TemplateParameterProperties> masterTemplateParameters = masterTemplateCreator.CreateMasterTemplateParameters(linked);
64+
Dictionary<string, TemplateParameterProperties> masterTemplateParameters = masterTemplateCreator.CreateMasterTemplateParameters(creatorConfig);
6565

6666
// assert
6767
Assert.Equal(count, masterTemplateParameters.Keys.Count);

src/APIM_ARMTemplate/apimtemplate/Commands/Create.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,13 +96,13 @@ public CreateCommand()
9696
if (creatorConfig.linked == true)
9797
{
9898
// create linked master template
99-
Template masterTemplate = masterTemplateCreator.CreateLinkedMasterTemplate(apiVersionSetsTemplate, productsTemplate, loggersTemplate, backendsTemplate, authorizationServersTemplate, apiInformation, fileNames, creatorConfig.apimServiceName, fileNameGenerator);
99+
Template masterTemplate = masterTemplateCreator.CreateLinkedMasterTemplate(creatorConfig ,apiVersionSetsTemplate, productsTemplate, loggersTemplate, backendsTemplate, authorizationServersTemplate, apiInformation, fileNames, creatorConfig.apimServiceName, fileNameGenerator);
100100
fileWriter.WriteJSONToFile(masterTemplate, String.Concat(creatorConfig.outputLocation, fileNames.linkedMaster));
101101
}
102102
foreach (Template apiTemplate in apiTemplates)
103103
{
104104
APITemplateResource apiResource = apiTemplate.resources.FirstOrDefault(resource => resource.type == ResourceTypeConstants.API) as APITemplateResource;
105-
APIConfig providedAPIConfiguration = creatorConfig.apis.FirstOrDefault(api => apiResource.properties.displayName.Equals(api.name, StringComparison.Ordinal));
105+
APIConfig providedAPIConfiguration = creatorConfig.apis.FirstOrDefault(api => apiResource.name.Contains(api.name, StringComparison.Ordinal));
106106
// if the api version is not null the api is split into multiple templates. If the template is split and the content value has been set, then the template is for a subsequent api
107107
string apiFileName = fileNameGenerator.GenerateCreatorAPIFileName(providedAPIConfiguration.name, apiTemplateCreator.isSplitAPI(providedAPIConfiguration), apiResource.properties.value == null, creatorConfig.apimServiceName);
108108
fileWriter.WriteJSONToFile(apiTemplate, String.Concat(creatorConfig.outputLocation, apiFileName));

src/APIM_ARMTemplate/apimtemplate/Creator/Models/CreatorConfiguration.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ public class CreatorConfig
2121
public string outputLocation { get; set; }
2222
public bool linked { get; set; }
2323
public string linkedTemplatesBaseUrl { get; set; }
24+
public string linkedTemplatesUrlQueryString { get; set; }
2425
}
2526

2627
public class APIVersionSetConfig: APIVersionSetProperties

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

Lines changed: 42 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ namespace Microsoft.Azure.Management.ApiManagement.ArmTemplates.Create
66
{
77
public class MasterTemplateCreator : TemplateCreator
88
{
9-
public Template CreateLinkedMasterTemplate(Template apiVersionSetTemplate,
9+
public Template CreateLinkedMasterTemplate(CreatorConfig creatorConfig,
10+
Template apiVersionSetTemplate,
1011
Template productsTemplate,
1112
Template loggersTemplate,
1213
Template backendsTemplate,
@@ -20,72 +21,73 @@ public Template CreateLinkedMasterTemplate(Template apiVersionSetTemplate,
2021
Template masterTemplate = CreateEmptyTemplate();
2122

2223
// add parameters
23-
masterTemplate.parameters = this.CreateMasterTemplateParameters(true);
24+
masterTemplate.parameters = this.CreateMasterTemplateParameters(creatorConfig);
2425

2526
// add deployment resources that links to all resource files
2627
List<TemplateResource> resources = new List<TemplateResource>();
2728

2829
// apiVersionSet
2930
if (apiVersionSetTemplate != null)
3031
{
31-
string apiVersionSetUri = $"[concat(parameters('LinkedTemplatesBaseUrl'), '{fileNames.apiVersionSets}')]";
32+
string apiVersionSetUri = GenerateLinkedTemplateUri(creatorConfig, fileNames.apiVersionSets);
3233
resources.Add(this.CreateLinkedMasterTemplateResource("versionSetTemplate", apiVersionSetUri, new string[] { }));
3334
}
3435

3536
// product
3637
if (productsTemplate != null)
3738
{
38-
string productsUri = $"[concat(parameters('LinkedTemplatesBaseUrl'), '{fileNames.products}')]";
39+
string productsUri = GenerateLinkedTemplateUri(creatorConfig, fileNames.products);
3940
resources.Add(this.CreateLinkedMasterTemplateResource("productsTemplate", productsUri, new string[] { }));
4041
}
4142

4243
// logger
4344
if (loggersTemplate != null)
4445
{
45-
string loggersUri = $"[concat(parameters('LinkedTemplatesBaseUrl'), '{fileNames.loggers}')]";
46+
string loggersUri = GenerateLinkedTemplateUri(creatorConfig, fileNames.loggers);
4647
resources.Add(this.CreateLinkedMasterTemplateResource("loggersTemplate", loggersUri, new string[] { }));
4748
}
4849

4950
// backend
5051
if (backendsTemplate != null)
5152
{
52-
string backendsUri = $"[concat(parameters('LinkedTemplatesBaseUrl'), '{fileNames.backends}')]";
53+
string backendsUri = GenerateLinkedTemplateUri(creatorConfig, fileNames.backends);
5354
resources.Add(this.CreateLinkedMasterTemplateResource("backendsTemplate", backendsUri, new string[] { }));
5455
}
5556

5657
// authorizationServer
5758
if (authorizationServersTemplate != null)
5859
{
59-
string authorizationServersUri = $"[concat(parameters('LinkedTemplatesBaseUrl'), '{fileNames.authorizationServers}')]";
60+
string authorizationServersUri = GenerateLinkedTemplateUri(creatorConfig, fileNames.authorizationServers);
6061
resources.Add(this.CreateLinkedMasterTemplateResource("authorizationServersTemplate", authorizationServersUri, new string[] { }));
6162
}
6263

6364
// each api has an associated api info class that determines whether the api is split and its dependencies on other resources
6465
foreach (LinkedMasterTemplateAPIInformation apiInfo in apiInformation)
6566
{
66-
if(apiInfo.isSplit == true)
67+
if (apiInfo.isSplit == true)
6768
{
6869
// add a deployment resource for both api template files
6970
string originalAPIName = fileNameGenerator.GenerateOriginalAPIName(apiInfo.name);
7071
string initialAPIDeploymentResourceName = $"{originalAPIName}-InitialAPITemplate";
7172
string subsequentAPIDeploymentResourceName = $"{originalAPIName}-SubsequentAPITemplate";
7273

7374
string initialAPIFileName = fileNameGenerator.GenerateCreatorAPIFileName(apiInfo.name, apiInfo.isSplit, true, apimServiceName);
74-
string initialAPIUri = $"[concat(parameters('LinkedTemplatesBaseUrl'), '{initialAPIFileName}')]";
75+
string initialAPIUri = GenerateLinkedTemplateUri(creatorConfig, initialAPIFileName);
7576
string[] initialAPIDependsOn = CreateAPIResourceDependencies(apiVersionSetTemplate, productsTemplate, loggersTemplate, backendsTemplate, authorizationServersTemplate, apiInfo);
7677
resources.Add(this.CreateLinkedMasterTemplateResource(initialAPIDeploymentResourceName, initialAPIUri, initialAPIDependsOn));
7778

7879
string subsequentAPIFileName = fileNameGenerator.GenerateCreatorAPIFileName(apiInfo.name, apiInfo.isSplit, false, apimServiceName);
79-
string subsequentAPIUri = $"[concat(parameters('LinkedTemplatesBaseUrl'), '{subsequentAPIFileName}')]";
80+
string subsequentAPIUri = GenerateLinkedTemplateUri(creatorConfig, subsequentAPIFileName);
8081
string[] subsequentAPIDependsOn = new string[] { $"[resourceId('Microsoft.Resources/deployments', '{initialAPIDeploymentResourceName}')]" };
8182
resources.Add(this.CreateLinkedMasterTemplateResource(subsequentAPIDeploymentResourceName, subsequentAPIUri, subsequentAPIDependsOn));
82-
} else
83+
}
84+
else
8385
{
8486
// add a deployment resource for the unified api template file
8587
string originalAPIName = fileNameGenerator.GenerateOriginalAPIName(apiInfo.name);
8688
string unifiedAPIDeploymentResourceName = $"{originalAPIName}-APITemplate";
8789
string unifiedAPIFileName = fileNameGenerator.GenerateCreatorAPIFileName(apiInfo.name, apiInfo.isSplit, true, apimServiceName);
88-
string unifiedAPIUri = $"[concat(parameters('LinkedTemplatesBaseUrl'), '{unifiedAPIFileName}')]";
90+
string unifiedAPIUri = GenerateLinkedTemplateUri(creatorConfig, unifiedAPIFileName);
8991
string[] unifiedAPIDependsOn = CreateAPIResourceDependencies(apiVersionSetTemplate, productsTemplate, loggersTemplate, backendsTemplate, authorizationServersTemplate, apiInfo);
9092
resources.Add(this.CreateLinkedMasterTemplateResource(unifiedAPIDeploymentResourceName, unifiedAPIUri, unifiedAPIDependsOn));
9193
}
@@ -152,7 +154,7 @@ public MasterTemplateResource CreateLinkedMasterTemplateResource(string name, st
152154
return masterTemplateResource;
153155
}
154156

155-
public Dictionary<string, TemplateParameterProperties> CreateMasterTemplateParameters(bool linked)
157+
public Dictionary<string, TemplateParameterProperties> CreateMasterTemplateParameters(CreatorConfig creatorConfig)
156158
{
157159
// used to create the parameter metatadata, etc (not value) for use in file with resources
158160
// add parameters with metatdata properties
@@ -167,7 +169,7 @@ public Dictionary<string, TemplateParameterProperties> CreateMasterTemplateParam
167169
};
168170
parameters.Add("ApimServiceName", apimServiceNameProperties);
169171
// add remote location of template files for linked option
170-
if (linked == true)
172+
if (creatorConfig.linked == true)
171173
{
172174
TemplateParameterProperties linkedTemplatesBaseUrlProperties = new TemplateParameterProperties()
173175
{
@@ -178,6 +180,18 @@ public Dictionary<string, TemplateParameterProperties> CreateMasterTemplateParam
178180
type = "string"
179181
};
180182
parameters.Add("LinkedTemplatesBaseUrl", linkedTemplatesBaseUrlProperties);
183+
if (creatorConfig.linkedTemplatesUrlQueryString != null)
184+
{
185+
TemplateParameterProperties linkedTemplatesUrlQueryStringProperties = new TemplateParameterProperties()
186+
{
187+
metadata = new TemplateParameterMetadata()
188+
{
189+
description = "Query string for the URL of the repository"
190+
},
191+
type = "string"
192+
};
193+
parameters.Add("LinkedTemplatesUrlQueryString", linkedTemplatesUrlQueryStringProperties);
194+
}
181195
}
182196
return parameters;
183197
}
@@ -202,6 +216,14 @@ public Template CreateMasterTemplateParameterValues(CreatorConfig creatorConfig)
202216
value = creatorConfig.linkedTemplatesBaseUrl
203217
};
204218
parameters.Add("LinkedTemplatesBaseUrl", linkedTemplatesBaseUrlProperties);
219+
if (creatorConfig.linkedTemplatesUrlQueryString != null)
220+
{
221+
TemplateParameterProperties linkedTemplatesUrlQueryStringProperties = new TemplateParameterProperties()
222+
{
223+
value = creatorConfig.linkedTemplatesUrlQueryString
224+
};
225+
parameters.Add("LinkedTemplatesUrlQueryString", linkedTemplatesUrlQueryStringProperties);
226+
}
205227
}
206228
masterTemplate.parameters = parameters;
207229
return masterTemplate;
@@ -224,7 +246,7 @@ public async Task<bool> DetermineIfAPIDependsOnLoggerAsync(APIConfig api, FileRe
224246
{
225247
foreach (KeyValuePair<string, OperationsConfig> operation in api.operations)
226248
{
227-
string operationPolicy = operation.Value.policy != null ? await fileReader.RetrieveFileContentsAsync(operation.Value.policy) : "";
249+
string operationPolicy = operation.Value.policy != null ? await fileReader.RetrieveFileContentsAsync(operation.Value.policy) : "";
228250
if (operationPolicy.Contains("logger"))
229251
{
230252
// capture operation policy dependent on logger
@@ -257,6 +279,11 @@ public async Task<bool> DetermineIfAPIDependsOnBackendAsync(APIConfig api, FileR
257279
}
258280
return false;
259281
}
282+
283+
public string GenerateLinkedTemplateUri(CreatorConfig creatorConfig, string fileName)
284+
{
285+
return creatorConfig.linkedTemplatesUrlQueryString != null ? $"[concat(parameters('LinkedTemplatesBaseUrl'), '{fileName}', parameters('LinkedTemplatesUrlQueryString'))]" : $"[concat(parameters('LinkedTemplatesBaseUrl'), '{fileName}')]";
286+
}
260287
}
261288

262289
public class LinkedMasterTemplateAPIInformation

src/APIM_ARMTemplate/apimtemplate/Properties/launchSettings.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"profiles": {
33
"apimtemplate": {
44
"commandName": "Project",
5-
"commandLineArgs": "create --configFile ./Creator/ExampleFiles/YAMLConfigs/validTesting.yml"
5+
"commandLineArgs": "create --configFile C:\\Users\\lucashh\\Desktop\\Projects\\APIM-ARM\\azure-api-management-devops-example\\src\\APIM_ARMTemplate\\apimtemplate\\Creator\\ExampleFiles\\YAMLConfigs\\validTesting.yml"
66
}
77
}
88
}

0 commit comments

Comments
 (0)