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

Commit 178e2c4

Browse files
authored
[Creator] Support add tags (#262)
* Creator tag * Fix test issue
1 parent 93b27aa commit 178e2c4

File tree

6 files changed

+100
-6
lines changed

6 files changed

+100
-6
lines changed

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,17 @@ public void ShouldCreateCorrectNumberOfDeploymentResources()
1616
Template apiVersionSetsTemplate = new Template();
1717
Template globalServicePolicyTemplate = new Template();
1818
Template productsTemplate = new Template();
19+
Template tagTemplate = new Template();
1920
Template loggersTemplate = new Template();
2021
List<LinkedMasterTemplateAPIInformation> apiInfoList = new List<LinkedMasterTemplateAPIInformation>() { new LinkedMasterTemplateAPIInformation() { name = "api", isSplit = true } };
2122
FileNameGenerator fileNameGenerator = new FileNameGenerator();
2223
FileNames creatorFileNames = fileNameGenerator.GenerateFileNames(creatorConfig.apimServiceName);
2324

24-
// should create 6 resources (globalServicePolicy, apiVersionSet, product, logger, both api templates)
25-
int count = 6;
25+
// should create 7 resources (globalServicePolicy, apiVersionSet, product, tag, logger, both api templates)
26+
int count = 7;
2627

2728
// act
28-
Template masterTemplate = masterTemplateCreator.CreateLinkedMasterTemplate(creatorConfig, globalServicePolicyTemplate, apiVersionSetsTemplate, productsTemplate, loggersTemplate, null, null, apiInfoList, creatorFileNames, creatorConfig.apimServiceName, fileNameGenerator);
29+
Template masterTemplate = masterTemplateCreator.CreateLinkedMasterTemplate(creatorConfig, globalServicePolicyTemplate, apiVersionSetsTemplate, productsTemplate, loggersTemplate, null, null, tagTemplate, apiInfoList, creatorFileNames, creatorConfig.apimServiceName, fileNameGenerator);
2930

3031
// assert
3132
Assert.Equal(count, masterTemplate.resources.Length);
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
using Xunit;
2+
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Common;
3+
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Create;
4+
using System.Collections.Generic;
5+
6+
namespace Microsoft.Azure.Management.ApiManagement.ArmTemplates.Test
7+
{
8+
public class TagTemplateCreatorTests
9+
{
10+
[Fact]
11+
public void ShouldCreateTagFromCreatorConfig()
12+
{
13+
TagTemplateCreator tagTemplateCreator = new TagTemplateCreator();
14+
CreatorConfig creatorConfig = new CreatorConfig() { tags = new List<TagTemplateProperties>() };
15+
TagTemplateProperties tag = new TagTemplateProperties()
16+
{
17+
displayName = "displayName"
18+
};
19+
creatorConfig.tags.Add(tag);
20+
21+
//act
22+
Template tagTemplate = tagTemplateCreator.CreateTagTemplate(creatorConfig);
23+
TagTemplateResource tagTemplateResource = (TagTemplateResource)tagTemplate.resources[0];
24+
25+
//assert
26+
Assert.Equal($"[concat(parameters('ApimServiceName'), '/{tag.displayName}')]", tagTemplateResource.name);
27+
}
28+
}
29+
}

src/APIM_ARMTemplate/apimtemplate/Commands/Create.cs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ public CreateCommand()
4646
DiagnosticTemplateCreator diagnosticTemplateCreator = new DiagnosticTemplateCreator();
4747
ReleaseTemplateCreator releaseTemplateCreator = new ReleaseTemplateCreator();
4848
ProductTemplateCreator productTemplateCreator = new ProductTemplateCreator(policyTemplateCreator);
49+
TagTemplateCreator tagTemplateCreator = new TagTemplateCreator();
4950
APITemplateCreator apiTemplateCreator = new APITemplateCreator(fileReader, policyTemplateCreator, productAPITemplateCreator, diagnosticTemplateCreator, releaseTemplateCreator);
5051
MasterTemplateCreator masterTemplateCreator = new MasterTemplateCreator();
5152

@@ -59,6 +60,9 @@ public CreateCommand()
5960
Console.WriteLine("Creating product template");
6061
Console.WriteLine("------------------------------------------");
6162
Template productsTemplate = creatorConfig.products != null ? productTemplateCreator.CreateProductTemplate(creatorConfig) : null;
63+
Console.WriteLine("Creating tag template");
64+
Console.WriteLine("------------------------------------------");
65+
Template tagTemplate = creatorConfig.tags != null ? tagTemplateCreator.CreateTagTemplate(creatorConfig) : null;
6266
Console.WriteLine("Creating logger template");
6367
Console.WriteLine("------------------------------------------");
6468
Template loggersTemplate = creatorConfig.loggers != null ? loggerTemplateCreator.CreateLoggerTemplate(creatorConfig) : null;
@@ -87,6 +91,7 @@ public CreateCommand()
8791
dependsOnGlobalServicePolicies = creatorConfig.policy != null,
8892
dependsOnVersionSets = api.apiVersionSetId != null,
8993
dependsOnProducts = api.products != null,
94+
dependsOnTags = api.tags != null,
9095
dependsOnLoggers = await masterTemplateCreator.DetermineIfAPIDependsOnLoggerAsync(api, fileReader),
9196
dependsOnAuthorizationServers = api.authenticationSettings != null && api.authenticationSettings.oAuth2 != null && api.authenticationSettings.oAuth2.authorizationServerId != null,
9297
dependsOnBackends = await masterTemplateCreator.DetermineIfAPIDependsOnBackendAsync(api, fileReader)
@@ -100,7 +105,7 @@ public CreateCommand()
100105
if (creatorConfig.linked == true)
101106
{
102107
// create linked master template
103-
Template masterTemplate = masterTemplateCreator.CreateLinkedMasterTemplate(creatorConfig, globalServicePolicyTemplate, apiVersionSetsTemplate, productsTemplate, loggersTemplate, backendsTemplate, authorizationServersTemplate, apiInformation, fileNames, creatorConfig.apimServiceName, fileNameGenerator);
108+
Template masterTemplate = masterTemplateCreator.CreateLinkedMasterTemplate(creatorConfig, globalServicePolicyTemplate, apiVersionSetsTemplate, productsTemplate, loggersTemplate, backendsTemplate, authorizationServersTemplate, tagTemplate, apiInformation, fileNames, creatorConfig.apimServiceName, fileNameGenerator);
104109
fileWriter.WriteJSONToFile(masterTemplate, String.Concat(creatorConfig.outputLocation, fileNames.linkedMaster));
105110
}
106111
foreach (Template apiTemplate in apiTemplates)
@@ -135,6 +140,9 @@ public CreateCommand()
135140
{
136141
fileWriter.WriteJSONToFile(authorizationServersTemplate, String.Concat(creatorConfig.outputLocation, fileNames.authorizationServers));
137142
}
143+
if (tagTemplate != null) {
144+
fileWriter.WriteJSONToFile(tagTemplate, String.Concat(creatorConfig.outputLocation, fileNames.tags));
145+
}
138146

139147
// write parameters to outputLocation
140148
fileWriter.WriteJSONToFile(templateParameters, String.Concat(creatorConfig.outputLocation, fileNames.parameters));

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ public class CreatorConfig
2020
public List<LoggerConfig> loggers { get; set; }
2121
public List<AuthorizationServerTemplateProperties> authorizationServers { get; set; }
2222
public List<BackendTemplateProperties> backends { get; set; }
23+
public List<TagTemplateProperties> tags { get; set; }
2324
public string outputLocation { get; set; }
2425
public bool linked { get; set; }
2526
public string linkedTemplatesBaseUrl { get; set; }
@@ -55,6 +56,7 @@ public class APIConfig
5556
public Dictionary<string, OperationsConfig> operations { get; set; }
5657
public APITemplateAuthenticationSettings authenticationSettings { get; set; }
5758
public string products { get; set; }
59+
public string tags { get; set; }
5860
public string protocols { get; set; }
5961
public DiagnosticConfig diagnostic { get; set; }
6062
// does not currently include subscriptionKeyParameterNames, sourceApiId, and wsdlSelector from APITemplateResource schema

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

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ public Template CreateLinkedMasterTemplate(CreatorConfig creatorConfig,
1313
Template loggersTemplate,
1414
Template backendsTemplate,
1515
Template authorizationServersTemplate,
16+
Template tagTemplate,
1617
List<LinkedMasterTemplateAPIInformation> apiInformation,
1718
FileNames fileNames,
1819
string apimServiceName,
@@ -69,6 +70,12 @@ public Template CreateLinkedMasterTemplate(CreatorConfig creatorConfig,
6970
resources.Add(this.CreateLinkedMasterTemplateResource("authorizationServersTemplate", authorizationServersUri, new string[] { }));
7071
}
7172

73+
// tag
74+
if (tagTemplate != null) {
75+
string tagUri = GenerateLinkedTemplateUri(creatorConfig, fileNames.tags);
76+
resources.Add(this.CreateLinkedMasterTemplateResource("tagTemplate", tagUri, new string[] { }));
77+
}
78+
7279
// each api has an associated api info class that determines whether the api is split and its dependencies on other resources
7380
foreach (LinkedMasterTemplateAPIInformation apiInfo in apiInformation)
7481
{
@@ -81,7 +88,7 @@ public Template CreateLinkedMasterTemplate(CreatorConfig creatorConfig,
8188

8289
string initialAPIFileName = fileNameGenerator.GenerateCreatorAPIFileName(apiInfo.name, apiInfo.isSplit, true, apimServiceName);
8390
string initialAPIUri = GenerateLinkedTemplateUri(creatorConfig, initialAPIFileName);
84-
string[] initialAPIDependsOn = CreateAPIResourceDependencies(globalServicePolicyTemplate, apiVersionSetTemplate, productsTemplate, loggersTemplate, backendsTemplate, authorizationServersTemplate, apiInfo);
91+
string[] initialAPIDependsOn = CreateAPIResourceDependencies(globalServicePolicyTemplate, apiVersionSetTemplate, productsTemplate, loggersTemplate, backendsTemplate, authorizationServersTemplate, tagTemplate, apiInfo);
8592
resources.Add(this.CreateLinkedMasterTemplateResource(initialAPIDeploymentResourceName, initialAPIUri, initialAPIDependsOn));
8693

8794
string subsequentAPIFileName = fileNameGenerator.GenerateCreatorAPIFileName(apiInfo.name, apiInfo.isSplit, false, apimServiceName);
@@ -96,7 +103,7 @@ public Template CreateLinkedMasterTemplate(CreatorConfig creatorConfig,
96103
string unifiedAPIDeploymentResourceName = $"{originalAPIName}-APITemplate";
97104
string unifiedAPIFileName = fileNameGenerator.GenerateCreatorAPIFileName(apiInfo.name, apiInfo.isSplit, true, apimServiceName);
98105
string unifiedAPIUri = GenerateLinkedTemplateUri(creatorConfig, unifiedAPIFileName);
99-
string[] unifiedAPIDependsOn = CreateAPIResourceDependencies(globalServicePolicyTemplate, apiVersionSetTemplate, productsTemplate, loggersTemplate, backendsTemplate, authorizationServersTemplate, apiInfo);
106+
string[] unifiedAPIDependsOn = CreateAPIResourceDependencies(globalServicePolicyTemplate, apiVersionSetTemplate, productsTemplate, loggersTemplate, backendsTemplate, authorizationServersTemplate, tagTemplate, apiInfo);
100107
resources.Add(this.CreateLinkedMasterTemplateResource(unifiedAPIDeploymentResourceName, unifiedAPIUri, unifiedAPIDependsOn));
101108
}
102109
}
@@ -111,6 +118,7 @@ public string[] CreateAPIResourceDependencies(Template globalServicePolicyTempla
111118
Template loggersTemplate,
112119
Template backendsTemplate,
113120
Template authorizationServersTemplate,
121+
Template tagTemplate,
114122
LinkedMasterTemplateAPIInformation apiInfo)
115123
{
116124
List<string> apiDependsOn = new List<string>();
@@ -138,6 +146,10 @@ public string[] CreateAPIResourceDependencies(Template globalServicePolicyTempla
138146
{
139147
apiDependsOn.Add("[resourceId('Microsoft.Resources/deployments', 'authorizationServersTemplate')]");
140148
}
149+
if (tagTemplate != null && apiInfo.dependsOnTags == true)
150+
{
151+
apiDependsOn.Add("[resourceId('Microsoft.Resources/deployments', 'tagTemplate')]");
152+
}
141153
return apiDependsOn.ToArray();
142154
}
143155

@@ -309,6 +321,7 @@ public class LinkedMasterTemplateAPIInformation
309321
public bool dependsOnLoggers { get; set; }
310322
public bool dependsOnBackends { get; set; }
311323
public bool dependsOnAuthorizationServers { get; set; }
324+
public bool dependsOnTags { get; set; }
312325
}
313326

314327
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
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 TagTemplateCreator: TemplateCreator
7+
{
8+
public Template CreateTagTemplate(CreatorConfig creatorConfig)
9+
{
10+
// create empty template
11+
Template tagTemplate = CreateEmptyTemplate();
12+
13+
// add parameters
14+
tagTemplate.parameters = new Dictionary<string, TemplateParameterProperties>
15+
{
16+
{"ApimServiceName", new TemplateParameterProperties(){ type = "string" }}
17+
};
18+
19+
List<TemplateResource> resources = new List<TemplateResource>();
20+
foreach (TagTemplateProperties tag in creatorConfig.tags)
21+
{
22+
// create tag resource with properties
23+
TagTemplateResource tagTemplateResource = new TagTemplateResource()
24+
{
25+
name = $"[concat(parameters('ApimServiceName'), '/{tag.displayName}')]",
26+
type = ResourceTypeConstants.Tag,
27+
apiVersion = GlobalConstants.APIVersion,
28+
properties = new TagTemplateProperties()
29+
{
30+
displayName = tag.displayName
31+
},
32+
dependsOn = new string[] { }
33+
};
34+
resources.Add(tagTemplateResource);
35+
}
36+
37+
tagTemplate.resources = resources.ToArray();
38+
return tagTemplate;
39+
}
40+
}
41+
}

0 commit comments

Comments
 (0)