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

Commit 63e8f10

Browse files
committed
write logger template
1 parent ded77aa commit 63e8f10

File tree

5 files changed

+112
-17
lines changed

5 files changed

+112
-17
lines changed

src/APIM_ARMTemplate/apimtemplate/Commands/Create.cs

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ public CreateCommand()
3535
FileNameGenerator fileNameGenerator = new FileNameGenerator();
3636
TemplateCreator templateCreator = new TemplateCreator();
3737
APIVersionSetTemplateCreator apiVersionSetTemplateCreator = new APIVersionSetTemplateCreator(templateCreator);
38+
LoggerTemplateCreator loggerTemplateCreator = new LoggerTemplateCreator(templateCreator);
3839
ProductTemplateCreator productTemplateCreator = new ProductTemplateCreator(templateCreator);
3940
ProductAPITemplateCreator productAPITemplateCreator = new ProductAPITemplateCreator();
4041
PolicyTemplateCreator policyTemplateCreator = new PolicyTemplateCreator(fileReader);
@@ -44,8 +45,9 @@ public CreateCommand()
4445
CreatorFileNames creatorFileNames = fileNameGenerator.GenerateCreatorLinkedFileNames(creatorConfig);
4546

4647
// create templates from provided configuration
47-
Template apiVersionSetTemplate = creatorConfig.apiVersionSets != null ? apiVersionSetTemplateCreator.CreateAPIVersionSetTemplate(creatorConfig) : null;
48+
Template apiVersionSetsTemplate = creatorConfig.apiVersionSets != null ? apiVersionSetTemplateCreator.CreateAPIVersionSetTemplate(creatorConfig) : null;
4849
Template productsTemplate = creatorConfig.products != null ? productTemplateCreator.CreateProductTemplate(creatorConfig) : null;
50+
Template loggersTemplate = creatorConfig.loggers != null ? loggerTemplateCreator.CreateLoggerTemplate(creatorConfig) : null;
4951
// store name and full template on each api necessary to build unlinked templates
5052
Dictionary<string, Template> initialAPITemplates = new Dictionary<string, Template>();
5153
Dictionary<string, Template> subsequentAPITemplates = new Dictionary<string, Template>();
@@ -65,15 +67,15 @@ public CreateCommand()
6567
name = api.name,
6668
dependsOnVersionSets = api.apiVersionSetId != null,
6769
dependsOnProducts = api.products != null,
68-
dependsOnLoggers = true
70+
dependsOnLoggers = masterTemplateCreator.DetermineIfAPIDependsOnLogger(api, fileReader)
6971
});
7072
}
7173

7274
// write templates to outputLocation
7375
if (creatorConfig.linked == true)
7476
{
7577
// create linked master template
76-
Template masterTemplate = masterTemplateCreator.CreateLinkedMasterTemplate(apiVersionSetTemplate, productsTemplate, apiInformation, creatorFileNames, fileNameGenerator);
78+
Template masterTemplate = masterTemplateCreator.CreateLinkedMasterTemplate(apiVersionSetsTemplate, productsTemplate, loggersTemplate, apiInformation, creatorFileNames, fileNameGenerator);
7779
fileWriter.WriteJSONToFile(masterTemplate, String.Concat(creatorConfig.outputLocation, creatorFileNames.linkedMaster));
7880
}
7981
foreach (KeyValuePair<string, Template> initialAPITemplatePair in initialAPITemplates)
@@ -86,14 +88,18 @@ public CreateCommand()
8688
string subsequentAPIFileName = fileNameGenerator.GenerateAPIFileName(subsequentAPITemplatePair.Key, false);
8789
fileWriter.WriteJSONToFile(subsequentAPITemplatePair.Value, String.Concat(creatorConfig.outputLocation, subsequentAPIFileName));
8890
}
89-
if (apiVersionSetTemplate != null)
91+
if (apiVersionSetsTemplate != null)
9092
{
91-
fileWriter.WriteJSONToFile(apiVersionSetTemplate, String.Concat(creatorConfig.outputLocation, creatorFileNames.apiVersionSets));
93+
fileWriter.WriteJSONToFile(apiVersionSetsTemplate, String.Concat(creatorConfig.outputLocation, creatorFileNames.apiVersionSets));
9294
}
9395
if (productsTemplate != null)
9496
{
9597
fileWriter.WriteJSONToFile(productsTemplate, String.Concat(creatorConfig.outputLocation, creatorFileNames.products));
9698
}
99+
if (loggersTemplate != null)
100+
{
101+
fileWriter.WriteJSONToFile(loggersTemplate, String.Concat(creatorConfig.outputLocation, creatorFileNames.loggers));
102+
}
97103
// write parameters to outputLocation
98104
fileWriter.WriteJSONToFile(masterTemplateParameters, String.Concat(creatorConfig.outputLocation, creatorConfig.linked == true ? creatorFileNames.linkedParameters : creatorFileNames.unlinkedParameters));
99105
ColoredConsole.WriteLine("Templates written to output location");
@@ -126,7 +132,7 @@ public bool ValidateCreatorConfig(CreatorConfig creatorConfig)
126132
isValid = false;
127133
throw new CommandParsingException(this, "LinkTemplatesBaseUrl is required for linked templates");
128134
}
129-
foreach(APIVersionSetConfig apiVersionSet in creatorConfig.apiVersionSets)
135+
foreach (APIVersionSetConfig apiVersionSet in creatorConfig.apiVersionSets)
130136
{
131137
if (apiVersionSet != null && apiVersionSet.displayName == null)
132138
{

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ public CreatorFileNames GenerateCreatorLinkedFileNames(CreatorConfig creatorConf
1111
// generate useable object with file names for consistency throughout project
1212
return new CreatorFileNames()
1313
{
14-
apiVersionSets = @"/version-sets.template.json",
14+
apiVersionSets = @"/api-version-sets.template.json",
1515
products = @"/products.template.json",
1616
loggers = @"/loggers.template.json",
1717
linkedMaster = @"/master.template.json",
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
using System.Collections.Generic;
2+
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Common;
3+
4+
namespace Microsoft.Azure.Management.ApiManagement.ArmTemplates.Create
5+
{
6+
public class LoggerTemplateCreator
7+
{
8+
private TemplateCreator templateCreator;
9+
10+
public LoggerTemplateCreator(TemplateCreator templateCreator)
11+
{
12+
this.templateCreator = templateCreator;
13+
}
14+
15+
public Template CreateLoggerTemplate(CreatorConfig creatorConfig)
16+
{
17+
// create empty template
18+
Template loggerTemplate = this.templateCreator.CreateEmptyTemplate();
19+
20+
// add parameters
21+
loggerTemplate.parameters = new Dictionary<string, TemplateParameterProperties>
22+
{
23+
{ "ApimServiceName", new TemplateParameterProperties(){ type = "string" } }
24+
};
25+
26+
List<TemplateResource> resources = new List<TemplateResource>();
27+
foreach (LoggerConfig logger in creatorConfig.loggers)
28+
{
29+
// create logger resource with properties
30+
LoggerTemplateResource loggerTemplateResource = new LoggerTemplateResource()
31+
{
32+
name = $"[concat(parameters('ApimServiceName'), '/{logger.name}')]",
33+
type = ResourceTypeConstants.Logger,
34+
apiVersion = "2018-06-01-preview",
35+
properties = new LoggerTemplateProperties()
36+
{
37+
loggerType = logger.loggerType,
38+
description = logger.description,
39+
credentials = logger.credentials,
40+
isBuffered = logger.isBuffered,
41+
resourceId = logger.resourceId
42+
},
43+
dependsOn = new string[] { }
44+
};
45+
resources.Add(loggerTemplateResource);
46+
}
47+
48+
loggerTemplate.resources = resources.ToArray();
49+
return loggerTemplate;
50+
}
51+
}
52+
}

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

Lines changed: 46 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,6 @@
33

44
namespace Microsoft.Azure.Management.ApiManagement.ArmTemplates.Create
55
{
6-
7-
public class LinkedMasterTemplateAPIInformation
8-
{
9-
public string name { get; set; }
10-
public bool dependsOnVersionSets { get; set; }
11-
public bool dependsOnProducts { get; set; }
12-
public bool dependsOnLoggers { get; set; }
13-
}
14-
156
public class MasterTemplateCreator
167
{
178
private TemplateCreator templateCreator;
@@ -23,6 +14,7 @@ public MasterTemplateCreator(TemplateCreator templateCreator)
2314

2415
public Template CreateLinkedMasterTemplate(Template apiVersionSetTemplate,
2516
Template productsTemplate,
17+
Template loggersTemplate,
2618
List<LinkedMasterTemplateAPIInformation> apiInformation,
2719
CreatorFileNames creatorFileNames,
2820
FileNameGenerator fileNameGenerator)
@@ -50,6 +42,13 @@ public Template CreateLinkedMasterTemplate(Template apiVersionSetTemplate,
5042
resources.Add(this.CreateLinkedMasterTemplateResource("productsTemplate", productsUri, new string[] { }));
5143
}
5244

45+
// logger
46+
if (loggersTemplate != null)
47+
{
48+
string loggersUri = $"[concat(parameters('LinkedTemplatesBaseUrl'), '{creatorFileNames.loggers}')]";
49+
resources.Add(this.CreateLinkedMasterTemplateResource("loggersTemplate", loggersUri, new string[] { }));
50+
}
51+
5352
// api info stores api name as the key and whether the api depends on the version set template as the value
5453
foreach (LinkedMasterTemplateAPIInformation apiInfo in apiInformation)
5554
{
@@ -67,6 +66,10 @@ public Template CreateLinkedMasterTemplate(Template apiVersionSetTemplate,
6766
{
6867
initialAPIDependsOn.Add("[resourceId('Microsoft.Resources/deployments', 'productsTemplate')]");
6968
}
69+
if (loggersTemplate != null && apiInfo.dependsOnLoggers == true)
70+
{
71+
initialAPIDependsOn.Add("[resourceId('Microsoft.Resources/deployments', 'loggersTemplate')]");
72+
}
7073
resources.Add(this.CreateLinkedMasterTemplateResource(initialAPIDeploymentResourceName, initialAPIUri, initialAPIDependsOn.ToArray()));
7174

7275
string subsequentAPIFileName = fileNameGenerator.GenerateAPIFileName(apiInfo.name, false);
@@ -157,5 +160,39 @@ public Template CreateMasterTemplateParameterValues(CreatorConfig creatorConfig)
157160
masterTemplate.parameters = parameters;
158161
return masterTemplate;
159162
}
163+
164+
public bool DetermineIfAPIDependsOnLogger(APIConfig api, FileReader fileReader)
165+
{
166+
if (api.diagnostic != null && api.diagnostic.loggerId != null)
167+
{
168+
// capture api diagnostic dependent on logger
169+
return true;
170+
}
171+
string apiPolicy = api.policy != null ? fileReader.RetrieveLocalFileContents(api.policy) : "";
172+
if (apiPolicy.Contains("logger"))
173+
{
174+
// capture api policy dependent on logger
175+
return true;
176+
}
177+
foreach (KeyValuePair<string, OperationsConfig> operation in api.operations)
178+
{
179+
string operationPolicy = operation.Value.policy != null ? fileReader.RetrieveLocalFileContents(operation.Value.policy) : "";
180+
if (operation.Value.policy != null && operation.Value.policy.Contains("logger"))
181+
{
182+
// capture operation policy dependent on logger
183+
return true;
184+
}
185+
}
186+
return false;
187+
}
160188
}
189+
190+
public class LinkedMasterTemplateAPIInformation
191+
{
192+
public string name { get; set; }
193+
public bool dependsOnVersionSets { get; set; }
194+
public bool dependsOnProducts { get; set; }
195+
public bool dependsOnLoggers { get; set; }
196+
}
197+
161198
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public Template CreateProductTemplate(CreatorConfig creatorConfig)
3030
ProductsTemplateResource productsTemplateResource = new ProductsTemplateResource()
3131
{
3232
name = $"[concat(parameters('ApimServiceName'), '/{productTemplateProperties.displayName}')]",
33-
type = ResourceTypeConstants.APIVersionSet,
33+
type = ResourceTypeConstants.Product,
3434
apiVersion = "2018-06-01-preview",
3535
properties = productTemplateProperties,
3636
dependsOn = new string[] { }

0 commit comments

Comments
 (0)