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..fc0d375e878d --- /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/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) { + 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 +} 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),