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

Commit 97e5e29

Browse files
committed
enable creation of global service policies
1 parent 6b8e789 commit 97e5e29

File tree

6 files changed

+55
-17
lines changed

6 files changed

+55
-17
lines changed

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ public void ShouldCreateCorrectNumberOfDeploymentResources()
1414
CreatorConfig creatorConfig = new CreatorConfig() { apimServiceName = "apimService", linked = true };
1515
MasterTemplateCreator masterTemplateCreator = new MasterTemplateCreator();
1616
Template apiVersionSetsTemplate = new Template();
17+
Template globalServicePolicyTemplate = new Template();
1718
Template productsTemplate = new Template();
1819
Template loggersTemplate = new Template();
1920
List<LinkedMasterTemplateAPIInformation> apiInfoList = new List<LinkedMasterTemplateAPIInformation>() { new LinkedMasterTemplateAPIInformation() { name = "api", isSplit = true } };
@@ -24,7 +25,7 @@ public void ShouldCreateCorrectNumberOfDeploymentResources()
2425
int count = 5;
2526

2627
// act
27-
Template masterTemplate = masterTemplateCreator.CreateLinkedMasterTemplate(creatorConfig, apiVersionSetsTemplate, productsTemplate, loggersTemplate, null, null, apiInfoList, creatorFileNames, creatorConfig.apimServiceName, fileNameGenerator);
28+
Template masterTemplate = masterTemplateCreator.CreateLinkedMasterTemplate(creatorConfig, globalServicePolicyTemplate, apiVersionSetsTemplate, productsTemplate, loggersTemplate, null, null, apiInfoList, creatorFileNames, creatorConfig.apimServiceName, fileNameGenerator);
2829

2930
// assert
3031
Assert.Equal(count, masterTemplate.resources.Length);

src/APIM_ARMTemplate/apimtemplate/Commands/Create.cs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public CreateCommand()
5252
// create templates from provided configuration
5353
Console.WriteLine("Creating global service policy template");
5454
Console.WriteLine("------------------------------------------");
55-
Template globalServicePolicyTemplate = creatorConfig.policy != null ? policyTemplateCreator.CreateGlobalServicePolicyTemplateResource(creatorConfig.policy) : null;
55+
Template globalServicePolicyTemplate = creatorConfig.policy != null ? policyTemplateCreator.CreateGlobalServicePolicyTemplate(creatorConfig) : null;
5656
Console.WriteLine("Creating API version set template");
5757
Console.WriteLine("------------------------------------------");
5858
Template apiVersionSetsTemplate = creatorConfig.apiVersionSets != null ? apiVersionSetTemplateCreator.CreateAPIVersionSetTemplate(creatorConfig) : null;
@@ -84,6 +84,7 @@ public CreateCommand()
8484
{
8585
name = api.name,
8686
isSplit = apiTemplateCreator.isSplitAPI(api),
87+
dependsOnGlobalServicePolicies = creatorConfig.policy != null,
8788
dependsOnVersionSets = api.apiVersionSetId != null,
8889
dependsOnProducts = api.products != null,
8990
dependsOnLoggers = await masterTemplateCreator.DetermineIfAPIDependsOnLoggerAsync(api, fileReader),
@@ -99,7 +100,7 @@ public CreateCommand()
99100
if (creatorConfig.linked == true)
100101
{
101102
// create linked master template
102-
Template masterTemplate = masterTemplateCreator.CreateLinkedMasterTemplate(creatorConfig ,apiVersionSetsTemplate, productsTemplate, loggersTemplate, backendsTemplate, authorizationServersTemplate, apiInformation, fileNames, creatorConfig.apimServiceName, fileNameGenerator);
103+
Template masterTemplate = masterTemplateCreator.CreateLinkedMasterTemplate(creatorConfig, globalServicePolicyTemplate, apiVersionSetsTemplate, productsTemplate, loggersTemplate, backendsTemplate, authorizationServersTemplate, apiInformation, fileNames, creatorConfig.apimServiceName, fileNameGenerator);
103104
fileWriter.WriteJSONToFile(masterTemplate, String.Concat(creatorConfig.outputLocation, fileNames.linkedMaster));
104105
}
105106
foreach (Template apiTemplate in apiTemplates)
@@ -110,6 +111,10 @@ public CreateCommand()
110111
string apiFileName = fileNameGenerator.GenerateCreatorAPIFileName(providedAPIConfiguration.name, apiTemplateCreator.isSplitAPI(providedAPIConfiguration), apiResource.properties.value == null, creatorConfig.apimServiceName);
111112
fileWriter.WriteJSONToFile(apiTemplate, String.Concat(creatorConfig.outputLocation, apiFileName));
112113
}
114+
if (globalServicePolicyTemplate != null)
115+
{
116+
fileWriter.WriteJSONToFile(globalServicePolicyTemplate, String.Concat(creatorConfig.outputLocation, fileNames.globalServicePolicy));
117+
}
113118
if (apiVersionSetsTemplate != null)
114119
{
115120
fileWriter.WriteJSONToFile(apiVersionSetsTemplate, String.Concat(creatorConfig.outputLocation, fileNames.apiVersionSets));

src/APIM_ARMTemplate/apimtemplate/Common/Constants/ResourceTypeConstants.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ internal static class ResourceTypeConstants
1313
public const string APISchema = "Microsoft.ApiManagement/service/apis/schemas";
1414
public const string AuthorizationServer = "Microsoft.ApiManagement/service/authorizationServers";
1515
public const string Backend = "Microsoft.ApiManagement/service/backends";
16-
public const string GlobalServicePolicy = "Microsoft.ApiManagement/service/policy";
16+
public const string GlobalServicePolicy = "Microsoft.ApiManagement/service/policies";
1717
public const string Logger = "Microsoft.ApiManagement/service/loggers";
1818
public const string ProductAPI = "Microsoft.ApiManagement/service/products/apis";
1919
public const string Product = "Microsoft.ApiManagement/service/products";

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

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,14 @@ public FileNames GenerateFileNames(string apimServiceName)
1111
return new FileNames()
1212
{
1313
apiVersionSets = $@"/{apimServiceName}-apiVersionSets.template.json",
14-
products = $@"/{apimServiceName}-products.template.json",
15-
loggers = $@"/{apimServiceName}-loggers.template.json",
14+
authorizationServers = $@"/{apimServiceName}-authorizationServers.template.json",
1615
backends = $@"/{apimServiceName}-backends.template.json",
16+
globalServicePolicy = $@"/{apimServiceName}-globalServicePolicy.template.json",
17+
loggers = $@"/{apimServiceName}-loggers.template.json",
1718
namedValues = $@"/{apimServiceName}-namedValues.template.json",
18-
authorizationServers = $@"/{apimServiceName}-authorizationServers.template.json",
19-
linkedMaster = $@"/{apimServiceName}-master.template.json",
20-
parameters = $@"/{apimServiceName}-parameters.json"
19+
products = $@"/{apimServiceName}-products.template.json",
20+
parameters = $@"/{apimServiceName}-parameters.json",
21+
linkedMaster = $@"/{apimServiceName}-master.template.json"
2122
};
2223
}
2324

@@ -51,11 +52,12 @@ public string GenerateOriginalAPIName(string apiName)
5152
public class FileNames
5253
{
5354
public string apiVersionSets { get; set; }
54-
public string products { get; set; }
55-
public string loggers { get; set; }
5655
public string authorizationServers { get; set; }
5756
public string backends { get; set; }
57+
public string globalServicePolicy { get; set; }
58+
public string loggers { get; set; }
5859
public string namedValues { get; set; }
60+
public string products { get; set; }
5961
public string parameters { get; set; }
6062
// linked property outputs 1 master template
6163
public string linkedMaster { get; set; }

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

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ namespace Microsoft.Azure.Management.ApiManagement.ArmTemplates.Create
77
public class MasterTemplateCreator : TemplateCreator
88
{
99
public Template CreateLinkedMasterTemplate(CreatorConfig creatorConfig,
10+
Template globalServicePolicyTemplate,
1011
Template apiVersionSetTemplate,
1112
Template productsTemplate,
1213
Template loggersTemplate,
@@ -26,6 +27,13 @@ public Template CreateLinkedMasterTemplate(CreatorConfig creatorConfig,
2627
// add deployment resources that links to all resource files
2728
List<TemplateResource> resources = new List<TemplateResource>();
2829

30+
// globalServicePolicy
31+
if (globalServicePolicyTemplate != null)
32+
{
33+
string globalServicePolicyUri = GenerateLinkedTemplateUri(creatorConfig, fileNames.globalServicePolicy);
34+
resources.Add(this.CreateLinkedMasterTemplateResource("globalServicePolicyTemplate", globalServicePolicyUri, new string[] { }));
35+
}
36+
2937
// apiVersionSet
3038
if (apiVersionSetTemplate != null)
3139
{
@@ -73,7 +81,7 @@ public Template CreateLinkedMasterTemplate(CreatorConfig creatorConfig,
7381

7482
string initialAPIFileName = fileNameGenerator.GenerateCreatorAPIFileName(apiInfo.name, apiInfo.isSplit, true, apimServiceName);
7583
string initialAPIUri = GenerateLinkedTemplateUri(creatorConfig, initialAPIFileName);
76-
string[] initialAPIDependsOn = CreateAPIResourceDependencies(apiVersionSetTemplate, productsTemplate, loggersTemplate, backendsTemplate, authorizationServersTemplate, apiInfo);
84+
string[] initialAPIDependsOn = CreateAPIResourceDependencies(globalServicePolicyTemplate, apiVersionSetTemplate, productsTemplate, loggersTemplate, backendsTemplate, authorizationServersTemplate, apiInfo);
7785
resources.Add(this.CreateLinkedMasterTemplateResource(initialAPIDeploymentResourceName, initialAPIUri, initialAPIDependsOn));
7886

7987
string subsequentAPIFileName = fileNameGenerator.GenerateCreatorAPIFileName(apiInfo.name, apiInfo.isSplit, false, apimServiceName);
@@ -88,7 +96,7 @@ public Template CreateLinkedMasterTemplate(CreatorConfig creatorConfig,
8896
string unifiedAPIDeploymentResourceName = $"{originalAPIName}-APITemplate";
8997
string unifiedAPIFileName = fileNameGenerator.GenerateCreatorAPIFileName(apiInfo.name, apiInfo.isSplit, true, apimServiceName);
9098
string unifiedAPIUri = GenerateLinkedTemplateUri(creatorConfig, unifiedAPIFileName);
91-
string[] unifiedAPIDependsOn = CreateAPIResourceDependencies(apiVersionSetTemplate, productsTemplate, loggersTemplate, backendsTemplate, authorizationServersTemplate, apiInfo);
99+
string[] unifiedAPIDependsOn = CreateAPIResourceDependencies(globalServicePolicyTemplate, apiVersionSetTemplate, productsTemplate, loggersTemplate, backendsTemplate, authorizationServersTemplate, apiInfo);
92100
resources.Add(this.CreateLinkedMasterTemplateResource(unifiedAPIDeploymentResourceName, unifiedAPIUri, unifiedAPIDependsOn));
93101
}
94102
}
@@ -97,14 +105,19 @@ public Template CreateLinkedMasterTemplate(CreatorConfig creatorConfig,
97105
return masterTemplate;
98106
}
99107

100-
public string[] CreateAPIResourceDependencies(Template apiVersionSetTemplate,
108+
public string[] CreateAPIResourceDependencies(Template globalServicePolicyTemplate,
109+
Template apiVersionSetTemplate,
101110
Template productsTemplate,
102111
Template loggersTemplate,
103112
Template backendsTemplate,
104113
Template authorizationServersTemplate,
105114
LinkedMasterTemplateAPIInformation apiInfo)
106115
{
107116
List<string> apiDependsOn = new List<string>();
117+
if (globalServicePolicyTemplate != null && apiInfo.dependsOnGlobalServicePolicies == true)
118+
{
119+
apiDependsOn.Add("[resourceId('Microsoft.Resources/deployments', 'globalServicePolicyTemplate')]");
120+
}
108121
if (apiVersionSetTemplate != null && apiInfo.dependsOnVersionSets == true)
109122
{
110123
apiDependsOn.Add("[resourceId('Microsoft.Resources/deployments', 'versionSetTemplate')]");
@@ -290,6 +303,7 @@ public class LinkedMasterTemplateAPIInformation
290303
{
291304
public string name { get; set; }
292305
public bool isSplit { get; set; }
306+
public bool dependsOnGlobalServicePolicies { get; set; }
293307
public bool dependsOnVersionSets { get; set; }
294308
public bool dependsOnProducts { get; set; }
295309
public bool dependsOnLoggers { get; set; }

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

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
namespace Microsoft.Azure.Management.ApiManagement.ArmTemplates.Create
77
{
8-
public class PolicyTemplateCreator
8+
public class PolicyTemplateCreator: TemplateCreator
99
{
1010
private FileReader fileReader;
1111

@@ -14,8 +14,21 @@ public PolicyTemplateCreator(FileReader fileReader)
1414
this.fileReader = fileReader;
1515
}
1616

17-
public PolicyTemplateResource CreateGlobalServicePolicyTemplateResource(string globalServicePolicy)
17+
public Template CreateGlobalServicePolicyTemplate(CreatorConfig creatorConfig)
1818
{
19+
// create empty template
20+
Template policyTemplate = CreateEmptyTemplate();
21+
22+
// add parameters
23+
policyTemplate.parameters = new Dictionary<string, TemplateParameterProperties>
24+
{
25+
{ "ApimServiceName", new TemplateParameterProperties(){ type = "string" } }
26+
};
27+
28+
List<TemplateResource> resources = new List<TemplateResource>();
29+
30+
// create global service policy resource with properties
31+
string globalServicePolicy = creatorConfig.policy;
1932
Uri uriResult;
2033
bool isUrl = Uri.TryCreate(globalServicePolicy, UriKind.Absolute, out uriResult) && (uriResult.Scheme == Uri.UriSchemeHttp || uriResult.Scheme == Uri.UriSchemeHttps);
2134
// create policy resource with properties
@@ -32,7 +45,10 @@ public PolicyTemplateResource CreateGlobalServicePolicyTemplateResource(string g
3245
},
3346
dependsOn = new string[] { }
3447
};
35-
return policyTemplateResource;
48+
resources.Add(policyTemplateResource);
49+
50+
policyTemplate.resources = resources.ToArray();
51+
return policyTemplate;
3652
}
3753

3854
public PolicyTemplateResource CreateAPIPolicyTemplateResource(APIConfig api, string[] dependsOn)

0 commit comments

Comments
 (0)