Expose IP address of a node instance

Change-Id: Ie2d6a6d5d3e6abf27ae83c7b4fe4cb0f482e1bff
Related-bug: #1337842
This commit is contained in:
Ana Krivokapic 2014-08-12 11:46:53 +02:00
parent 54c7e1c838
commit af5b6ccd33
6 changed files with 41 additions and 23 deletions

View File

@ -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

View File

@ -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"))

View File

@ -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,))

View File

@ -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:

View File

@ -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)

View File

@ -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):