From 4304165037fd5546080016496c8e357f8b76e78f Mon Sep 17 00:00:00 2001 From: Vladimir Lazarenko Date: Fri, 15 Jan 2021 02:53:26 +0100 Subject: [PATCH 1/3] user_assigned_identity: add state migration for ID casing --- .../user_assigned_identity_V0_to_V1.go | 62 +++++++++++++++++++ .../msi/user_assigned_identity_resource.go | 6 ++ 2 files changed, 68 insertions(+) create mode 100644 azurerm/internal/services/msi/migration/user_assigned_identity_V0_to_V1.go diff --git a/azurerm/internal/services/msi/migration/user_assigned_identity_V0_to_V1.go b/azurerm/internal/services/msi/migration/user_assigned_identity_V0_to_V1.go new file mode 100644 index 000000000000..b1d2b8fb799b --- /dev/null +++ b/azurerm/internal/services/msi/migration/user_assigned_identity_V0_to_V1.go @@ -0,0 +1,62 @@ +package migration + +import ( + "log" + + "github.com/hashicorp/terraform-plugin-sdk/helper/validation" + "github.com/terraform-providers/terraform-provider-azurerm/azurerm/helpers/azure" + "github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/tags" + + "github.com/hashicorp/terraform-plugin-sdk/helper/schema" + "github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/clients" + "github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/services/msi/parse" +) + +func UserAssignedIdentityV0ToV1() schema.StateUpgrader { + return schema.StateUpgrader{ + Version: 0, + Type: userAssignedIdentityV0Schema().CoreConfigSchema().ImpliedType(), + Upgrade: userAssignedIdentityUpgradeV0ToV1, + } +} + +func userAssignedIdentityV0Schema() *schema.Resource { + return &schema.Resource{ + Schema: map[string]*schema.Schema{ + "name": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + ValidateFunc: validation.StringLenBetween(3, 128), + }, + + "resource_group_name": azure.SchemaResourceGroupName(), + + "location": azure.SchemaLocation(), + + "tags": tags.Schema(), + + "principal_id": { + Type: schema.TypeString, + Computed: true, + }, + + "client_id": { + Type: schema.TypeString, + Computed: true, + }, + }, + } +} + +func userAssignedIdentityUpgradeV0ToV1(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 User Assigned Idenitity") + name := rawState["name"].(string) + resourceGroup := rawState["resource_group_name"].(string) + id := parse.NewUserAssignedIdentityID(subscriptionId, resourceGroup, name) + + rawState["id"] = id.ID() + return rawState, nil +} diff --git a/azurerm/internal/services/msi/user_assigned_identity_resource.go b/azurerm/internal/services/msi/user_assigned_identity_resource.go index 1af599b03d97..69640472eb91 100644 --- a/azurerm/internal/services/msi/user_assigned_identity_resource.go +++ b/azurerm/internal/services/msi/user_assigned_identity_resource.go @@ -12,6 +12,7 @@ import ( "github.com/terraform-providers/terraform-provider-azurerm/azurerm/helpers/tf" "github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/clients" "github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/location" + "github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/services/msi/migration" "github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/services/msi/parse" "github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/tags" azSchema "github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/tf/schema" @@ -30,6 +31,11 @@ func resourceArmUserAssignedIdentity() *schema.Resource { return err }), + SchemaVersion: 1, + StateUpgraders: []schema.StateUpgrader{ + migration.UserAssignedIdentityV0ToV1(), + }, + Timeouts: &schema.ResourceTimeout{ Create: schema.DefaultTimeout(30 * time.Minute), Read: schema.DefaultTimeout(5 * time.Minute), From 10a727596ac8392fd6bf3fd42dce21905536069a Mon Sep 17 00:00:00 2001 From: Vladimir Lazarenko Date: Mon, 18 Jan 2021 13:20:51 +0100 Subject: [PATCH 2/3] Update azurerm/internal/services/msi/migration/user_assigned_identity_V0_to_V1.go Co-authored-by: Tom Harvey --- .../msi/migration/user_assigned_identity_V0_to_V1.go | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/azurerm/internal/services/msi/migration/user_assigned_identity_V0_to_V1.go b/azurerm/internal/services/msi/migration/user_assigned_identity_V0_to_V1.go index b1d2b8fb799b..0d0c45df4b6e 100644 --- a/azurerm/internal/services/msi/migration/user_assigned_identity_V0_to_V1.go +++ b/azurerm/internal/services/msi/migration/user_assigned_identity_V0_to_V1.go @@ -50,7 +50,16 @@ func userAssignedIdentityV0Schema() *schema.Resource { } func userAssignedIdentityUpgradeV0ToV1(rawState map[string]interface{}, meta interface{}) (map[string]interface{}, error) { - subscriptionId := meta.(*clients.Client).Account.SubscriptionId + oldId := rawState["id"].(string) + id, err := parse.UserAssignedIdentityID(oldId) + if err != nil { + return rawState, err + } + + newId := id.ID() + log.Printf("Updating `id` from %q to %q", oldId, newId) + rawState["id"] = newId + return rawState, nil log.Printf("[DEBUG] Migrating IDs to correct casing for User Assigned Idenitity") name := rawState["name"].(string) From caed61f80e250f1c01709c0fcbddb88a9fb7f469 Mon Sep 17 00:00:00 2001 From: Vladimir Lazarenko Date: Mon, 18 Jan 2021 13:36:11 +0100 Subject: [PATCH 3/3] Rebase, fmt --- .../msi/migration/user_assigned_identity_V0_to_V1.go | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/azurerm/internal/services/msi/migration/user_assigned_identity_V0_to_V1.go b/azurerm/internal/services/msi/migration/user_assigned_identity_V0_to_V1.go index 0d0c45df4b6e..fc0d375e878d 100644 --- a/azurerm/internal/services/msi/migration/user_assigned_identity_V0_to_V1.go +++ b/azurerm/internal/services/msi/migration/user_assigned_identity_V0_to_V1.go @@ -8,7 +8,6 @@ import ( "github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/tags" "github.com/hashicorp/terraform-plugin-sdk/helper/schema" - "github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/clients" "github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/services/msi/parse" ) @@ -55,17 +54,9 @@ func userAssignedIdentityUpgradeV0ToV1(rawState map[string]interface{}, meta int if err != nil { return rawState, err } - + newId := id.ID() log.Printf("Updating `id` from %q to %q", oldId, newId) rawState["id"] = newId return rawState, nil - - log.Printf("[DEBUG] Migrating IDs to correct casing for User Assigned Idenitity") - name := rawState["name"].(string) - resourceGroup := rawState["resource_group_name"].(string) - id := parse.NewUserAssignedIdentityID(subscriptionId, resourceGroup, name) - - rawState["id"] = id.ID() - return rawState, nil }