Cloud Foundry Service Broker开发部署实例解析(上)

云计算
Cloud Foundry(CF)通过buildpack扩展运行不同语言应用的能力,通过service broker(SB)扩展支持应用所需的各种关系数据库、中间件、缓存、云存储、内存数据库等各种服务的能力。这篇博文将从头至尾介绍通用的SB开发和部署。

Cloud Foundry(CF)通过buildpack扩展运行不同语言应用的能力,通过service broker(SB)扩展支持应用所需的各种关系数据库、中间件、缓存、云存储、内存数据库等各种服务的能力。这篇博文将从头至尾介绍通用的SB开发和部署。

[[130782]]

什么是service broker

SB就是实现了CF规定的一组rest api的服务端程序,它作用于CF与服务的资源池中间,CF通过调用SB上这些规定的rest api对服务资源池进行管理,而SB实际执行这些资源池管理操作。比如,对于oracle而言,管理意味着管理服务计划(即create/drop profile)、创建/绑定/解绑/删除服务实例(即create tablespace、create user、drop user、drop tablespace)。下面给出SB需要实现rest api列表,理论上有了这张表,随便用什么语言写个web service的服务端就行了,这些接口中有几个是博主为实现本文的开发和部署过程自行添加的。

METHODURL用途

Cloud Foundry service broker开发部署实例解析

开发

本文给出的SB使用java(spring)开发的,使用了hibernate,基本思路是下载源代码,按照下面的描述修改必要的实现,然后打包就可以开始部署了。这一SB的基本思路是将已有的资源池的授权信息存储到SB中,不自动化的做任何部署和管理工作,所以理论上,这个SB是用于任何服务的管理。

准备

首先下载源代码,这代码是个gradle工程,首先得准备好开发环境,不管用原生eclipse还是sts,都得先安装gradle support,以STS为例,下载解压后,打开集成开发环境,在dashborad-》IDE EXTENSIONS中,搜索gradle support并安装。将源代码解压,在STS的package explorer中import gradle project,选择到解压的目录,build model,然后点击finish。

修改源代码

 

src/main/resources/ServiceDescription.json 
  • 1.

这个文件是json格式服务的描述信息,程序***运行时,会将此json作为创建新服务的输入

  • name:服务的唯一标识
  • description:显示在UI里的描述信息
  • bindable:true
  • tags:关键字
  • longDescription:显示在UI里的详细描述信息
  • imageUrl:显示在GUI里的图片地址
  • displayName:显示在GUI里的服务名称
  • providerDisplayName:显示在GUI里的服务供应商名称
  • documentationUrl:显示在GUI里的服务文档地址
  • supportUrl:显示在GUI里的服务支持网站
src/main/java/com/pivotal/cf/broker/config/AppConfig.java和RelationalCloudDataSourceConfig.java 
  • 1.

将这两个文件中的mdsbrokerdb修改为下一步部署在CF上时绑定的MySQL服务实例名称,比如samplebrokerdb

src/main/java/com/pivotal/cf/broker/model/PlanMetadataRes.java 
  • 1.

将下面的属性替换为管理的资源所需的授权信息,当然也要修改属性对应的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 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • src/main/java/com/pivotal/cf/broker/model/ServiceInstance.java

将下面的属性替换为管理的资源所需的授权信息,当然也要修改对应的构造函数

@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 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.

 

  • src/main/java/com/pivotal/cf/broker/model/ServiceManagementImpl.java

createInstance()中,修改ServiceInstance instance = new ServiceInstance的参数,输入正确的授权信息

removeServiceInstance()中,将下面代码修改为正确的授权信息

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 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

createInstanceBinding(),将下面代码修改为正确的授权信息

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 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

编译打包

在STS的package explorer中,右键单击项目,run as-》gradle build,如果是初次运行,输入下面的编译打包gradle命令,run即可:

clean 
 
build 
 
assemble123 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

至此,我们就得到了程序包,下面就可以开始部署了。
 

责任编辑:Ophira 来源: 云计算实务博客
相关推荐

2015-03-30 15:15:00

CloudFoundrPaaS开源

2011-05-06 15:37:10

Service BroSQL Server

2011-04-22 10:13:42

Cloud FoundAzure

2015-04-14 11:10:22

PaaSCloudFoundrBuildpack

2015-06-09 10:36:13

Cloud FoundAzurePaaS

2018-08-22 18:16:47

2013-04-26 17:38:52

大数据全球技术峰会

2012-07-19 09:13:40

VMware云计算Cloud Found

2017-07-17 15:50:17

微服务Docker架构

2011-05-06 15:48:35

Service BroSQL Server

2012-12-07 10:00:25

SpringOneCloud FoundVMware

2013-10-23 10:21:57

OpenStack

2009-12-01 10:49:44

Visual Stud

2012-05-14 10:49:25

Cloud Found

2011-11-15 16:48:58

Zend Studio

2022-07-03 06:58:46

deno开发nodejs

2011-05-06 15:00:52

Service BroSQL Server

2014-03-07 09:26:46

PaaSCloud Found

2015-12-16 11:11:52

Cloud FoundSpring云计算

2012-03-27 11:40:55

vmwareCloud Found
点赞
收藏

51CTO技术栈公众号