summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikhil <SlickNik@gmail.com>2015-07-29 08:14:35 +0000
committerSaurabh Surana <saurabh.surana@hp.com>2015-09-18 11:51:36 -0700
commitee56b6a28e9484edc969b8c4407d0277c2f2b9fa (patch)
treecd32b94835bf846c90ace0a273c4e80d2d24064f
parent0b9ad56194d4218a083fcff0b26628d83b6a8c9e (diff)
downloadtrove-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
-rw-r--r--trove/cluster/models.py6
-rw-r--r--trove/cluster/service.py6
-rw-r--r--trove/cluster/views.py8
-rw-r--r--trove/common/strategies/cluster/experimental/mongodb/api.py3
-rw-r--r--trove/common/strategies/cluster/experimental/pxc/api.py3
-rw-r--r--trove/common/strategies/cluster/experimental/redis/api.py3
-rw-r--r--trove/common/strategies/cluster/experimental/vertica/api.py3
-rw-r--r--trove/tests/unittests/cluster/test_cluster.py12
-rw-r--r--trove/tests/unittests/cluster/test_cluster_controller.py2
-rw-r--r--trove/tests/unittests/cluster/test_cluster_pxc_controller.py2
-rw-r--r--trove/tests/unittests/cluster/test_cluster_redis_controller.py2
-rw-r--r--trove/tests/unittests/cluster/test_cluster_vertica_controller.py2
-rw-r--r--trove/tests/unittests/cluster/test_pxc_cluster.py18
-rw-r--r--trove/tests/unittests/cluster/test_redis_cluster.py20
-rw-r--r--trove/tests/unittests/cluster/test_vertica_cluster.py27
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)