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

Commit 8979bb7

Browse files
committed
add unlinked master template option
1 parent 8063e8f commit 8979bb7

File tree

9 files changed

+95
-56
lines changed

9 files changed

+95
-56
lines changed

src/APIM_ARMTemplate/apimtemplate/Commands/Create.cs

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -66,17 +66,26 @@ public CreateCommand()
6666
CreatorFileNames creatorFileNames = fileNameGenerator.GenerateCreatorFileNames();
6767
Template apiVersionSetTemplate = creatorConfig.apiVersionSet != null ? apiVersionSetTemplateCreator.CreateAPIVersionSetTemplate(creatorConfig) : null;
6868
Template apiTemplate = await apiTemplateCreator.CreateAPITemplateAsync(creatorConfig);
69-
Template masterTemplate = masterTemplateCreator.CreateLinkedMasterTemplate(apiVersionSetTemplate, apiTemplate, creatorFileNames);
70-
Template masterTemplateParameters = masterTemplateCreator.CreateMasterTemplateParameterValues(creatorConfig);
69+
if(creatorConfig.linked == true)
70+
{
71+
Template masterTemplate = masterTemplateCreator.CreateLinkedMasterTemplate(apiVersionSetTemplate, apiTemplate, creatorFileNames);
72+
Template masterTemplateParameters = masterTemplateCreator.CreateMasterTemplateParameterValues(creatorConfig);
7173

72-
// write templates to outputLocation
73-
if (apiVersionSetTemplate != null)
74+
// write templates to outputLocation
75+
if (apiVersionSetTemplate != null)
76+
{
77+
armTemplateWriter.WriteJSONToFile(apiVersionSetTemplate, String.Concat(creatorConfig.outputLocation, @"/linked/", creatorFileNames.apiVersionSet));
78+
}
79+
armTemplateWriter.WriteJSONToFile(apiTemplate, String.Concat(creatorConfig.outputLocation, @"/linked/", creatorFileNames.api));
80+
armTemplateWriter.WriteJSONToFile(masterTemplate, String.Concat(creatorConfig.outputLocation, @"/linked/", "master.template.json"));
81+
armTemplateWriter.WriteJSONToFile(masterTemplateParameters, String.Concat(creatorConfig.outputLocation, @"/linked/", "master.parameters.json"));
82+
} else
7483
{
75-
armTemplateWriter.WriteJSONToFile(apiVersionSetTemplate, String.Concat(creatorConfig.outputLocation, creatorFileNames.apiVersionSet));
84+
Template masterTemplate = masterTemplateCreator.CreateUnlinkedMasterTemplate(apiVersionSetTemplate, apiTemplate, creatorFileNames);
85+
Template masterTemplateParameters = masterTemplateCreator.CreateMasterTemplateParameterValues(creatorConfig);
86+
armTemplateWriter.WriteJSONToFile(masterTemplate, String.Concat(creatorConfig.outputLocation, @"/unlinked/", "master.template.json"));
87+
armTemplateWriter.WriteJSONToFile(masterTemplateParameters, String.Concat(creatorConfig.outputLocation, @"/unlinked/", "master.parameters.json"));
7688
}
77-
armTemplateWriter.WriteJSONToFile(apiTemplate, String.Concat(creatorConfig.outputLocation, creatorFileNames.api));
78-
armTemplateWriter.WriteJSONToFile(masterTemplate, String.Concat(creatorConfig.outputLocation, @"/", "master.template.json"));
79-
armTemplateWriter.WriteJSONToFile(masterTemplateParameters, String.Concat(creatorConfig.outputLocation, @"/", "master.parameters.json"));
8089

8190
ColoredConsole.WriteLine("Templates written to output location");
8291
}

src/APIM_ARMTemplate/apimtemplate/Common/Templates/MasterTemplateResource.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ namespace Microsoft.Azure.Management.ApiManagement.ArmTemplates
77
public class MasterTemplateResource : TemplateResource
88
{
99
public MasterTemplateProperties properties { get; set; }
10-
public string[] dependsOn { get; set; }
1110
}
1211

1312
public class MasterTemplateProperties

src/APIM_ARMTemplate/apimtemplate/Creator/ExampleFiles/XMLPolicies/operationRateLimit.xml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
<inbound>
33
<rate-limit-by-key calls="3" renewal-period="15" counter-key="@(context.Subscription.Id)" />
44
<base />
5-
<set-backend-service id="apim-generated-policy" backend-id="serverlessoheastus-managementapi" />
65
</inbound>
76
<backend>
87
<base />
Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,24 @@
11
version: 0.0.1
2-
apimServiceName: "testing-grounds"
2+
apimServiceName: testing-grounds
33
apiVersionSet:
44
displayName: myAPIVersionSet
55
description: a description
66
versioningScheme: Query
77
versionQueryName: versionQuery
88
versionHeaderName: versionHeader
99
api:
10-
openApiSpec: C:\Users\lucashh\Desktop\Projects\APIM-ARM\azure-api-management-devops-example\src\APIM_ARMTemplate\apimtemplate\Creator\ExampleFiles\OpenApiSpecs\dataGenAPIDefinition.json
10+
openApiSpec: C:\Users\lucashh\Desktop\Projects\APIM-ARM\azure-api-management-devops-example\src\APIM_ARMTemplate\apimtemplate\Creator\ExampleFiles\OpenApiSpecs\swaggerPetstore.json
1111
policy: C:\Users\lucashh\Desktop\Projects\APIM-ARM\azure-api-management-devops-example\src\APIM_ARMTemplate\apimtemplate\Creator\ExampleFiles\XMLPolicies\apiPolicyHeaders.xml
1212
suffix: conf
1313
apiVersion: v2
1414
apiVersionDescription: vDesc
1515
revision: 2
1616
revisionDescription: rDesc
1717
operations:
18-
getSessions:
18+
addPet:
1919
policy: C:\Users\lucashh\Desktop\Projects\APIM-ARM\azure-api-management-devops-example\src\APIM_ARMTemplate\apimtemplate\Creator\ExampleFiles\XMLPolicies\operationRateLimit.xml
20-
postSessions:
20+
deletePet:
2121
policy: C:\Users\lucashh\Desktop\Projects\APIM-ARM\azure-api-management-devops-example\src\APIM_ARMTemplate\apimtemplate\Creator\ExampleFiles\XMLPolicies\operationRateLimit.xml
22-
authenticationSettings:
23-
subscriptionKeyRequired: false
24-
oAuth2:
25-
authorizationServerId: serverId
26-
scope: scope
2722
products: starter, plantinum
2823
outputLocation: C:\Users\lucashh\Desktop\Projects\APIM-ARM\GeneratedTemplates
29-
linked: true
24+
linked: false

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

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,7 @@ public async Task<Template> CreateAPITemplateAsync(CreatorConfig creatorConfig)
3232
{ "ApimServiceName", new TemplateParameterProperties(){ type = "string" } }
3333
};
3434

35-
string subsequentAPIName = "[concat(parameters('ApimServiceName'), '/api')]";
36-
string subsequentAPIType = "Microsoft.ApiManagement/service/apis";
37-
string[] dependsOnSubsequentAPI = new string[] { $"[resourceId('{subsequentAPIType}', '{subsequentAPIName}')]" };
35+
string[] dependsOnSubsequentAPI = new string[] { $"[resourceId('Microsoft.ApiManagement/service/apis', parameters('ApimServiceName'), 'subsequent-api')]" };
3836

3937
List<TemplateResource> resources = new List<TemplateResource>();
4038
// create api resource with properties
@@ -58,23 +56,27 @@ public APITemplateResource CreateInitialAPITemplateResource(CreatorConfig creato
5856
// create api resource with properties
5957
APITemplateResource apiTemplateResource = new APITemplateResource()
6058
{
61-
name = "[concat(parameters('ApimServiceName'), '/api')]",
59+
name = "[concat(parameters('ApimServiceName'), '/initial-api')]",
6260
type = "Microsoft.ApiManagement/service/apis",
63-
apiVersion = "2018-11-01",
61+
apiVersion = "2018-06-01-preview",
6462
properties = new APITemplateProperties()
6563
{
6664
// supplied via optional arguments
6765
apiVersion = creatorConfig.api.apiVersion,
6866
apiRevision = creatorConfig.api.revision,
6967
apiRevisionDescription = creatorConfig.api.revisionDescription,
7068
apiVersionDescription = creatorConfig.api.apiVersionDescription,
71-
authenticationSettings = creatorConfig.api.authenticationSettings
69+
authenticationSettings = creatorConfig.api.authenticationSettings,
70+
path = creatorConfig.api.suffix,
71+
displayName = "api",
72+
protocols = new string[] {"http" }
7273
},
73-
dependsOn = new string[] { }
74+
// if the template is not linked the depends on for the apiVersionSet needs to be inlined here
75+
dependsOn = creatorConfig.linked == true ? new string[] { } : new string[] { $"[resourceId('Microsoft.ApiManagement/service/api-version-sets', parameters('ApimServiceName'), 'versionset')]" }
7476
};
7577
if(creatorConfig.apiVersionSet != null)
7678
{
77-
apiTemplateResource.properties.apiVersionSetId = "[concat(resourceId('Microsoft.ApiManagement/service', parameters('ApimServiceName')), '/api-version-sets/versionset')]";
79+
apiTemplateResource.properties.apiVersionSetId = "[resourceId('Microsoft.ApiManagement/service/api-version-sets', parameters('ApimServiceName'), 'versionset')]";
7880
}
7981
return apiTemplateResource;
8082
}
@@ -84,21 +86,21 @@ public async Task<APITemplateResource> CreateSubsequentAPITemplateResourceAsync(
8486
// create api resource with properties
8587
// used to escape characters in json file
8688
object deserializedFileContents = JsonConvert.DeserializeObject<object>(await this.fileReader.RetrieveLocationContentsAsync(creatorConfig.api.openApiSpec));
87-
string subsequentAPIName = "[concat(parameters('ApimServiceName'), '/api')]";
89+
string subsequentAPIName = "[concat(parameters('ApimServiceName'), '/subsequent-api')]";
8890
string subsequentAPIType = "Microsoft.ApiManagement/service/apis";
8991
APITemplateResource apiTemplateResource = new APITemplateResource()
9092
{
9193
name = subsequentAPIName,
9294
type = subsequentAPIType,
93-
apiVersion = "2018-11-01",
95+
apiVersion = "2018-06-01-preview",
9496
properties = new APITemplateProperties()
9597
{
9698
contentFormat = "swagger-json",
9799
contentValue = JsonConvert.SerializeObject(deserializedFileContents),
98100
// supplied via optional arguments
99-
path = creatorConfig.api.suffix ?? ""
101+
path = creatorConfig.api.suffix
100102
},
101-
dependsOn = new string[] { $"[resourceId('{subsequentAPIType}', '{subsequentAPIName}')]" }
103+
dependsOn = new string[] { $"[resourceId('Microsoft.ApiManagement/service/apis', parameters('ApimServiceName'), 'initial-api')]" }
102104
};
103105
return apiTemplateResource;
104106
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public Template CreateAPIVersionSetTemplate(CreatorConfig creatorConfig)
3232
{
3333
name = "[concat(parameters('ApimServiceName'), '/versionset')]",
3434
type = "Microsoft.ApiManagement/service/api-version-sets",
35-
apiVersion = "2018-11-01",
35+
apiVersion = "2018-06-01-preview",
3636
properties = new APIVersionSetProperties()
3737
{
3838
displayName = creatorConfig.apiVersionSet.displayName,

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

Lines changed: 52 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public Template CreateLinkedMasterTemplate(Template apiVersionSetTemplate,
2525
Template masterTemplate = this.templateCreator.CreateEmptyTemplate();
2626

2727
// add parameters
28-
masterTemplate.parameters = this.CreateMasterTemplateParameters();
28+
masterTemplate.parameters = this.CreateMasterTemplateParameters(true);
2929

3030
// add links to all resources
3131
List<TemplateResource> resources = new List<TemplateResource>();
@@ -46,13 +46,38 @@ public Template CreateLinkedMasterTemplate(Template apiVersionSetTemplate,
4646
return masterTemplate;
4747
}
4848

49+
public Template CreateUnlinkedMasterTemplate(Template apiVersionSetTemplate,
50+
Template apiTemplate,
51+
CreatorFileNames creatorFileNames)
52+
{
53+
Template masterTemplate = this.templateCreator.CreateEmptyTemplate();
54+
55+
// add parameters
56+
masterTemplate.parameters = this.CreateMasterTemplateParameters(false);
57+
58+
// add links to all resources
59+
List<TemplateResource> resources = new List<TemplateResource>();
60+
61+
// apiVersionSet
62+
if (apiVersionSetTemplate != null)
63+
{
64+
resources.AddRange(apiVersionSetTemplate.resources);
65+
}
66+
67+
//api
68+
resources.AddRange(apiTemplate.resources);
69+
70+
masterTemplate.resources = resources.ToArray();
71+
return masterTemplate;
72+
}
73+
4974
public MasterTemplateResource CreateMasterTemplateResource(string name, string uriLink, string[] dependsOn)
5075
{
5176
MasterTemplateResource masterTemplateResource = new MasterTemplateResource()
5277
{
5378
name = name,
5479
type = "Microsoft.Resources/deployments",
55-
apiVersion = "2018-11-01",
80+
apiVersion = "2018-06-01-preview",
5681
properties = new MasterTemplateProperties()
5782
{
5883
mode = "Incremental",
@@ -71,18 +96,9 @@ public MasterTemplateResource CreateMasterTemplateResource(string name, string u
7196
return masterTemplateResource;
7297
}
7398

74-
public Dictionary<string, TemplateParameterProperties> CreateMasterTemplateParameters()
99+
public Dictionary<string, TemplateParameterProperties> CreateMasterTemplateParameters(bool linked)
75100
{
76101
Dictionary<string, TemplateParameterProperties> parameters = new Dictionary<string, TemplateParameterProperties>();
77-
TemplateParameterProperties repoBaseUrlProperties = new TemplateParameterProperties()
78-
{
79-
metadata = new TemplateParameterMetadata()
80-
{
81-
description = "Base URL of the repository"
82-
},
83-
type = "string"
84-
};
85-
parameters.Add("repoBaseUrl", repoBaseUrlProperties);
86102
TemplateParameterProperties apimServiceNameProperties = new TemplateParameterProperties()
87103
{
88104
metadata = new TemplateParameterMetadata()
@@ -92,6 +108,18 @@ public Dictionary<string, TemplateParameterProperties> CreateMasterTemplateParam
92108
type = "string"
93109
};
94110
parameters.Add("ApimServiceName", apimServiceNameProperties);
111+
if(linked == true)
112+
{
113+
TemplateParameterProperties repoBaseUrlProperties = new TemplateParameterProperties()
114+
{
115+
metadata = new TemplateParameterMetadata()
116+
{
117+
description = "Base URL of the repository"
118+
},
119+
type = "string"
120+
};
121+
parameters.Add("repoBaseUrl", repoBaseUrlProperties);
122+
}
95123
return parameters;
96124
}
97125

@@ -101,16 +129,23 @@ public Template CreateMasterTemplateParameterValues(CreatorConfig creatorConfig)
101129

102130
// add parameters
103131
Dictionary<string, TemplateParameterProperties> parameters = new Dictionary<string, TemplateParameterProperties>();
104-
TemplateParameterProperties repoBaseUrlProperties = new TemplateParameterProperties()
105-
{
106-
value = "."
107-
};
108-
parameters.Add("repoBaseUrl", repoBaseUrlProperties);
109132
TemplateParameterProperties apimServiceNameProperties = new TemplateParameterProperties()
110133
{
111134
value = creatorConfig.apimServiceName
112135
};
113136
parameters.Add("ApimServiceName", apimServiceNameProperties);
137+
if (creatorConfig.linked == true)
138+
{
139+
TemplateParameterProperties repoBaseUrlProperties = new TemplateParameterProperties()
140+
{
141+
metadata = new TemplateParameterMetadata()
142+
{
143+
description = "Base URL of the repository"
144+
},
145+
type = "string"
146+
};
147+
parameters.Add("repoBaseUrl", repoBaseUrlProperties);
148+
}
114149
masterTemplate.parameters = parameters;
115150
return masterTemplate;
116151
}

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@ public async Task<PolicyTemplateResource> CreateAPIPolicyTemplateResourceAsync(C
2121
// create policy resource with properties
2222
PolicyTemplateResource policyTemplateResource = new PolicyTemplateResource()
2323
{
24-
name = "[concat(parameters('ApimServiceName'), '/api/policy')]",
24+
name = "[concat(parameters('ApimServiceName'), '/subsequent-api/policy')]",
2525
type = "Microsoft.ApiManagement/service/apis/policies",
26-
apiVersion = "2018-11-01",
26+
apiVersion = "2018-06-01-preview",
2727
properties = new PolicyTemplateProperties()
2828
{
2929
contentFormat = "rawxml",
@@ -39,9 +39,9 @@ public async Task<PolicyTemplateResource> CreateOperationPolicyTemplateResourceA
3939
// create policy resource with properties
4040
PolicyTemplateResource policyTemplateResource = new PolicyTemplateResource()
4141
{
42-
name = $"[concat(parameters('ApimServiceName'), '/api/{policyPair.Key}/policy')]",
42+
name = $"[concat(parameters('ApimServiceName'), '/subsequent-api/{policyPair.Key}/policy')]",
4343
type = "Microsoft.ApiManagement/service/apis/operations/policies",
44-
apiVersion = "2018-11-01",
44+
apiVersion = "2018-06-01-preview",
4545
properties = new PolicyTemplateProperties()
4646
{
4747
contentFormat = "rawxml",

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@ public ProductAPITemplateResource CreateProductAPITemplateResource(string produc
1515
// create products/apis resource with properties
1616
ProductAPITemplateResource productAPITemplateResource = new ProductAPITemplateResource()
1717
{
18-
name = $"[concat(parameters('ApimServiceName'), '/{productID}/api')]",
18+
name = $"[concat(parameters('ApimServiceName'), '/{productID}/subsequent-api')]",
1919
type = "Microsoft.ApiManagement/service/products/apis",
20-
apiVersion = "2018-11-01",
20+
apiVersion = "2018-06-01-preview",
2121
properties = new ProductAPITemplateProperties(),
2222
dependsOn = dependsOn
2323
};

0 commit comments

Comments
 (0)