Información general sobre Form Schema
En el catálogo de servicios, uno de los tipos de soluciones admitidas son las configuraciones de Deployment Manager. Para ayudarte a crear e implementar configuraciones de Deployment Manager, tenemos el esquema de formulario.
El esquema de formulario se usa para diseñar los componentes de la interfaz de usuario (IU) en un formulario HTML. En concreto, permite a los administradores y desarrolladores de la nube proporcionar una interfaz de usuario para introducir parámetros al crear una instancia o un despliegue en la nube.
Los administradores de Cloud usan el esquema de formulario para crear formularios que permitan a los usuarios personalizar las soluciones basadas en plantillas de Deployment Manager antes de lanzar las soluciones. Por ejemplo, los usuarios pueden seleccionar el tipo de máquina, el tamaño del disco, la zona y el número de CPUs que tendrá una máquina virtual. Estos formularios son similares a los que se usan en Cloud Marketplace.
En la siguiente captura de pantalla se muestra el aspecto de un formulario de implementación:

Alternativas a Form Schema
Form Schema es una alternativa a la forma actual de crear formularios de interfaz de usuario, llamada Display Metadata.
En comparación con los metadatos de visualización, el esquema de formulario tiene una mayor flexibilidad y es de código abierto.
Relación con JSON Schema
Form Schema se basa en JSON schema form, un esquema de código abierto escrito en JSON para especificar y validar un conjunto de parámetros.
Form Schema hace referencia a los campos del esquema JSON y hereda atributos de él.
Puedes incluir un esquema de formulario en el esquema JSON incluyendo un array de objetos form entry
en el atributo form
, como se muestra en el siguiente ejemplo:
{ "$schema": "http://json-schema.org/draft-04/schema#", "type": "object", "properties": {...} "form": [ ...Form List goes here... ] }
Cómo especificar una instancia de Form Schema
Puedes especificar instancias de Form Schema en formato YAML.
Crea un archivo de esquema que defina los widgets de la interfaz de usuario en el orden en el que deben aparecer. Este archivo de esquema tiene la extensión .py o .jinja, tal como se describe en la documentación de Deployment Manager.
A continuación, añade los archivos a un archivo ZIP de plantilla de Deployment Manager y sube el archivo ZIP.
Cómo encaja el esquema de formulario en el flujo de trabajo del catálogo de servicios
Los administradores de la nube usan el esquema de formulario con el catálogo de servicios de la siguiente manera:
- Crea una plantilla de Deployment Manager.
- Especifica un esquema JSON para definir o validar qué campos de entrada se pueden usar en la interfaz de usuario para la configuración de la plantilla de Deployment Manager.
- Define en el esquema del formulario los campos que se deben incluir en una solución concreta y el orden en el que deben aparecer. Además de ordenar los campos, puedes usar el esquema del formulario para proporcionar texto intuitivo para los campos enumerados, como los desplegables, y agrupar campos con títulos de sección.
Lista de formularios
Matriz de objetos form entry
. Cada objeto representa un componente de interfaz de usuario en un formulario. Debes especificar los campos en el orden en el que quieras que aparezcan en el formulario, independientemente de su ubicación en el esquema.
Entrada de formulario
Una entrada de formulario especifica el aspecto de un componente de interfaz de usuario en un formulario. Puede ser una cadena, en la que se especifica la clave de un campo del esquema JSON, o un objeto. Cuando una entrada de formulario es una cadena, los valores predeterminados de la apariencia se heredan de la entrada del esquema JSON.
Cuando una entrada de formulario es un objeto, el atributo key
hace referencia a la entrada del esquema JSON. Usa un punto .
para separar los nodos de un valor anidado. Por ejemplo, usa name.first
para hacer referencia a un campo first
dentro de un objeto name
. El resto de los campos son opcionales y, si se especifican, heredan un valor predeterminado del esquema JSON.
Campos | |
---|---|
key* | String Especifica la definición del campo en el esquema JSON. |
widget | Widget Especifica el widget de interfaz de usuario que se va a usar en este campo. Valor predeterminado: basado en la asignación del tipo de campo. |
title | String Título del campo. Hereda title del esquema. |
notitle | Boolean Indica si se debe ocultar el título. Valor predeterminado: false. |
description | String Se usa como pista o descripción emergente del campo. Hereda description del esquema. |
validationMessage | String Mensaje que se muestra cuando el campo no es válido. |
placeholder | String Marcador de posición del campo. Nota: Material Design usa title como marcador de posición. |
readonly | Boolean Indica si el campo es de solo lectura. Hereda readonly del esquema. |
condition | String Una expresión lógica que determina si se muestra el campo. |
titleMap | Title map Proporciona etiquetas de texto para las opciones de los widgets checkboxes , radio y select . |
* Obligatorio
Gestión especial de tipos
Objeto
En el caso del tipo object
, el campo additionalProperties
define si se pueden incluir propiedades adicionales. El campo puede tener el valor true (permite cualquier valor), false (no se permiten propiedades adicionales) o un esquema JSON que restrinja las propiedades adicionales permitidas. Si el valor es falso o no está presente, se muestran los widgets de los campos que se indican en el atributo items
. En el caso de otros valores (true o esquema JSON), se muestra un área de texto para introducir un valor JSON.
Asignación de tipos a widgets
Si no se especifica ningún widget en el esquema del formulario, se usará un valor predeterminado en función del tipo de esquema JSON del campo, como se indica a continuación:
Tipo de esquema | Widget de formulario de esquema |
---|---|
cadena | texto |
número | number |
entero | number |
booleano | casilla |
objeto | fieldset |
cadena + enum | Radio (3 o menos opciones) |
cadena + enum | Seleccionar (4 o más opciones) |
matriz + enumeración | casillas |
array | array |
Widget
Un widget se especifica como una cadena que hace referencia a una de las siguientes estructuras de datos.
Matriz
Una lista en la que se pueden añadir, quitar y reordenar filas. El esquema JSON permite que la propiedad items
del tipo array
sea un esquema o una lista de esquemas. La lista no es compatible con el esquema de formulario.
Arrays con elementos primitivos
Como el esquema del formulario requiere que todas las entradas del formulario tengan una clave y las matrices que contienen elementos primitivos (no objetos) no tienen una clave para hacer referencia a ellos, el formulario debe hacer referencia a la entrada de la matriz primitiva mediante una palabra clave reservada: "x-googleProperty".
Por ejemplo, definirías una matriz de esquemas JSON que contenga cadenas de la siguiente manera:
{ 'exampleArray': { 'type': 'array', 'items': { 'type': 'string' } } }
Después, se debe hacer referencia a él en el esquema del formulario de la siguiente manera:
[ { 'key': 'exampleArray', 'widget': 'array', 'items': [ { 'key': 'exampleArray.x-arrayPrimitive' } ] }, ]
Arrays con elementos de objeto
Las matrices que contienen objetos deben especificar cada clave del tipo de elemento que se debe renderizar en el formulario.
Por ejemplo, supongamos que tenemos una matriz de esquema JSON que contiene un objeto:
{ 'exampleArray': { 'type': 'array', 'items': { 'type': 'object', 'properties': { 'someArrayItemAttribute': { 'type': 'string' } } } } }
El esquema de formulario necesario para crear una matriz de formularios con una entrada para el atributo someArrayItemAttribute
sería el siguiente:
[ { 'key': 'exampleArray', 'widget': 'array', 'items': [ { 'key': 'exampleArray.someArrayItemAttribute' } ] }, ]
Casilla
Campo de entrada de tipo checkbox
.
Casillas
Lista de campos de entrada de tipo checkbox
. El campo JSON Schema debe ser de tipo array
y tener un atributo enum
. Para proporcionar etiquetas a las opciones, puedes especificar un titleMap.
Expansor
Es muy similar a una sección, pero coloca los campos dentro de un widget de panel de expansión que los usuarios pueden abrir y cerrar haciendo clic en el título.
Número
Campo de entrada de tipo number
. Los siguientes atributos del esquema JSON son validadores del campo: minimum
, maximum
, exclusiveMinimum
, exclusiveMaximum
y multipleOf
.
Contraseña
Campo de entrada de tipo password
.
Radio
Campo de entrada de tipo radio
. Úsalo en los campos que tengan una enum
lista
en el esquema JSON o que sean de tipo booleano. Para proporcionar etiquetas a las opciones, puedes especificar un titleMap.
Sección
Este widget agrupa un conjunto de campos. El campo key
se ignora. Una sección tiene un atributo items
obligatorio, que es una matriz de objetos form entry. Una sección puede tener los siguientes atributos opcionales: title
, description
y condition
.
Seleccionar
Campo de entrada de select
. Úsalo en los campos que tengan una lista enum
en el esquema JSON o que sean de tipo booleano. Para proporcionar etiquetas a las opciones, puedes especificar un titleMap.
Texto
Un widget de entrada de tipo text
. Si el esquema JSON contiene un atributo pattern
, el patrón se usa como validador de regex.
Área de texto
Un widget de entrada de área de texto. Este widget se muestra en algunas situaciones para introducir JSON directamente. Consulta objeto.
Mapa de títulos
El atributo titleMap
se puede especificar en widgets de tipo checkboxes
, radio
y select
. Se ignora en otros widgets.
El atributo es una matriz de objetos que contienen dos atributos, value
y name
. El atributo value
es una referencia a un valor de enumeración del campo.
El atributo name
es el texto que se usará como etiqueta de la opción correspondiente en el widget de la interfaz de usuario. Cuando el widget es radio
o checkboxes
, se añade un campo description
opcional como subtítulo de ese botón de radio o casilla.
Si no se proporciona ningún titleMap
, se utilizan los valores de enumeración.
Funciones no compatibles
Las siguientes funciones no están disponibles actualmente en el esquema de formulario:
- Opciones globales
- Mensajes de validación complejos (solo se admite un mensaje)
- Interpolación de mensajes de validación
- Funciones de mensajes de validación
- Validación personalizada
- Widgets no admitidos:
actions
,fieldset
,radios-inline
,radiobuttons
,help
,template
,tab
ytabarray
- Opciones no admitidas:
onChange
,feedback
,disabledSuccessState
,disabledErrorState
,ngModelOptions
,htmlClass
,fieldHtmlClass
,labelHtmlClass
,copyValueTo
ydestroyStrategy
- Función de posprocesamiento
- Eventos
- Insertar campos manualmente