openstack heat 编排模板指南
opentack heat orchestration template (HOT)
可以类比 k8s
的 yaml
文件,k8s
通过 yaml
文件实现编排, heat
通过 HOT
yaml
文件实现 openstack
上的编排
openstack 版本
train
版
HOT hello world
heat_template_version: 2015-04-30
description: Simple template to deploy a single compute instance # 可选
resources:
my_instance:
type: OS::Nova::Server
properties:
key_name: my_key
image: F18-x86_64-cfntools
flavor: m1.small
有效的 HOT
版本参考:Heat template version
resources
段是必须的,并且至少包含一个资源定义,上面就是定义了一个名为my_instance
的资源
上面的例子会创建一个镜像为 F18-x86_64-cfntools
, 大小为 m1.small
, ssh key
指定为 my_key
的一个云主机
通常为了使模板更通用,会使用变量,而不是像上面的例子那样硬编码
heat_template_version: 2015-04-30
description: Simple template to deploy a single compute instance
parameters:
key_name:
type: string
label: Key Name
description: Name of key-pair to be used for compute instance
image_id:
type: string
label: Image ID
description: Image to be used for compute instance
instance_type:
type: string
label: Instance Type
description: Type of instance (flavor) to be used
default: m1.small # 指定默认值
resources:
my_instance:
type: OS::Nova::Server
properties:
key_name: {
get_param: key_name }
image: {
get_param: image_id }
flavor: {
get_param: instance_type }
这次,定了三个变量,并且my_instance
里面使用变量,而不是硬编码, 并且变量可以指定默认值,这些变量通过 horizon
页面或者 openstack
命令行传进来
变量除了设置默认值,还可以设置 hidden
属性,这样用户在 heat
stack
页面看不到该属性的值,通常用来保护一些私密信息
parameters:
database_password:
type: string
label: Database Password
description: Password to be used for database
hidden: true
allowed_values
和 allowed_pattern
属性可以限制一个变量的取值
parameters:
instance_type:
type: string
label: Instance Type
description: Type of instance (flavor) to be used
constraints:
- allowed_values: [ m1.medium, m1.large, m1.xlarge ]
description: Value must be one of m1.medium, m1.large or m1.xlarge.
database_password:
type: string
label: Database Password
description: Password to be used for database
hidden: true
constraints:
- length: {
min: 6, max: 8 }
description: Password length must be between 6 and 8 characters.
- allowed_pattern: "[a-zA-Z0-9]+"
description: Password must consist of characters and numbers only.
- allowed_pattern: "[A-Z]+[a-zA-Z0-9]*"
description: Password must start with an uppercase character.
除了自定义用户的输入参数外,还可以配置输出变量
outputs:
instance_ip:
description: The IP address of the deployed instance
value: {
get_attr: [my_instance, first_address] }
HOT 指南
模板结构
heat_template_version: 2016-10-14
# heat_template_version: rocky
description:
# a description of the template
parameter_groups:
# a declaration of input parameter groups and order
parameters:
# declaration of input parameters
resources:
# declaration of template resources
outputs:
# declaration of output parameters
conditions:
# declaration of conditions
heat_template_version
: 必须,指定模板语法的版本,除了可以指定日期的格式,还可以直接指定 openstack
的版本, 如 rocky
description
: 可选,描述信息
parameter_groups
: 可选,指明输入参数该如何分组以及参数传入的顺序
parameters
: 可选, 定义输入参数
resources
: 必须,定义模板资源
outputs
: 可选,定义输出参数
conditions
: 可选,用来控制一个资源什么情况下可以被创建,或者资源某一属性什么情况下可以被定义
Parameter groups section
parameter_groups:
- label: <human-readable label of parameter group>
description: <description of the parameter group>
parameters:
- <param name>
- <param name>
Parameters section
parameters:
<param name>:
type: <string | number | json | comma_delimited_list | boolean>
label: <human-readable name of the parameter>
description: <description of the parameter>
default: <default value for parameter>
hidden: <true | false>
constraints:
<parameter constraints>
immutable: <true | false>
tags: <list of parameter categories>
type
示例 :
Type | Description | Examples |
---|---|---|
string | A literal string. | “String param” |
number | An integer or float. | “2”; “0.2” |
comma_delimited_list | An array of literal strings that are separated by commas. The total number of strings should be one more than the total number of commas. | [“one”, “two”]; “one, two”; Note: “one, two” returns [“one”, “two”] |
json | A JSON-formatted map or list. | {“key”: “value”} |
boolean | Boolean type value, which can be equal “t”, “true”, “on”, “y”, “yes”, or “1” for true value and “f”, “false”, “off”, “n”, “no”, or “0” for false value. | “on”; “n” |
定义一个输入参数,至少包含 type
parameters:
user_name:
type: string
label: User Name
description: User name to be configured for the application
port_number:
type: number
label: Port Number
description: Port number to be configured for the web server
label
和 description
是可选的,但是一般为了更好的描述都加上了这两个属性
内置的参数
heat
会为每个 stack
内置三个参数
OS::stack_name
:stack
名称OS::stack_id
:stack
id
OS::project_id
: 项目id
这三个参数都可以通过 get_param
参数获取
Resources section
resources:
<resource ID>:
type: <resource type>
properties:
<property name>: <property value>
metadata:
<resource specific metadata>
depends_on: <resource ID or list of ID>
update_policy: <update policy>
deletion_policy: <deletion policy>
external_id: <external resource ID>
condition: <condition name or expression or boolean>
Resource dependencies
depends_on
属性定义资源之间的依赖关系
resources:
server1:
type: OS::Nova::Server
depends_on: [ server2, server3 ]
server2:
type: OS::Nova::Server
depends_on: server3
server3:
type: OS::Nova::Server
Outputs section
outputs:
<parameter name>:
description: <description>
value: <parameter value>
condition: <condition name or expression or boolean>
Conditions section
conditions:
<condition name1>: {
expression1}
<condition name2>: {
expression2}
...
示例
conditions:
cd1: True
cd2: