Hello,
I have also this issue, and I believe the problem is in these parts of the code:
glance_store/backend.py:
def verify_default_store(): scheme_name = CONF.glance_store.default_store
...
def add_to_backend(conf, image_id, data, size, scheme=None, context=None, verifier=None): if scheme is None: scheme = conf['glance_store']['default_store']
Both seem to assume that there's an identity between store name and scheme, which is no longer true for vmware datastore.
In fact datastore name is expected to be vmware while SCHEME is vsphere.
To workaround this I've written (based on get_store_from_scheme) a new function that get datastore form its name.
+def get_store_from_name(store_name): + store = None + for scheme, store_value in location.SCHEME_TO_CLS_MAP.items(): + if store_value['store_entry'] == store_name: + store = store_value['store'] + if not store.is_capable(capabilities.BitMasks.DRIVER_REUSABLE): + # Driver instance isn't stateless so it can't + # be reused safely and need recreation. + store_entry = store_value['store_entry'] + store = _load_store(store.conf, store_entry, invoke_load=True) + store.configure() + try: + scheme_map = {} + loc_cls = store.get_store_location_class() + for scheme in store.get_schemes(): + scheme_map[scheme] = { + 'store': store, + 'location_class': loc_cls, + 'store_entry': store_entry + } + location.register_scheme_map(scheme_map) + except NotImplementedError: + store_value['store'] = store + if store is None: + raise exceptions.UnknownStore(store_name=store_name) + return store
and changed the above functions to use this new one:
def add_to_backend(conf, image_id, data, size, scheme=None, context=None, verifier=None): if scheme is None: store_name = conf['glance_store']['default_store'] store = get_store_from_name(store_name) else: store = get_store_from_scheme(scheme) return store_add_to_backend(image_id, data, size, store, context, verifier)
def verify_default_store(): store_name = CONF.glance_store.default_store try: get_store_from_name(store_name) except exceptions.UnknownStore: msg = _("Store named %s not found") % store_name raise RuntimeError(msg)
glance_store/exceptions.py:
+class UnknownStore(GlanceStoreException): + message = _("Unknown scheme '%(scheme)s' found in URI")
This way everything works, at least for me.
Hope it helps.
Hello,
I have also this issue, and I believe the problem is in these parts of the code:
glance_ store/backend. py:
def verify_ default_ store() : store.default_ store
scheme_name = CONF.glance_
...
def add_to_ backend( conf, image_id, data, size, scheme=None, context=None,
verifier= None): store'] ['default_ store']
if scheme is None:
scheme = conf['glance_
Both seem to assume that there's an identity between store name and scheme, which is no longer true for vmware datastore.
In fact datastore name is expected to be vmware while SCHEME is vsphere.
To workaround this I've written (based on get_store_ from_scheme) a new function that get datastore form its name.
+def get_store_ from_name( store_name) : SCHEME_ TO_CLS_ MAP.items( ): 'store_ entry'] == store_name: 'store' ] capable( capabilities. BitMasks. DRIVER_ REUSABLE) : 'store_ entry'] store.conf, store_entry, invoke_load=True) store_location_ class() schemes( ): register_ scheme_ map(scheme_ map) rror: 'store' ] = store UnknownStore( store_name= store_name)
+ store = None
+ for scheme, store_value in location.
+ if store_value[
+ store = store_value[
+ if not store.is_
+ # Driver instance isn't stateless so it can't
+ # be reused safely and need recreation.
+ store_entry = store_value[
+ store = _load_store(
+ store.configure()
+ try:
+ scheme_map = {}
+ loc_cls = store.get_
+ for scheme in store.get_
+ scheme_map[scheme] = {
+ 'store': store,
+ 'location_class': loc_cls,
+ 'store_entry': store_entry
+ }
+ location.
+ except NotImplementedE
+ store_value[
+ if store is None:
+ raise exceptions.
+ return store
and changed the above functions to use this new one:
def add_to_ backend( conf, image_id, data, size, scheme=None, context=None,
verifier= None): store'] ['default_ store'] from_name( store_name) from_scheme( scheme) to_backend( image_id, data, size, store, context,
verifier)
if scheme is None:
store_name = conf['glance_
store = get_store_
else:
store = get_store_
return store_add_
def verify_ default_ store() : store.default_ store
get_store_ from_name( store_name) UnknownStore:
store_name = CONF.glance_
try:
except exceptions.
msg = _("Store named %s not found") % store_name
raise RuntimeError(msg)
glance_ store/exception s.py:
+class UnknownStore( GlanceStoreExce ption):
+ message = _("Unknown scheme '%(scheme)s' found in URI")
This way everything works, at least for me.
Hope it helps.