在云模板的迭代式开发期间,或者当您具有最终模板时,可以使这些模板在 Service Broker 自助目录中可用,以供使用者使用。为了进一步增强用户体验,您可以创建自定义请求表单。自定义表单比简单模板输入选项的功能更强大。

必备条件

  • 确认您具有支持模板的基础架构。如果没有,请先教程:在 Cloud Assembly 中设置和测试 vSphere 基础架构和部署,然后再继续其他教程。
  • 确认您已将某些资源池标记为 env:devenv:prod。有关详细信息,请参见教程:在 Cloud Assembly 中使用标记管理 vSphere 资源
  • 确保您具有如下类似的可部署云模板。本教程从以下模板开始。
    formatVersion: 1
    inputs:
      installedOS:
        type: string
        title: Operating System
        description: Select the operating system.
        enum:
          - centos
          - ubuntu
      placement:
        type: string
        enum:
          - 'env:dev'
          - 'env:prod'
        default: 'env:dev'
        title: Select Placement for Deployment
        description: Target Environment
    resources:
      Cloud_vSphere_Disk_1:
        type: Cloud.vSphere.Disk
        properties:
          capacityGb: 1
      Cloud_vSphere_Machine_1:
        type: Cloud.vSphere.Machine
        properties:
          image: '${input.installedOS}'
          installedOS: '${input.installedOS}'
          flavor: small
          constraints:
            - tag: '${input.placement}'
          tags:
            - key: db
              value: mysql
          networks:
            - network: '${resource.Cloud_NSX_Network_1.id}'
              tags:
                - key: db
                  value: mysql
          attachedDisks:
            - source: '${resource.Cloud_vSphere_Disk_1.id}'
      Cloud_NSX_Network_1:
        type: Cloud.NSX.Network
        properties:
          networkType: existing
          tags:
            - key: NGINX
              value: web

步骤 1:向云模板添加输入

除了现有的操作系统类型输入外,此过程还会更新放置输入并添加大小输入。在 Service Broker 中自定义请求表单时,这些是在请求表单上自定义的三个字段。

  1. Cloud Assembly 中,选择设计 > 云模板,然后创建或打开上面提供的模板。

    示例模板用于说明不同的选项并包括示例值。根据您的环境进行调整。

  2. 添加大小变量,并在“输入”部分中定义大小。
    1. 在“Cloud_vSphere_Machine_1”部分中,将变量添加到 flavor 属性。
       flavor: '${input.size}'
    2. 在“输入”部分中,添加名为 size 的用户输入,以便用户可以选择部署大小。这有时也称为您为云区域定义的 T 恤大小。
       size:
          type: string
          title: Deployment size
          description: Select the the deployment t-shirt size.
          enum:
            - small
            - medium
            - large
  3. 更新放置输入,提供描述性术语,而不是标记字符串。

    这些限制标记将与在教程:在 Cloud Assembly 中使用标记管理 vSphere 资源中添加的功能标记相匹配。

    1. 在“输入”部分中,添加名为 placement 的用户输入,以便用户可以选择开发或生产作为部署放置。

      此示例使用 oneOf 属性,以便能够提供自然语言标签,同时仍提交部署过程所需的字符串。例如,env:devenv:prod 标记。

       
      placement:
          type: string
          oneOf:
            - title: Development
              const: 'env:dev'
            - title: Production
              const: 'env:prod'
          default: 'env:dev'
          title: Select Deployment Placement
          description: Target Environment
  4. 查看完整的 YAML 以确保类似于以下示例。
    formatVersion: 1
    inputs:
      installedOS:
        type: string
        title: Operating system
        description: Select the operating system.
        enum:
          - centos
          - ubuntu
      placement:
        type: string
        oneOf:
          - title: Development
            const: 'env:dev'
          - title: Production
            const: 'env:prod'
        default: 'env:dev'
        title: Select Deployment Placement
        description: Target Environment
      size:
        type: string
        title: Deployment size
        description: Select the the deployment t-shirt size.
        enum:
          - small
          - medium
          - large
    resources:
      Cloud_vSphere_Disk_1:
        type: Cloud.vSphere.Disk
        properties:
          capacityGb: 1
      Cloud_vSphere_Machine_1:
        type: Cloud.vSphere.Machine
        properties:
          image: '${input.installedOS}'
          installedOS: '${input.installedOS}'
          flavor: '${input.size}'
          constraints:
            - tag: '${input.placement}'
          tags:
            - key: db
              value: mysql
          networks:
            - network: '${resource.Cloud_NSX_Network_1.id}'
              tags:
                - key: db
                  value: mysql
          attachedDisks:
            - source: '${resource.Cloud_vSphere_Disk_1.id}'
      Cloud_NSX_Network_1:
        type: Cloud.NSX.Network
        properties:
          networkType: existing
          tags:
            - key: NGINX
              value: web
  5. 单击部署,验证请求的第二个页面是否类似于以下示例,然后可以验证部署在部署后是否位于所选的开发或生产资源池中。

    部署请求表单的第二个页面,其中显示了操作系统类型、部署放置和部署大小的输入。

步骤 2:对云模板进行版本控制和发布

具有可部署的模板后,现在可以使其在 Service Broker 目录中可用,以供其他用户部署。要使云模板可发现以便将其添加到目录,必须发布该模板。在此过程中,将对模板进行版本控制以捕获模板的快照,然后发布模板。

  1. 选择设计 > 云模板,然后在设计画布中打开模板。
  2. 单击版本控制,然后输入描述。

    “创建版本”对话框,其中显示了版本号、描述并选中“发布”复选框。
  3. 选中发布复选框,然后单击创建

    发布云模板不会自动将其添加到 Service Broker。发布后会使其可发现,以便将其添加到目录中。

步骤 3:将云模板添加到 Service Broker 目录

您可以使用 Service Broker 目录将云模板提供给您组织中的其他使用者,而他们无需了解如何创建模板。他们可以使用目录部署模板。

将模板添加为目录项之前,必须先将其导入到 Service Broker。只能导入已发布的云模板。

  1. 要从 Cloud Assembly 打开 Service Broker,请单击右上角的应用程序菜单。
    页面右上角的应用程序菜单打开并突出显示 Service Broker。
  2. 单击 Service Broker
  3. 导入云模板。
    1. Service Broker 中,选择内容和策略 > 内容源
    2. 单击新建,然后选择 VMware Cloud Templates
    3. 输入名称

      对于本教程,输入 Cloud Assembly DevProject

    4. 对于项目,选择在 Cloud Assembly 中创建的 Development Project
    5. 单击验证

      系统必须指示至少找到了一个项目。

    6. 验证后,单击创建并导入

      Cloud Assembly DevProject 将作为内容源添加到列表中。

  4. 使云模板在目录中可用。
    1. 选择内容和策略 > 策略 > 定义
    2. 单击新建策略,然后单击内容共享策略
    3. 输入名称。

      对于本教程,输入 DevProject Policy

    4. 范围列表中,选择 Development Project
    5. 内容共享部分中,单击添加项
    6. 共享项目对话框中,选择 Cloud Assembly DevProject,然后单击保存
    7. 用户部分中,选择您希望能够在目录中查看该项的项目用户和组。
    8. 单击创建
  5. 要验证“开发模板”是否已添加到目录中,请单击使用 > 目录
  6. 单击“开发模板”卡视图上的请求

    请注意,此处提供了您在云模板上看到的输入。下一步是自定义请求表单。


    “开发模板”目录项的目录请求表单。包括部署名称、操作系统、放置和部署大小选项。

步骤 4:为模板创建自定义表单

此自定义表单的目标是提供这样一个表单:用户可以在其中根据 env:dev 或 env:prod 标记选择操作系统和放置。然后,env:dev 选项允许用户选择小型或中型,没有大型这个选项。但是,如果用户选择 env:prod,则没有用于选择大型的选项,大小对用户不可见,但包含在请求中。

  1. 要在 Service Broker 中创建自定义表单,请选择内容和策略 > 内容
  2. 单击“开发模板”条目左侧的竖省略号,然后单击自定义表单
  3. 自定义输入选项。
    1. 在画布中,单击画布中的字段,然后按照下表中指定的方式配置属性。
      画布字段名称 外观 限制
      操作系统

      标签和类型

      • 标签 = 操作系统

      值选项

      • 值选项 = 常量
      • 值源 = centos|CentOS,ubuntu|Ubuntu

      此示例使用值选项将所有小写操作系统名称自定义为首选操作系统名称。

      选择部署放置

      值选项

      • 值选项 = 常量
      • 值源 = env:dev|Development,env:prod|Production
      部署大小

      可见性

      • 值源 = 条件值
      • 如果“选择部署放置”为 env:dev,则设置值 = 是

      默认值

      • 值源 = 条件值
      • 如果“选择部署放置”为 env:prod,则设置值 = 大型

      值选项

      • 值选项 = 常量
      • 值源 = small|Small,medium|Medium

      请注意,值源不包括大型。不包括大型是因为,它仅适用于生产环境,且是必需值。大型值包含在部署请求中,而无需用户启动的操作。

    2. 要在目录中打开表单,请单击启用
    3. 单击保存
  4. 要通过提交至少一个小型开发请求和一个生产请求来确保正确结果,请在目录中测试表单。

    使用以下示例验证结果。

    1. 通过提供名称(在此示例中为 Test small),然后选择“CentOS”、“开发”和“小型”选项,测试小型开发请求表单。
      目录请求表单,其中“Test small”为部署名称,并选择“开发”和“小型”。
    2. 要验证小型开发部署,请选择使用 > 部署 > 部署,然后单击 Test small 部署。
    3. 在“拓扑”选项卡上,单击 Cloud_vSphere_Machine,然后在右侧窗格中找到“自定义属性”部分。

      要检查的一些值包括 cpuCount = 2 和“特定实例”=“小型”。


      部署拓扑页面,其中 Cloud_vSphere_Machine 在画布中突出显示,并且 cpuCount = 2 和“特定实例”=“小型”在右侧窗格中突出显示。
    4. 通过输入名称(在此示例中为 Test large)测试生产请求表单,并选择“CentOS”和“生产”选项。

      请注意,配置的表单既不显示大小也不要求用户选择大小。


      目录请求表单,其中“Test large”为部署名称,并选择“生产”。
    5. 要验证生产部署,请选择使用 > 部署 > 部署,然后单击 Test large 部署。
    6. 在“拓扑”选项卡上,单击 Cloud_vSphere_Machine,然后在右侧窗格中找到“自定义属性”部分。

      要检查的一些值包括 cpuCount = 8 和“特定实例”=“大型”。


      部署拓扑页面,其中 Cloud_vSphere_Machine 在画布中突出显示,并且 cpuCount = 8 和“特定实例”=“大型”在右侧窗格中突出显示。

步骤 5:控制目录中的云模板版本

在大多数情况下,您希望在 Service Broker 目录中仅提供最新的云模板。以下过程支持迭代式开发,即发布一个版本的模板并将其添加到目录,但现在改进了模板并希望将当前版本替换为较新版本。

在步骤 2 中,您对模板进行了版本控制并发布了模板,因此您熟悉该过程。在步骤 3 中,您将模板添加到了目录中。当您执行迭代式开发并使用最新版本更新目录时,该过程会将这两个步骤结合在一起。

您可以选择在目录中提供多个版本。

  1. Cloud Assembly 中,对当前要在目录中提供的模板进行版本控制。
    1. 选择设计 > 云模板,然后在设计画布中打开模板。
    2. 单击版本历史记录
    3. 找到要添加到目录中的版本,然后单击版本控制
    4. 输入描述,选中发布复选框,然后单击创建

      此时,可以选择在目录中保留旧版本。如果需要多个版本,请忽略下一步“取消发布版本”。

    5. 要在目录中仅提供模板的一个版本,请查看版本历史记录列表,然后针对目录中不需要的每个版本单击取消发布
  2. 要使用最新版本更新 Service Broker 目录并替换任何旧版本,必须收集新版本。
    1. Service Broker 中,选择内容和策略 > 内容源
    2. 单击本教程中使用的 Cloud Assembly DevProject 内容源。
    3. 单击验证

      应会看到一条指明找到项目的消息。

    4. 单击保存并导入
  3. 验证目录是否显示所需的版本或没有版本。
    1. Service Broker 中,单击使用 > 目录
    2. 找到目录项,然后单击请求
    3. 在请求表单的顶部,单击版本控制,然后验证一个或多个版本。

    以下屏幕截图显示 8。


    具有一个可用版本的新请求表单屏幕截图。