Heat-engine由cfn、hot、resource、client和notification组件组成,实现了Heat模板中格式校验、资源依赖分析、资源类型映射管理、资源交互通知,以及与其他OpenStack组件进行通信的鉴权和消息处理,是整个Heat的核心。
图6-2 完整的Heat内置资源与OpenStack各组件之间的整体交互关系
1.模板格式校验
Heat-engine的首要工作是完成模板格式校验。此功能由Heat-engine的cfn和hot组件完成,分别对应AWS和HOT类型的两种模板格式。
2.资源依赖分析
资源依赖分析是通过Heat-engine的Resource模块中的stack组件完成的,具体为检测模板定义的ref和deponds_on属性的有效性和关系型,将所有资源形成一个有效的资源关系图。
3.资源类型映射
Heat模板中的每一种资源都会对应一个有效的资源类型,引擎通过一个唯一的资源类型名称找到对应的资源实现,这个映射关系由资源的接入机制实现,具体为:扫描指定目录下的所有类,如果发现其中包含了资源类型实现映射函数resource_mapping(),并且指向一个有效的实现,则建立相应的映射关系,为后续的栈调度执行打下基础。
4.调度引擎
调度引擎是Heat-engine的核心,它为模板的执行建立了一套完整的流程引擎,包括资源创建状态监听,资源创建状态回调通知等。通常采用数据栈的方式存储流程定义,提供与其他组件的同异步交互控制机制,并负责栈生命周期状态的管理,在出现异常时,还能进行相应的回滚操作,并控制资源的依赖关系,保证回滚操作的完成。
5.组件交互
在资源实现过程中存在着大量与OpenStack其他组件进行交互的动作,Heat-engine为这些交互统一封装了Client组件,提供了统一鉴权、统一消息格式转换功能,便于资源实现过程中发生的组件交互操作完成。
6.回调通知
在资源实现过程中存在着大量的异步通知场景,需要Heat-engine通过相应的回调通知事件来完成,回调通知模块实现了该功能。