def dynamic_conf(uri, options): """Given metadata, yields a dynamic configuration. :param uri: shard location :type uri: six.text_type :param options: additional shard metadata :type options: dict :returns: Configuration object suitable for constructing storage drivers :rtype: oslo.config.cfg.ConfigOpts """ # NOTE(cpp-cabrera): make it *very* clear to data storage # drivers that we are operating in a dynamic mode. general_opts = utils.dict_to_conf({'dynamic': True}) # NOTE(cpp-cabrera): parse general opts: 'drivers' storage_type = six.moves.urllib_parse.urlparse(uri).scheme driver_opts = utils.dict_to_conf({'storage': storage_type}) # NOTE(cpp-cabrera): parse storage-specific opts: # 'drivers:storage:{type}' storage_opts = utils.dict_to_conf({'uri': uri, 'options': options}) storage_group = u'drivers:storage:%s' % storage_type # NOTE(cpp-cabrera): register those options! conf = cfg.ConfigOpts() conf.register_opts(general_opts) conf.register_opts(driver_opts, group=u'drivers') conf.register_opts(storage_opts, group=storage_group) return conf
def _init_driver(self, shard_id): """Given a shard name, returns a storage driver. :param shard_id: The name of a shard. :type shard_id: six.text_type :returns: a storage driver :rtype: marconi.queues.storage.base.DataDriver """ shard = self._shards_ctrl.get(shard_id, detailed=True) # NOTE(cpp-cabrera): make it *very* clear to data storage # drivers that we are operating in sharding mode. general_dict_opts = {"dynamic": True} general_opts = common_utils.dict_to_conf(general_dict_opts) # NOTE(cpp-cabrera): parse general opts: 'drivers' uri = shard["uri"] storage_type = six.moves.urllib_parse.urlparse(uri).scheme driver_dict_opts = {"storage": storage_type} driver_opts = common_utils.dict_to_conf(driver_dict_opts) # NOTE(cpp-cabrera): parse storage-specific opts: # 'drivers:storage:{type}' storage_dict_opts = shard["options"] storage_dict_opts["uri"] = shard["uri"] storage_opts = common_utils.dict_to_conf(storage_dict_opts) storage_group = u"drivers:storage:%s" % storage_type # NOTE(cpp-cabrera): register those options! conf = cfg.ConfigOpts() conf.register_opts(general_opts) conf.register_opts(driver_opts, group=u"drivers") conf.register_opts(storage_opts, group=storage_group) return utils.load_storage_driver(conf, self._cache)