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