diff options
-rw-r--r-- | tuskar_ui/api.py | 35 | ||||
-rw-r--r-- | tuskar_ui/test/api_tests/tuskar_tests.py | 6 | ||||
-rw-r--r-- | tuskar_ui/test/test_data/tuskar_data.py | 15 |
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'}) |