From f0749cc56c106aa6b9cc64dd8bcb9230bbda3962 Mon Sep 17 00:00:00 2001 From: Yang Hongyang Date: Wed, 2 Dec 2015 16:54:56 +0800 Subject: [PATCH] Add missing bay_create_timeout to bay object Currently bay-show command always shows "0" in bay_create_timeout, this is confusing for users, store bay_create_timeout into db so that bay-show will return correct bay_create_timeout value. Change-Id: Icaea11d7d298bd6245a50c464bff6ff20292e092 Closes-Bug: #1521146 --- ...325033343_add_bay_create_timeout_to_bay.py | 31 +++++++++++++++++++ magnum/db/sqlalchemy/models.py | 1 + magnum/objects/bay.py | 4 ++- .../tests/unit/api/controllers/v1/test_bay.py | 2 ++ magnum/tests/unit/api/utils.py | 2 -- magnum/tests/unit/db/utils.py | 1 + magnum/tests/unit/objects/test_objects.py | 2 +- 7 files changed, 39 insertions(+), 4 deletions(-) create mode 100644 magnum/db/sqlalchemy/alembic/versions/40f325033343_add_bay_create_timeout_to_bay.py diff --git a/magnum/db/sqlalchemy/alembic/versions/40f325033343_add_bay_create_timeout_to_bay.py b/magnum/db/sqlalchemy/alembic/versions/40f325033343_add_bay_create_timeout_to_bay.py new file mode 100644 index 0000000000..ba080360d9 --- /dev/null +++ b/magnum/db/sqlalchemy/alembic/versions/40f325033343_add_bay_create_timeout_to_bay.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 bay_create_timeout to bay + +Revision ID: 40f325033343 +Revises: 5977879072a7 +Create Date: 2015-12-02 16:38:54.697413 + +""" + +# revision identifiers, used by Alembic. +revision = '40f325033343' +down_revision = '5977879072a7' + +from alembic import op +import sqlalchemy as sa + + +def upgrade(): + op.add_column('bay', sa.Column('bay_create_timeout', + sa.Integer(), nullable=True)) diff --git a/magnum/db/sqlalchemy/models.py b/magnum/db/sqlalchemy/models.py index 678ee4b1e7..2cede25d76 100644 --- a/magnum/db/sqlalchemy/models.py +++ b/magnum/db/sqlalchemy/models.py @@ -117,6 +117,7 @@ class Bay(Base): master_count = Column(Integer()) status = Column(String(20)) status_reason = Column(Text) + bay_create_timeout = Column(Integer()) discovery_url = Column(String(255)) master_addresses = Column(JSONEncodedList) # (yuanying) if we use barbican, diff --git a/magnum/objects/bay.py b/magnum/objects/bay.py index b69183ed7b..7b42f66232 100644 --- a/magnum/objects/bay.py +++ b/magnum/objects/bay.py @@ -26,7 +26,8 @@ from magnum.objects import fields as m_fields class Bay(base.MagnumPersistentObject, base.MagnumObject, base.MagnumObjectDictCompat): # Version 1.0: Initial version - VERSION = '1.0' + # Version 1.1: Added 'bay_create_timeout' field + VERSION = '1.1' dbapi = dbapi.get_instance() @@ -40,6 +41,7 @@ class Bay(base.MagnumPersistentObject, base.MagnumObject, 'stack_id': fields.StringField(nullable=True), 'status': m_fields.BayStatusField(nullable=True), 'status_reason': fields.StringField(nullable=True), + 'bay_create_timeout': fields.IntegerField(nullable=True), 'api_address': fields.StringField(nullable=True), 'node_addresses': fields.ListOfStringsField(nullable=True), 'node_count': fields.IntegerField(nullable=True), diff --git a/magnum/tests/unit/api/controllers/v1/test_bay.py b/magnum/tests/unit/api/controllers/v1/test_bay.py index d2bd082c45..606c30177a 100644 --- a/magnum/tests/unit/api/controllers/v1/test_bay.py +++ b/magnum/tests/unit/api/controllers/v1/test_bay.py @@ -400,6 +400,8 @@ class TestPost(api_base.FunctionalTest): return_created_at = timeutils.parse_isotime( response.json['created_at']).replace(tzinfo=None) self.assertEqual(test_time, return_created_at) + self.assertEqual(bdict['bay_create_timeout'], + response.json['bay_create_timeout']) @mock.patch('magnum.api.attr_validator.validate_os_resources') def test_create_bay_set_project_id_and_user_id(self, mock_valid_os_res): diff --git a/magnum/tests/unit/api/utils.py b/magnum/tests/unit/api/utils.py index 57c932dab7..dc6fa388e1 100644 --- a/magnum/tests/unit/api/utils.py +++ b/magnum/tests/unit/api/utils.py @@ -39,8 +39,6 @@ def baymodel_post_data(**kw): def bay_post_data(**kw): bay = utils.get_test_bay(**kw) - # the timeout property is a part of the request and doesn't persist - # in the bay db bay['bay_create_timeout'] = kw.get('bay_create_timeout', 15) internal = bay_controller.BayPatchType.internal_attrs() return remove_internal(bay, internal) diff --git a/magnum/tests/unit/db/utils.py b/magnum/tests/unit/db/utils.py index 7997ea1595..0c81e01163 100644 --- a/magnum/tests/unit/db/utils.py +++ b/magnum/tests/unit/db/utils.py @@ -89,6 +89,7 @@ def get_test_bay(**kw): 'stack_id': kw.get('stack_id', '047c6319-7abd-4bd9-a033-8c6af0173cd0'), 'status': kw.get('status', 'CREATE_IN_PROGRESS'), 'status_reason': kw.get('status_reason', 'Completed successfully'), + 'bay_create_timeout': kw.get('bay_create_timeout', 0), 'api_address': kw.get('api_address', '172.17.2.3'), 'node_addresses': kw.get('node_addresses', ['172.17.2.4']), 'node_count': kw.get('node_count', 3), diff --git a/magnum/tests/unit/objects/test_objects.py b/magnum/tests/unit/objects/test_objects.py index b91031c9bd..e4bac2a004 100644 --- a/magnum/tests/unit/objects/test_objects.py +++ b/magnum/tests/unit/objects/test_objects.py @@ -423,7 +423,7 @@ class _TestObject(object): # For more information on object version testing, read # http://docs.openstack.org/developer/magnum/objects.html object_data = { - 'Bay': '1.0-35edde13ad178e9419e7ea8b6d580bcd', + 'Bay': '1.1-aa9937c7453c0fdb9165bd2a83640ed9', 'BayLock': '1.0-7d1eb08cf2070523bd210369c7a2e076', 'BayModel': '1.8-a4bb0976be245f06edbd1db087a18071', 'Certificate': '1.0-2aff667971b85c1edf8d15684fd7d5e2',