对云模板进行版本控制后,可以更改 YAML 中的 formatVersion 值以支持其他部署功能。

formatVersion 显示在 YAML 的顶部,其值决定了可以在 VMware 云模板中指定的内容。

  • formatVersion: 1 包括 inputsresources 的模板规范。将自动应用于所有基本云模板。

    要了解有关基本模板的更多信息,请参见可查看的云模板

  • formatVersion: 2 添加 metadatavariablesoutputs 的模板规范。将自动应用于使用 Private AI Automation Services 部署的 AI Workstation 和 AI Kubernetes 集群的云模板,但支持任何类型的部署。

    有关部署 AI Workstation 和 AI Kubernetes 集群的信息,请参见如何部署专用 AI 目录项

作为云模板管理员,您可以使用 formatVersion: 2 包含的规范使用户更便于访问部署。以下代码示例进行了修剪,展示了如何在 YAML 中使用 formatVersion: 2 模板规范的示例。

如何使用 metadata 模板规范

使用 metadata 可隐藏或取消隐藏为用户显示的实施后操作。
metadata:
  deploymentSettings:
    disableUpdateDay2Action: true
    hideDisabledDay2Actions: true
  • disableUpdateDay2Action 为 true 时,用户不会在“操作”菜单中看到更新实施后操作。如果用户没有更新的权限,该选项将显示为不可用(灰显)。
  • hideDisabledDay2Actions 为 true 时,针对用户停用的任何实施后操作都不会显示在“操作”菜单中。

更新更改项目实施后操作在以下示例中处于隐藏状态。

在 formatVersion2 模板设置中定义“操作”菜单的元数据

如何使用 variables 模板规范

使用 variables 可指定在模板中多次重用的值,例如在动态配置中。变量定义可以包括普通字符串、输入和引用其他变量。可以引用在模板的 resources 和 outputs 部分中定义的变量。
variables:
  applications:
    - name: App1
      port: 3000
      showAppInfo: true
    - name: App2
      port: 4000
      showAppInfo: false

如何使用 outputs 模板规范

使用 outputs 可定义要提供给用户的部署信息。所有输出都显示在部署详细信息页面上的用户事件下,但 __deploymentOverview 值除外,该值显示在部署概览下。

outputs 示例包括:
  • variables 模板规范中定义的 variables
  • 在 resources 部分中定义并包含在以下代码示例中的 resources
  • 以 Markdown 编写的 __deploymentOverview
outputs:
  secret1name:
    value: ${resource.secret-data1.object.metadata.name}
  secret2name:
    value: ${resource.secret-data2.object.metadata.name}
  __deploymentOverview:
    value: |
      ### Deployment details
      %{if starts_with(resource.CCI_Supervisor_Namespace_1.name, 'dummy')} 
        This is a dummy namespace with name ${resource.CCI_Supervisor_Namespace_1.name}
      %{else}
        This is a real namespace with name ${resource.CCI_Supervisor_Namespace_1.name}
      %{endif}

      %{for app in variable.applications}
        ##### App details
        %{if app.showAppInfo}
          App name - ${app.name}, App port - ${app.port}
        %{else}
          App info is hidden because showAppInfo is ${app.showAppInfo} 
        %{endif}
      %{endfor}

      #### Handle bars bindings.

      The below values will update dynamically if the values change.
      Note that we use '\{\{' to indicate handle bars expressions

      secret 1 resource version - {{resource.secret-data1.object.metadata.resourceVersion}}
resources:
  CCI_Supervisor_Namespace_1:
    type: CCI.Supervisor.Namespace
    properties:
      name: ${input.namespaceName}
      regionName: private-ai-foundation-dsdunnjz
      className: vpaif-quickstart-3
  secret-data1:
    type: CCI.Supervisor.Resource
    properties:
      context: ${resource.CCI_Supervisor_Namespace_1.id}
      manifest:
        apiVersion: v1
        kind: Secret
        metadata:
          name: nvaie-apikey
        type: Opaque
        stringData:
          username: $oauthtoken
          password: ${input.ngcPortalAccessKey}
  secret-data2:
    type: CCI.Supervisor.Resource
    properties:
      context: ${resource.CCI_Supervisor_Namespace_1.id}
      manifest:
        apiVersion: v1
        kind: Secret
        metadata:
          name: nvaie-apikey1
        type: Opaque
        stringData:
          username: $oauthtoken
          password: ${input.ngcPortalAccessKey}
__deploymentOverview 中提供以下构造示例。
  • if 构造是基于布尔输入的条件表达式。
          %{if starts_with(resource.CCI_Supervisor_Namespace_1.name, 'dummy')} 
            This is a dummy namespace with name ${resource.CCI_Supervisor_Namespace_1.name}
          %{else}
            This is a real namespace with name ${resource.CCI_Supervisor_Namespace_1.name}
          %{endif}
  • for 循环允许对数组进行迭代。对于数组中列出的每个 app,评估 if 条件,分配变量值并将其显示为输出。
          %{for app in variable.applications}
            ##### App details
            %{if app.showAppInfo}
              App name - ${app.name}, App port - ${app.port}
            %{else}
              App info is hidden because showAppInfo is ${app.showAppInfo} 
            %{endif}
          %{endfor}
  • 在 handlebars 表达式中,变量绑定随着实际值的更改动态更新。变量用双大括号 {{}} 括起来,在以下示例中,表达式是一个以点分隔的路径。
    secret 1 name - {{resource.secret-data1.object.metadata.resourceVersion}}

模板规范在 UI 中显示的位置

所定义的 outputs 将显示在部署中。
  • __deploymentOverview 是一种特殊输出,显示在部署概览中。formatVersion2 模板设置中的 __deploymentOverview 输出
  • 所有其他输出(如 secret1namesecret2name 显示在部署的用户事件选项卡下。

    formatVersion2 模板设置中定义的其他输出