The admin_context hasn't gone through the process of authenticating so the service_catalog property isn't set. During the initialization of the NovaNotificationTransformer:
(from extensions/mgmt/instances/models.py)
class NovaNotificationTransformer(NotificationTransformer):
def __init__(self, **kwargs): super(NovaNotificationTransformer, self).__init__(**kwargs) self.context = kwargs['context'] self.nova_client = remote.create_admin_nova_client(self.context) self._flavor_cache = {}
If you don't set CONF.nova_compute_url, the call to create_admin_nova_client will attempt to use the context.service_catalog which in this case is never set.
In order for this code to work, I believe the Task Manager is going to have to authenticate the admin_context with Keystone to get the service_catalog.
(BTW, the workaround mentioned above works because this code path is not executed if exists_notification_transformer is None.)
The issue here is that the Task Manager sets up an exists notification transformer during it's startup sequence:
(from taskmanager/ manager. py) admin_context = TroveContext(
user= CONF.nova_ proxy_admin_ user,
auth_ token=CONF. nova_proxy_ admin_pass,
tenant= CONF.nova_ proxy_admin_ tenant_ id) notification_ transformer:
self. exists_ transformer = importutils. import_ object(
CONF. exists_ notification_ transformer,
context= self.admin_ context)
self.
if CONF.exists_
The admin_context hasn't gone through the process of authenticating so the service_catalog property isn't set. During the initialization of the NovaNotificatio nTransformer: mgmt/instances/ models. py) nTransformer( NotificationTra nsformer) :
super( NovaNotificatio nTransformer, self)._ _init__ (**kwargs)
self.context = kwargs['context']
self.nova_ client = remote. create_ admin_nova_ client( self.context)
self._ flavor_ cache = {}
(from extensions/
class NovaNotificatio
def __init__(self, **kwargs):
If you don't set CONF.nova_ compute_ url, the call to create_ admin_nova_ client will attempt to use the context. service_ catalog which in this case is never set.
In order for this code to work, I believe the Task Manager is going to have to authenticate the admin_context with Keystone to get the service_catalog.
(BTW, the workaround mentioned above works because this code path is not executed if exists_ notification_ transformer is None.)