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:

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:

  1. Crea una plantilla de Deployment Manager.
  2. 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.
  3. 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.
widgetWidget
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.
titleString
Título del campo. Hereda title del esquema.
notitleBoolean
Indica si se debe ocultar el título. Valor predeterminado: false.
descriptionString
Se usa como pista o descripción emergente del campo. Hereda description del esquema.
validationMessageString
Mensaje que se muestra cuando el campo no es válido.
placeholderString
Marcador de posición del campo. Nota: Material Design usa title como marcador de posición.
readonlyBoolean
Indica si el campo es de solo lectura. Hereda readonly del esquema.
conditionString
Una expresión lógica que determina si se muestra el campo.
titleMapTitle 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 y tabarray
  • Opciones no admitidas: onChange, feedback, disabledSuccessState, disabledErrorState, ngModelOptions, htmlClass, fieldHtmlClass, labelHtmlClass, copyValueTo y destroyStrategy
  • Función de posprocesamiento
  • Eventos
  • Insertar campos manualmente