Merge "Fix host manager node detection logic"

This commit is contained in:
Jenkins 2014-06-18 17:23:26 +00:00 committed by Gerrit Code Review
commit d90c5a3732
2 changed files with 27 additions and 9 deletions

View File

@ -84,18 +84,17 @@ class IronicNodeState(host_manager.HostState):
self.updated = timeutils.utcnow() self.updated = timeutils.utcnow()
def new_host_state(self, host, node, capabilities=None, service=None): def new_host_state(self, host, node, **kwargs):
"""Returns an instance of IronicNodeState or HostState according to """Returns an instance of IronicNodeState or HostState according to
capabilities. If 'ironic_driver' is in capabilities, it returns an compute['cpu_info']. If 'cpu_info' equals 'baremetal cpu', it returns an
instance of IronicHostState. If not, returns an instance of HostState. instance of IronicNodeState. If not, returns an instance of HostState.
""" """
if capabilities is None: compute = kwargs.get('compute')
capabilities = {}
cap = capabilities.get('compute', {}) if compute and compute.get('cpu_info') == 'baremetal cpu':
if bool(cap.get('ironic_driver')): return IronicNodeState(host, node, **kwargs)
return IronicNodeState(host, node, capabilities, service)
else: else:
return host_manager.HostState(host, node, capabilities, service) return host_manager.HostState(host, node, **kwargs)
class IronicHostManager(host_manager.HostManager): class IronicHostManager(host_manager.HostManager):

View File

@ -17,6 +17,8 @@
Tests For IronicHostManager Tests For IronicHostManager
""" """
import mock
from ironic.nova.scheduler import ironic_host_manager from ironic.nova.scheduler import ironic_host_manager
from ironic.nova.tests.scheduler import ironic_fakes from ironic.nova.tests.scheduler import ironic_fakes
@ -24,6 +26,7 @@ from nova import db
from nova import exception from nova import exception
from nova.openstack.common import jsonutils from nova.openstack.common import jsonutils
from nova.scheduler import filters from nova.scheduler import filters
from nova.scheduler import host_manager
from nova import test from nova import test
@ -87,6 +90,22 @@ class IronicHostManagerChangedNodesTestCase(test.NoDBTestCase):
'[["i386", "baremetal", "baremetal"]]', '[["i386", "baremetal", "baremetal"]]',
free_disk_gb=10, free_ram_mb=1024) free_disk_gb=10, free_ram_mb=1024)
@mock.patch.object(ironic_host_manager.IronicNodeState, '__init__')
def test_create_ironic_node_state(self, init_mock):
init_mock.return_value = None
compute = {'cpu_info': 'baremetal cpu'}
host_state = self.host_manager.host_state_cls('fake-host', 'fake-node',
compute=compute)
self.assertIs(ironic_host_manager.IronicNodeState, type(host_state))
@mock.patch.object(host_manager.HostState, '__init__')
def test_create_non_ironic_host_state(self, init_mock):
init_mock.return_value = None
compute = {'cpu_info': 'other cpu'}
host_state = self.host_manager.host_state_cls('fake-host', 'fake-node',
compute=compute)
self.assertIs(host_manager.HostState, type(host_state))
def test_get_all_host_states_after_delete_one(self): def test_get_all_host_states_after_delete_one(self):
context = 'fake_context' context = 'fake_context'