Add new sysinv tables k8s upgrades
The commit creates two new sysinv tables called kube_upgrade and kube_host_upgrade in preparation for kubernetes upgrades. Tested an install to ensure the new tables are defined in the database. Story: 2006590 Task: 36941 Change-Id: I8eed72b4a6ca34a1ac96dacb789669f91829af8e Signed-off-by: Kristine Bujold <kristine.bujold@windriver.com>
This commit is contained in:
parent
9077e37762
commit
83ae827e1c
|
@ -1,2 +1,2 @@
|
|||
SRC_DIR="sysinv"
|
||||
TIS_PATCH_VER=334
|
||||
TIS_PATCH_VER=335
|
||||
|
|
|
@ -1388,4 +1388,21 @@ class FilesystemAlreadyExists(Conflict):
|
|||
|
||||
|
||||
class FilesystemNotFound(NotFound):
|
||||
message = _("No Host FS with id %(fs_id)s not found")
|
||||
message = _("Host FS with id %(fs_id)s not found")
|
||||
|
||||
|
||||
class KubeHostUpgradeAlreadyExists(Conflict):
|
||||
message = _("A Kube Host Upgrade with id %(host_upgrade_id)s already exists.")
|
||||
|
||||
|
||||
class KubeHostUpgradeNotFound(NotFound):
|
||||
message = _("Kube Host Upgrade with id %(host_upgrade_id)s not found")
|
||||
|
||||
|
||||
class KubeUpgradeAlreadyExists(Conflict):
|
||||
message = _(
|
||||
"A Kube Upgrade with id %(upgrade_id)s already exists.")
|
||||
|
||||
|
||||
class KubeUpgradeNotFound(NotFound):
|
||||
message = _("Kube Upgrade with id %(upgrade_id)s not found")
|
||||
|
|
|
@ -4434,3 +4434,111 @@ class Connection(object):
|
|||
|
||||
:param fs_id: The id or uuid of a filesystem.
|
||||
"""
|
||||
|
||||
@abc.abstractmethod
|
||||
def kube_host_upgrade_create(self, forhostid, values):
|
||||
"""Create a new kube_host_upgrade for a host.
|
||||
|
||||
:param forhostid: uuid or id of an ihost
|
||||
:param values: A dict containing several items used to identify
|
||||
and track the kube_host_upgrade.
|
||||
:returns: A kube_host_upgrade.
|
||||
"""
|
||||
|
||||
@abc.abstractmethod
|
||||
def kube_host_upgrade_get(self, host_upgrade_id):
|
||||
"""Return kube_host_upgrade.
|
||||
|
||||
:param host_upgrade_id: The id or uuid of a kube_host_upgrade.
|
||||
:returns: A kube_host_upgrade.
|
||||
"""
|
||||
|
||||
@abc.abstractmethod
|
||||
def kube_host_upgrade_get_list(self, limit=None, marker=None,
|
||||
sort_key=None, sort_dir=None):
|
||||
"""Return a list of kube_host_upgrade.
|
||||
|
||||
:param limit: Maximum number of kube_host_upgrade to return.
|
||||
:param marker: the last item of the previous page; we return the next
|
||||
result set.
|
||||
:param sort_key: Attribute by which results should be sorted.
|
||||
:param sort_dir: direction in which results should be sorted.
|
||||
(asc, desc)
|
||||
"""
|
||||
|
||||
@abc.abstractmethod
|
||||
def kube_host_upgrade_get_by_host(self, host_id):
|
||||
"""List all the kube_host_upgrade for a given ihost.
|
||||
|
||||
:param host_id: The id or uuid of an ihost.
|
||||
:returns: A list of kube_host_upgrade.
|
||||
"""
|
||||
|
||||
@abc.abstractmethod
|
||||
def kube_host_upgrade_update(self, host_upgrade_id, values):
|
||||
"""Update properties of a kube_host_upgrade.
|
||||
|
||||
:param host_upgrade_id: The id or uuid of a kube_host_upgrade.
|
||||
:param values: Dict of values to update. May be a partial list.
|
||||
:returns: A kube_host_upgrade.
|
||||
"""
|
||||
|
||||
@abc.abstractmethod
|
||||
def kube_host_upgrade_destroy(self, host_upgrade_id):
|
||||
"""Destroy a kube_host_upgrade.
|
||||
|
||||
:param host_upgrade_id: The id or uuid of a kube_host_upgrade.
|
||||
"""
|
||||
|
||||
@abc.abstractmethod
|
||||
def kube_upgrade_create(self, values):
|
||||
"""Create a new kube_upgrade for an isystem.
|
||||
|
||||
:param values: A dict containing several items used to identify
|
||||
and track the kube_upgrade settings.
|
||||
:returns: A kube_upgrade.
|
||||
"""
|
||||
|
||||
@abc.abstractmethod
|
||||
def kube_upgrade_get(self, upgrade_id):
|
||||
"""Return an kube_upgrade.
|
||||
|
||||
:param upgrade_id: The id or uuid of an kube_upgrade.
|
||||
:returns: A kube_upgrade.
|
||||
"""
|
||||
|
||||
@abc.abstractmethod
|
||||
def kube_upgrade_get_one(self):
|
||||
"""Return exactly one kube_upgrade.
|
||||
|
||||
:returns: A kube_upgrade.
|
||||
"""
|
||||
|
||||
@abc.abstractmethod
|
||||
def kube_upgrade_get_list(self, limit=None, marker=None,
|
||||
sort_key=None, sort_dir=None):
|
||||
"""Return a list of kube_upgrade.
|
||||
|
||||
:param limit: Maximum number of kube_upgrade to return.
|
||||
:param marker: the last item of the previous page; we return the next
|
||||
result set.
|
||||
:param sort_key: Attribute by which results should be sorted.
|
||||
:param sort_dir: direction in which results should be sorted.
|
||||
(asc, desc)
|
||||
"""
|
||||
|
||||
@abc.abstractmethod
|
||||
def kube_upgrade_update(self, upgrade_id, values):
|
||||
"""Update properties of an kube_upgrade.
|
||||
|
||||
:param upgrade_id: The id or uuid of a kube_upgrade.
|
||||
:param values: Dict of values to update.
|
||||
:returns: A kube_upgrade.
|
||||
"""
|
||||
|
||||
@abc.abstractmethod
|
||||
def kube_upgrade_destroy(self, upgrade_id):
|
||||
"""Destroy an kube_upgrade.
|
||||
|
||||
:param upgrade_id: The id or uuid of a kube_upgrade.
|
||||
"""
|
||||
|
|
|
@ -1132,6 +1132,25 @@ def add_host_fs_filter(query, value):
|
|||
return add_identity_filter(query, value, use_fsname=True)
|
||||
|
||||
|
||||
def add_kube_host_upgrade_filter_by_host(query, value):
|
||||
if utils.is_int_like(value):
|
||||
return query.filter_by(host_id=value)
|
||||
else:
|
||||
query = query.join(models.ihost,
|
||||
models.KubeHostUpgrade.host_id == models.ihost.id)
|
||||
return query.filter(models.ihost.uuid == value)
|
||||
|
||||
|
||||
def add_kube_host_upgrade_filter(query, value):
|
||||
"""Adds an upgrade-specific filter to a query.
|
||||
|
||||
:param query: Initial query to add filter to.
|
||||
:param value: Value for filtering results by.
|
||||
:return: Modified query.
|
||||
"""
|
||||
return add_identity_filter(query, value)
|
||||
|
||||
|
||||
def add_host_fs_filter_by_ihost(query, value):
|
||||
if utils.is_int_like(value):
|
||||
return query.filter_by(forihostid=value)
|
||||
|
@ -8061,3 +8080,140 @@ class Connection(api.Connection):
|
|||
model_query(models.HostFs, read_deleted="no").\
|
||||
filter_by(id=fs_id).\
|
||||
delete()
|
||||
|
||||
def _kube_host_upgrade_get(self, host_upgrade_id):
|
||||
query = model_query(models.KubeHostUpgrade)
|
||||
query = add_identity_filter(query, host_upgrade_id)
|
||||
|
||||
try:
|
||||
result = query.one()
|
||||
except NoResultFound:
|
||||
raise exception.KubeHostUpgradeNotFound(
|
||||
host_upgrade_id=host_upgrade_id)
|
||||
|
||||
return result
|
||||
|
||||
@objects.objectify(objects.kube_host_upgrade)
|
||||
def kube_host_upgrade_create(self, host_id, values):
|
||||
if not values.get('uuid'):
|
||||
values['uuid'] = uuidutils.generate_uuid()
|
||||
values['host_id'] = int(host_id)
|
||||
upgrade = models.KubeHostUpgrade()
|
||||
upgrade.update(values)
|
||||
with _session_for_write() as session:
|
||||
try:
|
||||
session.add(upgrade)
|
||||
session.flush()
|
||||
except db_exc.DBDuplicateEntry:
|
||||
raise exception.KubeHostUpgradeAlreadyExists(
|
||||
uuid=values['uuid'], host=host_id)
|
||||
|
||||
return self._kube_host_upgrade_get(values['uuid'])
|
||||
|
||||
@objects.objectify(objects.kube_host_upgrade)
|
||||
def kube_host_upgrade_get(self, host_upgrade_id):
|
||||
return self._kube_host_upgrade_get(host_upgrade_id)
|
||||
|
||||
@objects.objectify(objects.kube_host_upgrade)
|
||||
def kube_host_upgrade_get_list(self, limit=None, marker=None,
|
||||
sort_key=None, sort_dir=None):
|
||||
return _paginate_query(models.KubeHostUpgrade, limit, marker,
|
||||
sort_key, sort_dir)
|
||||
|
||||
@objects.objectify(objects.kube_host_upgrade)
|
||||
def kube_host_upgrade_get_by_host(self, host_id):
|
||||
query = model_query(models.KubeHostUpgrade)
|
||||
query = add_kube_host_upgrade_filter_by_host(query, host_id)
|
||||
return query.one()
|
||||
|
||||
@objects.objectify(objects.kube_host_upgrade)
|
||||
def kube_host_upgrade_update(self, host_upgrade_id, values):
|
||||
with _session_for_write() as session:
|
||||
query = model_query(models.KubeHostUpgrade, read_deleted="no",
|
||||
session=session)
|
||||
query = add_kube_host_upgrade_filter(query, host_upgrade_id)
|
||||
|
||||
count = query.update(values, synchronize_session='fetch')
|
||||
|
||||
if count != 1:
|
||||
raise exception.KubeHostUpgradeNotFound(
|
||||
host_upgrade_id=host_upgrade_id)
|
||||
return query.one()
|
||||
|
||||
def kube_host_upgrade_destroy(self, host_upgrade_id):
|
||||
with _session_for_write() as session:
|
||||
# Delete physically since it has unique columns
|
||||
if uuidutils.is_uuid_like(host_upgrade_id):
|
||||
model_query(models.KubeHostUpgrade,
|
||||
read_deleted="no", session=session).filter_by(
|
||||
uuid=host_upgrade_id).delete()
|
||||
else:
|
||||
model_query(models.KubeHostUpgrade, read_deleted="no").\
|
||||
filter_by(id=host_upgrade_id).delete()
|
||||
|
||||
def _kube_upgrade_get(self, upgrade_id):
|
||||
query = model_query(models.KubeUpgrade)
|
||||
query = add_identity_filter(query, upgrade_id)
|
||||
|
||||
try:
|
||||
return query.one()
|
||||
except NoResultFound:
|
||||
raise exception.KubeUpgradeNotFound(upgrade_id=upgrade_id)
|
||||
|
||||
@objects.objectify(objects.kube_upgrade)
|
||||
def kube_upgrade_create(self, values):
|
||||
if not values.get('uuid'):
|
||||
values['uuid'] = uuidutils.generate_uuid()
|
||||
kube_upgrade = models.KubeUpgrade()
|
||||
kube_upgrade.update(values)
|
||||
with _session_for_write() as session:
|
||||
try:
|
||||
session.add(kube_upgrade)
|
||||
session.flush()
|
||||
except db_exc.DBDuplicateEntry:
|
||||
raise exception.KubeUpgradeAlreadyExists(uuid=values['uuid'])
|
||||
return self._kube_upgrade_get(values['uuid'])
|
||||
|
||||
@objects.objectify(objects.kube_upgrade)
|
||||
def kube_upgrade_get(self, server):
|
||||
return self._kube_upgrade_get(server)
|
||||
|
||||
@objects.objectify(objects.kube_upgrade)
|
||||
def kube_upgrade_get_one(self):
|
||||
query = model_query(models.KubeUpgrade)
|
||||
|
||||
try:
|
||||
return query.one()
|
||||
except NoResultFound:
|
||||
raise exception.NotFound()
|
||||
|
||||
@objects.objectify(objects.kube_upgrade)
|
||||
def kube_upgrade_get_list(self, limit=None, marker=None,
|
||||
sort_key=None, sort_dir=None):
|
||||
|
||||
query = model_query(models.KubeUpgrade)
|
||||
|
||||
return _paginate_query(models.KubeUpgrade, limit, marker,
|
||||
sort_key, sort_dir, query)
|
||||
|
||||
@objects.objectify(objects.kube_upgrade)
|
||||
def kube_upgrade_update(self, upgrade_id, values):
|
||||
with _session_for_write() as session:
|
||||
query = model_query(models.KubeUpgrade, session=session)
|
||||
query = add_identity_filter(query, upgrade_id)
|
||||
|
||||
count = query.update(values, synchronize_session='fetch')
|
||||
if count != 1:
|
||||
raise exception.KubeUpgradeNotFound(upgrade_id=upgrade_id)
|
||||
return query.one()
|
||||
|
||||
def kube_upgrade_destroy(self, upgrade_id):
|
||||
with _session_for_write() as session:
|
||||
query = model_query(models.KubeUpgrade, session=session)
|
||||
query = add_identity_filter(query, upgrade_id)
|
||||
|
||||
try:
|
||||
query.one()
|
||||
except NoResultFound:
|
||||
raise exception.KubeUpgradeNotFound(upgrade_id=upgrade_id)
|
||||
query.delete()
|
||||
|
|
|
@ -0,0 +1,88 @@
|
|||
# vim: tabstop=4 shiftwidth=4 softtabstop=4
|
||||
#
|
||||
# Copyright (c) 2019 Wind River Systems, Inc.
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
|
||||
from sqlalchemy import DateTime, String, Integer
|
||||
from sqlalchemy import Column, MetaData, Table, ForeignKey
|
||||
|
||||
ENGINE = 'InnoDB'
|
||||
CHARSET = 'utf8'
|
||||
|
||||
|
||||
def upgrade(migrate_engine):
|
||||
"""
|
||||
This database upgrade creates a new kube_upgrade and kube_host_upgrade
|
||||
tables for storing kubernetes upgrade info.
|
||||
"""
|
||||
|
||||
meta = MetaData()
|
||||
meta.bind = migrate_engine
|
||||
|
||||
meta = MetaData()
|
||||
meta.bind = migrate_engine
|
||||
|
||||
kube_upgrade = Table(
|
||||
'kube_upgrade',
|
||||
meta,
|
||||
Column('created_at', DateTime),
|
||||
Column('updated_at', DateTime),
|
||||
Column('deleted_at', DateTime),
|
||||
|
||||
Column('id', Integer, primary_key=True, nullable=False),
|
||||
Column('uuid', String(36), unique=True),
|
||||
|
||||
Column('from_version', String(255)),
|
||||
Column('to_version', String(255)),
|
||||
Column('state', String(128)),
|
||||
Column('reserved_1', String(255)),
|
||||
Column('reserved_2', String(255)),
|
||||
Column('reserved_3', String(255)),
|
||||
Column('reserved_4', String(255)),
|
||||
|
||||
mysql_engine=ENGINE,
|
||||
mysql_charset=CHARSET,
|
||||
)
|
||||
|
||||
kube_upgrade.create()
|
||||
|
||||
Table('i_host',
|
||||
meta,
|
||||
Column('id', Integer, primary_key=True, nullable=False),
|
||||
mysql_engine=ENGINE, mysql_charset=CHARSET, autoload=True)
|
||||
|
||||
kube_host_upgrade = Table(
|
||||
'kube_host_upgrade',
|
||||
meta,
|
||||
Column('created_at', DateTime),
|
||||
Column('updated_at', DateTime),
|
||||
Column('deleted_at', DateTime),
|
||||
|
||||
Column('id', Integer, primary_key=True, nullable=False),
|
||||
Column('uuid', String(36), unique=True),
|
||||
|
||||
Column('target_version', String(255)),
|
||||
Column('status', String(128)),
|
||||
Column('reserved_1', String(255)),
|
||||
Column('reserved_2', String(255)),
|
||||
Column('reserved_3', String(255)),
|
||||
Column('reserved_4', String(255)),
|
||||
|
||||
Column('host_id', Integer,
|
||||
ForeignKey('i_host.id', ondelete='CASCADE')),
|
||||
|
||||
mysql_engine=ENGINE,
|
||||
mysql_charset=CHARSET,
|
||||
)
|
||||
|
||||
kube_host_upgrade.create()
|
||||
|
||||
|
||||
def downgrade(migrate_engine):
|
||||
meta = MetaData()
|
||||
meta.bind = migrate_engine
|
||||
|
||||
# Downgrade is unsupported.
|
||||
raise NotImplementedError('SysInv database downgrade is unsupported.')
|
|
@ -242,6 +242,7 @@ class ihost(Base):
|
|||
system = relationship("isystem")
|
||||
|
||||
host_upgrade = relationship("HostUpgrade", uselist=False)
|
||||
kube_host_upgrade = relationship("KubeHostUpgrade", uselist=False)
|
||||
|
||||
|
||||
class inode(Base):
|
||||
|
@ -1725,6 +1726,39 @@ class KubeAppReleases(Base):
|
|||
UniqueConstraint('release', 'namespace', 'app_id', name='u_app_release_namespace')
|
||||
|
||||
|
||||
class KubeHostUpgrade(Base):
|
||||
__tablename__ = 'kube_host_upgrade'
|
||||
|
||||
id = Column(Integer, primary_key=True)
|
||||
uuid = Column(String(36))
|
||||
|
||||
target_version = Column(String(255), nullable=False)
|
||||
status = Column(String(128), nullable=False)
|
||||
reserved_1 = Column(String(255))
|
||||
reserved_2 = Column(String(255))
|
||||
reserved_3 = Column(String(255))
|
||||
reserved_4 = Column(String(255))
|
||||
|
||||
host_id = Column(Integer, ForeignKey('i_host.id', ondelete='CASCADE'))
|
||||
|
||||
host = relationship("ihost", lazy="joined", join_depth=1)
|
||||
|
||||
|
||||
class KubeUpgrade(Base):
|
||||
__tablename__ = 'kube_upgrade'
|
||||
|
||||
id = Column(Integer, primary_key=True)
|
||||
uuid = Column(String(36))
|
||||
|
||||
from_version = Column(String(255), nullable=False)
|
||||
to_version = Column(String(255), nullable=False)
|
||||
state = Column(String(128), nullable=False)
|
||||
reserved_1 = Column(String(255))
|
||||
reserved_2 = Column(String(255))
|
||||
reserved_3 = Column(String(255))
|
||||
reserved_4 = Column(String(255))
|
||||
|
||||
|
||||
class HostFs(Base):
|
||||
__tablename__ = 'host_fs'
|
||||
|
||||
|
|
|
@ -38,6 +38,8 @@ from sysinv.objects import host
|
|||
from sysinv.objects import host_upgrade
|
||||
from sysinv.objects import kube_app
|
||||
from sysinv.objects import kube_app_releases
|
||||
from sysinv.objects import kube_host_upgrade
|
||||
from sysinv.objects import kube_upgrade
|
||||
from sysinv.objects import interface
|
||||
from sysinv.objects import interface_ae
|
||||
from sysinv.objects import interface_ethernet
|
||||
|
@ -185,6 +187,8 @@ helm_overrides = helm_overrides.HelmOverrides
|
|||
label = label.Label
|
||||
kube_app = kube_app.KubeApp
|
||||
kube_app_releases = kube_app_releases.KubeAppReleases
|
||||
kube_host_upgrade = kube_host_upgrade.KubeHostUpgrade
|
||||
kube_upgrade = kube_upgrade.KubeUpgrade
|
||||
datanetwork = datanetwork.DataNetwork
|
||||
host_fs = host_fs.HostFS
|
||||
|
||||
|
@ -254,6 +258,8 @@ __all__ = (system,
|
|||
helm_overrides,
|
||||
kube_app,
|
||||
kube_app_releases,
|
||||
kube_host_upgrade,
|
||||
kube_upgrade,
|
||||
datanetwork,
|
||||
interface_network,
|
||||
host_fs,
|
||||
|
|
|
@ -0,0 +1,47 @@
|
|||
#
|
||||
# Copyright (c) 2019 Wind River Systems, Inc.
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
|
||||
# vim: tabstop=4 shiftwidth=4 softtabstop=4
|
||||
# coding=utf-8
|
||||
#
|
||||
|
||||
from sysinv.db import api as db_api
|
||||
from sysinv.objects import base
|
||||
from sysinv.objects import utils
|
||||
|
||||
|
||||
class KubeHostUpgrade(base.SysinvObject):
|
||||
|
||||
dbapi = db_api.get_instance()
|
||||
|
||||
fields = {
|
||||
'id': int,
|
||||
'uuid': utils.str_or_none,
|
||||
|
||||
'target_version': utils.int_or_none,
|
||||
'status': utils.str_or_none,
|
||||
'reserved_1': utils.str_or_none,
|
||||
'reserved_2': utils.str_or_none,
|
||||
'reserved_3': utils.str_or_none,
|
||||
'reserved_4': utils.str_or_none,
|
||||
|
||||
'host_id': int,
|
||||
'host_uuid': utils.str_or_none,
|
||||
}
|
||||
|
||||
_foreign_fields = {'host_uuid': 'host:uuid'}
|
||||
|
||||
@base.remotable_classmethod
|
||||
def get_by_uuid(cls, context, uuid):
|
||||
return cls.dbapi.kube_host_upgrade_get(uuid)
|
||||
|
||||
@base.remotable_classmethod
|
||||
def get_by_host_id(cls, context, host_id):
|
||||
return cls.dbapi.kube_host_upgrade_get_by_host(host_id)
|
||||
|
||||
def save_changes(self, context, updates):
|
||||
self.dbapi.kube_host_upgrade_update(self.uuid, # pylint: disable=no-member
|
||||
updates)
|
|
@ -0,0 +1,39 @@
|
|||
#
|
||||
# Copyright (c) 2019 Wind River Systems, Inc.
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
|
||||
# vim: tabstop=4 shiftwidth=4 softtabstop=4
|
||||
# coding=utf-8
|
||||
#
|
||||
|
||||
from sysinv.db import api as db_api
|
||||
from sysinv.objects import base
|
||||
from sysinv.objects import utils
|
||||
|
||||
|
||||
class KubeUpgrade(base.SysinvObject):
|
||||
|
||||
dbapi = db_api.get_instance()
|
||||
|
||||
fields = {
|
||||
'id': int,
|
||||
'uuid': utils.str_or_none,
|
||||
|
||||
'from_version': utils.str_or_none,
|
||||
'to_version': utils.int_or_none,
|
||||
'state': utils.str_or_none,
|
||||
'reserved_1': utils.str_or_none,
|
||||
'reserved_2': utils.str_or_none,
|
||||
'reserved_3': utils.str_or_none,
|
||||
'reserved_4': utils.str_or_none,
|
||||
}
|
||||
|
||||
@base.remotable_classmethod
|
||||
def get_by_uuid(cls, context, uuid):
|
||||
return cls.dbapi.kube_upgrade_get(uuid)
|
||||
|
||||
def save_changes(self, context, updates):
|
||||
self.dbapi.kube_upgrade_update(self.uuid, # pylint: disable=no-member
|
||||
updates)
|
|
@ -132,6 +132,7 @@ class BaseSystemTestCase(BaseIPv4Mixin, DbTestCase):
|
|||
def _create_test_common(self):
|
||||
self._create_test_system()
|
||||
self._create_test_load()
|
||||
self._create_test_kube_upgrades()
|
||||
self._create_test_drbd()
|
||||
self._create_test_remotelogging()
|
||||
self._create_test_user()
|
||||
|
@ -178,6 +179,29 @@ class BaseSystemTestCase(BaseIPv4Mixin, DbTestCase):
|
|||
self.ptp = dbutils.create_test_ptp(
|
||||
system_id=self.system.id)
|
||||
|
||||
def _create_test_kube_upgrades(self):
|
||||
# Test kube_upgrade and kube_host_upgrade table creation
|
||||
upgrade = dbutils.create_test_kube_upgrade()
|
||||
host_upgrade = dbutils.create_test_kube_host_upgrade()
|
||||
|
||||
# Test updating state in kube_upgrade table
|
||||
old_state = upgrade['state']
|
||||
new_state = 'upgrading'
|
||||
self.assertNotEqual(old_state, new_state)
|
||||
|
||||
res = self.dbapi.kube_upgrade_update(
|
||||
upgrade['id'], {'state': new_state})
|
||||
self.assertEqual(new_state, res['state'])
|
||||
|
||||
# Test updating status in kube_host_upgrade table
|
||||
old_status = host_upgrade['status']
|
||||
new_status = new_state
|
||||
self.assertNotEqual(old_status, new_status)
|
||||
|
||||
res = self.dbapi.kube_host_upgrade_update(
|
||||
host_upgrade['uuid'], {'status': new_status})
|
||||
self.assertEqual(new_status, res['status'])
|
||||
|
||||
def _create_test_network(self, name, nettype, subnet, ranges=None):
|
||||
if not ranges:
|
||||
ranges = [(str(subnet[2]), str(subnet[-2]))]
|
||||
|
|
|
@ -26,6 +26,8 @@ from sysinv.openstack.common import jsonutils as json
|
|||
from sysinv.db import api as db_api
|
||||
|
||||
|
||||
from sysinv.openstack.common import uuidutils
|
||||
|
||||
fake_info = {"foo": "bar"}
|
||||
|
||||
ipmi_info = json.dumps(
|
||||
|
@ -234,6 +236,68 @@ def create_test_load(**kw):
|
|||
return dbapi.load_create(load)
|
||||
|
||||
|
||||
def get_test_kube_upgrade():
|
||||
upgrade = {
|
||||
'id': 1,
|
||||
'uuid': uuidutils.generate_uuid(),
|
||||
"from_version": 1,
|
||||
"to_version": 2,
|
||||
"state": "tbd",
|
||||
"reserved_1": "res1",
|
||||
"reserved_2": "res2",
|
||||
"reserved_3": "res3",
|
||||
"reserved_4": "res4",
|
||||
}
|
||||
return upgrade
|
||||
|
||||
|
||||
def get_test_kube_host_upgrade():
|
||||
upgrade = {
|
||||
'id': 1,
|
||||
'uuid': uuidutils.generate_uuid(),
|
||||
"target_version": 2,
|
||||
"status": "tbd",
|
||||
"reserved_1": "",
|
||||
"reserved_2": "",
|
||||
"reserved_3": "",
|
||||
"reserved_4": "",
|
||||
"host_id": 1,
|
||||
}
|
||||
return upgrade
|
||||
|
||||
|
||||
def create_test_kube_upgrade():
|
||||
upgrade = get_test_kube_upgrade()
|
||||
|
||||
# Let DB generate ID and uuid
|
||||
if 'id' in upgrade:
|
||||
del upgrade['id']
|
||||
|
||||
if 'uuid' in upgrade:
|
||||
del upgrade['uuid']
|
||||
|
||||
dbapi = db_api.get_instance()
|
||||
return dbapi.kube_upgrade_create(upgrade)
|
||||
|
||||
|
||||
def create_test_kube_host_upgrade():
|
||||
upgrade = get_test_kube_upgrade()
|
||||
|
||||
# Let DB generate ID, uuid and host_id
|
||||
if 'id' in upgrade:
|
||||
del upgrade['id']
|
||||
|
||||
if 'uuid' in upgrade:
|
||||
del upgrade['uuid']
|
||||
|
||||
if 'host_id' in upgrade:
|
||||
del upgrade['host_id']
|
||||
|
||||
dbapi = db_api.get_instance()
|
||||
hostid = 1
|
||||
return dbapi.kube_host_upgrade_create(hostid, upgrade)
|
||||
|
||||
|
||||
# Create test user object
|
||||
def get_test_user(**kw):
|
||||
user = {
|
||||
|
|
|
@ -0,0 +1,99 @@
|
|||
# vim: tabstop=4 shiftwidth=4 softtabstop=4
|
||||
# coding=utf-8
|
||||
#
|
||||
#
|
||||
# Copyright (c) 2019 Wind River Systems, Inc.
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
#
|
||||
|
||||
from sysinv.db import api as db_api
|
||||
from sysinv.db.sqlalchemy import models
|
||||
from sysinv import objects
|
||||
from sysinv.tests.db import base
|
||||
from sysinv.tests.db import utils
|
||||
|
||||
|
||||
class TestKubeHostUpgradesObject(base.DbTestCase):
|
||||
|
||||
def setUp(self):
|
||||
super(TestKubeHostUpgradesObject, self).setUp()
|
||||
self.fake_upgrade_data = utils.get_test_kube_host_upgrade()
|
||||
self.obj_data = objects.kube_host_upgrade.from_db_object(
|
||||
self._get_db_data(self.fake_upgrade_data))
|
||||
self.dbapi = db_api.get_instance()
|
||||
|
||||
def test_load(self):
|
||||
uuid = self.fake_upgrade_data['uuid']
|
||||
self.mox.StubOutWithMock(self.dbapi, 'kube_host_upgrade_get')
|
||||
|
||||
self.dbapi.kube_host_upgrade_get(uuid).AndReturn(self.obj_data)
|
||||
self.mox.ReplayAll()
|
||||
|
||||
objects.kube_host_upgrade.get_by_uuid(self.admin_context, uuid)
|
||||
self.mox.VerifyAll()
|
||||
|
||||
def test_save(self):
|
||||
uuid = self.fake_upgrade_data['uuid']
|
||||
self.mox.StubOutWithMock(self.dbapi, 'kube_host_upgrade_get')
|
||||
self.mox.StubOutWithMock(self.dbapi, 'kube_host_upgrade_update')
|
||||
|
||||
self.dbapi.kube_host_upgrade_get(uuid).AndReturn(self.obj_data)
|
||||
self.dbapi.kube_host_upgrade_update(uuid, {'status': "upgrading"})
|
||||
self.mox.ReplayAll()
|
||||
|
||||
n = objects.kube_host_upgrade.get_by_uuid(self.admin_context, uuid)
|
||||
n.status = "upgrading"
|
||||
n.save()
|
||||
self.mox.VerifyAll()
|
||||
|
||||
def test_refresh(self):
|
||||
uuid = self.fake_upgrade_data['uuid']
|
||||
self.mox.StubOutWithMock(self.dbapi, 'kube_host_upgrade_get')
|
||||
|
||||
first_obj = objects.kube_host_upgrade.from_db_object(self._get_db_data(
|
||||
dict(self.fake_upgrade_data, target_version=1)))
|
||||
second_obj = objects.kube_host_upgrade.from_db_object(self._get_db_data(
|
||||
dict(self.fake_upgrade_data, target_version=2)))
|
||||
|
||||
self.dbapi.kube_host_upgrade_get(uuid).AndReturn(first_obj)
|
||||
self.dbapi.kube_host_upgrade_get(uuid).AndReturn(second_obj)
|
||||
self.mox.ReplayAll()
|
||||
|
||||
n = objects.kube_host_upgrade.get_by_uuid(self.admin_context, uuid)
|
||||
self.assertEqual(n.target_version, 1)
|
||||
n.refresh()
|
||||
self.assertEqual(n.target_version, 2)
|
||||
self.mox.VerifyAll()
|
||||
|
||||
def test_objectify(self):
|
||||
|
||||
@objects.objectify(objects.kube_host_upgrade)
|
||||
def _convert_db_data():
|
||||
return self._get_db_data(self.fake_upgrade_data)
|
||||
|
||||
self.assertIsInstance(self._get_db_data(self.fake_upgrade_data),
|
||||
models.KubeHostUpgrade)
|
||||
self.assertIsInstance(_convert_db_data(), objects.kube_host_upgrade)
|
||||
|
||||
def test_objectify_many(self):
|
||||
def _get_db_data_many():
|
||||
data = []
|
||||
for i in range(5):
|
||||
data.append(self._get_db_data(self.fake_upgrade_data))
|
||||
return data
|
||||
|
||||
@objects.objectify(objects.kube_host_upgrade)
|
||||
def _convert_db_data_many():
|
||||
return _get_db_data_many()
|
||||
|
||||
for n in _get_db_data_many():
|
||||
self.assertIsInstance(n, models.KubeHostUpgrade)
|
||||
for n in _convert_db_data_many():
|
||||
self.assertIsInstance(n, objects.kube_host_upgrade)
|
||||
|
||||
def _get_db_data(self, fake_upgrade_data):
|
||||
n = models.KubeHostUpgrade()
|
||||
n.update(fake_upgrade_data)
|
||||
return n
|
|
@ -0,0 +1,99 @@
|
|||
# vim: tabstop=4 shiftwidth=4 softtabstop=4
|
||||
# coding=utf-8
|
||||
#
|
||||
#
|
||||
# Copyright (c) 2019 Wind River Systems, Inc.
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
#
|
||||
|
||||
from sysinv.db import api as db_api
|
||||
from sysinv.db.sqlalchemy import models
|
||||
from sysinv import objects
|
||||
from sysinv.tests.db import base
|
||||
from sysinv.tests.db import utils
|
||||
|
||||
|
||||
class TestKubeUpgradesObject(base.DbTestCase):
|
||||
|
||||
def setUp(self):
|
||||
super(TestKubeUpgradesObject, self).setUp()
|
||||
self.fake_upgrade_data = utils.get_test_kube_upgrade()
|
||||
self.obj_data = objects.kube_upgrade.from_db_object(
|
||||
self._get_db_data(self.fake_upgrade_data))
|
||||
self.dbapi = db_api.get_instance()
|
||||
|
||||
def test_load(self):
|
||||
uuid = self.fake_upgrade_data['uuid']
|
||||
self.mox.StubOutWithMock(self.dbapi, 'kube_upgrade_get')
|
||||
|
||||
self.dbapi.kube_upgrade_get(uuid).AndReturn(self.obj_data)
|
||||
self.mox.ReplayAll()
|
||||
|
||||
objects.kube_upgrade.get_by_uuid(self.admin_context, uuid)
|
||||
self.mox.VerifyAll()
|
||||
|
||||
def test_save(self):
|
||||
uuid = self.fake_upgrade_data['uuid']
|
||||
self.mox.StubOutWithMock(self.dbapi, 'kube_upgrade_get')
|
||||
self.mox.StubOutWithMock(self.dbapi, 'kube_upgrade_update')
|
||||
|
||||
self.dbapi.kube_upgrade_get(uuid).AndReturn(self.obj_data)
|
||||
self.dbapi.kube_upgrade_update(uuid, {'state': "upgrading"})
|
||||
self.mox.ReplayAll()
|
||||
|
||||
n = objects.kube_upgrade.get_by_uuid(self.admin_context, uuid)
|
||||
n.state = "upgrading"
|
||||
n.save()
|
||||
self.mox.VerifyAll()
|
||||
|
||||
def test_refresh(self):
|
||||
uuid = self.fake_upgrade_data['uuid']
|
||||
self.mox.StubOutWithMock(self.dbapi, 'kube_upgrade_get')
|
||||
|
||||
first_obj = objects.kube_upgrade.from_db_object(self._get_db_data(
|
||||
dict(self.fake_upgrade_data, to_version=1)))
|
||||
second_obj = objects.kube_upgrade.from_db_object(self._get_db_data(
|
||||
dict(self.fake_upgrade_data, to_version=2)))
|
||||
|
||||
self.dbapi.kube_upgrade_get(uuid).AndReturn(first_obj)
|
||||
self.dbapi.kube_upgrade_get(uuid).AndReturn(second_obj)
|
||||
self.mox.ReplayAll()
|
||||
|
||||
n = objects.kube_upgrade.get_by_uuid(self.admin_context, uuid)
|
||||
self.assertEqual(n.to_version, 1)
|
||||
n.refresh()
|
||||
self.assertEqual(n.to_version, 2)
|
||||
self.mox.VerifyAll()
|
||||
|
||||
def test_objectify(self):
|
||||
|
||||
@objects.objectify(objects.kube_upgrade)
|
||||
def _convert_db_data():
|
||||
return self._get_db_data(self.fake_upgrade_data)
|
||||
|
||||
self.assertIsInstance(self._get_db_data(self.fake_upgrade_data),
|
||||
models.KubeUpgrade)
|
||||
self.assertIsInstance(_convert_db_data(), objects.kube_upgrade)
|
||||
|
||||
def test_objectify_many(self):
|
||||
def _get_db_data_many():
|
||||
data = []
|
||||
for i in range(5):
|
||||
data.append(self._get_db_data(self.fake_upgrade_data))
|
||||
return data
|
||||
|
||||
@objects.objectify(objects.kube_upgrade)
|
||||
def _convert_db_data_many():
|
||||
return _get_db_data_many()
|
||||
|
||||
for n in _get_db_data_many():
|
||||
self.assertIsInstance(n, models.KubeUpgrade)
|
||||
for n in _convert_db_data_many():
|
||||
self.assertIsInstance(n, objects.kube_upgrade)
|
||||
|
||||
def _get_db_data(self, fake_upgrade_data):
|
||||
n = models.KubeUpgrade()
|
||||
n.update(fake_upgrade_data)
|
||||
return n
|
Loading…
Reference in New Issue