24
24
using Microsoft . Azure . Management . ApiManagement . ArmTemplates . Common . Templates . NamedValues ;
25
25
using Microsoft . Azure . Management . ApiManagement . ArmTemplates . Common . Templates . OpenIdConnectProviders ;
26
26
using Microsoft . Azure . Management . ApiManagement . ArmTemplates . Common . Templates . Policy ;
27
+ using Microsoft . Azure . Management . ApiManagement . ArmTemplates . Common . Templates . PolicyFragments ;
27
28
using Microsoft . Azure . Management . ApiManagement . ArmTemplates . Common . Templates . ProductApis ;
28
29
using Microsoft . Azure . Management . ApiManagement . ArmTemplates . Common . Templates . Products ;
29
30
using Microsoft . Azure . Management . ApiManagement . ArmTemplates . Common . Templates . Schemas ;
@@ -68,6 +69,7 @@ public class ExtractorExecutor
68
69
readonly IApiManagementServiceExtractor apiManagementServiceExtractor ;
69
70
readonly ISchemaExtractor schemaExtractor ;
70
71
readonly IOpenIdConnectProviderExtractor openIdConnectProviderExtractor ;
72
+ readonly IPolicyFragmentsExtractor policyFragmentsExtractor ;
71
73
72
74
public ExtractorExecutor (
73
75
ILogger < ExtractorExecutor > logger ,
@@ -92,7 +94,8 @@ public ExtractorExecutor(
92
94
IIdentityProviderExtractor identityProviderExtractor ,
93
95
IApiManagementServiceExtractor apiManagementServiceExtractor ,
94
96
ISchemaExtractor schemaExtractor ,
95
- IOpenIdConnectProviderExtractor openIdConnectProviderExtractor )
97
+ IOpenIdConnectProviderExtractor openIdConnectProviderExtractor ,
98
+ IPolicyFragmentsExtractor policyFragmentsExtractor )
96
99
{
97
100
this . logger = logger ;
98
101
this . apisClient = apisClient ;
@@ -117,6 +120,7 @@ public ExtractorExecutor(
117
120
this . apiManagementServiceExtractor = apiManagementServiceExtractor ;
118
121
this . schemaExtractor = schemaExtractor ;
119
122
this . openIdConnectProviderExtractor = openIdConnectProviderExtractor ;
123
+ this . policyFragmentsExtractor = policyFragmentsExtractor ;
120
124
}
121
125
122
126
/// <summary>
@@ -146,7 +150,8 @@ public static ExtractorExecutor BuildExtractorExecutor(
146
150
IIdentityProviderExtractor identityProviderExtractor = null ,
147
151
IApiManagementServiceExtractor apiManagementServiceExtractor = null ,
148
152
ISchemaExtractor schemaExtractor = null ,
149
- IOpenIdConnectProviderExtractor openIdConnectProviderExtractor = null )
153
+ IOpenIdConnectProviderExtractor openIdConnectProviderExtractor = null ,
154
+ IPolicyFragmentsExtractor policyFragmentsExtractor = null )
150
155
=> new ExtractorExecutor (
151
156
logger ,
152
157
apisClient ,
@@ -170,7 +175,8 @@ public static ExtractorExecutor BuildExtractorExecutor(
170
175
identityProviderExtractor ,
171
176
apiManagementServiceExtractor ,
172
177
schemaExtractor ,
173
- openIdConnectProviderExtractor ) ;
178
+ openIdConnectProviderExtractor ,
179
+ policyFragmentsExtractor ) ;
174
180
175
181
public void SetExtractorParameters ( ExtractorParameters extractorParameters )
176
182
{
@@ -469,7 +475,8 @@ public async Task<Template<MasterTemplateResources>> GenerateMasterTemplateAsync
469
475
GroupTemplateResources groupTemplateResources = null ,
470
476
IdentityProviderResources identityProviderTemplateResources = null ,
471
477
SchemaTemplateResources schemaTemplateResources = null ,
472
- OpenIdConnectProviderResources openIdConnectProviderResources = null )
478
+ OpenIdConnectProviderResources openIdConnectProviderResources = null ,
479
+ PolicyFragmentsResources policyFragmentsResources = null )
473
480
{
474
481
if ( string . IsNullOrEmpty ( this . extractorParameters . LinkedTemplatesBaseUrl ) )
475
482
{
@@ -483,7 +490,7 @@ public async Task<Template<MasterTemplateResources>> GenerateMasterTemplateAsync
483
490
this . extractorParameters , apiTemplateResources , policyTemplateResources , apiVersionSetTemplateResources ,
484
491
productsTemplateResources , productApisTemplateResources , apiTagsTemplateResources , loggersTemplateResources ,
485
492
backendsTemplateResources , authorizationServersTemplateResources , namedValuesTemplateResources , tagTemplateResources ,
486
- groupTemplateResources , identityProviderTemplateResources , schemaTemplateResources , openIdConnectProviderResources ) ;
493
+ groupTemplateResources , identityProviderTemplateResources , schemaTemplateResources , openIdConnectProviderResources , policyFragmentsResources ) ;
487
494
488
495
if ( masterTemplate ? . HasResources ( ) == true )
489
496
{
@@ -813,6 +820,29 @@ await FileWriter.SaveAsJsonAsync(
813
820
return schemasTemplate ;
814
821
}
815
822
823
+ /// <summary>
824
+ /// Generates policy fragments templates in the desired folder
825
+ /// </summary>
826
+ /// <param name="baseFilesGenerationDirectory">name of base folder where to save output files</param>
827
+ /// <returns>generated policy fragments template</returns>
828
+ public async Task < Template < PolicyFragmentsResources > > GeneratePolicyFragmentsTemplateAsync ( List < PolicyTemplateResource > apiPolicies , string baseFilesGenerationDirectory )
829
+ {
830
+ this . logger . LogInformation ( "Started generation of policy fragments template..." ) ;
831
+
832
+ var policyFragmentTemplate = await this . policyFragmentsExtractor . GeneratePolicyFragmentsTemplateAsync ( apiPolicies , this . extractorParameters ) ;
833
+
834
+ if ( policyFragmentTemplate ? . HasResources ( ) == true )
835
+ {
836
+ await FileWriter . SaveAsJsonAsync (
837
+ policyFragmentTemplate ,
838
+ directory : baseFilesGenerationDirectory ,
839
+ fileName : this . extractorParameters . FileNames . PolicyFragments ) ;
840
+ }
841
+
842
+ this . logger . LogInformation ( "Finished generation of policy fragments template..." ) ;
843
+ return policyFragmentTemplate ;
844
+ }
845
+
816
846
/// <summary>
817
847
/// Generates split api templates / folders for each api in this sourceApim
818
848
/// </summary>
@@ -995,6 +1025,7 @@ async Task GenerateTemplates(
995
1025
var identityProviderTemplate = await this . GenerateIdentityProviderTemplateAsync ( baseFilesGenerationDirectory ) ;
996
1026
var openIdConnectProviderTemplate = await this . GenerateOpenIdConnectProviderTemplateAsync ( baseFilesGenerationDirectory ) ;
997
1027
var schemasTempate = await this . GenerateSchemasTemplateAsync ( baseFilesGenerationDirectory ) ;
1028
+ var policyFragmentTemplate = await this . GeneratePolicyFragmentsTemplateAsync ( apiTemplate . TypedResources . GetAllPolicies ( ) , baseFilesGenerationDirectory ) ;
998
1029
await this . GenerateGatewayTemplateAsync ( singleApiName , baseFilesGenerationDirectory ) ;
999
1030
await this . GenerateGatewayApiTemplateAsync ( singleApiName , multipleApiNames , baseFilesGenerationDirectory ) ;
1000
1031
await this . GenerateApiManagementServiceTemplate ( baseFilesGenerationDirectory ) ;
@@ -1016,7 +1047,8 @@ await this.GenerateMasterTemplateAsync(
1016
1047
groupTemplateResources : groupTemplate . TypedResources ,
1017
1048
identityProviderTemplateResources : identityProviderTemplate . TypedResources ,
1018
1049
schemaTemplateResources : schemasTempate . TypedResources ,
1019
- openIdConnectProviderResources : openIdConnectProviderTemplate . TypedResources ) ;
1050
+ openIdConnectProviderResources : openIdConnectProviderTemplate . TypedResources ,
1051
+ policyFragmentsResources : policyFragmentTemplate . TypedResources ) ;
1020
1052
}
1021
1053
1022
1054
0 commit comments