您的位置:首页 > 其它

heat ResourceGroup资源使用介绍

2015-08-31 15:23 274 查看
在heat中有一个ResourceGroup资源,类型是“OS::Heat::ResourceGroup”。

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

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

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

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

属性描述
attributes输出子资源指定属性信息
refs输出所有子资源ID列表
show输出所有子资源详细信息
下面通过一个例子来演示ResourceGroup资源的使用。

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

heat_template_version: 2015-04-30
description: create a group of cinder volume

resources:
resgroup:
type: OS::Heat::ResourceGroup
properties:
count: 2
resource_def:
type: OS::Cinder::Volume
properties:
name: vol-%index%
size: 2

outputs:
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主要用在需要创建多个相同资源的场景,好处一是能够简化模板的编写,二是可以方便地调整资源数量。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: