From cd0545204c5c89f7674310d2a2a4a2e8dd990387 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Torres=20Cogollo?= Date: Thu, 2 Oct 2025 12:11:30 +0200 Subject: [PATCH] feat: Support for importing postgresql_grant_role resources --- postgresql/resource_postgresql_grant_role.go | 21 +++++++++++++++++++ .../r/postgresql_grant_role.html.markdown | 14 +++++++++++++ 2 files changed, 35 insertions(+) diff --git a/postgresql/resource_postgresql_grant_role.go b/postgresql/resource_postgresql_grant_role.go index d854d775..a6215349 100644 --- a/postgresql/resource_postgresql_grant_role.go +++ b/postgresql/resource_postgresql_grant_role.go @@ -1,6 +1,7 @@ package postgresql import ( + "context" "database/sql" "fmt" "log" @@ -31,6 +32,9 @@ func resourcePostgreSQLGrantRole() *schema.Resource { Create: PGResourceFunc(resourcePostgreSQLGrantRoleCreate), Read: PGResourceFunc(resourcePostgreSQLGrantRoleRead), Delete: PGResourceFunc(resourcePostgreSQLGrantRoleDelete), + Importer: &schema.ResourceImporter{ + StateContext: resourcePostgreSQLGrantRoleImport, + }, Schema: map[string]*schema.Schema{ "role": { @@ -56,6 +60,23 @@ func resourcePostgreSQLGrantRole() *schema.Resource { } } +func resourcePostgreSQLGrantRoleImport(ctx context.Context, d *schema.ResourceData, m interface{}) ([]*schema.ResourceData, error) { + importId := d.Id() + parts := strings.Split(importId, "@") + + if len(parts) != 2 { + return nil, fmt.Errorf("invalid import id. Expected format: @. Got %s", importId) + } + role := parts[0] + d.Set("role", role) + grantRole := parts[1] + d.Set("grant_role", grantRole) + + d.SetId(generateGrantRoleID(d)) // Import ID is the same as the generated ID for backwards compatibility + + return []*schema.ResourceData{d}, nil +} + func resourcePostgreSQLGrantRoleRead(db *DBConnection, d *schema.ResourceData) error { if !db.featureSupported(featurePrivileges) { return fmt.Errorf( diff --git a/website/docs/r/postgresql_grant_role.html.markdown b/website/docs/r/postgresql_grant_role.html.markdown index 13fc8c65..c8ca1766 100644 --- a/website/docs/r/postgresql_grant_role.html.markdown +++ b/website/docs/r/postgresql_grant_role.html.markdown @@ -47,3 +47,17 @@ resource "postgresql_grant_role" "bob_admin" { * `role` - (Required) The name of the role that is granted a new membership. * `grant_role` - (Required) The name of the role that is added to `role`. * `with_admin_option` - (Optional) Giving ability to grant membership to others or not for `role`. (Default: false) + +## Import + +`postgresql_grant_role` supports importing resources following the format: + +``` +@ +``` + +For example: + +```bash +terraform import postgresql_grant_role.grant_role demo_role@demo_grant_role +```