使用heat client命令创建或者更新stack,其中有一个可选选项-e/--environment-file,用于指定环境文件。
目前环境文件主要有两个方面的作用:
- 配置模板需要的参数值
- 资源注册
environment文件内容格式可以参考heat源码包中的environment.rst文件,其中有详细描述。
这篇文章就先来探讨一下怎么利用environment文件来配置参数。
我们知道在heat模板中可以通过parameters字段配置模板的输入参数,例如下面的模板文件mytemplate.yaml:
其中volsize就是一个可定制的输入参数,比较常用的方式是在创建stack命令行中通过-P选项输入,例如:
通过environment文件也能达到指定参数值的目的,编写myenv.yaml文件,设置parameters配置段,内容如下:
效果跟前面通过-P选项指定参数值是一样的。
通过environment文件来配置参数值,个人觉得主要是针对参数较多,或者需要创建的多个stack具有类似参数的场景。
想想如果参数较多,在命令行上一个一个敲还是很费劲的。
除了parameters配置段,还有一个parameter_defaults配置段也可以用来指定参数值,如下:
那么问题来了,既然最终的效果一样,为什么heat要设计这两种方式呢?
这个问题我也有一些困惑。看了help的提示信息,有一些个人看法。
-e/--environment-file选项的帮助信息如下:
可以看到,environment文件可以被指定多次。
那么在创建多个类似stack的时候,就可以把默认的参数配置到一个environment文件的parameter_defaults段。
而如果某些stack需要特殊的参数配置,就可以配置在另外一个environment文件的parameters段中。
这样的好处就是,公共参数不需要在每个stack的环境文件中重复配置。
还是用前面的模板为例,增加一个参数volname:
配置一个默认参数环境文件default.yaml如下:
这时候如果需要创建另一个stack,而stack的卷名字想改为NewName,就可以另外编写一个定制环境文件custom.yaml:
然后使用如下命令创建:
如果参数很多的话,就更能够体现出以上方式的好处。
最后,还有一个问题,现在知道参数可以通过parameter_defaults和parameters来指定,也可以通过命令行-p选项指定。
那如果一个参数通过上面三种方式都指定了,最终会用哪个方式指定的值呢?
优先级如下:
-P选项配置 > parameters配置 > parameter_defaults配置
例如,如果myenv.yaml文件内容如下:
使用如下命令行创建stack:
最后创建出来的卷大小会是3GB,因为实际使用的是优先级最高的-P选项指定的值。