First up. I am using the snap version of MAAS 3.3, which led me to this bug thread. I am experiencing the same issue.
Second, I can confirm a similar behaviour exists in the deb version of MAAS 3.3. I've created a small deployment on Openstack. There is a separate region controller and separate db host on subnet X, and a single rackd on subnet y. Subnets X / Y are routable between each other. Both subnets can get to our keystone API.
I manually add a new machine to MAAS. It's a test compute node instance on subnet y. The power controller is set to Nova, with all details appropriately set according to my test compute instance / Openstack env.
When attempting to get the power state of my compute test node, I see the following in the Controller UI:
"Failed to query node's BMC - (admin) - No rack controllers can access the BMC of node sf-maas-compute1"
I see the following in /var/log/maas/regiond.log:
2023-03-24 22:40:54 maasserver.websockets.handlers.machine: [critical] Failed to update power state of machine.
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/twisted/internet/asyncioreactor.py", line 271, in _onTimer self.runUntilCurrent()
File "/usr/lib/python3/dist-packages/twisted/internet/base.py", line 991, in runUntilCurrent call.func(*call.args, **call.kw)
File "/usr/lib/python3/dist-packages/twisted/internet/defer.py", line 700, in errback self._startRunCallbacks(fail)
File "/usr/lib/python3/dist-packages/twisted/internet/defer.py", line 763, in _startRunCallbacks self._runCallbacks()
--- <exception caught here> ---
File "/usr/lib/python3/dist-packages/twisted/internet/defer.py", line 857, in _runCallbacks current.result = callback( # type: ignore[misc]
File "/usr/lib/python3/dist-packages/maasserver/websockets/handlers/machine.py", line 1176, in eb_unknown failure.trap(UnknownPowerType, NotImplementedError)
File "/usr/lib/python3/dist-packages/twisted/python/failure.py", line 451, in trap self.raiseException()
File "/usr/lib/python3/dist-packages/twisted/python/failure.py", line 475, in raiseException
raise self.value.with_traceback(self.tb)
File "/usr/lib/python3/dist-packages/twisted/python/threadpool.py", line 244, in inContext
result = inContext.theWork() # type: ignore[attr-defined]
File "/usr/lib/python3/dist-packages/twisted/python/threadpool.py", line 260, in <lambda> inContext.theWork = lambda: context.call( # type: ignore[attr-defined]
File "/usr/lib/python3/dist-packages/twisted/python/context.py", line 117, in callWithContext
return self.currentContext().callWithContext(ctx, func, *args, **kw)
File "/usr/lib/python3/dist-packages/twisted/python/context.py", line 82, in callWithContext
return func(*args, **kw)
File "/usr/lib/python3/dist-packages/provisioningserver/utils/twisted.py", line 857, in callInContext
return func(*args, **kwargs)
File "/usr/lib/python3/dist-packages/provisioningserver/utils/twisted.py", line 203, in wrapper
result = func(*args, **kwargs)
File "/usr/lib/python3/dist-packages/maasserver/models/node.py", line 5639, in _get_bmc_client_connection_info
raise PowerProblem(err_msg) maasserver.exceptions.PowerProblem: No rack controllers can access the BMC of node sf-maas-compute1
I first added 'python3-novaclient' to the rackd node. No change. Same error
Then I added 'python3-novaclient' to the region controller. No change. Same error.
So I figured maybe test it from the Region Controller point of view. The next test was that I added in the Nova power settings for my Rackd controller. Then checked the power status from the Controller UI by attempting to power off / power on my Rackd controller.
From /var/log/maas/regiond.log on the Region Controller:
2023-03-24 22:54:10 maasserver.websockets.protocol: [critical] Error on request (15) controller.action: Power control software is missing from the rack controller 'sf-maas-rackd.maas'. To proceed, install the python3-novaclient package.
Traceback (most recent call last):
File "/usr/lib/python3.10/threading.py", line 953, in run self._target(*self._args, **self._kwargs)
File "/usr/lib/python3/dist-packages/provisioningserver/utils/twisted.py", line 822, in worker
return target()
File "/usr/lib/python3/dist-packages/twisted/_threads/_threadworker.py", line 47, in work
task()
File "/usr/lib/python3/dist-packages/twisted/_threads/_team.py", line 182, in doWork
task()
--- <exception caught here> ---
File "/usr/lib/python3/dist-packages/twisted/python/threadpool.py", line 244, in inContext
result = inContext.theWork() # type: ignore[attr-defined]
File "/usr/lib/python3/dist-packages/twisted/python/threadpool.py", line 260, in <lambda> inContext.theWork = lambda: context.call( # type: ignore[attr-defined]
File "/usr/lib/python3/dist-packages/twisted/python/context.py", line 117, in callWithContext
return self.currentContext().callWithContext(ctx, func, *args, **kw)
File "/usr/lib/python3/dist-packages/twisted/python/context.py", line 82, in callWithContext
return func(*args, **kw)
File "/usr/lib/python3/dist-packages/provisioningserver/utils/twisted.py", line 857, in callInContext
return func(*args, **kwargs)
File "/usr/lib/python3/dist-packages/provisioningserver/utils/twisted.py", line 203, in wrapper
result = func(*args, **kwargs)
File "/usr/lib/python3/dist-packages/maasserver/utils/orm.py", line 770, in call_within_transaction
with connected(), post_commit_hooks:
File "/usr/lib/python3/dist-packages/maasserver/utils/orm.py", line 636, in __exit__ self.fire()
File "/usr/lib/python3/dist-packages/provisioningserver/utils/twisted.py", line 203, in wrapper
result = func(*args, **kwargs)
File "/usr/lib/python3/dist-packages/maasserver/utils/asynchronous.py", line 207, in fire self._fire_in_reactor(hook).wait(LONGTIME)
File "/usr/lib/python3/dist-packages/crochet/_eventloop.py", line 198, in wait result.raiseException()
File "/usr/lib/python3/dist-packages/twisted/python/failure.py", line 475, in raiseException
raise self.value.with_traceback(self.tb)
File "/usr/lib/python3/dist-packages/twisted/internet/defer.py", line 1660, in _inlineCallbacks
result = current_context.run(gen.send, result)
File "/usr/lib/python3/dist-packages/maasserver/models/node.py", line 3349, in confirm_power_driver_operable
raise PowerActionFail( provisioningserver.rpc.exceptions.PowerActionFail: Power control software is missing from the rack controller 'sf-maas-rackd.maas'. To proceed, install the python3-novaclient package.
Installing 'python3-novaclient' on both the Region Controller and Rackd (just because), this error goes away, but nothing actually happens.
It does not appear that the Nova power control method is working at all in either snap or deb.
Hi Bjorn,
First up. I am using the snap version of MAAS 3.3, which led me to this bug thread. I am experiencing the same issue.
Second, I can confirm a similar behaviour exists in the deb version of MAAS 3.3. I've created a small deployment on Openstack. There is a separate region controller and separate db host on subnet X, and a single rackd on subnet y. Subnets X / Y are routable between each other. Both subnets can get to our keystone API.
I manually add a new machine to MAAS. It's a test compute node instance on subnet y. The power controller is set to Nova, with all details appropriately set according to my test compute instance / Openstack env.
When attempting to get the power state of my compute test node, I see the following in the Controller UI:
"Failed to query node's BMC - (admin) - No rack controllers can access the BMC of node sf-maas-compute1"
I see the following in /var/log/ maas/regiond. log:
2023-03-24 22:40:54 maasserver. websockets. handlers. machine: [critical] Failed to update power state of machine. python3/ dist-packages/ twisted/ internet/ asyncioreactor. py", line 271, in _onTimer
self. runUntilCurrent () python3/ dist-packages/ twisted/ internet/ base.py" , line 991, in runUntilCurrent
call. func(*call. args, **call.kw) python3/ dist-packages/ twisted/ internet/ defer.py" , line 700, in errback
self. _startRunCallba cks(fail) python3/ dist-packages/ twisted/ internet/ defer.py" , line 763, in _startRunCallbacks
self. _runCallbacks( ) python3/ dist-packages/ twisted/ internet/ defer.py" , line 857, in _runCallbacks
current. result = callback( # type: ignore[misc] python3/ dist-packages/ maasserver/ websockets/ handlers/ machine. py", line 1176, in eb_unknown
failure. trap(UnknownPow erType, NotImplementedE rror) python3/ dist-packages/ twisted/ python/ failure. py", line 451, in trap
self. raiseException( ) python3/ dist-packages/ twisted/ python/ failure. py", line 475, in raiseException with_traceback( self.tb) python3/ dist-packages/ twisted/ python/ threadpool. py", line 244, in inContext attr-defined] python3/ dist-packages/ twisted/ python/ threadpool. py", line 260, in <lambda>
inContext. theWork = lambda: context.call( # type: ignore[ attr-defined] python3/ dist-packages/ twisted/ python/ context. py", line 117, in callWithContext text(). callWithContext (ctx, func, *args, **kw) python3/ dist-packages/ twisted/ python/ context. py", line 82, in callWithContext python3/ dist-packages/ provisioningser ver/utils/ twisted. py", line 857, in callInContext python3/ dist-packages/ provisioningser ver/utils/ twisted. py", line 203, in wrapper python3/ dist-packages/ maasserver/ models/ node.py" , line 5639, in _get_bmc_ client_ connection_ info err_msg)
maasserver. exceptions. PowerProblem: No rack controllers can access the BMC of node sf-maas-compute1
Traceback (most recent call last):
File "/usr/lib/
File "/usr/lib/
File "/usr/lib/
File "/usr/lib/
--- <exception caught here> ---
File "/usr/lib/
File "/usr/lib/
File "/usr/lib/
File "/usr/lib/
raise self.value.
File "/usr/lib/
result = inContext.theWork() # type: ignore[
File "/usr/lib/
File "/usr/lib/
return self.currentCon
File "/usr/lib/
return func(*args, **kw)
File "/usr/lib/
return func(*args, **kwargs)
File "/usr/lib/
result = func(*args, **kwargs)
File "/usr/lib/
raise PowerProblem(
I first added 'python3- novaclient' to the rackd node. No change. Same error novaclient' to the region controller. No change. Same error.
Then I added 'python3-
So I figured maybe test it from the Region Controller point of view. The next test was that I added in the Nova power settings for my Rackd controller. Then checked the power status from the Controller UI by attempting to power off / power on my Rackd controller.
From /var/log/ maas/regiond. log on the Region Controller:
2023-03-24 22:54:10 maasserver. websockets. protocol: [critical] Error on request (15) controller.action: Power control software is missing from the rack controller 'sf-maas- rackd.maas' . To proceed, install the python3-novaclient package. python3. 10/threading. py", line 953, in run
self. _target( *self._ args, **self._kwargs) python3/ dist-packages/ provisioningser ver/utils/ twisted. py", line 822, in worker python3/ dist-packages/ twisted/ _threads/ _threadworker. py", line 47, in work python3/ dist-packages/ twisted/ _threads/ _team.py" , line 182, in doWork python3/ dist-packages/ twisted/ python/ threadpool. py", line 244, in inContext attr-defined] python3/ dist-packages/ twisted/ python/ threadpool. py", line 260, in <lambda>
inContext. theWork = lambda: context.call( # type: ignore[ attr-defined] python3/ dist-packages/ twisted/ python/ context. py", line 117, in callWithContext text(). callWithContext (ctx, func, *args, **kw) python3/ dist-packages/ twisted/ python/ context. py", line 82, in callWithContext python3/ dist-packages/ provisioningser ver/utils/ twisted. py", line 857, in callInContext python3/ dist-packages/ provisioningser ver/utils/ twisted. py", line 203, in wrapper python3/ dist-packages/ maasserver/ utils/orm. py", line 770, in call_within_ transaction python3/ dist-packages/ maasserver/ utils/orm. py", line 636, in __exit__
self. fire() python3/ dist-packages/ provisioningser ver/utils/ twisted. py", line 203, in wrapper python3/ dist-packages/ maasserver/ utils/asynchron ous.py" , line 207, in fire
self. _fire_in_ reactor( hook).wait( LONGTIME) python3/ dist-packages/ crochet/ _eventloop. py", line 198, in wait
result. raiseException( ) python3/ dist-packages/ twisted/ python/ failure. py", line 475, in raiseException with_traceback( self.tb) python3/ dist-packages/ twisted/ internet/ defer.py" , line 1660, in _inlineCallbacks context. run(gen. send, result) python3/ dist-packages/ maasserver/ models/ node.py" , line 3349, in confirm_ power_driver_ operable
provisioningse rver.rpc. exceptions. PowerActionFail : Power control software is missing from the rack controller 'sf-maas- rackd.maas' . To proceed, install the python3-novaclient package.
Traceback (most recent call last):
File "/usr/lib/
File "/usr/lib/
return target()
File "/usr/lib/
task()
File "/usr/lib/
task()
--- <exception caught here> ---
File "/usr/lib/
result = inContext.theWork() # type: ignore[
File "/usr/lib/
File "/usr/lib/
return self.currentCon
File "/usr/lib/
return func(*args, **kw)
File "/usr/lib/
return func(*args, **kwargs)
File "/usr/lib/
result = func(*args, **kwargs)
File "/usr/lib/
with connected(), post_commit_hooks:
File "/usr/lib/
File "/usr/lib/
result = func(*args, **kwargs)
File "/usr/lib/
File "/usr/lib/
File "/usr/lib/
raise self.value.
File "/usr/lib/
result = current_
File "/usr/lib/
raise PowerActionFail(
Installing 'python3- novaclient' on both the Region Controller and Rackd (just because), this error goes away, but nothing actually happens.
It does not appear that the Nova power control method is working at all in either snap or deb.
Simon