Merge "Implement get_traits() for the ironic virt driver"

This commit is contained in:
Zuul 2018-02-01 06:42:17 +00:00 committed by Gerrit Code Review
commit 45fe59a975
5 changed files with 38 additions and 7 deletions

View File

@ -81,12 +81,12 @@ class IronicClientWrapperTestCase(test.NoDBTestCase):
# nova.utils.get_ksa_adapter().get_endpoint()
self.get_ksa_adapter.assert_called_once_with(
'baremetal', ksa_auth=self.get_auth_plugin.return_value,
ksa_session='session', min_version=(1, 35),
ksa_session='session', min_version=(1, 37),
max_version=(1, ksa_disc.LATEST))
expected = {'session': 'session',
'max_retries': CONF.ironic.api_max_retries,
'retry_interval': CONF.ironic.api_retry_interval,
'os_ironic_api_version': '1.35',
'os_ironic_api_version': '1.37',
'ironic_url':
self.get_ksa_adapter.return_value.get_endpoint.return_value}
mock_ir_cli.assert_called_once_with(1, **expected)
@ -106,13 +106,13 @@ class IronicClientWrapperTestCase(test.NoDBTestCase):
# nova.utils.get_endpoint_data
self.get_ksa_adapter.assert_called_once_with(
'baremetal', ksa_auth=self.get_auth_plugin.return_value,
ksa_session='session', min_version=(1, 35),
ksa_session='session', min_version=(1, 37),
max_version=(1, ksa_disc.LATEST))
# When get_endpoint_data raises any ServiceNotFound, None is returned.
expected = {'session': 'session',
'max_retries': CONF.ironic.api_max_retries,
'retry_interval': CONF.ironic.api_retry_interval,
'os_ironic_api_version': '1.35',
'os_ironic_api_version': '1.37',
'ironic_url': None}
mock_ir_cli.assert_called_once_with(1, **expected)
@ -130,7 +130,7 @@ class IronicClientWrapperTestCase(test.NoDBTestCase):
expected = {'session': 'session',
'max_retries': CONF.ironic.api_max_retries,
'retry_interval': CONF.ironic.api_retry_interval,
'os_ironic_api_version': '1.35',
'os_ironic_api_version': '1.37',
'ironic_url': endpoint}
mock_ir_cli.assert_called_once_with(1, **expected)

View File

@ -953,6 +953,27 @@ class IronicDriverTestCase(test.NoDBTestCase):
mock_res_unavail.assert_called_once_with(mock_nfc.return_value)
self.assertEqual({}, result)
@mock.patch.object(ironic_driver.IronicDriver, '_node_from_cache')
def test_get_traits_no_traits(self, mock_nfc):
"""Ensure that when the node has no traits, we return no traits."""
node = ironic_utils.get_test_node()
mock_nfc.return_value = node
result = self.driver.get_traits(node.uuid)
mock_nfc.assert_called_once_with(node.uuid)
self.assertEqual([], result)
@mock.patch.object(ironic_driver.IronicDriver, '_node_from_cache')
def test_get_traits_with_traits(self, mock_nfc):
"""Ensure that when the node has traits, we return the traits."""
node = ironic_utils.get_test_node(traits=['trait1', 'trait2'])
mock_nfc.return_value = node
result = self.driver.get_traits(node.uuid)
expected = ['trait1', 'trait2']
mock_nfc.assert_called_once_with(node.uuid)
self.assertEqual(expected, result)
@mock.patch.object(FAKE_CLIENT.node, 'get')
@mock.patch.object(FAKE_CLIENT.node, 'list')
@mock.patch.object(objects.InstanceList, 'get_uuids_by_host')

View File

@ -48,6 +48,7 @@ def get_test_node(**kw):
'maintenance': kw.get('maintenance', False),
'network_interface': kw.get('network_interface'),
'resource_class': kw.get('resource_class'),
'traits': kw.get('traits', []),
'extra': kw.get('extra', {}),
'updated_at': kw.get('created_at'),
'created_at': kw.get('updated_at')})()

View File

@ -32,7 +32,7 @@ ironic = None
IRONIC_GROUP = nova.conf.ironic.ironic_group
# The API version required by the Ironic driver
IRONIC_API_VERSION = (1, 35)
IRONIC_API_VERSION = (1, 37)
class IronicClientWrapper(object):

View File

@ -76,7 +76,7 @@ _UNPROVISION_STATES = (ironic_states.ACTIVE, ironic_states.DEPLOYFAIL,
_NODE_FIELDS = ('uuid', 'power_state', 'target_power_state', 'provision_state',
'target_provision_state', 'last_error', 'maintenance',
'properties', 'instance_uuid')
'properties', 'instance_uuid', 'traits')
# Console state checking interval in seconds
_CONSOLE_STATE_CHECKING_INTERVAL = 1
@ -813,6 +813,15 @@ class IronicDriver(virt_driver.ComputeDriver):
return result
def get_traits(self, nodename):
"""Get the traits for a given node.
:param nodename: the UUID of the node.
:returns: an iterable of traits for the supplied node.
"""
node = self._node_from_cache(nodename)
return list(node.traits)
def get_available_resource(self, nodename):
"""Retrieve resource information.