From ac53dbf005f636a60ac506750d7532886578a6ba Mon Sep 17 00:00:00 2001
From: licanwei
Date: Thu, 4 Jul 2019 16:40:01 +0800
Subject: [PATCH] remove baremetal nodes from hypversior list
openstack hypervisor list contains ironic nodes. we should
filter out baremetal nodes when get compute node list.
Change-Id: I4ab3e1a63dc6f61cdc3e99fa2cae749a711459cc
Closes-Bug: #1835183
---
watcher/common/nova_helper.py | 6 +++++-
watcher/tests/common/test_nova_helper.py | 24 ++++++++++++++++++++++++
2 files changed, 29 insertions(+), 1 deletion(-)
diff --git a/watcher/common/nova_helper.py b/watcher/common/nova_helper.py
index 6c0a3c8f7..a38e7f959 100644
--- a/watcher/common/nova_helper.py
+++ b/watcher/common/nova_helper.py
@@ -45,7 +45,11 @@ class NovaHelper(object):
self.glance = self.osc.glance()
def get_compute_node_list(self):
- return self.nova.hypervisors.list()
+ hypervisors = self.nova.hypervisors.list()
+ # filter out baremetal nodes from hypervisors
+ compute_nodes = [node for node in hypervisors if
+ node.hypervisor_type != 'ironic']
+ return compute_nodes
def get_compute_node_by_name(self, node_name, servers=False,
detailed=False):
diff --git a/watcher/tests/common/test_nova_helper.py b/watcher/tests/common/test_nova_helper.py
index d15cd6d7e..a121589d2 100644
--- a/watcher/tests/common/test_nova_helper.py
+++ b/watcher/tests/common/test_nova_helper.py
@@ -61,6 +61,7 @@ class TestNovaHelper(base.TestCase):
service_dict = {"host": args[1]}
hypervisor.service = service_dict
hypervisor.hypervisor_hostname = args[1]
+ hypervisor.hypervisor_type = kwargs.pop('hypervisor_type', 'QEMU')
return hypervisor
@@ -667,3 +668,26 @@ class TestNovaHelper(base.TestCase):
# is not in the expected status.
result = nova_util.confirm_resize(instance, "fake_status")
self.assertFalse(result)
+
+ def test_get_compute_node_list(
+ self, mock_glance, mock_cinder, mock_neutron, mock_nova):
+ nova_util = nova_helper.NovaHelper()
+ hypervisor1_id = utils.generate_uuid()
+ hypervisor1_name = "fake_hypervisor_1"
+ hypervisor1 = self.fake_hypervisor(
+ hypervisor1_id, hypervisor1_name, hypervisor_type="QEMU")
+
+ hypervisor2_id = utils.generate_uuid()
+ hypervisor2_name = "fake_ironic"
+ hypervisor2 = self.fake_hypervisor(
+ hypervisor2_id, hypervisor2_name, hypervisor_type="ironic")
+
+ nova_util.nova.hypervisors.list.return_value = [hypervisor1,
+ hypervisor2]
+
+ compute_nodes = nova_util.get_compute_node_list()
+
+ # baremetal node should be removed
+ self.assertEqual(1, len(compute_nodes))
+ self.assertEqual(hypervisor1_name,
+ compute_nodes[0].hypervisor_hostname)