服务recipes的继承——Extending Service Recipes

Cloudify recipes就像面向对象的类,因此它们是可以继承以扩展的。

Why Extend?

在很多情况下,您可能想要创建一个新的服务,是基于一个已经存在的服务,只覆盖的部分与你自己的修改。例如,您可能想使用有一些修改的Tomcat配方(在Cloudify部署文件的<cloudifyRoot>中, 而不需要复制现有的配方和它的所有相关内容。

Cloudify提供了这种机制,允许您扩展recipe。扩展recipe允许新的recipe继承其父recipe的元素,再只描述他们想重写的元素。

How does Extending Work?

扩展recipes有以下简单的规则:

  • Recursion(递归)—扩展机制是递归的, 这意味着一个服务可以扩展另一个已经扩展了第三个服务的服务, 甚更多扩展下去。
  • Inheritance—每个扩展继承在其父配方中且不存在于子recipe的元素。

因此,一个新的配方继承所有其父配方中存在而新配方不存在的属性和文件。

当从父recipe中复制文件到子recipe中时,它们会被复制到子服务的部署文件夹。

继承recipe适用于服务recipe的任何元素。可以是top-level 元素 (e.g.lifecycle),也可以是更细节的元素 (e.g. lifecycle -> init).

例如以下为父recipe:

service{

name “myService”

lifecycle {

postStart …

init …

}

}

可以继承的该服务recipe,例如,添加 preStop 事件处理程序。也可以同时或只改变 init 事件处理程序,同时从服务中继承 postStart 事件处理程序。

service{

extend <myService path>

lifecycle {

init … <my new init behavior>

preStop …

}

}

Extending Recipes

Cloudify扩展配方容易。

To extend a recipe
  1. 在你的应用配方,创建一个新的服务配方文件(e.g. my-tomcat-service.groovy).
  2. 在服务块,指定扩展属性使用的路径扩展服务配方作为它的值,如下所示

    service {

    extend <path to service directory/recipe file>

    name "myNewService"

    }

    为了继承得以实现,extend属性必须是在服务块的第一个属性。

你可能感兴趣的:(Cloudify,recipe)