summaryrefslogtreecommitdiff
path: root/trove/configuration
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2017-02-05 06:46:47 +0000
committerGerrit Code Review <review@openstack.org>2017-02-05 06:46:47 +0000
commitb5cf0c58f24e8196a8f358f156df8aa8c094df6d (patch)
tree4c2d6b494fb8f2fa9efa4a5dce183935c02cae42 /trove/configuration
parent577d43b02d200b5b60eefc875f1542faa09ebfd9 (diff)
parent9bca402ec3f651fb9017c20dc27601a548cc79e1 (diff)
downloadtrove-b5cf0c58f24e8196a8f358f156df8aa8c094df6d.tar.gz
Merge "Add configuration support for clusters"
Diffstat (limited to 'trove/configuration')
-rw-r--r--trove/configuration/models.py16
-rw-r--r--trove/configuration/service.py39
2 files changed, 45 insertions, 10 deletions
diff --git a/trove/configuration/models.py b/trove/configuration/models.py
index 7a240cb5..6639cc88 100644
--- a/trove/configuration/models.py
+++ b/trove/configuration/models.py
@@ -209,6 +209,21 @@ class Configuration(object):
item["deleted_at"] = None
DBConfigurationParameter.save(item)
+ @staticmethod
+ def find(context, configuration_id, datastore_version_id):
+ try:
+ info = Configuration.load(context, configuration_id)
+ if (info.datastore_version_id == datastore_version_id):
+ return Configuration(context, configuration_id)
+ except exception.ModelNotFoundError:
+ raise exception.NotFound(
+ message='Configuration group id: %s could not be found.'
+ % configuration_id)
+
+ raise exception.ConfigurationDatastoreNotMatchInstance(
+ config_datastore_version=info.datastore_version_id,
+ instance_datastore_version=datastore_version_id)
+
class DBConfiguration(dbmodels.DatabaseModelBase):
_data_fields = ['name', 'description', 'tenant_id', 'datastore_version_id',
@@ -256,6 +271,7 @@ class DBDatastoreConfigurationParameters(dbmodels.DatabaseModelBase):
class DatastoreConfigurationParameters(object):
+
def __init__(self, db_info):
self.db_info = db_info
diff --git a/trove/configuration/service.py b/trove/configuration/service.py
index 485e6e17..e7668a88 100644
--- a/trove/configuration/service.py
+++ b/trove/configuration/service.py
@@ -18,6 +18,7 @@ from datetime import datetime
from oslo_log import log as logging
import six
+from trove.cluster import models as cluster_models
import trove.common.apischema as apischema
from trove.common import cfg
from trove.common import exception
@@ -198,6 +199,8 @@ class ConfigurationsController(wsgi.Controller):
deleted_at)
models.Configuration.save(group, items)
self._refresh_on_all_instances(context, id)
+ self._refresh_on_all_clusters(context, id)
+
return wsgi.Result(None, 202)
def edit(self, req, body, tenant_id, id):
@@ -211,25 +214,41 @@ class ConfigurationsController(wsgi.Controller):
body['configuration'])
models.Configuration.save(group, items)
self._refresh_on_all_instances(context, id)
+ self._refresh_on_all_clusters(context, id)
def _refresh_on_all_instances(self, context, configuration_id):
- """Refresh a configuration group on all its instances.
+ """Refresh a configuration group on all single instances.
"""
- dbinstances = instances_models.DBInstance.find_all(
+ LOG.debug("Re-applying configuration group '%s' to all instances."
+ % configuration_id)
+ single_instances = instances_models.DBInstance.find_all(
tenant_id=context.tenant,
configuration_id=configuration_id,
+ cluster_id=None,
deleted=False).all()
- LOG.debug(
- "All instances with configuration group '%s' on tenant '%s': %s"
- % (configuration_id, context.tenant, dbinstances))
-
config = models.Configuration(context, configuration_id)
- for dbinstance in dbinstances:
- LOG.debug("Applying configuration group '%s' to instance: %s"
- % (configuration_id, dbinstance.id))
+ for dbinstance in single_instances:
+ LOG.debug("Re-applying configuration to instance: %s"
+ % dbinstance.id)
instance = instances_models.Instance.load(context, dbinstance.id)
- instance.update_overrides(config)
+ instance.update_configuration(config)
+
+ def _refresh_on_all_clusters(self, context, configuration_id):
+ """Refresh a configuration group on all clusters.
+ """
+ LOG.debug("Re-applying configuration group '%s' to all clusters."
+ % configuration_id)
+ clusters = cluster_models.DBCluster.find_all(
+ tenant_id=context.tenant,
+ configuration_id=configuration_id,
+ deleted=False).all()
+
+ for dbcluster in clusters:
+ LOG.debug("Re-applying configuration to cluster: %s"
+ % dbcluster.id)
+ cluster = cluster_models.Cluster.load(context, dbcluster.id)
+ cluster.configuration_attach(configuration_id)
def _configuration_items_list(self, group, configuration):
ds_version_id = group.datastore_version_id