利用environment文件配置heat模板参数

来源:互联网 发布:linux怎么退出全屏 编辑:程序博客网 时间:2024/04/30 10:45

使用heat client命令创建或者更新stack,其中有一个可选选项-e/--environment-file,用于指定环境文件。

目前环境文件主要有两个方面的作用:

  1. 配置模板需要的参数值
  2. 资源注册

environment文件内容格式可以参考heat源码包中的environment.rst文件,其中有详细描述。


这篇文章就先来探讨一下怎么利用environment文件来配置参数。


我们知道在heat模板中可以通过parameters字段配置模板的输入参数,例如下面的模板文件mytemplate.yaml:

heat_template_version: 2013-05-23description: create cinder volumeparameters:  volsize:    type: number    description: Size of volume to createresources:  myres:    type: OS::Cinder::Volume    properties:      name: volname      size: { get_param: volsize }
其中volsize就是一个可定制的输入参数,比较常用的方式是在创建stack命令行中通过-P选项输入,例如:

heat stack-create -f mytemplate.yaml -P vol_size=1 mystack

通过environment文件也能达到指定参数值的目的,编写myenv.yaml文件,设置parameters配置段,内容如下:

parameters:  volsize: 2


在执行stack-create命令时,通过-e/--environment-file选项指定myenv.yaml文件,如下:
heat stack-create -f mytemplate.yaml -e myenv.yaml mystack
效果跟前面通过-P选项指定参数值是一样的。


通过environment文件来配置参数值,个人觉得主要是针对参数较多,或者需要创建的多个stack具有类似参数的场景。

想想如果参数较多,在命令行上一个一个敲还是很费劲的。


除了parameters配置段,还有一个parameter_defaults配置段也可以用来指定参数值,如下:

parameter_defaults:  volsize: 2
效果跟parameters一样。

那么问题来了,既然最终的效果一样,为什么heat要设计这两种方式呢?

这个问题我也有一些困惑。看了help的提示信息,有一些个人看法。

-e/--environment-file选项的帮助信息如下:

  -e <FILE or URL>, --environment-file <FILE or URL>                        Path to the environment, it can be specified multiple                        times.
可以看到,environment文件可以被指定多次。

那么在创建多个类似stack的时候,就可以把默认的参数配置到一个environment文件的parameter_defaults段。

而如果某些stack需要特殊的参数配置,就可以配置在另外一个environment文件的parameters段中。
这样的好处就是,公共参数不需要在每个stack的环境文件中重复配置。


还是用前面的模板为例,增加一个参数volname:

parameters:  volname:    type: string    description: Name of volume to create  volsize    type: number    description: Size of volume to create

配置一个默认参数环境文件default.yaml如下:

parameter_defaults:  volname: MyVolName  volsize: 2


那么就可以通过如下命令创建默认stack:
heat stack-create -f mytemplate.yaml -e default.yaml defaultstack

这时候如果需要创建另一个stack,而stack的卷名字想改为NewName,就可以另外编写一个定制环境文件custom.yaml:

parameters:  volname: NewName
然后使用如下命令创建:
heat stack-create -f mytemplate.yaml -e default.yaml -e custom.yaml customstack


如果参数很多的话,就更能够体现出以上方式的好处。


最后,还有一个问题,现在知道参数可以通过parameter_defaults和parameters来指定,也可以通过命令行-p选项指定。

那如果一个参数通过上面三种方式都指定了,最终会用哪个方式指定的值呢?

优先级如下:

-P选项配置 > parameters配置 > parameter_defaults配置

例如,如果myenv.yaml文件内容如下:

parameters:    volsize: 1parameter_defaults:    volsize: 2

使用如下命令行创建stack:

heat stack-create -f mytemplate.yaml -e myenv.yaml -P volsize=3 mystack
最后创建出来的卷大小会是3GB,因为实际使用的是优先级最高的-P选项指定的值。


0 0
原创粉丝点击