使用REST 获取Cloudify属性

Cloudify 应用和服务属性可以决定了哪些组件可以在一个应用中共享上下文(范围)的属性,下面是不同属性的上下文列表

  • Instance —设置每个服务实例上下文的属性,例如:如果你部署2tomcat实例,你可以使用一个实例上下文属性来共享他们的端口值
  • Service — 设置每个服务上下文的属性,例如:你部署2tomcat实例,你可以使用服务上下文属性在tomcat服务实例间共享web服务器管理接口的URL
  • Application — 设置每个应用的上下文的属性,例如:你使用一个应用上下文属性来共享前台应用服务的URL(负载均衡器)
  • Global —设置所有实例、服务、应用的上下文属性

    例如,部署一个包含Mongod 服务的PetClinic应用,你在应用部署后想添加一个新的数据访问入口,问题在于Mongod 服务的端口号和主文件夹在服务启动后就已经确定了,你可以使用下面几个步骤来达到这个需求:

  1. 写一个脚本,添加一个没有特定数据库细节的数据库新用户
  2. 在服务生命周期preInstall阶段,设置Mongod的端口和主文件夹
  3. 在服务生命周期postStart 阶段调用batch文件来获取Mongod的端口和主文件夹,然后运行Mongod服务细节脚本

    下面是使用postStart batch文件实现curlREST访问和批处理命令来解析结果

# Get the port of this mongod instance over REST and save the result to a file

curl http://localhost:8100/attributes/instances/default/mongod/%USM_INSTANCE_ID%/port -H "Content-type: application/json" --output portfile%USM_INSTANCE_ID%.txt --silent


# parse the port json result using an output file

set /p port=<portfile%USM_INSTANCE_ID%.txt

del portfile%USM_INSTANCE_ID%.txt

set port=%port:{"port":=%

set port=%port:}=%


# Get the home folder of this mongod instance over REST

curl http://localhost:8100/attributes/instances/default/mongod/%USM_INSTANCE_ID%/home -H "Content-type: application/json" --output homefile%USM_INSTANCE_ID%.txt --silent

# parse the home folder json result using an output file

set /p home=<homefile%USM_INSTANCE_ID%.txt

del homefile%USM_INSTANCE_ID%.txt

set home=%home:{"home":=%

set home=%home:}=%


# connect to the new database with its specific port and home folder, and call your javascript

%home%\bin\mongo 127.0.0.1:%port%/petclinic --quiet %home%\..\myscript.js

Cloudify使用USM_INSTANCE_ID环境变量来存储可调用batch文件的服务实例ID 

通过REST访问属性

使用REST API可以访问所有REST客户端,或者在 Cloudify shell下使用set-attributes和list-attributes命令

Method

Command

Description

Cloudify shell

set-attributes -scope global '{"home_folder":"d:\tomcat"}'

Global context设置home_folder属性

Cloudify shell

list-attributes -scope application

列出Application context的属性

CURLRESTClient

curl http://<HOST>:8100/attributes/applications/default

列出默认Application context的属性

CURLRESTClient

curl http://<HOST>:8100/attributes/instances/<applicationName>/<serviceName> -H "Content-Type: application/json" -X POST -d '{"<key>":"<value>"}'

设置Service context属性

CURLRESTClient

curlhttp://<HOST>:8100/attributes/instances/<applicationName>/<serviceName>/<instanceId>/<key> -H "Content-Type: application/json" -X DELETE

删除Instance context属性

REST API请求格式

注:<HOST> REST API的主机地址

Context

Request Method/Verb

Request Format

Description

Instance

GET

URL: http://<HOST>:8100/attributes/instances/<applicationName>/<serviceName>/<instanceId>/<attributeName>

获取一个或多个实例属性:

  • <applicationName>应用名称
  • <serviceName>服务名称
  • <instanceId> 服务实例ID
  • <attributeName>属性名称(省略这个值可以用来获取指定实例的所有属性)

POST

URL: http://<HOST>:8100/attributes/instances/<applicationName>/<serviceName>/<instanceId>
DATA
<object>

获取一个或多个实例属性:

  • <applicationName>应用名称
  • <serviceName> 服务名称
  • <instanceId> 服务实例ID
  • <object> 设置属性的JSON对象

Service

GET

URL: http://<HOST>:8100/attributes/services/<applicationName>/<serviceName>/<attributeName>

获取一个或多个服务属性:

  • <applicationName>应用名称
  • <serviceName> 服务名称
  • <attributeName>属性名称(省略这个值可以用来获取指定服务的所有属性)

POST

URL: http://<HOST>:8100/attributes/services/<applicationName>/<serviceName>
DATA
<object>

获取一个或多个服务属性:

  • <applicationName>应用名称
  • <serviceName> 服务名称
  • <instanceId> 服务实例ID
  • <object> 设置属性的JSON对象

Application

GET

URL: http://<HOST>:8100/attributes/applications/<applicationName>/<attributeName>

获取一个或多个应用属性:

  • <applicationName>应用名称<instanceId> 服务实例ID(省略这个值可以用来获取指定应用的所有属性)

POST

URL: http://<HOST>:8100/attributes/applications/<applicationName>
DATA
<object>

  • 获取一个或多个应用属性:<applicationName>应用名称
  • <object> 设置属性的JSON对象

Global

GET

URL: http://<HOST>:8100/attributes/globals/<attributeName>

获取一个或多个全局属性: <attributeName> 属性名称(省略这个值可以用来获取指定应用的所有属性)

POST

URL: http://<HOST>:8100/attributes/globals
DATA
<object>

获取一个或多个全局属性:<object> 设置属性的JSON对象

你可能感兴趣的:(使用REST 获取Cloudify属性)