diff --git a/tuskar_ui/api/node.py b/tuskar_ui/api/node.py index bf81e8488..c161bb5ca 100644 --- a/tuskar_ui/api/node.py +++ b/tuskar_ui/api/node.py @@ -487,14 +487,17 @@ class Node(base.APIResourceWrapper): Node, or no matching Instance is found :rtype: Instance """ - if hasattr(self, '_instance'): - return self._instance - if self.instance_uuid: - for server in TEST_DATA.novaclient_servers.list(): + servers, _has_more_data = nova.server_list(self._request) + for server in servers: if server.id == self.instance_uuid: return server + @cached_property + def ip_address(self): + return (self.instance._apiresource.addresses['ctlplane'][0] + ['addr']) + @cached_property def image_name(self): """Return image name of associated instance diff --git a/tuskar_ui/infrastructure/nodes/tables.py b/tuskar_ui/infrastructure/nodes/tables.py index 2e11c1769..6262cef3f 100644 --- a/tuskar_ui/infrastructure/nodes/tables.py +++ b/tuskar_ui/infrastructure/nodes/tables.py @@ -63,7 +63,7 @@ class RegisteredNodesTable(tables.DataTable): link="horizon:infrastructure:nodes:detail", verbose_name=_("Node Name")) instance_ip = tables.Column(lambda n: - n.instance.public_ip if n.instance else '-', + n.ip_address if n.instance else '-', verbose_name=_("Instance IP")) provisioning_status = tables.Column('provisioning_status', verbose_name=_("Provisioned")) diff --git a/tuskar_ui/infrastructure/nodes/tests.py b/tuskar_ui/infrastructure/nodes/tests.py index fc2367717..9201adbbe 100644 --- a/tuskar_ui/infrastructure/nodes/tests.py +++ b/tuskar_ui/infrastructure/nodes/tests.py @@ -66,6 +66,9 @@ class NodesTests(test.BaseAdminViewTests, helpers.APITestCase): instance = TEST_DATA.novaclient_servers.first() image = TEST_DATA.glanceclient_images.first() + for node in registered_nodes: + node.ip_address = '1.1.1.1' + with contextlib.nested( patch('tuskar_ui.api.tuskar.OvercloudRole', **{ 'spec_set': ['list', 'name'], @@ -76,8 +79,9 @@ class NodesTests(test.BaseAdminViewTests, helpers.APITestCase): 'list.return_value': registered_nodes, }), patch('tuskar_ui.api.node.nova', **{ - 'spec_set': ['server_get'], + 'spec_set': ['server_get', 'server_list'], 'server_get.return_value': instance, + 'server_list.return_value': ([instance], False), }), patch('tuskar_ui.api.node.glance', **{ 'spec_set': ['image_get'], @@ -259,14 +263,10 @@ class NodesTests(test.BaseAdminViewTests, helpers.APITestCase): def test_performance(self): node = api.node.Node(self.ironicclient_nodes.list()[0]) - resources = self.resources.list() instance = TEST_DATA.novaclient_servers.first() ceilometerclient = self.stub_ceilometerclient() ceilometerclient.resources = self.mox.CreateMockAnything() - ceilometerclient.resources.list(q=[{'field': 'resource_id', - 'value': '1.2.2.2', - 'op': 'eq'}]).AndReturn(resources) ceilometerclient.meters = self.mox.CreateMockAnything() self.mox.ReplayAll() @@ -277,8 +277,9 @@ class NodesTests(test.BaseAdminViewTests, helpers.APITestCase): 'get.return_value': node, }), patch('tuskar_ui.api.node.nova', **{ - 'spec_set': ['servers', 'server_get'], + 'spec_set': ['servers', 'server_get', 'server_list'], 'servers.return_value': [instance], + 'server_list.return_value': ([instance], None), }) ): url = urlresolvers.reverse(PERFORMANCE_VIEW, args=(node.uuid,)) diff --git a/tuskar_ui/infrastructure/nodes/views.py b/tuskar_ui/infrastructure/nodes/views.py index 30d73f3d5..1f636bcf9 100644 --- a/tuskar_ui/infrastructure/nodes/views.py +++ b/tuskar_ui/infrastructure/nodes/views.py @@ -142,7 +142,7 @@ class PerformanceView(base.TemplateView): series = [] try: - ip_addr = node.driver_info['ip_address'] + ip_addr = node.ip_address except AttributeError: pass else: diff --git a/tuskar_ui/test/api_tests/heat_tests.py b/tuskar_ui/test/api_tests/heat_tests.py index 671ceb60d..98d6265df 100644 --- a/tuskar_ui/test/api_tests/heat_tests.py +++ b/tuskar_ui/test/api_tests/heat_tests.py @@ -159,7 +159,10 @@ class HeatAPITests(test.APITestCase): with patch('novaclient.v1_1.contrib.baremetal.' 'BareMetalNodeManager.list', return_value=nodes): - ret_val = api.heat.Resource( - resource, request=object()).node + with patch('openstack_dashboard.api.nova.server_list', + return_value=([instance], False)): + ret_val = api.heat.Resource( + resource, request=object()).node + ret_instance = ret_val.instance self.assertIsInstance(ret_val, api.node.Node) - self.assertIsInstance(ret_val.instance, servers.Server) + self.assertIsInstance(ret_instance, servers.Server) diff --git a/tuskar_ui/test/api_tests/node_tests.py b/tuskar_ui/test/api_tests/node_tests.py index fc6fec69e..3c55448fd 100644 --- a/tuskar_ui/test/api_tests/node_tests.py +++ b/tuskar_ui/test/api_tests/node_tests.py @@ -51,10 +51,13 @@ class NodeAPITests(test.APITestCase): with patch('novaclient.v1_1.contrib.baremetal.' 'BareMetalNodeManager.get', return_value=node): - ret_val = api.node.Node.get(self.request, node.uuid) + with patch('openstack_dashboard.api.nova.server_list', + return_value=([instance], False)): + ret_val = api.node.Node.get(self.request, node.uuid) + ret_instance = ret_val.instance self.assertIsInstance(ret_val, api.node.Node) - self.assertIsInstance(ret_val.instance, servers.Server) + self.assertIsInstance(ret_instance, servers.Server) def test_node_get_by_instance_uuid(self): instance = self.novaclient_servers.first() @@ -66,12 +69,15 @@ class NodeAPITests(test.APITestCase): with patch('novaclient.v1_1.contrib.baremetal.' 'BareMetalNodeManager.list', return_value=nodes): - ret_val = api.node.Node.get_by_instance_uuid( - self.request, - node.instance_uuid) + with patch('openstack_dashboard.api.nova.server_list', + return_value=([instance], False)): + ret_val = api.node.Node.get_by_instance_uuid( + self.request, + node.instance_uuid) + ret_instance = ret_val.instance self.assertIsInstance(ret_val, api.node.Node) - self.assertIsInstance(ret_val.instance, servers.Server) + self.assertIsInstance(ret_instance, servers.Server) def test_node_list(self): instances = self.novaclient_servers.list() @@ -101,7 +107,10 @@ class NodeAPITests(test.APITestCase): with patch('openstack_dashboard.api.nova.server_get', return_value=instance): - ret_val = api.node.Node(node).instance + with patch('openstack_dashboard.api.nova.server_list', + return_value=([instance], False)): + ret_val = api.node.Node(node).instance + self.assertIsInstance(ret_val, servers.Server) def test_node_image_name(self): @@ -113,7 +122,9 @@ class NodeAPITests(test.APITestCase): return_value=instance): with patch('openstack_dashboard.api.glance.image_get', return_value=image): - ret_val = api.node.Node(node).image_name + with patch('openstack_dashboard.api.nova.server_list', + return_value=([instance], False)): + ret_val = api.node.Node(node).image_name self.assertEqual(ret_val, 'overcloud-compute') def test_node_addresses_no_ironic(self):