Merge "Add Datastore Version Registry Extension"
This commit is contained in:
commit
e19a7d4e50
|
@ -202,6 +202,8 @@ trove-manage datastore_version_update
|
|||
datastore version_name manager
|
||||
image_id packages active
|
||||
--image-tags <image_tags>
|
||||
--registry-ext <registry_ext>
|
||||
--repl-strategy <repl_strategy>
|
||||
|
||||
Add or update a datastore version. If the datastore version already exists,
|
||||
all values except the datastore name and version will be updated.
|
||||
|
@ -240,6 +242,14 @@ all values except the datastore name and version will be updated.
|
|||
than ID especially when new guest image is uploaded to Glance, Trove can pick
|
||||
up the latest image automatically for creating instances.
|
||||
|
||||
``--registry-ext``
|
||||
Extension for default datastore version managers. Allows the use of custom managers
|
||||
for each of the datastore versions supported by Trove.
|
||||
|
||||
``--repl-strategy``
|
||||
Extension for default strategy for replication. Allows the use of custom
|
||||
replication strategy for each of the datastores supported by Trove.
|
||||
|
||||
trove-manage db_downgrade
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
features:
|
||||
- Users with the administrator role can configure the datastore registry external
|
||||
for each datastore version using a command, without editing configuration files.
|
||||
|
|
@ -28,14 +28,21 @@ from trove.guestagent import volume
|
|||
|
||||
CONF = cfg.CONF
|
||||
# The guest_id opt definition must match the one in common/cfg.py
|
||||
CONF.register_opts([openstack_cfg.StrOpt('guest_id', default=None,
|
||||
help="ID of the Guest Instance."),
|
||||
openstack_cfg.StrOpt('instance_rpc_encr_key',
|
||||
help=('Key (OpenSSL aes_cbc) for '
|
||||
'instance RPC encryption.')),
|
||||
openstack_cfg.BoolOpt('network_isolation',
|
||||
help='whether to plug user defined '
|
||||
'port to database container')])
|
||||
CONF.register_opts([
|
||||
openstack_cfg.StrOpt('guest_id', default=None,
|
||||
help="ID of the Guest Instance."),
|
||||
openstack_cfg.StrOpt('instance_rpc_encr_key',
|
||||
help=('Key (OpenSSL aes_cbc) for '
|
||||
'instance RPC encryption.')),
|
||||
openstack_cfg.BoolOpt('network_isolation',
|
||||
help='whether to plug user defined '
|
||||
'port to database container'),
|
||||
openstack_cfg.StrOpt('replication_strategy',
|
||||
default='trove.guestagent.strategies.replication.'
|
||||
'mysql_gtid.MysqlGTIDReplication',
|
||||
help='Namespace to load replication strategies from.')
|
||||
])
|
||||
|
||||
LOG = logging.getLogger(__name__)
|
||||
|
||||
|
||||
|
@ -61,7 +68,7 @@ def main():
|
|||
|
||||
if not CONF.guest_id:
|
||||
msg = (_("The guest_id parameter is not set. guest_info.conf "
|
||||
"was not injected into the guest or not read by guestagent"))
|
||||
"was not injected into the guest or not read by guestagent"))
|
||||
raise RuntimeError(msg)
|
||||
if CONF.network_isolation:
|
||||
# disable user-defined port to avoid potential default gateway
|
||||
|
|
|
@ -62,16 +62,19 @@ class Commands(object):
|
|||
print(e)
|
||||
|
||||
def datastore_version_update(self, datastore, version_name, manager,
|
||||
image_id, packages, active, image_tags=None,
|
||||
version=None):
|
||||
image_id, packages, active, registry_ext,
|
||||
repl_strategy,
|
||||
image_tags=None, version=None):
|
||||
try:
|
||||
datastore_models.update_datastore_version(datastore,
|
||||
version_name,
|
||||
manager,
|
||||
image_id,
|
||||
image_tags,
|
||||
packages, active,
|
||||
version=version)
|
||||
datastore_models.update_datastore_version(
|
||||
datastore,
|
||||
version_name,
|
||||
manager,
|
||||
image_id,
|
||||
image_tags,
|
||||
packages, active,
|
||||
registry_ext, repl_strategy,
|
||||
version=version)
|
||||
print("Datastore version '%s(%s)' updated." %
|
||||
(version_name, version or version_name))
|
||||
except exception.DatastoreNotFound as e:
|
||||
|
@ -251,6 +254,16 @@ def main():
|
|||
'image_id',
|
||||
help='ID of the image used to create an instance of '
|
||||
'the datastore version.')
|
||||
parser.add_argument(
|
||||
'--registry-ext',
|
||||
help='Extension for default datastore managers. '
|
||||
'Allows the use of custom managers for each of '
|
||||
'the datastores supported by Trove.')
|
||||
parser.add_argument(
|
||||
'--repl-strategy',
|
||||
help='Extension for default strategy for replication. '
|
||||
'Allows the use of custom managers for each of '
|
||||
'the datastores supported by Trove.')
|
||||
parser.add_argument(
|
||||
'packages', help='Packages required by the datastore version that '
|
||||
'are installed on the guest image.')
|
||||
|
|
|
@ -993,6 +993,8 @@ mgmt_datastore_version = {
|
|||
"packages": package_list,
|
||||
"image": uuid,
|
||||
"image_tags": image_tags,
|
||||
"registry_ext": non_empty_string,
|
||||
"repl_strategy": non_empty_string,
|
||||
"active": {"enum": [True, False]},
|
||||
"default": {"enum": [True, False]},
|
||||
"version": non_empty_string
|
||||
|
@ -1010,6 +1012,8 @@ mgmt_datastore_version = {
|
|||
"packages": package_list,
|
||||
"image": uuid,
|
||||
"image_tags": image_tags,
|
||||
"registry_ext": non_empty_string,
|
||||
"repl_strategy": non_empty_string,
|
||||
"active": {"enum": [True, False]},
|
||||
"default": {"enum": [True, False]},
|
||||
"name": non_empty_string
|
||||
|
|
|
@ -534,7 +534,7 @@ common_opts = [
|
|||
cfg.BoolOpt(
|
||||
'enable_volume_az', default=False,
|
||||
help='If true create the volume in the same availability-zone as the '
|
||||
'instance'),
|
||||
'instance')
|
||||
]
|
||||
|
||||
# Mysql
|
||||
|
|
|
@ -20,3 +20,30 @@ DOCKER_HOST_NIC_MODE = "docker-hostnic"
|
|||
DOCKER_BRIDGE_MODE = "bridge"
|
||||
MYSQL_HOST_SOCKET_PATH = "/var/lib/mysqld"
|
||||
POSTGRESQL_HOST_SOCKET_PATH = "/var/lib/postgresql-socket"
|
||||
|
||||
REGISTRY_EXT_DEFAULTS = {
|
||||
'mysql':
|
||||
'trove.guestagent.datastore.mysql.manager.Manager',
|
||||
'mariadb':
|
||||
'trove.guestagent.datastore.mariadb.manager.Manager',
|
||||
'postgresql':
|
||||
'trove.guestagent.datastore.postgres.manager.PostgresManager',
|
||||
'percona':
|
||||
'trove.guestagent.datastore.experimental.percona.manager.Manager',
|
||||
'pxc':
|
||||
'trove.guestagent.datastore.experimental.pxc.manager.Manager',
|
||||
'redis':
|
||||
'trove.guestagent.datastore.experimental.redis.manager.Manager',
|
||||
'cassandra':
|
||||
'trove.guestagent.datastore.experimental.cassandra.manager.Manager',
|
||||
'couchbase':
|
||||
'trove.guestagent.datastore.experimental.couchbase.manager.Manager',
|
||||
'mongodb':
|
||||
'trove.guestagent.datastore.experimental.mongodb.manager.Manager',
|
||||
'couchdb':
|
||||
'trove.guestagent.datastore.experimental.couchdb.manager.Manager',
|
||||
'vertica':
|
||||
'trove.guestagent.datastore.experimental.vertica.manager.Manager',
|
||||
'db2':
|
||||
'trove.guestagent.datastore.experimental.db2.manager.Manager',
|
||||
}
|
||||
|
|
|
@ -20,6 +20,7 @@ from oslo_utils import uuidutils
|
|||
|
||||
from trove.common import cfg
|
||||
from trove.common.clients import create_nova_client
|
||||
from trove.common import constants
|
||||
from trove.common import exception
|
||||
from trove.common.i18n import _
|
||||
from trove.common import timeutils
|
||||
|
@ -212,6 +213,7 @@ class CapabilityOverride(BaseCapability):
|
|||
specific datastore version that overrides the default setting in the
|
||||
base capability's entry for Trove.
|
||||
"""
|
||||
|
||||
def __init__(self, db_info):
|
||||
super(CapabilityOverride, self).__init__(db_info)
|
||||
# This *may* be better solved with a join in the SQLAlchemy model but
|
||||
|
@ -467,6 +469,14 @@ class DatastoreVersion(object):
|
|||
def packages(self):
|
||||
return self.db_info.packages
|
||||
|
||||
@property
|
||||
def registry_ext(self):
|
||||
return self.db_info.registry_ext
|
||||
|
||||
@property
|
||||
def repl_strategy(self):
|
||||
return self.db_info.repl_strategy
|
||||
|
||||
@property
|
||||
def active(self):
|
||||
return (True if self.db_info.active else False)
|
||||
|
@ -600,7 +610,8 @@ def update_datastore(name, default_version):
|
|||
|
||||
|
||||
def update_datastore_version(datastore, name, manager, image_id, image_tags,
|
||||
packages, active, version=None, new_name=None):
|
||||
packages, active, registry_ext=None,
|
||||
repl_strategy=None, version=None, new_name=None):
|
||||
"""Create or update datastore version."""
|
||||
version = version or name
|
||||
db_api.configure_db(CONF)
|
||||
|
@ -622,6 +633,16 @@ def update_datastore_version(datastore, name, manager, image_id, image_tags,
|
|||
if type(image_tags) is list else image_tags)
|
||||
ds_version.packages = packages
|
||||
ds_version.active = active
|
||||
if not registry_ext:
|
||||
registry_ext = constants.REGISTRY_EXT_DEFAULTS.get(manager)
|
||||
ds_version.registry_ext = registry_ext
|
||||
|
||||
if not repl_strategy:
|
||||
repl_strategy = "%(repl_namespace)s.%(repl_strategy)s" % {
|
||||
'repl_namespace': CONF.get(manager).replication_namespace,
|
||||
'repl_strategy': CONF.get(manager).replication_strategy
|
||||
}
|
||||
ds_version.repl_strategy = repl_strategy
|
||||
|
||||
db_api.save(ds_version)
|
||||
|
||||
|
|
|
@ -84,14 +84,17 @@ class DatastoreVersionView(object):
|
|||
"links": self._build_links(),
|
||||
}
|
||||
if include_datastore_id:
|
||||
datastore_version_dict["datastore"] = (self.datastore_version.
|
||||
datastore_id)
|
||||
datastore_version_dict["datastore"] = (
|
||||
self.datastore_version.datastore_id)
|
||||
if self.context.is_admin:
|
||||
datastore_version_dict['active'] = self.datastore_version.active
|
||||
datastore_version_dict['packages'] = (self.datastore_version.
|
||||
packages)
|
||||
datastore_version_dict['packages'] = (
|
||||
self.datastore_version.packages)
|
||||
datastore_version_dict['image'] = self.datastore_version.image_id
|
||||
|
||||
datastore_version_dict[
|
||||
'registry_ext'] = self.datastore_version.registry_ext
|
||||
datastore_version_dict[
|
||||
'repl_strategy'] = self.datastore_version.repl_strategy
|
||||
image_tags = []
|
||||
if self.datastore_version.image_tags:
|
||||
image_tags = self.datastore_version.image_tags.split(',')
|
||||
|
|
|
@ -0,0 +1,79 @@
|
|||
# Copyright 2023 Bizfly Cloud
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
from sqlalchemy.schema import Column
|
||||
from sqlalchemy.schema import MetaData
|
||||
from sqlalchemy.sql.expression import select
|
||||
from sqlalchemy.sql.expression import update
|
||||
from sqlalchemy import text
|
||||
|
||||
from trove.common.constants import REGISTRY_EXT_DEFAULTS
|
||||
from trove.db.sqlalchemy.migrate_repo.schema import Table
|
||||
from trove.db.sqlalchemy.migrate_repo.schema import Text
|
||||
|
||||
|
||||
repl_namespaces = {
|
||||
"mariadb": "trove.guestagent.strategies.replication.mariadb_gtid",
|
||||
"mongodb":
|
||||
"trove.guestagent.strategies.replication.experimental.mongo_impl",
|
||||
"mysql": "trove.guestagent.strategies.replication.mysql_gtid",
|
||||
"percona": "trove.guestagent.strategies.replication.mysql_gtid",
|
||||
"postgresql": "trove.guestagent.strategies.replication.postgresql",
|
||||
"pxc": "trove.guestagent.strategies.replication.mysql_gtid",
|
||||
"redis": "trove.guestagent.strategies.replication.experimental.redis_sync",
|
||||
|
||||
}
|
||||
|
||||
repl_strategies = {
|
||||
"mariadb": "MariaDBGTIDReplication",
|
||||
"mongodb": "Replication",
|
||||
"mysql": "MysqlGTIDReplication",
|
||||
"percona": "MysqlGTIDReplication",
|
||||
"postgresql": "PostgresqlReplicationStreaming",
|
||||
"pxc": "MysqlGTIDReplication",
|
||||
"redis": "RedisSyncReplication",
|
||||
|
||||
}
|
||||
|
||||
|
||||
def upgrade(migrate_engine):
|
||||
meta = MetaData()
|
||||
meta.bind = migrate_engine
|
||||
|
||||
ds_version = Table('datastore_versions', meta, autoload=True)
|
||||
ds_version.create_column(Column('registry_ext', Text(), nullable=True))
|
||||
ds_version.create_column(Column('repl_strategy', Text(), nullable=True))
|
||||
|
||||
ds_versions = select(
|
||||
columns=[text("id"), text("manager")],
|
||||
from_obj=ds_version
|
||||
).execute()
|
||||
# Use 'name' value as init 'version' value
|
||||
for version in ds_versions:
|
||||
registry_ext = REGISTRY_EXT_DEFAULTS.get(version.manager, '')
|
||||
repl_strategy = "%(repl_namespace)s.%(repl_strategy)s" % {
|
||||
'repl_namespace': repl_namespaces.get(version.manager, ''),
|
||||
'repl_strategy': repl_strategies.get(version.manager, '')
|
||||
}
|
||||
update(
|
||||
table=ds_version,
|
||||
whereclause=text("id='%s'" % version.id),
|
||||
values=dict(
|
||||
registry_ext=registry_ext,
|
||||
repl_strategy=repl_strategy)
|
||||
).execute()
|
||||
|
||||
ds_version.c.registry_ext.alter(nullable=False)
|
||||
ds_version.c.repl_strategy.alter(nullable=False)
|
|
@ -52,6 +52,8 @@ class DatastoreVersionController(wsgi.Controller):
|
|||
# For backward compatibility, use name as default value for version if
|
||||
# not specified
|
||||
version_str = body['version'].get('version', version_name)
|
||||
registry_ext = body['version'].get('registry_ext')
|
||||
repl_strategy = body['version'].get('repl_strategy')
|
||||
|
||||
LOG.info("Tenant: '%(tenant)s' is adding the datastore "
|
||||
"version: '%(version)s' to datastore: '%(datastore)s'",
|
||||
|
@ -80,10 +82,11 @@ class DatastoreVersionController(wsgi.Controller):
|
|||
raise exception.DatastoreVersionAlreadyExists(
|
||||
name=version_name, version=version_str)
|
||||
except exception.DatastoreVersionNotFound:
|
||||
models.update_datastore_version(datastore.name, version_name,
|
||||
manager, image_id, image_tags,
|
||||
packages, active,
|
||||
version=version_str)
|
||||
models.update_datastore_version(
|
||||
datastore.name, version_name,
|
||||
manager, image_id, image_tags,
|
||||
packages, active, registry_ext, repl_strategy,
|
||||
version=version_str)
|
||||
|
||||
if default:
|
||||
models.update_datastore(datastore.name, version_name)
|
||||
|
@ -129,6 +132,9 @@ class DatastoreVersionController(wsgi.Controller):
|
|||
if type(packages) is list:
|
||||
packages = ','.join(packages)
|
||||
|
||||
registry_ext = body.get('registry_ext', datastore_version.registry_ext)
|
||||
repl_strategy = body.get(
|
||||
'repl_strategy', datastore_version.repl_strategy)
|
||||
if image_id or image_tags:
|
||||
client = clients.create_glance_client(context)
|
||||
common_glance.get_image_id(client, image_id, image_tags)
|
||||
|
@ -147,12 +153,12 @@ class DatastoreVersionController(wsgi.Controller):
|
|||
if not image_id and not image_tags:
|
||||
raise exception.BadRequest("Image must be specified.")
|
||||
|
||||
models.update_datastore_version(datastore_version.datastore_name,
|
||||
datastore_version.name,
|
||||
manager, image_id, image_tags,
|
||||
packages, active,
|
||||
version=datastore_version.version,
|
||||
new_name=name)
|
||||
models.update_datastore_version(
|
||||
datastore_version.datastore_name,
|
||||
datastore_version.name,
|
||||
manager, image_id, image_tags,
|
||||
packages, active, registry_ext, repl_strategy,
|
||||
version=datastore_version.version, new_name=name)
|
||||
|
||||
if default:
|
||||
models.update_datastore(datastore_version.datastore_name,
|
||||
|
|
|
@ -32,6 +32,8 @@ class DatastoreVersionView(object):
|
|||
"packages": (self.datastore_version.packages.split(
|
||||
',') if self.datastore_version.packages else ['']),
|
||||
"active": self.datastore_version.active,
|
||||
"registry_ext": self.datastore_version.registry_ext,
|
||||
"repl_strategy": self.datastore_version.repl_strategy,
|
||||
"default": self.datastore_version.default}
|
||||
|
||||
return {'version': datastore_version_dict}
|
||||
|
|
|
@ -23,42 +23,18 @@ handles RPC calls relating to Platform specific operations.
|
|||
|
||||
"""
|
||||
|
||||
from itertools import chain
|
||||
import os
|
||||
|
||||
from itertools import chain
|
||||
|
||||
from oslo_log import log as logging
|
||||
|
||||
from trove.common import cfg
|
||||
from trove.common import constants
|
||||
from trove.common.i18n import _
|
||||
from trove.common import utils
|
||||
|
||||
LOG = logging.getLogger(__name__)
|
||||
defaults = {
|
||||
'mysql':
|
||||
'trove.guestagent.datastore.mysql.manager.Manager',
|
||||
'mariadb':
|
||||
'trove.guestagent.datastore.mariadb.manager.Manager',
|
||||
'postgresql':
|
||||
'trove.guestagent.datastore.postgres.manager.PostgresManager',
|
||||
'percona':
|
||||
'trove.guestagent.datastore.experimental.percona.manager.Manager',
|
||||
'pxc':
|
||||
'trove.guestagent.datastore.experimental.pxc.manager.Manager',
|
||||
'redis':
|
||||
'trove.guestagent.datastore.experimental.redis.manager.Manager',
|
||||
'cassandra':
|
||||
'trove.guestagent.datastore.experimental.cassandra.manager.Manager',
|
||||
'couchbase':
|
||||
'trove.guestagent.datastore.experimental.couchbase.manager.Manager',
|
||||
'mongodb':
|
||||
'trove.guestagent.datastore.experimental.mongodb.manager.Manager',
|
||||
'couchdb':
|
||||
'trove.guestagent.datastore.experimental.couchdb.manager.Manager',
|
||||
'vertica':
|
||||
'trove.guestagent.datastore.experimental.vertica.manager.Manager',
|
||||
'db2':
|
||||
'trove.guestagent.datastore.experimental.db2.manager.Manager',
|
||||
}
|
||||
CONF = cfg.CONF
|
||||
|
||||
|
||||
|
@ -67,8 +43,8 @@ def get_custom_managers():
|
|||
|
||||
|
||||
def datastore_registry():
|
||||
return dict(chain(defaults.items(),
|
||||
get_custom_managers().items()))
|
||||
return dict(chain(constants.REGISTRY_EXT_DEFAULTS.items(),
|
||||
get_custom_managers().items()))
|
||||
|
||||
|
||||
def get_filesystem_volume_stats(fs_path):
|
||||
|
|
|
@ -37,6 +37,12 @@ def get_instance(manager):
|
|||
if not __replication_instance or manager != __replication_manager:
|
||||
replication_strategy = get_strategy(manager)
|
||||
__replication_namespace = CONF.get(manager).replication_namespace
|
||||
|
||||
if CONF.replication_strategy:
|
||||
replication_strategy = CONF.replication_strategy.split('.')[-1]
|
||||
__replication_namespace = '.'.join(
|
||||
CONF.replication_strategy.split('.')[0:-1])
|
||||
|
||||
replication_strategy_cls = get_strategy_cls(
|
||||
replication_strategy, __replication_namespace)
|
||||
__replication_instance = replication_strategy_cls()
|
||||
|
|
|
@ -33,6 +33,7 @@ from sqlalchemy import func
|
|||
from trove.backup.models import Backup
|
||||
from trove.common import cfg
|
||||
from trove.common import clients
|
||||
from trove.common import constants
|
||||
from trove.common import crypto_utils as cu
|
||||
from trove.common import exception
|
||||
from trove.common.i18n import _
|
||||
|
@ -992,6 +993,28 @@ class BaseInstance(SimpleInstance):
|
|||
|
||||
return userdata if userdata else ""
|
||||
|
||||
@property
|
||||
def datastore_registry_ext(self):
|
||||
registry_ext = constants.REGISTRY_EXT_DEFAULTS.get(
|
||||
self.ds_version.manager)
|
||||
if self.ds_version.registry_ext:
|
||||
registry_ext = self.ds_version.registry_ext
|
||||
|
||||
return "%(manager)s:%(registry_ext)s" % {
|
||||
"manager": self.ds_version.manager,
|
||||
"registry_ext": registry_ext
|
||||
}
|
||||
|
||||
@property
|
||||
def datastore_repl_strategy(self):
|
||||
if self.ds_version.repl_strategy:
|
||||
return self.ds_version.repl_strategy
|
||||
|
||||
return "%s.%s" % (
|
||||
CONF.get(self.ds_version.manager).replication_namespace,
|
||||
CONF.get(self.ds_version.manager).replication_strategy
|
||||
)
|
||||
|
||||
def get_injected_files(self,
|
||||
datastore_manager,
|
||||
datastore_version,
|
||||
|
@ -1014,8 +1037,11 @@ class BaseInstance(SimpleInstance):
|
|||
"datastore_manager=%s\n"
|
||||
"datastore_version=%s\n"
|
||||
"tenant_id=%s\n"
|
||||
"datastore_registry_ext=%s\n"
|
||||
"replication_strategy=%s\n"
|
||||
% (self.id, datastore_manager, datastore_version,
|
||||
self.tenant_id)
|
||||
self.tenant_id, self.datastore_registry_ext,
|
||||
self.datastore_repl_strategy)
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
@ -67,6 +67,8 @@ class TestDatastoreVersionController(trove_testtools.TestCase):
|
|||
"datastore_manager": "mysql",
|
||||
"image": image_id,
|
||||
"image_tags": [],
|
||||
"registry_ext": "registry_ext",
|
||||
"repl_strategy": "repl_strategy",
|
||||
"active": True,
|
||||
"default": False
|
||||
}
|
||||
|
@ -85,6 +87,8 @@ class TestDatastoreVersionController(trove_testtools.TestCase):
|
|||
"name": ver_name,
|
||||
"datastore_manager": "mysql",
|
||||
"image_tags": ['a', 'b', 'c', 'd', 'e', 'f'],
|
||||
"registry_ext": "registry_ext",
|
||||
"repl_strategy": "repl_strategy",
|
||||
"active": True,
|
||||
"default": False
|
||||
}
|
||||
|
@ -104,6 +108,8 @@ class TestDatastoreVersionController(trove_testtools.TestCase):
|
|||
"datastore_manager": "mysql",
|
||||
"image": image_id,
|
||||
"image_tags": [],
|
||||
"registry_ext": "registry_ext",
|
||||
"repl_strategy": "repl_strategy",
|
||||
"active": True,
|
||||
"default": False
|
||||
}
|
||||
|
@ -129,6 +135,8 @@ class TestDatastoreVersionController(trove_testtools.TestCase):
|
|||
"datastore_manager": "mysql",
|
||||
"image": image_id,
|
||||
"image_tags": [],
|
||||
"registry_ext": "registry_ext",
|
||||
"repl_strategy": "repl_strategy",
|
||||
"packages": "test-pkg",
|
||||
"active": True,
|
||||
"default": True
|
||||
|
@ -152,6 +160,8 @@ class TestDatastoreVersionController(trove_testtools.TestCase):
|
|||
"datastore_manager": "mysql",
|
||||
"image": image_id,
|
||||
"image_tags": [],
|
||||
"registry_ext": "registry_ext",
|
||||
"repl_strategy": "repl_strategy",
|
||||
"packages": "",
|
||||
"active": True,
|
||||
"default": False,
|
||||
|
@ -177,6 +187,8 @@ class TestDatastoreVersionController(trove_testtools.TestCase):
|
|||
"name": ver_name,
|
||||
"datastore_manager": "mysql",
|
||||
"image_tags": ["trove", "mysql"],
|
||||
"registry_ext": "registry_ext",
|
||||
"repl_strategy": "repl_strategy",
|
||||
"active": True,
|
||||
"default": True
|
||||
}
|
||||
|
@ -209,6 +221,8 @@ class TestDatastoreVersionController(trove_testtools.TestCase):
|
|||
"datastore_manager": "mysql",
|
||||
"image": image_id,
|
||||
"image_tags": [],
|
||||
"registry_ext": "registry_ext",
|
||||
"repl_strategy": "repl_strategy",
|
||||
"packages": "test-pkg",
|
||||
"active": True,
|
||||
"default": True
|
||||
|
|
|
@ -63,6 +63,8 @@ class MockMgmtInstanceTest(trove_testtools.TestCase):
|
|||
name='5.5' + str(uuid.uuid4()),
|
||||
manager='mysql',
|
||||
image_id=str(uuid.uuid4()),
|
||||
registry_ext="registry_ext",
|
||||
repl_strategy="repl_strategy",
|
||||
active=1,
|
||||
packages="mysql-server-5.5"
|
||||
)
|
||||
|
|
|
@ -136,6 +136,8 @@ class CreateInstanceTest(trove_testtools.TestCase):
|
|||
manager="mysql",
|
||||
image_id="image_id",
|
||||
packages="",
|
||||
registry_ext="registry_ext",
|
||||
repl_strategy="repl_strategy",
|
||||
active=True))
|
||||
self.volume_size = 1
|
||||
self.az = "az"
|
||||
|
@ -264,6 +266,8 @@ class TestInstanceUpgrade(trove_testtools.TestCase):
|
|||
packages=str(uuid.uuid4()),
|
||||
datastore_id=self.datastore.id,
|
||||
manager='test',
|
||||
registry_ext="registry_ext",
|
||||
repl_strategy="repl_strategy",
|
||||
active=1)
|
||||
|
||||
self.datastore_version2 = datastore_models.DBDatastoreVersion.create(
|
||||
|
@ -273,6 +277,8 @@ class TestInstanceUpgrade(trove_testtools.TestCase):
|
|||
packages=str(uuid.uuid4()),
|
||||
datastore_id=self.datastore.id,
|
||||
manager='test',
|
||||
registry_ext="registry_ext",
|
||||
repl_strategy="repl_strategy",
|
||||
active=1)
|
||||
|
||||
self.safe_nova_client = clients.create_nova_client
|
||||
|
@ -337,6 +343,8 @@ class TestReplication(trove_testtools.TestCase):
|
|||
packages=str(uuid.uuid4()),
|
||||
datastore_id=self.datastore.id,
|
||||
manager='mysql',
|
||||
registry_ext="registry_ext",
|
||||
repl_strategy="repl_strategy",
|
||||
active=1)
|
||||
|
||||
self.databases = []
|
||||
|
|
|
@ -59,6 +59,8 @@ class BaseInstanceStatusTestCase(trove_testtools.TestCase):
|
|||
name='5.7' + str(uuid.uuid4()),
|
||||
manager='mysql',
|
||||
image_id=str(uuid.uuid4()),
|
||||
registry_ext="registry_ext",
|
||||
repl_strategy="repl_strategy",
|
||||
active=1,
|
||||
packages="mysql-server-5.7"
|
||||
)
|
||||
|
|
Loading…
Reference in New Issue