Merge "Clarifying node_uuid usage in ironic driver."

This commit is contained in:
Jenkins 2017-08-23 15:20:06 +00:00 committed by Gerrit Code Review
commit 36fc828c61

View File

@ -162,7 +162,11 @@ class IronicDriver(virt_driver.ComputeDriver):
self._migrated_instance_uuids = set()
def _get_node(self, node_uuid):
"""Get a node by its UUID."""
"""Get a node by its UUID.
Some methods pass in variables named nodename, but are
actually UUID's.
"""
return self.ironicclient.call('node.get', node_uuid,
fields=_NODE_FIELDS)
@ -624,7 +628,9 @@ class IronicDriver(virt_driver.ComputeDriver):
def node_is_available(self, nodename):
"""Confirms a Nova hypervisor node exists in the Ironic inventory.
:param nodename: The UUID of the node.
:param nodename: The UUID of the node. Parameter is called nodename
even though it is a UUID to keep method signature
the same as inherited class.
:returns: True if the node exists, False if not.
"""
@ -637,12 +643,15 @@ class IronicDriver(virt_driver.ComputeDriver):
if not self.node_cache:
# Empty cache, try to populate it.
self._refresh_cache()
# nodename is the ironic node's UUID.
if nodename in self.node_cache:
return True
# NOTE(comstud): Fallback and check Ironic. This case should be
# rare.
try:
# nodename is the ironic node's UUID.
self._get_node(nodename)
return True
except ironic.exc.NotFound:
@ -738,6 +747,7 @@ class IronicDriver(virt_driver.ComputeDriver):
"""Return a dict, keyed by resource class, of inventory information for
the supplied node.
"""
# nodename is the ironic node's UUID.
node = self._node_from_cache(nodename)
info = self._node_resource(node)
# TODO(jaypipes): Completely remove the reporting of VCPU, MEMORY_MB,
@ -818,23 +828,24 @@ class IronicDriver(virt_driver.ComputeDriver):
# cache, let's try to populate it.
self._refresh_cache()
# nodename is the ironic node's UUID.
node = self._node_from_cache(nodename)
return self._node_resource(node)
def _node_from_cache(self, nodename):
def _node_from_cache(self, node_uuid):
"""Returns a node from the cache, retrieving the node from Ironic API
if the node doesn't yet exist in the cache.
"""
cache_age = time.time() - self.node_cache_time
if nodename in self.node_cache:
if node_uuid in self.node_cache:
LOG.debug("Using cache for node %(node)s, age: %(age)s",
{'node': nodename, 'age': cache_age})
return self.node_cache[nodename]
{'node': node_uuid, 'age': cache_age})
return self.node_cache[node_uuid]
else:
LOG.debug("Node %(node)s not found in cache, age: %(age)s",
{'node': nodename, 'age': cache_age})
node = self._get_node(nodename)
self.node_cache[nodename] = node
{'node': node_uuid, 'age': cache_age})
node = self._get_node(node_uuid)
self.node_cache[node_uuid] = node
return node
def get_info(self, instance):
@ -1431,6 +1442,7 @@ class IronicDriver(virt_driver.ComputeDriver):
:param network_info: Instance network information.
"""
# instance.node is the ironic node's UUID.
node = self._get_node(instance.node)
self._plug_vifs(node, instance, network_info)
@ -1441,6 +1453,7 @@ class IronicDriver(virt_driver.ComputeDriver):
:param network_info: Instance network information.
"""
# instance.node is the ironic node's UUID.
node = self._get_node(instance.node)
self._unplug_vifs(node, instance, network_info)