@@ -86,18 +86,15 @@ func resourceTFETeamOrganizationMembersRead(d *schema.ResourceData, meta interfa
8686 }
8787
8888 log .Printf ("[DEBUG] Read users from team: %s" , d .Id ())
89- nonServiceAccountUsers , err := fetchNonServiceAccountUserIds (config .Client , d . Id () )
89+ nonServiceAccountOrganizationMemberships , err := filterNonServiceAccountOrganizationMembers (config .Client , organizationMemberships )
9090 if err != nil {
9191 return fmt .Errorf ("Error reading users from team %s: %w" , d .Id (), err )
9292 }
9393
9494 // Get all organization memberships and add them to object
9595 var organizationMembershipIDs []interface {}
96- for _ , membership := range organizationMemberships {
97- // Service accounts should not be managed by this resource
98- if _ , ok := nonServiceAccountUsers [membership .User .ID ]; ok {
99- organizationMembershipIDs = append (organizationMembershipIDs , membership .ID )
100- }
96+ for _ , membership := range nonServiceAccountOrganizationMemberships {
97+ organizationMembershipIDs = append (organizationMembershipIDs , membership .ID )
10198 }
10299
103100 // Check if organization memberships were added at all
@@ -112,20 +109,22 @@ func resourceTFETeamOrganizationMembersRead(d *schema.ResourceData, meta interfa
112109 return nil
113110}
114111
115- func fetchNonServiceAccountUserIds (config * tfe.Client , teamID string ) (map [string ]interface {}, error ) {
116- users , err := config .TeamMembers .ListUsers (ctx , teamID )
117- if err != nil {
118- return nil , fmt .Errorf ("failed to fetch existing users for team %s: %w" , teamID , err )
119- }
112+ func filterNonServiceAccountOrganizationMembers (config * tfe.Client , organizationMemberships []* tfe.OrganizationMembership ) ([]tfe.OrganizationMembership , error ) {
113+ var nonServiceAccountMemberships []tfe.OrganizationMembership
120114
121- nonServiceAccountUserIDSet := make (map [string ]interface {})
122- for _ , u := range users {
123- if ! u .IsServiceAccount {
124- nonServiceAccountUserIDSet [u .ID ] = nil
115+ for _ , om := range organizationMemberships {
116+ organizationMembershipDetails , err := config .OrganizationMemberships .ReadWithOptions (ctx , om .ID , tfe.OrganizationMembershipReadOptions {
117+ Include : []tfe.OrgMembershipIncludeOpt {tfe .OrgMembershipUser },
118+ })
119+ if err != nil {
120+ return nil , fmt .Errorf ("failed to fetch organization membership details for membership %s in organization %s: %w" , om .ID , om .Organization .Name , err )
125121 }
126- }
127122
128- return nonServiceAccountUserIDSet , nil
123+ if ! organizationMembershipDetails .User .IsServiceAccount {
124+ nonServiceAccountMemberships = append (nonServiceAccountMemberships , * organizationMembershipDetails )
125+ }
126+ }
127+ return nonServiceAccountMemberships , nil
129128}
130129
131130func fetchExistingTeamMembershipIds (config * tfe.Client , teamID string ) (map [string ]interface {}, error ) {
@@ -134,17 +133,14 @@ func fetchExistingTeamMembershipIds(config *tfe.Client, teamID string) (map[stri
134133 return nil , fmt .Errorf ("failed to fetch existing organization memberships for team %s: %w" , teamID , err )
135134 }
136135
137- nonServiceAccountUserIds , err := fetchNonServiceAccountUserIds (config , teamID )
136+ nonServiceAccountOrganizationMemberships , err := filterNonServiceAccountOrganizationMembers (config , teamMembers )
138137 if err != nil {
139138 return nil , err
140139 }
141140
142141 teamMembersIDSet := make (map [string ]interface {})
143- for _ , m := range teamMembers {
144- // Service accounts should not be managed by this resource
145- if _ , ok := nonServiceAccountUserIds [m .User .ID ]; ok {
146- teamMembersIDSet [m .ID ] = nil
147- }
142+ for _ , m := range nonServiceAccountOrganizationMemberships {
143+ teamMembersIDSet [m .ID ] = nil
148144 }
149145
150146 return teamMembersIDSet , nil
@@ -228,7 +224,7 @@ func resourceTFETeamOrganizationMembersDelete(d *schema.ResourceData, meta inter
228224 return fmt .Errorf ("Error reading organization memberships from team %s: %w" , d .Id (), err )
229225 }
230226
231- nonServiceAccountUserIds , err := fetchNonServiceAccountUserIds (config .Client , d . Id () )
227+ nonServiceAccountOrganizationMemberships , err := filterNonServiceAccountOrganizationMembers (config .Client , organizationMemberships )
232228 if err != nil {
233229 return fmt .Errorf ("Error fetching account user IDs for team %s: %w" , d .Id (), err )
234230 }
@@ -237,11 +233,8 @@ func resourceTFETeamOrganizationMembersDelete(d *schema.ResourceData, meta inter
237233 options := tfe.TeamMemberRemoveOptions {}
238234
239235 // Add all the users that need to be removed.
240- for _ , m := range organizationMemberships {
241- // Service accounts should not be managed by this resource
242- if _ , ok := nonServiceAccountUserIds [m .User .ID ]; ok {
243- options .OrganizationMembershipIDs = append (options .OrganizationMembershipIDs , m .ID )
244- }
236+ for _ , m := range nonServiceAccountOrganizationMemberships {
237+ options .OrganizationMembershipIDs = append (options .OrganizationMembershipIDs , m .ID )
245238 }
246239
247240 log .Printf ("[DEBUG] Remove organization memberships %v from team: %s" , options .OrganizationMembershipIDs , d .Id ())
0 commit comments