From 08e565ae1a7013b3baf1e8899b9af61482f9c10f Mon Sep 17 00:00:00 2001 From: Yichun Ma Date: Wed, 1 Feb 2023 15:09:29 +0800 Subject: [PATCH] `azurerm_log_analytics_workspace` - add state migration for sdk update --- .../log_analytics_workspace_resource.go | 3 +- .../migration/workspace_v2_to_v3.go | 119 ++++++++++++++++++ 2 files changed, 121 insertions(+), 1 deletion(-) create mode 100644 internal/services/loganalytics/migration/workspace_v2_to_v3.go diff --git a/internal/services/loganalytics/log_analytics_workspace_resource.go b/internal/services/loganalytics/log_analytics_workspace_resource.go index fbdc1e0df18c8..0a5a505809f0e 100644 --- a/internal/services/loganalytics/log_analytics_workspace_resource.go +++ b/internal/services/loganalytics/log_analytics_workspace_resource.go @@ -38,10 +38,11 @@ func resourceLogAnalyticsWorkspace() *pluginsdk.Resource { return err }), - SchemaVersion: 2, + SchemaVersion: 3, StateUpgraders: pluginsdk.StateUpgrades(map[int]pluginsdk.StateUpgrade{ 0: migration.WorkspaceV0ToV1{}, 1: migration.WorkspaceV1ToV2{}, + 2: migration.WorkspaceV2ToV3{}, }), Timeouts: &pluginsdk.ResourceTimeout{ diff --git a/internal/services/loganalytics/migration/workspace_v2_to_v3.go b/internal/services/loganalytics/migration/workspace_v2_to_v3.go new file mode 100644 index 0000000000000..0b294838314a6 --- /dev/null +++ b/internal/services/loganalytics/migration/workspace_v2_to_v3.go @@ -0,0 +1,119 @@ +package migration + +import ( + "context" + "log" + + "github.com/hashicorp/go-azure-sdk/resource-manager/operationalinsights/2020-08-01/workspaces" + "github.com/hashicorp/terraform-provider-azurerm/internal/clients" + "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" +) + +var _ pluginsdk.StateUpgrade = WorkspaceV2ToV3{} + +type WorkspaceV2ToV3 struct{} + +func (WorkspaceV2ToV3) Schema() map[string]*pluginsdk.Schema { + return map[string]*pluginsdk.Schema{ + "allow_resource_only_permissions": { + Optional: true, + Type: pluginsdk.TypeBool, + }, + + "cmk_for_query_forced": { + Optional: true, + Type: pluginsdk.TypeBool, + }, + + "daily_quota_gb": { + Optional: true, + Type: pluginsdk.TypeFloat, + }, + + "internet_ingestion_enabled": { + Optional: true, + Type: pluginsdk.TypeBool, + }, + + "internet_query_enabled": { + Optional: true, + Type: pluginsdk.TypeBool, + }, + + "local_authentication_disabled": { + Optional: true, + Type: pluginsdk.TypeBool, + }, + + "location": { + ForceNew: true, + Required: true, + Type: pluginsdk.TypeString, + }, + + "name": { + ForceNew: true, + Required: true, + Type: pluginsdk.TypeString, + }, + + "primary_shared_key": { + Computed: true, + Type: pluginsdk.TypeString, + }, + + "reservation_capacity_in_gb_per_day": { + Computed: true, + Optional: true, + Type: pluginsdk.TypeInt, + }, + + "resource_group_name": { + ForceNew: true, + Required: true, + Type: pluginsdk.TypeString, + }, + + "retention_in_days": { + Computed: true, + Optional: true, + Type: pluginsdk.TypeInt, + }, + + "secondary_shared_key": { + Computed: true, + Type: pluginsdk.TypeString, + }, + + "sku": { + Computed: true, + Optional: true, + Type: pluginsdk.TypeString, + }, + + "tags": { + Elem: &pluginsdk.Schema{Type: pluginsdk.TypeString}, + Optional: true, + Type: pluginsdk.TypeMap, + }, + + "workspace_id": { + Computed: true, + Type: pluginsdk.TypeString, + }, + } +} + +func (WorkspaceV2ToV3) UpgradeFunc() pluginsdk.StateUpgraderFunc { + return func(ctx context.Context, rawState map[string]interface{}, meta interface{}) (map[string]interface{}, error) { + subscriptionId := meta.(*clients.Client).Account.SubscriptionId + + log.Printf("[DEBUG] Migrating IDs to correct casing for Log Analytics Workspace") + name := rawState["name"].(string) + resourceGroup := rawState["resource_group_name"].(string) + id := workspaces.NewWorkspaceID(subscriptionId, resourceGroup, name) + + rawState["id"] = id.ID() + return rawState, nil + } +}