稳定的 Keystone 驱动接口

bp stable-driver-interfaces

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

  • 将当前驱动程序转换为新的驱动接口定义

  • 创建一个单独的仓库或测试套件,实现驱动程序的基本(只是简单)版本,用于验证/加载,以确保在接口更改时/如果接口更改时兼容性/加载按预期工作。

依赖项

文档影响

需要有关如何更新驱动接口以及兼容性中预期的内容的文档。我们的文档中需要清楚地标明驱动接口定义。

参考资料