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

Commit 13b7eb8

Browse files
committed
append api name with revision and create release if necessary
1 parent 21274df commit 13b7eb8

File tree

5 files changed

+32
-13
lines changed

5 files changed

+32
-13
lines changed

src/APIM_ARMTemplate/apimtemplate/Commands/Create.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,9 @@ public CreateCommand()
4545
ProductAPITemplateCreator productAPITemplateCreator = new ProductAPITemplateCreator();
4646
PolicyTemplateCreator policyTemplateCreator = new PolicyTemplateCreator(fileReader);
4747
DiagnosticTemplateCreator diagnosticTemplateCreator = new DiagnosticTemplateCreator();
48+
ReleaseTemplateCreator releaseTemplateCreator = new ReleaseTemplateCreator();
4849
ProductTemplateCreator productTemplateCreator = new ProductTemplateCreator(policyTemplateCreator);
49-
APITemplateCreator apiTemplateCreator = new APITemplateCreator(fileReader, policyTemplateCreator, productAPITemplateCreator, diagnosticTemplateCreator);
50+
APITemplateCreator apiTemplateCreator = new APITemplateCreator(fileReader, policyTemplateCreator, productAPITemplateCreator, diagnosticTemplateCreator, releaseTemplateCreator);
5051
MasterTemplateCreator masterTemplateCreator = new MasterTemplateCreator();
5152

5253
// create templates from provided configuration
@@ -74,7 +75,7 @@ public CreateCommand()
7475
foreach (APIConfig api in creatorConfig.apis)
7576
{
7677
// create api templates from provided api config - if the api config contains a supplied apiVersion, split the templates into 2 for metadata and swagger content, otherwise create a unified template
77-
List<Template> apiTemplateSet = await apiTemplateCreator.CreateAPITemplatesAsync(creatorConfig, api);
78+
List<Template> apiTemplateSet = await apiTemplateCreator.CreateAPITemplatesAsync(api);
7879
apiTemplates.AddRange(apiTemplateSet);
7980
// create the relevant info that will be needed to properly link to the api template(s) from the master template
8081
apiInformation.Add(new LinkedMasterTemplateAPIInformation()

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,15 @@ public FileNames GenerateFileNames(string apimServiceName)
2323

2424
public string GenerateCreatorAPIFileName(string apiName, bool isSplitAPI, bool isInitialAPI, string apimServiceName)
2525
{
26+
// in case the api name has been appended with ;rev={revisionNumber}, take only the api name initially provided by the user in the creator config
27+
string sanitizedAPIName = apiName.Split(";")[0];
2628
if (isSplitAPI == true)
2729
{
28-
return isInitialAPI == true ? $@"/{apimServiceName}-{apiName}-initial.api.template.json" : $@"/{apimServiceName}-{apiName}-subsequent.api.template.json";
30+
return isInitialAPI == true ? $@"/{apimServiceName}-{sanitizedAPIName}-initial.api.template.json" : $@"/{apimServiceName}-{sanitizedAPIName}-subsequent.api.template.json";
2931
}
3032
else
3133
{
32-
return $@"/{apimServiceName}-{apiName}.api.template.json";
34+
return $@"/{apimServiceName}-{sanitizedAPIName}.api.template.json";
3335
}
3436
}
3537

src/APIM_ARMTemplate/apimtemplate/Common/TemplateModels/ReleaseTemplateResource.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22
{
33
public class ReleaseTemplateResource : APITemplateSubResource
44
{
5-
public ReleasTemplateProperties properties { get; set; }
5+
public ReleaseTemplateProperties properties { get; set; }
66
}
77

8-
public class ReleasTemplateProperties
8+
public class ReleaseTemplateProperties
99
{
1010
public string apiId { get; set; }
1111
public string notes { get; set; }

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

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,36 +13,49 @@ public class APITemplateCreator : TemplateCreator
1313
private PolicyTemplateCreator policyTemplateCreator;
1414
private ProductAPITemplateCreator productAPITemplateCreator;
1515
private DiagnosticTemplateCreator diagnosticTemplateCreator;
16+
private ReleaseTemplateCreator releaseTemplateCreator;
1617

17-
public APITemplateCreator(FileReader fileReader, PolicyTemplateCreator policyTemplateCreator, ProductAPITemplateCreator productAPITemplateCreator, DiagnosticTemplateCreator diagnosticTemplateCreator)
18+
public APITemplateCreator(FileReader fileReader, PolicyTemplateCreator policyTemplateCreator, ProductAPITemplateCreator productAPITemplateCreator, DiagnosticTemplateCreator diagnosticTemplateCreator, ReleaseTemplateCreator releaseTemplateCreator)
1819
{
1920
this.fileReader = fileReader;
2021
this.policyTemplateCreator = policyTemplateCreator;
2122
this.productAPITemplateCreator = productAPITemplateCreator;
2223
this.diagnosticTemplateCreator = diagnosticTemplateCreator;
24+
this.releaseTemplateCreator = releaseTemplateCreator;
2325
}
2426

25-
public async Task<List<Template>> CreateAPITemplatesAsync(CreatorConfig creatorConfig, APIConfig api)
27+
public async Task<List<Template>> CreateAPITemplatesAsync(APIConfig api)
2628
{
2729
// determine if api needs to be split into multiple templates
2830
bool isSplit = isSplitAPI(api);
2931

32+
// update api name if necessary (apiRevision > 1 and isCurrent = true)
33+
int revisionNumber = 0;
34+
if (Int32.TryParse(api.apiRevision, out revisionNumber))
35+
{
36+
if (revisionNumber > 1 && api.isCurrent == true)
37+
{
38+
string currentAPIName = api.name;
39+
api.name += $";rev={revisionNumber}";
40+
}
41+
}
42+
3043
List<Template> apiTemplates = new List<Template>();
3144
if (isSplit == true)
3245
{
3346
// create 2 templates, an initial template with metadata and a subsequent template with the swagger content
34-
apiTemplates.Add(await CreateAPITemplateAsync(creatorConfig, api, isSplit, true));
35-
apiTemplates.Add(await CreateAPITemplateAsync(creatorConfig, api, isSplit, false));
47+
apiTemplates.Add(await CreateAPITemplateAsync(api, isSplit, true));
48+
apiTemplates.Add(await CreateAPITemplateAsync(api, isSplit, false));
3649
}
3750
else
3851
{
3952
// create a unified template that includes both the metadata and swagger content
40-
apiTemplates.Add(await CreateAPITemplateAsync(creatorConfig, api, isSplit, false));
53+
apiTemplates.Add(await CreateAPITemplateAsync(api, isSplit, false));
4154
}
4255
return apiTemplates;
4356
}
4457

45-
public async Task<Template> CreateAPITemplateAsync(CreatorConfig creatorConfig, APIConfig api, bool isSplit, bool isInitial)
58+
public async Task<Template> CreateAPITemplateAsync(APIConfig api, bool isSplit, bool isInitial)
4659
{
4760
// create empty template
4861
Template apiTemplate = CreateEmptyTemplate();
@@ -77,12 +90,15 @@ public List<TemplateResource> CreateChildResourceTemplates(APIConfig api)
7790
List<PolicyTemplateResource> operationPolicyResources = api.operations != null ? this.policyTemplateCreator.CreateOperationPolicyTemplateResources(api, dependsOn) : null;
7891
List<ProductAPITemplateResource> productAPIResources = api.products != null ? this.productAPITemplateCreator.CreateProductAPITemplateResources(api, dependsOn) : null;
7992
DiagnosticTemplateResource diagnosticTemplateResource = api.diagnostic != null ? this.diagnosticTemplateCreator.CreateAPIDiagnosticTemplateResource(api, dependsOn) : null;
93+
// add release resource if the name has been appended with ;rev{revisionNumber}
94+
ReleaseTemplateResource releaseTemplateResource = api.name.Contains(";rev") == true ? this.releaseTemplateCreator.CreateAPIReleaseTemplateResource(api, dependsOn) : null;
8095

8196
// add resources if not null
8297
if (apiPolicyResource != null) resources.Add(apiPolicyResource);
8398
if (operationPolicyResources != null) resources.AddRange(operationPolicyResources);
8499
if (productAPIResources != null) resources.AddRange(productAPIResources);
85100
if (diagnosticTemplateResource != null) resources.Add(diagnosticTemplateResource);
101+
if (releaseTemplateResource != null) resources.Add(releaseTemplateResource);
86102

87103
return resources;
88104
}

src/APIM_ARMTemplate/apimtemplate/Properties/launchSettings.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"profiles": {
33
"apimtemplate": {
44
"commandName": "Project",
5-
"commandLineArgs": "extract --sourceApimName LucasBlankLinked --destinationApimName LucasBlankUnlinked --resourceGroup LucasHuetHudsonInternal --fileFolder C:\\Users\\lucashh\\Desktop\\Projects\\APIM-ARM\\GeneratedTemplates\\Extractor\\Full --linkedTemplatesBaseUrl https://lucasarmtemplates.blob.core.windows.net/linked-templates "
5+
"commandLineArgs": "create --configFile ./Creator/ExampleFiles/YAMLConfigs/validTesting.yml"
66
}
77
}
88
}

0 commit comments

Comments
 (0)