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 import consts
|
||||||
from nailgun.db.sqlalchemy.models.base import Base
|
from nailgun.db.sqlalchemy.models.base import Base
|
||||||
from nailgun.db.sqlalchemy.models.fields import JSON
|
from nailgun.db.sqlalchemy.models.fields import JSON
|
||||||
|
from nailgun.db.sqlalchemy.models.mutable import MutableDict
|
||||||
from nailgun.db.sqlalchemy.models.mutable import MutableList
|
from nailgun.db.sqlalchemy.models.mutable import MutableList
|
||||||
|
|
||||||
|
|
||||||
|
@ -38,7 +39,7 @@ class Release(Base):
|
||||||
id = Column(Integer, primary_key=True)
|
id = Column(Integer, primary_key=True)
|
||||||
name = Column(Unicode(100), nullable=False)
|
name = Column(Unicode(100), nullable=False)
|
||||||
version = Column(String(30), 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='[]')
|
nullable=False, server_default='[]')
|
||||||
description = Column(Unicode)
|
description = Column(Unicode)
|
||||||
operating_system = Column(String(50), nullable=False)
|
operating_system = Column(String(50), nullable=False)
|
||||||
|
@ -50,18 +51,20 @@ class Release(Base):
|
||||||
nullable=False,
|
nullable=False,
|
||||||
default=consts.RELEASE_STATES.unavailable
|
default=consts.RELEASE_STATES.unavailable
|
||||||
)
|
)
|
||||||
networks_metadata = Column(JSON, default={})
|
networks_metadata = Column(MutableDict.as_mutable(JSON), default={})
|
||||||
attributes_metadata = Column(JSON, default={})
|
attributes_metadata = Column(MutableDict.as_mutable(JSON), default={})
|
||||||
volumes_metadata = Column(JSON, default={})
|
volumes_metadata = Column(MutableDict.as_mutable(JSON), default={})
|
||||||
modes_metadata = Column(JSON, default={})
|
modes_metadata = Column(MutableDict.as_mutable(JSON), default={})
|
||||||
roles_metadata = Column(JSON, default={})
|
roles_metadata = Column(MutableDict.as_mutable(JSON), default={})
|
||||||
network_roles_metadata = Column(JSON, default=[], server_default='[]')
|
network_roles_metadata = Column(
|
||||||
wizard_metadata = Column(JSON, default={})
|
MutableList.as_mutable(JSON), default=[], server_default='[]')
|
||||||
deployment_tasks = Column(JSON, default=[])
|
wizard_metadata = Column(MutableDict.as_mutable(JSON), default={})
|
||||||
vmware_attributes_metadata = Column(JSON, default=[])
|
deployment_tasks = Column(MutableList.as_mutable(JSON), default=[])
|
||||||
|
vmware_attributes_metadata = Column(
|
||||||
|
MutableDict.as_mutable(JSON), default={})
|
||||||
components_metadata = Column(
|
components_metadata = Column(
|
||||||
MutableList.as_mutable(JSON), default=[], server_default='[]')
|
MutableList.as_mutable(JSON), default=[], server_default='[]')
|
||||||
modes = Column(JSON, default=[])
|
modes = Column(MutableList.as_mutable(JSON), default=[])
|
||||||
clusters = relationship(
|
clusters = relationship(
|
||||||
"Cluster",
|
"Cluster",
|
||||||
primaryjoin="Release.id==Cluster.release_id",
|
primaryjoin="Release.id==Cluster.release_id",
|
||||||
|
|
|
@ -18,8 +18,6 @@
|
||||||
Release object and collection
|
Release object and collection
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import copy
|
|
||||||
|
|
||||||
from distutils.version import StrictVersion
|
from distutils.version import StrictVersion
|
||||||
import yaml
|
import yaml
|
||||||
|
|
||||||
|
@ -79,24 +77,19 @@ class Release(NailgunObject):
|
||||||
:param role: a role dict
|
:param role: a role dict
|
||||||
:returns: None
|
: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.roles_metadata[role['name']] = role['meta']
|
||||||
instance.volumes_metadata['volumes_roles_mapping'][role['name']] = \
|
instance.volumes_metadata['volumes_roles_mapping'][role['name']] = \
|
||||||
role.get('volumes_roles_mapping', [])
|
role.get('volumes_roles_mapping', [])
|
||||||
|
# Data was changed in second level, so mark attribute as changed
|
||||||
|
instance.volumes_metadata.changed()
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def remove_role(cls, instance, role_name):
|
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)
|
result = instance.roles_metadata.pop(role_name, None)
|
||||||
|
|
||||||
instance.volumes_metadata['volumes_roles_mapping'].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)
|
return bool(result)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
|
|
@ -14,7 +14,10 @@ kombu>=3.0.16
|
||||||
netaddr>=0.7.12,!=0.7.16
|
netaddr>=0.7.12,!=0.7.16
|
||||||
oslo.config>=2.3.0
|
oslo.config>=2.3.0
|
||||||
oslo.serialization>=1.4.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
|
# oslo.db has no upper bound for sqlalchemy-migrate, and latest
|
||||||
# sqlalchemy-migrate requires conflicting version of pbr.
|
# sqlalchemy-migrate requires conflicting version of pbr.
|
||||||
sqlalchemy-migrate>=0.9.6
|
sqlalchemy-migrate>=0.9.6
|
||||||
|
|
Loading…
Reference in New Issue