|
1 | 1 | from typing import Any |
2 | 2 |
|
3 | | -import openstack |
4 | 3 | from ironic import objects |
5 | 4 | from ironic.common import exception |
6 | 5 | from ironic.drivers.modules.inspector.hooks import base |
@@ -174,34 +173,16 @@ def _set_node_traits(task, vlan_groups: set[str]): |
174 | 173 | required_traits = {_trait_name(x) for x in vlan_groups if x} |
175 | 174 | existing_traits = set(node.traits.get_trait_names()).intersection(our_traits) |
176 | 175 |
|
177 | | - traits_to_remove = sorted(existing_traits.difference(required_traits)) |
178 | | - traits_to_add = sorted(required_traits.difference(existing_traits)) |
179 | | - |
180 | 176 | LOG.debug( |
181 | 177 | "Checking traits for node %s: existing=%s required=%s", |
182 | 178 | node.uuid, |
183 | 179 | existing_traits, |
184 | 180 | required_traits, |
185 | 181 | ) |
186 | | - |
187 | | - for trait in traits_to_remove: |
188 | | - LOG.debug("Removing trait %s from node %s", trait, node.uuid) |
189 | | - try: |
190 | | - node.traits.destroy(trait) |
191 | | - except openstack.exceptions.NotFoundException: |
192 | | - pass |
193 | | - |
194 | | - if traits_to_add: |
195 | | - LOG.debug("Adding traits %s to node %s", traits_to_add, node.uuid) |
196 | | - |
197 | | - node.traits = objects.TraitList.create( |
198 | | - task.context, node.id, list(traits_to_add) |
199 | | - ) |
200 | | - |
201 | | - if traits_to_add or traits_to_remove: |
| 182 | + if existing_traits != required_traits: |
| 183 | + objects.TraitList.create(task.context, task.node.id, required_traits) |
202 | 184 | node.save() |
203 | 185 |
|
204 | | - |
205 | 186 | def _trait_name(vlan_group_name: str) -> str: |
206 | 187 | suffix = vlan_group_name.upper().split("-")[-1] |
207 | 188 | return f"CUSTOM_{suffix}_SWITCH" |
0 commit comments