文档中心>云应用>服务商指南>制作和管理应用包>使用安装参数、变量和输出

使用安装参数、变量和输出

最近更新时间:2024-08-13 09:30:51

我的收藏

安装参数

安装参数可以让客户将软件以合适的方式来安装,常见的场景有:
选择安装在指定的私有网络(VPC)和子网(Subnet)内,从而实施网络规划。
选择客户安全组(Security Group)从而实施网络访问策略。
选择使用的机型,从而更好贴合用户的实际容量。
选择最终部署的域名和证书,从而让证书可以自动化部署。

在 package.yaml 声明安装参数

应用包可以在 package.yaml 中声明安装参数,云应用将为这些声明的安装参数生成相应的安装界面。以下示例来自云应用模板 CT_001_cvm-ip
# <pacakge.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].region
args[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}"
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.result
description = "默认管理员密码"
sensitive = true
}
声明的输出,客户可以在看板应用详情中,看到对应的安装结果。



有两点值得关注:
如果输出变量名为 main,并且 main 最终结果是个 URL 地址,会作为客户的应用打开地址
如果声明了 sensitive = true,则表示为敏感信息。客户可以针对敏感信息接口进行 CAM 或者 MFA 做安全限制。