oslo-config-generator和老版本的示例配置生成脚本




基于老版本自己改写的一个sample文件生成脚本

nova老版本(我之前用的是H版本)的nova.conf.sample文件生成使用的是一个shell脚本和几个python脚本,其中python脚本又依赖了common目录下的几个py文件,我这边改写了一下,把依赖提取到统一的py文件里面,形成了一个通用的sample文件生成脚本,可以继续用在基于oslo.config库进行配置管理的代码项目中,但有一个缺点,就是使用到的第三方库比如oslo.log,它也用到了oslo.config管理配置,我的这个脚本不能把里面的配置生成出来(debug=True这种配置就丢了),也懒得改了。

代码在这里:https://github.com/aspirer/scripts/tree/master/generate_sample

为啥要写这个,原因就是折腾了好久的oslo-config-generator都没折腾好,配置模板的内容一直为空,不过后来同事又折腾了一次,参考OpenStack senlin项目,总算折腾好了,下面会介绍问题出在哪里。

oslo-config-generator

参考:https://docs.openstack.org/oslo.config/latest/cli/generator.html

之前一直生成不成功,没有内容,是因为没有实现list_opts方法,貌似之前看官方文档的时候没看到这段,也可能是我忽视了。

也可以用yield来替代return的list,多个opt的话就写多行(参考的senlin项目):

另外还需要注意namespace问题,namespace是用来指定你的list_opts的路径的,一个项目可以有多个namespace,也可以只有一个,看你怎么实现的配置管理了(所有配置项都放在一个py文件里就一个namespace就够了,分开放可能要多个),可以配置在setup.cfg或setup.py的entry_points里面,具体参考官方文档就行了,使用命令生成的时候注意加上所有的namespace,或者加上oslo-config-generator的namespace配置文件。

另外还有一个问题要提示一下,虽然我们实验成功了,但发现它对中文配置项的支持不太友好,举例,两个模块里面定义了两个类似的StrOpt配置项,default、help都有中文(name是英文),生成的配置示例文件中,一个模块的中文配置的default、help都可以正常生成,但另外一个死活不行,把能生成的配置的default和help拷贝到有问题的配置项那里,还是一样无法生成,报编码错误,因此只能继续使用我上面那个改写的脚本,那个是都可以生成的。