加载配置文件

配置管理器默认定义了两个 CLI 选项,--config-file--config-dir

class ConfigOpts:

    def __call__(self, ...):

        opts = [
            MultiStrOpt('config-file',
                    ...),
            StrOpt('config-dir',
                   ...),
        ]

        self.register_cli_opts(opts)

选项值从任何提供的配置文件中使用 oslo_config.iniparser 解析。如果没有指定任何文件,则使用默认集合,例如 glance-api.conf 和 glance-common.conf

glance-api.conf:
  [DEFAULT]
  bind_port = 9292

glance-common.conf:
  [DEFAULT]
  bind_host = 0.0.0.0

配置文件中的行不应以空格开头。配置文件还支持注释,注释必须以 ‘#’ 或 ‘;’ 开头。配置文件和命令行中的选项值按顺序解析。相同的选项(包括已弃用的选项名称和当前选项名称)可以在配置文件或命令行中多次出现。后面的值始终覆盖前面的值。

在同一配置目录中,配置文件的解析顺序由其文件名定义的字母顺序决定。配置目录中的文件在任何单个配置文件之后解析,因此在配置文件和配置目录中都出现的选项值将使用目录中的值。

CLI 参数和配置文件的解析通过调用配置管理器来启动,例如

conf = cfg.ConfigOpts()
conf.register_opt(cfg.BoolOpt('verbose', ...))
conf(sys.argv[1:])
if conf.verbose:
    ...

选项值插值

选项值可以使用 PEP 292 字符串替换引用其他值

opts = [
    cfg.StrOpt('state_path',
               default=os.path.join(os.path.dirname(__file__), '../'),
               help='Top-level directory for maintaining nova state.'),
    cfg.StrOpt('sqlite_db',
               default='nova.sqlite',
               help='File name for SQLite.'),
    cfg.StrOpt('sql_connection',
               default='sqlite:///$state_path/$sqlite_db',
               help='Connection string for SQL database.'),
]

注意

可以使用 $$ 避免插值。

注意

可以使用 . 来分隔选项与其他组,例如 ${mygroup.myoption}。