클라우드 템플릿의 버전을 지정한 후 추가 배포 기능을 지원하도록 YAML에서 formatVersion 값을 변경할 수 있습니다.

formatVersion은 YAML의 맨 위에 표시되며 해당 값에 따라 VMware Cloud 템플릿에서 지정할 수 있는 내용이 결정됩니다.

  • formatVersion: 1에는 inputsresources에 대한 템플릿 규격이 포함되어 있습니다. 모든 기본 클라우드 템플릿에 자동으로 적용됩니다.

    기본 템플릿에 대해 자세히 알아보려면 검토 가능한 클라우드 템플릿 항목을 참조하십시오.

  • formatVersion: 2metadata, variables, outputs에 대한 템플릿 규격을 추가합니다. Private AI Automation Services를 사용하여 배포되는 AI Workstation 및 AI Kubernetes 클러스터에 대한 클라우드 템플릿에 자동으로 적용되지만 모든 종류의 배포를 지원합니다.

    AI Workstation 및 AI Kubernetes 클러스터 배포에 대한 자세한 내용은 개인 AI 카탈로그 항목을 배포하는 방법 항목을 참조하십시오.

클라우드 템플릿 관리자는 formatVersion: 2에 포함된 규격을 사용하여 사용자가 배포에 더 쉽게 액세스할 수 있도록 할 수 있습니다. 다음 코드 샘플은 YAML에서 formatVersion: 2 템플릿 규격을 사용하는 방법의 예를 보여주도록 정리되어 있습니다.

메타데이터 템플릿 규격을 사용하는 방법

metadata를 사용하여 사용자에게 표시되는 2일차 작업을 숨기거나 숨기기를 취소합니다.
metatdata:
  deploymentSettings:
    disableUpdateDay2Action: true
    hideDisabledDay2Actions: true
  • disableUpdateDay2Action이 true이면 작업 메뉴에 Update 2일차 작업이 표시되지 않습니다. 사용자에게 업데이트 권한이 없으면 옵션을 사용할 수 없는 것으로 나타납니다(흐리게 표시됨).
  • hideDisabledDay2Actions가 true이면 사용자에 대해 비활성화된 2일차 작업이 작업 메뉴에 표시되지 않습니다.

업데이트프로젝트 변경 2일차 작업은 다음 예에서 숨겨집니다.

formatVersion2 템플릿 설정에서 작업 메뉴에 대한 메타데이터 정의

변수 템플릿 규격을 사용하는 방법

템플릿 내에서 여러 번 재사용되는 값(예: 동적 구성)을 지정하려면 variables를 사용합니다. 변수 정의에는 일반 문자열, 입력이 포함될 수 있으며 기타 변수를 참조할 수 있습니다. 템플릿의 리소스 및 출력 섹션에서 정의한 변수를 참조합니다.
variables:
  applications:
    - name: App1
      port: 3000
      showAppInfo: true
    - name: App2
      port: 4000
      showAppInfo: false

출력 템플릿 규격을 사용하는 방법

outputs를 사용하여 사용자가 사용할 수 있도록 하려는 배포 정보를 정의합니다. 모든 출력은 배포 세부 정보 페이지에 사용자 이벤트 아래에 표시되지만, __deploymentOverview 값은 배포 개요 아래에 나타납니다.

outputs 예에는 다음이 포함됩니다.
  • variables - 변수 템플릿 규격에 정의됨
  • resources - 리소스 섹션에 정의되고 다음 코드 샘플에 포함됨
  • __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}
  • 핸들바 표현식에서 실제 값이 변경되면 변수 바인딩이 동적으로 업데이트됩니다. 변수는 이중 중괄호 {{}}로 묶여 있으며 이 예에서는 표현식이 점으로 구분된 경로입니다.
    secret 1 name - {{resource.secret-data1.object.metadata.resourceVersion}}

템플릿 규격이 UI에 표시되는 위치

정의한 outputs는 배포에 표시됩니다.
  • __deploymentOverview는 배포 개요에 나타나는 특수한 종류의 출력입니다. 출력: formatVersion2 템플릿 설정의 __deploymentOverview
  • secret1namesecret2name과 같은 다른 모든 출력은 사용자 이벤트 탭 아래 배포에 나타납니다.

    formatVersion2 템플릿 설정에 정의된 기타 출력