在代码中注册和记录策略¶
https://blueprints.launchpad.net/heat/+spec/policy-in-code
操作员需要维护一个(可能复杂的)policy.json 文件,该文件可能与默认文件仅略有不同,并且 policy.json 文件中的某些值与配置选项相关联,而两者之间没有明确的依赖关系。
问题描述¶
作为操作员,我希望在 policy.json 文件中仅指定与默认值不同的策略。
此支持被声明为 Queens 版本的跨项目 OpenStack 社区目标 [1]。
提议的变更¶
自 1.9.0 版本以来,oslo.policy 支持以类似于 oslo.config 处理配置选项的方式处理策略 [2]。现在可以在 Python 代码中声明策略,并提供默认值,然后在策略引擎中注册。策略引擎然后在启动时加载这些策略和 policy.json 文件,后者中的条目会覆盖代码中指定的默认值。
这样,具有默认策略的服务可以在没有 policy.json 文件的情况下运行,并且操作员仅需要在其规则不同时才填充此文件。
另一个好处是,这允许在默认策略中使用配置文件中的值——例如,Heat 中临时用户的角色名称当前同时在配置文件和默认 policy.json 文件中定义,因此操作员需要在更改此角色时更新 heat.conf 和 policy.json 文件。
预计服务启动期间会有轻微的性能损失,并且运行时性能会有略微提升,因为无需重新读取可能很大的 policy.json 文件。
可以基于已注册的策略生成示例策略文件,而无需手动维护一个。
oslo.policy >= 1.10 支持多种额外的生成策略相关文件的方式
合并策略文件 - 可以生成一个策略文件,它是已注册默认值和从文件加载的策略的合并。这显示了正在使用的有效策略。
冗余策略文件 - 可以生成一个列表,其中包含在文件中定义的与代码中注册的默认值匹配的策略。这些是为保持文件小而易懂而从文件中删除的候选对象。
Heat 已经在其需求中依赖 oslo.policy >= 1.23,因此不需要增加依赖项。
备选方案¶
无。需要完成跨项目目标。
实现¶
负责人¶
- 主要负责人
pshchelo <Pavlo Shchelokovskyy> IRC: pas-ha
里程碑¶
- 完成目标里程碑
queens-1
工作项¶
累积、定义和在 Python 代码中注册策略
更改对
Enforcer.enforce的调用到Enforcer.authorize(调用签名未更改)修改 genconfig tox 环境,也生成示例 policy.json 文件
删除 policy.json 文件并更新 DevStack / Heat 的 DevStack 插件,使其不使用 policy.json
(参见依赖项)提供 configs/scripts 以生成合并策略文件和冗余策略文件。
相应地修改文档
依赖项¶
无。