summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLadislav Smola <lsmola@redhat.com>2013-10-16 11:15:13 +0000
committerLadislav Smola <lsmola@redhat.com>2013-10-16 11:31:06 +0000
commitf57919123923f056271cc1f758e7d131c317d708 (patch)
treeacd9f7dd75f6207fa9227e5f8865048e02638341
parentdb5901ae25882a6f07b2bb5717b07b337f054139 (diff)
downloadtuskar-ui-f57919123923f056271cc1f758e7d131c317d708.tar.gz
Corrects relation of baremetal and nova instance
- corrects relation using node.instance_uuid - optimize obtaining of the nova instance but fetching the instance directly - fixes test related to this change tested on lab on real undercloud Change-Id: Ibfa503594f99f1132d9ef2493406bc3493acba7a
-rw-r--r--tuskar_ui/api.py35
-rw-r--r--tuskar_ui/test/api_tests/tuskar_tests.py6
-rw-r--r--tuskar_ui/test/test_data/tuskar_data.py15
3 files changed, 29 insertions, 27 deletions
diff --git a/tuskar_ui/api.py b/tuskar_ui/api.py
index e2ca8c8e..3fb5419d 100644
--- a/tuskar_ui/api.py
+++ b/tuskar_ui/api.py
@@ -164,7 +164,7 @@ class Capacity(StringIdAPIResourceWrapper):
class BaremetalNode(StringIdAPIResourceWrapper):
_attrs = ['id', 'pm_address', 'cpus', 'memory_mb', 'service_host',
- 'local_gb', 'pm_user']
+ 'local_gb', 'pm_user', 'instance_uuid']
@classmethod
def create(cls, request, **kwargs):
@@ -190,33 +190,30 @@ class BaremetalNode(StringIdAPIResourceWrapper):
node = cls(baremetalclient(request).get(node_id))
node.request = request
- # FIXME ugly, fix after demo, make abstraction of instance details
- # this is realy not optimal, but i dont hve time do fix it now
- instances, more = nova.server_list(
- request,
- search_opts={'paginate': True},
- all_tenants=True)
-
- instance_details = {}
- for instance in instances:
- id = (instance.
- _apiresource._info['OS-EXT-SRV-ATTR:hypervisor_hostname'])
- instance_details[id] = instance
-
- detail = instance_details.get(node_id)
- if detail:
- addresses = detail._apiresource.addresses.get('ctlplane')
+ try:
+ # Nova instance info will be added to baremetal node attributes
+ nova_instance = nova.server_get(request,
+ node.instance_uuid)
+ except Exception:
+ nova_instance = None
+ LOG.debug("Couldn't obtain nova.server_get instance for "
+ "baremetal node %s" % node_id)
+ if nova_instance:
+ # If baremetal is provisioned, there is a nova instance.
+ addresses = nova_instance._apiresource.addresses.get('ctlplane')
if addresses:
node.ip_address_other = (", "
.join([addr['addr'] for addr in addresses]))
-
- node.status = detail._apiresource._info['OS-EXT-STS:vm_state']
+ node.status = (nova_instance._apiresource.
+ _info['OS-EXT-STS:vm_state'])
node.power_management = ""
if node.pm_user:
node.power_management = node.pm_user + "/********"
else:
+ # If baremetal is unprovisioned, there is no nova instance.
node.status = 'unprovisioned'
+ # Returning baremetal node containing nova instance info
return node
@classmethod
diff --git a/tuskar_ui/test/api_tests/tuskar_tests.py b/tuskar_ui/test/api_tests/tuskar_tests.py
index 7d5fd2cf..574ad079 100644
--- a/tuskar_ui/test/api_tests/tuskar_tests.py
+++ b/tuskar_ui/test/api_tests/tuskar_tests.py
@@ -70,15 +70,15 @@ class TuskarApiTests(test.APITestCase):
def test_baremetal_node_get(self):
node = self.baremetalclient_nodes.first()
+ server = self.servers.first()
self.mox.StubOutWithMock(baremetal.BareMetalNodeManager, 'get')
baremetal.BareMetalNodeManager.get(node.id).AndReturn(node)
novaclient = self.stub_novaclient()
novaclient.servers = self.mox.CreateMockAnything()
- novaclient.servers.list(True,
- {'all_tenants': True,
- 'limit': 21}).AndReturn([])
+ novaclient.servers.get(node.instance_uuid).AndReturn(server)
+
self.mox.ReplayAll()
ret_val = api.BaremetalNode.get(self.request, node.id)
diff --git a/tuskar_ui/test/test_data/tuskar_data.py b/tuskar_ui/test/test_data/tuskar_data.py
index 39d6c23a..c7b8a623 100644
--- a/tuskar_ui/test/test_data/tuskar_data.py
+++ b/tuskar_ui/test/test_data/tuskar_data.py
@@ -170,27 +170,32 @@ def data(TEST):
node_1 = baremetal.BareMetalNode(
baremetal.BareMetalNodeManager(None),
- {'id': '11',
+ {'instance_uuid': 'uuid_11',
+ 'id': '11',
'name': 'node1',
'prov_mac_address': '00-B0-D0-86-AB-F7'})
node_2 = baremetal.BareMetalNode(
baremetal.BareMetalNodeManager(None),
- {'id': '12',
+ {'instance_uuid': 'uuid_12',
+ 'id': '12',
'name': 'node2',
'prov_mac_address': '00-B0-D0-86-AB-F8'})
node_3 = baremetal.BareMetalNode(
baremetal.BareMetalNodeManager(None),
- {'id': '13',
+ {'instance_uuid': 'uuid_13',
+ 'id': '13',
'name': 'node3',
'prov_mac_address': '00-B0-D0-86-AB-F9'})
node_4 = baremetal.BareMetalNode(
baremetal.BareMetalNodeManager(None),
- {'id': '14',
+ {'instance_uuid': 'uuid_14',
+ 'id': '14',
'name': 'node4',
'prov_mac_address': '00-B0-D0-86-AB-F0'})
node_5 = baremetal.BareMetalNode(
baremetal.BareMetalNodeManager(None),
- {'id': '15',
+ {'instance_uuid': 'uuid_15',
+ 'id': '15',
'name': 'node5',
'prov_mac_address': '00-B0-D0-86-AB-F1'})