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)