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 搭配使用:
- 创建 Deployment Manager 模板。
- 指定 JSON 架构,以定义或验证可以在 Deployment Manager 模板配置界面中使用哪些输入字段。
- 在 Form Schema 中,为特定解决方案定义包含哪些字段以及这些字段的显示顺序。除了排序之外,您还可以使用 Form Schema 为枚举字段(例如下拉列表)和字段分组提供方便用户使用的文本。
表单列表
一组 form entry
对象。每个对象都以表单的形式表示界面组件。您应该按照您希望字段在表单中显示的顺序指定这些字段,无论它们在架构中的位置如何。
表单条目
表单条目用于指定表单中界面组件的外观。它可以是一个字符串,表示 JSON 架构中字段的键,或对象。 当表单条目是字符串时,外观的默认值会从 JSON 架构条目继承。
当表单条目是对象时,key
属性是指 JSON 架构条目。使用点 .
分隔嵌套值的节点。例如,使用 name.first
引用 name
对象内的 first
字段。其他所有字段均为可选字段,如果指定了这些字段,则从 JSON 架构继承默认值。
领域 | |
---|---|
key* | String 指定 JSON 架构中的字段定义。 |
widget | Widget 指定要用于此字段的界面微件。默认值:基于映射字段类型。 |
title | String 字段的标题。从架构继承 title 。 |
notitle | Boolean 是否隐藏标题。默认值:false。 |
description | String 用作字段的提示或提示。从架构继承 description 。 |
validationMessage | String 字段无效时要显示的消息。 |
placeholder | String 字段的占位符。注意:Material Design 会使用 title 作为占位符。 |
readonly | Boolean 字段是否是只读的。从架构继承 readonly 。 |
condition | String 一种逻辑表达式,用于确定是否显示相应字段。 |
titleMap | Title map 为 checkboxes 、radio 和 select 微件中的选项提供文本标签。 |
* 必填
针对类型的特殊处理
对象
对于类型 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 架构中的以下属性是以下字段的验证器:minimum
、maximum
、exclusiveMinimum
、exclusiveMaximum
、multipleOf
。
密码
类型为 password
的输入字段。
无线通讯
类型为 radio
的输入字段。对 JSON 架构中包含 enum
列表或类型为布尔值的字段使用此属性。如需为选项提供标签,您可以指定 titleMap。
课程单元
此微件将一组字段组合在一起。key
字段会被忽略。一个部分有一个必需的 items
属性,该属性是一组表单条目对象。一个区段可以有以下可选属性:title
、description
、condition
。
选择
select
输入字段。对 JSON 架构中包含 enum
列表或类型为布尔值的字段使用此属性。如需为选项提供标签,您可以指定 titleMap。
文字
类型为 text
的输入微件。如果 JSON 架构包含 pattern
属性,则该格式将用作正则表达式验证程序。
Textarea
文本输入输入微件。在某些情况下,系统会直接输入 JSON 来显示此微件。请参阅对象。
标题地图
您可以为 checkboxes
、radio
和 select
类型的微件指定 titleMap
属性。其他微件会忽略此属性。
该属性是一个对象数组,其中包含 value
和 name
这两个属性。value
属性是对字段的一个枚举值的引用。name
属性是用作界面微件中相应选项的标签的文本。当微件为 radio
或 checkboxes
时,可添加一个可选的 description
字段,作为该单选按钮或复选框的辅助文本。
如果未提供 titleMap
,则改用枚举值。
不支持的功能
表单架构目前不支持以下功能:
- 全局选项
- 复杂的验证消息(仅支持一条消息)
- 验证消息插值
- 验证消息函数
- 自定义验证
- 不支持的微件:
actions
、fieldset
、radios-inline
、radiobuttons
、help
、template
、tab
、tabarray
- 不支持的选项:
onChange
、feedback
、disabledSuccessState
、disabledErrorState
、ngModelOptions
、htmlClass
、fieldHtmlClass
、labelHtmlClass
、copyValueTo
、destroyStrategy
- 后处理函数
- 直播活动
- 手动插入字段