Skip to content
This repository was archived by the owner on Jun 27, 2021. It is now read-only.

Commit adadbe1

Browse files
psalaberria002DeviaVir
authored andcommitted
Fix gsuite_group_members (#47)
* Fix gsuite_group_members * Set logs to DEBUG * Avoid retries on 404s for isgroup * Fix all retries that rely on 404s * Rename variables
1 parent 0a36ca2 commit adadbe1

File tree

1 file changed

+33
-10
lines changed

1 file changed

+33
-10
lines changed

gsuite/resource_group_members.go

Lines changed: 33 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,19 @@ import (
1010
"google.golang.org/api/googleapi"
1111
)
1212

13+
var schemaGroupMembersEmail = map[string]*schema.Schema{
14+
"email": &schema.Schema{
15+
Type: schema.TypeString,
16+
Required: true,
17+
ForceNew: false,
18+
StateFunc: func(val interface{}) string {
19+
return strings.ToLower(val.(string))
20+
},
21+
},
22+
}
23+
24+
var schemaGroupMembers = mergeSchemas(schemaMember, schemaGroupMembersEmail)
25+
1326
func resourceGroupMembers() *schema.Resource {
1427
return &schema.Resource{
1528
Create: resourceGroupMembersCreate,
@@ -33,10 +46,7 @@ func resourceGroupMembers() *schema.Resource {
3346
Type: schema.TypeSet,
3447
Required: true,
3548
Elem: &schema.Resource{
36-
Schema: schemaMember,
37-
},
38-
DiffSuppressFunc: func(k, old, new string, d *schema.ResourceData) bool {
39-
return strings.ToLower(strings.Trim(old, `"`)) == strings.ToLower(strings.Trim(new, `"`))
49+
Schema: schemaGroupMembers,
4050
},
4151
},
4252
},
@@ -163,13 +173,16 @@ func reconcileMembers(d *schema.ResourceData, cfgMembers, apiMembers []map[strin
163173
}
164174

165175
cfgMap := m(cfgMembers)
176+
log.Println("[DEBUG] Members in cfg: ", cfgMap)
166177
apiMap := m(apiMembers)
178+
log.Println("[DEBUG] Member in API: ", apiMap)
167179

168180
var cfgRole, apiRole string
169181

170182
for k, apiMember := range apiMap {
171183
if cfgMember, ok := cfgMap[k]; !ok {
172184
// The member in the API is not in the config; disable it.
185+
log.Printf("[DEBUG] Member in API not in config. Disabling it: %s", k)
173186
err := deleteMember(k, gid, config)
174187
if err != nil {
175188
return err
@@ -255,29 +268,39 @@ func upsertMember(email, groupEmail, role string, config *Config) error {
255268

256269
// Check if the email address belongs to a user, or to a group
257270
// we need to make sure, because we need to use different logic
258-
var isGroup bool
271+
var isGroup = true
259272
err = retry(func() error {
260273
_, err := config.directory.Groups.Get(email).Do()
274+
if gerr, ok := err.(*googleapi.Error); ok && gerr.Code == 404 {
275+
isGroup = false
276+
log.Printf("[DEBUG] Setting isGroup to false for %s after getting a 404", email)
277+
return nil
278+
}
261279
return err
262280
})
263-
isGroup = true
264-
if err != nil {
265-
isGroup = false
266-
}
267281

268282
if isGroup == true {
269283
if role != "MEMBER" {
270284
return fmt.Errorf("[ERR] Error creating groupMember (%s): nested groups should be role MEMBER", email)
271285
}
272286

287+
var isGroupMember = true
288+
273289
// Grab the group as a directory member of the current group
274290
err = retry(func() error {
275291
_, err := config.directory.Members.Get(groupEmail, email).Do()
292+
293+
if gerr, ok := err.(*googleapi.Error); ok && gerr.Code == 404 {
294+
isGroupMember = false
295+
log.Printf("[DEBUG] Setting isGroupMember to false for %s after getting a 404", email)
296+
return nil
297+
}
298+
276299
return err
277300
})
278301

279302
// Based on the err return, either add as a new member, or update
280-
if err != nil {
303+
if isGroupMember == false {
281304
var createdGroupMember *directory.Member
282305
err = retry(func() error {
283306
createdGroupMember, err = config.directory.Members.Insert(groupEmail, groupMember).Do()

0 commit comments

Comments
 (0)