首页 » OpenStack系统架构设计实战 » OpenStack系统架构设计实战全文在线阅读

《OpenStack系统架构设计实战》6.5.2 资源类型的实现

关灯直达底部

Heat提供了一种开放式的资源接入框架,通过资源接入框架为所有的资源提供资源接入支持。当需要接入一种新的资源时,只需要实现所提供的资源接口,并完成对应的资源操作逻辑即可。

目前,Heat的所有资源模块实现均在engine/resources目录下,为了了解Heat的资源类型是如何工作的,我们以OS::Nova::Server资源类型为例子,讲解Heat通用的资源类型的实现模式。

OS::Nova::Server这个资源类型在Heat中完成了虚拟机创建和相应的初始化工作。如云磁盘挂载、调用cloud-init/heat-cfntool和虚拟机交互等。为了实现这个功能,需要完成以下工作。

1)在engine/resources目录下创建一个server.py文件,这个文件首先要定义一个resource_mapping方法来确定资源类型名称和实现类的映射关系,如下:

def resource_mapping: return {'OS::Nova::Server': Server, }

这样,Heat引擎就可以识别这个资源类型的具体实现。

2)如上面定义的类型映射关系所示,需要在Server.py中定义一个Server类,继承engine.resource.resource.Resource,并重写具体逻辑,作为资源类型的具体实现,如下:

class Server(stack_user.StackUser):

这里的父类stack_user.StackUser是engine.resource.resource.Resource的一个子类。

3)在Server类中,实现资源类型的生成周期管理操作,如handle_create()完成资源的创建操作。如果此时需要调用OpenStack的其他组件,则可通过Heat内置的Clients组件进行调用。在一个资源操作中,可能会与多个组件发生多次交互,直至完成资源的创建,如这里的虚拟机创建过程,先会调用Glance进行镜像信息获取和验证,然后再调用Nova进行虚拟机创建。创建过程中,还是调用Neutron组件进行网络初始化。

4)资源接入的具体调用流程如下:

总体上,我们也可以将一个Heat模板理解为一个最大的资源,将Heat模板丢给Heat引擎执行时,模板首先会被解析成一个大的资源类型,然后再依次将模板内的资源解析成小资源模板进行处理。

完整的Heat内置资源类型与OpenStack各组件之间的整体交互关系如图6-2所示。