Enable cluster support for mariadb and cassandra
Added cluster detail overview for mysql compatible clusters and cassandra clusters. Added mariabdb and cassandra to the list of cluster datastores and grow/shrink capable datastores. Clean up some code that was duplicated in many places. Change-Id: I395184554c749ad1584f57fa9480c1353e6a6d38 Closes-Bug: #1551906
This commit is contained in:
parent
223707a911
commit
a06a2f48b3
@ -0,0 +1,3 @@
|
|||||||
|
---
|
||||||
|
features:
|
||||||
|
- Enable cluster support for MariaDB and Cassandra.
|
@ -22,6 +22,7 @@ from horizon import tabs
|
|||||||
|
|
||||||
from trove_dashboard import api
|
from trove_dashboard import api
|
||||||
from trove_dashboard.content.database_clusters import tables
|
from trove_dashboard.content.database_clusters import tables
|
||||||
|
from trove_dashboard.content.databases import db_capability
|
||||||
|
|
||||||
|
|
||||||
class OverviewTab(tabs.Tab):
|
class OverviewTab(tabs.Tab):
|
||||||
@ -34,7 +35,7 @@ class OverviewTab(tabs.Tab):
|
|||||||
def get_template_name(self, request):
|
def get_template_name(self, request):
|
||||||
cluster = self.tab_group.kwargs['cluster']
|
cluster = self.tab_group.kwargs['cluster']
|
||||||
template_file = ('project/database_clusters/_detail_overview_%s.html'
|
template_file = ('project/database_clusters/_detail_overview_%s.html'
|
||||||
% cluster.datastore['type'])
|
% self._get_template_type(cluster.datastore['type']))
|
||||||
try:
|
try:
|
||||||
template.loader.get_template(template_file)
|
template.loader.get_template(template_file)
|
||||||
return template_file
|
return template_file
|
||||||
@ -43,6 +44,12 @@ class OverviewTab(tabs.Tab):
|
|||||||
# Just use the base template file
|
# Just use the base template file
|
||||||
return ('project/database_clusters/_detail_overview.html')
|
return ('project/database_clusters/_detail_overview.html')
|
||||||
|
|
||||||
|
def _get_template_type(self, datastore):
|
||||||
|
if db_capability.is_mysql_compatible(datastore):
|
||||||
|
return 'mysql'
|
||||||
|
|
||||||
|
return datastore
|
||||||
|
|
||||||
|
|
||||||
class InstancesTab(tabs.TableTab):
|
class InstancesTab(tabs.TableTab):
|
||||||
table_classes = (tables.InstancesTable,)
|
table_classes = (tables.InstancesTable,)
|
||||||
|
@ -0,0 +1,19 @@
|
|||||||
|
{% extends "project/database_clusters/_detail_overview.html" %}
|
||||||
|
{% load i18n sizeformat %}
|
||||||
|
|
||||||
|
{% block connection_info %}
|
||||||
|
<h4>{% trans "Connection Information" %}</h4>
|
||||||
|
<hr class="header_rule">
|
||||||
|
<dl class="dl-horizontal">
|
||||||
|
{% with cluster.ip.0 as ip %}
|
||||||
|
<dt>{% trans "Host" %}</dt>
|
||||||
|
{% if not ip %}
|
||||||
|
<dd>{% trans "Not Assigned" %}</dd>
|
||||||
|
{% else %}
|
||||||
|
<dd>{{ ip }}</dd>
|
||||||
|
<dt>{% trans "Connection Examples" %}</dt>
|
||||||
|
<dd>cqlsh {{ ip }} 9042</dd>
|
||||||
|
{% endif %}
|
||||||
|
{% endwith %}
|
||||||
|
</dl>
|
||||||
|
{% endblock %}
|
@ -0,0 +1,19 @@
|
|||||||
|
{% extends "project/database_clusters/_detail_overview.html" %}
|
||||||
|
{% load i18n sizeformat %}
|
||||||
|
|
||||||
|
{% block connection_info %}
|
||||||
|
<h4>{% trans "Connection Information" %}</h4>
|
||||||
|
<hr class="header_rule">
|
||||||
|
<dl class="dl-horizontal">
|
||||||
|
{% with cluster.ip.0 as ip %}
|
||||||
|
<dt>{% trans "Host" %}</dt>
|
||||||
|
{% if not ip %}
|
||||||
|
<dd>{% trans "Not Assigned" %}</dd>
|
||||||
|
{% else %}
|
||||||
|
<dd>{{ ip }}</dd>
|
||||||
|
<dt>{% trans "Connection Examples" %}</dt>
|
||||||
|
<dd>mysql {{ ip }} 3306</dd>
|
||||||
|
{% endif %}
|
||||||
|
{% endwith %}
|
||||||
|
</dl>
|
||||||
|
{% endblock %}
|
@ -13,6 +13,7 @@
|
|||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
|
|
||||||
|
CASSANDRA = "cassandra"
|
||||||
MARIA = "maria"
|
MARIA = "maria"
|
||||||
MONGODB = "mongodb"
|
MONGODB = "mongodb"
|
||||||
MYSQL = "mysql"
|
MYSQL = "mysql"
|
||||||
@ -21,12 +22,15 @@ PERCONA_CLUSTER = "pxc"
|
|||||||
REDIS = "redis"
|
REDIS = "redis"
|
||||||
VERTICA = "vertica"
|
VERTICA = "vertica"
|
||||||
|
|
||||||
_mysql_compatible_datastores = (MYSQL, MARIA, PERCONA)
|
_mysql_compatible_datastores = (MYSQL, MARIA, PERCONA, PERCONA_CLUSTER)
|
||||||
_cluster_capable_datastores = (MONGODB, PERCONA_CLUSTER, REDIS, VERTICA)
|
_cluster_capable_datastores = (CASSANDRA, MARIA, MONGODB, PERCONA_CLUSTER,
|
||||||
|
REDIS, VERTICA)
|
||||||
|
_cluster_grow_shrink_capable_datastores = (CASSANDRA, MARIA, MONGODB, REDIS)
|
||||||
|
|
||||||
|
|
||||||
def can_modify_cluster(datastore):
|
def can_modify_cluster(datastore):
|
||||||
return (is_mongodb_datastore(datastore) or is_redis_datastore(datastore))
|
return _is_datastore_in_list(datastore,
|
||||||
|
_cluster_grow_shrink_capable_datastores)
|
||||||
|
|
||||||
|
|
||||||
def is_mongodb_datastore(datastore):
|
def is_mongodb_datastore(datastore):
|
||||||
@ -46,17 +50,17 @@ def is_vertica_datastore(datastore):
|
|||||||
|
|
||||||
|
|
||||||
def is_mysql_compatible(datastore):
|
def is_mysql_compatible(datastore):
|
||||||
if (datastore is not None):
|
return _is_datastore_in_list(datastore, _mysql_compatible_datastores)
|
||||||
for ds in _mysql_compatible_datastores:
|
|
||||||
if ds in datastore.lower():
|
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
|
|
||||||
def is_cluster_capable_datastore(datastore):
|
def is_cluster_capable_datastore(datastore):
|
||||||
|
return _is_datastore_in_list(datastore, _cluster_capable_datastores)
|
||||||
|
|
||||||
|
|
||||||
|
def _is_datastore_in_list(datastore, datastores):
|
||||||
if datastore is not None:
|
if datastore is not None:
|
||||||
datastore_lower = datastore.lower()
|
datastore_lower = datastore.lower()
|
||||||
for ds in _cluster_capable_datastores:
|
for ds in datastores:
|
||||||
if ds in datastore_lower:
|
if ds in datastore_lower:
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
Loading…
x
Reference in New Issue
Block a user