修改模板中‘is_default’行为,相对于‘is_protected’

https://blueprints.launchpad.net/sahara/+spec/replace-is-default

随着通用is_protected字段在所有对象上的添加,集群和节点组模板上的is_default字段变得半冗余。其语义应该被改变;具体来说,更新和删除操作的限制应该完全由is_protected处理。is_default字段仍然应该用于标识由sahara-templates工具进行批量更新和删除操作的默认模板。

问题描述

is_protectedis_default字段都控制着更新和删除操作的限制。这种重叠是不清晰的,应该被解决,以避免对最终用户和开发人员的困惑,并降低代码维护的复杂性。

更新或删除操作的限制不再与is_default字段相关联。相反,它应该仅标记使用sahara-templates工具创建的默认模板,以便批量更新和删除操作能够继续按原样工作。

提议的变更

移除sahara数据库层中基于is_default字段对模板更新和删除操作进行异常抛出的检查。这将把限制控制权交给is_protected。请注意,将不再有错误消息告知用户更新或删除默认模板失败——它将以is_protected字段的名义表达。

修改与sahara捆绑的所有默认模板集,以包含将is_protected字段设置为True。这将确保按原样使用的sahara模板的创建将受到更新和删除操作的限制。

提供一个数据库迁移,将所有is_default设置为True的模板的is_protected设置为True。这将保证对现有默认模板的更新和删除操作的限制继续存在。

目前,如果conductor方法上设置了ignore_defaults标志,sahara将允许更新和删除默认模板。稍微修改此标志的名称和处理方式,以便如果设置了该标志,sahara将忽略is_protected标志。这将允许sahara-templates工具轻松更新和删除默认模板,而无需先清除is_protected标志。

编写关于默认模板最佳实践的文档章节。鉴于is_protectedis_public的添加以及is_default语义的改变,提供一些最佳实践建议如下:鼓励操作员将默认模板集加载到adminservice租户中,然后通过is_public将其提供给用户。如果需要修改默认模板,可以加载、复制和修改,并将生成的模板通过is_public提供给用户。这将确保与sahara捆绑的原始默认模板始终可用作参考,并将is_protected设置为True。或者,管理员可以从sahara分发中将默认模板目录复制到另一个位置,并在加载之前在磁盘上修改它们。

更改的影响:现在,拥有默认模板的租户可以设置is_protectedTrue,然后编辑这些模板。如果随后从sahara-templates工具对这些模板进行更新,这些编辑将被覆盖。这应该在上述最佳实践文档中明确说明。此外,is_default仍然是一个只能从sahara-templates工具设置的字段,以便可以作为一组管理默认集。

替代方案

无。原始默认模板实现的目标是

1 允许离线更新和删除默认模板 2 将一组节点组和集群模板视为一个连贯的集合 3 允许按插件和版本过滤操作

第一个要求排除了使用sahara客户端来管理默认模板。如果我们没有第一个要求,理论上可以使用sahara客户端来管理它们,但要求二和三意味着我们无论如何都需要在操作周围进行逻辑。最后,完全删除is_default字段会使我们有必要使用其他机制来标识默认模板。似乎最好是删除is_defaultis_protected的重叠功能,但保持当前实现的其余部分不变。

此外,这可以作为API V2计划的一部分推迟,但由于它对API的影响很小(见下文),因此似乎没有必要等待

数据模型影响

无,但提供适当的迁移,将所有is_default设置为True的现有模板的is_protected设置为True

REST API 影响

无,is_default只能通过conductor层直接访问。

其他最终用户影响

部署者影响

部署者应该熟悉我们将添加的关于默认模板的最佳实践文档。

开发者影响

Sahara-image-elements impact

Sahara-dashboard / Horizon 影响

实现

负责人

主要负责人

tmckay

其他贡献者

工作项

移除sahara数据库层中拒绝更新或删除默认模板的代码 更新与sahara捆绑的默认模板以包含is_protected 添加 alembic 迁移以设置现有默认模板上的is_protected 审查文档并添加最佳实践章节

依赖项

测试

单元测试就足够了。现有测试将被修改,以证明在此更改之后,默认模板可以在is_protected为False的情况下进行更新和编辑。现有的is_protected测试涵盖了正常的更新/删除控制。

文档影响

sahara-templates工具的文档可能会略有变化,在描述如何更新或删除默认模板时,我们将添加一个最佳实践章节,如上所述

参考资料