Cloud Foundry Service Broker開(kāi)發(fā)部署實(shí)例解析(上)
Cloud Foundry(CF)通過(guò)buildpack擴(kuò)展運(yùn)行不同語(yǔ)言應(yīng)用的能力,通過(guò)service broker(SB)擴(kuò)展支持應(yīng)用所需的各種關(guān)系數(shù)據(jù)庫(kù)、中間件、緩存、云存儲(chǔ)、內(nèi)存數(shù)據(jù)庫(kù)等各種服務(wù)的能力。這篇博文將從頭至尾介紹通用的SB開(kāi)發(fā)和部署。
什么是service broker
SB就是實(shí)現(xiàn)了CF規(guī)定的一組rest api的服務(wù)端程序,它作用于CF與服務(wù)的資源池中間,CF通過(guò)調(diào)用SB上這些規(guī)定的rest api對(duì)服務(wù)資源池進(jìn)行管理,而SB實(shí)際執(zhí)行這些資源池管理操作。比如,對(duì)于oracle而言,管理意味著管理服務(wù)計(jì)劃(即create/drop profile)、創(chuàng)建/綁定/解綁/刪除服務(wù)實(shí)例(即create tablespace、create user、drop user、drop tablespace)。下面給出SB需要實(shí)現(xiàn)rest api列表,理論上有了這張表,隨便用什么語(yǔ)言寫個(gè)web service的服務(wù)端就行了,這些接口中有幾個(gè)是博主為實(shí)現(xiàn)本文的開(kāi)發(fā)和部署過(guò)程自行添加的。
METHODURL用途
開(kāi)發(fā)
本文給出的SB使用java(spring)開(kāi)發(fā)的,使用了hibernate,基本思路是下載源代碼,按照下面的描述修改必要的實(shí)現(xiàn),然后打包就可以開(kāi)始部署了。這一SB的基本思路是將已有的資源池的授權(quán)信息存儲(chǔ)到SB中,不自動(dòng)化的做任何部署和管理工作,所以理論上,這個(gè)SB是用于任何服務(wù)的管理。
準(zhǔn)備
首先下載源代碼,這代碼是個(gè)gradle工程,首先得準(zhǔn)備好開(kāi)發(fā)環(huán)境,不管用原生eclipse還是sts,都得先安裝gradle support,以STS為例,下載解壓后,打開(kāi)集成開(kāi)發(fā)環(huán)境,在dashborad-》IDE EXTENSIONS中,搜索gradle support并安裝。將源代碼解壓,在STS的package explorer中import gradle project,選擇到解壓的目錄,build model,然后點(diǎn)擊finish。
修改源代碼
- src/main/resources/ServiceDescription.json
這個(gè)文件是json格式服務(wù)的描述信息,程序***運(yùn)行時(shí),會(huì)將此json作為創(chuàng)建新服務(wù)的輸入
- name:服務(wù)的唯一標(biāo)識(shí)
- description:顯示在UI里的描述信息
- bindable:true
- tags:關(guān)鍵字
- longDescription:顯示在UI里的詳細(xì)描述信息
- imageUrl:顯示在GUI里的圖片地址
- displayName:顯示在GUI里的服務(wù)名稱
- providerDisplayName:顯示在GUI里的服務(wù)供應(yīng)商名稱
- documentationUrl:顯示在GUI里的服務(wù)文檔地址
- supportUrl:顯示在GUI里的服務(wù)支持網(wǎng)站
- src/main/java/com/pivotal/cf/broker/config/AppConfig.java和RelationalCloudDataSourceConfig.java
將這兩個(gè)文件中的mdsbrokerdb修改為下一步部署在CF上時(shí)綁定的MySQL服務(wù)實(shí)例名稱,比如samplebrokerdb
- src/main/java/com/pivotal/cf/broker/model/PlanMetadataRes.java
將下面的屬性替換為管理的資源所需的授權(quán)信息,當(dāng)然也要修改屬性對(duì)應(yīng)的setter和getter
- @JsonProperty("kcxpaddr")
- private String kcxpaddr;
- @JsonProperty("kcxpport")
- private String kcxpport;
- @JsonProperty("rvipaddr")
- private String rvipaddr;
- @JsonProperty("rvport")
- private String rvport;
- @JsonProperty("username")
- private String username;
- @JsonProperty("password")
- private String password;1234567891011121314151617
- src/main/java/com/pivotal/cf/broker/model/ServiceInstance.java
將下面的屬性替換為管理的資源所需的授權(quán)信息,當(dāng)然也要修改對(duì)應(yīng)的構(gòu)造函數(shù)
- @JsonSerialize
- @JsonProperty("kcxpaddr")
- @Column(name="kcxpaddr")
- private String kcxpaddr;
- @JsonSerialize
- @JsonProperty("kcxpport")
- @Column(name="kcxpport")
- private String kcxpport;
- @JsonSerialize
- @JsonProperty("rvipaddr")
- @Column(name="rvipaddr")
- private String rvipaddr;
- @JsonSerialize
- @JsonProperty("rvport")
- @Column(name="rvport")
- private String rvport;
- @JsonSerialize
- @JsonProperty("username")
- @Column(name="username")
- private String username;
- @JsonSerialize
- @JsonProperty("password")
- @Column(name="password")
- private String password;1234567891011121314151617181920212223242526272829
- src/main/java/com/pivotal/cf/broker/model/ServiceManagementImpl.java
createInstance()中,修改ServiceInstance instance = new ServiceInstance的參數(shù),輸入正確的授權(quán)信息
removeServiceInstance()中,將下面代碼修改為正確的授權(quán)信息
- res.setKCXPAddr(instance.getKCXPAddr());
- res.setKCXPPort(instance.getKCXPPort());
- res.setRVIPAddr(instance.getRVIPAddr());
- res.setRVPort(instance.getRVPort());
- res.setUserName(instance.getUserName());
- res.setPassword(instance.getPassword());123456
createInstanceBinding(),將下面代碼修改為正確的授權(quán)信息
- credentials.put("KCXPAddr0", instance.getKCXPAddr());
- credentials.put("KCXPPort0", instance.getKCXPPort());
- credentials.put("RVIPAddr", instance.getRVIPAddr());
- credentials.put("RVPort", instance.getRVPort());
- credentials.put("UserName",instance.getUserName());
- credentials.put("Password",instance.getPassword());123456
編譯打包
在STS的package explorer中,右鍵單擊項(xiàng)目,run as-》gradle build,如果是初次運(yùn)行,輸入下面的編譯打包gradle命令,run即可:
- clean
- build
- assemble123
至此,我們就得到了程序包,下面就可以開(kāi)始部署了。