配置验证器¶
https://blueprints.launchpad.net/oslo.config/+spec/oslo-validator
支持对操作员配置文件中的 oslo.config 选项进行基本级别的验证,以及潜在地在服务启动时验证选项(示例用法)。
问题描述¶
对于任何项目来说,拥有无效的配置文件都非常容易。
无效的段落
无效的选项名称
已弃用的选项
拼写错误
高级选项的使用(警告)
缺少配置的必需选项
超出范围的选择的使用
在配置文件中使用默认值
配置验证,以其基本形式,可以通过提供一种验证选项和配置值的方式,手动通过 CLI 以及在服务启动时(示例用法)来帮助缓解这些基本问题。操作员们已经要求这个功能一段时间了,因为选项的版本差异可能很大。
用例¶
作为操作员,能够在部署前验证配置是无价的,为 CI/CD 利用和手动检查提供了清晰的路径。
作为开发人员,能够为操作员提供针对项目配置文件的基本验证选项。这可以通过 shell 脚本遍历每个命名空间来实现,就像 Neutron 使用的那样,或者可以通过特定的配置验证参数来实现,例如 ironic-api –validate-config。实现方式可以根据项目进行自定义。
提议的变更¶
新的验证器模块将提供两种使用方式:CLI 命令和在服务启动时使用验证器的能力(示例用法)。Oslo 配置验证器将是对常见配置错误的简单检查,绝不提供关于正确配置或期望配置的意见。
对于 CLI 使用,将在 oslo.config 中添加一个新的入口点,oslo-config-validator。类似于 oslo-config-generator,操作员可以传递一个参数,–namespace,来指示他们的配置文件将要验证的应用程序命名空间。或者,可选地,操作员/开发人员可以传递 –validator-config-file,其中包含应用程序命名空间。此外,–config-file 将是一个必需的参数,用于指示配置文件的位置。理想情况下,每个项目都应该实现一个 shell 脚本工具来遍历项目使用的命名空间以进行验证。例如,以下是 Neutron 中的用法: neutron/blob/master/tools/generate_config_file_samples.sh
对于模块导入,开发人员可以使用 validator.validate 并传递一个必需的配置选项集合,以对照 oslo.config 中注册的命名空间和选项进行检查。这可以在服务启动时(示例用法)执行,在摄取配置文件后,并输出到配置的日志文件。它也可以在每个项目中用作额外的参数,例如 ironic-api –validate-config,其中配置随后被验证为单独的操作,如果未开发上述 shell 脚本。两种选项都可用,每个项目如何实现配置验证超出此规范的范围。
对 validator.validate 的一个用例是在服务启动时失败,其中 validate 返回 valid_configuration(bool)、invalid_configuration_items(dict)。返回值可以帮助确定服务是否能够启动,方法是检查 invalid_configuration_items[‘errors’] (bool) 如果 valid_configuration 为 false。这将允许开发人员通过拥有 invalid_configuration_items[‘errors’] (bool) 和 invalid_configuration_items[‘warnings’] (bool) 分开的各自的可迭代项目列表来控制警告的抑制。
invalid_configuration_items['config_errors'] = [
{'config_item': 'namespace', 'item_name': 'DEFULT',
'message': 'Namespace DEFULT does not exist.'},
{'config_item': 'option', 'item_name': 'auth_uri',
'message': 'Option auth_uri has no value assigned.'},
]
以及配置警告
invalid_configuration_items['config_warnings'] = [
{'config_item': 'option', 'item_name': 'auth_strategy',
'message': 'Option is configured with the default value, not required.'},
{'config_item': 'option', 'item_name': 'some_advanced_option',
'message': 'Option some_advanced_option is an advanced option and may'
'effect performance.'},
]
这些只是潜在返回的数据结构的示例,并且在实现配置验证器时可能会更改。无论如何,将返回一个错误/警告列表,以便于输出到控制台或日志。
配置验证器将报告以下差异
选项不在命名空间中(错误)
选项没有值(错误)
选项没有值且是必需的(错误)
选项值不在范围内(错误)
选项值为默认值,配置中不需要(警告)
选项已弃用(警告)
选项是高级选项(警告)
选项类型验证,例如 ‘2’ 与 2(错误)
无效的配置段(错误)
缺少配置段,例如 [DEFAULT](警告)
要添加的文件
oslo.config/oslo_config/validator.py
oslo.config/doc/source/validator.rst
要修改的文件
oslo.config/setup.cfg
备选方案¶
无。
Impact on Existing APIs¶
无。
安全影响¶
无。
性能影响¶
这可能是服务启动时的额外检查(示例用法),这可能会影响完全运行所需的时间。以最基本的形式,通过 CLI 进行手动检查不会产生性能影响。
Configuration Impact¶
无。
开发人员影响¶
无。
Testing Impact¶
需要额外的单元测试来涵盖验证器提供的已引发的警告和错误。
实现¶
负责人¶
- 主要负责人
跳过
里程碑¶
- 完成目标里程碑
ocata-1
工作项¶
创建新模块 validator.py。
创建新的入口点 oslo-config-validator。
创建新的文档文件 validator.rst
孵化¶
无。
采用¶
很可能这个模块将在整个 OpenStack 中使用,因为它满足了操作员对复杂配置文件的需求。
库¶
oslo.config
预计 API 稳定¶
无。
文档影响¶
需要在 validator.rst 中开发额外的文档,以详细说明如何在 CLI 级别和作为模块使用验证器。
依赖项¶
这个额外的模块不需要任何依赖项。
参考资料¶
oslo.config: https://docs.openstack.org/oslo.config/latest/
neutron: https://docs.openstack.org/neutron/latest/
ironic: https://docs.openstack.org/ironic/latest/
注意
本作品采用知识共享署名 3.0 非移植许可协议授权。 http://creativecommons.org/licenses/by/3.0/legalcode