一、安装参数
安装参数可以让客户将软件以合适的方式来安装,常见的场景有:
·选择安装在指定的私有网络(VPC)和子网(Subnet)内,从而实施网络规划。
·选择客户的安全组(Security Group),从而实施网络访问策略。
·选择使用的机型,从而更好贴合用户的实际容量。
·选择最终部署的域名和证书,从而让证书可以自动化部署。
二、在 package.yaml 声明安装参数
安装包可以在 package.yaml 中声明安装参数,云应用将为这些声明的安装参数生成相应的安装界面。以下示例来自云应用模板 CT_001_cvm-ip。
# <package.yaml># 自定义安装参数,通过 widget 来声明安装表单获取args: – name: app_target label: 目标网络 widget: subnet-select – name: cvm_type label: 云服务器类型 widget: cvm-instance-type-select region: ${app_target.region} zone: ${app_target.subnet.zone} – name: sg label: 安全组 widget: security-group-select regions: – ${app_target.region}
声明安装参数时,package.yaml 中使用到的字段,解释如下:
| 字段 | 说明 |
| args | 用 args 声明参数列表,每一项是一个参数。安装界面会按照声明的顺序渲染安装组件。 |
| args[i].name | 参数标识,这个也是后续在 Terraform 中要声明使用的变量名。 |
| args[i].label | 参数名,安装界面会展示参数名。 |
| args[i].widget | 参数使用的安装组件,支持的组件详见 安装参数手册。 |
| args[i].regionargs[i].zone… | 参数的安装组件配置,不同的组件类型有不同的配置字段,详见 安装参数手册。组件的配置,一般为用户输入时提供更为精细的选择范围。例如,用户已经选择了目标网络之后,则服务器类型,可以限定到目标子网支持的示例类型范围,避免无效选择。 |
| args[i].when | (高级用法)参数的出现条件。参数默认不会在安装界面出现,只有满足 when 的条件时出现。可用于做安装组件的表单联动。 |
| args[i].hidden | (高级用法)参数的隐藏条件。参数默认件会在安装界面出现,当满足 when 的条件时隐藏。可用于做安装组件的表单联动。 |
| args[i].validator | (高级用法)参数的校验规则,可帮助用户减少配置失误。 |
三、在 tf 文件中使用安装参数
在 package.yaml 文件中定义好安装参数后,就可以在 tf 文件中声明使用。以下示例来自 CT_001_cvm-ip。
# <variable.tf># CVM 机型选择变量variable "cvm_type" { type = object({ region = string region_id = string zone = string instance_type = string })}
不同类型的安装参数,变量值的 type 是不同的,详见 安装参数手册。
声明后,就可以当做普通的 Terraform 变量使用了。
# <deployment.tf>resource "tencentcloud_instance" "demo_cvm" { # CVM 机型 instance_type = var.cvm_type.instance_type}
四、声明变量
安装包中,所有用到的变量,都需要进行声明才能使用:
# <variable.tf># CVM 机型选择变量variable "cvm_type" { type = object({ region = string region_id = string zone = string instance_type = string })}
跟资源块类似,使用变量块 variable 声明一个变量,上面的声明中 cvm_type为变量名,在资源块中用 var.cvm_type 即可引用。
五、变量分离实践
使用变量可以有效管理资源的编排参数。例如,服务商有两个编排架构基本一致的组件,只是服务器镜像不一样,就可以将镜像 ID 抽取成变量。
在实践中,推荐安装包的 infrastructure 目录按照 variable.tf 和 deployment.tf 来分离变量和编排的部分。可以参考云应用的模板库,获取更多实践思路。
六、变量类型
在安装包中,可使用的变量分为两种:系统变量和应用变量。
·系统变量:用于提供部署所需信息,如镜像仓库地址与凭据、CAM 角色信息等,以 cloudapp_ 为前缀,所有安装包均可使用。
·参数变量:在 package.yaml 定义的应用参数会生成对应的应用变量,变量名就是参数名。
·普通变量:应用自己声明自己使用的变量,例如云服务器镜像 ID、数据库基本设置等。
关于系统变量的清单和信息,请参见 系统变量手册。关于应用参数的配置方法,请参见 应用安装参数手册。
注意:使用变量必须声明
注意:即使系统变量和应用变量的值都是自动注入,在 TF 文件使用时却必须声明。不声明而直接使用的变量,会导致安装包打包失败。
七、输出
应用安装后的结果,需要提供给客户。例如应用的访问地址、管理系统的地址或者管理系统的初始密码等。可以通过在 tf 文件中声明 output 实现。
output "main" { value = "https://my.${var.selected_domain}" # value = "http://${tencentcloud_instance.cloudapp_cvm.public_ip}:8080" description = "访问入口"}output "a_admin_url" { value = "https://admin.${var.selected_domain}" description = "运营系统系统"}output "b_admin_default_user" { value = "admin" description = "默认管理员用户"}output "c_admin_default_password" { value = random_password.default_admin.result description = "默认管理员密码" sensitive = true}
声明的输出,客户可以在看板应用详情中,看到对应的安装结果。