From dabd8eb6578ef880d54173ae57724dcfc0abc17f Mon Sep 17 00:00:00 2001 From: Thomas Goodsell Date: Wed, 23 Jun 2021 17:39:39 -0500 Subject: [PATCH 01/12] init new alias resource --- gsuite/resource_user_alias.go | 97 +++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 gsuite/resource_user_alias.go diff --git a/gsuite/resource_user_alias.go b/gsuite/resource_user_alias.go new file mode 100644 index 00000000..5577942a --- /dev/null +++ b/gsuite/resource_user_alias.go @@ -0,0 +1,97 @@ +package gsuite + +import ( + "fmt" + "log" + + "github.com/hashicorp/terraform-plugin-sdk/helper/schema" + admin "google.golang.org/api/admin/directory/v1" +) + +func resourceUserAlias() *schema.Resource { + return &schema.Resource{ + Create: nil, + Read: nil, + Update: nil, + Delete: nil, + Importer: nil, + Schema: map[string]*schema.Schema{ + "user_id": { + Type: schema.TypeString, + Description: "ID (userKey) of the user the alias should be applied to.", + Required: true, + ForceNew: true, + }, + "alias": { + Type: schema.TypeString, + Description: "Email alias which should be applied to the user.", + Required: true, + ForceNew: true, + ValidateFunc: validateEmail, + }, + }, + } +} + +func resourceUserAliasCreate(d *schema.ResourceData, meta interface{}) error { + config := meta.(*Config) + + userId := d.Get("user_id").(string) + alias := &admin.Alias{ + Alias: d.Get("alias").(string), + } + resp, err := config.directory.Users.Aliases.Insert(userId, alias).Do() + if err != nil { + return fmt.Errorf("failed to add alias for user (%s): %v", userId, err) + } + d.SetId(resp.Id) + return resourceUserAliasRead(d, meta) +} + +func resourceUserAliasRead(d *schema.ResourceData, meta interface{}) error { + config := meta.(*Config) + + aliasId := d.Get("id").(string) + userId := d.Get("user_id").(string) + expectedAlias := d.Get("alias").(string) + + resp, err := config.directory.Users.Aliases.List(userId).Do() + if err != nil { + return fmt.Errorf("could not retrieve aliases for user (%s): %v", userId, err) + } + + for _, alias := range resp.Aliases { + alias, ok := alias.(admin.Alias) + if ok { + if aliasId == alias.Id && expectedAlias == alias.Alias { + d.SetId(alias.Id) + return nil + } + if expectedAlias == alias.Alias { + log.Println(fmt.Sprintf("[WARN] ID (%s) for alias (%s) did not match configuration (%s), could indicate issue with setting the alias in terraform.", alias.Id, alias.Alias, aliasId)) + d.SetId(alias.Id) + return nil + } + } + log.Println(fmt.Sprintf("[ERROR] alias format in response did not match sdk struct, this indicates a probelm with provider or sdk handling: %v", alias)) + } + + log.Println(fmt.Sprintf("[WARN] no matching alias (%s) found for user (%s).", expectedAlias, userId)) + d.SetId("") + return nil +} + +func resourceUserAliasDelete(d *schema.ResourceData, meta interface{}) error { + config := meta.(*Config) + + userId := d.Get("user_id").(string) + alias := d.Get("alias").(string) + + err := config.directory.Users.Aliases.Delete(userId, alias).Do() + if err != nil { + return fmt.Errorf("unable to remove alias (%s) from user (%s): %v", alias, userId, err) + } + + d.SetId("") + return nil +} From e780c1e7d0660e124d535f542fb77420c88cfebc Mon Sep 17 00:00:00 2001 From: Thomas Goodsell Date: Wed, 23 Jun 2021 18:02:21 -0500 Subject: [PATCH 02/12] add to provider and create example --- examples/alias/basic_example.tf | 17 +++++++++++++++++ gsuite/provider.go | 1 + 2 files changed, 18 insertions(+) create mode 100644 examples/alias/basic_example.tf diff --git a/examples/alias/basic_example.tf b/examples/alias/basic_example.tf new file mode 100644 index 00000000..e0a59d99 --- /dev/null +++ b/examples/alias/basic_example.tf @@ -0,0 +1,17 @@ +resource "gsuite_user" "test" { + name = { + family_name = "TestAcc_replaceWithUuid" + given_name = "Test" + } + + primary_email = "test_replaceWithUuid@domain.ext" + + lifecycle { + ignore = [aliases] + } +} + +resource "gsuite_user_alias" "test" { + user_id = gsuite_user.test.id + alias = "test-alias-replaceWithUuid@domain.ext" +} diff --git a/gsuite/provider.go b/gsuite/provider.go index 9306246a..3e17a2c3 100644 --- a/gsuite/provider.go +++ b/gsuite/provider.go @@ -61,6 +61,7 @@ func Provider() *schema.Provider { "gsuite_group_members": resourceGroupMembers(), "gsuite_group_settings": resourceGroupSettings(), "gsuite_user": resourceUser(), + "gsuite_user_alias": resourceUserAlias(), "gsuite_user_attributes": resourceUserAttributes(), "gsuite_user_schema": resourceUserSchema(), }, From ff856fd59e723c511760b9f59075d8bebeef041b Mon Sep 17 00:00:00 2001 From: Thomas Goodsell Date: Wed, 23 Jun 2021 19:32:22 -0500 Subject: [PATCH 03/12] add functions to resource --- gsuite/resource_user_alias.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gsuite/resource_user_alias.go b/gsuite/resource_user_alias.go index 5577942a..4eb94209 100644 --- a/gsuite/resource_user_alias.go +++ b/gsuite/resource_user_alias.go @@ -10,10 +10,10 @@ import ( func resourceUserAlias() *schema.Resource { return &schema.Resource{ - Create: nil, - Read: nil, + Create: resourceUserAliasCreate, + Read: resourceUserAliasRead, Update: nil, - Delete: nil, + Delete: resourceUserAliasDelete, Importer: nil, Schema: map[string]*schema.Schema{ "user_id": { From 9bdbd08571117c3322b85c1bbdd39b631da33cbd Mon Sep 17 00:00:00 2001 From: Thomas Goodsell Date: Wed, 23 Jun 2021 19:34:23 -0500 Subject: [PATCH 04/12] fix example --- examples/alias/basic_example.tf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/alias/basic_example.tf b/examples/alias/basic_example.tf index e0a59d99..83fa295e 100644 --- a/examples/alias/basic_example.tf +++ b/examples/alias/basic_example.tf @@ -12,6 +12,6 @@ resource "gsuite_user" "test" { } resource "gsuite_user_alias" "test" { - user_id = gsuite_user.test.id + user_id = gsuite_user.test.primary_email alias = "test-alias-replaceWithUuid@domain.ext" } From 0cba75496c8ff2231b33cdf0cff9490552a32e48 Mon Sep 17 00:00:00 2001 From: Thomas Goodsell Date: Wed, 23 Jun 2021 19:49:21 -0500 Subject: [PATCH 05/12] use the alias as the ID since the id in the return object isn't unique --- gsuite/resource_user_alias.go | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/gsuite/resource_user_alias.go b/gsuite/resource_user_alias.go index 4eb94209..1caf7393 100644 --- a/gsuite/resource_user_alias.go +++ b/gsuite/resource_user_alias.go @@ -44,14 +44,13 @@ func resourceUserAliasCreate(d *schema.ResourceData, meta interface{}) error { if err != nil { return fmt.Errorf("failed to add alias for user (%s): %v", userId, err) } - d.SetId(resp.Id) + d.SetId(resp.Alias) return resourceUserAliasRead(d, meta) } func resourceUserAliasRead(d *schema.ResourceData, meta interface{}) error { config := meta.(*Config) - aliasId := d.Get("id").(string) userId := d.Get("user_id").(string) expectedAlias := d.Get("alias").(string) @@ -63,12 +62,7 @@ func resourceUserAliasRead(d *schema.ResourceData, meta interface{}) error { for _, alias := range resp.Aliases { alias, ok := alias.(admin.Alias) if ok { - if aliasId == alias.Id && expectedAlias == alias.Alias { - d.SetId(alias.Id) - return nil - } if expectedAlias == alias.Alias { - log.Println(fmt.Sprintf("[WARN] ID (%s) for alias (%s) did not match configuration (%s), could indicate issue with setting the alias in terraform.", alias.Id, alias.Alias, aliasId)) d.SetId(alias.Id) return nil } From bf7bcf53ff010b256b07062d5af1949bcc6b1b26 Mon Sep 17 00:00:00 2001 From: Thomas Goodsell Date: Wed, 23 Jun 2021 21:12:25 -0500 Subject: [PATCH 06/12] use backoff and alias check function for verificaiton of alias after create --- go.mod | 1 + go.sum | 2 ++ gsuite/resource_user_alias.go | 58 +++++++++++++++++++++++++++-------- 3 files changed, 48 insertions(+), 13 deletions(-) diff --git a/go.mod b/go.mod index e81d61fe..0a32dfe4 100644 --- a/go.mod +++ b/go.mod @@ -4,6 +4,7 @@ go 1.15 require ( cloud.google.com/go v0.79.0 + github.com/cenkalti/backoff/v4 v4.1.1 github.com/golang/protobuf v1.5.2 // indirect github.com/hashicorp/terraform-plugin-sdk v1.13.0 github.com/pkg/errors v0.9.1 diff --git a/go.sum b/go.sum index 1575aa92..56ea57d9 100644 --- a/go.sum +++ b/go.sum @@ -60,6 +60,8 @@ github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1U github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ00z/TKoufEY6K/a0k6AhaJrQKdFe6OfVXsa4= github.com/bgentry/speakeasy v0.1.0 h1:ByYyxL9InA1OWqxJqqp2A5pYHUrCiAL6K3J+LKSsQkY= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/cenkalti/backoff/v4 v4.1.1 h1:G2HAfAmvm/GcKan2oOQpBXOd2tT2G57ZnZGWa1PxPBQ= +github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cheggaaa/pb v1.0.27/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= diff --git a/gsuite/resource_user_alias.go b/gsuite/resource_user_alias.go index 1caf7393..4c6bfd1f 100644 --- a/gsuite/resource_user_alias.go +++ b/gsuite/resource_user_alias.go @@ -3,7 +3,9 @@ package gsuite import ( "fmt" "log" + "time" + "github.com/cenkalti/backoff/v4" "github.com/hashicorp/terraform-plugin-sdk/helper/schema" admin "google.golang.org/api/admin/directory/v1" ) @@ -37,13 +39,34 @@ func resourceUserAliasCreate(d *schema.ResourceData, meta interface{}) error { config := meta.(*Config) userId := d.Get("user_id").(string) + setAlias := d.Get("alias").(string) + alias := &admin.Alias{ - Alias: d.Get("alias").(string), + Alias: setAlias, } resp, err := config.directory.Users.Aliases.Insert(userId, alias).Do() if err != nil { return fmt.Errorf("failed to add alias for user (%s): %v", userId, err) } + + bOff := backoff.NewExponentialBackOff() + bOff.MaxElapsedTime = time.Second * 60 + bOff.InitialInterval = time.Second + + err = backoff.Retry(func() error { + resp, err := config.directory.Users.Aliases.List(userId).Do() + if err != nil { + return backoff.Permanent(fmt.Errorf("could not retrieve aliases for user (%s): %v", userId, err)) + } + + ok, _ := doesAliasExist(resp, setAlias) + if ok { + return nil + } + return fmt.Errorf(fmt.Sprintf("[WARN] no matching alias (%s) found for user (%s).", setAlias, userId)) + + }, bOff) + d.SetId(resp.Alias) return resourceUserAliasRead(d, meta) } @@ -59,19 +82,15 @@ func resourceUserAliasRead(d *schema.ResourceData, meta interface{}) error { return fmt.Errorf("could not retrieve aliases for user (%s): %v", userId, err) } - for _, alias := range resp.Aliases { - alias, ok := alias.(admin.Alias) - if ok { - if expectedAlias == alias.Alias { - d.SetId(alias.Id) - return nil - } - } - log.Println(fmt.Sprintf("[ERROR] alias format in response did not match sdk struct, this indicates a probelm with provider or sdk handling: %v", alias)) + ok, alias := doesAliasExist(resp, expectedAlias) + if !ok { + log.Println(fmt.Sprintf("[WARN] no matching alias (%s) found for user (%s).", expectedAlias, userId)) + d.SetId("") + return nil } - - log.Println(fmt.Sprintf("[WARN] no matching alias (%s) found for user (%s).", expectedAlias, userId)) - d.SetId("") + d.SetId(alias.Alias) + d.Set("user_id", alias.PrimaryEmail) + d.Set("alias", alias.Alias) return nil } @@ -89,3 +108,16 @@ func resourceUserAliasDelete(d *schema.ResourceData, meta interface{}) error { d.SetId("") return nil } + +func doesAliasExist(aliasesResp *admin.Aliases, expectedAlias string) (bool, admin.Alias) { + for _, alias := range aliasesResp.Aliases { + alias, ok := alias.(admin.Alias) + if ok { + if expectedAlias == alias.Alias { + return true, alias + } + } + log.Println(fmt.Sprintf("[ERROR] alias format in response did not match sdk struct, this indicates a probelm with provider or sdk handling: %v", alias)) + } + return false, admin.Alias{} +} From 9eee2cf3f46482357a7e90be6207794dccd7a262 Mon Sep 17 00:00:00 2001 From: Thomas Goodsell Date: Wed, 23 Jun 2021 21:47:59 -0500 Subject: [PATCH 07/12] update check function to use a easier to manage reflect and check --- gsuite/resource_user_alias.go | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/gsuite/resource_user_alias.go b/gsuite/resource_user_alias.go index 4c6bfd1f..1cc7ece3 100644 --- a/gsuite/resource_user_alias.go +++ b/gsuite/resource_user_alias.go @@ -3,6 +3,7 @@ package gsuite import ( "fmt" "log" + "reflect" "time" "github.com/cenkalti/backoff/v4" @@ -50,7 +51,7 @@ func resourceUserAliasCreate(d *schema.ResourceData, meta interface{}) error { } bOff := backoff.NewExponentialBackOff() - bOff.MaxElapsedTime = time.Second * 60 + bOff.MaxElapsedTime = time.Minute * 3 bOff.InitialInterval = time.Second err = backoff.Retry(func() error { @@ -59,7 +60,7 @@ func resourceUserAliasCreate(d *schema.ResourceData, meta interface{}) error { return backoff.Permanent(fmt.Errorf("could not retrieve aliases for user (%s): %v", userId, err)) } - ok, _ := doesAliasExist(resp, setAlias) + _, ok := doesAliasExist(resp, setAlias) if ok { return nil } @@ -82,15 +83,15 @@ func resourceUserAliasRead(d *schema.ResourceData, meta interface{}) error { return fmt.Errorf("could not retrieve aliases for user (%s): %v", userId, err) } - ok, alias := doesAliasExist(resp, expectedAlias) + alias, ok := doesAliasExist(resp, expectedAlias) if !ok { log.Println(fmt.Sprintf("[WARN] no matching alias (%s) found for user (%s).", expectedAlias, userId)) d.SetId("") return nil } - d.SetId(alias.Alias) - d.Set("user_id", alias.PrimaryEmail) - d.Set("alias", alias.Alias) + d.SetId(alias) + d.Set("user_id", userId) + d.Set("alias", alias) return nil } @@ -109,15 +110,19 @@ func resourceUserAliasDelete(d *schema.ResourceData, meta interface{}) error { return nil } -func doesAliasExist(aliasesResp *admin.Aliases, expectedAlias string) (bool, admin.Alias) { - for _, alias := range aliasesResp.Aliases { - alias, ok := alias.(admin.Alias) +func doesAliasExist(aliasesResp *admin.Aliases, expectedAlias string) (string, bool) { + for _, aliasInt := range aliasesResp.Aliases { + alias, ok := aliasInt.(map[string]interface{}) if ok { - if expectedAlias == alias.Alias { - return true, alias + value := alias["alias"].(string) + if expectedAlias == alias["alias"].(string) { + return value, true } } - log.Println(fmt.Sprintf("[ERROR] alias format in response did not match sdk struct, this indicates a probelm with provider or sdk handling: %v", alias)) + if !ok { + log.Println(fmt.Sprintf("[ERROR] alias format in response did not match sdk struct, this indicates a probelm with provider or sdk handling: %v", reflect.TypeOf(aliasInt))) + return "", false + } } - return false, admin.Alias{} + return "", false } From 042556dd0507790afc14b1196705a4e4d524b0e3 Mon Sep 17 00:00:00 2001 From: Thomas Goodsell Date: Wed, 23 Jun 2021 21:50:40 -0500 Subject: [PATCH 08/12] use config timeout for check --- gsuite/resource_user_alias.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gsuite/resource_user_alias.go b/gsuite/resource_user_alias.go index 1cc7ece3..d3f6c178 100644 --- a/gsuite/resource_user_alias.go +++ b/gsuite/resource_user_alias.go @@ -51,7 +51,7 @@ func resourceUserAliasCreate(d *schema.ResourceData, meta interface{}) error { } bOff := backoff.NewExponentialBackOff() - bOff.MaxElapsedTime = time.Minute * 3 + bOff.MaxElapsedTime = time.Duration(config.TimeoutMinutes) * time.Minute bOff.InitialInterval = time.Second err = backoff.Retry(func() error { From 6911e2a3cd0dea9d793034c91fd0355c8165030c Mon Sep 17 00:00:00 2001 From: Thomas Goodsell Date: Wed, 23 Jun 2021 22:23:28 -0500 Subject: [PATCH 09/12] add import function, update ID format to support import --- gsuite/resource_user_alias.go | 39 ++++++++++++++++++++++++++++------- 1 file changed, 32 insertions(+), 7 deletions(-) diff --git a/gsuite/resource_user_alias.go b/gsuite/resource_user_alias.go index d3f6c178..df371bd8 100644 --- a/gsuite/resource_user_alias.go +++ b/gsuite/resource_user_alias.go @@ -4,6 +4,7 @@ import ( "fmt" "log" "reflect" + "strings" "time" "github.com/cenkalti/backoff/v4" @@ -13,11 +14,13 @@ import ( func resourceUserAlias() *schema.Resource { return &schema.Resource{ - Create: resourceUserAliasCreate, - Read: resourceUserAliasRead, - Update: nil, - Delete: resourceUserAliasDelete, - Importer: nil, + Create: resourceUserAliasCreate, + Read: resourceUserAliasRead, + Update: nil, + Delete: resourceUserAliasDelete, + Importer: &schema.ResourceImporter{ + State: resourceUserAliasImport, + }, Schema: map[string]*schema.Schema{ "user_id": { Type: schema.TypeString, @@ -68,7 +71,7 @@ func resourceUserAliasCreate(d *schema.ResourceData, meta interface{}) error { }, bOff) - d.SetId(resp.Alias) + d.SetId(fmt.Sprintf("%s/%s", resp.PrimaryEmail, resp.Alias)) return resourceUserAliasRead(d, meta) } @@ -89,7 +92,7 @@ func resourceUserAliasRead(d *schema.ResourceData, meta interface{}) error { d.SetId("") return nil } - d.SetId(alias) + d.SetId(fmt.Sprintf("%s/%s", userId, alias)) d.Set("user_id", userId) d.Set("alias", alias) return nil @@ -110,6 +113,28 @@ func resourceUserAliasDelete(d *schema.ResourceData, meta interface{}) error { return nil } +func resourceUserAliasImport(d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) { + config := meta.(*Config) + + userId := strings.Split(d.Id(), "/")[0] + expectedAlias := strings.Split(d.Id(), "/")[1] + + resp, err := config.directory.Users.Aliases.List(userId).Do() + if err != nil { + return nil, fmt.Errorf("could not retrieve aliases for user (%s): %v", userId, err) + } + + alias, ok := doesAliasExist(resp, expectedAlias) + if !ok { + return nil, fmt.Errorf("no matching alias (%s) found for user (%s).", expectedAlias, userId) + } + d.SetId(fmt.Sprintf("%s/%s", userId, alias)) + d.Set("user_id", userId) + d.Set("alias", alias) + + return []*schema.ResourceData{d}, nil +} + func doesAliasExist(aliasesResp *admin.Aliases, expectedAlias string) (string, bool) { for _, aliasInt := range aliasesResp.Aliases { alias, ok := aliasInt.(map[string]interface{}) From 205cba773849d7037b3b6cdbb07deac49d492537 Mon Sep 17 00:00:00 2001 From: Thomas Goodsell Date: Wed, 23 Jun 2021 22:32:47 -0500 Subject: [PATCH 10/12] update error messages --- gsuite/resource_user_alias.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/gsuite/resource_user_alias.go b/gsuite/resource_user_alias.go index df371bd8..434740d7 100644 --- a/gsuite/resource_user_alias.go +++ b/gsuite/resource_user_alias.go @@ -50,7 +50,7 @@ func resourceUserAliasCreate(d *schema.ResourceData, meta interface{}) error { } resp, err := config.directory.Users.Aliases.Insert(userId, alias).Do() if err != nil { - return fmt.Errorf("failed to add alias for user (%s): %v", userId, err) + return fmt.Errorf("[ERROR] failed to add alias for user (%s): %v", userId, err) } bOff := backoff.NewExponentialBackOff() @@ -60,7 +60,7 @@ func resourceUserAliasCreate(d *schema.ResourceData, meta interface{}) error { err = backoff.Retry(func() error { resp, err := config.directory.Users.Aliases.List(userId).Do() if err != nil { - return backoff.Permanent(fmt.Errorf("could not retrieve aliases for user (%s): %v", userId, err)) + return backoff.Permanent(fmt.Errorf("[ERROR] could not retrieve aliases for user (%s): %v", userId, err)) } _, ok := doesAliasExist(resp, setAlias) @@ -83,7 +83,7 @@ func resourceUserAliasRead(d *schema.ResourceData, meta interface{}) error { resp, err := config.directory.Users.Aliases.List(userId).Do() if err != nil { - return fmt.Errorf("could not retrieve aliases for user (%s): %v", userId, err) + return fmt.Errorf("[ERROR] could not retrieve aliases for user (%s): %v", userId, err) } alias, ok := doesAliasExist(resp, expectedAlias) @@ -106,7 +106,7 @@ func resourceUserAliasDelete(d *schema.ResourceData, meta interface{}) error { err := config.directory.Users.Aliases.Delete(userId, alias).Do() if err != nil { - return fmt.Errorf("unable to remove alias (%s) from user (%s): %v", alias, userId, err) + return fmt.Errorf("[ERROR] unable to remove alias (%s) from user (%s): %v", alias, userId, err) } d.SetId("") @@ -121,12 +121,12 @@ func resourceUserAliasImport(d *schema.ResourceData, meta interface{}) ([]*schem resp, err := config.directory.Users.Aliases.List(userId).Do() if err != nil { - return nil, fmt.Errorf("could not retrieve aliases for user (%s): %v", userId, err) + return nil, fmt.Errorf("[ERROR] could not retrieve aliases for user (%s): %v", userId, err) } alias, ok := doesAliasExist(resp, expectedAlias) if !ok { - return nil, fmt.Errorf("no matching alias (%s) found for user (%s).", expectedAlias, userId) + return nil, fmt.Errorf("[ERROR] no matching alias (%s) found for user (%s).", expectedAlias, userId) } d.SetId(fmt.Sprintf("%s/%s", userId, alias)) d.Set("user_id", userId) From 36967fe92b2d886f8d69fca81347eab110a97594 Mon Sep 17 00:00:00 2001 From: Thomas Goodsell Date: Wed, 23 Jun 2021 22:52:00 -0500 Subject: [PATCH 11/12] add docs page --- website/docs/r/user_alias.md | 39 ++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 website/docs/r/user_alias.md diff --git a/website/docs/r/user_alias.md b/website/docs/r/user_alias.md new file mode 100644 index 00000000..1a1a4ccf --- /dev/null +++ b/website/docs/r/user_alias.md @@ -0,0 +1,39 @@ +--- +layout: "gsuite" +page_title: "G Suite: gsuite_alias" +sidebar_current: "docs-gsuite-resource-user-alias" +description: |- + Managing a G Suite User Alias. +--- + +# gsuite\_user\_alias + +Provides a resource for creating and managing an email alias for a GSuite user account. + +## Example Usage + +```hcl +resource "gsuite_user_alias" "test" { + user_id = "test-user-replaceWithUuid@domain.ext" + alias = "test-alias-replaceWithUuid@domain.ext" +} +``` + +## Argument Reference + +* `user_id` (Required) Primary email (userKey) of the user who will have the alias applied to them. +* `alias` (Required) Email alias to be applied to the user. + + +## Attribute Reference + +N/A apart from the included arguments + +## Import + +An alias can be imported by passing the ID format of "/" + +For example: +``` +terraform import gsuite_user_alias.test "test-user@domain.ext/test-alias@domain.ext" +``` From f32ce83da5936686f7702412e5330f32c7365fb2 Mon Sep 17 00:00:00 2001 From: Thomas Goodsell Date: Wed, 23 Jun 2021 23:52:21 -0500 Subject: [PATCH 12/12] fix docs --- website/docs/r/user_alias.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/docs/r/user_alias.md b/website/docs/r/user_alias.md index 1a1a4ccf..b9399bc8 100644 --- a/website/docs/r/user_alias.md +++ b/website/docs/r/user_alias.md @@ -6,7 +6,7 @@ description: |- Managing a G Suite User Alias. --- -# gsuite\_user\_alias +# gsuite_user_alias Provides a resource for creating and managing an email alias for a GSuite user account. @@ -31,7 +31,7 @@ N/A apart from the included arguments ## Import -An alias can be imported by passing the ID format of "/" +An alias can be imported by passing the ID format of "{user_id}/{alias}" For example: ```