配置模版

配置模版是通过 CUE 语言定义,用来描述配置的输入参数,存储结构和其他扩展能力。它的渲染工作方式与 Definition 比较类似。每一个配置模版也代表一种配置类型,可以统一管理配置。

  1. 创建多个同类型的配置,例如 镜像仓库集成Helm 仓库集成
  2. 需要确定配置的输入参数结构并需要进行校验。
  3. 需要将配置同时写往 Nacos 配置中心。参考
  4. 需要根据用户输入按需渲染 Secret 或其他资源。例如 Grafana 配置可以输出 Secret 和 Grafana CR。
  5. 需要对配置进行分类支持 list 查询。

系统中已经存在一些开箱即用的模版可以供大家参考:

更多的配置模版可以在插件仓库中找到。

模版应该包括以下几部分定义:

  • metadata(必需)
  1. metadata: {
  2. name: "terraform-alibaba"
  3. alias: "Terraform Provider for Alibaba Cloud"
  4. sensitive: true
  5. scope: "system"
  6. description: "Terraform Provider for Alibaba Cloud"
  7. }

模版的元数据描述。sensitive 代表该模版生成的数据是否是敏感数据,为 True 时该模版生成的配置不同进行二次编辑和直接读取。只能通过挂载 Secret使用。scope 代表配置的生效范围,有两个可选项 systemproject。前者代表该配置只能在系统级别读写,后者代表配置可以在项目级别进行读写和共享。这种控制模式只在 UI 中有效。

  • template.parameter(必需)
  1. template: {
  2. parameter: {
  3. //+usage=The name of Terraform Provider for Alibaba Cloud, default is `default`
  4. name: *"default" | string
  5. //+usage=Get ALICLOUD_ACCESS_KEY per this guide https://help.aliyun.com/knowledge_detail/38738.html
  6. ALICLOUD_ACCESS_KEY: string
  7. //+usage=Get ALICLOUD_SECRET_KEY per this guide https://help.aliyun.com/knowledge_detail/38738.html
  8. ALICLOUD_SECRET_KEY: string
  9. //+usage=Get ALICLOUD_REGION by picking one RegionId from Alibaba Cloud region list https://www.alibabacloud.com/help/doc-detail/72379.htm
  10. ALICLOUD_REGION: string
  11. }
  12. }

定义配置的输入参数。

  • template.output
  1. output: {
  2. apiVersion: "v1"
  3. kind: "Secret"
  4. metadata: {
  5. name: context.name
  6. namespace: context.namespace
  7. }
  8. type: "Opaque"
  9. stringData: credentials: strings.Join([creds1, creds2], "\n")
  10. }

该部分不是必需的,如果希望自定义 Secret 的存储结构时可以指定。

  • template.outputs
  1. outputs: {
  2. "grafana": {
  3. apiVersion: "o11y.prism.oam.dev/v1alpha1"
  4. kind: "Grafana"
  5. metadata: {
  6. name: context.name
  7. }
  8. spec: {
  9. endpoint: parameter.endpoint
  10. if parameter.auth != _|_ {
  11. access: {
  12. if parameter.auth.username != _|_ && parameter.auth.password != _|_ {
  13. username: parameter.auth.username
  14. password: parameter.auth.password
  15. }
  16. if parameter.auth.token != _|_ {
  17. token: parameter.auth.token
  18. }
  19. }
  20. }
  21. }
  22. }
  23. }

该部分定义输出非 Secret 的其他资源,这些资源随着配置的创建而创建,删除而删除。

  • template.nacos
  1. nacos: {
  2. // The endpoint can not references the parameter.
  3. endpoint: {
  4. // Users must create a config base the nacos-server template firstly.
  5. name: "nacos"
  6. }
  7. format: parameter.contentType
  8. // could references the parameter
  9. metadata: {
  10. dataId: parameter.dataId
  11. group: parameter.group
  12. if parameter.appName != _|_ {
  13. appName: parameter.appName
  14. }
  15. if parameter.namespaceId != _|_ {
  16. namespaceId: parameter.namespaceId
  17. }
  18. if parameter.tenant != _|_ {
  19. tenant: parameter.tenant
  20. }
  21. if parameter.tag != _|_ {
  22. tag: parameter.tag
  23. }
  24. }
  25. content: parameter.content
  26. }

该部分不是必需的,如果定义则代表这是 Nacos 配置的类型。

  1. 创建或更新模版
  1. vela config-template apply -f template.cue
  1. 查看配置的输入参数
  1. vela config-template show <Template Name>

我们可以直接将 CUE 脚本复制给其他平台或用户以实现分享。但更常见的分享好用的配置模版给其他社区用户的载体是插件。

这里有一个插件的目录结构,其中 config-templates 目录中存放配置模版:

  1. ├── config-templates
  2. ├── image-registry.cue
  3. ├── nacos-config.cue
  4. └── nacos-server.cue
  5. ├── metadata.yaml
  6. ├── parameter.cue
  7. ├── readme.md
  8. ├── readme_cn.md
  9. ├── resources
  10. ├── apiserver.cue
  11. └── velaux.cue

当安装该插件后,这些配置模版即可被加载到集群中。

Last updated on 2023年2月9日 by dependabot[bot]