Présentation de Form Schema

Dans Service Catalog, les configurations de Deployment Manager constituent un type de solution compatible. Pour vous aider à créer et à déployer des configurations Deployment Manager, nous vous proposons Form Schema.

Form Schema permet de disposer des composants d'interface utilisateur (UI) dans un formulaire HTML. Plus précisément, il permet aux administrateurs cloud et aux développeurs de fournir une interface utilisateur pour la saisie des paramètres lors de la création d'une instance ou d'un déploiement cloud.

Les administrateurs cloud peuvent utiliser Form Schema pour créer des formulaires permettant aux utilisateurs de personnaliser les solutions basées sur des modèles Deployment Manager avant de lancer les solutions. Par exemple, les utilisateurs peuvent sélectionner le type de machine, la taille du disque, la zone et le nombre de processeurs d'une machine virtuelle. Ces formes ressemblent aux formulaires utilisés dans Cloud Marketplace.

La capture d'écran suivante illustre un formulaire de déploiement :

Formulaire de déploiement

Alternatives à Form Schema

Form Schema est une alternative à une méthode existante de création de formulaires UI, appelée Display Metadata.

Par rapport à Display Metadata, Form Schema est plus flexible et est Open Source.

Relation avec le schéma JSON

Form Schema s'appuie sur le formulaire de schéma JSON, qui est un schéma Open Source écrit en JSON pour spécifier et valider un ensemble de paramètres.

Form Schema référence les champs du schéma JSON et hérite des attributs de celui-ci.

Vous pouvez inclure Form Schema dans le schéma JSON en incluant un tableau d'objets form entry dans l'attribut form, comme illustré dans l'exemple suivant :

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

Spécifier une instance de Form Schema

Vous pouvez spécifier des instances de Form Schema au format YAML.

Vous créez un fichier de schéma qui expose les widgets d'interface utilisateur dans l'ordre dans lequel ils doivent apparaître dans l'interface utilisateur. Ce fichier de schéma contient l'extension de fichier .py ou .jinja, comme décrit dans la documentation de Deployment Manager.

Vous ajoutez ensuite les fichiers à une archive ZIP du modèle Deployment Manager, puis importez cette archive ZIP.

Intégration de Form Schema dans le workflow Service Catalog

Les administrateurs cloud utilisent Form Schema avec Service Catalog comme suit :

  1. Créer un modèle Deployment Manager
  2. Spécifiez un schéma JSON pour définir ou valider les champs de saisie pouvant être utilisés dans l'interface utilisateur de la configuration du modèle Deployment Manager.
  3. Dans Form Schema, définissez les champs à inclure pour une solution particulière et l'ordre dans lequel ces champs doivent apparaître. En plus du tri, vous pouvez utiliser Form Schema pour fournir un texte convivial pour les champs énumérés, tels que des listes déroulantes et des champs de groupe associés à des titres de section.

Liste de formulaires

Tableau d'objets form entry. Chaque objet représente un composant d'interface utilisateur dans un formulaire. Vous devez spécifier des champs dans l'ordre dans lequel vous souhaitez les afficher dans le formulaire, quel que soit leur emplacement dans le schéma.

Entrée de formulaire

Une entrée de formulaire spécifie l'apparence d'un composant d'interface dans un formulaire. Il peut s'agir d'une chaîne qui spécifie la clé d'un champ du schéma JSON, ou d'un objet. Lorsqu'une entrée de formulaire est une chaîne, les valeurs par défaut de l'apparence sont héritées de l'entrée de schéma JSON.

Lorsqu'une entrée de formulaire est un objet, l'attribut key fait référence à l'entrée de schéma JSON. Utilisez un point . pour séparer les nœuds pour une valeur imbriquée. Par exemple, utilisez name.first pour référencer un champ first dans un objet name. Tous les autres champs sont facultatifs et, le cas échéant, héritent d'une valeur par défaut du schéma JSON.

Champs
key*String
Spécifie la définition de champ dans le schéma JSON.
widgetWidget
Spécifie le widget d'interface utilisateur à utiliser pour ce champ. Valeur par défaut : basée sur le mappage du type de champ.
titleString
Titre du champ. Hérite de title du schéma.
notitleBoolean
Indique si le titre doit être masqué. Valeur par défaut : "false".
descriptionString
Utilisé comme indice ou info-bulle pour le champ. Hérite de description du schéma.
validationMessageString
Message à afficher lorsque le champ n'est pas valide.
placeholderString
Espace réservé pour le champ. Remarque : Material Design utilise title comme espace réservé à la place.
readonlyBoolean
Indique si le champ est en lecture seule. Hérite de readonly du schéma.
conditionString
Expression logique qui détermine si le champ est affiché ou non.
titleMapTitle map
Fournit des libellés textuels pour les options des widgets checkboxes, radio et select.

* obligatoire.

Traitement spécial des types

Objet

Pour le type object, le champ additionalProperties indique si des propriétés supplémentaires peuvent être présentes ou non. Le champ peut avoir la valeur "true" (autoriser tout), "false" (aucune propriété supplémentaire autorisée) ou un schéma JSON qui limite les propriétés supplémentaires autorisées. Lorsque la valeur est "false" ou manquante, des widgets sont affichés pour les champs répertoriés dans l'attribut items. Pour les autres valeurs ("true" ou schéma JSON), une zone de texte s'affiche pour la saisie d'une valeur JSON.

Mappage type à widget

Si aucun widget n'est spécifié dans Form Schema, une valeur par défaut est utilisée en fonction du type de schéma JSON du champ, comme suit :

Type de schéma Widget Form Schema
chaîne texte
nombre nombre
Entier nombre
boolean case à cocher
objet jeu de champs
chaîne + énumération radio (3 réponses maximum)
chaîne + énumération select (4 options ou plus)
tableau + énumération cases à cocher
tableau tableau

Widget

Un widget est spécifié sous forme de chaîne faisant référence à l'une des structures de données suivantes.

Array

Liste dans laquelle il est possible d'ajouter, de supprimer et de réorganiser des lignes. Le schéma JSON permet à la propriété items du type array d'être un schéma ou une liste de schémas. Cette liste n'est pas compatible avec le Form Schema.

Tableaux contenant des éléments primitifs

Comme le schéma du formulaire nécessite que toutes les entrées du formulaire aient une clé et que les tableaux contenant des éléments primitifs (non objets) ne possèdent pas de clé les référençant, le formulaire doit référencer l'entrée de tableau primitif à l'aide d'un mot clé réservé, "x-googleProperty".

Par exemple, vous définiriez un tableau de schéma JSON contenant des chaînes comme suit :

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

Celui-ci serait alors référencé dans le schéma du formulaire comme suit :

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

Tableaux contenant des éléments d'objet

Les tableaux contenant des objets doivent spécifier chaque clé du type d'élément qui doit s'afficher dans le formulaire.

Prenons l'exemple d'un tableau de schéma JSON contenant un objet :

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

Le schéma de formulaire requis pour créer un tableau de formulaire avec une entrée pour l'attribut someArrayItemAttribute est le suivant :

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

Case à cocher

Champ de saisie de type checkbox.

Cases à cocher

Liste de champs de saisie de type checkbox. Le champ de schéma JSON doit être de type array et comporter un attribut enum. Pour fournir des libellés pour les options, vous pouvez spécifier un titleMap.

Développement

Très similaire à une section, mais place les champs dans un widget de panneau d'expansion que les utilisateurs peuvent ouvrir et fermer en cliquant sur le titre.

Numéro

Champ de saisie de type number. Les attributs suivants du schéma JSON sont des validateurs pour le champ : minimum, maximum, exclusiveMinimum, exclusiveMaximum, multipleOf.

Mot de passe

Champ de saisie de type password.

Signal radio

Champ de saisie de type radio. Utilisez ce champ pour les champs ayant une liste enum dans le schéma JSON ou qui sont de type booléen. Pour fournir des libellés pour les options, vous pouvez spécifier un titleMap.

Section

Ce widget regroupe un ensemble de champs. Le champ key est ignoré. Une section possède un attribut items obligatoire, qui est un tableau d'objets de saisie de formulaire. Une section peut comporter les attributs facultatifs suivants : title, description, condition.

Sélectionner

Champ de saisie select. Utilisez ce champ pour les champs qui ont une liste enum dans le schéma JSON ou qui sont de type booléen. Pour fournir des libellés pour les options, vous pouvez spécifier un titleMap.

Texte

Widget de saisie de type text. Si le schéma JSON contient un attribut pattern, le modèle est utilisé comme validateur d'expression régulière.

Zone de texte

Widget de saisie de zone de texte Ce widget s'affiche dans certains cas pour la saisie directe de JSON. Voir objet.

Carte des titres

L'attribut titleMap peut être spécifié pour les widgets de type checkboxes, radio et select. Il est ignoré dans les autres widgets.

L'attribut est un tableau d'objets contenant deux attributs, value et name. L'attribut value est une référence à une valeur d'énumération pour le champ. L'attribut name correspond au texte à utiliser comme libellé pour l'option correspondante dans le widget d'interface utilisateur. Lorsque le widget est radio ou checkboxes, un champ description facultatif est ajouté en tant que sous-texte pour cette case d'option ou case à cocher.

Si aucun titleMap n'est fourni, les valeurs d'énumération sont utilisées à la place.

Fonctions non compatibles

Les fonctions suivantes ne sont actuellement pas compatibles avec Form Schema :

  • Options globales
  • Messages de validation complexes (un seul message est accepté)
  • Interpolation de messages de validation
  • Fonctions de message de validation
  • Validation personnalisée
  • Widgets non compatibles : actions, fieldset, radios-inline, radiobuttons, help, template, tab, tabarray
  • Options non compatibles : onChange, feedback, disabledSuccessState, disabledErrorState, ngModelOptions, htmlClass, fieldHtmlClass, labelHtmlClass, copyValueTo, destroyStrategy
  • Fonction post-traitement
  • Événements
  • Insertion manuelle de champ