@@ -4,11 +4,8 @@ import (
44 "context"
55 "fmt"
66
7- "github.com/coder/coder/v2/coderd/util/slice"
87 "github.com/coder/coder/v2/codersdk"
98 "github.com/coder/terraform-provider-coderd/internal/codersdkvalidator"
10- "github.com/google/uuid"
11- "github.com/hashicorp/terraform-plugin-framework/attr"
129 "github.com/hashicorp/terraform-plugin-framework/path"
1310 "github.com/hashicorp/terraform-plugin-framework/resource"
1411 "github.com/hashicorp/terraform-plugin-framework/resource/schema"
@@ -36,7 +33,6 @@ type OrganizationResourceModel struct {
3633 DisplayName types.String `tfsdk:"display_name"`
3734 Description types.String `tfsdk:"description"`
3835 Icon types.String `tfsdk:"icon"`
39- Members types.Set `tfsdk:"members"`
4036}
4137
4238func NewOrganizationResource () resource.Resource {
@@ -85,11 +81,6 @@ func (r *OrganizationResource) Schema(ctx context.Context, req resource.SchemaRe
8581 Computed : true ,
8682 Default : stringdefault .StaticString ("" ),
8783 },
88- "members" : schema.SetAttribute {
89- MarkdownDescription : "Members of the organization, by ID. If null, members will not be added or removed by Terraform." ,
90- ElementType : UUIDType ,
91- Optional : true ,
92- },
9384 },
9485 }
9586}
@@ -136,18 +127,6 @@ func (r *OrganizationResource) Read(ctx context.Context, req resource.ReadReques
136127 data .DisplayName = types .StringValue (org .DisplayName )
137128 data .Description = types .StringValue (org .Description )
138129 data .Icon = types .StringValue (org .Icon )
139- if ! data .Members .IsNull () {
140- members , err := r .Client .OrganizationMembers (ctx , orgID )
141- if err != nil {
142- resp .Diagnostics .AddError ("Client Error" , fmt .Sprintf ("Unable to get organization members, got error: %s" , err ))
143- return
144- }
145- memberIDs := make ([]attr.Value , 0 , len (members ))
146- for _ , member := range members {
147- memberIDs = append (memberIDs , UUIDValue (member .UserID ))
148- }
149- data .Members = types .SetValueMust (UUIDType , memberIDs )
150- }
151130
152131 // Save updated data into Terraform state
153132 resp .Diagnostics .Append (resp .State .Set (ctx , & data )... )
@@ -181,42 +160,6 @@ func (r *OrganizationResource) Create(ctx context.Context, req resource.CreateRe
181160 // default it.
182161 data .DisplayName = types .StringValue (org .DisplayName )
183162
184- // Only configure members if they're specified
185- if ! data .Members .IsNull () {
186- tflog .Trace (ctx , "setting organization members" )
187- var members []UUID
188- resp .Diagnostics .Append (data .Members .ElementsAs (ctx , & members , false )... )
189- if resp .Diagnostics .HasError () {
190- return
191- }
192-
193- for _ , memberID := range members {
194- _ , err = r .Client .PostOrganizationMember (ctx , org .ID , memberID .ValueString ())
195- if err != nil {
196- resp .Diagnostics .AddError ("Client Error" , fmt .Sprintf ("Unable to add member %s to organization %s, got error: %s" , memberID , org .ID , err ))
197- return
198- }
199- }
200-
201- // Coder adds the user who creates the organization by default, but we may
202- // actually be connected as a user who isn't in the list of members. If so
203- // we should remove them!
204- me , err := r .Client .User (ctx , codersdk .Me )
205- if err != nil {
206- resp .Diagnostics .AddError ("Client Error" , fmt .Sprintf ("Unable to get current user, got error: %s" , err ))
207- return
208- }
209- if ! slice .Contains (members , UUIDValue (me .ID )) {
210- err = r .Client .DeleteOrganizationMember (ctx , org .ID , codersdk .Me )
211- if err != nil {
212- resp .Diagnostics .AddError ("Client Error" , fmt .Sprintf ("Unable to delete self from new organization: %s" , err ))
213- return
214- }
215- }
216-
217- tflog .Trace (ctx , "successfully set organization members" )
218- }
219-
220163 // Save data into Terraform state
221164 resp .Diagnostics .Append (resp .State .Set (ctx , & data )... )
222165}
@@ -251,46 +194,6 @@ func (r *OrganizationResource) Update(ctx context.Context, req resource.UpdateRe
251194 }
252195 tflog .Trace (ctx , "successfully updated organization" )
253196
254- // If the organization membership is managed, update them.
255- if ! data .Members .IsNull () {
256- orgMembers , err := r .Client .OrganizationMembers (ctx , orgID )
257- if err != nil {
258- resp .Diagnostics .AddError ("Client Error" , fmt .Sprintf ("Unable to get organization members , got error: %s" , err ))
259- return
260- }
261- currentMembers := make ([]uuid.UUID , 0 , len (orgMembers ))
262- for _ , member := range orgMembers {
263- currentMembers = append (currentMembers , member .UserID )
264- }
265-
266- var plannedMembers []UUID
267- resp .Diagnostics .Append (data .Members .ElementsAs (ctx , & plannedMembers , false )... )
268- if resp .Diagnostics .HasError () {
269- return
270- }
271-
272- add , remove := memberDiff (currentMembers , plannedMembers )
273- tflog .Trace (ctx , "updating organization members" , map [string ]any {
274- "new_members" : add ,
275- "removed_members" : remove ,
276- })
277- for _ , memberID := range add {
278- _ , err := r .Client .PostOrganizationMember (ctx , orgID , memberID )
279- if err != nil {
280- resp .Diagnostics .AddError ("Client Error" , fmt .Sprintf ("Unable to add member %s to organization %s, got error: %s" , memberID , orgID , err ))
281- return
282- }
283- }
284- for _ , memberID := range remove {
285- err := r .Client .DeleteOrganizationMember (ctx , orgID , memberID )
286- if err != nil {
287- resp .Diagnostics .AddError ("Client Error" , fmt .Sprintf ("Unable to remove member %s from organization %s, got error: %s" , memberID , orgID , err ))
288- return
289- }
290- }
291- tflog .Trace (ctx , "successfully updated organization members" )
292- }
293-
294197 // Save updated data into Terraform state
295198 resp .Diagnostics .Append (resp .State .Set (ctx , & data )... )
296199}
0 commit comments