@@ -200,22 +200,29 @@ def _set_node_traits(task, vlan_groups: set[str]):
200200 required_traits = { _trait_name (x ) for x in vlan_groups }
201201 existing_traits = set (task .node .traits .get_trait_names ()).intersection (all_traits )
202202
203- LOG .debug (f"Existing traits of node { task .node .uuid = } { task .node .traits = } { existing_traits = } " )
204-
205203 traits_to_remove = existing_traits .difference (required_traits )
206204 traits_to_add = required_traits .difference (existing_traits )
207205
208- print (f"{ task .node .uuid = } { task .node .traits = } { existing_traits = } { all_traits = } { required_traits = } { traits_to_add = } { traits_to_remove = } " )
206+ LOG .debug (
207+ "Checking traits for node %s: existing=%s required=%s" ,
208+ task .node .uuid , existing_traits , required_traits ,
209+ )
210+
209211 for trait in traits_to_remove :
212+ LOG .debug ("Removing trait %s from node %s" , trait , task .node .uuid )
210213 try :
211214 task .node .traits .destroy (trait )
212215 except openstack .exceptions .NotFoundException :
213216 pass
214217
215- for trait in traits_to_add :
216- task .node .traits = task .node .traits .create (trait )
218+ if traits_to_add :
219+ LOG .debug ("Adding traits %s to node %s" , traits_to_add , task .node .uuid )
220+ task .node .traits = task .node .traits .create (
221+ None , task .node .id , list (traits_to_add )
222+ )
217223
218- task .node .save ()
224+ if traits_to_add or traits_to_remove :
225+ task .node .save ()
219226
220227def _trait_name (vlan_group_name : str ) -> str :
221228 suffix = vlan_group_name .upper ().split ("-" )[- 1 ]
0 commit comments