summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2015-02-06 08:28:36 +0000
committerGerrit Code Review <review@openstack.org>2015-02-06 08:28:36 +0000
commit996023b4582f7681bc3fecd4d416ec9945a68f0e (patch)
tree3e6341f27cb3c79dbbc6856d2622b2f29ef78e5e
parent90e784773f9326c05d390ea16a1a9ce41462f8fe (diff)
parent7776b84c0cba4c894846171a94c5c99a3546ea4f (diff)
downloadironic-996023b4582f7681bc3fecd4d416ec9945a68f0e.tar.gz
Merge "Allow associate an instance independent of the node power state" into stable/juno2014.2.1
-rw-r--r--ironic/conductor/manager.py21
-rw-r--r--ironic/tests/conductor/test_manager.py42
2 files changed, 16 insertions, 47 deletions
diff --git a/ironic/conductor/manager.py b/ironic/conductor/manager.py
index 50e2f2ff4..386e10f88 100644
--- a/ironic/conductor/manager.py
+++ b/ironic/conductor/manager.py
@@ -262,8 +262,7 @@ class ConductorManager(periodic_task.PeriodicTasks):
@messaging.expected_exceptions(exception.InvalidParameterValue,
exception.MissingParameterValue,
- exception.NodeLocked,
- exception.NodeInWrongPowerState)
+ exception.NodeLocked)
def update_node(self, context, node_obj):
"""Update a node with the supplied data.
@@ -285,24 +284,10 @@ class ConductorManager(periodic_task.PeriodicTasks):
driver_name = node_obj.driver if 'driver' in delta else None
with task_manager.acquire(context, node_id, shared=False,
- driver_name=driver_name) as task:
-
- # TODO(deva): Determine what value will be passed by API when
- # instance_uuid needs to be unset, and handle it.
- if 'instance_uuid' in delta:
- task.driver.power.validate(task)
- node_obj.power_state = \
- task.driver.power.get_power_state(task)
-
- if node_obj.power_state != states.POWER_OFF:
- raise exception.NodeInWrongPowerState(
- node=node_id,
- pstate=node_obj.power_state)
-
- # update any remaining parameters, then save
+ driver_name=driver_name):
node_obj.save()
- return node_obj
+ return node_obj
def _power_state_error_handler(self, e, node, power_state):
"""Set the node's power states if error occurs.
diff --git a/ironic/tests/conductor/test_manager.py b/ironic/tests/conductor/test_manager.py
index 9cf459046..5895fd221 100644
--- a/ironic/tests/conductor/test_manager.py
+++ b/ironic/tests/conductor/test_manager.py
@@ -435,41 +435,25 @@ class UpdateNodeTestCase(_ServiceSetUpMixin, tests_db_base.DbTestCase):
res = objects.Node.get_by_uuid(self.context, node['uuid'])
self.assertEqual({'test': 'one'}, res['extra'])
- def test_associate_node_invalid_state(self):
- node = obj_utils.create_test_node(self.context, driver='fake',
- extra={'test': 'one'},
- instance_uuid=None,
- power_state=states.POWER_ON)
-
- # check that it fails because state is POWER_ON
- node.instance_uuid = 'fake-uuid'
- exc = self.assertRaises(messaging.rpc.ExpectedException,
- self.service.update_node,
- self.context,
- node)
- # Compare true exception hidden by @messaging.expected_exceptions
- self.assertEqual(exception.NodeInWrongPowerState, exc.exc_info[0])
-
- # verify change did not happen
- node.refresh()
- self.assertIsNone(node.instance_uuid)
-
- def test_associate_node_valid_state(self):
+ @mock.patch('ironic.drivers.modules.fake.FakePower.get_power_state')
+ def _test_associate_node(self, power_state, mock_get_power_state):
+ mock_get_power_state.return_value = power_state
node = obj_utils.create_test_node(self.context, driver='fake',
instance_uuid=None,
power_state=states.NOSTATE)
+ node.instance_uuid = 'fake-uuid'
+ self.service.update_node(self.context, node)
- with mock.patch('ironic.drivers.modules.fake.FakePower.'
- 'get_power_state') as mock_get_power_state:
+ # Check if the change was applied
+ node.instance_uuid = 'meow'
+ node.refresh()
+ self.assertEqual('fake-uuid', node.instance_uuid)
- mock_get_power_state.return_value = states.POWER_OFF
- node.instance_uuid = 'fake-uuid'
- self.service.update_node(self.context, node)
+ def test_associate_node_powered_off(self):
+ self._test_associate_node(states.POWER_OFF)
- # Check if the change was applied
- node.instance_uuid = 'meow'
- node.refresh()
- self.assertEqual('fake-uuid', node.instance_uuid)
+ def test_associate_node_powered_on(self):
+ self._test_associate_node(states.POWER_ON)
def test_update_node_invalid_driver(self):
existing_driver = 'fake'