diff options
author | Jenkins <jenkins@review.openstack.org> | 2017-02-05 06:46:47 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2017-02-05 06:46:47 +0000 |
commit | b5cf0c58f24e8196a8f358f156df8aa8c094df6d (patch) | |
tree | 4c2d6b494fb8f2fa9efa4a5dce183935c02cae42 /trove/configuration | |
parent | 577d43b02d200b5b60eefc875f1542faa09ebfd9 (diff) | |
parent | 9bca402ec3f651fb9017c20dc27601a548cc79e1 (diff) | |
download | trove-b5cf0c58f24e8196a8f358f156df8aa8c094df6d.tar.gz |
Merge "Add configuration support for clusters"
Diffstat (limited to 'trove/configuration')
-rw-r--r-- | trove/configuration/models.py | 16 | ||||
-rw-r--r-- | trove/configuration/service.py | 39 |
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 |