From ba596378242b95741aa9bf0066a692e362890e93 Mon Sep 17 00:00:00 2001 From: Duk Loi Date: Wed, 17 Feb 2016 14:24:10 -0500 Subject: [PATCH] Adding support for trove new clustering datastore - percona cluster Adding support for percona xtradb cluster server for trove. Change-Id: Id7751f7f45817fe89ac454eb795967cb60a029c8 Co-Authored-By: Craig Vyvial --- .../content/database_clusters/forms.py | 33 +++++++------------ .../content/database_clusters/tables.py | 2 ++ .../content/databases/db_capability.py | 7 +++- 3 files changed, 20 insertions(+), 22 deletions(-) diff --git a/trove_dashboard/content/database_clusters/forms.py b/trove_dashboard/content/database_clusters/forms.py index 2eda040..5a3142a 100644 --- a/trove_dashboard/content/database_clusters/forms.py +++ b/trove_dashboard/content/database_clusters/forms.py @@ -174,28 +174,19 @@ class LaunchForm(forms.SelfHandlingForm): valid_flavor = [] for ds in self.datastores(request): # TODO(michayu): until capabilities lands - if (db_capability.is_mongodb_datastore(ds.name) or - db_capability.is_redis_datastore(ds.name)): - versions = self.datastore_versions(request, ds.name) - for version in versions: - if version.name == "inactive": - continue - valid_flavor = self.datastore_flavors(request, ds.name, - versions[0].name) - if valid_flavor: - self.fields['flavor'].choices = sorted( - [(f.id, "%s" % f.name) for f in valid_flavor]) - + field_name = 'flavor' if db_capability.is_vertica_datastore(ds.name): - versions = self.datastore_versions(request, ds.name) - for version in versions: - if version.name == "inactive": - continue - valid_flavor = self.datastore_flavors(request, ds.name, - versions[0].name) - if valid_flavor: - self.fields['vertica_flavor'].choices = sorted( - [(f.id, "%s" % f.name) for f in valid_flavor]) + field_name = 'vertica_flavor' + + versions = self.datastore_versions(request, ds.name) + for version in versions: + if version.name == "inactive": + continue + valid_flavor = self.datastore_flavors(request, ds.name, + versions[0].name) + if valid_flavor: + self.fields[field_name].choices = sorted( + [(f.id, "%s" % f.name) for f in valid_flavor]) @memoized.memoized_method def populate_network_choices(self, request): diff --git a/trove_dashboard/content/database_clusters/tables.py b/trove_dashboard/content/database_clusters/tables.py index b2b41e2..a08ce9a 100644 --- a/trove_dashboard/content/database_clusters/tables.py +++ b/trove_dashboard/content/database_clusters/tables.py @@ -128,6 +128,8 @@ def get_size(cluster): 'RAM': sizeformat.mbformat(cluster.full_flavor.ram), 'instances': len(cluster.instances)} return size_string % vals + elif hasattr(cluster, "instances"): + return "%s instances" % len(cluster.instances) return _("Not available") diff --git a/trove_dashboard/content/databases/db_capability.py b/trove_dashboard/content/databases/db_capability.py index 0fa1a33..25dfc55 100644 --- a/trove_dashboard/content/databases/db_capability.py +++ b/trove_dashboard/content/databases/db_capability.py @@ -14,16 +14,21 @@ MONGODB = "mongodb" +PERCONA_CLUSTER = "pxc" REDIS = "redis" VERTICA = "vertica" -_cluster_capable_datastores = (MONGODB, REDIS, VERTICA) +_cluster_capable_datastores = (MONGODB, PERCONA_CLUSTER, REDIS, VERTICA) def is_mongodb_datastore(datastore): return (datastore is not None) and (MONGODB in datastore.lower()) +def is_percona_cluster_datastore(datastore): + return (datastore is not None) and (PERCONA_CLUSTER in datastore.lower()) + + def is_redis_datastore(datastore): return (datastore is not None) and (REDIS in datastore.lower())