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

Commit bb42339

Browse files
committed
fix multiple api deployment for linked template
1 parent 84f57b0 commit bb42339

File tree

6 files changed

+44
-17
lines changed

6 files changed

+44
-17
lines changed

src/APIM_ARMTemplate/apimtemplate/Commands/Create.cs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -72,23 +72,25 @@ public CreateCommand()
7272
// create templates from provided configuration
7373
CreatorFileNames creatorFileNames = fileWriter.GenerateCreatorFileNames();
7474
Template apiVersionSetTemplate = creatorConfig.apiVersionSet != null ? apiVersionSetTemplateCreator.CreateAPIVersionSetTemplate(creatorConfig) : null;
75-
Template apiTemplate = await apiTemplateCreator.CreateAPITemplateAsync(creatorConfig);
76-
if(creatorConfig.linked == true)
75+
Template initialAPITemplate = await apiTemplateCreator.CreateInitialAPITemplateAsync(creatorConfig);
76+
Template subsequentAPITemplate = await apiTemplateCreator.CreateSubsequentAPITemplateAsync(creatorConfig);
77+
if (creatorConfig.linked == true)
7778
{
78-
Template masterTemplate = masterTemplateCreator.CreateLinkedMasterTemplate(apiVersionSetTemplate, apiTemplate, creatorFileNames);
79+
Template masterTemplate = masterTemplateCreator.CreateLinkedMasterTemplate(apiVersionSetTemplate, initialAPITemplate, subsequentAPITemplate, creatorFileNames);
7980
Template masterTemplateParameters = masterTemplateCreator.CreateMasterTemplateParameterValues(creatorConfig);
8081

8182
// write templates to outputLocation
8283
if (apiVersionSetTemplate != null)
8384
{
8485
fileWriter.WriteJSONToFile(apiVersionSetTemplate, String.Concat(creatorConfig.outputLocation, creatorFileNames.apiVersionSet));
8586
}
86-
fileWriter.WriteJSONToFile(apiTemplate, String.Concat(creatorConfig.outputLocation, creatorFileNames.api));
87+
fileWriter.WriteJSONToFile(initialAPITemplate, String.Concat(creatorConfig.outputLocation, creatorFileNames.initialAPI));
88+
fileWriter.WriteJSONToFile(subsequentAPITemplate, String.Concat(creatorConfig.outputLocation, creatorFileNames.subsequentAPI));
8789
fileWriter.WriteJSONToFile(masterTemplate, String.Concat(creatorConfig.outputLocation, "/master.template.json"));
8890
fileWriter.WriteJSONToFile(masterTemplateParameters, String.Concat(creatorConfig.outputLocation, "/master.parameters.json"));
8991
} else
9092
{
91-
Template masterTemplate = masterTemplateCreator.CreateUnlinkedMasterTemplate(apiVersionSetTemplate, apiTemplate, creatorFileNames);
93+
Template masterTemplate = masterTemplateCreator.CreateUnlinkedMasterTemplate(apiVersionSetTemplate, initialAPITemplate, creatorFileNames);
9294
Template masterTemplateParameters = masterTemplateCreator.CreateMasterTemplateParameterValues(creatorConfig);
9395
fileWriter.WriteJSONToFile(masterTemplate, String.Concat(creatorConfig.outputLocation, "/master.template.json"));
9496
fileWriter.WriteJSONToFile(masterTemplateParameters, String.Concat(creatorConfig.outputLocation, "/master.parameters.json"));

src/APIM_ARMTemplate/apimtemplate/Creator/ExampleFiles/YAMLConfigs/valid.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
version: 0.0.1 # Required
2-
apimServiceName: LucasUnlinked2 # Required, must match name of an apim service deployed in the specified resource group
2+
apimServiceName: LucasLinked2 # Required, must match name of an apim service deployed in the specified resource group
33
apiVersionSet: # Optional
44
displayName: myAPIVersionSet
55
description: a description
@@ -23,5 +23,5 @@ api:
2323
policy: C:\Users\lucashh\Desktop\Projects\APIM-ARM\azure-api-management-devops-example\src\APIM_ARMTemplate\apimtemplate\Creator\ExampleFiles\XMLPolicies\operationRateLimit.xml # Optional, can be url or local file
2424
products: starter, platinum # Optional, adds api to the specified products
2525
outputLocation: C:\Users\lucashh\Desktop\Projects\APIM-ARM\GeneratedTemplates # Required, folder the creator will write the templates to
26-
linked: false # Optional
26+
linked: true # Optional
2727
linkedTemplatesBaseUrl : https://lucasyamlblob.blob.core.windows.net/yaml # Required if 'linked' property is set to true

src/APIM_ARMTemplate/apimtemplate/Creator/FileHandlers/FileWriter.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ public CreatorFileNames GenerateCreatorFileNames()
2323
return new CreatorFileNames()
2424
{
2525
apiVersionSet = $@"/versionset.template.json",
26-
api = $@"/api.template.json",
26+
initialAPI = $@"/initialAPI.template.json",
27+
subsequentAPI = $@"/subsequentAPI.template.json",
2728
master = @"/master.template.json"
2829
};
2930
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ namespace Microsoft.Azure.Management.ApiManagement.ArmTemplates.Create
44
public class CreatorFileNames
55
{
66
public string apiVersionSet { get; set; }
7-
public string api { get; set; }
7+
public string initialAPI { get; set; }
8+
public string subsequentAPI { get; set; }
89
public string master { get; set; }
910
}
1011
}

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

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,27 @@ public APITemplateCreator(FileReader fileReader, TemplateCreator templateCreator
2020
this.productAPITemplateCreator = productAPITemplateCreator;
2121
}
2222

23-
public async Task<Template> CreateAPITemplateAsync(CreatorConfig creatorConfig)
23+
public async Task<Template> CreateInitialAPITemplateAsync(CreatorConfig creatorConfig)
24+
{
25+
// create empty template
26+
Template apiTemplate = this.templateCreator.CreateEmptyTemplate();
27+
28+
// add parameters
29+
apiTemplate.parameters = new Dictionary<string, TemplateParameterProperties>
30+
{
31+
{ "ApimServiceName", new TemplateParameterProperties(){ type = "string" } }
32+
};
33+
34+
List<TemplateResource> resources = new List<TemplateResource>();
35+
// create api resource with properties
36+
APITemplateResource initialAPITemplateResource = await this.CreateInitialAPITemplateResource(creatorConfig);
37+
resources.Add(initialAPITemplateResource);
38+
39+
apiTemplate.resources = resources.ToArray();
40+
return apiTemplate;
41+
}
42+
43+
public async Task<Template> CreateSubsequentAPITemplateAsync(CreatorConfig creatorConfig)
2444
{
2545
// create empty template
2646
Template apiTemplate = this.templateCreator.CreateEmptyTemplate();
@@ -36,12 +56,10 @@ public async Task<Template> CreateAPITemplateAsync(CreatorConfig creatorConfig)
3656

3757
List<TemplateResource> resources = new List<TemplateResource>();
3858
// create api resource with properties
39-
APITemplateResource initialAPITemplateResource = await this.CreateInitialAPITemplateResource(creatorConfig);
4059
APITemplateResource subsequentAPITemplateResource = await this.CreateSubsequentAPITemplateResourceAsync(creatorConfig);
4160
PolicyTemplateResource apiPolicyResource = await this.policyTemplateCreator.CreateAPIPolicyTemplateResourceAsync(creatorConfig, dependsOnSubsequentAPI);
4261
List<PolicyTemplateResource> operationPolicyResources = await this.policyTemplateCreator.CreateOperationPolicyTemplateResourcesAsync(creatorConfig, dependsOnSubsequentAPI);
4362
List<ProductAPITemplateResource> productAPIResources = this.productAPITemplateCreator.CreateProductAPITemplateResources(creatorConfig, dependsOnSubsequentAPI);
44-
resources.Add(initialAPITemplateResource);
4563
resources.Add(subsequentAPITemplateResource);
4664
resources.Add(apiPolicyResource);
4765
resources.AddRange(operationPolicyResources);
@@ -60,7 +78,7 @@ public async Task<APITemplateResource> CreateInitialAPITemplateResource(CreatorC
6078
// create api resource with properties
6179
APITemplateResource apiTemplateResource = new APITemplateResource()
6280
{
63-
name = $"[concat(parameters('ApimServiceName'), '/{creatorConfig.api.name}-initial')]",
81+
name = $"[concat(parameters('ApimServiceName'), '/{creatorConfig.api.name}')]",
6482
type = "Microsoft.ApiManagement/service/apis",
6583
apiVersion = "2018-01-01",
6684
properties = new APITemplateProperties()
@@ -112,7 +130,7 @@ public async Task<APITemplateResource> CreateSubsequentAPITemplateResourceAsync(
112130
// supplied via optional arguments
113131
path = creatorConfig.api.suffix
114132
},
115-
dependsOn = new string[] { $"[resourceId('Microsoft.ApiManagement/service/apis', parameters('ApimServiceName'), '{creatorConfig.api.name}-initial')]" }
133+
dependsOn = new string[] { }
116134
};
117135
return apiTemplateResource;
118136
}

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

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ public MasterTemplateCreator(TemplateCreator templateCreator)
1212
}
1313

1414
public Template CreateLinkedMasterTemplate(Template apiVersionSetTemplate,
15-
Template apiTemplate,
15+
Template initialAPITemplate,
16+
Template subsequentAPITemplate,
1617
CreatorFileNames creatorFileNames)
1718
{
1819
// create empty template
@@ -32,9 +33,13 @@ public Template CreateLinkedMasterTemplate(Template apiVersionSetTemplate,
3233
}
3334

3435
//api
35-
string initialAPIUri = $"[concat(parameters('LinkedTemplatesBaseUrl'), '{creatorFileNames.api}')]";
36+
string initialAPIUri = $"[concat(parameters('LinkedTemplatesBaseUrl'), '{creatorFileNames.initialAPI}')]";
3637
string[] initialAPIDependsOn = apiVersionSetTemplate != null ? new string[] { "[resourceId('Microsoft.Resources/deployments', 'versionSetTemplate')]" } : new string[] { };
37-
resources.Add(this.CreateMasterTemplateResource("apiTemplate", initialAPIUri, initialAPIDependsOn));
38+
resources.Add(this.CreateMasterTemplateResource("initialAPITemplate", initialAPIUri, initialAPIDependsOn));
39+
40+
string subsequentAPIUri = $"[concat(parameters('LinkedTemplatesBaseUrl'), '{creatorFileNames.subsequentAPI}')]";
41+
string[] subsequentAPIDependsOn = apiVersionSetTemplate != null ? new string[] { "[resourceId('Microsoft.Resources/deployments', 'initialAPITemplate')]" } : new string[] { };
42+
resources.Add(this.CreateMasterTemplateResource("subsequentAPITemplate", subsequentAPIUri, subsequentAPIDependsOn));
3843

3944
masterTemplate.resources = resources.ToArray();
4045
return masterTemplate;

0 commit comments

Comments
 (0)