heat ResourceGroup资源使用介绍

来源:互联网 发布:2016日本进出口数据 编辑:程序博客网 时间:2024/05/16 03:04

在heat中有一个ResourceGroup资源,类型是“OS::Heat::ResourceGroup”。

从名称就能够大概猜到该资源的作用:资源组,组内可以包括一个或多个相同的嵌套资源。


通过resource-type-show命令查看该资源的信息,可以看到该资源有以下几项输入属性:

属性类型描述countnumber定义资源组包含子资源个数,默认1index_varstring定义索引替换字符串,默认%index%removal_policiescomma_delimited_list定义要从资源组中删除的子资源,默认[]resource_defjson子资源定义,跟在模板中直接定义资源属性相同其中必须显示指定的属性是resource_def。


另外,该资源的输出属性如下:

属性描述attributes输出子资源指定属性信息refs输出所有子资源ID列表show输出所有子资源详细信息

下面通过一个例子来演示ResourceGroup资源的使用。


编辑模板文件template.yaml如下:

heat_template_version: 2015-04-30description: create a group of cinder volumeresources:  resgroup:    type: OS::Heat::ResourceGroup    properties:      count: 2      resource_def:        type: OS::Cinder::Volume        properties:          name: vol-%index%          size: 2outputs:    myattributes:        value: {"get_attr": [resgroup, "attributes", volume_type]}    myrefs:        value: {get_attr: ['resgroup', refs]}    myshow:        value: {get_attr: [resgroup, "show"]}


然后使用该模板创建stack:

heat stack-create -f template.yaml mystack

查看创建成功后的结果:
# heat stack-list -n+--------------------------------------+-------------------------------+-----------------+---------------------+--------------------------------------+| id                                   | stack_name                    | stack_status    | creation_time       | parent                               |+--------------------------------------+-------------------------------+-----------------+---------------------+--------------------------------------+| b309d171-b98e-4577-a596-ebce15556953 | mystack                       | CREATE_COMPLETE | 2015-08-31T05:56:30 | None                                 || 9fe9df0b-d5db-4da4-8aa3-a65aed4a2775 | mystack-resgroup-pwgynlfi5p3g | CREATE_COMPLETE | 2015-08-31T05:56:34 | b309d171-b98e-4577-a596-ebce15556953 |+--------------------------------------+-------------------------------+-----------------+---------------------+--------------------------------------+# heat resource-list -n 1 mystack+---------------+--------------------------------------+-------------------------+-----------------+---------------------+-------------------------------+| resource_name | physical_resource_id                 | resource_type           | resource_status | updated_time        | stack_name                    |+---------------+--------------------------------------+-------------------------+-----------------+---------------------+-------------------------------+| resgroup      | 9fe9df0b-d5db-4da4-8aa3-a65aed4a2775 | OS::Heat::ResourceGroup | CREATE_COMPLETE | 2015-08-31T05:56:34 | mystack                       || 0             | 0365818e-27ec-4773-a785-bb4875856a0b | OS::Cinder::Volume      | CREATE_COMPLETE | 2015-08-31T05:56:35 | mystack-resgroup-pwgynlfi5p3g || 1             | db4935c4-6250-4778-893f-1e7683a667b8 | OS::Cinder::Volume      | CREATE_COMPLETE | 2015-08-31T05:56:35 | mystack-resgroup-pwgynlfi5p3g |+---------------+--------------------------------------+-------------------------+-----------------+---------------------+-------------------------------+
可以看到,ResourceGroup资源实际上是生成了一个嵌套stack(如上mystack-resgroup-pwgynlfi5p3g),资源组中的那些子资源实际是属于嵌套stack。

按照模板的配置,生成了两个Volume类型的子资源。


再来查看outputs:

# heat output-show mystack myattributes{  "1": "lvmdriver-1",   "0": "lvmdriver-1"}# heat output-show mystack myrefs[  "0365818e-27ec-4773-a785-bb4875856a0b",   "db4935c4-6250-4778-893f-1e7683a667b8"]
按照模板配置,myattributes是输出的Volume子资源的volume_type属性(如上lvmdriver-1)。

而myrefs是输出的资源组的refs属性,实际效果是子资源ID列表。
还有一个myshow,是子资源的详细信息,由于输出太长这里没有贴出来。


看了上面的例子,对资源组的使用也就大体有了一个了解。

这时候就面临着另一个问题,如果stack创建完成后需要调整子资源的数量,怎么实现?

调整模板中的count参数,然后用stack-update命令即可。

例如在上面模板的基础上,把count改为3,stack-update之后再查看子资源,就会发现多了一个名称为2的子资源。

而如果把count改为1,stack-update之后,就只剩下名称为0的子资源了。

注:子资源移除是删除名称数字较大的,保留名称数字较小的。例如上面更新子资源数量为1后,就把名称为1和2的子资源删除了,剩下名称为0的子资源。


那是否能够删除指定的子资源呢?答案是肯定的。前面提到的removal_policies属性就是这个作用。

直接上例子。

按照前面的例子创建一个stack,创建成功后有两个子资源0和1。

这时候如果想删除子资源0,可以这样配置模板中的ResourceGroup资源,增加removal_policies属性:

resgroup:    type: OS::Heat::ResourceGroup    properties:      count: 1      removal_policies: [{resource_list: [0]}]      resource_def:        type: OS::Cinder::Volume        properties:          name: vol-%index%          size: 2

其中,resource_list键对应的是一个列表,列表包含的是要删除的子资源名称,也可以是子资源的ID。上面是指定的名称0。

更新stack之后,可以看到0子资源被删除了,1子资源保留下来了:

# heat resource-list -n 1 mystack+---------------+--------------------------------------+-------------------------+-----------------+---------------------+-------------------------------+| resource_name | physical_resource_id                 | resource_type           | resource_status | updated_time        | stack_name                    |+---------------+--------------------------------------+-------------------------+-----------------+---------------------+-------------------------------+| 1             | affd7faf-8735-4a3a-ba09-6e0f50f385c8 | OS::Cinder::Volume      | CREATE_COMPLETE | 2015-08-31T06:32:30 | mystack-resgroup-pwgynlfi5p3g || resgroup      | 9fe9df0b-d5db-4da4-8aa3-a65aed4a2775 | OS::Heat::ResourceGroup | UPDATE_COMPLETE | 2015-08-31T07:04:21 | mystack                       |+---------------+--------------------------------------+-------------------------+-----------------+---------------------+-------------------------------+


至此,ResourceGroup资源的使用介绍完毕。

总结一下:ResourceGroup主要用在需要创建多个相同资源的场景,好处一是能够简化模板的编写,二是可以方便地调整资源数量。


0 0