diff options
author | Nikhil <SlickNik@gmail.com> | 2015-07-29 08:14:35 +0000 |
---|---|---|
committer | Saurabh Surana <saurabh.surana@hp.com> | 2015-09-18 11:51:36 -0700 |
commit | ee56b6a28e9484edc969b8c4407d0277c2f2b9fa (patch) | |
tree | cd32b94835bf846c90ace0a273c4e80d2d24064f | |
parent | 0b9ad56194d4218a083fcff0b26628d83b6a8c9e (diff) | |
download | trove-ee56b6a28e9484edc969b8c4407d0277c2f2b9fa.tar.gz |
Add support for extended_properties for clusters
During cluster creation, we are now able to pass in custom
properties specific to a datastore as part of a data-bag
named 'extended_properties'. This allows us to get these
properties to the appropriate clustering strategy which can
then use them to implement datastore specific actions.
Change-Id: If24f5bf6181bf1502042ac51868a161a6a037bf2
15 files changed, 73 insertions, 44 deletions
diff --git a/trove/cluster/models.py b/trove/cluster/models.py index 132d6efb..b494243b 100644 --- a/trove/cluster/models.py +++ b/trove/cluster/models.py @@ -197,10 +197,12 @@ class Cluster(object): self.context, self.db_info.id, load_servers=False) @classmethod - def create(cls, context, name, datastore, datastore_version, instances): + def create(cls, context, name, datastore, datastore_version, + instances, extended_properties): api_strategy = strategy.load_api_strategy(datastore_version.manager) return api_strategy.cluster_class.create(context, name, datastore, - datastore_version, instances) + datastore_version, instances, + extended_properties) def validate_cluster_available(self, valid_states=[ClusterTasks.NONE]): if self.db_info.task_status not in valid_states: diff --git a/trove/cluster/service.py b/trove/cluster/service.py index bb03ade2..ae0fb413 100644 --- a/trove/cluster/service.py +++ b/trove/cluster/service.py @@ -143,6 +143,9 @@ class ClusterController(wsgi.Controller): datastore, datastore_version = ( datastore_models.get_datastore_version(**datastore_args)) + # TODO(saurabhs): add extended_properties to apischema + extended_properties = body['cluster'].get('extended_properties', {}) + try: clusters_enabled = (CONF.get(datastore_version.manager) .get('cluster_support')) @@ -172,6 +175,7 @@ class ClusterController(wsgi.Controller): "availability_zone": availability_zone}) cluster = models.Cluster.create(context, name, datastore, - datastore_version, instances) + datastore_version, instances, + extended_properties) view = views.load_view(cluster, req=req, load_servers=False) return wsgi.Result(view.data(), 200) diff --git a/trove/cluster/views.py b/trove/cluster/views.py index 5eff6b0f..eb721ed4 100644 --- a/trove/cluster/views.py +++ b/trove/cluster/views.py @@ -48,6 +48,11 @@ class ClusterView(object): } if ip_list: cluster_dict["ip"] = ip_list + + extended_properties = self.get_extended_properties() + if extended_properties: + cluster_dict["extended_properties"] = extended_properties + LOG.debug(cluster_dict) return {"cluster": cluster_dict} @@ -90,6 +95,9 @@ class ClusterView(object): def build_instances(self): raise NotImplementedError() + def get_extended_properties(self): + return None + def _build_flavor_info(self, flavor_id): return { "id": flavor_id, diff --git a/trove/common/strategies/cluster/experimental/mongodb/api.py b/trove/common/strategies/cluster/experimental/mongodb/api.py index 22b92fe7..fcb1c7e3 100644 --- a/trove/common/strategies/cluster/experimental/mongodb/api.py +++ b/trove/common/strategies/cluster/experimental/mongodb/api.py @@ -122,7 +122,8 @@ class MongoDbAPIStrategy(base.BaseAPIStrategy): class MongoDbCluster(models.Cluster): @classmethod - def create(cls, context, name, datastore, datastore_version, instances): + def create(cls, context, name, datastore, datastore_version, + instances, extended_properties): # TODO(amcreynolds): consider moving into CONF and even supporting # TODO(amcreynolds): an array of values, e.g. [3, 5, 7] diff --git a/trove/common/strategies/cluster/experimental/pxc/api.py b/trove/common/strategies/cluster/experimental/pxc/api.py index 7fe7edb6..2fa83088 100644 --- a/trove/common/strategies/cluster/experimental/pxc/api.py +++ b/trove/common/strategies/cluster/experimental/pxc/api.py @@ -54,7 +54,8 @@ class PXCAPIStrategy(base.BaseAPIStrategy): class PXCCluster(models.Cluster): @classmethod - def create(cls, context, name, datastore, datastore_version, instances): + def create(cls, context, name, datastore, datastore_version, + instances, extended_properties): LOG.debug("Initiating PXC cluster creation.") pxc_conf = CONF.get(datastore_version.manager) num_instances = len(instances) diff --git a/trove/common/strategies/cluster/experimental/redis/api.py b/trove/common/strategies/cluster/experimental/redis/api.py index 829e0e77..03de7fa7 100644 --- a/trove/common/strategies/cluster/experimental/redis/api.py +++ b/trove/common/strategies/cluster/experimental/redis/api.py @@ -137,7 +137,8 @@ class RedisCluster(models.Cluster): instances) @classmethod - def create(cls, context, name, datastore, datastore_version, instances): + def create(cls, context, name, datastore, datastore_version, + instances, extended_properties): LOG.debug("Initiating cluster creation.") # Updating Cluster Task diff --git a/trove/common/strategies/cluster/experimental/vertica/api.py b/trove/common/strategies/cluster/experimental/vertica/api.py index 66522d99..8e378545 100644 --- a/trove/common/strategies/cluster/experimental/vertica/api.py +++ b/trove/common/strategies/cluster/experimental/vertica/api.py @@ -53,7 +53,8 @@ class VerticaAPIStrategy(base.BaseAPIStrategy): class VerticaCluster(models.Cluster): @classmethod - def create(cls, context, name, datastore, datastore_version, instances): + def create(cls, context, name, datastore, datastore_version, + instances, extended_properties): LOG.debug("Initiating cluster creation.") vertica_conf = CONF.get(datastore_version.manager) num_instances = len(instances) diff --git a/trove/tests/unittests/cluster/test_cluster.py b/trove/tests/unittests/cluster/test_cluster.py index 820464e9..ce22c5b5 100644 --- a/trove/tests/unittests/cluster/test_cluster.py +++ b/trove/tests/unittests/cluster/test_cluster.py @@ -79,7 +79,8 @@ class ClusterTest(trove_testtools.TestCase): self.cluster_name, self.datastore, self.datastore_version, - [] + [], + None ) def test_create_unequal_flavors(self): @@ -91,7 +92,8 @@ class ClusterTest(trove_testtools.TestCase): self.cluster_name, self.datastore, self.datastore_version, - instances + instances, + None ) @patch.object(remote, 'create_nova_client') @@ -107,7 +109,8 @@ class ClusterTest(trove_testtools.TestCase): self.cluster_name, self.datastore, self.datastore_version, - instances + instances, + None ) @patch.object(remote, 'create_nova_client') @@ -136,7 +139,8 @@ class ClusterTest(trove_testtools.TestCase): self.cluster_name, self.datastore, self.datastore_version, - instances + instances, + None ) def test_delete_bad_task_status(self): diff --git a/trove/tests/unittests/cluster/test_cluster_controller.py b/trove/tests/unittests/cluster/test_cluster_controller.py index 37f46ee0..66ea9388 100644 --- a/trove/tests/unittests/cluster/test_cluster_controller.py +++ b/trove/tests/unittests/cluster/test_cluster_controller.py @@ -173,7 +173,7 @@ class TestClusterController(TestCase): self.controller.create(req, body, tenant_id) mock_cluster_create.assert_called_with(context, 'products', datastore, datastore_version, - instances) + instances, {}) @patch.object(Cluster, 'load') def test_show_cluster(self, diff --git a/trove/tests/unittests/cluster/test_cluster_pxc_controller.py b/trove/tests/unittests/cluster/test_cluster_pxc_controller.py index 8cbb3446..38a470a4 100644 --- a/trove/tests/unittests/cluster/test_cluster_pxc_controller.py +++ b/trove/tests/unittests/cluster/test_cluster_pxc_controller.py @@ -157,7 +157,7 @@ class TestClusterController(trove_testtools.TestCase): self.controller.create(req, body, tenant_id) mock_cluster_create.assert_called_with(context, 'products', datastore, datastore_version, - instances) + instances, {}) @patch.object(Cluster, 'load') def test_show_cluster(self, diff --git a/trove/tests/unittests/cluster/test_cluster_redis_controller.py b/trove/tests/unittests/cluster/test_cluster_redis_controller.py index 363db83e..ece51303 100644 --- a/trove/tests/unittests/cluster/test_cluster_redis_controller.py +++ b/trove/tests/unittests/cluster/test_cluster_redis_controller.py @@ -187,7 +187,7 @@ class TestClusterController(trove_testtools.TestCase): self.controller.create(req, body, tenant_id) mock_cluster_create.assert_called_with(context, 'products', datastore, datastore_version, - instances) + instances, {}) @patch.object(Cluster, 'load') def test_show_cluster(self, diff --git a/trove/tests/unittests/cluster/test_cluster_vertica_controller.py b/trove/tests/unittests/cluster/test_cluster_vertica_controller.py index bffb1346..2e4f8cbc 100644 --- a/trove/tests/unittests/cluster/test_cluster_vertica_controller.py +++ b/trove/tests/unittests/cluster/test_cluster_vertica_controller.py @@ -157,7 +157,7 @@ class TestClusterController(trove_testtools.TestCase): self.controller.create(req, body, tenant_id) mock_cluster_create.assert_called_with(context, 'products', datastore, datastore_version, - instances) + instances, {}) @patch.object(Cluster, 'load') def test_show_cluster(self, diff --git a/trove/tests/unittests/cluster/test_pxc_cluster.py b/trove/tests/unittests/cluster/test_pxc_cluster.py index 1d0028a3..b2ed002c 100644 --- a/trove/tests/unittests/cluster/test_pxc_cluster.py +++ b/trove/tests/unittests/cluster/test_pxc_cluster.py @@ -78,7 +78,7 @@ class ClusterTest(trove_testtools.TestCase): self.cluster_name, self.datastore, self.datastore_version, - [] + [], {}, ) def test_create_flavor_not_specified(self): @@ -90,7 +90,7 @@ class ClusterTest(trove_testtools.TestCase): self.cluster_name, self.datastore, self.datastore_version, - instances + instances, {} ) @patch.object(remote, 'create_nova_client') @@ -110,7 +110,7 @@ class ClusterTest(trove_testtools.TestCase): self.cluster_name, self.datastore, self.datastore_version, - instances + instances, {} ) @patch.object(remote, 'create_nova_client') @@ -126,7 +126,7 @@ class ClusterTest(trove_testtools.TestCase): self.cluster_name, self.datastore, self.datastore_version, - instances + instances, {} ) @patch.object(remote, 'create_nova_client') @@ -146,7 +146,7 @@ class ClusterTest(trove_testtools.TestCase): self.cluster_name, self.datastore, self.datastore_version, - instances + instances, {} ) @patch.object(remote, 'create_nova_client') @@ -178,7 +178,7 @@ class ClusterTest(trove_testtools.TestCase): self.cluster_name, self.datastore, self.datastore_version, - instances + instances, {} ) @patch.object(remote, 'create_nova_client') @@ -193,7 +193,7 @@ class ClusterTest(trove_testtools.TestCase): self.cluster_name, self.datastore, self.datastore_version, - instances + instances, {} ) @patch.object(inst_models.Instance, 'create') @@ -210,7 +210,7 @@ class ClusterTest(trove_testtools.TestCase): self.cluster_name, self.datastore, self.datastore_version, - instances) + instances, {}) mock_task_api.return_value.create_cluster.assert_called_with( mock_db_create.return_value.id) self.assertEqual(3, mock_ins_create.call_count) @@ -246,7 +246,7 @@ class ClusterTest(trove_testtools.TestCase): self.cluster_name, self.datastore, self.datastore_version, - instances) + instances, {}) mock_task_api.return_value.create_cluster.assert_called_with( mock_db_create.return_value.id) self.assertEqual(3, mock_ins_create.call_count) diff --git a/trove/tests/unittests/cluster/test_redis_cluster.py b/trove/tests/unittests/cluster/test_redis_cluster.py index 7adb3419..61e02204 100644 --- a/trove/tests/unittests/cluster/test_redis_cluster.py +++ b/trove/tests/unittests/cluster/test_redis_cluster.py @@ -92,8 +92,8 @@ class ClusterTest(trove_testtools.TestCase): self.cluster_name, self.datastore, self.datastore_version, - self.instances_w_volumes - ) + self.instances_w_volumes, + {}) @patch.object(remote, 'create_nova_client') @patch.object(redis_api, 'CONF') @@ -106,8 +106,8 @@ class ClusterTest(trove_testtools.TestCase): self.cluster_name, self.datastore, self.datastore_version, - self.instances_no_volumes - ) + self.instances_no_volumes, + {}) @patch.object(remote, 'create_nova_client') @patch.object(redis_api, 'CONF') @@ -123,8 +123,8 @@ class ClusterTest(trove_testtools.TestCase): self.cluster_name, self.datastore, self.datastore_version, - self.instances_w_volumes - ) + self.instances_w_volumes, + {}) @patch.object(remote, 'create_nova_client') @patch.object(redis_api, 'CONF') @@ -152,8 +152,8 @@ class ClusterTest(trove_testtools.TestCase): self.cluster_name, self.datastore, self.datastore_version, - self.instances_no_volumes - ) + self.instances_no_volumes, + {}) @patch.object(redis_api, 'CONF') @patch.object(inst_models.Instance, 'create') @@ -169,7 +169,7 @@ class ClusterTest(trove_testtools.TestCase): self.cluster_name, self.datastore, self.datastore_version, - self.instances_w_volumes) + self.instances_w_volumes, {}) mock_task_api.return_value.create_cluster.assert_called_with( self.dbcreate_mock.return_value.id) self.assertEqual(3, mock_ins_create.call_count) @@ -201,7 +201,7 @@ class ClusterTest(trove_testtools.TestCase): self.cluster_name, self.datastore, self.datastore_version, - self.instances_no_volumes) + self.instances_no_volumes, {}) mock_task_api.return_value.create_cluster.assert_called_with( self.dbcreate_mock.return_value.id) self.assertEqual(3, mock_ins_create.call_count) diff --git a/trove/tests/unittests/cluster/test_vertica_cluster.py b/trove/tests/unittests/cluster/test_vertica_cluster.py index 3fd04d00..86bd4205 100644 --- a/trove/tests/unittests/cluster/test_vertica_cluster.py +++ b/trove/tests/unittests/cluster/test_vertica_cluster.py @@ -78,8 +78,7 @@ class ClusterTest(trove_testtools.TestCase): self.cluster_name, self.datastore, self.datastore_version, - [] - ) + [], None) def test_create_flavor_not_specified(self): instances = self.instances @@ -90,7 +89,8 @@ class ClusterTest(trove_testtools.TestCase): self.cluster_name, self.datastore, self.datastore_version, - instances + instances, + None ) @patch.object(remote, 'create_nova_client') @@ -110,7 +110,8 @@ class ClusterTest(trove_testtools.TestCase): self.cluster_name, self.datastore, self.datastore_version, - instances + instances, + None ) @patch.object(remote, 'create_nova_client') @@ -126,7 +127,8 @@ class ClusterTest(trove_testtools.TestCase): self.cluster_name, self.datastore, self.datastore_version, - instances + instances, + None ) @patch.object(remote, 'create_nova_client') @@ -146,7 +148,8 @@ class ClusterTest(trove_testtools.TestCase): self.cluster_name, self.datastore, self.datastore_version, - instances + instances, + None ) @patch.object(remote, 'create_nova_client') @@ -178,7 +181,8 @@ class ClusterTest(trove_testtools.TestCase): self.cluster_name, self.datastore, self.datastore_version, - instances + instances, + None ) @patch.object(remote, 'create_nova_client') @@ -193,7 +197,8 @@ class ClusterTest(trove_testtools.TestCase): self.cluster_name, self.datastore, self.datastore_version, - instances + instances, + None ) @patch.object(inst_models.Instance, 'create') @@ -210,7 +215,8 @@ class ClusterTest(trove_testtools.TestCase): self.cluster_name, self.datastore, self.datastore_version, - instances) + instances, + None) mock_task_api.return_value.create_cluster.assert_called_with( mock_db_create.return_value.id) self.assertEqual(3, mock_ins_create.call_count) @@ -246,7 +252,8 @@ class ClusterTest(trove_testtools.TestCase): self.cluster_name, self.datastore, self.datastore_version, - instances) + instances, + None) mock_task_api.return_value.create_cluster.assert_called_with( mock_db_create.return_value.id) self.assertEqual(3, mock_ins_create.call_count) |