Changed JSON fields on mutable objects in Release object
Changed all JSON types fields of Release object on corresponding Mutable(Dict/List) types. Changed default value of 'vmware_attributes_metadata' field. Change-Id: I024e199518526c1e60058c0ad25150ed4a543d26 Partial-Bug: 1482658
This commit is contained in:
parent
984f3bfc6a
commit
4aaa691d7c
|
@ -27,6 +27,7 @@ from sqlalchemy.orm import relationship
|
|||
from nailgun import consts
|
||||
from nailgun.db.sqlalchemy.models.base import Base
|
||||
from nailgun.db.sqlalchemy.models.fields import JSON
|
||||
from nailgun.db.sqlalchemy.models.mutable import MutableDict
|
||||
from nailgun.db.sqlalchemy.models.mutable import MutableList
|
||||
|
||||
|
||||
|
@ -38,7 +39,7 @@ class Release(Base):
|
|||
id = Column(Integer, primary_key=True)
|
||||
name = Column(Unicode(100), nullable=False)
|
||||
version = Column(String(30), nullable=False)
|
||||
can_update_from_versions = Column(JSON, default=[],
|
||||
can_update_from_versions = Column(MutableList.as_mutable(JSON), default=[],
|
||||
nullable=False, server_default='[]')
|
||||
description = Column(Unicode)
|
||||
operating_system = Column(String(50), nullable=False)
|
||||
|
@ -50,18 +51,20 @@ class Release(Base):
|
|||
nullable=False,
|
||||
default=consts.RELEASE_STATES.unavailable
|
||||
)
|
||||
networks_metadata = Column(JSON, default={})
|
||||
attributes_metadata = Column(JSON, default={})
|
||||
volumes_metadata = Column(JSON, default={})
|
||||
modes_metadata = Column(JSON, default={})
|
||||
roles_metadata = Column(JSON, default={})
|
||||
network_roles_metadata = Column(JSON, default=[], server_default='[]')
|
||||
wizard_metadata = Column(JSON, default={})
|
||||
deployment_tasks = Column(JSON, default=[])
|
||||
vmware_attributes_metadata = Column(JSON, default=[])
|
||||
networks_metadata = Column(MutableDict.as_mutable(JSON), default={})
|
||||
attributes_metadata = Column(MutableDict.as_mutable(JSON), default={})
|
||||
volumes_metadata = Column(MutableDict.as_mutable(JSON), default={})
|
||||
modes_metadata = Column(MutableDict.as_mutable(JSON), default={})
|
||||
roles_metadata = Column(MutableDict.as_mutable(JSON), default={})
|
||||
network_roles_metadata = Column(
|
||||
MutableList.as_mutable(JSON), default=[], server_default='[]')
|
||||
wizard_metadata = Column(MutableDict.as_mutable(JSON), default={})
|
||||
deployment_tasks = Column(MutableList.as_mutable(JSON), default=[])
|
||||
vmware_attributes_metadata = Column(
|
||||
MutableDict.as_mutable(JSON), default={})
|
||||
components_metadata = Column(
|
||||
MutableList.as_mutable(JSON), default=[], server_default='[]')
|
||||
modes = Column(JSON, default=[])
|
||||
modes = Column(MutableList.as_mutable(JSON), default=[])
|
||||
clusters = relationship(
|
||||
"Cluster",
|
||||
primaryjoin="Release.id==Cluster.release_id",
|
||||
|
|
|
@ -18,8 +18,6 @@
|
|||
Release object and collection
|
||||
"""
|
||||
|
||||
import copy
|
||||
|
||||
from distutils.version import StrictVersion
|
||||
import yaml
|
||||
|
||||
|
@ -79,24 +77,19 @@ class Release(NailgunObject):
|
|||
:param role: a role dict
|
||||
:returns: None
|
||||
"""
|
||||
# mark sqlalchemy's attribute as dirty, so it will be flushed
|
||||
# when needed
|
||||
instance.roles_metadata = copy.deepcopy(instance.roles_metadata)
|
||||
instance.volumes_metadata = copy.deepcopy(instance.volumes_metadata)
|
||||
|
||||
instance.roles_metadata[role['name']] = role['meta']
|
||||
instance.volumes_metadata['volumes_roles_mapping'][role['name']] = \
|
||||
role.get('volumes_roles_mapping', [])
|
||||
# Data was changed in second level, so mark attribute as changed
|
||||
instance.volumes_metadata.changed()
|
||||
|
||||
@classmethod
|
||||
def remove_role(cls, instance, role_name):
|
||||
# mark sqlalchemy's attribute as dirty, so it will be flushed
|
||||
# when needed
|
||||
instance.roles_metadata = copy.deepcopy(instance.roles_metadata)
|
||||
instance.volumes_metadata = copy.deepcopy(instance.volumes_metadata)
|
||||
|
||||
result = instance.roles_metadata.pop(role_name, None)
|
||||
|
||||
instance.volumes_metadata['volumes_roles_mapping'].pop(role_name, None)
|
||||
# Data was changed in second level, so mark attribute as changed
|
||||
instance.volumes_metadata.changed()
|
||||
return bool(result)
|
||||
|
||||
@classmethod
|
||||
|
|
|
@ -14,7 +14,10 @@ kombu>=3.0.16
|
|||
netaddr>=0.7.12,!=0.7.16
|
||||
oslo.config>=2.3.0
|
||||
oslo.serialization>=1.4.0
|
||||
SQLAlchemy>=0.9.9,<1.1.0
|
||||
# MutableDict.pop has a bug in version 1.0.10. 'pop' takes 2 args instead of 3.
|
||||
# Before upping max version please ensure, that bug was fixed.
|
||||
# https://bitbucket.org/zzzeek/sqlalchemy/issues/3605
|
||||
SQLAlchemy>=0.9.9,<1.0.10
|
||||
# oslo.db has no upper bound for sqlalchemy-migrate, and latest
|
||||
# sqlalchemy-migrate requires conflicting version of pbr.
|
||||
sqlalchemy-migrate>=0.9.6
|
||||
|
|
Loading…
Reference in New Issue