@@ -2,6 +2,8 @@ package macie2
22
33import (
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+
4864func 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
6177func 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
6589func 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