Use JsonEncoded{Dict,List} from oslo_db
Change-Id: I6aec5e40cefaab7f740bfa02d0386b7fc93aaae1
This commit is contained in:
parent
da8f9c8529
commit
f91748619c
|
@ -18,17 +18,15 @@
|
||||||
SQLAlchemy models for baremetal data.
|
SQLAlchemy models for baremetal data.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import json
|
|
||||||
|
|
||||||
from oslo_config import cfg
|
from oslo_config import cfg
|
||||||
from oslo_db import options as db_options
|
from oslo_db import options as db_options
|
||||||
from oslo_db.sqlalchemy import models
|
from oslo_db.sqlalchemy import models
|
||||||
|
from oslo_db.sqlalchemy import types as db_types
|
||||||
import six.moves.urllib.parse as urlparse
|
import six.moves.urllib.parse as urlparse
|
||||||
from sqlalchemy import Boolean, Column, DateTime
|
from sqlalchemy import Boolean, Column, DateTime
|
||||||
from sqlalchemy import ForeignKey, Integer
|
from sqlalchemy import ForeignKey, Integer
|
||||||
from sqlalchemy import schema, String, Text
|
from sqlalchemy import schema, String, Text
|
||||||
from sqlalchemy.ext.declarative import declarative_base
|
from sqlalchemy.ext.declarative import declarative_base
|
||||||
from sqlalchemy.types import TypeDecorator, TEXT
|
|
||||||
|
|
||||||
from ironic.common.i18n import _
|
from ironic.common.i18n import _
|
||||||
from ironic.common import paths
|
from ironic.common import paths
|
||||||
|
@ -55,40 +53,6 @@ def table_args():
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
class JsonEncodedType(TypeDecorator):
|
|
||||||
"""Abstract base type serialized as json-encoded string in db."""
|
|
||||||
type = None
|
|
||||||
impl = TEXT
|
|
||||||
|
|
||||||
def process_bind_param(self, value, dialect):
|
|
||||||
if value is None:
|
|
||||||
# Save default value according to current type to keep the
|
|
||||||
# interface the consistent.
|
|
||||||
value = self.type()
|
|
||||||
elif not isinstance(value, self.type):
|
|
||||||
raise TypeError("%s supposes to store %s objects, but %s given"
|
|
||||||
% (self.__class__.__name__,
|
|
||||||
self.type.__name__,
|
|
||||||
type(value).__name__))
|
|
||||||
serialized_value = json.dumps(value)
|
|
||||||
return serialized_value
|
|
||||||
|
|
||||||
def process_result_value(self, value, dialect):
|
|
||||||
if value is not None:
|
|
||||||
value = json.loads(value)
|
|
||||||
return value
|
|
||||||
|
|
||||||
|
|
||||||
class JSONEncodedDict(JsonEncodedType):
|
|
||||||
"""Represents dict serialized as json-encoded string in db."""
|
|
||||||
type = dict
|
|
||||||
|
|
||||||
|
|
||||||
class JSONEncodedList(JsonEncodedType):
|
|
||||||
"""Represents list serialized as json-encoded string in db."""
|
|
||||||
type = list
|
|
||||||
|
|
||||||
|
|
||||||
class IronicBase(models.TimestampMixin,
|
class IronicBase(models.TimestampMixin,
|
||||||
models.ModelBase):
|
models.ModelBase):
|
||||||
|
|
||||||
|
@ -114,7 +78,7 @@ class Chassis(Base):
|
||||||
)
|
)
|
||||||
id = Column(Integer, primary_key=True)
|
id = Column(Integer, primary_key=True)
|
||||||
uuid = Column(String(36))
|
uuid = Column(String(36))
|
||||||
extra = Column(JSONEncodedDict)
|
extra = Column(db_types.JsonEncodedDict)
|
||||||
description = Column(String(255), nullable=True)
|
description = Column(String(255), nullable=True)
|
||||||
|
|
||||||
|
|
||||||
|
@ -128,7 +92,7 @@ class Conductor(Base):
|
||||||
)
|
)
|
||||||
id = Column(Integer, primary_key=True)
|
id = Column(Integer, primary_key=True)
|
||||||
hostname = Column(String(255), nullable=False)
|
hostname = Column(String(255), nullable=False)
|
||||||
drivers = Column(JSONEncodedList)
|
drivers = Column(db_types.JsonEncodedList)
|
||||||
online = Column(Boolean, default=True)
|
online = Column(Boolean, default=True)
|
||||||
|
|
||||||
|
|
||||||
|
@ -156,15 +120,15 @@ class Node(Base):
|
||||||
target_provision_state = Column(String(15), nullable=True)
|
target_provision_state = Column(String(15), nullable=True)
|
||||||
provision_updated_at = Column(DateTime, nullable=True)
|
provision_updated_at = Column(DateTime, nullable=True)
|
||||||
last_error = Column(Text, nullable=True)
|
last_error = Column(Text, nullable=True)
|
||||||
instance_info = Column(JSONEncodedDict)
|
instance_info = Column(db_types.JsonEncodedDict)
|
||||||
properties = Column(JSONEncodedDict)
|
properties = Column(db_types.JsonEncodedDict)
|
||||||
driver = Column(String(255))
|
driver = Column(String(255))
|
||||||
driver_info = Column(JSONEncodedDict)
|
driver_info = Column(db_types.JsonEncodedDict)
|
||||||
driver_internal_info = Column(JSONEncodedDict)
|
driver_internal_info = Column(db_types.JsonEncodedDict)
|
||||||
clean_step = Column(JSONEncodedDict)
|
clean_step = Column(db_types.JsonEncodedDict)
|
||||||
|
|
||||||
raid_config = Column(JSONEncodedDict)
|
raid_config = Column(db_types.JsonEncodedDict)
|
||||||
target_raid_config = Column(JSONEncodedDict)
|
target_raid_config = Column(db_types.JsonEncodedDict)
|
||||||
|
|
||||||
# NOTE(deva): this is the host name of the conductor which has
|
# NOTE(deva): this is the host name of the conductor which has
|
||||||
# acquired a TaskManager lock on the node.
|
# acquired a TaskManager lock on the node.
|
||||||
|
@ -185,7 +149,7 @@ class Node(Base):
|
||||||
console_enabled = Column(Boolean, default=False)
|
console_enabled = Column(Boolean, default=False)
|
||||||
inspection_finished_at = Column(DateTime, nullable=True)
|
inspection_finished_at = Column(DateTime, nullable=True)
|
||||||
inspection_started_at = Column(DateTime, nullable=True)
|
inspection_started_at = Column(DateTime, nullable=True)
|
||||||
extra = Column(JSONEncodedDict)
|
extra = Column(db_types.JsonEncodedDict)
|
||||||
|
|
||||||
|
|
||||||
class Port(Base):
|
class Port(Base):
|
||||||
|
@ -200,4 +164,4 @@ class Port(Base):
|
||||||
uuid = Column(String(36))
|
uuid = Column(String(36))
|
||||||
address = Column(String(18))
|
address = Column(String(18))
|
||||||
node_id = Column(Integer, ForeignKey('nodes.id'), nullable=True)
|
node_id = Column(Integer, ForeignKey('nodes.id'), nullable=True)
|
||||||
extra = Column(JSONEncodedDict)
|
extra = Column(db_types.JsonEncodedDict)
|
||||||
|
|
Loading…
Reference in New Issue