在代码中注册和记录策略

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 以生成合并策略文件和冗余策略文件。

  • 相应地修改文档

依赖项

无。