Keystone 的 Devstack 插件

bp devstack-plugin

问题描述

一些功能测试需要在自定义环境中运行。

例如,联合测试需要在 Apache 中配置服务提供程序模块,并与外部身份提供程序(如 Shibboleth 或另一个 Keystone,用于 Keystone 到 Keystone 的联合身份验证)进行联合身份验证。

幸运的是,Devstack 包含一种机制,允许脚本被插入,以便在安装的不同阶段由 stack.sh 调用,这使得它非常适合准备我们所需的自定义环境。[1]

之前的尝试[2]编写 Keystone 的 Devstack 插件过于复杂且难以测试。为了使其更易于审查和测试,它将被分解成更小的部分。这些部分将逐步推出,逐步添加测试环境所需的的功能。

本规格的目的是提供一个描述所采取方法的参考。

提议的变更

本规格建议为 Keystone 添加一个树内 Devstack 插件。该插件将在功能作业中启用。

Keystone 插件将通过将以下内容添加到 local.conf 文件中来启用

# local.conf
enable_plugin keystone https://git.openstack.org/openstack/keystone.git

如果您正在从 Gerrit 检出,请将 git url 替换为 $KEYSTONE_REPO

为了使插件更具可配置性,不同的功能将通过将 enable_service keystone-<feature_name> 添加到 local.conf 来启用。例如,以下内容将在 Keystone 中启用联合身份验证功能,并使 Keystone 充当身份提供程序

# local.conf
enable_service keystone-federation
enable_service keystone-idp

目录结构

/opt/stack/keystone/
 └── devstack/
     ├── settings
     ├── plugin.sh
     ├── files/
     └── lib/
         ├── federation.sh
         └── {{feature}}.sh

插件预计具有非常特定的结构。应该有一个顶层 /devstack,其中至少包含一个 plugin.sh 文件。这是 Devstack 调用到的文件。[3] 已经将此最小结构添加到 Keystone 树中。

此外,可以有一个 settings 文件,该文件会在早期被引用,以向插件提供默认值。这些默认值可以被用户对 local.conf 的更改覆盖。

Keystone 插件将在此结构的基础上,包含两个额外的目录。

/devstack/files 将包含预配置或模板化的文件,用于需要安装的外部服务。

/devstack/lib 将包含用于特定功能的脚本,并组织到文件中。例如,/devstack/lib/federation.sh 将包含安装和配置联合身份验证的步骤。此目录中的文件将被引用并从 plugin.sh 调用。

联合身份验证阶段

[3] 已经添加了最小结构,[4] 将实现与 testshib.org 的联合身份验证,testshib.org 作为身份提供程序。

这只是一个中间步骤,因为我们不希望依赖外部身份提供程序来作为我们测试基础设施的关键部分。与 testshib.org 联合身份验证使我们能够基于我们知道可用的东西进行构建,并且易于重现,从而使审查人员能够更轻松、更自信地审查插件。

下一步将是在插件中安装本地 Shibboleth 实例作为身份提供程序。在 Ocata 会议期间[5],讨论使用预配置的 docker 镜像来简化 Shibboleth 部署。

一旦我们能够使本地 Shibboleth 与 testshib.org 协同工作,我们就可以将其插入 Keystone。

最后,下一步将是使 Keystone 充当身份提供程序,并支持多个身份提供程序。

备选方案

  • 使用编排工具设置测试环境。

安全影响

通知影响

其他最终用户影响

性能影响

其他部署者影响

开发人员影响

每当一个补丁更改了 Keystone 为插件自动设置的特定功能的配置方式时,都需要更新插件。

实现

负责人

主要负责人

knikolla

其他贡献者

rodrigods

工作项

  • 添加“hello world” Devstack 插件(完成)

  • 在非投票功能 v3 作业中启用插件(完成)

  • 实现与 testshib.org 作为身份提供程序的联合身份验证

  • 实现与本地部署的 Shibboleth 作为身份提供程序的联合身份验证

  • 实现与多个身份提供程序的联合身份验证(可能是一个不同的作业)

  • 实现与 Keystone 作为身份提供程序的联合身份验证(可能是一个不同的作业)

依赖项

文档影响

参考资料

1. Devstack 插件文档 2. 之前的 Devstack 插件审查 3. 为 Devstack 插件创建结构 4. 与 testshib.org 联合身份验证 5. Ocata 会议期间测试工作会话的 Etherpad