Skip to content

Commit b021045

Browse files
committed
ignore sa members and fix uts
1 parent 470a12c commit b021045

1 file changed

Lines changed: 22 additions & 29 deletions

File tree

internal/provider/resource_tfe_team_organization_members.go

Lines changed: 22 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -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

131130
func 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

Comments
 (0)