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

Commit 287051b

Browse files
authored
[Extractor]Refactor && small fixes (#329)
1 parent 7ed93a8 commit 287051b

File tree

8 files changed

+56
-39
lines changed

8 files changed

+56
-39
lines changed

src/APIM_ARMTemplate/apimtemplate/Commands/Create.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public CreateCommand()
3434
// initialize file helper classes
3535
FileWriter fileWriter = new FileWriter();
3636
FileNameGenerator fileNameGenerator = new FileNameGenerator();
37-
FileNames fileNames = fileNameGenerator.GenerateFileNames(creatorConfig.apimServiceName);
37+
FileNames fileNames = creatorConfig.baseFileName == null ? fileNameGenerator.GenerateFileNames(creatorConfig.apimServiceName) : fileNameGenerator.GenerateFileNames(creatorConfig.baseFileName);
3838

3939
// initialize template creator classes
4040
APIVersionSetTemplateCreator apiVersionSetTemplateCreator = new APIVersionSetTemplateCreator();

src/APIM_ARMTemplate/apimtemplate/Commands/Extract.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,13 @@ public ExtractCommand()
4747
// initialize file helper classes
4848
FileWriter fileWriter = new FileWriter();
4949
FileNameGenerator fileNameGenerator = new FileNameGenerator();
50-
FileNames fileNames = fileNameGenerator.GenerateFileNames(extractorConfig.sourceApimName);
50+
FileNames fileNames = extractorConfig.baseFileName == null ? fileNameGenerator.GenerateFileNames(extractorConfig.sourceApimName) : fileNameGenerator.GenerateFileNames(extractorConfig.baseFileName);
5151

5252
if (splitAPIs)
5353
{
5454
// create split api templates for all apis in the sourceApim
5555
await ExtractorUtils.GenerateSplitAPITemplates(extractorConfig, fileNameGenerator, fileWriter, fileNames);
56+
await ExtractorUtils.GenerateTemplates(new Extractor(extractorConfig), null, null, fileNameGenerator, fileNames, fileWriter, null);
5657
}
5758
else if (hasVersionSetName)
5859
{

src/APIM_ARMTemplate/apimtemplate/Common/FileHandlers/FileNameGenerator.cs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,21 +5,21 @@ namespace Microsoft.Azure.Management.ApiManagement.ArmTemplates.Common
55
public class FileNameGenerator
66
{
77

8-
public FileNames GenerateFileNames(string apimServiceName)
8+
public FileNames GenerateFileNames(string baseFileName)
99
{
1010
// generate useable object with file names for consistency throughout project
1111
return new FileNames()
1212
{
13-
apiVersionSets = $@"/{apimServiceName}-apiVersionSets.template.json",
14-
authorizationServers = $@"/{apimServiceName}-authorizationServers.template.json",
15-
backends = $@"/{apimServiceName}-backends.template.json",
16-
globalServicePolicy = $@"/{apimServiceName}-globalServicePolicy.template.json",
17-
loggers = $@"/{apimServiceName}-loggers.template.json",
18-
namedValues = $@"/{apimServiceName}-namedValues.template.json",
19-
tags = $@"/{apimServiceName}-tags.template.json",
20-
products = $@"/{apimServiceName}-products.template.json",
21-
parameters = $@"/{apimServiceName}-parameters.json",
22-
linkedMaster = $@"/{apimServiceName}-master.template.json",
13+
apiVersionSets = $@"/{baseFileName}-apiVersionSets.template.json",
14+
authorizationServers = $@"/{baseFileName}-authorizationServers.template.json",
15+
backends = $@"/{baseFileName}-backends.template.json",
16+
globalServicePolicy = $@"/{baseFileName}-globalServicePolicy.template.json",
17+
loggers = $@"/{baseFileName}-loggers.template.json",
18+
namedValues = $@"/{baseFileName}-namedValues.template.json",
19+
tags = $@"/{baseFileName}-tags.template.json",
20+
products = $@"/{baseFileName}-products.template.json",
21+
parameters = $@"/{baseFileName}-parameters.json",
22+
linkedMaster = $@"/{baseFileName}-master.template.json",
2323
apis = "/Apis",
2424
splitAPIs = "/SplitAPIs",
2525
versionSetMasterFolder = "/VersionSetMasterFolder",

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ public class CreatorConfig
2525
public bool linked { get; set; }
2626
public string linkedTemplatesBaseUrl { get; set; }
2727
public string linkedTemplatesUrlQueryString { get; set; }
28+
public string baseFileName { get; set; }
2829
}
2930

3031
public class APIVersionSetConfig: APIVersionSetProperties

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

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -188,9 +188,10 @@ public async Task<string> GetAPISchemaDetailsAsync(string ApiManagementName, str
188188
return await CallApiManagementAsync(azToken, requestUrl);
189189
}
190190

191-
public async Task<List<TemplateResource>> GenerateSingleAPIResourceAsync(string apiName, string apimname, string resourceGroup, string fileFolder, string policyXMLBaseUrl, string policyXMLSasToken)
191+
public async Task<List<TemplateResource>> GenerateSingleAPIResourceAsync(string apiName, Extractor exc)
192192
{
193193
List<TemplateResource> templateResources = new List<TemplateResource>();
194+
string apimname = exc.sourceApimName, resourceGroup = exc.resourceGroup, fileFolder = exc.fileFolder, policyXMLBaseUrl = exc.policyXMLBaseUrl, policyXMLSasToken = exc.policyXMLSasToken;
194195
string apiDetails = await GetAPIDetailsAsync(apimname, resourceGroup, apiName);
195196

196197
Console.WriteLine("------------------------------------------");
@@ -283,7 +284,7 @@ public async Task<List<TemplateResource>> GenerateSingleAPIResourceAsync(string
283284
{
284285
string policyXMLContent = operationPolicyResource.properties.value;
285286
string policyFolder = String.Concat(fileFolder, $@"/policies");
286-
string operationPolicyFileName = $@"/{operationName}-operationPolicy.xml";
287+
string operationPolicyFileName = $@"/{apiName}-{operationName}-operationPolicy.xml";
287288
this.fileWriter.CreateFolderIfNotExists(policyFolder);
288289
this.fileWriter.WriteXMLToFile(policyXMLContent, String.Concat(policyFolder, operationPolicyFileName));
289290
operationPolicyResource.properties.format = "rawxml-link";
@@ -451,7 +452,7 @@ public async Task<Template> GenerateAPIRevisionTemplateAsync(string currentRevis
451452
List<TemplateResource> templateResources = new List<TemplateResource>();
452453
Console.WriteLine("{0} APIs found ...", revList.Count().ToString());
453454

454-
List<TemplateResource> apiResources = await GenerateSingleAPIResourceAsync(apiName, exc.sourceApimName, exc.resourceGroup, exc.fileFolder, exc.policyXMLBaseUrl, exc.policyXMLSasToken);
455+
List<TemplateResource> apiResources = await GenerateSingleAPIResourceAsync(apiName, exc);
455456
templateResources.AddRange(apiResources);
456457

457458
foreach (string curApi in revList)
@@ -460,13 +461,13 @@ public async Task<Template> GenerateAPIRevisionTemplateAsync(string currentRevis
460461
if (curApi.Equals(currentRevision))
461462
{
462463
// add current API revision resource to template
463-
apiResources = await GenerateCurrentRevisionAPIResourceAsync(curApi, exc.sourceApimName, exc.resourceGroup, exc.fileFolder, exc.policyXMLBaseUrl, exc.policyXMLSasToken);
464+
apiResources = await GenerateCurrentRevisionAPIResourceAsync(curApi, exc);
464465
templateResources.AddRange(apiResources);
465466
}
466467
else
467468
{
468469
// add other API revision resources to template
469-
apiResources = await GenerateSingleAPIResourceAsync(curApi, exc.sourceApimName, exc.resourceGroup, exc.fileFolder, exc.policyXMLBaseUrl, exc.policyXMLSasToken);
470+
apiResources = await GenerateSingleAPIResourceAsync(curApi, exc);
470471

471472
// make current API a dependency to other revisions, in case destination apim doesn't have the this API
472473
TemplateResource apiResource = apiResources.FirstOrDefault(resource => resource.type == ResourceTypeConstants.API) as TemplateResource;
@@ -485,9 +486,10 @@ public async Task<Template> GenerateAPIRevisionTemplateAsync(string currentRevis
485486
}
486487

487488
// this function will get the current revision of this api and will remove "isCurrent" paramter
488-
public async Task<List<TemplateResource>> GenerateCurrentRevisionAPIResourceAsync(string apiName, string apimname, string resourceGroup, string fileFolder, string policyXMLBaseUrl, string policyXMLSasToken)
489+
public async Task<List<TemplateResource>> GenerateCurrentRevisionAPIResourceAsync(string apiName, Extractor exc)
489490
{
490491
List<TemplateResource> templateResources = new List<TemplateResource>();
492+
string apimname = exc.sourceApimName, resourceGroup = exc.resourceGroup, fileFolder = exc.fileFolder, policyXMLBaseUrl = exc.policyXMLBaseUrl, policyXMLSasToken = exc.policyXMLSasToken;
491493
string apiDetails = await GetAPIDetailsAsync(apimname, resourceGroup, apiName);
492494
Console.WriteLine("------------------------------------------");
493495
Console.WriteLine("Extracting resources from {0} API:", apiName);
@@ -579,7 +581,7 @@ public async Task<List<TemplateResource>> GenerateCurrentRevisionAPIResourceAsyn
579581
{
580582
string policyXMLContent = operationPolicyResource.properties.value;
581583
string policyFolder = String.Concat(fileFolder, $@"/policies");
582-
string operationPolicyFileName = $@"/{operationName}-operationPolicy.xml";
584+
string operationPolicyFileName = $@"/{apiName}-{operationName}-operationPolicy.xml";
583585
this.fileWriter.CreateFolderIfNotExists(policyFolder);
584586
this.fileWriter.WriteXMLToFile(policyXMLContent, String.Concat(policyFolder, operationPolicyFileName));
585587
operationPolicyResource.properties.format = "rawxml-link";
@@ -739,10 +741,10 @@ public async Task<List<TemplateResource>> GenerateCurrentRevisionAPIResourceAsyn
739741
return templateResources;
740742
}
741743

742-
public async Task<Template> GenerateAPIsARMTemplateAsync(string apimname, string resourceGroup, string singleApiName, List<string> multipleApiNames, string policyXMLBaseUrl, string policyXMLSasToken, string fileFolder)
744+
public async Task<Template> GenerateAPIsARMTemplateAsync(string singleApiName, List<string> multipleApiNames, Extractor exc)
743745
{
744746
// initialize arm template
745-
Template armTemplate = GenerateEmptyTemplateWithParameters(policyXMLBaseUrl, policyXMLSasToken);
747+
Template armTemplate = GenerateEmptyTemplateWithParameters(exc.policyXMLBaseUrl, exc.policyXMLSasToken);
746748
List<TemplateResource> templateResources = new List<TemplateResource>();
747749

748750
// when extract single API
@@ -751,9 +753,9 @@ public async Task<Template> GenerateAPIsARMTemplateAsync(string apimname, string
751753
// check if this api exist
752754
try
753755
{
754-
string apiDetails = await GetAPIDetailsAsync(apimname, resourceGroup, singleApiName);
756+
string apiDetails = await GetAPIDetailsAsync(exc.sourceApimName, exc.resourceGroup, singleApiName);
755757
Console.WriteLine("{0} API found ...", singleApiName);
756-
templateResources.AddRange(await GenerateSingleAPIResourceAsync(singleApiName, apimname, resourceGroup, fileFolder, policyXMLBaseUrl, policyXMLSasToken));
758+
templateResources.AddRange(await GenerateSingleAPIResourceAsync(singleApiName, exc));
757759
}
758760
catch (Exception)
759761
{
@@ -766,19 +768,19 @@ public async Task<Template> GenerateAPIsARMTemplateAsync(string apimname, string
766768
Console.WriteLine("{0} APIs found ...", multipleApiNames.Count().ToString());
767769
foreach (string apiName in multipleApiNames)
768770
{
769-
templateResources.AddRange(await GenerateSingleAPIResourceAsync(apiName, apimname, resourceGroup, fileFolder, policyXMLBaseUrl, policyXMLSasToken));
771+
templateResources.AddRange(await GenerateSingleAPIResourceAsync(apiName, exc));
770772
}
771773
}
772774
// when extract all APIs and generate one master template
773775
else
774776
{
775-
JToken[] oApis = await GetAllAPIObjsAsync(apimname, resourceGroup);
777+
JToken[] oApis = await GetAllAPIObjsAsync(exc.sourceApimName, exc.resourceGroup);
776778
Console.WriteLine("{0} APIs found ...", (oApis.Count().ToString()));
777779

778780
foreach (JToken oApi in oApis)
779781
{
780782
string apiName = ((JValue)oApi["name"]).Value.ToString();
781-
templateResources.AddRange(await GenerateSingleAPIResourceAsync(apiName, apimname, resourceGroup, fileFolder, policyXMLBaseUrl, policyXMLSasToken));
783+
templateResources.AddRange(await GenerateSingleAPIResourceAsync(apiName, exc));
782784
}
783785
}
784786
armTemplate.resources = templateResources.ToArray();

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

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public Template GenerateLinkedMasterTemplate(Template apiTemplate,
3535
// namedValue
3636
string namedValueDeploymentResourceName = "namedValuesTemplate";
3737
// all other deployment resources will depend on named values
38-
string[] dependsOnNamedValues = new string[] {};
38+
string[] dependsOnNamedValues = new string[] { };
3939

4040
// api dependsOn
4141
List<string> apiDependsOn = new List<string>();
@@ -45,15 +45,15 @@ public Template GenerateLinkedMasterTemplate(Template apiTemplate,
4545
dependsOnNamedValues = new string[] { $"[resourceId('Microsoft.Resources/deployments', '{namedValueDeploymentResourceName}')]" };
4646
apiDependsOn.Add($"[resourceId('Microsoft.Resources/deployments', '{namedValueDeploymentResourceName}')]");
4747
string namedValuesUri = GenerateLinkedTemplateUri(linkedTemplatesUrlQueryString, linkedTemplatesSasToken, fileNames.namedValues);
48-
resources.Add(this.CreateLinkedMasterTemplateResource(namedValueDeploymentResourceName, namedValuesUri, new string[] { }));
48+
resources.Add(this.CreateLinkedMasterTemplateResourceWithPolicyToken(namedValueDeploymentResourceName, namedValuesUri, new string[] { }, policyXMLSasToken));
4949
}
5050

5151
// globalServicePolicy
5252
if (globalServicePolicyTemplate != null && globalServicePolicyTemplate.resources.Count() != 0)
5353
{
5454
apiDependsOn.Add("[resourceId('Microsoft.Resources/deployments', 'globalServicePolicyTemplate')]");
5555
string globalServicePolicyUri = GenerateLinkedTemplateUri(linkedTemplatesUrlQueryString, linkedTemplatesSasToken, fileNames.globalServicePolicy);
56-
resources.Add(this.CreateLinkedMasterTemplateResource("globalServicePolicyTemplate", globalServicePolicyUri, dependsOnNamedValues));
56+
resources.Add(this.CreateLinkedMasterTemplateResourceWithPolicyToken("globalServicePolicyTemplate", globalServicePolicyUri, dependsOnNamedValues, policyXMLSasToken));
5757
}
5858

5959
// apiVersionSet
@@ -107,13 +107,26 @@ public Template GenerateLinkedMasterTemplate(Template apiTemplate,
107107
if (apiTemplate != null && apiTemplate.resources.Count() != 0)
108108
{
109109
string apisUri = GenerateLinkedTemplateUri(linkedTemplatesUrlQueryString, linkedTemplatesSasToken, apiFileName);
110-
resources.Add(this.CreateLinkedMasterTemplateResource("apisTemplate", apisUri, apiDependsOn.ToArray()));
110+
resources.Add(this.CreateLinkedMasterTemplateResourceWithPolicyToken("apisTemplate", apisUri, apiDependsOn.ToArray(), policyXMLSasToken));
111111
}
112112

113113
masterTemplate.resources = resources.ToArray();
114114
return masterTemplate;
115115
}
116116

117+
public MasterTemplateResource CreateLinkedMasterTemplateResourceWithPolicyToken(string name, string uriLink, string[] dependsOn, string sasToken)
118+
{
119+
if (sasToken == null)
120+
{
121+
return this.CreateLinkedMasterTemplateResource(name, uriLink, dependsOn);
122+
}
123+
else
124+
{
125+
MasterTemplateResource masterResourceTemplate = this.CreateLinkedMasterTemplateResource(name, uriLink, dependsOn);
126+
masterResourceTemplate.properties.parameters.Add("PolicyXMLSasToken", new TemplateParameterProperties() { value = "[parameters('PolicyXMLSasToken')]" });
127+
return masterResourceTemplate;
128+
}
129+
}
117130
public MasterTemplateResource CreateLinkedMasterTemplateResource(string name, string uriLink, string[] dependsOn)
118131
{
119132
// create deployment resource with provided arguments
@@ -133,8 +146,7 @@ public MasterTemplateResource CreateLinkedMasterTemplateResource(string name, st
133146
parameters = new Dictionary<string, TemplateParameterProperties>
134147
{
135148
{ "ApimServiceName", new TemplateParameterProperties(){ value = "[parameters('ApimServiceName')]" } },
136-
{ "PolicyXMLBaseUrl", new TemplateParameterProperties(){ value = "[parameters('PolicyXMLBaseUrl')]" } },
137-
{ "PolicyXMLSasToken", new TemplateParameterProperties(){ value = "[parameters('PolicyXMLSasToken')]" } }
149+
{ "PolicyXMLBaseUrl", new TemplateParameterProperties(){ value = "[parameters('PolicyXMLBaseUrl')]" } }
138150
}
139151
},
140152
dependsOn = dependsOn
@@ -248,7 +260,7 @@ public Template CreateSingleAPIRevisionsMasterTemplate(List<string> revList, str
248260
}
249261
else
250262
{
251-
resources.Add(this.CreateLinkedMasterTemplateResource(templatename, revUri, new string[]{}));
263+
resources.Add(this.CreateLinkedMasterTemplateResource(templatename, revUri, new string[] { }));
252264
}
253265
}
254266

@@ -316,7 +328,7 @@ public Template CreateMasterTemplateParameterValues(string apimServiceName, stri
316328
{
317329
value = policyXMLSasToken
318330
};
319-
parameters.Add("PolicyXMLSasToken", policyTemplateSasTokenProperties);
331+
parameters.Add("PolicyXMLSasToken", policyTemplateSasTokenProperties);
320332
}
321333
}
322334
masterTemplate.parameters = parameters;
@@ -325,8 +337,8 @@ public Template CreateMasterTemplateParameterValues(string apimServiceName, stri
325337

326338
public string GenerateLinkedTemplateUri(string linkedTemplatesUrlQueryString, string linkedTemplatesSasToken, string fileName)
327339
{
328-
string linkedTemplateUri = linkedTemplatesSasToken != null ? $"concat(parameters('LinkedTemplatesBaseUrl'), '{fileName}', parameters('LinkedTemplatesSasToken'))" : $"concat(parameters('LinkedTemplatesBaseUrl'), '{fileName}')";
329-
return linkedTemplatesUrlQueryString != null ? $"[concat('{linkedTemplateUri}', parameters('LinkedTemplatesUrlQueryString'))]" : $"[{linkedTemplateUri}]";
340+
string linkedTemplateUri = linkedTemplatesSasToken != null ? $"parameters('LinkedTemplatesBaseUrl'), '{fileName}', parameters('LinkedTemplatesSasToken')" : $"parameters('LinkedTemplatesBaseUrl'), '{fileName}'";
341+
return linkedTemplatesUrlQueryString != null ? $"[concat({linkedTemplateUri}, parameters('LinkedTemplatesUrlQueryString'))]" : $"[concat({linkedTemplateUri})]";
330342
}
331343
}
332344
}

src/APIM_ARMTemplate/apimtemplate/Extractor/Models/ExtractorConfiguration.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,8 @@ public class ExtractorConfig
3232
public string apiVersionSetName { get; set; }
3333
[Description("Includes all revisions for a single api - use with caution")]
3434
public string includeAllRevisions { get; set; }
35-
35+
[Description("Specify base name of the template file")]
36+
public string baseFileName { get; set; }
3637
public void Validate()
3738
{
3839
if (string.IsNullOrEmpty(sourceApimName)) throw new ArgumentException("Missing parameter <sourceApimName>.");

0 commit comments

Comments
 (0)