From 3009716dede725cbb037b136844f49e8dfb727de Mon Sep 17 00:00:00 2001
From: licanwei
Date: Fri, 5 Jul 2019 16:32:51 +0800
Subject: [PATCH] Add get_compute_node_by_uuid
We want to set the value of uuid field of Watcher ComputeNode
to hypversion id(as uuid). So we need to get hypervisor
information by uuid.
Change-Id: I752fbfa560313e28e87d83e46431c283b4db4f23
Related-Bug: #1835192
---
watcher/common/nova_helper.py | 8 ++++++++
watcher/tests/common/test_nova_helper.py | 12 ++++++++++++
2 files changed, 20 insertions(+)
diff --git a/watcher/common/nova_helper.py b/watcher/common/nova_helper.py
index de9ca3973..96ba775a2 100644
--- a/watcher/common/nova_helper.py
+++ b/watcher/common/nova_helper.py
@@ -86,6 +86,14 @@ class NovaHelper(object):
LOG.exception(exc)
raise exception.ComputeNodeNotFound(name=node_hostname)
+ def get_compute_node_by_uuid(self, node_uuid):
+ """Get compute node by uuid
+
+ :param node_uuid: hypervisor id as uuid after microversion 2.53
+ :returns: novaclient.v2.hypervisors.Hypervisor object if found
+ """
+ return self.nova.hypervisors.get(node_uuid)
+
def get_instance_list(self, filters=None, marker=None, limit=-1):
"""List servers for all tenants with details.
diff --git a/watcher/tests/common/test_nova_helper.py b/watcher/tests/common/test_nova_helper.py
index 3732f2047..3ce2ac3bc 100644
--- a/watcher/tests/common/test_nova_helper.py
+++ b/watcher/tests/common/test_nova_helper.py
@@ -162,6 +162,18 @@ class TestNovaHelper(base.TestCase):
result = nova_util.get_compute_node_by_hostname(name)
self.assertIs(nodes[index], result)
+ def test_get_compute_node_by_uuid(
+ self, mock_glance, mock_cinder, mock_neutron, mock_nova):
+ nova_util = nova_helper.NovaHelper()
+ hypervisor_id = utils.generate_uuid()
+ hypervisor_name = "fake_hypervisor_1"
+ hypervisor = self.fake_hypervisor(hypervisor_id, hypervisor_name)
+ nova_util.nova.hypervisors.get.return_value = hypervisor
+ # verify that the compute node can be obtained normally by id
+ self.assertEqual(
+ nova_util.get_compute_node_by_uuid(hypervisor_id),
+ hypervisor)
+
def test_get_instance_list(self, *args):
nova_util = nova_helper.NovaHelper()
# Call it once with no filters.