Example #1
0
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
Example #2
0
    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)