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

Commit 5935ddf

Browse files
committed
extract named values and write to template, fixes myriad issues with other resources that use them
1 parent 9422e11 commit 5935ddf

File tree

2 files changed

+43
-13
lines changed

2 files changed

+43
-13
lines changed

src/APIM_ARMTemplate/apimtemplate/Commands/Extract.cs

Lines changed: 33 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ private void GenerateARMTemplate(string apimname, string resourceGroup, string f
6969

7070
if (singleApiName == null)
7171
{
72+
GenerateNamedValuesTemplate(resourceGroup, apimname, fileFolder);
7273
GenerateLoggerTemplate(resourceGroup, apimname, fileFolder);
7374
}
7475

@@ -390,16 +391,10 @@ private async void GenerateLoggerTemplate(string resourceGroup, string apimname,
390391
Console.WriteLine("------------------------------------------");
391392
Console.WriteLine("Getting loggers from service");
392393
LoggerExtractor loggerExtractor = new LoggerExtractor();
393-
PropertyExtractor propertyExtractor = new PropertyExtractor();
394394
Template armTemplate = GenerateEmptyTemplateWithParameters();
395395

396396
List<TemplateResource> templateResources = new List<TemplateResource>();
397397

398-
// pull named values for later credential reference
399-
string properties = propertyExtractor.GetProperties(apimname, resourceGroup).Result;
400-
JObject oProperties = JObject.Parse(properties);
401-
List<PropertyTemplateResource> propertyResources = oProperties["value"].ToObject<List<PropertyTemplateResource>>();
402-
403398
string loggers = loggerExtractor.GetLoggers(apimname, resourceGroup).Result;
404399
JObject oLoggers = JObject.Parse(loggers);
405400
foreach (var extractedLogger in oLoggers["value"])
@@ -414,13 +409,6 @@ private async void GenerateLoggerTemplate(string resourceGroup, string apimname,
414409
loggerResource.apiVersion = "2018-06-01-preview";
415410
loggerResource.scale = null;
416411

417-
// swap instrumentation key credentials for their hidden values if the logger is app insights, taken from named values
418-
if (loggerResource.properties.credentials != null && loggerResource.properties.credentials.instrumentationKey != null)
419-
{
420-
string hiddenKey = loggerResource.properties.credentials.instrumentationKey.Substring(2, loggerResource.properties.credentials.instrumentationKey.Length - 4);
421-
loggerResource.properties.credentials.instrumentationKey = propertyResources.Find(p => p.properties.displayName == hiddenKey).properties.value;
422-
}
423-
424412
templateResources.Add(loggerResource);
425413
}
426414

@@ -429,6 +417,38 @@ private async void GenerateLoggerTemplate(string resourceGroup, string apimname,
429417
fileWriter.WriteJSONToFile(armTemplate, @fileFolder + Path.DirectorySeparatorChar + apimname + "-loggers.json");
430418
}
431419

420+
private async void GenerateNamedValuesTemplate(string resourceGroup, string apimname, string fileFolder)
421+
{
422+
Console.WriteLine("------------------------------------------");
423+
Console.WriteLine("Getting named values from service");
424+
PropertyExtractor propertyExtractor = new PropertyExtractor();
425+
Template armTemplate = GenerateEmptyTemplateWithParameters();
426+
427+
List<TemplateResource> templateResources = new List<TemplateResource>();
428+
429+
// pull named values for later credential reference
430+
string properties = propertyExtractor.GetProperties(apimname, resourceGroup).Result;
431+
JObject oProperties = JObject.Parse(properties);
432+
foreach (var extractedProperty in oProperties["value"])
433+
{
434+
string propertyName = ((JValue)extractedProperty["name"]).Value.ToString();
435+
Console.WriteLine("'{0}' Named value found", propertyName);
436+
437+
string fullLoggerResource = await propertyExtractor.GetProperty(apimname, resourceGroup, propertyName);
438+
PropertyTemplateResource propertyTemplateResource = JsonConvert.DeserializeObject<PropertyTemplateResource>(fullLoggerResource);
439+
propertyTemplateResource.name = $"[concat(parameters('ApimServiceName'), '/{propertyName}')]";
440+
propertyTemplateResource.type = "Microsoft.ApiManagement/service/properties";
441+
propertyTemplateResource.apiVersion = "2018-06-01-preview";
442+
propertyTemplateResource.scale = null;
443+
444+
templateResources.Add(propertyTemplateResource);
445+
}
446+
447+
armTemplate.resources = templateResources.ToArray();
448+
FileWriter fileWriter = new FileWriter();
449+
fileWriter.WriteJSONToFile(armTemplate, @fileFolder + Path.DirectorySeparatorChar + apimname + "-namedvalues.json");
450+
}
451+
432452
public Template GenerateEmptyTemplateWithParameters()
433453
{
434454
TemplateCreator templateCreator = new TemplateCreator();

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,16 @@ public async Task<string> GetProperties(string ApiManagementName, string Resourc
2020
return await CallApiManagement(azToken, requestUrl);
2121
}
2222

23+
public async Task<string> GetProperty(string ApiManagementName, string ResourceGroupName, string propertyName)
24+
{
25+
(string azToken, string azSubId) = await auth.GetAccessToken();
26+
27+
string requestUrl = string.Format("{0}/subscriptions/{1}/resourceGroups/{2}/providers/Microsoft.ApiManagement/service/{3}/properties/{4}?api-version={5}",
28+
baseUrl, azSubId, ResourceGroupName, ApiManagementName, propertyName, Constants.APIVersion);
29+
30+
return await CallApiManagement(azToken, requestUrl);
31+
}
32+
2333
private static async Task<string> CallApiManagement(string azToken, string requestUrl)
2434
{
2535
using (HttpClient httpClient = new HttpClient())

0 commit comments

Comments
 (0)