项目历史¶
Adjutant 最初由 Catalyst Cloud 创建,旨在满足我们在 OpenStack 中缺失的功能需求。Catalyst Cloud 是一家总部位于新西兰的公共云提供商,专注于开源,拥有一支由运营商和开发人员组成的团队,他们都是 OpenStack 的贡献者。
Adjutant 的早期原型设计始于 2015 年底,旨在填补我们作为公共云提供商所需的一些缺失部分。早在 2014 年初,我们就已经开始设计它,其范围和设计经过多次更改,直到 2015 年底才开始初步的原型设计和实现。
最初,它被设计为一项管理客户、用户、项目、配额的服务,并能够处理新客户的注册和初始资源创建。它将作为 OpenStack 的一层,从用户角度来看,大多数非身份验证的身份管理都将通过它进行,而服务本身将对底层的 OpenStack 服务和资源进行相应的更改。它最终没有变得如此复杂和庞大的原因在于,OpenStack 本身以及许多服务(以及未来的路线图)已经计划了解决我们想要解决的许多问题的方案,而且我们的业务需求也发生了变化,将我们的客户信息存储在外部 ERP 系统(当时是 Odoo/OpenERP)中,而不是独立的单独服务。
因此,我们没有追求如此宏大的目标,而是尝试更小的方案,一项处理我们独特的公共云注册需求的的服务。它应该从某种来源(例如我们的网站发布的公共 API)接收注册数据,然后对其进行验证,向我们提供这些验证说明,并让我们决定是否需要该客户,甚至让系统本身根据某些标准批准该客户。然后它将在 Keystone 中创建用户,创建项目,授予他们访问权限,创建默认网络,并将客户数据链接并存储在我们的 ERP 和计费系统中。这就是最初的 ‘openstack-registration’ 项目,其命名在我们的 git 历史记录中可见,也是初始服务类型名称的来源。
当我们进行原型设计时,我们意识到它只是业务逻辑的工作流系统,因此我们决定使其灵活,并发现我们可以用它来做其他事情
允许非管理员用户邀请其他用户加入他们的项目。
让用户通过发送电子邮件令牌来重置密码。
在一个单一域环境中管理和创建子项目。
请求增加他们项目的配额。
所有这些都可以选择性地需要管理员批准用户请求。并提供良好的审计跟踪,以了解操作的来源以及谁批准了它们。
最终,它也更名了,因为称之为 OpenStack Registration 变得单调且不再准确。当时给它的名字是 StackTask,我们的系统中仍然存在该命名的元素,并且在 git 历史记录中也存在大量相关信息。最终我们会再次更改名称,因为该名称仍然感觉不合适,并且与 StackTach 太过接近。
大约在那个时候,我们还添加了插件支持,以尝试将任何特定于公司的代码从核心代码库中分离出来,在此过程中,我们意识到我们现在添加了多少额外的灵活性。
该服务为我们提供了一种围绕我们希望我们的客户能够触发的围绕 OpenStack 本身中更大且通常不安全的管理员 API 构建 API 的便捷方式。 具有这些工作流可以对我们的 ERP 系统和其他外部系统进行更改的能力。它为我们满足公共云业务需求和逻辑实际运作所需的缺失粘合剂。
但我们始终明确,如果某件事作为另一个服务的功能更有意义,我们应该在另一个服务中实现它。 这旨在成为一个粘合层,或者可能用于小型 API 功能,这些功能没有完全适合的位置,或者只是对现有 OpenStack 功能的包装,需要添加特定于组织的逻辑。
在整个过程中,我们的目标始终是保持该项目完全开源,邀请外部贡献,在 OpenStack 社区可以看到和透明地了解我们对该服务的内部使用及其计划的地方进行规划、错误跟踪和开发。 该代码已经在我们的公司 github 上一段时间了,但现在是时候将其移动到更好的地方了。
因此,在 2017 年,我们再次更名,然后将所有核心仓库移动到 OpenStack 基础设施,以及代码审查、错误和规范跟踪。
Adjutant,以其当前的形式,是该过程的 culmination(最终成果),虽然 Adjutant 背后的主要驱动力是我们自己的需求,但我们的意图始终是为任何人提供 Adjutant 以供构建和使用,以便他们的努力不会浪费在重复劳动上。