Form Schema 概览

在 Service Catalog 中,Deployment Manager 配置是一种受支持的解决方案。为了帮助您创建和部署 Deployment Manager 配置,我们提供了 Form Schema。

Form Schema 用于在 HTML 表单中布置界面 (UI) 组件。具体来说,它允许云管理员和开发者提供一个界面,以便在创建新实例或云部署时输入参数。

Cloud 管理员可以使用 Form Schema 创建表单,以便用户能够在发布解决方案之前自定义基于 Deployment Manager 模板的解决方案。例如,用户可以选择虚拟机将拥有的机器类型、磁盘大小、地区和 CPU 数量。这些表单看起来与 Cloud Marketplace 中使用的表单类似。

以下屏幕截图展示了部署表单的外观:

部署表单

Form Schema 的替代方案

Form Schema 是创建界面表单的现有方法的替代方法,称为“显示元数据”。

与显示元数据相比,Form Schema 具有灵活性,而且是开源的。

与 JSON 架构的关系

Form Schema 是基于 JSON 架构表单构建的,后者是一种用 JSON 编写的开源架构,用于指定和验证一组参数。

Form Schema 会引用 JSON 架构中的字段,并继承 JSON 架构中的属性。

您可以在 form 属性内添加一组 form entry 对象,从而在 JSON 架构中包含 Form Schema,如以下示例所示:

    {
      "$schema": "http://json-schema.org/draft-04/schema#",
      "type": "object",
      "properties": {...}
      "form": [
        ...Form List goes here...
      ]
    }

如何指定 Form Schema 实例

您可使用 YAML 格式指定 Form Schema 实例。

您可以创建一个架构文件,按照它们在界面中出现的顺序来布局界面微件。如 Deployment Manager 文档中所述,此架构文件的文件扩展名为 .py 或 .jinja。

然后,您可以将这些文件添加到 Deployment Manager 模板 zip 归档文件中并上传该 zip 归档文件。

Form Schema 如何适应 Service Catalog 工作流

Cloud 管理员可以按如下方式将 Form Schema 与 Service Catalog 搭配使用:

  1. 创建 Deployment Manager 模板。
  2. 指定 JSON 架构,以定义或验证可以在 Deployment Manager 模板配置界面中使用哪些输入字段。
  3. 在 Form Schema 中,为特定解决方案定义包含哪些字段以及这些字段的显示顺序。除了排序之外,您还可以使用 Form Schema 为枚举字段(例如下拉列表)和字段分组提供方便用户使用的文本。

表单列表

一组 form entry 对象。每个对象都以表单的形式表示界面组件。您应该按照您希望字段在表单中显示的顺序指定这些字段,无论它们在架构中的位置如何。

表单条目

表单条目用于指定表单中界面组件的外观。它可以是一个字符串,表示 JSON 架构中字段的键,或对象。 当表单条目是字符串时,外观的默认值会从 JSON 架构条目继承。

当表单条目是对象时,key 属性是指 JSON 架构条目。使用点 . 分隔嵌套值的节点。例如,使用 name.first 引用 name 对象内的 first 字段。其他所有字段均为可选字段,如果指定了这些字段,则从 JSON 架构继承默认值。

领域
key*String
指定 JSON 架构中的字段定义。
widgetWidget
指定要用于此字段的界面微件。默认值:基于映射字段类型
titleString
字段的标题。从架构继承 title
notitleBoolean
是否隐藏标题。默认值:false。
descriptionString
用作字段的提示或提示。从架构继承 description
validationMessageString
字段无效时要显示的消息。
placeholderString
字段的占位符。注意:Material Design 会使用 title 作为占位符。
readonlyBoolean
字段是否是只读的。从架构继承 readonly
conditionString
一种逻辑表达式,用于确定是否显示相应字段。
titleMapTitle map
checkboxesradioselect 微件中的选项提供文本标签。

* 必填

针对类型的特殊处理

对象

对于类型 object,字段 additionalProperties 定义了能否显示额外的属性。字段的值可以是 true(允许任何内容)、false(不允许额外的属性),也可以是一些 JSON 架构,用于限制允许的额外属性。当值为 false 或不存在时,items 属性中列出的字段便会显示微件。对于其他值(true 或 JSON 架构),系统会显示一个文本区域,用于输入 JSON 值。

类型到微件的映射

如果未在 Form Schema 中指定微件,系统将根据字段的 JSON 架构类型使用默认值,如下所示:

架构类型 架构表单微件
字符串 文本
数值 数值
整数 数值
布尔值 复选框
对象 字段集
字符串 + 枚举 radio(不超过 3 个选项)
字符串 + 枚举 select(4 个或更多选项)
数组 + 枚举 复选框
数组 数组

微件

微件以字符串形式指定,用于引用以下数据结构之一。

数组

添加、移除和重新排序行的列表。JSON 架构允许 array 类型的 items 属性是架构或架构列表。Form Schema 不支持此列表。

包含原始项的数组

由于表单架构要求所有表单条目都有一个键,并且包含基元(非对象)项的数组没有引用该键的项,因此该表单应该使用预留关键字引用原始数组条目:'x-googleProperty'。

例如,您可以按如下方式定义包含字符串的 JSON 架构数组:

    {
      'exampleArray': {
        'type': 'array',
        'items': {
          'type': 'string'
        }
      }
    }

然后,在表单架构中应按以下格式引用:

    [
      {
        'key': 'exampleArray',
        'widget': 'array',
        'items': [
          {
            'key': 'exampleArray.x-arrayPrimitive'
          }
        ]
      },
    ]

包含对象项的数组

包含对象的数组应指定应以表单形式呈现的项类型中的每个键。

例如,假设某个 JSON 架构数组包含下列对象:

    {
      'exampleArray': {
        'type': 'array',
        'items': {
          'type': 'object',
          'properties': {
            'someArrayItemAttribute': {
              'type': 'string'
            }
          }
        }
      }
    }

创建具有 someArrayItemAttribute 属性的输入的表单数组所需的表单架构如下:

    [
      {
        'key': 'exampleArray',
        'widget': 'array',
        'items': [
          {
            'key': 'exampleArray.someArrayItemAttribute'
          }
        ]
      },
    ]

复选框

类型为 checkbox 的输入字段。

复选框

checkbox 类型的输入字段的列表。JSON 架构字段的类型为 array,并且具有 enum 属性。如需为选项提供标签,您可以指定 titleMap

扩展器

该属性与部分非常相似,但会将字段放在展开面板微件中,用户可以通过点击标题打开和关闭它们。

数值

类型为 number 的输入字段。JSON 架构中的以下属性是以下字段的验证器:minimummaximumexclusiveMinimumexclusiveMaximummultipleOf

密码

类型为 password 的输入字段。

无线通讯

类型为 radio 的输入字段。对 JSON 架构中包含 enum 列表或类型为布尔值的字段使用此属性。如需为选项提供标签,您可以指定 titleMap

课程单元

此微件将一组字段组合在一起。key 字段会被忽略。一个部分有一个必需的 items 属性,该属性是一组表单条目对象。一个区段可以有以下可选属性:titledescriptioncondition

选择

select 输入字段。对 JSON 架构中包含 enum 列表或类型为布尔值的字段使用此属性。如需为选项提供标签,您可以指定 titleMap

文字

类型为 text 的输入微件。如果 JSON 架构包含 pattern 属性,则该格式将用作正则表达式验证程序。

Textarea

文本输入输入微件。在某些情况下,系统会直接输入 JSON 来显示此微件。请参阅对象

标题地图

您可以为 checkboxesradioselect 类型的微件指定 titleMap 属性。其他微件会忽略此属性。

该属性是一个对象数组,其中包含 valuename 这两个属性。value 属性是对字段的一个枚举值的引用。name 属性是用作界面微件中相应选项的标签的文本。当微件为 radiocheckboxes 时,可添加一个可选的 description 字段,作为该单选按钮或复选框的辅助文本。

如果未提供 titleMap,则改用枚举值。

不支持的功能

表单架构目前不支持以下功能:

  • 全局选项
  • 复杂的验证消息(仅支持一条消息)
  • 验证消息插值
  • 验证消息函数
  • 自定义验证
  • 不支持的微件:actionsfieldsetradios-inlineradiobuttonshelptemplatetabtabarray
  • 不支持的选项:onChangefeedbackdisabledSuccessStatedisabledErrorStatengModelOptionshtmlClassfieldHtmlClasslabelHtmlClasscopyValueTodestroyStrategy
  • 后处理函数
  • 直播活动
  • 手动插入字段