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

Commit e52cf96

Browse files
committed
add linked template query string arg to extractor for private storage
1 parent 502eef4 commit e52cf96

File tree

3 files changed

+48
-18
lines changed

3 files changed

+48
-18
lines changed

src/APIM_ARMTemplate/apimtemplate/Commands/Extract.cs

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ public ExtractCommand()
1919
var fileFolderName = this.Option("--fileFolder <filefolder>", "ARM Template files folder", CommandOptionType.SingleValue);
2020
var apiName = this.Option("--apiName <apiName>", "API name", CommandOptionType.SingleValue);
2121
var linkedTemplatesBaseUrlName = this.Option("--linkedTemplatesBaseUrl <linkedTemplatesBaseUrl>", "Creates a master template with links", CommandOptionType.SingleValue);
22+
var linkedTemplatesUrlQueryString = this.Option("--linkedTemplatesUrlQueryString <linkedTemplatesUrlQueryString>", "Query string appended to linked templates uris that enables retrieval from private storage", CommandOptionType.SingleValue);
2223
var policyXMLBaseUrlName = this.Option("--policyXMLBaseUrl <policyXMLBaseUrl>", "Writes policies to local XML files that require deployment to remote folder", CommandOptionType.SingleValue);
2324

2425
this.HelpOption();
@@ -33,17 +34,18 @@ public ExtractCommand()
3334
if (!fileFolderName.HasValue()) throw new Exception("Missing parameter <filefolder>.");
3435

3536
// isolate cli parameters
36-
string resourceGroup = resourceGroupName.Values[0].ToString();
37-
string sourceApim = sourceApimName.Values[0].ToString();
38-
string destinationApim = destinationAPIManagementName.Values[0].ToString();
39-
string fileFolder = fileFolderName.Values[0].ToString();
37+
string resourceGroup = resourceGroupName.Value().ToString();
38+
string sourceApim = sourceApimName.Value().ToString();
39+
string destinationApim = destinationAPIManagementName.Value().ToString();
40+
string fileFolder = fileFolderName.Value().ToString();
4041
string linkedBaseUrl = linkedTemplatesBaseUrlName.HasValue() ? linkedTemplatesBaseUrlName.Value().ToString() : null;
42+
string linkedUrlQueryString = linkedTemplatesUrlQueryString.HasValue() ? linkedTemplatesUrlQueryString.Value().ToString() : null;
4143
string policyXMLBaseUrl = policyXMLBaseUrlName.HasValue() ? policyXMLBaseUrlName.Value().ToString() : null;
4244
string singleApiName = null;
4345

4446
if (apiName.Values.Count > 0)
4547
{
46-
singleApiName = apiName.Values[0].ToString();
48+
singleApiName = apiName.Value().ToString();
4749
}
4850

4951
Console.WriteLine("API Management Template");
@@ -85,7 +87,7 @@ public ExtractCommand()
8587
Template backendTemplate = await backendExtractor.GenerateBackendsARMTemplateAsync(sourceApim, resourceGroup, singleApiName, apiTemplateResources, namedValueResources, policyXMLBaseUrl);
8688

8789
// create parameters file
88-
Template templateParameters = masterTemplateExtractor.CreateMasterTemplateParameterValues(destinationApim, linkedBaseUrl, policyXMLBaseUrl);
90+
Template templateParameters = masterTemplateExtractor.CreateMasterTemplateParameterValues(destinationApim, linkedBaseUrl, linkedUrlQueryString, policyXMLBaseUrl);
8991

9092
// write templates to output file location
9193
string apiFileName = fileNameGenerator.GenerateExtractorAPIFileName(singleApiName, sourceApim);
@@ -100,7 +102,7 @@ public ExtractCommand()
100102
if (linkedBaseUrl != null)
101103
{
102104
// create a master template that links to all other templates
103-
Template masterTemplate = masterTemplateExtractor.GenerateLinkedMasterTemplate(apiTemplate, apiVersionSetTemplate, productTemplate, loggerTemplate, backendTemplate, authorizationServerTemplate, namedValueTemplate, fileNames, apiFileName, policyXMLBaseUrl);
105+
Template masterTemplate = masterTemplateExtractor.GenerateLinkedMasterTemplate(apiTemplate, apiVersionSetTemplate, productTemplate, loggerTemplate, backendTemplate, authorizationServerTemplate, namedValueTemplate, fileNames, apiFileName, linkedUrlQueryString, policyXMLBaseUrl);
104106
fileWriter.WriteJSONToFile(masterTemplate, String.Concat(@fileFolder, fileNames.linkedMaster));
105107
}
106108

src/APIM_ARMTemplate/apimtemplate/Extractor/EntityExtractors/MasterTemplateExtractor.cs

Lines changed: 38 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,14 @@ public Template GenerateLinkedMasterTemplate(Template apiTemplate,
1717
Template namedValuesTemplate,
1818
FileNames fileNames,
1919
string apiFileName,
20+
string linkedTemplatesUrlQueryString,
2021
string policyXMLBaseUrl)
2122
{
2223
// create empty template
2324
Template masterTemplate = GenerateEmptyTemplate();
2425

2526
// add parameters
26-
masterTemplate.parameters = this.CreateMasterTemplateParameters(true, policyXMLBaseUrl);
27+
masterTemplate.parameters = this.CreateMasterTemplateParameters(true, linkedTemplatesUrlQueryString, policyXMLBaseUrl);
2728

2829
// add deployment resources that links to all resource files
2930
List<TemplateResource> resources = new List<TemplateResource>();
@@ -34,49 +35,49 @@ public Template GenerateLinkedMasterTemplate(Template apiTemplate,
3435
string[] dependsOnNamedValues = new string[] { $"[resourceId('Microsoft.Resources/deployments', '{namedValueDeploymentResourceName}')]" };
3536
if (namedValuesTemplate != null)
3637
{
37-
string namedValuesUri = $"[concat(parameters('LinkedTemplatesBaseUrl'), '{fileNames.namedValues}')]";
38+
string namedValuesUri = GenerateLinkedTemplateUri(linkedTemplatesUrlQueryString, fileNames.namedValues);
3839
resources.Add(this.CreateLinkedMasterTemplateResource(namedValueDeploymentResourceName, namedValuesUri, new string[] { }));
3940
}
4041

4142
// apiVersionSet
4243
if (apiVersionSetTemplate != null)
4344
{
44-
string apiVersionSetUri = $"[concat(parameters('LinkedTemplatesBaseUrl'), '{fileNames.apiVersionSets}')]";
45+
string apiVersionSetUri = GenerateLinkedTemplateUri(linkedTemplatesUrlQueryString, fileNames.apiVersionSets);
4546
resources.Add(this.CreateLinkedMasterTemplateResource("versionSetTemplate", apiVersionSetUri, dependsOnNamedValues));
4647
}
4748

4849
// product
4950
if (productsTemplate != null)
5051
{
51-
string productsUri = $"[concat(parameters('LinkedTemplatesBaseUrl'), '{fileNames.products}')]";
52+
string productsUri = GenerateLinkedTemplateUri(linkedTemplatesUrlQueryString, fileNames.products);
5253
resources.Add(this.CreateLinkedMasterTemplateResource("productsTemplate", productsUri, dependsOnNamedValues));
5354
}
5455

5556
// logger
5657
if (loggersTemplate != null)
5758
{
58-
string loggersUri = $"[concat(parameters('LinkedTemplatesBaseUrl'), '{fileNames.loggers}')]";
59+
string loggersUri = GenerateLinkedTemplateUri(linkedTemplatesUrlQueryString, fileNames.loggers);
5960
resources.Add(this.CreateLinkedMasterTemplateResource("loggersTemplate", loggersUri, dependsOnNamedValues));
6061
}
6162

6263
// backend
6364
if (backendsTemplate != null)
6465
{
65-
string backendsUri = $"[concat(parameters('LinkedTemplatesBaseUrl'), '{fileNames.backends}')]";
66+
string backendsUri = GenerateLinkedTemplateUri(linkedTemplatesUrlQueryString, fileNames.backends);
6667
resources.Add(this.CreateLinkedMasterTemplateResource("backendsTemplate", backendsUri, dependsOnNamedValues));
6768
}
6869

6970
// authorizationServer
7071
if (authorizationServersTemplate != null)
7172
{
72-
string authorizationServersUri = $"[concat(parameters('LinkedTemplatesBaseUrl'), '{fileNames.authorizationServers}')]";
73+
string authorizationServersUri = GenerateLinkedTemplateUri(linkedTemplatesUrlQueryString, fileNames.authorizationServers);
7374
resources.Add(this.CreateLinkedMasterTemplateResource("authorizationServersTemplate", authorizationServersUri, dependsOnNamedValues));
7475
}
7576

7677
// api
7778
if (apiTemplate != null)
7879
{
79-
string apisUri = $"[concat(parameters('LinkedTemplatesBaseUrl'), '{apiFileName}')]";
80+
string apisUri = GenerateLinkedTemplateUri(linkedTemplatesUrlQueryString, apiFileName);
8081
resources.Add(this.CreateLinkedMasterTemplateResource("apisTemplate", apisUri, GenerateAPIResourceDependencies(apiTemplate, apiVersionSetTemplate, productsTemplate, loggersTemplate, backendsTemplate, authorizationServersTemplate, namedValueDeploymentResourceName)));
8182
}
8283

@@ -132,7 +133,7 @@ public MasterTemplateResource CreateLinkedMasterTemplateResource(string name, st
132133
return masterTemplateResource;
133134
}
134135

135-
public Dictionary<string, TemplateParameterProperties> CreateMasterTemplateParameters(bool linked, string policyXMLBaseUrl)
136+
public Dictionary<string, TemplateParameterProperties> CreateMasterTemplateParameters(bool linked, string linkedTemplatesUrlQueryString, string policyXMLBaseUrl)
136137
{
137138
// used to create the parameter metatadata, etc (not value) for use in file with resources
138139
// add parameters with metatdata properties
@@ -158,6 +159,19 @@ public Dictionary<string, TemplateParameterProperties> CreateMasterTemplateParam
158159
type = "string"
159160
};
160161
parameters.Add("LinkedTemplatesBaseUrl", linkedTemplatesBaseUrlProperties);
162+
// add linkedTemplatesUrlQueryString parameter if provided and if the templates are linked
163+
if (linkedTemplatesUrlQueryString != null)
164+
{
165+
TemplateParameterProperties linkedTemplatesUrlQueryStringProperties = new TemplateParameterProperties()
166+
{
167+
metadata = new TemplateParameterMetadata()
168+
{
169+
description = "Query string for the URL of the repository"
170+
},
171+
type = "string"
172+
};
173+
parameters.Add("LinkedTemplatesUrlQueryString", linkedTemplatesUrlQueryStringProperties);
174+
}
161175
}
162176
if (policyXMLBaseUrl != null)
163177
{
@@ -174,7 +188,7 @@ public Dictionary<string, TemplateParameterProperties> CreateMasterTemplateParam
174188
return parameters;
175189
}
176190

177-
public Template CreateMasterTemplateParameterValues(string apimServiceName, string linkedTemplatesBaseUrl, string policyXMLBaseUrl)
191+
public Template CreateMasterTemplateParameterValues(string apimServiceName, string linkedTemplatesBaseUrl, string linkedTemplatesUrlQueryString, string policyXMLBaseUrl)
178192
{
179193
// used to create the parameter values for use in parameters file
180194
// create empty template
@@ -194,6 +208,15 @@ public Template CreateMasterTemplateParameterValues(string apimServiceName, stri
194208
value = linkedTemplatesBaseUrl
195209
};
196210
parameters.Add("LinkedTemplatesBaseUrl", linkedTemplatesBaseUrlProperties);
211+
// add linkedTemplatesUrlQueryString parameter if provided and if the user has provided a linkedTemplatesBaseUrl
212+
if (linkedTemplatesUrlQueryString != null)
213+
{
214+
TemplateParameterProperties linkedTemplatesUrlQueryStringProperties = new TemplateParameterProperties()
215+
{
216+
value = linkedTemplatesUrlQueryString
217+
};
218+
parameters.Add("LinkedTemplatesUrlQueryString", linkedTemplatesUrlQueryStringProperties);
219+
}
197220
}
198221
if (policyXMLBaseUrl != null)
199222
{
@@ -206,5 +229,10 @@ public Template CreateMasterTemplateParameterValues(string apimServiceName, stri
206229
masterTemplate.parameters = parameters;
207230
return masterTemplate;
208231
}
232+
233+
public string GenerateLinkedTemplateUri(string linkedTemplatesUrlQueryString, string fileName)
234+
{
235+
return linkedTemplatesUrlQueryString != null ? $"[concat(parameters('LinkedTemplatesBaseUrl'), '{fileName}', parameters('LinkedTemplatesUrlQueryString'))]" : $"[concat(parameters('LinkedTemplatesBaseUrl'), '{fileName}')]";
236+
}
209237
}
210238
}

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 C:\\Users\\lucashh\\Desktop\\Projects\\APIM-ARM\\azure-api-management-devops-example\\src\\APIM_ARMTemplate\\apimtemplate\\Creator\\ExampleFiles\\YAMLConfigs\\validTesting.yml"
5+
"commandLineArgs": "extract --sourceApimName lucas-create-push --destinationApimName lucas-extract-push --resourceGroup LucasHuetHudsonInternal --fileFolder C:\\Users\\lucashh\\Desktop\\Projects\\APIM-ARM\\GeneratedTemplates\\Extractor\\Full --linkedTemplatesBaseUrl https://lucasapimstorage.blob.core.windows.net/linked-templates --linkedTemplatesUrlQueryString ?sv=2018-03-28&ss=bfqt&srt=sco&sp=rwdlacup&se=2019-12-24T23:12:53Z&st=2019-09-09T14:12:53Z&spr=https&sig=uFGlpJEYPH81OQVzKb7q9nLq0Xt%2Bu35UTqpATIZo6uc%3D"
66
}
77
}
88
}

0 commit comments

Comments
 (0)