11
11
using Microsoft . Azure . Management . ApiManagement . ArmTemplates . Common . FileHandlers ;
12
12
using Microsoft . Azure . Management . ApiManagement . ArmTemplates . Common . Templates . Abstractions ;
13
13
using Microsoft . Azure . Management . ApiManagement . ArmTemplates . Common . Templates . ApiManagementService ;
14
+ using Microsoft . Azure . Management . ApiManagement . ArmTemplates . Common . Templates . ApiReleases ;
14
15
using Microsoft . Azure . Management . ApiManagement . ArmTemplates . Common . Templates . Apis ;
15
16
using Microsoft . Azure . Management . ApiManagement . ArmTemplates . Common . Templates . ApiVersionSet ;
16
17
using Microsoft . Azure . Management . ApiManagement . ArmTemplates . Common . Templates . AuthorizationServer ;
@@ -70,7 +71,8 @@ public class ExtractorExecutor
70
71
readonly ISchemaExtractor schemaExtractor ;
71
72
readonly IOpenIdConnectProviderExtractor openIdConnectProviderExtractor ;
72
73
readonly IPolicyFragmentsExtractor policyFragmentsExtractor ;
73
-
74
+ readonly IApiReleaseExtractor apiReleaseExtractor ;
75
+
74
76
public ExtractorExecutor (
75
77
ILogger < ExtractorExecutor > logger ,
76
78
IApisClient apisClient ,
@@ -95,7 +97,8 @@ public ExtractorExecutor(
95
97
IApiManagementServiceExtractor apiManagementServiceExtractor ,
96
98
ISchemaExtractor schemaExtractor ,
97
99
IOpenIdConnectProviderExtractor openIdConnectProviderExtractor ,
98
- IPolicyFragmentsExtractor policyFragmentsExtractor )
100
+ IPolicyFragmentsExtractor policyFragmentsExtractor ,
101
+ IApiReleaseExtractor apiReleaseExtractor )
99
102
{
100
103
this . logger = logger ;
101
104
this . apisClient = apisClient ;
@@ -121,6 +124,7 @@ public ExtractorExecutor(
121
124
this . schemaExtractor = schemaExtractor ;
122
125
this . openIdConnectProviderExtractor = openIdConnectProviderExtractor ;
123
126
this . policyFragmentsExtractor = policyFragmentsExtractor ;
127
+ this . apiReleaseExtractor = apiReleaseExtractor ;
124
128
}
125
129
126
130
/// <summary>
@@ -151,7 +155,8 @@ public static ExtractorExecutor BuildExtractorExecutor(
151
155
IApiManagementServiceExtractor apiManagementServiceExtractor = null ,
152
156
ISchemaExtractor schemaExtractor = null ,
153
157
IOpenIdConnectProviderExtractor openIdConnectProviderExtractor = null ,
154
- IPolicyFragmentsExtractor policyFragmentsExtractor = null )
158
+ IPolicyFragmentsExtractor policyFragmentsExtractor = null ,
159
+ IApiReleaseExtractor apiReleaseExtractor = null )
155
160
=> new ExtractorExecutor (
156
161
logger ,
157
162
apisClient ,
@@ -176,7 +181,8 @@ public static ExtractorExecutor BuildExtractorExecutor(
176
181
apiManagementServiceExtractor ,
177
182
schemaExtractor ,
178
183
openIdConnectProviderExtractor ,
179
- policyFragmentsExtractor ) ;
184
+ policyFragmentsExtractor ,
185
+ apiReleaseExtractor ) ;
180
186
181
187
public void SetExtractorParameters ( ExtractorParameters extractorParameters )
182
188
{
@@ -478,7 +484,8 @@ public async Task GenerateResourceParametersFiles(
478
484
Template < IdentityProviderResources > identityProviderTemplate = null ,
479
485
Template < SchemaTemplateResources > schemaTemplate = null ,
480
486
Template < OpenIdConnectProviderResources > openIdConnectProviderTemplate = null ,
481
- Template < PolicyFragmentsResources > policyFragmentsTemplate = null )
487
+ Template < PolicyFragmentsResources > policyFragmentsTemplate = null ,
488
+ Template < ApiReleaseTemplateResources > apiReleaseTemplate = null )
482
489
{
483
490
this . RenameExistingParametersDirectory ( baseFilesGenerationDirectory ) ;
484
491
@@ -498,6 +505,7 @@ public async Task GenerateResourceParametersFiles(
498
505
await this . GenerateResourceParametersFile ( baseFilesGenerationDirectory , this . extractorParameters . FileNames . SchemaParameters , schemaTemplate , mainParametersTemplate ) ;
499
506
await this . GenerateResourceParametersFile ( baseFilesGenerationDirectory , this . extractorParameters . FileNames . OpenIdConnectProvidersParameters , openIdConnectProviderTemplate , mainParametersTemplate ) ;
500
507
await this . GenerateResourceParametersFile ( baseFilesGenerationDirectory , this . extractorParameters . FileNames . PolicyFragmentsParameters , policyFragmentsTemplate , mainParametersTemplate ) ;
508
+ await this . GenerateResourceParametersFile ( baseFilesGenerationDirectory , this . extractorParameters . FileNames . ApiReleaseParameters , apiReleaseTemplate , mainParametersTemplate ) ;
501
509
}
502
510
503
511
public async Task GenerateResourceParametersFile < TTemplateResource > ( string baseFilesGenerationDirectory , string fileName , Template < TTemplateResource > resourceTemplate , Template mainParametersTemplate ) where TTemplateResource : ITemplateResources , new ( )
@@ -901,6 +909,57 @@ await FileWriter.SaveAsJsonAsync(
901
909
}
902
910
903
911
/// <summary>
912
+ /// Generates api release template in the desired folder
913
+ /// </summary>
914
+ /// <param name="baseFilesGenerationDirectory">name of base folder where to save output files</param>
915
+ /// <returns>generated api release template</returns>
916
+ public async Task < Template < ApiReleaseTemplateResources > > GenerateApiReleaseTemplateAsync ( string apiName , string baseFilesGenerationDirectory )
917
+ {
918
+ this . logger . LogInformation ( "Started generation of api release template..." ) ;
919
+
920
+ var apiReleaseTemplate = this . apiReleaseExtractor . GenerateSingleApiReleaseTemplate ( apiName , this . extractorParameters ) ;
921
+
922
+ if ( apiReleaseTemplate ? . HasResources ( ) == true )
923
+ {
924
+ await FileWriter . SaveAsJsonAsync (
925
+ apiReleaseTemplate ,
926
+ directory : baseFilesGenerationDirectory ,
927
+ fileName : this . extractorParameters . FileNames . ApiRelease ) ;
928
+ }
929
+
930
+ this . logger . LogInformation ( "Finished generation of apiRelease template..." ) ;
931
+ return apiReleaseTemplate ;
932
+ }
933
+
934
+ /// <summary>
935
+ /// Generates api release template in the desired folder
936
+ /// </summary>
937
+ /// <param name="baseFilesGenerationDirectory">name of base folder where to save output files</param>
938
+ /// <returns>generated api release template</returns>
939
+ public async Task < Template < ApiReleaseTemplateResources > > GenerateApiReleasesTemplateAsync ( string baseFilesGenerationDirectory )
940
+ {
941
+ if ( ! string . IsNullOrEmpty ( this . extractorParameters . SingleApiName ) || ! this . extractorParameters . MultipleApiNames . IsNullOrEmpty ( ) )
942
+ {
943
+ this . logger . LogInformation ( "Skip generation of api releases template: not all apis are extracted" ) ;
944
+ return null ;
945
+ }
946
+
947
+ this . logger . LogInformation ( "Started generation of api releases template..." ) ;
948
+
949
+ var apiReleaseTemplate = await this . apiReleaseExtractor . GenerateCurrentApiReleaseTemplate ( this . extractorParameters ) ;
950
+
951
+ if ( apiReleaseTemplate ? . HasResources ( ) == true )
952
+ {
953
+ await FileWriter . SaveAsJsonAsync (
954
+ apiReleaseTemplate ,
955
+ directory : baseFilesGenerationDirectory ,
956
+ fileName : this . extractorParameters . FileNames . ApiRelease ) ;
957
+ }
958
+
959
+ this . logger . LogInformation ( "Finished generation of apiReleases template..." ) ;
960
+ return apiReleaseTemplate ;
961
+ }
962
+
904
963
/// Generates policy fragments templates in the desired folder
905
964
/// </summary>
906
965
/// <param name="baseFilesGenerationDirectory">name of base folder where to save output files</param>
@@ -1034,14 +1093,17 @@ async Task GenerateSingleAPIWithRevisionsTemplates()
1034
1093
this . logger . LogInformation ( "Extracting singleAPI {0} with revisions" , this . extractorParameters . SingleApiName ) ;
1035
1094
1036
1095
string currentRevision = null ;
1096
+ bool generateSingleApiReleaseTemplate ;
1037
1097
List < string > revList = new List < string > ( ) ;
1038
1098
1039
1099
await foreach ( var apiRevision in this . apiRevisionExtractor . GetApiRevisionsAsync ( this . extractorParameters . SingleApiName , this . extractorParameters ) )
1040
1100
{
1101
+ generateSingleApiReleaseTemplate = false ;
1041
1102
var apiRevisionName = apiRevision . ApiId . Split ( "/" ) [ 2 ] ;
1042
1103
if ( apiRevision . IsCurrent )
1043
1104
{
1044
1105
currentRevision = apiRevisionName ;
1106
+ generateSingleApiReleaseTemplate = true ;
1045
1107
}
1046
1108
1047
1109
// creating a folder for this api revision
@@ -1050,6 +1112,11 @@ async Task GenerateSingleAPIWithRevisionsTemplates()
1050
1112
revList . Add ( apiRevisionName ) ;
1051
1113
1052
1114
await this . GenerateTemplates ( revFileFolder , singleApiName : apiRevisionName ) ;
1115
+
1116
+ if ( generateSingleApiReleaseTemplate )
1117
+ {
1118
+ await this . GenerateApiReleaseTemplateAsync ( apiRevisionName , revFileFolder ) ;
1119
+ }
1053
1120
}
1054
1121
1055
1122
if ( currentRevision is null )
@@ -1088,9 +1155,9 @@ async Task GenerateTemplates(
1088
1155
}
1089
1156
1090
1157
var apisToExtract = await this . GetApiNamesToExtract ( singleApiName , multipleApiNames ) ;
1091
-
1092
1158
// generate different templates using extractors and write to output
1093
1159
apiTemplate = apiTemplate ?? await this . GenerateApiTemplateAsync ( singleApiName , multipleApiNames , baseFilesGenerationDirectory ) ;
1160
+
1094
1161
var globalServicePolicyTemplate = await this . GeneratePolicyTemplateAsync ( baseFilesGenerationDirectory ) ;
1095
1162
var productApiTemplate = await this . GenerateProductApisTemplateAsync ( singleApiName , multipleApiNames , baseFilesGenerationDirectory ) ;
1096
1163
var productTemplate = await this . GenerateProductsTemplateAsync ( singleApiName , baseFilesGenerationDirectory , apiTemplate . TypedResources . ApiProducts ) ;
@@ -1106,9 +1173,11 @@ async Task GenerateTemplates(
1106
1173
var openIdConnectProviderTemplate = await this . GenerateOpenIdConnectProviderTemplateAsync ( baseFilesGenerationDirectory ) ;
1107
1174
var schemasTempate = await this . GenerateSchemasTemplateAsync ( baseFilesGenerationDirectory ) ;
1108
1175
var policyFragmentTemplate = await this . GeneratePolicyFragmentsTemplateAsync ( apiTemplate . TypedResources . GetAllPolicies ( ) , baseFilesGenerationDirectory ) ;
1176
+ var apiReleasesTemplate = await this . GenerateApiReleasesTemplateAsync ( baseFilesGenerationDirectory ) ;
1109
1177
await this . GenerateGatewayTemplateAsync ( singleApiName , baseFilesGenerationDirectory ) ;
1110
1178
await this . GenerateGatewayApiTemplateAsync ( singleApiName , multipleApiNames , baseFilesGenerationDirectory ) ;
1111
1179
await this . GenerateApiManagementServiceTemplate ( baseFilesGenerationDirectory ) ;
1180
+
1112
1181
var parametersTemplate = await this . GenerateParametersTemplateAsync ( apisToExtract , loggerTemplate . TypedResources , backendTemplate . TypedResources , namedValueTemplate . TypedResources , identityProviderTemplate . TypedResources , openIdConnectProviderTemplate . TypedResources , baseFilesGenerationDirectory ) ;
1113
1182
1114
1183
await this . GenerateResourceParametersFiles (
@@ -1129,7 +1198,8 @@ await this.GenerateResourceParametersFiles(
1129
1198
identityProviderTemplate : identityProviderTemplate ,
1130
1199
openIdConnectProviderTemplate : openIdConnectProviderTemplate ,
1131
1200
schemaTemplate : schemasTempate ,
1132
- policyFragmentsTemplate : policyFragmentTemplate ) ;
1201
+ policyFragmentsTemplate : policyFragmentTemplate ,
1202
+ apiReleaseTemplate : apiReleasesTemplate ) ;
1133
1203
1134
1204
await this . GenerateMasterTemplateAsync (
1135
1205
baseFilesGenerationDirectory ,
0 commit comments