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

Commit b1ce1f6

Browse files
authored
[Creator] support add tags to API (#265)
* Create tags with apis * Fix test error * Fix test errors * Fix errors
1 parent 178e2c4 commit b1ce1f6

File tree

7 files changed

+90
-11
lines changed

7 files changed

+90
-11
lines changed

example/master.template.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@
9999
}
100100
},
101101
"dependsOn": [
102-
"[resourceId('Microsoft.Resources/deployments', 'serviceTemplate')]",
102+
"[resourceId('Microsoft.Resources/deployments', 'serviceTemplate')]"
103103
]
104104
},
105105
{

src/APIM_ARMTemplate/apimtemplate.test/Creator/TemplateCreatorFactories/APITemplateCreatorFactory.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ public static APITemplateCreator GenerateAPITemplateCreator()
1313
ProductAPITemplateCreator productAPITemplateCreator = new ProductAPITemplateCreator();
1414
DiagnosticTemplateCreator diagnosticTemplateCreator = new DiagnosticTemplateCreator();
1515
ReleaseTemplateCreator releaseTemplateCreator = new ReleaseTemplateCreator();
16-
APITemplateCreator apiTemplateCreator = new APITemplateCreator(fileReader, policyTemplateCreator, productAPITemplateCreator, diagnosticTemplateCreator, releaseTemplateCreator);
16+
TagAPITemplateCreator tagAPITemplateCreator = new TagAPITemplateCreator();
17+
APITemplateCreator apiTemplateCreator = new APITemplateCreator(fileReader, policyTemplateCreator, productAPITemplateCreator, tagAPITemplateCreator, diagnosticTemplateCreator, releaseTemplateCreator);
1718
return apiTemplateCreator;
1819
}
1920
}

src/APIM_ARMTemplate/apimtemplate/Commands/Create.cs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,12 +42,13 @@ public CreateCommand()
4242
BackendTemplateCreator backendTemplateCreator = new BackendTemplateCreator();
4343
AuthorizationServerTemplateCreator authorizationServerTemplateCreator = new AuthorizationServerTemplateCreator();
4444
ProductAPITemplateCreator productAPITemplateCreator = new ProductAPITemplateCreator();
45+
TagAPITemplateCreator tagAPITemplateCreator = new TagAPITemplateCreator();
4546
PolicyTemplateCreator policyTemplateCreator = new PolicyTemplateCreator(fileReader);
4647
DiagnosticTemplateCreator diagnosticTemplateCreator = new DiagnosticTemplateCreator();
4748
ReleaseTemplateCreator releaseTemplateCreator = new ReleaseTemplateCreator();
4849
ProductTemplateCreator productTemplateCreator = new ProductTemplateCreator(policyTemplateCreator);
4950
TagTemplateCreator tagTemplateCreator = new TagTemplateCreator();
50-
APITemplateCreator apiTemplateCreator = new APITemplateCreator(fileReader, policyTemplateCreator, productAPITemplateCreator, diagnosticTemplateCreator, releaseTemplateCreator);
51+
APITemplateCreator apiTemplateCreator = new APITemplateCreator(fileReader, policyTemplateCreator, productAPITemplateCreator, tagAPITemplateCreator, diagnosticTemplateCreator, releaseTemplateCreator);
5152
MasterTemplateCreator masterTemplateCreator = new MasterTemplateCreator();
5253

5354
// create templates from provided configuration
@@ -60,9 +61,6 @@ public CreateCommand()
6061
Console.WriteLine("Creating product template");
6162
Console.WriteLine("------------------------------------------");
6263
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;
6664
Console.WriteLine("Creating logger template");
6765
Console.WriteLine("------------------------------------------");
6866
Template loggersTemplate = creatorConfig.loggers != null ? loggerTemplateCreator.CreateLoggerTemplate(creatorConfig) : null;
@@ -98,6 +96,10 @@ public CreateCommand()
9896
});
9997
}
10098

99+
Console.WriteLine("Creating tag template");
100+
Console.WriteLine("------------------------------------------");
101+
Template tagTemplate = creatorConfig.tags != null ? tagTemplateCreator.CreateTagTemplate(creatorConfig) : null;
102+
101103
// create parameters file
102104
Template templateParameters = masterTemplateCreator.CreateMasterTemplateParameterValues(creatorConfig);
103105

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
namespace Microsoft.Azure.Management.ApiManagement.ArmTemplates.Common
2+
{
3+
public class TagAPITemplateResource : TemplateResource
4+
{
5+
public TagAPITemplateProperties properties { get; set; }
6+
}
7+
8+
public class TagAPITemplateProperties
9+
{
10+
public string displayName { get; set; }
11+
}
12+
}

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,16 @@ public class APITemplateCreator : TemplateCreator
1010
private FileReader fileReader;
1111
private PolicyTemplateCreator policyTemplateCreator;
1212
private ProductAPITemplateCreator productAPITemplateCreator;
13+
private TagAPITemplateCreator tagAPITemplateCreator;
1314
private DiagnosticTemplateCreator diagnosticTemplateCreator;
1415
private ReleaseTemplateCreator releaseTemplateCreator;
1516

16-
public APITemplateCreator(FileReader fileReader, PolicyTemplateCreator policyTemplateCreator, ProductAPITemplateCreator productAPITemplateCreator, DiagnosticTemplateCreator diagnosticTemplateCreator, ReleaseTemplateCreator releaseTemplateCreator)
17+
public APITemplateCreator(FileReader fileReader, PolicyTemplateCreator policyTemplateCreator, ProductAPITemplateCreator productAPITemplateCreator, TagAPITemplateCreator tagAPITemplateCreator, DiagnosticTemplateCreator diagnosticTemplateCreator, ReleaseTemplateCreator releaseTemplateCreator)
1718
{
1819
this.fileReader = fileReader;
1920
this.policyTemplateCreator = policyTemplateCreator;
2021
this.productAPITemplateCreator = productAPITemplateCreator;
22+
this.tagAPITemplateCreator = tagAPITemplateCreator;
2123
this.diagnosticTemplateCreator = diagnosticTemplateCreator;
2224
this.releaseTemplateCreator = releaseTemplateCreator;
2325
}
@@ -87,6 +89,7 @@ public List<TemplateResource> CreateChildResourceTemplates(APIConfig api)
8789
PolicyTemplateResource apiPolicyResource = api.policy != null ? this.policyTemplateCreator.CreateAPIPolicyTemplateResource(api, dependsOn) : null;
8890
List<PolicyTemplateResource> operationPolicyResources = api.operations != null ? this.policyTemplateCreator.CreateOperationPolicyTemplateResources(api, dependsOn) : null;
8991
List<ProductAPITemplateResource> productAPIResources = api.products != null ? this.productAPITemplateCreator.CreateProductAPITemplateResources(api, dependsOn) : null;
92+
List<TagAPITemplateResource> tagAPIResources = api.tags != null ? this.tagAPITemplateCreator.CreateTagAPITemplateResources(api,dependsOn) : null;
9093
DiagnosticTemplateResource diagnosticTemplateResource = api.diagnostic != null ? this.diagnosticTemplateCreator.CreateAPIDiagnosticTemplateResource(api, dependsOn) : null;
9194
// add release resource if the name has been appended with ;rev{revisionNumber}
9295
ReleaseTemplateResource releaseTemplateResource = api.name.Contains(";rev") == true ? this.releaseTemplateCreator.CreateAPIReleaseTemplateResource(api, dependsOn) : null;
@@ -95,6 +98,7 @@ public List<TemplateResource> CreateChildResourceTemplates(APIConfig api)
9598
if (apiPolicyResource != null) resources.Add(apiPolicyResource);
9699
if (operationPolicyResources != null) resources.AddRange(operationPolicyResources);
97100
if (productAPIResources != null) resources.AddRange(productAPIResources);
101+
if (tagAPIResources != null) resources.AddRange(tagAPIResources);
98102
if (diagnosticTemplateResource != null) resources.Add(diagnosticTemplateResource);
99103
if (releaseTemplateResource != null) resources.Add(releaseTemplateResource);
100104

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
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 TagAPITemplateCreator
7+
{
8+
public TagAPITemplateResource CreateTagAPITemplateResource(string tagName, string apiName, string[] dependsOn)
9+
{
10+
// create tags/apis resource with properties
11+
TagAPITemplateResource tagAPITemplateResource = new TagAPITemplateResource(){
12+
name = $"[concat(parameters('ApimServiceName'), '/{apiName}/{tagName}')]",
13+
type = ResourceTypeConstants.APITag,
14+
apiVersion = GlobalConstants.APIVersion,
15+
properties = new TagAPITemplateProperties(){
16+
displayName = tagName
17+
},
18+
dependsOn = dependsOn
19+
};
20+
return tagAPITemplateResource;
21+
}
22+
23+
public List<TagAPITemplateResource> CreateTagAPITemplateResources(APIConfig api, string[] dependsOn)
24+
{
25+
// create a tag/apis association resource for each tag in the config file
26+
List<TagAPITemplateResource> tagAPITemplates = new List<TagAPITemplateResource>();
27+
// tags is comma seperated list pf tags
28+
string[] tagIDs = api.tags.Split(", ");
29+
foreach(string tagID in tagIDs)
30+
{
31+
TagAPITemplateResource tagAPITemplate = this.CreateTagAPITemplateResource(tagID, api.name, dependsOn);
32+
tagAPITemplates.Add(tagAPITemplate);
33+
}
34+
return tagAPITemplates;
35+
}
36+
}
37+
}

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

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
using System.Collections.Generic;
22
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Common;
3+
using System;
34

45
namespace Microsoft.Azure.Management.ApiManagement.ArmTemplates.Create
56
{
6-
public class TagTemplateCreator: TemplateCreator
7+
public class TagTemplateCreator : TemplateCreator
78
{
89
public Template CreateTagTemplate(CreatorConfig creatorConfig)
910
{
@@ -16,18 +17,40 @@ public Template CreateTagTemplate(CreatorConfig creatorConfig)
1617
{"ApimServiceName", new TemplateParameterProperties(){ type = "string" }}
1718
};
1819

19-
List<TemplateResource> resources = new List<TemplateResource>();
20+
// aggregate all tags from apis
21+
HashSet<string> tagHashset = new HashSet<string>();
22+
List<APIConfig> apis = creatorConfig.apis;
23+
if (apis != null)
24+
{
25+
foreach (APIConfig api in apis)
26+
{
27+
if (api.tags != null)
28+
{
29+
string[] apiTags = api.tags.Split(", ");
30+
foreach (string apiTag in apiTags)
31+
{
32+
tagHashset.Add(apiTag);
33+
}
34+
}
35+
}
36+
}
2037
foreach (TagTemplateProperties tag in creatorConfig.tags)
38+
{
39+
tagHashset.Add(tag.displayName);
40+
}
41+
42+
List<TemplateResource> resources = new List<TemplateResource>();
43+
foreach (string tag in tagHashset)
2144
{
2245
// create tag resource with properties
2346
TagTemplateResource tagTemplateResource = new TagTemplateResource()
2447
{
25-
name = $"[concat(parameters('ApimServiceName'), '/{tag.displayName}')]",
48+
name = $"[concat(parameters('ApimServiceName'), '/{tag}')]",
2649
type = ResourceTypeConstants.Tag,
2750
apiVersion = GlobalConstants.APIVersion,
2851
properties = new TagTemplateProperties()
2952
{
30-
displayName = tag.displayName
53+
displayName = tag
3154
},
3255
dependsOn = new string[] { }
3356
};

0 commit comments

Comments
 (0)