Cloud Foundry(CF)通过buildpack扩展运行不同语言应用的能力,通过service broker(SB)扩展支持应用所需的各种关系数据库、中间件、缓存、云存储、内存数据库等各种服务的能力。这篇博文将从头至尾介绍通用的SB开发和部署。
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的服务端就行了,这些接口中有几个是博主为实现本文的开发和部署过程自行添加的。
METHOD | URL | 用途 |
---|---|---|
GET | /v2/catalog | 获取此SB管理的全部服务 |
POST | /v2/catalog/services | 创建新服务 |
DELETE | /v2/catalog/services/{sid} | 删除服务 |
POST | /v2/catalog/services/{sid}/plans | 创建新服务计划 |
PUT | /v2/catalog/services/{sid}/plans/{planId}/costs | 为计划增加单价 |
PUT | /v2/catalog/services/{sid}/plans/{planId}/pool | 为计划的资源池添加资源 |
DELETE | /v2/catalog/services/{sid}/plans/{planId} | 删除计划 |
DELETE | /v2/catalog/services/{sid}/plans/{planId}/costs/{costId} | 删除计划的单价 |
DELETE | /v2/catalog/services/{sid}/plans/{planId}/pool/{resId} | 删除计划的资源 |
PUT | /v2/service_instances/{instanceId} | 创建服务实例,用户创建服务时执行 |
DELETE | /v2/service_instances/{instanceId} | 删除服务实例,用户删除服务时执行 |
GET | /v2/service_instances | 获取服务实例信息 |
PUT | /v2/service_instances/{instanceId}/service_bindings/{bindingId} | 绑定服务到应用,用户绑定服务时执行 |
DELETE | /v2/service_instances/{instanceId}/service_bindings/{bindingId} | 将服务从应用解绑定,用户解绑服务时执行 |
本文给出的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。
@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;
@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;
res.setKCXPAddr(instance.getKCXPAddr());
res.setKCXPPort(instance.getKCXPPort());
res.setRVIPAddr(instance.getRVIPAddr());
res.setRVPort(instance.getRVPort());
res.setUserName(instance.getUserName());
res.setPassword(instance.getPassword());
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());
在STS的package explorer中,右键单击项目,run as-》gradle build,如果是初次运行,输入下面的编译打包gradle命令,run即可:
clean
build
assemble
至此,我们就得到了程序包,下面就可以开始部署了。
Cloud Foundry service broker开发部署实例解析(上)
原文:http://blog.csdn.net/cloudguru/article/details/44652381