Baremetal ensures node is off before powering on

During spawn(), ensure that a node is really off before trying to turn
it on. This fixes bug 1178919, in which a node that had previously
gotten stuck in a power-on state (eg, in the BIOS screen) would fail to
spawn() because the baremetal driver would send a power-on request, the
BMC would ignore it, and then baremetal driver would wait indefinitely
for a DHCP request.

Change-Id: Ie73e6ab488abe99c70ad3d149d702577941056d1
This commit is contained in:
Devananda van der Veen 2013-06-25 08:13:31 -07:00
parent 57236a414d
commit 58fe97eebd
2 changed files with 5 additions and 0 deletions

View File

@ -226,6 +226,7 @@ class BareMetalDriverWithDBTestCase(bm_db_base.BMDBTestCase):
self.mox.StubOutWithMock(fake.FakePowerManager, 'activate_node')
self.mox.StubOutWithMock(fake.FakePowerManager, 'deactivate_node')
fake.FakePowerManager.deactivate_node().AndReturn(None)
fake.FakePowerManager.activate_node().AndRaise(test.TestingException)
fake.FakePowerManager.deactivate_node().AndRaise(test.TestingException)
self.mox.ReplayAll()
@ -250,6 +251,7 @@ class BareMetalDriverWithDBTestCase(bm_db_base.BMDBTestCase):
node = self._create_node()
self.mox.StubOutWithMock(fake.FakePowerManager, 'deactivate_node')
fake.FakePowerManager.deactivate_node().AndReturn(None)
fake.FakePowerManager.deactivate_node().AndRaise(test.TestingException)
self.mox.ReplayAll()

View File

@ -250,6 +250,9 @@ class BareMetalDriver(driver.ComputeDriver):
)
self.driver.activate_bootloader(context, node, instance,
network_info=network_info)
# NOTE(deva): ensure node is really off before we turn it on
# fixes bug https://code.launchpad.net/bugs/1178919
self.power_off(instance, node)
self.power_on(context, instance, network_info, block_device_info,
node)
self.driver.activate_node(context, node, instance)