opentack heat orchestration template (HOT) 可以类比 k8s 的 yaml 文件,k8s 通过 yaml 文件实现编排, 通过 HOT yaml 文件实现 openstack 上的编排
openstack 版本
train 版
HOT hello world
有效的 HOT 版本参考:Heat template version
resources 段是必须的,并且至少包含一个资源定义,上面就是定义了一个名为my_instance的资源
上面的例子会创建一个镜像为 F18-x86_64-cfntools, 大小为 m1.small, ssh key 指定为 my_key 的一个云主机
通常为了使模板更通用,会使用变量,而不是像上面的例子那样硬编码。
定了三个变量,并且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 **: 必须,指定模板语法的版本,除了可以指定日期的格式,还可以直接指定 openstack 的版本, 如 rocky
description : 可选,描述信息
parameter_groups : 可选,指明输入参数该如何分组以及参数传入的顺序
**parameters : **可选, 定义输入参数
resources : 必须,定义模板资源
**outputs : **可选,定义输出参数
conditions : 可选,用来控制一个资源什么情况下可以被创建,或者资源某一属性什么情况下可以被定义。
Parameter groups section
parameter_groups:
- label:
description:
parameters:
Parameters section
parameters:
type 示例 :
定义一个输入参数,至少包含 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 是可选的,但是一般为了更好的描述都加上了这两个属性
内置的参数
这三个参数都可以通过 get_param 参数获取:
Resources section