Skip to content
This repository was archived by the owner on Apr 15, 2026. It is now read-only.

Commit 31e9379

Browse files
committed
fix(enterprise-teams): authoritative Create/Delete for team organizations
- Create validates no pre-existing org assignments before adding - Delete fetches all current orgs from API instead of Terraform state
1 parent c46836b commit 31e9379

1 file changed

Lines changed: 25 additions & 5 deletions

File tree

github/resource_github_enterprise_team_organizations.go

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,15 @@ func resourceGithubEnterpriseTeamOrganizationsCreate(ctx context.Context, d *sch
7777
return diag.Errorf("enterprise team not found")
7878
}
7979

80+
// Verify no organizations are already assigned (authoritative resource)
81+
existing, err := listAllEnterpriseTeamOrganizations(ctx, client, enterpriseSlug, team.Slug)
82+
if err != nil {
83+
return diag.FromErr(err)
84+
}
85+
if len(existing) > 0 {
86+
return diag.Errorf("%q already has organizations assigned; import first or remove manually", team.Slug)
87+
}
88+
8089
orgSlugsSet := d.Get("organization_slugs").(*schema.Set)
8190
orgSlugs := make([]string, 0, orgSlugsSet.Len())
8291
for _, item := range orgSlugsSet.List() {
@@ -193,12 +202,23 @@ func resourceGithubEnterpriseTeamOrganizationsDelete(ctx context.Context, d *sch
193202
return diag.FromErr(err)
194203
}
195204

196-
orgSlugsSet := d.Get("organization_slugs").(*schema.Set)
197-
if orgSlugsSet.Len() > 0 {
198-
removeSlugs := make([]string, 0, orgSlugsSet.Len())
199-
for _, item := range orgSlugsSet.List() {
200-
removeSlugs = append(removeSlugs, item.(string))
205+
orgs, err := listAllEnterpriseTeamOrganizations(ctx, client, enterpriseSlug, teamSlug)
206+
if err != nil {
207+
var ghErr *github.ErrorResponse
208+
if errors.As(err, &ghErr) && ghErr.Response.StatusCode == http.StatusNotFound {
209+
return nil
201210
}
211+
return diag.FromErr(err)
212+
}
213+
214+
removeSlugs := make([]string, 0, len(orgs))
215+
for _, org := range orgs {
216+
if org.Login != nil && *org.Login != "" {
217+
removeSlugs = append(removeSlugs, *org.Login)
218+
}
219+
}
220+
221+
if len(removeSlugs) > 0 {
202222
_, resp, err := client.Enterprise.RemoveMultipleAssignments(ctx, enterpriseSlug, teamSlug, removeSlugs)
203223
if err != nil {
204224
var ghErr *github.ErrorResponse

0 commit comments

Comments
 (0)