2424using Microsoft . Azure . Management . ApiManagement . ArmTemplates . Common . Templates . NamedValues ;
2525using Microsoft . Azure . Management . ApiManagement . ArmTemplates . Common . Templates . OpenIdConnectProviders ;
2626using Microsoft . Azure . Management . ApiManagement . ArmTemplates . Common . Templates . Policy ;
27+ using Microsoft . Azure . Management . ApiManagement . ArmTemplates . Common . Templates . PolicyFragments ;
2728using Microsoft . Azure . Management . ApiManagement . ArmTemplates . Common . Templates . ProductApis ;
2829using Microsoft . Azure . Management . ApiManagement . ArmTemplates . Common . Templates . Products ;
2930using Microsoft . Azure . Management . ApiManagement . ArmTemplates . Common . Templates . Schemas ;
@@ -68,6 +69,7 @@ public class ExtractorExecutor
6869 readonly IApiManagementServiceExtractor apiManagementServiceExtractor ;
6970 readonly ISchemaExtractor schemaExtractor ;
7071 readonly IOpenIdConnectProviderExtractor openIdConnectProviderExtractor ;
72+ readonly IPolicyFragmentsExtractor policyFragmentsExtractor ;
7173
7274 public ExtractorExecutor (
7375 ILogger < ExtractorExecutor > logger ,
@@ -92,7 +94,8 @@ public ExtractorExecutor(
9294 IIdentityProviderExtractor identityProviderExtractor ,
9395 IApiManagementServiceExtractor apiManagementServiceExtractor ,
9496 ISchemaExtractor schemaExtractor ,
95- IOpenIdConnectProviderExtractor openIdConnectProviderExtractor )
97+ IOpenIdConnectProviderExtractor openIdConnectProviderExtractor ,
98+ IPolicyFragmentsExtractor policyFragmentsExtractor )
9699 {
97100 this . logger = logger ;
98101 this . apisClient = apisClient ;
@@ -117,6 +120,7 @@ public ExtractorExecutor(
117120 this . apiManagementServiceExtractor = apiManagementServiceExtractor ;
118121 this . schemaExtractor = schemaExtractor ;
119122 this . openIdConnectProviderExtractor = openIdConnectProviderExtractor ;
123+ this . policyFragmentsExtractor = policyFragmentsExtractor ;
120124 }
121125
122126 /// <summary>
@@ -146,7 +150,8 @@ public static ExtractorExecutor BuildExtractorExecutor(
146150 IIdentityProviderExtractor identityProviderExtractor = null ,
147151 IApiManagementServiceExtractor apiManagementServiceExtractor = null ,
148152 ISchemaExtractor schemaExtractor = null ,
149- IOpenIdConnectProviderExtractor openIdConnectProviderExtractor = null )
153+ IOpenIdConnectProviderExtractor openIdConnectProviderExtractor = null ,
154+ IPolicyFragmentsExtractor policyFragmentsExtractor = null )
150155 => new ExtractorExecutor (
151156 logger ,
152157 apisClient ,
@@ -170,7 +175,8 @@ public static ExtractorExecutor BuildExtractorExecutor(
170175 identityProviderExtractor ,
171176 apiManagementServiceExtractor ,
172177 schemaExtractor ,
173- openIdConnectProviderExtractor ) ;
178+ openIdConnectProviderExtractor ,
179+ policyFragmentsExtractor ) ;
174180
175181 public void SetExtractorParameters ( ExtractorParameters extractorParameters )
176182 {
@@ -469,7 +475,8 @@ public async Task<Template<MasterTemplateResources>> GenerateMasterTemplateAsync
469475 GroupTemplateResources groupTemplateResources = null ,
470476 IdentityProviderResources identityProviderTemplateResources = null ,
471477 SchemaTemplateResources schemaTemplateResources = null ,
472- OpenIdConnectProviderResources openIdConnectProviderResources = null )
478+ OpenIdConnectProviderResources openIdConnectProviderResources = null ,
479+ PolicyFragmentsResources policyFragmentsResources = null )
473480 {
474481 if ( string . IsNullOrEmpty ( this . extractorParameters . LinkedTemplatesBaseUrl ) )
475482 {
@@ -483,7 +490,7 @@ public async Task<Template<MasterTemplateResources>> GenerateMasterTemplateAsync
483490 this . extractorParameters , apiTemplateResources , policyTemplateResources , apiVersionSetTemplateResources ,
484491 productsTemplateResources , productApisTemplateResources , apiTagsTemplateResources , loggersTemplateResources ,
485492 backendsTemplateResources , authorizationServersTemplateResources , namedValuesTemplateResources , tagTemplateResources ,
486- groupTemplateResources , identityProviderTemplateResources , schemaTemplateResources , openIdConnectProviderResources ) ;
493+ groupTemplateResources , identityProviderTemplateResources , schemaTemplateResources , openIdConnectProviderResources , policyFragmentsResources ) ;
487494
488495 if ( masterTemplate ? . HasResources ( ) == true )
489496 {
@@ -813,6 +820,29 @@ await FileWriter.SaveAsJsonAsync(
813820 return schemasTemplate ;
814821 }
815822
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+
816846 /// <summary>
817847 /// Generates split api templates / folders for each api in this sourceApim
818848 /// </summary>
@@ -995,6 +1025,7 @@ async Task GenerateTemplates(
9951025 var identityProviderTemplate = await this . GenerateIdentityProviderTemplateAsync ( baseFilesGenerationDirectory ) ;
9961026 var openIdConnectProviderTemplate = await this . GenerateOpenIdConnectProviderTemplateAsync ( baseFilesGenerationDirectory ) ;
9971027 var schemasTempate = await this . GenerateSchemasTemplateAsync ( baseFilesGenerationDirectory ) ;
1028+ var policyFragmentTemplate = await this . GeneratePolicyFragmentsTemplateAsync ( apiTemplate . TypedResources . GetAllPolicies ( ) , baseFilesGenerationDirectory ) ;
9981029 await this . GenerateGatewayTemplateAsync ( singleApiName , baseFilesGenerationDirectory ) ;
9991030 await this . GenerateGatewayApiTemplateAsync ( singleApiName , multipleApiNames , baseFilesGenerationDirectory ) ;
10001031 await this . GenerateApiManagementServiceTemplate ( baseFilesGenerationDirectory ) ;
@@ -1016,7 +1047,8 @@ await this.GenerateMasterTemplateAsync(
10161047 groupTemplateResources : groupTemplate . TypedResources ,
10171048 identityProviderTemplateResources : identityProviderTemplate . TypedResources ,
10181049 schemaTemplateResources : schemasTempate . TypedResources ,
1019- openIdConnectProviderResources : openIdConnectProviderTemplate . TypedResources ) ;
1050+ openIdConnectProviderResources : openIdConnectProviderTemplate . TypedResources ,
1051+ policyFragmentsResources : policyFragmentTemplate . TypedResources ) ;
10201052 }
10211053
10221054
0 commit comments