From 57afc864ada2a413418abce20943e2ebe1624cfb Mon Sep 17 00:00:00 2001 From: Krzysztof Klimonda Date: Mon, 23 Sep 2024 11:28:01 +0200 Subject: [PATCH] Configure SDK Logging from provider configuration --- assets/pango/logging.go | 1 - cmd/codegen/config.yaml | 11 +++++--- pkg/translate/terraform_provider/template.go | 26 +++++++++++++++++++ .../terraform_provider_file.go | 3 +++ 4 files changed, 36 insertions(+), 5 deletions(-) diff --git a/assets/pango/logging.go b/assets/pango/logging.go index c007f3dd..da69024e 100644 --- a/assets/pango/logging.go +++ b/assets/pango/logging.go @@ -80,7 +80,6 @@ func LogCategoryFromStrings(symbols []string) (LogCategory, error) { } logCategoriesMask |= category - slog.Info("logCategoriesMask", "equal", logCategoriesMask) } return logCategoriesMask, nil } diff --git a/cmd/codegen/config.yaml b/cmd/codegen/config.yaml index e5158e00..8f8f2dc5 100644 --- a/cmd/codegen/config.yaml +++ b/cmd/codegen/config.yaml @@ -90,14 +90,17 @@ terraform_provider_config: description: "(Local inspection mode) The PAN-OS config file to load read in using `file()`" optional: true type: string - sdk_log_level: - description: "Log level configured for the PAN-OS SDK library" - optional: true - type: string sdk_log_categories: description: "Log categories to configure for the PAN-OS SDK library" + env_name: "PANOS_LOG_CATEGORIES" optional: true type: string + sdk_log_level: + description: "SDK logging Level for categories" + env_name: "PANOS_LOG_LEVEL" + type: string + default_value: "INFO" + optional: true panos_version: description: "(Local inspection mode) The version of PAN-OS that exported the config file. This is only used if the root 'config' block does not contain the 'detail-version' attribute. Example: `10.2.3`." optional: true diff --git a/pkg/translate/terraform_provider/template.go b/pkg/translate/terraform_provider/template.go index 5498e0c4..39ece3f3 100644 --- a/pkg/translate/terraform_provider/template.go +++ b/pkg/translate/terraform_provider/template.go @@ -1544,6 +1544,28 @@ func (p *PanosProvider) Configure(ctx context.Context, req provider.ConfigureReq } } else { tflog.Info(ctx, "Configuring client for API mode") + var logCategories sdk.LogCategory + if !config.SdkLogCategories.IsNull() { + categories := strings.Split(config.SdkLogCategories.ValueString(), ",") + var err error + logCategories, err = sdk.LogCategoryFromStrings(categories) + if err != nil { + resp.Diagnostics.AddError("Failed to configure Terraform provider", err.Error()) + return + } + } + + var logLevel slog.Level + if !config.SdkLogLevel.IsNull() { + levelStr := config.SdkLogLevel.ValueString() + err := logLevel.UnmarshalText([]byte(levelStr)) + if err != nil { + resp.Diagnostics.AddError("Failed to configure Terraform provider", fmt.Sprintf("Invalid Log Level: %s", levelStr)) + } + } else { + logLevel = slog.LevelInfo + } + con = &sdk.Client{ Hostname: config.Hostname.ValueString(), Username: config.Username.ValueString(), @@ -1557,6 +1579,10 @@ func (p *PanosProvider) Configure(ctx context.Context, req provider.ConfigureReq SkipVerifyCertificate: config.SkipVerifyCertificate.ValueBool(), AuthFile: config.AuthFile.ValueString(), CheckEnvironment: true, + Logging: sdk.LoggingInfo{ + LogLevel: logLevel, + LogCategories: logCategories, + }, //Agent: fmt.Sprintf("Terraform/%s Provider/scm Version/%s", req.TerraformVersion, p.version), } diff --git a/pkg/translate/terraform_provider/terraform_provider_file.go b/pkg/translate/terraform_provider/terraform_provider_file.go index 30100a1b..3166cf98 100644 --- a/pkg/translate/terraform_provider/terraform_provider_file.go +++ b/pkg/translate/terraform_provider/terraform_provider_file.go @@ -361,6 +361,9 @@ func (g *GenerateTerraformProvider) GenerateTerraformProviderFile(spec *properti func (g *GenerateTerraformProvider) GenerateTerraformProvider(terraformProvider *properties.TerraformProviderFile, spec *properties.Normalization, providerConfig properties.TerraformProvider) error { terraformProvider.ImportManager.AddStandardImport("context", "") + terraformProvider.ImportManager.AddStandardImport("strings", "") + terraformProvider.ImportManager.AddStandardImport("fmt", "") + terraformProvider.ImportManager.AddStandardImport("log/slog", "") terraformProvider.ImportManager.AddSdkImport("github.com/PaloAltoNetworks/pango", "sdk") terraformProvider.ImportManager.AddHashicorpImport("github.com/hashicorp/terraform-plugin-framework/datasource", "") terraformProvider.ImportManager.AddHashicorpImport("github.com/hashicorp/terraform-plugin-framework/function", "")