共享后端配置段¶
https://blueprints.launchpad.net/cinder/+spec/shared-backend-config
添加一个新的配置段,用于共享后端配置选项。
问题描述¶
目前在多后端 cinder.conf 中共享后端配置选项的方式并不理想。你可以将内容放在 DEFAULT 中,但如果驱动程序在自己的段中定义了这些选项,它们的 self.configuration 将无法看到它们。你也可以直接查看 DEFAULT 段,但如果你确实想在驱动程序后端段中拥有一些特殊设置,就无法轻松地覆盖它。例如,考虑以下 cinder.conf
[DEFAULT]
enabled_backends = backend1, backend2, backend3
...
my_driver_param = foo
...
[backend1]
...
my_driver_param = bar
[backend2]
..
# not specifying the param
[backend3]
...
(also not specifying, maybe even a different volume driver, doesn't matter)
最终的结果是 backend1 获得 ‘bar’,而 backend2/3 获得 ‘my_driver_param’ 的默认值。要让它们都使用 ‘foo’,我们需要类似这样的配置:
[DEFAULT]
enabled_backends = backend1, backend2, backend3
...
[backend1]
...
my_driver_param = bar
[backend2]
..
my_driver_param = foo
[backend3]
...
my_driver_param = foo
困惑的一部分在于,如果你不使用多后端格式,你实际上希望 DEFAULT 中的选项被设置。
用例¶
这里的主要用例是 cinder.conf 中与多个后端相关的共享配置。同时也有助于减少对 DEFAULT 中共享配置选项的一些困惑。
提议的变更¶
新的配置段称为 ‘backend_defaults’,它将包含每个后端都可以访问的配置选项。如果任何选项也在后端段中,则该后端特定的值将优先。可以安全地假设共享配置中的选项将被共享,并且可供所有后端使用。无需猜测 DEFAULT 中的设置。
一个新的配置可能如下所示:
[DEFAULT]
enabled_backends = backend1, backend2, backend3
...
[backend_defaults]
my_driver_param = foo
[backend1]
...
my_driver_param = bar
[backend2]
..
# not defining the value, but it gets picked up
[backend3]
...
# same here..
这与上面的示例相同,其中所有后端都定义了该值。这个简单的示例并没有真正展示很多好处,所以一个稍微更现实的示例可能是:
[DEFAULT]
enabled_backends = pure1, pure2, pure3
...
[backend_defaults]
volume_driver = cinder.volume.drivers.pure.PureISCSIDriver
driver_ssl_verify = true
driver_ssl_cert = /etc/blah/my_cert
use_multipath_for_image_xfer = true
use_chap_auth = true
image_volume_cache_enabled = true
image_volume_cache_max_count = 15
image_volume_cache_max_size_gb = 200
max_over_subscription_ratio = 10
pure_eradicate_on_delete = false
[pure1]
san_ip = 1.2.3.4
pure_api_token = abcdef123456
max_over_subscription_ratio = 50
[pure2]
san_ip = 1.2.3.5
pure_api_token = abcdef1234567
image_volume_cache_max_count = 25
[pure3]
san_ip = 1.2.3.6
pure_api_token = abcdef12345678
所以这里我们有很多共享配置选项,只留下一些特定于每个后端的选项。
除了共享配置段之外,我们将弃用通过 DEFAULT 段设置后端的方式。我们将只允许使用 “enabled_backends” 配置选项使用多后端风格的配置。
备选方案¶
我们可以更改行为,使 DEFAULT 中的内容这样做,但它将与旧的 cinder.conf 不兼容。升级时部署者的行为可能不是他们所期望的。
数据模型影响¶
无
REST API 影响¶
无
安全影响¶
无
通知影响¶
无
其他最终用户影响¶
无
性能影响¶
无
其他部署者影响¶
将需要学习一种新的配置机制,但旧的配置风格仍然可以正常工作。最终他们需要迁移到使用 “enabled_backends” 配置选项,这个过程将遵循标准的弃用流程。
开发人员影响¶
除了需要了解驱动程序如何获取其配置值之外,没有其他任何内容。
实现¶
负责人¶
- 主要负责人
patrick-east
工作项¶
在没有 “enabled_backends” 的情况下初始化 c-vol 时添加警告
修改驱动程序配置实用程序,首先查找此段,如果已定义,则使用后端特定的值覆盖值。
添加一些单元测试
将配置合并到多后端 tempest 测试中
依赖项¶
无
测试¶
单元测试
使用 devstack 的 Tempest 测试配置(达到目标,取决于时间安排)
文档影响¶
更新的驱动程序配置参考
驱动程序开发文档,解释其工作原理