Skip to content

Commit 5bfee62

Browse files
author
Matt Calhoun
authored
fix bug (#50)
1 parent c237c5b commit 5bfee62

File tree

1 file changed

+44
-17
lines changed

1 file changed

+44
-17
lines changed

internal/service/macie2/resource_macie2_organization_settings.go

Lines changed: 44 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ package macie2
22

33
import (
44
"fmt"
5+
"log"
6+
"strings"
57

68
"github.com/aws/aws-sdk-go/aws"
79
"github.com/aws/aws-sdk-go/service/macie2"
@@ -45,6 +47,20 @@ func getMemberAccounts(d *schema.ResourceData) []string {
4547
return memberAccounts
4648
}
4749

50+
func getMemberAccountsFromAws(conn *macie2.Macie2) ([]string, error) {
51+
memberAccounts, err := conn.ListMembers(&macie2.ListMembersInput{})
52+
if err != nil {
53+
return nil, fmt.Errorf("error reading macie2 organization members: %s", err)
54+
}
55+
56+
var memberAccountIDs []string
57+
58+
for i := range memberAccounts.Members {
59+
memberAccountIDs = append(memberAccountIDs, *memberAccounts.Members[i].AccountId)
60+
}
61+
return memberAccountIDs, nil
62+
}
63+
4864
func resourceAwsMacie2OrganizationSettingsCreate(d *schema.ResourceData, meta interface{}) error {
4965
conn := meta.(*conns.AWSClient).Macie2Conn
5066
memberAccounts := getMemberAccounts(d)
@@ -59,30 +75,37 @@ func resourceAwsMacie2OrganizationSettingsCreate(d *schema.ResourceData, meta in
5975
}
6076

6177
func resourceAwsMacie2OrganizationSettingsRead(d *schema.ResourceData, meta interface{}) error {
78+
conn := meta.(*conns.AWSClient).Macie2Conn
79+
memberAccounts, err := getMemberAccountsFromAws(conn)
80+
if err != nil {
81+
return err
82+
}
83+
84+
d.Set("member_accounts", memberAccounts)
85+
6286
return nil
6387
}
6488

6589
func resourceAwsMacie2OrganizationSettingsUpdate(d *schema.ResourceData, meta interface{}) error {
6690
conn := meta.(*conns.AWSClient).Macie2Conn
91+
currentMemberAccounts, err := getMemberAccountsFromAws(conn)
92+
if err != nil {
93+
return err
94+
}
6795

68-
if d.HasChange("member_accounts") {
69-
old, new := d.GetChange("member_accounts")
70-
71-
oldExpanded := flex.ExpandStringSliceofPointers(flex.ExpandStringSet(old.(*schema.Set)))
72-
newExpanded := flex.ExpandStringSliceofPointers(flex.ExpandStringSet(new.(*schema.Set)))
96+
desiredMemberAccounts := flex.ExpandStringSliceofPointers(flex.ExpandStringSet(d.Get("member_accounts").(*schema.Set)))
7397

74-
membersToAdd := flex.Diff(newExpanded, oldExpanded)
75-
if len(membersToAdd) > 0 {
76-
if err := addMacie2OrganizationMembers(conn, membersToAdd); err != nil {
77-
return fmt.Errorf("error setting macie2 organization members: %s", err)
78-
}
98+
membersToAdd := flex.Diff(desiredMemberAccounts, currentMemberAccounts)
99+
if len(membersToAdd) > 0 {
100+
if err := addMacie2OrganizationMembers(conn, membersToAdd); err != nil {
101+
return fmt.Errorf("error setting macie2 organization members: %s", err)
79102
}
103+
}
80104

81-
membersToRemove := flex.Diff(oldExpanded, newExpanded)
82-
if len(membersToRemove) > 0 {
83-
if err := removeMacie2OrganizationMembers(conn, membersToRemove); err != nil {
84-
return fmt.Errorf("error removing macie2 organization members: %s", err)
85-
}
105+
membersToRemove := flex.Diff(currentMemberAccounts, desiredMemberAccounts)
106+
if len(membersToRemove) > 0 {
107+
if err := removeMacie2OrganizationMembers(conn, membersToRemove); err != nil {
108+
return fmt.Errorf("error removing macie2 organization members: %s", err)
86109
}
87110
}
88111
return nil
@@ -154,10 +177,14 @@ func removeMacie2OrganizationMembers(conn *macie2.Macie2, memberAccounts []strin
154177
}
155178

156179
if _, err := conn.DeleteMember(deleteMemberInput); err != nil {
157-
return fmt.Errorf("error removing macie2 administrator account members: %s", err)
180+
log.Printf("[WARN] Error deleting macie2 administrator account member: %s", err.Error())
181+
if strings.Contains(err.Error(), "specified account is not associated with your account") {
182+
log.Printf("[WARN] The specified member account (%s) isn't associated with the delegated administrator account", *disassociateMemberInput.Id)
183+
} else {
184+
return fmt.Errorf("error removing macie2 administrator account members: %s", err)
185+
}
158186
}
159187
}
160-
161188
}
162189
return nil
163190
}

0 commit comments

Comments
 (0)