发明内容
为了克服现有技术的不足,本发明的目的在于提供一种云平台部署方法和系统,通过设计一个组件定义配置文件,开发者只需要遵循该组件定义配置文件中的规则对组件的目录结构、所需文件和部署步骤等组件相关内容进行定义即可,在部署时,由部署模块自动读取并解析组件定义配置文件中的内容进行部署。
为解决上述问题,本发明所采用的技术方案如下:
方案一:
一种云平台部署方法,包括以下步骤:
步骤A:前端模块根据用户的部署请求向部署模块发送获取相应的部署组件的请求;
步骤B:部署模块从预设的位置中获取与部署组件对应的组件定义配置文件并对其进行解析,根据解析的内容获取所需的组件包,并触发组件定义配置文件中所定义的针对组件的目录生成事件,同时,将解析后的组件定义配置文件内容传送至前端模块;
步骤C:前端模块将经过用户配置的部署方案传送至部署模块,同时,若组件定义配置文件中定义了可替换内容,则前端模块还将经过替换后的可替换内容传送至部署模块;
步骤D:部署模块根据前端模块所传送的部署方案结合解析后的组件定义配置文件生成供目标节点中的客户端执行的部署文件,还根据前端模块所传送的可替换内容替换对应的配置模板文件中的相应内容;
步骤E:目标节点中的客户端读取部署模块生成的部署文件,并执行部署文件中的部署指令。
进一步地,组件定义配置文件中预定义了组件的目录结构,在目录结构中预定义需要操作的文件,针对需要操作的文件预定义需要执行的动作,每个需要执行的动作对应有触发事件,由触发事件决定对应的动作在部署过程中的执行时间点,触发事件包括两种类型的触发事件,分别为服务器端类型和目标节点类型。
进一步地,需要执行的动作为执行脚本、替换内容、解压和同步文件中的一种或多种。
进一步地,目标节点中的客户端为puppet客户端,部署文件中包括部署方案文件和部署细节文件,部署方案文件中的内容包括目标节点地址和需要部署的组件名称,部署细节文件中的内容为根据目标节点类型的触发事件内容所生成的部署指令。
进一步地,在步骤C中,前端模块还将经过用户配置的部署方案和经过替换后的可替换内容保存至部署配置文件中,以供下一次部署该部署方案时可快速调用。
方案二:
一种云平台部署系统,包括以下模块:
部署请求模块:设于前端模块中,用于根据用户的部署请求向部署模块发送获取相应的部署组件的请求;
解析组件模块:设于部署模块中,用于从预设的位置中获取与部署组件对应的组件定义配置文件并对其进行解析,根据解析的内容获取所需的组件包,并触发组件定义配置文件中所定义的针对组件的目录生成事件,同时,将解析后的组件定义配置文件内容传送至前端模块;
部署配置模块:设于前端模块中,用于将经过用户配置的部署方案传送至部署模块,同时,若组件定义配置文件中定义了可替换内容,则前端模块还将经过替换后的可替换内容传送至部署模块;
部署文件生成模块:设于部署模块中,用于根据前端模块所传送的部署方案结合解析后的组件定义配置文件生成供目标节点中的客户端执行的部署文件,还根据前端模块所传送的可替换内容替换对应的配置模板文件中的相应内容;
执行部署文件模块:设于目标节点中,用于由客户端读取部署模块生成的部署文件,并执行部署文件中的部署指令。
进一步地,组件定义配置文件中预定义了组件的目录结构,在目录结构中预定义需要操作的文件,针对需要操作的文件预定义需要执行的动作,每个需要执行的动作对应有触发事件,由触发事件决定对应的动作在部署过程中的执行时间点,触发事件包括两种类型的触发事件,分别为服务器端类型和目标节点类型。
进一步地,需要执行的动作为执行脚本、替换内容、解压和同步文件中的一种或多种。
进一步地,目标节点中的客户端为puppet客户端,部署文件中包括部署方案文件和部署细节文件,部署方案文件中的内容包括目标节点地址和需要部署的组件名称,部署细节文件中的内容为根据目标节点类型的触发事件内容所生成的部署指令。
进一步地,在部署配置模块中,前端模块还将经过用户配置的部署方案和经过替换后的可替换内容保存至部署配置文件中,以供下一次部署该部署方案时可快速调用。
相比现有技术,本发明的有益效果在于:通过设计一个规范的组件定义配置文件,开发者只需要遵循该组件定义配置文件中的规则对组件的目录结构、所需文件和部署步骤等组件相关内容进行定义即可,在部署前,用户只需要配置好目标节点的IP和需要部署的组件,接下来便由部署模块自动读取并解析组件定义配置文件中的内容进行部署。另外,在组件定义配置文件中可以将其中某个文件标记为替换内容动作,然后在该文件中将需要替换的内容定义为变量,在部署时,可以对变量的值进行自动替换,也可以由用户通过前端页面对该变量的值进行替换,满足一些自定义参数的需求。
具体实施方式
下面,结合附图以及具体实施方式,对本发明做进一步描述:
参考图1为本发明的云平台部署方法,包括以下步骤:
步骤A:前端模块根据用户的部署请求向部署模块发送获取相应的部署组件的请求;
步骤B:部署模块从预设的位置中获取与部署组件对应的组件定义配置文件并对其进行解析,根据解析的内容获取所需的组件包,并触发组件定义配置文件中所定义的针对组件的目录生成事件,同时,将解析后的组件定义配置文件内容传送至前端模块;
步骤C:前端模块将经过用户配置的部署方案传送至部署模块,同时,若组件定义配置文件中定义了可替换内容,则前端模块还将经过替换后的可替换内容传送至部署模块;
步骤D:部署模块根据前端模块所传送的部署方案结合解析后的组件定义配置文件生成供目标节点中的客户端执行的部署文件,还根据前端模块所传送的可替换内容替换对应的配置模板文件中的相应内容;
步骤E:目标客户端读取部署模块生成的部署文件,并执行部署文件中的部署指令。
本发明的部署方法以组件定义配置文件为核心,组件定义配置文件中定义了多个标签,下面以一个提供rpc服务(远程过程调用协议服务)的组件定义配置文件为例,对其中的内容进行说明:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ingredient PUBLIC "-//OneCloud,Inc.//DTDMeltingpot ingredient1.0//EN""http://onecloud.cn/dtd/ingredient.dtd">
<ingredient lead="Chad.Cai" name="pismarket" os="suse"rely="pismarketdb" scale="lvs">
<!--向其他组件公布名为api_rpc的rpc服务,并初始化其IP和端口-->
<inner-service description="" host="127.0.0.1"name="api_rpc" port="12010"/>
<!--定义需要被subs t i tute的变量或者本文档使用到的变量,并初始化这些变量的值-->
<global declare="conf" name="PISMARKET_HOME"
value="/home/clouder/vs/program/pismarket"/>
<!--定义组件需要用到的package-->
<package name="pismarket.zip"/>
<package group="lib" name="onecloud-pismarket.jar"/>
<directory path="$PISMARKET_HOME">
<action event="node-sync" name="sync"/>
<file refer="pismarket.zip">
<action event="engine-build-file-tree" name="unzip"/>
</file>
<directory path="conf">
<!--pismarket.properties文件中使用到数据库IP,需要进行替换-->
<file name="pismarket.properties">
<action event="engine-configure" name="substitute"/>
</file>
</directory>
<directory path="bin">
<!--这里需要准备好启动停止脚本和卸载脚本。-->
<file name="startup.sh">
<action event="node-post-sync" name="execute"/>
</file>
<file name="shutdown.sh">
<action event="node-pre-upgrade" name="execute"/>
</file>
<file name="uninstall.sh">
<action event="node-uninstall" name="execute"/>
</file>
</directory>
</directory>
</ingredient>
在上述的组件定义配置文件中,pismarket为组件名字,该组件需要连接一个名字为pismarketdb的数据库,因此需要定义依赖关系rely="pismarketdb",该组件还被定义为对外提供rpc服务的组件,因此定义一个<inner-service>标签。通过<package>标签定义该组件所需的组件包,通过<directory>标签定义该组件的目录结构,在<directory>标签中通过<file>标签定义部署时需要进行操作的文件,在<file>标签中通过<action>标签定义部署时需要执行的动作,动作可以是exec(执行脚本)、substitute(替换内容)、unzip(解压包)或者sync(同步文件),而在<action>标签中需要定义触发事件类型,触发事件类型包括服务器端类型和目标节点类型,其中,服务器端类型的触发事件在目标节点类型的触发事件之前执行,而对于同一类型的触发事件也会细分出多个不同功能的触发事件,并且触发事件也有明确的触发先后顺序,总的来说,各个触发事件之间的先后顺序由设计者根据实际业务需求进行定义,定义后,开发者只需要遵循该定义对组件定义配置文件进行配置即可。
继续对上述的组件定义配置文件中的内容作进一步说明,组件定义配置文件中,一共定义了6个不同的触发事件,其中,<actionevent="engine-build-file-tree" name="unzip"/>这一触发事件最先执行,执行的动作为对pismarket.zip这个组件包进行解压,解压后的文件存放于<directory path="$PISMARKET_HOME">所定义的目录下,也即建立了目录结构。
接着执行<action event="engine-configure"name="substitute"/>这一触发事件,执行的动作为对pismarket.zip解压后的conf目录下的pismarket.properties文件中的被定义为变量的内容进行替换,pismarket.properties文件为一个配置模板文件,例如,在组件部署中需要根据实际情况配置数据库IP地址,则在pismarket.propert ies文件中将数据库IP地址定义为变量,变量设为系统变量,具体为${ING.PISMARKETDB.SERVICES.MYSQL.HOST},这个系统变量会自动从pismarketdb所在的客户端中获取IP地址进行替换,不需要用户进行配置。当然,变量也可以设为由用户手动进行配置的变量,例如,在一个web应用的数据库连接配置模板文件中将数据库名称定义为手动配置的变量,用户可以通过在前端模块所提供的前端页面中对数据库名称进行配置,在执行替换时就会将数据库名称的默认值替换为用户所配置的数据库名称。
再接下来便执行<action event="node-sync"name="sync"/>这一触发事件,该触发事件为目标节点类型的触发事件,执行的动作为同步文件,将<directory path="$PISMARKET_HOME">中所定义的目录中的所有文件同步至目标节点中对应的目录中,实际上是将pismarket.zip中所解压出来的文件进行同步,当然也包括经过替换内容的配置模板文件。
最后,如果用户是在前端页面中选择安装模式,则会执行<actionevent="node-post-sync" name="execute"/>这一触发事件,执行动作为执行startup.sh脚本文件,如果用户选择升级模式,则会执行<action event="node-pre-upgrade" name="execute"/>这一触发事件,执行shutdown.sh脚本文件,如果用户选择卸载模式,则会执行<action event="node-uninstall" name="execute"/>这一触发事件,执行uninstall.sh脚本文件。
通过对组件定义配置文件的说明,下面对具体的方法流程作进一步说明:
在步骤A中,前端模块负责将用户的部署请求发送给部署模块,例如,用户在前端页面中选择部署pismarket组件。
在步骤B中,部署模块响应请求后,则会获取pismarket组件对应的组件定义配置文件,即示例中的组件定义配置文件,然后对组件定义配置文件进行解析,根据解析的内容获取所需的组件包,即pismarket.zip和onecloud-pismarket.jar两个组件包,并且触发组件定义配置文件中的目录生成事件,即<actionevent="engine-build-file-tree" name="unzip"/>这一触发事件。同时,部署模块还会将解析后的组件定义配置文件内容传送至前端模块。
在步骤C中,前端模块将经过用户配置的部署方案传送至部署模块,部署方案是指用户所选择的目标节点以及在该目标节点中所需要执行的组件。另外,若组件定义配置文件中定义了可替换内容,则前端模块还将经过替换后的可替换内容传送至部署模块,例如,上述组件定义配置文件中名字为pismarket.properties的配置模板文件被标记了替换内容动作,在该配置模板文件中被定义为变量的内容则为可替换内容,被替换后会传送至部署模块,其中,替换的动作分为手动替换和自动替换,若变量为系统变量,则会根据系统变量的定义自动获取相关的内容进行替换,若变量为手动配置的变量,则会表现在前端页面中供用户进行配置替换。需要说明的是,在前端页面中,用户还需要选择一种部署方式,可以是安装、升级、修复或者卸载。
在步骤D中,部署模块根据前端模块所传送的部署方案结合解析后的组件定义配置文件生成供目标节点中的客户端执行的部署文件,其中,目标节点中的客户端为puppet客户端,部署文件包括部署方案文件和部署细节文件,均为供puppet客户端执行的.pp文件,部署方案文件中的内容则是用户所配置的部署方案内容,部署细节文件中的内容为根据目标节点类型的触发事件内容所生成的部署指令。下面举例选择了安装模式后生成的部署方案文件和部署细节文件中的内容。
部署方案文件:
node'192.168.2.30'{
include pismarket
}
部署细节文件:
在部署方案文件中,表示需要在IP地址为192.168.2.30的目标节点中部署pismarket组件,具体的部署细节在部署细节文件中,由于部署前选择的是安装模式,而且在示例的组件定义配置文件中目标节点类型的触发事件只有node-sync和node-post-sync两个触发事件,因此只执行两个动作,分别为同步文件和执行startup.sh脚本文件。需要说明的是,部署模块还根据前端模块所传送的可替换内容替换对应的配置模板文件中的相应内容,即把配置模板文件中的变量的值替换为前端模块所传送的可替换内容,经过替换后的配置模板文件依然是组件中的文件,因此也会被同步至目标节点中。
在步骤E中,便是目标客户端读取部署方案文件和部署细节文件,并执行其中的部署指令。
进一步地,在步骤C中,前端模块还将经过用户配置的部署方案和经过替换后的可替换内容保存至部署配置文件中,以供下一次部署该部署方案时可快速调用,不需要再次进行配置,方便多次部署。
本发明的云平台部署方法的优点在于:通过设计一个规范的组件定义配置文件,开发者只需要遵循该组件定义配置文件中的规则对组件的目录结构、所需文件和部署步骤等组件相关内容进行定义即可,在部署前,用户只需要配置好目标节点的IP和需要部署的组件,接下来便由部署模块自动读取并解析组件定义配置文件中的内容进行部署。另外,在组件定义配置文件中可以将其中某个文件标记为替换内容动作,然后在该文件中将需要替换的内容定义为变量,在部署时,可以对变量的值进行自动替换,也可以由用户通过前端页面对该变量的值进行替换,满足一些自定义参数的需求。
基于上述的云平台部署方法,本发明还对应地公开了一种云平台部署系统,包括以下模块:
部署请求模块:设于前端模块中,用于根据用户的部署请求向部署模块发送获取相应的部署组件的请求;
解析组件模块:设于部署模块中,用于从预设的位置中获取与部署组件对应的组件定义配置文件并对其进行解析,根据解析的内容获取所需的组件包,并触发组件定义配置文件中所定义的针对组件的目录生成事件,同时,将解析后的组件定义配置文件内容传送至前端模块;
部署配置模块:设于前端模块中,用于将经过用户配置的部署方案传送至部署模块,同时,若组件定义配置文件中定义了可替换内容,则前端模块还将经过替换后的可替换内容传送至部署模块;
部署文件生成模块:设于部署模块中,用于根据前端模块所传送的部署方案结合解析后的组件定义配置文件生成供目标节点中的客户端执行的部署文件,还根据前端模块所传送的可替换内容替换对应的配置模板文件中的相应内容;
执行部署文件模块:设于目标节点中,用于由客户端读取部署模块生成的部署文件,并执行部署文件中的部署指令。
进一步地,组件定义配置文件中预定义了组件的目录结构,在目录结构中预定义需要操作的文件,针对需要操作的文件预定义需要执行的动作,每个需要执行的动作对应有触发事件,由触发事件决定对应的动作在部署过程中的执行时间点,触发事件包括两种类型的触发事件,分别为服务器端类型和目标节点类型。
进一步地,需要执行的动作为执行脚本、替换内容、解压和同步文件中的一种或多种。
进一步地,目标节点中的客户端为puppet客户端,部署文件中包括部署方案文件和部署细节文件,部署方案文件中的内容包括目标节点地址和需要部署的组件名称,部署细节文件中的内容为根据目标节点类型的触发事件内容所生成的部署指令。
进一步地,在部署配置模块中,前端模块还将经过用户配置的部署方案和经过替换后的可替换内容保存至部署配置文件中,以供下一次部署该部署方案时可快速调用。
对本领域的技术人员来说,可根据以上描述的技术方案以及构思,做出其它各种相应的改变以及形变,而所有的这些改变以及形变都应该属于本发明权利要求的保护范围之内。