diff --git a/ironic/db/sqlalchemy/alembic/versions/664f85c2f622_add_conductor_group_to_nodes_conductors.py b/ironic/db/sqlalchemy/alembic/versions/664f85c2f622_add_conductor_group_to_nodes_conductors.py new file mode 100644 index 0000000000..4304d68c0c --- /dev/null +++ b/ironic/db/sqlalchemy/alembic/versions/664f85c2f622_add_conductor_group_to_nodes_conductors.py @@ -0,0 +1,35 @@ +# All Rights Reserved. +# +# 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 conductor_group to nodes/conductors + +Revision ID: 664f85c2f622 +Revises: fb3f10dd262e +Create Date: 2018-07-02 13:21:54.847245 + +""" + +from alembic import op +import sqlalchemy as sa + +# revision identifiers, used by Alembic. +revision = '664f85c2f622' +down_revision = 'b9117ac17882' + + +def upgrade(): + op.add_column('conductors', sa.Column('conductor_group', + sa.String(length=255), server_default='', nullable=False)) + op.add_column('nodes', sa.Column('conductor_group', sa.String(length=255), + server_default='', nullable=False)) diff --git a/ironic/db/sqlalchemy/models.py b/ironic/db/sqlalchemy/models.py index f7ca076c8e..a94e9645c9 100644 --- a/ironic/db/sqlalchemy/models.py +++ b/ironic/db/sqlalchemy/models.py @@ -92,6 +92,8 @@ class Conductor(Base): hostname = Column(String(255), nullable=False) drivers = Column(db_types.JsonEncodedList) online = Column(Boolean, default=True) + conductor_group = Column(String(255), nullable=False, default='', + server_default='') class ConductorHardwareInterfaces(Base): @@ -163,6 +165,8 @@ class Node(Base): ForeignKey('conductors.id', name='nodes_conductor_affinity_fk'), nullable=True) + conductor_group = Column(String(255), nullable=False, default='', + server_default='') maintenance = Column(Boolean, default=False) maintenance_reason = Column(Text, nullable=True) diff --git a/ironic/tests/unit/db/sqlalchemy/test_migrations.py b/ironic/tests/unit/db/sqlalchemy/test_migrations.py index 26f1920197..dadde2b677 100644 --- a/ironic/tests/unit/db/sqlalchemy/test_migrations.py +++ b/ironic/tests/unit/db/sqlalchemy/test_migrations.py @@ -726,6 +726,40 @@ class MigrationCheckersMixin(object): self.assertIsInstance(nodes.c.deploy_step.type, sqlalchemy.types.String) + def _pre_upgrade_664f85c2f622(self, engine): + # Create a node and a conductor to verify existing records + # get a conductor_group of "" + data = { + 'conductor_id': 98765432, + 'node_uuid': uuidutils.generate_uuid(), + } + + nodes = db_utils.get_table(engine, 'nodes') + nodes.insert().execute({'uuid': data['node_uuid']}) + + conductors = db_utils.get_table(engine, 'conductors') + conductors.insert().execute({'id': data['conductor_id'], + 'hostname': uuidutils.generate_uuid()}) + + return data + + def _check_664f85c2f622(self, engine, data): + nodes_tbl = db_utils.get_table(engine, 'nodes') + conductors_tbl = db_utils.get_table(engine, 'conductors') + for tbl in (nodes_tbl, conductors_tbl): + col_names = [column.name for column in tbl.c] + self.assertIn('conductor_group', col_names) + self.assertIsInstance(tbl.c.conductor_group.type, + sqlalchemy.types.String) + + node = nodes_tbl.select( + nodes_tbl.c.uuid == data['node_uuid']).execute().first() + self.assertEqual(node['conductor_group'], "") + + conductor = conductors_tbl.select( + conductors_tbl.c.id == data['conductor_id']).execute().first() + self.assertEqual(conductor['conductor_group'], "") + def test_upgrade_and_version(self): with patch_with_engine(self.engine): self.migration_api.upgrade('head')