diff --git a/openstack_dashboard/dashboards/project/databases/tables.py b/openstack_dashboard/dashboards/project/databases/tables.py
index efb53ded93..a2a8736ea5 100644
--- a/openstack_dashboard/dashboards/project/databases/tables.py
+++ b/openstack_dashboard/dashboards/project/databases/tables.py
@@ -126,13 +126,6 @@ class UpdateRow(tables.Row):
return instance
-def get_ips(instance):
- if hasattr(instance, "ip"):
- if len(instance.ip):
- return instance.ip[0]
- return _("Not Assigned")
-
-
def get_size(instance):
if hasattr(instance, "full_flavor"):
size_string = _("%(name)s | %(RAM)s RAM")
@@ -161,7 +154,7 @@ class InstancesTable(tables.DataTable):
name = tables.Column("name",
link=("horizon:project:databases:detail"),
verbose_name=_("Database Name"))
- ip = tables.Column(get_ips, verbose_name=_("IP Address"))
+ host = tables.Column("host", verbose_name=_("Host"))
size = tables.Column(get_size,
verbose_name=_("Size"),
attrs={'data-type': 'size'})
diff --git a/openstack_dashboard/dashboards/project/databases/templates/databases/_detail_overview.html b/openstack_dashboard/dashboards/project/databases/templates/databases/_detail_overview.html
index 6cc0e1b5b3..217121a61f 100644
--- a/openstack_dashboard/dashboards/project/databases/templates/databases/_detail_overview.html
+++ b/openstack_dashboard/dashboards/project/databases/templates/databases/_detail_overview.html
@@ -21,14 +21,14 @@
{% trans "Connection Info" %}
- {% with instance.ip.0 as ipaddress %}
- - {% trans "Instance IP Address" %}
- - {{ ipaddress }}
+ {% with instance.host as host %}
+ - {% trans "Host" %}
+ - {{ host }}
- {% trans "Database Port" %}
- 3306
{# TODO: This should be a config #}
- {% trans "Connection Examples" %}
- - mysql -h {{ ipaddress }} -u USERNAME -p
- - mysql://USERNAME:PASSWORD@{{ ipaddress }}:3306/DATABASE
+ - mysql -h {{ host }} -u USERNAME -p
+ - mysql://USERNAME:PASSWORD@{{ host }}:3306/DATABASE
{% endwith %}
diff --git a/openstack_dashboard/dashboards/project/databases/tests.py b/openstack_dashboard/dashboards/project/databases/tests.py
index 2a5c4e2ee2..c032526458 100644
--- a/openstack_dashboard/dashboards/project/databases/tests.py
+++ b/openstack_dashboard/dashboards/project/databases/tests.py
@@ -46,6 +46,9 @@ class DatabaseTests(test.TestCase):
self.mox.ReplayAll()
res = self.client.get(INDEX_URL)
self.assertTemplateUsed(res, 'project/databases/index.html')
+ # Check the Host column displaying ip or hostname
+ self.assertContains(res, '10.0.0.3')
+ self.assertContains(res, 'trove.instance-2.com')
@test.create_stubs(
{api.trove: ('instance_list', 'flavor_list')})
@@ -79,7 +82,9 @@ class DatabaseTests(test.TestCase):
{api.trove: ('instance_list', 'flavor_list')})
def test_index_pagination(self):
# Mock database instances
- databases = common.Paginated(self.databases.list(),
+ databases = self.databases.list()
+ last_record = databases[-1]
+ databases = common.Paginated(databases,
next_marker="foo")
api.trove.instance_list(IsA(http.HttpRequest), marker=None)\
.AndReturn(databases)
@@ -91,7 +96,7 @@ class DatabaseTests(test.TestCase):
res = self.client.get(INDEX_URL)
self.assertTemplateUsed(res, 'project/databases/index.html')
self.assertContains(
- res, 'marker=6ddc36d9-73db-4e23-b52e-368937d72719')
+ res, 'marker=' + last_record.id)
@test.create_stubs(
{api.trove: ('instance_list', 'flavor_list')})
@@ -182,12 +187,24 @@ class DatabaseTests(test.TestCase):
@test.create_stubs(
{api.trove: ('instance_get', 'flavor_get',)})
- def test_details(self):
+ def _test_details(self, database, with_designate=False):
api.trove.instance_get(IsA(http.HttpRequest), IsA(unicode))\
- .AndReturn(self.databases.first())
+ .AndReturn(database)
api.trove.flavor_get(IsA(http.HttpRequest), IsA(str))\
.AndReturn(self.flavors.first())
self.mox.ReplayAll()
res = self.client.get(DETAILS_URL)
self.assertTemplateUsed(res, 'project/databases/detail.html')
+ if with_designate:
+ self.assertContains(res, database.hostname)
+ else:
+ self.assertContains(res, database.ip[0])
+
+ def test_details_with_ip(self):
+ database = self.databases.first()
+ self._test_details(database, with_designate=False)
+
+ def test_details_with_hostname(self):
+ database = self.databases.list()[1]
+ self._test_details(database, with_designate=True)
diff --git a/openstack_dashboard/dashboards/project/databases/views.py b/openstack_dashboard/dashboards/project/databases/views.py
index f44db9c52a..b5dba4f2ba 100644
--- a/openstack_dashboard/dashboards/project/databases/views.py
+++ b/openstack_dashboard/dashboards/project/databases/views.py
@@ -38,6 +38,14 @@ from openstack_dashboard.dashboards.project.databases import workflows
LOG = logging.getLogger(__name__)
+def get_host(instance):
+ if hasattr(instance, "hostname"):
+ return instance.hostname
+ elif hasattr(instance, "ip") and instance.ip:
+ return instance.ip[0]
+ return _("Not Assigned")
+
+
class IndexView(horizon_tables.DataTableView):
table_class = tables.InstancesTable
template_name = 'project/databases/index.html'
@@ -59,6 +67,7 @@ class IndexView(horizon_tables.DataTableView):
flavor = self.get_flavors().get(instance.flavor["id"])
if flavor is not None:
instance.full_flavor = flavor
+ instance.host = get_host(instance)
return instance
def get_data(self):
@@ -103,6 +112,7 @@ class DetailView(horizon_tabs.TabbedTableView):
LOG.info("Obtaining instance for detailed view ")
instance_id = self.kwargs['instance_id']
instance = api.trove.instance_get(self.request, instance_id)
+ instance.host = get_host(instance)
except Exception:
redirect = reverse('horizon:project:databases:index')
msg = _('Unable to retrieve details '
diff --git a/openstack_dashboard/test/test_data/trove_data.py b/openstack_dashboard/test/test_data/trove_data.py
index 0bb1e4bc33..8fdfd9af98 100644
--- a/openstack_dashboard/test/test_data/trove_data.py
+++ b/openstack_dashboard/test/test_data/trove_data.py
@@ -20,7 +20,7 @@ from troveclient.v1 import instances
from openstack_dashboard.test.test_data import utils
-DATABASE_DATA = {
+DATABASE_DATA_ONE = {
"status": "ACTIVE",
"updated": "2013-08-12T22:00:09",
"name": "Test Database",
@@ -40,6 +40,23 @@ DATABASE_DATA = {
"id": "6ddc36d9-73db-4e23-b52e-368937d72719"
}
+DATABASE_DATA_TWO = {
+ "status": "ACTIVE",
+ "updated": "2013-08-12T22:00:09",
+ "name": "Test Database With DNS",
+ "links": [],
+ "created": "2013-08-12T22:00:03",
+ "hostname": "trove.instance-2.com",
+ "volume": {
+ "used": 0.13,
+ "size": 1
+ },
+ "flavor": {
+ "id": "1",
+ "links": []
+ },
+ "id": "4d7b3f57-44f5-41d2-8e86-36b88cad572a"
+}
BACKUP_ONE = {
"instance_id": "6ddc36d9-73db-4e23-b52e-368937d72719",
@@ -68,12 +85,16 @@ BACKUP_TWO = {
def data(TEST):
- database = instances.Instance(instances.Instances(None), DATABASE_DATA)
+ database1 = instances.Instance(instances.Instances(None),
+ DATABASE_DATA_ONE)
+ database2 = instances.Instance(instances.Instances(None),
+ DATABASE_DATA_TWO)
bkup1 = backups.Backup(backups.Backups(None), BACKUP_ONE)
bkup2 = backups.Backup(backups.Backups(None), BACKUP_TWO)
TEST.databases = utils.TestDataContainer()
TEST.database_backups = utils.TestDataContainer()
- TEST.databases.add(database)
+ TEST.databases.add(database1)
+ TEST.databases.add(database2)
TEST.database_backups.add(bkup1)
TEST.database_backups.add(bkup2)