Heat/插件
Heat 资源插件
Heat 引擎现在支持资源插件模块,这允许 Heat 的操作员向他们的用户提供自定义资源处理器。OpenStack 云。此功能从 Heat 的 grizzly-2 版本开始可用。
内置资源
Heat 旨在包含核心 OpenStack 服务的内置资源。不属于核心 OpenStack 的项目(包括孵化项目)应将任何 Heat 资源实现作为 Heat 树外部的插件进行维护。(这与 Horizon 模块的策略相同。)
当各自的客户端库存在时,将提供与 Heat 一起提供的内置资源类型。(例如,如果安装了 python-neutronclient,则 Neutron 资源将可用。)
插件可以通过为相同的资源类型提供另一个实现来覆盖内置资源实现。
安装和配置
可以在文件 /etc/heat/heat-engine.conf 中的 plugin_dirs 选项中定义搜索插件的目录列表。默认情况下,搜索目录 /usr/lib64/heat 和 /usr/lib/heat。
要安装插件,请将 Python 模块复制到其中一个配置的插件目录。请注意,在加载新插件后,必须重新启动 heat-engine。
配置的目录被视为包 heat.engine.plugins 的 __path__ 条目。此包中出现的所有 Python 模块都将被导入并扫描资源实现。
编写插件
如果插件模块包含一个名为 resource_mapping 的函数,则会调用它以获取资源名称到处理程序类的映射。结果应该是一个表示此映射的 Python 字典。例如
def resource_mapping():
return {
'AWS::EC2::Instance': Instance,
}
其中每个键值对的值部分是一个表示所需资源的类。该类应该是 heat.engine.resource.Resource 类的子类。
资源子类必须包含一个名为 properties_schema 的属性,该属性是一个表示其属性模式的字典。(模式键和允许的类型在模块 heat.engine.properties 中定义。)
它们也可能并且通常应该包含 handle_create()、handle_update() 和 handle_delete() 方法。如果存在,这些方法将在创建、更新或删除资源时(分别)被调用,以执行管理底层资源的主要工作。resource_id_set() 方法可用于将对底层资源的句柄存储在数据库中。请参阅 Heat 中的内置资源,以获取详细的实现示例。
您还可以子类化内置 heat.engine.resources 包中的现有资源类型。请记住,您甚至可以通过在资源映射中以相同的资源类型发布它来覆盖内置资源。
堆栈资源
类 heat.engine.stack_resource.StackResource 为资源类添加了方便的方法,用于管理 Heat 堆栈作为资源。这一个典型的例子是 AWS::CloudFormation::Stack 资源类型,但其他资源也可以在幕后作为嵌套堆栈实现。
要使用此类,您的 handle_create() 方法应返回调用 create_with_template() 的结果,其中包含要实例化的模板和任何参数,并且您的 handle_delete() 应调用 delete_nested()。堆栈的输出可从 get_output() 方法获得。