summaryrefslogtreecommitdiff
path: root/neutron/db/port_hints_db.py
diff options
context:
space:
mode:
Diffstat (limited to 'neutron/db/port_hints_db.py')
-rw-r--r--neutron/db/port_hints_db.py53
1 files changed, 53 insertions, 0 deletions
diff --git a/neutron/db/port_hints_db.py b/neutron/db/port_hints_db.py
new file mode 100644
index 0000000000..0b45b413fb
--- /dev/null
+++ b/neutron/db/port_hints_db.py
@@ -0,0 +1,53 @@
+# Copyright 2023 Ericsson Software Technology
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+from neutron_lib.api.definitions import port_hints as phints_def
+from oslo_serialization import jsonutils
+
+from neutron.objects.port.extensions import port_hints as phints_obj
+
+
+class PortHintsMixin(object):
+ """Mixin class to add hints to a port"""
+
+ def _process_create_port(self, context, data, result):
+ if not data.get(phints_def.HINTS):
+ result[phints_def.HINTS] = None
+ return
+
+ obj = phints_obj.PortHints(
+ context, port_id=result['id'],
+ hints=data[phints_def.HINTS])
+ obj.create()
+ result[phints_def.HINTS] = data[phints_def.HINTS]
+
+ def _process_update_port(self, context, data, result):
+ obj = phints_obj.PortHints.get_object(
+ context, port_id=result['id'])
+
+ if obj:
+ if data[phints_def.HINTS]:
+ obj.hints = data[phints_def.HINTS]
+ obj.update()
+ else:
+ obj.delete()
+ result[phints_def.HINTS] = data[phints_def.HINTS]
+ else:
+ self._process_create_port(context, data, result)
+
+ def _extend_port_dict(self, port_db, result):
+ if port_db.hints:
+ result[phints_def.HINTS] = jsonutils.loads(port_db.hints.hints)
+ else:
+ result[phints_def.HINTS] = None