/// <summary> /// Allows to build ExtractorExecutor with only desired speficic extractors passed /// </summary> /// <returns>new ExtractorExecutor instance</returns> public static ExtractorExecutor BuildExtractorExecutor( ILogger <ExtractorExecutor> logger, IApisClient apisClient = null, IApiExtractor apiExtractor = null, IApiVersionSetExtractor apiVersionSetExtractor = null, IAuthorizationServerExtractor authorizationServerExtractor = null, IBackendExtractor backendExtractor = null, ILoggerExtractor loggerExtractor = null, IMasterTemplateExtractor masterTemplateExtractor = null, IPolicyExtractor policyExtractor = null, IProductApisExtractor productApisExtractor = null, IProductExtractor productExtractor = null, IPropertyExtractor propertyExtractor = null, ITagApiExtractor apiTagExtractor = null, ITagExtractor tagExtractor = null, IGroupExtractor groupExtractor = null, IApiRevisionExtractor apiRevisionExtractor = null) => new ExtractorExecutor( logger, apisClient, apiExtractor, apiVersionSetExtractor, authorizationServerExtractor, backendExtractor, loggerExtractor, masterTemplateExtractor, policyExtractor, productApisExtractor, productExtractor, propertyExtractor, apiTagExtractor, tagExtractor, groupExtractor, apiRevisionExtractor);
public ExtractorExecutor( ILogger <ExtractorExecutor> logger, IApisClient apisClient, IApiExtractor apiExtractor, IApiVersionSetExtractor apiVersionSetExtractor, IAuthorizationServerExtractor authorizationServerExtractor, IBackendExtractor backendExtractor, ILoggerExtractor loggerExtractor, IMasterTemplateExtractor masterTemplateExtractor, IPolicyExtractor policyExtractor, IProductApisExtractor productApisExtractor, IProductExtractor productExtractor, IPropertyExtractor propertyExtractor, ITagApiExtractor apiTagExtractor, ITagExtractor tagExtractor, IGroupExtractor groupExtractor, IApiRevisionExtractor apiRevisionExtractor) { this.logger = logger; this.apisClient = apisClient; this.apiExtractor = apiExtractor; this.apiVersionSetExtractor = apiVersionSetExtractor; this.authorizationServerExtractor = authorizationServerExtractor; this.backendExtractor = backendExtractor; this.loggerExtractor = loggerExtractor; this.masterTemplateExtractor = masterTemplateExtractor; this.policyExtractor = policyExtractor; this.productApisExtractor = productApisExtractor; this.propertyExtractor = propertyExtractor; this.productExtractor = productExtractor; this.apiTagExtractor = apiTagExtractor; this.tagExtractor = tagExtractor; this.groupExtractor = groupExtractor; this.apiRevisionExtractor = apiRevisionExtractor; }
public NamedValuesExtractor( ILogger <NamedValuesExtractor> logger, ITemplateBuilder templateBuilder, INamedValuesClient namedValuesClient, IPolicyExtractor policyExtractor, IBackendExtractor backendExtractor) { this.logger = logger; this.templateBuilder = templateBuilder; this.namedValuesClient = namedValuesClient; this.backendExtractor = backendExtractor; this.policyExtractor = policyExtractor; }
public async Task <Template> GenerateNamedValuesTemplateAsync(string singleApiName, List <TemplateResource> apiTemplateResources, ExtractorParameters extractorParameters, IBackendExtractor backendExtractor, List <TemplateResource> loggerTemplateResources) { Template armTemplate = this.templateBuilder.GenerateTemplateWithApimServiceNameProperty().Build(); if (extractorParameters.ParameterizeNamedValue) { TemplateParameterProperties namedValueParameterProperties = new TemplateParameterProperties() { type = "object" }; armTemplate.Parameters.Add(ParameterNames.NamedValues, namedValueParameterProperties); } if (extractorParameters.ParamNamedValuesKeyVaultSecrets) { TemplateParameterProperties keyVaultNamedValueParameterProperties = new TemplateParameterProperties() { type = "object" }; armTemplate.Parameters.Add(ParameterNames.NamedValueKeyVaultSecrets, keyVaultNamedValueParameterProperties); } if (extractorParameters.NotIncludeNamedValue == true) { Console.WriteLine("------------------------------------------"); Console.WriteLine("Skipping extracting named values from service"); return(armTemplate); } Console.WriteLine("------------------------------------------"); Console.WriteLine("Extracting named values from service"); List <TemplateResource> templateResources = new List <TemplateResource>(); // pull all named values (properties) for service string[] properties = await this.GetPropertiesAsync(extractorParameters.SourceApimName, extractorParameters.ResourceGroup); // isolate api and operation policy resources in the case of a single api extraction, as they may reference named value var policyResources = apiTemplateResources.Where(resource => resource.Type == ResourceTypeConstants.APIPolicy || resource.Type == ResourceTypeConstants.APIOperationPolicy || resource.Type == ResourceTypeConstants.ProductPolicy); foreach (var extractedProperty in properties) { JToken oProperty = JObject.Parse(extractedProperty); string propertyName = ((JValue)oProperty["name"]).Value.ToString(); string fullPropertyResource = await this.GetPropertyDetailsAsync(extractorParameters.SourceApimName, extractorParameters.ResourceGroup, propertyName); // convert returned named value to template resource class PropertyTemplateResource propertyTemplateResource = fullPropertyResource.Deserialize <PropertyTemplateResource>(); propertyTemplateResource.Name = $"[concat(parameters('{ParameterNames.ApimServiceName}'), '/{propertyName}')]"; propertyTemplateResource.Type = ResourceTypeConstants.Property; propertyTemplateResource.ApiVersion = GlobalConstants.ApiVersion; propertyTemplateResource.Scale = null; if (extractorParameters.ParameterizeNamedValue) { propertyTemplateResource.Properties.value = $"[parameters('{ParameterNames.NamedValues}').{ParameterNamingHelper.GenerateValidParameterName(propertyName, ParameterPrefix.Property)}]"; } //Hide the value field if it is a keyvault named value if (propertyTemplateResource.Properties.keyVault != null) { propertyTemplateResource.Properties.value = null; } if (propertyTemplateResource.Properties.keyVault != null && extractorParameters.ParamNamedValuesKeyVaultSecrets) { propertyTemplateResource.Properties.keyVault.secretIdentifier = $"[parameters('{ParameterNames.NamedValueKeyVaultSecrets}').{ParameterNamingHelper.GenerateValidParameterName(propertyName, ParameterPrefix.Property)}]"; } if (singleApiName == null) { // if the user is executing a full extraction, extract all the loggers Console.WriteLine("'{0}' Named value found", propertyName); templateResources.Add(propertyTemplateResource); } else { // if the user is executing a single api, extract all the named values used in the template resources bool foundInPolicy = this.DoesPolicyReferenceNamedValue(extractorParameters, policyResources, propertyName, propertyTemplateResource); bool foundInBackEnd = await backendExtractor.IsNamedValueUsedInBackends(extractorParameters.SourceApimName, extractorParameters.ResourceGroup, singleApiName, apiTemplateResources, extractorParameters, propertyName, propertyTemplateResource.Properties.displayName); bool foundInLogger = this.DoesLoggerReferenceNamedValue(loggerTemplateResources, propertyName, propertyTemplateResource); // check if named value is referenced in a backend if (foundInPolicy || foundInBackEnd || foundInLogger) { // named value was used in policy, extract it Console.WriteLine("'{0}' Named value found", propertyName); templateResources.Add(propertyTemplateResource); } } } armTemplate.Resources = templateResources.ToArray(); return(armTemplate); }