From 541947f9060b146d25f97025eda6ca69b1c87226 Mon Sep 17 00:00:00 2001 From: Vasyl Saienko Date: Fri, 26 Aug 2016 03:03:18 -0400 Subject: [PATCH] Add standalone_ports_supported to portgroup - DB This patch is a database change to portgroup object that adds a new field standalone_ports_supported. The field indicates whether interfaces that belongs to the portgroup may be used as individual interfaces. For example when hardware doesn't support portchannel fallback. Related-Bug: #1618754 Change-Id: I24c2408a0769b630ce275f8688705fc35efd41a8 --- ...717201bc_add_standalone_ports_supported.py | 31 +++++++++++++++++++ ironic/db/sqlalchemy/models.py | 1 + ironic/objects/portgroup.py | 4 ++- .../unit/db/sqlalchemy/test_migrations.py | 8 +++++ ironic/tests/unit/db/utils.py | 2 ++ ironic/tests/unit/objects/test_objects.py | 2 +- ...orts_supported_field-4c59702a052acf38.yaml | 6 ++++ 7 files changed, 52 insertions(+), 2 deletions(-) create mode 100644 ironic/db/sqlalchemy/alembic/versions/60cf717201bc_add_standalone_ports_supported.py create mode 100644 releasenotes/notes/add_standalone_ports_supported_field-4c59702a052acf38.yaml diff --git a/ironic/db/sqlalchemy/alembic/versions/60cf717201bc_add_standalone_ports_supported.py b/ironic/db/sqlalchemy/alembic/versions/60cf717201bc_add_standalone_ports_supported.py new file mode 100644 index 0000000000..2e284a67e6 --- /dev/null +++ b/ironic/db/sqlalchemy/alembic/versions/60cf717201bc_add_standalone_ports_supported.py @@ -0,0 +1,31 @@ +# 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. + +"""add_standalone_ports_supported_to_portgroup + +Revision ID: 60cf717201bc +Revises: c14cef6dfedf +Create Date: 2016-08-25 07:00:56.662645 + +""" + +# revision identifiers, used by Alembic. +revision = '60cf717201bc' +down_revision = 'c14cef6dfedf' + +from alembic import op +import sqlalchemy as sa + + +def upgrade(): + op.add_column('portgroups', sa.Column('standalone_ports_supported', + sa.Boolean)) diff --git a/ironic/db/sqlalchemy/models.py b/ironic/db/sqlalchemy/models.py index 46f5c9dc29..b3a5e46ff0 100644 --- a/ironic/db/sqlalchemy/models.py +++ b/ironic/db/sqlalchemy/models.py @@ -182,6 +182,7 @@ class Portgroup(Base): address = Column(String(18)) extra = Column(db_types.JsonEncodedDict) internal_info = Column(db_types.JsonEncodedDict) + standalone_ports_supported = Column(Boolean, default=True) class NodeTag(Base): diff --git a/ironic/objects/portgroup.py b/ironic/objects/portgroup.py index a3b5c6b907..74c1fda031 100644 --- a/ironic/objects/portgroup.py +++ b/ironic/objects/portgroup.py @@ -28,7 +28,8 @@ from ironic.objects import fields as object_fields class Portgroup(base.IronicObject, object_base.VersionedObjectDictCompat): # Version 1.0: Initial version # Version 1.1: Add internal_info field - VERSION = '1.1' + # Version 1.2: Add standalone_ports_supported field + VERSION = '1.2' dbapi = dbapi.get_instance() @@ -40,6 +41,7 @@ class Portgroup(base.IronicObject, object_base.VersionedObjectDictCompat): 'address': object_fields.MACAddressField(nullable=True), 'extra': object_fields.FlexibleDictField(nullable=True), 'internal_info': object_fields.FlexibleDictField(nullable=True), + 'standalone_ports_supported': object_fields.BooleanField(), } @staticmethod diff --git a/ironic/tests/unit/db/sqlalchemy/test_migrations.py b/ironic/tests/unit/db/sqlalchemy/test_migrations.py index 9264c3d76b..c57b186d9b 100644 --- a/ironic/tests/unit/db/sqlalchemy/test_migrations.py +++ b/ironic/tests/unit/db/sqlalchemy/test_migrations.py @@ -524,6 +524,14 @@ class MigrationCheckersMixin(object): self.assertEqual(1, counts['neutron']) self.assertEqual(0, counts[None]) + def _check_60cf717201bc(self, engine, data): + portgroups = db_utils.get_table(engine, 'portgroups') + col_names = [column.name for column in portgroups.c] + self.assertIn('standalone_ports_supported', col_names) + self.assertIsInstance(portgroups.c.standalone_ports_supported.type, + (sqlalchemy.types.Boolean, + sqlalchemy.types.Integer)) + def test_upgrade_and_version(self): with patch_with_engine(self.engine): self.migration_api.upgrade('head') diff --git a/ironic/tests/unit/db/utils.py b/ironic/tests/unit/db/utils.py index 6d2b300fdf..5c6831f1f8 100644 --- a/ironic/tests/unit/db/utils.py +++ b/ironic/tests/unit/db/utils.py @@ -387,6 +387,8 @@ def get_test_portgroup(**kw): 'created_at': kw.get('created_at'), 'updated_at': kw.get('updated_at'), 'internal_info': kw.get('internal_info', {"bar": "buzz"}), + 'standalone_ports_supported': kw.get('standalone_ports_supported', + True), } diff --git a/ironic/tests/unit/objects/test_objects.py b/ironic/tests/unit/objects/test_objects.py index 6482c809fb..ee68418f4b 100644 --- a/ironic/tests/unit/objects/test_objects.py +++ b/ironic/tests/unit/objects/test_objects.py @@ -408,7 +408,7 @@ expected_object_fingerprints = { 'MyObj': '1.5-4f5efe8f0fcaf182bbe1c7fe3ba858db', 'Chassis': '1.3-d656e039fd8ae9f34efc232ab3980905', 'Port': '1.6-609504503d68982a10f495659990084b', - 'Portgroup': '1.1-e57da9ca808d3696c34dad8125564696', + 'Portgroup': '1.2-37b374b19bfd25db7e86aebc364e611e', 'Conductor': '1.1-5091f249719d4a465062a1b3dc7f860d', 'EventType': '1.0-3daeec50c6deb956990255f92b863333', 'NotificationPublisher': '1.0-51a09397d6c0687771fb5be9a999605d', diff --git a/releasenotes/notes/add_standalone_ports_supported_field-4c59702a052acf38.yaml b/releasenotes/notes/add_standalone_ports_supported_field-4c59702a052acf38.yaml new file mode 100644 index 0000000000..79908fda37 --- /dev/null +++ b/releasenotes/notes/add_standalone_ports_supported_field-4c59702a052acf38.yaml @@ -0,0 +1,6 @@ +--- +features: + - Add the field `standalone_ports_supported` to the + portgroup object. This field indicates whether + ports that are members of this portgroup can be + used as stand alone ports. By default is True.