diff --git a/trove/db/sqlalchemy/migrate_repo/schema.py b/trove/db/sqlalchemy/migrate_repo/schema.py index 9f7b0b368e..b4f69d6303 100644 --- a/trove/db/sqlalchemy/migrate_repo/schema.py +++ b/trove/db/sqlalchemy/migrate_repo/schema.py @@ -18,7 +18,6 @@ from oslo_log import log as logging import sqlalchemy.types - logger = logging.getLogger('trove.db.sqlalchemy.migrate_repo.schema') @@ -63,11 +62,6 @@ class Float(sqlalchemy.types.Float): super(Float, self).__init__(*args, **kwargs) -class Json(sqlalchemy.types.JSON): - def __init__(self, *args, **kwargs): - super(Json, self).__init__(*args, **kwargs) - - def create_tables(tables): for table in tables: logger.info("creating table %(table)s", {'table': table}) diff --git a/trove/db/sqlalchemy/migrate_repo/versions/046_add_access_to_instance.py b/trove/db/sqlalchemy/migrate_repo/versions/046_add_access_to_instance.py index eac819e113..faf45d1770 100644 --- a/trove/db/sqlalchemy/migrate_repo/versions/046_add_access_to_instance.py +++ b/trove/db/sqlalchemy/migrate_repo/versions/046_add_access_to_instance.py @@ -16,8 +16,8 @@ from sqlalchemy.schema import Column from sqlalchemy.schema import MetaData -from trove.db.sqlalchemy.migrate_repo.schema import Json from trove.db.sqlalchemy.migrate_repo.schema import Table +from trove.db.sqlalchemy.migrate_repo.schema import Text def upgrade(migrate_engine): @@ -25,4 +25,4 @@ def upgrade(migrate_engine): meta.bind = migrate_engine instances = Table('instances', meta, autoload=True) - instances.create_column(Column('access', Json(), nullable=True)) + instances.create_column(Column('access', Text(), nullable=True)) diff --git a/trove/instance/models.py b/trove/instance/models.py index d524264ac3..ab85efe4a8 100644 --- a/trove/instance/models.py +++ b/trove/instance/models.py @@ -17,6 +17,7 @@ """Model classes that form the core of instances functionality.""" from datetime import datetime from datetime import timedelta +import json import os.path import re @@ -492,6 +493,8 @@ class SimpleInstance(object): @property def access(self): if hasattr(self.db_info, 'access'): + if type(self.db_info.access) == str: + return json.loads(self.db_info.access) return self.db_info.access else: return None @@ -885,6 +888,10 @@ class BaseInstance(SimpleInstance): def update_db(self, **values): self.db_info = DBInstance.find_by(id=self.id, deleted=False) + + if 'access' in values and type(values['access'] != str): + values['access'] = json.dumps(values['access']) + for key in values: setattr(self.db_info, key, values[key]) self.db_info.save() @@ -1884,6 +1891,12 @@ class DBInstance(dbmodels.DatabaseModelBase): return cu.decrypt_data(cu.decode_data(self.encrypted_key), CONF.inst_rpc_key_encr_key) + @classmethod + def create(cls, **values): + if 'access' in values and type(values['access'] != str): + values['access'] = json.dumps(values['access']) + return super(DBInstance, cls).create(**values) + def _validate(self, errors): if InstanceTask.from_code(self.task_id) is None: errors['task_id'] = "Not valid."