@@ -98,9 +98,6 @@ There are two options to add nodes to the room:
9898 "id" : schema.StringAttribute {
9999 Description : "The ID of the rule." ,
100100 Computed : true ,
101- PlanModifiers : []planmodifier.String {
102- stringplanmodifier .UseStateForUnknown (),
103- },
104101 },
105102 "action" : schema.StringAttribute {
106103 Description : "Determines whether matching nodes will be included or excluded from the room. Valid values: INCLUDE or EXCLUDE. EXCLUDE action always takes precedence against INCLUDE." ,
@@ -295,36 +292,53 @@ func (s *nodeRoomMemberResource) Read(ctx context.Context, req resource.ReadRequ
295292
296293 state .NodeNames , _ = types .ListValueFrom (ctx , types .StringType , refreshedRoomNodes )
297294
298- nodeMembershipRule , err := s .client .ListNodeMembershipRules (state .SpaceID .ValueString (), state .RoomID .ValueString ())
295+ nodeMembershipRules , err := s .client .ListNodeMembershipRules (state .SpaceID .ValueString (), state .RoomID .ValueString ())
299296 if err != nil {
300297 resp .Diagnostics .AddError (
301298 "Error Getting Node Room Membership Rules" ,
302299 fmt .Sprintf ("Could not read node room membership rules for space_id/room_id: %s/%s err: %v" , state .SpaceID .ValueString (), state .RoomID .ValueString (), err .Error ()),
303300 )
304- return
305301 }
306302
307- for _ , rule := range nodeMembershipRule {
308- ruleExist , rIdx := checkNodeMembershipRule (rule .ID .String (), state .Rules )
303+ var refreshedNodeMembershipRules []nodeRoomMembershipRule
304+
305+ for _ , rule := range state .Rules {
306+ var ruleExist bool
307+ for _ , currentRule := range nodeMembershipRules {
308+ if rule .ID .ValueString () == currentRule .ID .String () {
309+ ruleExist = true
310+ break
311+ }
312+ }
309313 if ruleExist {
310- clauseDiff := checkNodeMembershipClausesDiff (rule .Clauses , state .Rules [rIdx ].Clauses )
311- if clauseDiff {
312- state .Rules [rIdx ].Clauses = make ([]nodeRoomMembershipClause , 0 , len (rule .Clauses ))
313- for _ , clause := range rule .Clauses {
314- state .Rules [rIdx ].Clauses = append (state .Rules [rIdx ].Clauses , nodeRoomMembershipClause {
315- Label : types .StringValue (clause .Label ),
316- Operator : types .StringValue (clause .Operator ),
317- Value : types .StringValue (clause .Value ),
318- Negate : types .BoolValue (clause .Negate ),
319- })
320- }
314+ nodeMembershipRule , err := s .client .GetNodeMembershipRule (state .SpaceID .ValueString (), state .RoomID .ValueString (), rule .ID .String ())
315+ if err != nil {
316+ resp .Diagnostics .AddError (
317+ "Error Getting Node Room Membership Rule" ,
318+ fmt .Sprintf ("Could not read node room membership rule for space_id/room_id/rule_id: %s/%s/%s err: %v" , state .SpaceID .ValueString (), state .RoomID .ValueString (), rule .ID .String (), err .Error ()),
319+ )
320+ return
321321 }
322- state .Rules [rIdx ].ID = types .StringValue (rule .ID .String ())
323- state .Rules [rIdx ].Action = types .StringValue (rule .Action )
324- state .Rules [rIdx ].Description = types .StringValue (rule .Description )
322+ var refreshedNodeMembershipRulesClauses []nodeRoomMembershipClause
323+ for _ , clause := range nodeMembershipRule .Clauses {
324+ refreshedNodeMembershipRulesClauses = append (refreshedNodeMembershipRulesClauses , nodeRoomMembershipClause {
325+ Label : types .StringValue (clause .Label ),
326+ Operator : types .StringValue (clause .Operator ),
327+ Value : types .StringValue (clause .Value ),
328+ Negate : types .BoolValue (clause .Negate ),
329+ })
330+ }
331+ refreshedNodeMembershipRules = append (refreshedNodeMembershipRules , nodeRoomMembershipRule {
332+ ID : types .StringValue (nodeMembershipRule .ID .String ()),
333+ Action : types .StringValue (nodeMembershipRule .Action ),
334+ Description : types .StringValue (nodeMembershipRule .Description ),
335+ Clauses : refreshedNodeMembershipRulesClauses ,
336+ })
325337 }
326338 }
327339
340+ state .Rules = refreshedNodeMembershipRules
341+
328342 diags = resp .State .Set (ctx , & state )
329343 resp .Diagnostics .Append (diags ... )
330344 if resp .Diagnostics .HasError () {
@@ -418,7 +432,7 @@ func (s *nodeRoomMemberResource) Update(ctx context.Context, req resource.Update
418432 }
419433
420434 for _ , stateRule := range state .Rules {
421- exist , _ := checkNodeMembershipRule (stateRule .ID .ValueString (), plan .Rules )
435+ exist := checkNodeMembershipRule (stateRule .ID .ValueString (), plan .Rules )
422436 if ! exist {
423437 err = s .client .DeleteNodeMembershipRule (state .SpaceID .ValueString (), state .RoomID .ValueString (), stateRule .ID .ValueString ())
424438 if err != nil {
@@ -435,7 +449,7 @@ func (s *nodeRoomMemberResource) Update(ctx context.Context, req resource.Update
435449 var nodeMembershipRule * client.NodeMembershipRule
436450 var nodeMembershipClauses []client.NodeMembershipClause
437451
438- exist , _ := checkNodeMembershipRule (planRule .ID .ValueString (), state .Rules )
452+ exist := checkNodeMembershipRule (planRule .ID .ValueString (), state .Rules )
439453 for _ , clause := range planRule .Clauses {
440454 nodeMembershipClauses = append (nodeMembershipClauses , client.NodeMembershipClause {
441455 Label : clause .Label .ValueString (),
@@ -567,29 +581,11 @@ func checkNodeExists(searchingForNodeName string, nodes *client.RoomNodes, reach
567581 return false , ""
568582}
569583
570- func checkNodeMembershipRule (ruleID string , rules []nodeRoomMembershipRule ) ( bool , int ) {
571- for idx , rule := range rules {
584+ func checkNodeMembershipRule (ruleID string , rules []nodeRoomMembershipRule ) bool {
585+ for _ , rule := range rules {
572586 if ruleID == rule .ID .ValueString () {
573- return true , idx
574- }
575- }
576- return false , - 1
577- }
578-
579- func checkNodeMembershipClausesDiff (resp []client.NodeMembershipClause , stateClauses []nodeRoomMembershipClause ) bool {
580- if len (resp ) != len (stateClauses ) {
581- return true
582- }
583-
584- for i , r := range resp {
585- s := stateClauses [i ]
586- if r .Label != s .Label .ValueString () ||
587- r .Operator != s .Operator .ValueString () ||
588- r .Value != s .Value .ValueString () ||
589- r .Negate != s .Negate .ValueBool () {
590587 return true
591588 }
592589 }
593-
594590 return false
595591}
0 commit comments