跳到主要内容
版本:v0.6

模板

模板是预定义的资源框架或架构,它包含了一组相关的组件定义,输入以及输出。

类型

Walrus 当前支持的模板类型为 Terraform module,存储于 git 代码仓库。

用户可以通过以下方式添加模板:

从模版库导入

模板库是模板的集合,添加模板库后,将会自动导入模板库中包含的所有模板。

添加独立的模板

通过操作Walrus UI,添加源为 git 代码仓库的地址的独立模板。

模板结构

Walrus 支持与 Terraform module 兼容的模板结构,包含以下文件。

<path-to-template>
├── README.md
├── main.tf
├── outputs.tf
├── variables.tf
├── schema.yaml
├── icon.svg
  • main.tf

    Terraform 配置的主文件,其中包含了资源的定义和配置。

  • variables.tf

    Terraform 变量的配置文件,在这个文件中,你会定义变量的名称、类型、默认值等信息。

  • outputs.tf

    Terraform 输出的配置文件,输出允许你从 Terraform 执行中导出特定的值,以便其他 Terraform 配置、脚本或人工操作可以使用这些值。在这个文件中,你会定义输出的名称以及与之关联的值。

  • schema.yaml

    用于定义模版UI样式的配置文件,schema.yaml的内容为openAPI 格式的 UI Schema,包含variables.tf中变量的类型,样式,校验,默认值等自定义配置。

  • icon.svg

    模板默认会使用来源的默认分支中根路径中名为 icon 的图片文件作为模板的图标,目前支持的图标文件格式为:.png.jpg.jpeg.svg。如果没有找到 icon 文件,会使用默认的图标。

自定义模板 UI 样式

Walrus 在 Terraform 变量的基础上通过 UI Schema 扩展了样式定义,有助于在用户界面上生成更加友好的表单。

配置方式

schema.yaml

可以通过在模板仓库中添加 schema.yaml 来配置UI样式,如果仓库中包含schema.yaml,Walrus将会使用schema.yaml中配置的UI样式。

以下为 schema.yaml 的示例:

openapi: 3.0.3
info:
title: OpenAPI schema for template webservice
components:
schemas:
variables:
required:
- image
type: object
properties:
image:
title: Image Name
type: string
description: Docker image name
x-walrus-ui:
group: Basic
ports:
title: Ports
type: array
description: Service ports to expose
default:
- 80
items:
type: number
x-walrus-ui:
group: Basic

Walrus提供了工具根据terraform module生成schema.yaml文件,步骤如下:

  1. 安装Walrsu CLI
  2. 运行命令生成schema.yaml walrus-cli schema generate --dir=${dir for module}

Walrus UI 配置

当仓库中不包含schema.yaml文件,Walrus将根据variables.tf文件自动配置UI样式,可以在模板的UI Schema中看到系统生成的样式。

配置项

UI Schema 基于 OpenAPI 3.0 文件结构,通过 Yaml 格式来编写,其中包括 OpenAPI Schema 基础结构部分和 OpenAPI Extensions 扩展部分,两者结合实现定义扩展样式。

OpenAPI Schema 基础配置

名称描述
title变量显示的名称
type变量类型
description变量描述
default变量默认值
format支持配置 password,根据 format 针对 string 类型变量使用密码输入框
enum变量值可选范围
readOnly限制该变量值不能修改
writeOnly限制该变量为只写变量
minimum限制 number、integer 类型变量的最小值
maximum限制 number、integer 类型变量的最大值
minLength限制 string 类型变量的最小长度
maxLength限制 string 类型变量的最大长度
required配置 Object 类型变量的必须子变量,值为包含子变量名称的数组
properties用于 object 类型的子变量配置
items用于 array 类型变量的元素配置

x-walrus-ui 扩展配置

OpenAPI 支持通过以 x-作为前缀的附加属性,walrus 支持通过 x-walrus-ui 附加扩展更多样式配置。

名称description
group变量分组
hidden是否隐藏该变量
immutable变量是否支持修改
showIf变量显示条件
widget配置使用 Walrus 的控件

Walrus 扩展控件

Walrus内置扩展控件可以在widget中配置,UI将会根据配置的展示样式。

名称description
YamlEditorYaml编辑器
TextArea多行输入框

运行时上下文

在模板中可以通过context变量来获得项目,环境,资源相关的运行时上下文信息,需要您在模板中声明context变量,部署时Walrus 会自动注入context变量的值。声明方式如下:

variable "context" {
description = <<-EOF
Receive contextual information. When Walrus deploys, Walrus will inject specific contextual information into this field.

Examples:
context:
project:
name: string
id: string
environment:
name: string
id: string
resource:
name: string
id: string
EOF
type = map(any)
default = {}
}

上下文信息如下:

上下文上下文子属性类型描述
projectname字符串资源所属项目名称
projectid字符串资源所属项目 ID
environmentname字符串资源所属环境名称
environmentid字符串资源所属环境 ID
environmentnamespace字符串Walrus 管理的 namesapce,在 Kubernetes 环境中可用
resourcename字符串资源名称
resourceid字符串资源 ID

输出

Walrus 会抓取 Terraform 文件中定义的输出,部署完成后,输出将显示在服务的输出页中。

resource-outputs

可访问 URL

Walrus 支持抓取用户自定义访问 URL。

resource-endpoints

把输出名称为 endpoints 或者 walrus_endpoints (如下配置),Walrus 将会把这些数组作为 访问URL 展示。

output "endpoints" {
value = {
grafana_console = "http://localhost:3000"
prometheus_console = "http://localhost:9090"
}
}

作为可捕获的结果,endpointswalrus_endpoints 的值类型必须是字符串映射,例如,JSON 形式为 {"grafana_console":"http://localhost:3000","prometheus_console":"http://localhost:9090”}。 由于 Terraform 不支持声明输出类型,如果需要显式类型转换,请尝试 tomap 函数。

注意:

  • 当返回 URL 的主机名(通常以 IP 地址的形式)与 Walrus 的本地 IP 地址相同时,Walrus 会将主机名替换为 服务器地址(设置) 中的主机名。
  • 采用上述变换,您将能够访问从内置 Kubernetes 集群暴露的服务。