What could be causing the error above? I’ve taken a cursory look at the code. Here’s the full dump:
2019-10-07 19:40:01 maasserver.websockets.protocol: [critical] Error on request (165) machine.action: Failed to retrieve curtin config: 'NoneType' object has no attribute 'url'
Traceback (most recent call last):
File "/usr/lib/python3.6/threading.py", line 864, in run
self._target(*self._args, **self._kwargs)
File "/usr/lib/python3/dist-packages/provisioningserver/utils/twisted.py", line 852, in worker
return target()
File "/usr/lib/python3/dist-packages/twisted/_threads/_threadworker.py", line 46, in work
task()
File "/usr/lib/python3/dist-packages/twisted/_threads/_team.py", line 190, in doWork
task()
--- <exception caught here> ---
File "/usr/lib/python3/dist-packages/twisted/python/threadpool.py", line 250, in inContext
result = inContext.theWork()
File "/usr/lib/python3/dist-packages/twisted/python/threadpool.py", line 266, in <lambda>
inContext.theWork = lambda: context.call(ctx, func, *args, **kw)
File "/usr/lib/python3/dist-packages/twisted/python/context.py", line 122, in callWithContext
return self.currentContext().callWithContext(ctx, func, *args, **kw)
File "/usr/lib/python3/dist-packages/twisted/python/context.py", line 85, in callWithContext
return func(*args,**kw)
File "/usr/lib/python3/dist-packages/provisioningserver/utils/twisted.py", line 885, in callInContext
return func(*args, **kwargs)
File "/usr/lib/python3/dist-packages/provisioningserver/utils/twisted.py", line 234, in wrapper
result = func(*args, **kwargs)
File "/usr/lib/python3/dist-packages/maasserver/utils/orm.py", line 756, in call_within_transaction
return func_outside_txn(*args, **kwargs)
File "/usr/lib/python3/dist-packages/maasserver/utils/orm.py", line 563, in retrier
return func(*args, **kwargs)
File "/usr/lib/python3.6/contextlib.py", line 52, in inner
return func(*args, **kwds)
File "/usr/lib/python3/dist-packages/maasserver/websockets/base.py", line 402, in prep_user_execute
method_name, method, params)
File "/usr/lib/python3/dist-packages/maasserver/websockets/base.py", line 421, in _call_method_track_queries
result = method(params)
File "/usr/lib/python3/dist-packages/maasserver/websockets/handlers/machine.py", line 891, in action
return action.execute(**extra_params)
File "/usr/lib/python3/dist-packages/maasserver/node_action.py", line 172, in execute
self._execute(*args, **kwargs)
File "/usr/lib/python3/dist-packages/maasserver/node_action.py", line 510, in _execute
"Failed to retrieve curtin config: %s" % e)
maasserver.exceptions.NodeActionError: Failed to retrieve curtin config: 'NoneType' object has no attribute 'url'
request is an HttpRequest object going into the try, but url is missing for some reason. The if condition is getting skipped (on check for None) because request is not None; only request.url is seemingly missing.
The self object and self.request object contain:
=> /var/log/maas/regiond.log <==
2019-10-08 18:32:21 stdout: [info] { 'endpoint': 1,
2019-10-08 18:32:21 stdout: [info] 'node': <Machine: qhytrx (njdcsbcpu01)>,
2019-10-08 18:32:21 stdout: [info] 'request': <HttpRequest>,
2019-10-08 18:32:21 stdout: [info] 'user': <User: user>}
2019-10-08 18:32:21 stdout: [info] { 'COOKIES': {},
2019-10-08 18:32:21 stdout: [info] 'FILES': <MultiValueDict: {}>,
2019-10-08 18:32:21 stdout: [info] 'GET': <QueryDict: {}>,
2019-10-08 18:32:21 stdout: [info] 'META': { 'HTTP_USER_AGENT': 'Mozilla/5.0 (Macintosh; Intel Mac OS X '
2019-10-08 18:32:21 stdout: [info] '10_14_6) AppleWebKit/537.36 (KHTML, like '
2019-10-08 18:32:21 stdout: [info] 'Gecko) Chrome/77.0.3865.90 Safari/537.36',
2019-10-08 18:32:21 stdout: [info] 'REMOTE_ADDR': '::ffff:105.210.153.254',
2019-10-08 18:32:21 stdout: [info] 'SERVER_NAME': 'URL.io',
2019-10-08 18:32:21 stdout: [info] 'SERVER_PORT': 5240},
2019-10-08 18:32:21 stdout: [info] 'POST': <QueryDict: {}>,
2019-10-08 18:32:21 stdout: [info] '_post_parse_error': False,
2019-10-08 18:32:21 stdout: [info] 'content_params': None,
2019-10-08 18:32:21 stdout: [info] 'content_type': None,
2019-10-08 18:32:21 stdout: [info] 'method': None,
2019-10-08 18:32:21 stdout: [info] 'path': '',
2019-10-08 18:32:21 stdout: [info] 'path_info': '',
2019-10-08 18:32:21 stdout: [info] 'resolver_match': None,
2019-10-08 18:32:21 stdout: [info] 'user': <User: cms>}
Obviously, HttpRequest.url is None, but the check only exists on checking request for None. It is still not clear yet why request.url is None.