跳转到: 导航, 搜索

Nova的Puppet配置

  • Launchpad条目: FIXME
  • 创建时间: 2012年1月17日
  • 贡献者: Andrew Bogott, Ryan Lane

总结

通过Nova API支持在实例上进行Puppet配置。

发布说明

管理员将能够通知Nova可用的Puppet类及其关联变量的列表。

管理员将能够为整个云或指定项目设置默认类和默认变量值。

用户将能够包含和配置实例的选定一组可选的Puppet类和变量。

原理

目前,在Nova上提供新的系统配置需要创建自定义镜像。添加Puppet支持将允许对实例配置进行更细粒度的控制。

用户故事

前提条件

- 此设计中讨论的所有镜像都假定已准备好Puppet,并在创建时预安装了Puppet客户端以运行。

- 假定实例在创建时知道它们需要的任何Puppet配置信息(例如,如何联系Puppet master)。

- 假定所有Puppet类在所有镜像类型上都能表现良好。

- Puppet master(如果有的话)可能托管在openstack内部或外部;此设计不涉及master的配置。

设计

首先,管理员将通知Nova类和变量的存在,这些类和变量可以任意命名。这组类和变量构成全局Puppet菜单。全局菜单中的类可以默认启用,并且变量可以赋予默认值。

对于给定的项目,全局Puppet菜单上的每个类将具有三种状态之一:不可用、可用或默认。所有类都以“不可用”状态开始,但可以通过API调用更改状态。“默认”状态意味着这些类将在项目中的所有实例上安装。变量的处理方式类似,但如果它们设置为“默认”状态,它们也将接受默认值。项目中的可用或默认类和变量构成项目Puppet菜单。

在启动或运行时,实例的用户可以操作项目Puppet菜单中的类和变量。“可用”类可以启用或禁用。“默认”类默认启用,但可以禁用。用户还可以根据需要配置项目菜单中的Puppet变量。

当创建实例或更改实例的Puppet设置时,实例内的site.pp文件将同步到指定的设置。

实现

将在Nova数据库中添加三个新表:puppet_entries、puppet_project_states和puppet_instance_states。每个类或变量将在puppet_entries中有一条记录(可能包含其他信息,例如数据类型或默认值)。然后,对于每个项目,可以通过将类或变量添加到puppet_project_states来使其可用,将类或变量与项目或实例关联起来,并指定安装状态和默认值。 同样,如果实例中某个类或变量的状态与puppet_project_states中指定的状态不同,它将在puppet_instance_states中具有相应的条目。

与实例通信Puppet信息将由可配置的驱动程序处理,以便支持各种Puppet配置。第一个驱动程序将使用文件注入,将所有适当的数据记录编译成一个site.pp文件,并将该文件安装到实例上的适当位置。

该驱动程序将提供一个非常简单的接口,例如

puppetize(instance_id, dictionary_of_classes_and_variables)

FIXME: 我们是否应该将类和变量拆分,以便有六个表而不是三个,并且三个驱动程序参数而不是两个?

UI 变更

“nova”和/或“nova-manage”命令行工具将扩展为提供Puppet配置选项。最有可能的是,此接口将包括基于文件的选项,因为配置会很冗长。

理想情况下,Horizon也应该提供一个配置工具,但这很可能留到以后再做。

代码变更

迁移

测试/演示计划

未解决的问题

BoF 议程和讨论