您的位置:首页 > 其它

开发cloudify配方文件- Attributes API

2013-04-10 00:00 267 查看
The Attributes API

服务实例有时需要共享一些信息,例如一个服务实例可能给其他服务实例分享它的监控端口(运行时)

Cloudify提供通过Attributes API实现这种机制,属性可以被分配到应用、服务或服务实例的上下文中,一旦被分配,这些属性可以被这个应用下的服务实例读取和修改

下面的例子表明,myKey-myValue这对属性在服务实例启动后被分配到应用中,另外其他服务的otherKey 属性被读取

gistfile1.groovy

service{
name "myService"
lifecycle {
postStart {
context.attributes.thisInstance.myKey = "myValue"
println context.attributes.otherService.otherKey
}
}
The API 的语法

下面是对分配属性值到应用、服务和服务实例的语法:

context.attributes.thisInstance.myKey = "myValue"—分配myValue到myKey 属性到当前服务实例的上下文中,也可以这样写: context.attributes.thisInstance["myKey"] = "myValue"

context.attributes.thisService.myKey = "myValue"—分配myValue到myKey 属性到当前服务的上下文中,注意:只有每个服务上下文中只能有一个myKey 属性。 因此,无论在那个服务实例修改这个属性都会覆盖这个值。

context.attributes.thisApplication.myKey = "myValue—分配myValue到myKey 属性到当前应用的上下文中,注意: 整个应用上下文中只能有一个myKey属性。因此,无论在那个服务实例修改这个属性都会覆盖这个值。
一个服务实例可以读取或修改其他服务实例或服务的属性,需要指定具体的服务名而不能使用thisService,例如:

context.attributes.tomcat.myKey = "myValue"—分配myValue到myKey 属性到tomcat服务的上下文中

context.attributes.tomcat.instances[1].myKey = "myValue"—分配myValue到myKey 属性到tomcat的ID为1的服务实例上下文中,注意:服务实例的ID是从1开始的。
不能访问其他应用的属性,只针对当前应用的服务和服务实例。
下面的例子是使用each 方法来遍历服务实例的所有属性:
context.attributes.thisService.instances.each{println it.myKey}
读写属性
属性可以使用Service Context API的ServiceContextFactory 类来获取
在当前服务中获取myKey属性,例:
retrieveAttributes.groovy

import org.cloudifysource.dsl.context.ServiceContextFactory;
def context = com.gigaspaces.cloudify.dsl.context.ServiceContextFactory.getServiceContext()
context.attributes.thisService["myKey"];
读写应用和服务的属性,例:
readWriteAttr1.groovy

//set the value of an application level attribute
context.attributes.thisApplication["myKey"] = "myValue"

//read an application level attribute
def appAttribute = context.attributes.thisApplication["myKey"]

//set the value of a service level attribute
context.attributes.thisService["myKey"] = "myValue"

//read a service level attribute from current service
def serviceAttribute = context.attributes.thisService["myKey"]

//to read an attribute of a different service use the service name in this example cassandra
def cassandraAttribute = context.attributes.cassandra["port"]
读写当前服务实例和其他服务实例的属性,例:
wRInstanceAttrs.groovy

//Writing an attribute at the service instance level
context.attributes.thisInstance["myKey"] = "myValue"

//Reading an attribute(in this case port) from instance #1 in the same cluster
context.attributes.thisService.instances[1].port = 4000

//Reading an attribute(in this case jmxPort) from instance #1 of the tomcat service
context.attributes.tomcat.instances[1].jmxPort = 1099

//Instances are iterable, so you can do iterable stuff of groovy on top of it.
context.attributes.tomcat.instances.each{println it.key}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: