Descripción general del esquema de formularios

En el catálogo de servicios, un tipo de solución compatible son las opciones de configuración de Deployment Manager. Para ayudarte a crear e implementar opciones de configuración de Deployment Manager, tenemos el esquema de formularios.

El esquema de formulario se usa para distribuir los componentes de la interfaz de usuario (IU) en un formulario HTML. Específicamente, permite a los administradores y desarrolladores de la nube proporcionar una IU para ingresar parámetros cuando se crean una instancia nueva o una implementación en la nube.

Los administradores de Cloud usan el esquema de formularios para crear formularios que les permitan a los usuarios personalizar las soluciones basadas en plantillas de Deployment Manager antes de iniciar las soluciones. Por ejemplo, los usuarios pueden seleccionar el tipo de máquina, el tamaño del disco, la zona y la cantidad de CPU que tendrá una máquina virtual. Estos formularios tienen el aspecto de los formularios que se usan en Cloud Marketplace.

En la siguiente captura de pantalla, se muestra cómo se ve un formulario de implementación:

Formulario de implementación

Alternativas al esquema del formulario

El esquema de formulario es una alternativa a un método existente para crear formularios de IU, llamado metadatos en la pantalla.

En comparación con los metadatos en la pantalla, el esquema de formularios mejoró la flexibilidad y es de código abierto.

Relación con el esquema JSON

El esquema de formulario se basa en formulario de esquema de JSON, un esquema de código abierto escrito en JSON para especificar y validar un conjunto de parámetros.

El esquema de formulario hace referencia a los campos en el esquema JSON y hereda sus atributos.

Puedes incluir un esquema de formulario dentro del esquema de JSON si incluyes un array de objetos form entry dentro del 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 esquema del formulario

Puedes especificar instancias de esquema de formulario en formato YAML.

Crea un archivo de esquema que coloque los widgets de la IU en el orden en que deben aparecer en la IU. Este archivo de esquema tiene la extensión de archivo .py o .jinja, como se describe en la documentación de Deployment Manager.

Luego, agrega los archivos a un archivo ZIP de la plantilla de Deployment Manager y sube el archivo ZIP.

Cómo se ajusta el esquema del formulario en el flujo de trabajo del catálogo de servicios

Los administradores de la nube hacen uso del esquema de formularios 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 IU para la configuración de la plantilla de Deployment Manager.
  3. Define en el esquema de formulario qué campos incluir para una solución en particular y el orden en el que deben aparecer esos campos. Además del orden, puedes usar el esquema del formulario a fin de proporcionar texto fácil de usar para los campos enumerados, como menús desplegables y agrupar los campos con títulos de sección.

Lista de formularios

Un array de objetos form entry. Cada objeto representa un componente de IU en un formulario. Debes especificar campos en el orden en que quieres que aparezcan en el formulario, sin importar su ubicación en el esquema.

Ingreso de datos en formularios

Una entrada de formulario especifica la apariencia de un componente de IU en un formulario. Puede ser una string, en la que especifica la clave para un campo en el esquema de JSON o un objeto. Cuando una entrada de formulario es una string, los valores predeterminados para la apariencia se heredan de la entrada del esquema en JSON.

Cuando una entrada de formulario es un objeto, el atributo key se refiere a la entrada del esquema en 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. Todos los demás campos son opcionales y, cuando se especifica, heredan un valor predeterminado del esquema de JSON.

Campos
key*String
Especifica la definición de campo en el esquema JSON.
widgetWidget
Especifica el widget de la IU que se usa para este campo. Predeterminado: Se basa en la asignación del tipo de campo.
titleString
Título del campo. Hereda title del esquema.
notitleBoolean
Determina si se ocultará el título. Valor predeterminado: false.
descriptionString
Se usa como una sugerencia o información sobre la herramienta para el campo. Hereda description del esquema.
validationMessageString
Mensaje para mostrar cuando el campo no es válido.
placeholderString
Marcador de posición para el campo. Nota: Material Design usa title como marcador de posición.
readonlyBoolean
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 en los widgets checkboxes, radio y select.

* bligatorio

Manejo especial para tipos

Objeto

Para el tipo object, el campo additionalProperties define si pueden presentarse o no propiedades adicionales. El campo puede tener un valor verdadero (permitir algo), falso (no se permiten propiedades adicionales) o algún esquema JSON que restringe las propiedades adicionales permitidas. Cuando el valor es falso o no está presente, se muestran los widgets para los campos enumerados en el atributo items. Para otros valores (esquema verdadero o JSON), se muestra un área de cierre para ingresar un valor JSON.

Mapeo type-to-widget

Si no se especifica ningún widget en el esquema de formulario, se usa un valor predeterminado según el tipo de esquema JSON del campo, de la siguiente manera:

Tipo de esquema Widget de formulario de esquema
string texto
número número
número entero número
boolean Casilla de verificación
objeto fieldset
string + enum radio (3 opciones o menos)
string + enum selección (4 o más opciones)
array + enum Casillas de verificación
array array

Widget

Un widget se especifica como una string que hace referencia a una de las siguientes estructuras de datos.

Matriz

Una lista en la que se pueden agregar, 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 formularios.

Arrays con elementos primitivos

Debido a que el esquema de formularios requiere que todas las entradas de formulario tengan una clave y los arreglos que contienen elementos básicos (que no son de objeto) no tienen una clave para hacer referencia a ellas, el formulario debe hacer referencia a la entrada básica del arreglo mediante una palabra clave reservada: “x-googleProperty”.

Por ejemplo, debes definir un array de esquemas JSON que contenga strings de la siguiente manera:

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

Entonces, se debe hacer referencia a ella en el esquema del formulario de la siguiente manera:

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

Arrays con elementos de objeto

Los arreglos que contienen objetos deben especificar cada clave en el tipo de elemento que se debe renderizar en el formulario.

Por ejemplo, considera un array de esquemas JSON que contiene un objeto:

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

El esquema del formulario requerido a fin de crear un arreglo de formularios con una entrada para el atributo someArrayItemAttribute sería el siguiente:

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

Casilla de verificación

Un campo de entrada con el tipo checkbox.

Casillas de verificación

Una lista de campos de entrada de tipo checkbox. El campo del esquema de JSON debe ser del 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 si hacen clic en el título.

Número

Un campo de entrada con el tipo number. Los siguientes atributos del esquema de JSON son validadores para el campo: minimum, maximum, exclusiveMinimum, exclusiveMaximum y multipleOf.

Contraseña

Un campo de entrada con el tipo password.

Radio

Un campo de entrada con el tipo radio. Usa esto para los campos que tienen una lista enum en el esquema JSON o son 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 un array de objetos de entrada de formulario. Una sección puede tener los siguientes atributos opcionales: title, description, condition.

Seleccionar

Un campo de entrada select. Usa esto para los campos que tienen una lista enum en el esquema JSON o son de tipo booleano. Para proporcionar etiquetas a las opciones, puedes especificar un titleMap.

Texto

Un widget de entrada con el tipo text. Si el esquema JSON contiene un atributo pattern, el patrón se usa como validador de regex.

Textarea

Un widget de entrada de área de texto. Este widget se muestra en algunas situaciones para ingresar directamente JSON. Consulta el objeto.

Title map

Se puede especificar el atributo titleMap para los widgets de tipo checkboxes, radio y select. Se ignora en otros widgets.

El atributo es un array de objetos que contienen dos atributos, value y name. El atributo value es una referencia a un valor de enumeración para el campo. El atributo name es texto que se usa como etiqueta para la opción correspondiente en el widget de la IU. Cuando el widget es radio o checkboxes, se agrega un campo description opcional como subtexto para ese botón de selección o casilla de verificación.

Si no se proporciona un titleMap, en su lugar se usan los valores de enumeración.

Características no compatibles

Las siguientes funciones actualmente no se admiten en el esquema de formularios:

  • 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
  • Estos widgets no son compatibles: actions, fieldset, radios-inline, radiobuttons, help, template, tab y tabarray
  • No se admiten estas opciones: onChange, feedback, disabledSuccessState, disabledErrorState, ngModelOptions, htmlClass, fieldHtmlClass y labelHtmlClass. copyValueTo, destroyStrategy
  • Función posterior al proceso
  • Eventos
  • Inserción manual de campos