Heat Environment详解
Posted peach_li
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Heat Environment详解相关的知识,希望对你有一定的参考价值。
使用heat client命令创建或者更新stack,其中有一个可选选项-e/--environment-file,用于指定环境文件。
目前环境文件主要有两个方面的作用:
- 配置模板需要的参数值
- 资源注册
environment文件内容格式可以参考heat源码包中的environment.rst文件,其中有详细描述。
这篇文章就先来探讨一下怎么利用environment文件来配置参数。
我们知道在heat模板中可以通过parameters字段配置模板的输入参数,例如下面的模板文件mytemplate.yaml:
[plain] view plain copy
- heat_template_version: 2013-05-23
- description: create cinder volume
- parameters:
- volsize:
- type: number
- description: Size of volume to create
- resources:
- myres:
- type: OS::Cinder::Volume
- properties:
- name: volname
- size: get_param: volsize
[plain] view plain copy
- heat stack-create -f mytemplate.yaml -P vol_size=1 mystack
通过environment文件也能达到指定参数值的目的,编写myenv.yaml文件,设置parameters配置段,内容如下:
[plain] view plain copy
- parameters:
- volsize: 2
[plain] view plain copy
- heat stack-create -f mytemplate.yaml -e myenv.yaml mystack
通过environment文件来配置参数值,个人觉得主要是针对参数较多,或者需要创建的多个stack具有类似参数的场景。
想想如果参数较多,在命令行上一个一个敲还是很费劲的。
除了parameters配置段,还有一个parameter_defaults配置段也可以用来指定参数值,如下:
- parameter_defaults:
- volsize: 2
那么问题来了,既然最终的效果一样,为什么heat要设计这两种方式呢?
这个问题我也有一些困惑。看了help的提示信息,有一些个人看法。
-e/--environment-file选项的帮助信息如下:
[plain] view plain copy
- -e <FILE or URL>, --environment-file <FILE or URL>
- Path to the environment, it can be specified multiple
- times.
那么在创建多个类似stack的时候,就可以把默认的参数配置到一个environment文件的parameter_defaults段。
而如果某些stack需要特殊的参数配置,就可以配置在另外一个environment文件的parameters段中。
这样的好处就是,公共参数不需要在每个stack的环境文件中重复配置。
还是用前面的模板为例,增加一个参数volname:
[plain] view plain copy
- parameters:
- volname:
- type: string
- description: Name of volume to create
- volsize
- type: number
- description: Size of volume to create
配置一个默认参数环境文件default.yaml如下:
[plain] view plain copy
- parameter_defaults:
- volname: MyVolName
- volsize: 2
[plain] view plain copy
- heat stack-create -f mytemplate.yaml -e default.yaml defaultstack
这时候如果需要创建另一个stack,而stack的卷名字想改为NewName,就可以另外编写一个定制环境文件custom.yaml:
[plain] view plain copy
- parameters:
- volname: NewName
[plain] view plain copy
- heat stack-create -f mytemplate.yaml -e default.yaml -e custom.yaml customstack
如果参数很多的话,就更能够体现出以上方式的好处。
最后,还有一个问题,现在知道参数可以通过parameter_defaults和parameters来指定,也可以通过命令行-p选项指定。
那如果一个参数通过上面三种方式都指定了,最终会用哪个方式指定的值呢?
优先级如下:
-P选项配置 > parameters配置 > parameter_defaults配置
例如,如果myenv.yaml文件内容如下:
[plain] view plain copy
- parameters:
- volsize: 1
- parameter_defaults:
- volsize: 2
使用如下命令行创建stack:
[plain] view plain copy
- heat stack-create -f mytemplate.yaml -e myenv.yaml -P volsize=3 mystack
以上是关于Heat Environment详解的主要内容,如果未能解决你的问题,请参考以下文章