Merge "Add reource_name for save_energy in action input parameter field"
This commit is contained in:
commit
cd86e85ae8
|
@ -141,17 +141,18 @@ class SavingEnergy(base.SavingEnergyBaseStrategy):
|
|||
},
|
||||
}
|
||||
|
||||
def add_action_poweronoff_node(self, node_uuid, state):
|
||||
def add_action_poweronoff_node(self, node, state):
|
||||
"""Add an action for node disability into the solution.
|
||||
|
||||
:param node: node uuid
|
||||
:param node: node
|
||||
:param state: node power state, power on or power off
|
||||
:return: None
|
||||
"""
|
||||
params = {'state': state}
|
||||
params = {'state': state,
|
||||
'resource_name': node.hostname}
|
||||
self.solution.add_action(
|
||||
action_type='change_node_power_state',
|
||||
resource_id=node_uuid,
|
||||
resource_id=node.uuid,
|
||||
input_parameters=params)
|
||||
|
||||
def get_hosts_pool(self):
|
||||
|
@ -163,17 +164,17 @@ class SavingEnergy(base.SavingEnergyBaseStrategy):
|
|||
|
||||
node_list = self.ironic_client.node.list()
|
||||
for node in node_list:
|
||||
node_uuid = (node.to_dict())['uuid']
|
||||
node_info = self.ironic_client.node.get(node_uuid).to_dict()
|
||||
hypervisor_id = node_info['extra'].get('compute_node_id', None)
|
||||
node_info = self.ironic_client.node.get(node.uuid)
|
||||
hypervisor_id = node_info.extra.get('compute_node_id', None)
|
||||
if hypervisor_id is None:
|
||||
LOG.warning(('Cannot find compute_node_id in extra '
|
||||
'of ironic node %s'), node_uuid)
|
||||
'of ironic node %s'), node.uuid)
|
||||
continue
|
||||
hypervisor_node = self.nova_client.hypervisors.get(hypervisor_id)
|
||||
if hypervisor_node is None:
|
||||
LOG.warning(('Cannot find hypervisor %s'), hypervisor_id)
|
||||
continue
|
||||
node.hostname = hypervisor_node.hypervisor_hostname
|
||||
hypervisor_node = hypervisor_node.to_dict()
|
||||
compute_service = hypervisor_node.get('service', None)
|
||||
host_uuid = compute_service.get('host')
|
||||
|
@ -187,12 +188,12 @@ class SavingEnergy(base.SavingEnergyBaseStrategy):
|
|||
continue
|
||||
else:
|
||||
if (hypervisor_node['running_vms'] == 0):
|
||||
if (node_info['power_state'] == 'power on'):
|
||||
self.free_poweron_node_pool.append(node_uuid)
|
||||
elif (node_info['power_state'] == 'power off'):
|
||||
self.free_poweroff_node_pool.append(node_uuid)
|
||||
if (node_info.power_state == 'power on'):
|
||||
self.free_poweron_node_pool.append(node)
|
||||
elif (node_info.power_state == 'power off'):
|
||||
self.free_poweroff_node_pool.append(node)
|
||||
else:
|
||||
self.with_vms_node_pool.append(node_uuid)
|
||||
self.with_vms_node_pool.append(node)
|
||||
|
||||
def save_energy(self):
|
||||
|
||||
|
@ -202,16 +203,16 @@ class SavingEnergy(base.SavingEnergyBaseStrategy):
|
|||
len_poweron = len(self.free_poweron_node_pool)
|
||||
len_poweroff = len(self.free_poweroff_node_pool)
|
||||
if len_poweron > need_poweron:
|
||||
for node_uuid in random.sample(self.free_poweron_node_pool,
|
||||
(len_poweron - need_poweron)):
|
||||
self.add_action_poweronoff_node(node_uuid, 'off')
|
||||
LOG.debug("power off %s", node_uuid)
|
||||
for node in random.sample(self.free_poweron_node_pool,
|
||||
(len_poweron - need_poweron)):
|
||||
self.add_action_poweronoff_node(node, 'off')
|
||||
LOG.debug("power off %s", node.uuid)
|
||||
elif len_poweron < need_poweron:
|
||||
diff = need_poweron - len_poweron
|
||||
for node_uuid in random.sample(self.free_poweroff_node_pool,
|
||||
min(len_poweroff, diff)):
|
||||
self.add_action_poweronoff_node(node_uuid, 'on')
|
||||
LOG.debug("power on %s", node_uuid)
|
||||
for node in random.sample(self.free_poweroff_node_pool,
|
||||
min(len_poweroff, diff)):
|
||||
self.add_action_poweronoff_node(node, 'on')
|
||||
LOG.debug("power on %s", node.uuid)
|
||||
|
||||
def pre_execute(self):
|
||||
self._pre_execute()
|
||||
|
|
|
@ -29,12 +29,12 @@ class TestSavingEnergy(TestBaseStrategy):
|
|||
def setUp(self):
|
||||
super(TestSavingEnergy, self).setUp()
|
||||
|
||||
mock_node1 = mock.Mock()
|
||||
mock_node2 = mock.Mock()
|
||||
mock_node1.to_dict.return_value = {
|
||||
mock_node1_dict = {
|
||||
'uuid': '922d4762-0bc5-4b30-9cb9-48ab644dd861'}
|
||||
mock_node2.to_dict.return_value = {
|
||||
mock_node2_dict = {
|
||||
'uuid': '922d4762-0bc5-4b30-9cb9-48ab644dd862'}
|
||||
mock_node1 = mock.Mock(**mock_node1_dict)
|
||||
mock_node2 = mock.Mock(**mock_node2_dict)
|
||||
self.fake_nodes = [mock_node1, mock_node2]
|
||||
|
||||
p_ironic = mock.patch.object(
|
||||
|
@ -63,14 +63,14 @@ class TestSavingEnergy(TestBaseStrategy):
|
|||
self.strategy._nova_client = self.m_nova
|
||||
|
||||
def test_get_hosts_pool_with_vms_node_pool(self):
|
||||
mock_node1 = mock.Mock()
|
||||
mock_node2 = mock.Mock()
|
||||
mock_node1.to_dict.return_value = {
|
||||
mock_node1_dict = {
|
||||
'extra': {'compute_node_id': 1},
|
||||
'power_state': 'power on'}
|
||||
mock_node2.to_dict.return_value = {
|
||||
mock_node2_dict = {
|
||||
'extra': {'compute_node_id': 2},
|
||||
'power_state': 'power off'}
|
||||
mock_node1 = mock.Mock(**mock_node1_dict)
|
||||
mock_node2 = mock.Mock(**mock_node2_dict)
|
||||
self.m_ironic.node.get.side_effect = [mock_node1, mock_node2]
|
||||
|
||||
mock_hyper1 = mock.Mock()
|
||||
|
@ -88,14 +88,14 @@ class TestSavingEnergy(TestBaseStrategy):
|
|||
self.assertEqual(len(self.strategy.free_poweroff_node_pool), 0)
|
||||
|
||||
def test_get_hosts_pool_free_poweron_node_pool(self):
|
||||
mock_node1 = mock.Mock()
|
||||
mock_node2 = mock.Mock()
|
||||
mock_node1.to_dict.return_value = {
|
||||
mock_node1_dict = {
|
||||
'extra': {'compute_node_id': 1},
|
||||
'power_state': 'power on'}
|
||||
mock_node2.to_dict.return_value = {
|
||||
mock_node2_dict = {
|
||||
'extra': {'compute_node_id': 2},
|
||||
'power_state': 'power on'}
|
||||
mock_node1 = mock.Mock(**mock_node1_dict)
|
||||
mock_node2 = mock.Mock(**mock_node2_dict)
|
||||
self.m_ironic.node.get.side_effect = [mock_node1, mock_node2]
|
||||
|
||||
mock_hyper1 = mock.Mock()
|
||||
|
@ -113,14 +113,14 @@ class TestSavingEnergy(TestBaseStrategy):
|
|||
self.assertEqual(len(self.strategy.free_poweroff_node_pool), 0)
|
||||
|
||||
def test_get_hosts_pool_free_poweroff_node_pool(self):
|
||||
mock_node1 = mock.Mock()
|
||||
mock_node2 = mock.Mock()
|
||||
mock_node1.to_dict.return_value = {
|
||||
mock_node1_dict = {
|
||||
'extra': {'compute_node_id': 1},
|
||||
'power_state': 'power off'}
|
||||
mock_node2.to_dict.return_value = {
|
||||
mock_node2_dict = {
|
||||
'extra': {'compute_node_id': 2},
|
||||
'power_state': 'power off'}
|
||||
mock_node1 = mock.Mock(**mock_node1_dict)
|
||||
mock_node2 = mock.Mock(**mock_node2_dict)
|
||||
self.m_ironic.node.get.side_effect = [mock_node1, mock_node2]
|
||||
|
||||
mock_hyper1 = mock.Mock()
|
||||
|
@ -138,14 +138,14 @@ class TestSavingEnergy(TestBaseStrategy):
|
|||
self.assertEqual(len(self.strategy.free_poweroff_node_pool), 2)
|
||||
|
||||
def test_get_hosts_pool_with_node_out_model(self):
|
||||
mock_node1 = mock.Mock()
|
||||
mock_node2 = mock.Mock()
|
||||
mock_node1.to_dict.return_value = {
|
||||
mock_node1_dict = {
|
||||
'extra': {'compute_node_id': 1},
|
||||
'power_state': 'power off'}
|
||||
mock_node2.to_dict.return_value = {
|
||||
mock_node2_dict = {
|
||||
'extra': {'compute_node_id': 2},
|
||||
'power_state': 'power off'}
|
||||
mock_node1 = mock.Mock(**mock_node1_dict)
|
||||
mock_node2 = mock.Mock(**mock_node2_dict)
|
||||
self.m_ironic.node.get.side_effect = [mock_node1, mock_node2]
|
||||
|
||||
mock_hyper1 = mock.Mock()
|
||||
|
@ -164,8 +164,8 @@ class TestSavingEnergy(TestBaseStrategy):
|
|||
|
||||
def test_save_energy_poweron(self):
|
||||
self.strategy.free_poweroff_node_pool = [
|
||||
'922d4762-0bc5-4b30-9cb9-48ab644dd861',
|
||||
'922d4762-0bc5-4b30-9cb9-48ab644dd862'
|
||||
mock.Mock(uuid='922d4762-0bc5-4b30-9cb9-48ab644dd861'),
|
||||
mock.Mock(uuid='922d4762-0bc5-4b30-9cb9-48ab644dd862')
|
||||
]
|
||||
self.strategy.save_energy()
|
||||
self.assertEqual(len(self.strategy.solution.actions), 1)
|
||||
|
@ -174,8 +174,8 @@ class TestSavingEnergy(TestBaseStrategy):
|
|||
|
||||
def test_save_energy_poweroff(self):
|
||||
self.strategy.free_poweron_node_pool = [
|
||||
'922d4762-0bc5-4b30-9cb9-48ab644dd861',
|
||||
'922d4762-0bc5-4b30-9cb9-48ab644dd862'
|
||||
mock.Mock(uuid='922d4762-0bc5-4b30-9cb9-48ab644dd861'),
|
||||
mock.Mock(uuid='922d4762-0bc5-4b30-9cb9-48ab644dd862')
|
||||
]
|
||||
self.strategy.save_energy()
|
||||
self.assertEqual(len(self.strategy.solution.actions), 1)
|
||||
|
@ -183,14 +183,14 @@ class TestSavingEnergy(TestBaseStrategy):
|
|||
self.assertEqual(action.get('input_parameters').get('state'), 'off')
|
||||
|
||||
def test_execute(self):
|
||||
mock_node1 = mock.Mock()
|
||||
mock_node2 = mock.Mock()
|
||||
mock_node1.to_dict.return_value = {
|
||||
mock_node1_dict = {
|
||||
'extra': {'compute_node_id': 1},
|
||||
'power_state': 'power on'}
|
||||
mock_node2.to_dict.return_value = {
|
||||
mock_node2_dict = {
|
||||
'extra': {'compute_node_id': 2},
|
||||
'power_state': 'power on'}
|
||||
mock_node1 = mock.Mock(**mock_node1_dict)
|
||||
mock_node2 = mock.Mock(**mock_node2_dict)
|
||||
self.m_ironic.node.get.side_effect = [mock_node1, mock_node2]
|
||||
|
||||
mock_hyper1 = mock.Mock()
|
||||
|
|
Loading…
Reference in New Issue