為什么要使用自定義命令
創(chuàng)新互聯(lián)建站專業(yè)為企業(yè)提供綠春網(wǎng)站建設(shè)、綠春做網(wǎng)站、綠春網(wǎng)站設(shè)計、綠春網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、綠春企業(yè)網(wǎng)站模板建站服務(wù),十載綠春做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。在很多場景下,你想更好的控制你的應(yīng)用服務(wù)而不僅僅局限在內(nèi)置的生命周期事件中。例如,你想實現(xiàn)各種服務(wù)等級的問題,比如熱升級(替換.war文件后刷新web容器)、數(shù)據(jù)庫模式升級等等。
Cloudify使用groovy閉包、外置groovy腳本、外置shell/batch腳本來提供自定義命令機制。這些命令可以在cloudify shell下運行。
描述一個自定義命令
自定義命令的描述在服務(wù)描述文件customCommands部分。每個customCommands 塊使用數(shù)組來包含一個或多個命令。
下面是customCommands引用Groovy、shell、batch腳本的例子:
custom1.groovy
/* Run myFile.groovy whenever YOUR_COMMAND_NAME is invoked. */
customCommands ([
"YOUR_COMMAND_NAME" :"myFile.groovy"
])
/* Run myOtherFile.sh whenever YOUR_2ND_COMMAND_NAME is invoked. */
customCommands ([
"YOUR_2ND_COMMAND_NAME" :"myOtherFile.sh"
])
/* Run myBatchFile.bat whenever YOUR_3RD_COMMAND_NAME is invoked. */
customCommands ([
"YOUR_3RD_COMMAND_NAME" :"myBatchFile.bat"
])
下面是在customCommands塊下使用Groovy閉包程序的例子:
customCommands2.groovy
customCommands ([
// A command with two parameters (firstName and lastName)
"YOUR_COMMAND_NAME" :{firstName,lastName ->
deflineSeparator =System.getProperty("line.separator");
defuserFile =newFile(context.serviceDirectory +lineSeparator +firstName+"_"+lastName+".txt";
System.out.println("User :"+firstName+" " +lastName +" text is "+userFile.text)
returntrue
}
])
當(dāng)需要在groovy閉包程序或腳本內(nèi)使用用戶定義的java庫,可以使用import聲明,并將jar文件放在這個服務(wù)的usmlib(比如:
任何外置腳本必須復(fù)制到服務(wù)文件夾中
customCommands部分必須寫在相關(guān)服務(wù)描述文件的綜述部分(
tomcat.groovy
service {
name "tomcat"
icon "tomcat.gif"
type "WEB_SERVER"
numInstances 1
compute {
template "SMALL_LINUX_32"
}
lifecycle {
install "tomcat_install.groovy"
start "tomcat_start.groovy"
}
customCommands ([
"updateWar" :"update_war.groovy"
])
}
調(diào)用自定義命令
在部署應(yīng)用時,你的自定義命令才被注冊。一旦你的應(yīng)用運行,在cloudify shell下可以隨時使用自定義命令
在cloudify shell下調(diào)用自定義命令需要使用參數(shù),如:invokeServiceName customCommandName
自定義命令有兩個參數(shù),則:invokeServiceName customCommandName x y
場景:
使用cloudify部署你的應(yīng)用到云中,應(yīng)用包含一個tomcat服務(wù) 安裝完應(yīng)用,你修復(fù)了一個web應(yīng)用的bug為了實現(xiàn)更新需要做以下工作
update_warcc.groovy
customCommands ([
"updateWar" :"update_war.groovy"
])
import groovy.util.ConfigSlurper
defconfig=newConfigSlurper().parse(newFile("tomcat.properties").toURL())
defant =newAntBuilder();
ant.get(src:config.applicationWarUrl,dest:config.applicationWar,skipexisting:false)
ant.copy(todir: "${catalinaHome}/webapps",file:config.applicationWar,overwrite:true)