@@ -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