summaryrefslogtreecommitdiff
path: root/ironic/objects/node.py
diff options
context:
space:
mode:
Diffstat (limited to 'ironic/objects/node.py')
-rw-r--r--ironic/objects/node.py33
1 files changed, 26 insertions, 7 deletions
diff --git a/ironic/objects/node.py b/ironic/objects/node.py
index cdb02ebb9..0392ee283 100644
--- a/ironic/objects/node.py
+++ b/ironic/objects/node.py
@@ -75,7 +75,8 @@ class Node(base.IronicObject, object_base.VersionedObjectDictCompat):
# Version 1.32: Add description field
# Version 1.33: Add retired and retired_reason fields
# Version 1.34: Add lessee field
- VERSION = '1.34'
+ # Version 1.35: Add network_data field
+ VERSION = '1.35'
dbapi = db_api.get_instance()
@@ -164,6 +165,7 @@ class Node(base.IronicObject, object_base.VersionedObjectDictCompat):
'description': object_fields.StringField(nullable=True),
'retired': objects.fields.BooleanField(nullable=True),
'retired_reason': object_fields.StringField(nullable=True),
+ 'network_data': object_fields.FlexibleDictField(nullable=True),
}
def as_dict(self, secure=False):
@@ -439,10 +441,6 @@ class Node(base.IronicObject, object_base.VersionedObjectDictCompat):
updates = self.do_version_changes_for_db()
self._validate_property_values(updates.get('properties'))
- if 'driver' in updates and 'driver_internal_info' not in updates:
- # Clean driver_internal_info when changes driver
- self.driver_internal_info = {}
- updates = self.do_version_changes_for_db()
self._validate_and_remove_traits(updates)
self._validate_and_format_conductor_group(updates)
db_node = self.dbapi.update_node(self.uuid, updates)
@@ -549,6 +547,21 @@ class Node(base.IronicObject, object_base.VersionedObjectDictCompat):
elif self.conductor_group:
self.conductor_group = ''
+ def _convert_network_data_field(self, target_version,
+ remove_unavailable_fields=True):
+ # NOTE(etingof): The default value for `network_data` is an empty
+ # dict. Therefore we can't use generic version adjustment
+ # routine.
+ field_is_set = self.obj_attr_is_set('network_data')
+ if target_version >= (1, 35):
+ if not field_is_set:
+ self.network_data = {}
+ elif field_is_set:
+ if remove_unavailable_fields:
+ delattr(self, 'network_data')
+ elif self.network_data:
+ self.network_data = {}
+
# NOTE (yolanda): new method created to avoid repeating code in
# _convert_to_version, and to avoid pep8 too complex error
def _adjust_field_to_version(self, field_name, field_default_value,
@@ -606,6 +619,8 @@ class Node(base.IronicObject, object_base.VersionedObjectDictCompat):
should be set to False (or removed).
Version 1.34: lessee was added. For versions prior to this, it should
be set to None or removed.
+ Version 1.35: network_data was added. For versions prior to this, it
+ should be set to empty dict (or removed).
:param target_version: the desired version of the object
:param remove_unavailable_fields: True to remove fields that are
@@ -621,6 +636,7 @@ class Node(base.IronicObject, object_base.VersionedObjectDictCompat):
('automated_clean', 28), ('protected_reason', 29),
('owner', 30), ('allocation_id', 31), ('description', 32),
('retired_reason', 33), ('lessee', 34)]
+
for name, minor in fields:
self._adjust_field_to_version(name, None, target_version,
1, minor, remove_unavailable_fields)
@@ -637,14 +653,17 @@ class Node(base.IronicObject, object_base.VersionedObjectDictCompat):
self._adjust_field_to_version('retired', False, target_version,
1, 33, remove_unavailable_fields)
+ self._convert_network_data_field(target_version,
+ remove_unavailable_fields)
+
@base.IronicObjectRegistry.register
class NodePayload(notification.NotificationPayloadBase):
"""Base class used for all notification payloads about a Node object."""
# NOTE: This payload does not include the Node fields "chassis_id",
# "driver_info", "driver_internal_info", "instance_info", "raid_config",
- # "reservation", or "target_raid_config". These were excluded for reasons
- # including:
+ # "network_data", "reservation", or "target_raid_config". These were
+ # excluded for reasons including:
# - increased complexity needed for creating the payload
# - sensitive information in the fields that shouldn't be exposed to
# external services