From f32252d510fbce5e85c97906653075058d47db53 Mon Sep 17 00:00:00 2001 From: Hidekazu Nakamura Date: Tue, 30 Jan 2018 15:20:21 +0900 Subject: [PATCH] Fix get_compute_node_by_hostname in nova_helper If hostname is different from uuid in Compute CDM, get_compute_node_by_hostname method returns empty. This patch set fixes to return a compute node even if hostname is different from uuid. Change-Id: I6cbc0be1a79cc238f480caed9adb8dc31256754a Closes-Bug: #1746162 --- watcher/common/nova_helper.py | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/watcher/common/nova_helper.py b/watcher/common/nova_helper.py index b738a5403..53639f8a7 100644 --- a/watcher/common/nova_helper.py +++ b/watcher/common/nova_helper.py @@ -52,14 +52,21 @@ class NovaHelper(object): return self.nova.hypervisors.get(utils.Struct(id=node_id)) def get_compute_node_by_hostname(self, node_hostname): - """Get compute node by ID (*not* UUID)""" - # We need to pass an object with an 'id' attribute to make it work + """Get compute node by hostname""" try: - compute_nodes = self.nova.hypervisors.search(node_hostname) - if len(compute_nodes) != 1: + hypervisors = [hv for hv in self.get_compute_node_list() + if hv.service['host'] == node_hostname] + if len(hypervisors) != 1: + # TODO(hidekazu) + # this may occur if VMware vCenter driver is used raise exception.ComputeNodeNotFound(name=node_hostname) + else: + compute_nodes = self.nova.hypervisors.search( + hypervisors[0].hypervisor_hostname) + if len(compute_nodes) != 1: + raise exception.ComputeNodeNotFound(name=node_hostname) - return self.get_compute_node_by_id(compute_nodes[0].id) + return self.get_compute_node_by_id(compute_nodes[0].id) except Exception as exc: LOG.exception(exc) raise exception.ComputeNodeNotFound(name=node_hostname)