Heat Environment详解

Posted peach_li

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Heat Environment详解相关的知识,希望对你有一定的参考价值。

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

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

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

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


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


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

[plain]  view plain  copy
  1. heat_template_version: 2013-05-23  
  2. description: create cinder volume  
  3.   
  4. parameters:  
  5.   volsize:  
  6.     type: number  
  7.     description: Size of volume to create  
  8.   
  9. resources:  
  10.   myres:  
  11.     type: OS::Cinder::Volume  
  12.     properties:  
  13.       name: volname  
  14.       size:  get_param: volsize   
其中volsize就是一个可定制的输入参数,比较常用的方式是在创建stack命令行中通过-P选项输入,例如:

[plain]  view plain  copy
  1. heat stack-create -f mytemplate.yaml -P vol_size=1 mystack  

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

[plain]  view plain  copy
  1. parameters:  
  2.   volsize: 2  


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


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

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


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

[plain]  view plain  copy
  1. parameter_defaults:  
  2.   volsize: 2  
效果跟parameters一样。

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

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

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

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

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

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


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

[plain]  view plain  copy
  1. parameters:  
  2.   volname:  
  3.     type: string  
  4.     description: Name of volume to create  
  5.   volsize  
  6.     type: number  
  7.     description: Size of volume to create  

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

[plain]  view plain  copy
  1. parameter_defaults:  
  2.   volname: MyVolName  
  3.   volsize: 2  


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

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

[plain]  view plain  copy
  1. parameters:  
  2.   volname: NewName  
然后使用如下命令创建:
[plain]  view plain  copy
  1. 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
  1. parameters:  
  2.     volsize: 1  
  3.       
  4. parameter_defaults:  
  5.     volsize: 2  

使用如下命令行创建stack:

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

以上是关于Heat Environment详解的主要内容,如果未能解决你的问题,请参考以下文章

heat应用

heat模板

多实例的heat模板

Heat入门第一步

heat创建stack

如何包含由 Heat 创建的 Wix Fragments