稳定的 Keystone 驱动接口¶
Keystone 拥有一些后端驱动程序,理论上开发者或部署者可以用自己的实现来替换它们(例如,使用 mongodb 作为 Identity 信息存储)。目前,这些驱动程序在每个周期中都经历了重大的接口变更,使得开发者难以维护自定义(或子类化)的驱动程序,因为每个版本都会导致所有 Keystone 驱动接口定义的显著差异。
问题描述¶
为了更好地支持开发者实现 Keystone 的非树内驱动程序,Keystone 驱动接口需要像 REST API 一样保持稳定。本规范旨在承诺每个驱动程序的接口,并确保针对 Liberty 编写的驱动程序也能与 Keystone 的 M 版本兼容(至少 2 个版本的接口承诺)。
对给定驱动接口的更改需要兼容代码(由提出更改的开发者提供),以确保保持支持的稳定性窗口。这意味着当提出驱动接口更改(通过特定子系统的版本)时,Keystone 需要适当的逻辑来处理新版本和任何当前支持的版本。
提议的变更¶
每个子系统将对其驱动 ABC 基类进行重新设计。Keystone 稳定的驱动接口定义将进行版本控制,并且 Keystone 将确保它可以加载任何版本的驱动接口。
备选方案¶
替代方案包括“尝试”确保我们不破坏驱动接口 [尽最大努力] 或继续以当前方式允许接口在版本之间发生变化。然而,这对于部署者和开发者来说是一种次优体验。
安全影响¶
为了解决安全问题而对驱动接口进行更改可能会变得更加困难。不应产生直接的安全影响。每个驱动接口定义都需要进行审查,但这与影响给定驱动接口的任何更改相同。
通知影响¶
不需要通知变更。
其他最终用户影响¶
对最终用户没有变更。
性能影响¶
预计没有性能变化。
其他部署者影响¶
部署者将能够比以前使用更多版本的 Keystone 驱动程序。但是,应该对部署者产生最小的影响。
开发人员影响¶
开发者需要了解如何更改驱动接口定义。这包括需要在更改驱动接口时开发兼容层,以便可以加载以前版本的驱动程序。
实现¶
负责人¶
主要负责人
gyee (Guang Yee)
ajayaa (Ajaya Agrawal)
rushiagr (Rushi Agrawal)
工作项¶
评估并开发以下子系统的稳定接口
Catalog
Resource
Identity
Assignment
Assignment.Roles
Credential
Token Persistence
Token Provider
策略
Federation
OAuth
Endpoint Policy
将当前驱动程序转换为新的驱动接口定义
创建一个单独的仓库或测试套件,实现驱动程序的基本(只是简单)版本,用于验证/加载,以确保在接口更改时/如果接口更改时兼容性/加载按预期工作。
依赖项¶
无
文档影响¶
需要有关如何更新驱动接口以及兼容性中预期的内容的文档。我们的文档中需要清楚地标明驱动接口定义。