=== modified file 'src/maasserver/models/node.py'
--- src/maasserver/models/node.py	2016-03-30 03:33:50 +0000
+++ src/maasserver/models/node.py	2016-04-01 16:37:24 +0000
@@ -2906,8 +2906,15 @@
         # Check if the BMC is accessible. If not we need to do some work to
         # make sure we can determine which rack controller can power
         # control this node.
+        def is_bmc_accessible():
+            if self.bmc is None:
+                raise PowerProblem(
+                    "No BMC is defined.  Cannot power control node.")
+            else:
+                return self.bmc.is_accessible()
+
         defer.addCallback(
-            lambda _: deferToDatabase(transactional(self.bmc.is_accessible)))
+            lambda _: deferToDatabase(transactional(is_bmc_accessible)))
 
         def cb_update_routable_racks(accessible):
             if not accessible:

=== modified file 'src/maasserver/models/signals/power.py'
--- src/maasserver/models/signals/power.py	2016-03-30 03:33:50 +0000
+++ src/maasserver/models/signals/power.py	2016-04-01 16:37:24 +0000
@@ -9,6 +9,7 @@
 
 from datetime import timedelta
 
+from maasserver.exceptions import PowerProblem
 from maasserver.models.node import Node
 from maasserver.node_status import QUERY_TRANSITIONS
 from maasserver.utils.orm import (
@@ -46,7 +47,8 @@
     d = deferToDatabase(transactional(Node.objects.get), system_id=system_id)
     d.addCallback(lambda node: node.power_query())
     d.addErrback(
-        lambda failure: failure.trap((Node.DoesNotExist, UnknownPowerType)))
+        lambda failure: failure.trap(
+            (Node.DoesNotExist, UnknownPowerType, PowerProblem)))
     d.addErrback(
         log.err,
         "Failed to update power state of machine after state transition.")

=== modified file 'src/maasserver/models/signals/tests/test_power.py'
--- src/maasserver/models/signals/tests/test_power.py	2016-03-30 03:33:50 +0000
+++ src/maasserver/models/signals/tests/test_power.py	2016-04-01 16:37:24 +0000
@@ -7,6 +7,7 @@
 
 from crochet import wait_for
 from maasserver.enum import POWER_STATE
+from maasserver.exceptions import PowerProblem
 from maasserver.models.node import Node
 from maasserver.models.signals import power
 from maasserver.node_status import (
@@ -93,13 +94,13 @@
         power_state = yield power.update_power_state_of_node(node.system_id)
         self.assertEqual(power_state, POWER_STATE.ON)
 
-    def test__raises_failure_for_Node_DoesNotExist(self):
+    def test__traps_failure_for_Node_DoesNotExist(self):
         self.assertIsNone(power.update_power_state_of_node(
             factory.make_name('system_id')))
 
     @wait_for_reactor
     @defer.inlineCallbacks
-    def test__raises_failure_for_UnknownPowerType(self):
+    def test__traps_failure_for_UnknownPowerType(self):
         node = yield deferToDatabase(transactional(factory.make_Node))
         mock_node_objects_get = self.patch(Node.objects, "get")
         mock_node_objects_get.side_effect = UnknownPowerType()
@@ -108,6 +109,15 @@
 
     @wait_for_reactor
     @defer.inlineCallbacks
+    def test__traps_failure_for_PowerProblem(self):
+        node = yield deferToDatabase(transactional(factory.make_Node))
+        mock_node_objects_get = self.patch(Node.objects, "get")
+        mock_node_objects_get.side_effect = PowerProblem()
+        power_state = yield power.update_power_state_of_node(node.system_id)
+        self.assertIsNone(power_state)
+
+    @wait_for_reactor
+    @defer.inlineCallbacks
     def test__logs_other_errors(self):
         node = yield deferToDatabase(transactional(factory.make_Node))
         mock_node_objects_get = self.patch(Node.objects, "get")

