Formularschema – Übersicht

In Service Catalog werden verschiedene Deployment Manager-Konfigurationen unterstützt. Zum Erstellen und Bereitstellen von Deployment Manager-Konfigurationen gibt es ein Formularschema.

Das Formularschema wird verwendet, um Komponenten der Benutzeroberfläche in einem HTML-Formular darzustellen. Insbesondere bietet es Cloud-Administratoren und Entwicklern eine Benutzeroberfläche zur Eingabe von Parametern beim Erstellen einer neuen Instanz oder Cloud-Bereitstellung.

Cloud-Administratoren nutzen das Formularschema, um Formulare zu erstellen, über die Nutzer die auf Vorlagen basierenden Lösungen von Deployment Manager anpassen können, bevor sie die Lösungen starten. Nutzer können beispielsweise den Maschinentyp, die Laufwerksgröße, die Zone und die Anzahl der CPUs auswählen, die eine virtuelle Maschine haben wird. Diese Formulare sehen wie die Formulare aus, die in Cloud Marketplace verwendet werden.

Der folgende Screenshot zeigt ein Bereitstellungsformular:

Grafik: Bereitstellungsformular

Alternativen zum Formularschema

Das Formularschema ist eine Alternative zu einer vorhandenen Methode zum Erstellen von UI-Formularen, die als „Anzeigemetadaten“ bezeichnet werden.

Im Vergleich dazu hat das Formularschema eine höhere Flexibilität und ist Open Source.

Beziehung zum JSON-Schema

Das Formularschema baut auf dem JSON-Formularschema auf. Dies ist ein Open-Source-Schema, das in JSON geschrieben wurde, um eine Gruppe von Parametern anzugeben und zu validieren.

Formularschema verweist auf Felder im JSON-Schema und übernimmt Attribute daraus.

Sie können das Formularschema in das JSON-Schema aufnehmen. Fügen Sie dazu ein Array von form entry-Objekten in das Attribut form ein, wie im folgenden Beispiel gezeigt:

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

Formularschema-Instanz angeben

Sie können Formularschema-Instanzen im YAML-Format angeben.

Sie erstellen eine Schemadatei, in der die UI-Widgets in der Reihenfolge angeordnet sind, in der sie in der UI angezeigt werden sollen. Diese Schemadatei hat die Dateierweiterung .py oder .jinja, wie in der Deployment Manager-Dokumentation beschrieben.

Anschließend fügen Sie die Dateien einem ZIP-Archiv der Deployment Manager-Vorlage hinzu und laden das ZIP-Archiv hoch.

Wie Formularschema in den Service Catalog-Workflow integriert werden kann

Cloud-Administratoren nutzen Formularschema mit Service Catalog so:

  1. Erstellen Sie eine Deployment Manager-Vorlage.
  2. Geben Sie ein JSON-Schema an, um festzulegen, welche Eingabefelder in der UI für die Konfiguration der Deployment Manager-Vorlage verwendet werden können.
  3. Definieren Sie im Formularschema, welche Felder für eine bestimmte Lösung enthalten sein und in welcher Reihenfolge diese Felder erscheinen sollen. Neben der Sortierung können Sie Formularschema auch verwenden, um nutzerfreundlichen Text für Aufzählungsfelder anzugeben, z. B. Drop-down-Listen und Gruppenfelder sowie Abschnittstitel.

Formularliste

Ein Array von form entry-Objekten. Jedes Objekt stellt eine UI-Komponente in einem Format dar. Geben Sie Felder in der Reihenfolge an, in der sie im Formular angezeigt werden sollen, unabhängig von ihrer Position im Schema.

Formulareingabe

In einem Formulareintrag wird das Aussehen einer UI-Komponente in einem Formular angegeben. Dies kann ein String sein, der den Schlüssel für ein Feld im JSON-Schema oder ein Objekt angibt. Wenn ein Formulareintrag ein String ist, werden Standardwerte für die Darstellung vom JSON-Schemaeintrag übernommen.

Wenn ein Formulareintrag ein Objekt ist, bezieht sich das Attribut key auf den JSON-Schemaeintrag. Verwenden Sie einen Punkt ., um Knoten für einen verschachtelten Wert zu trennen. Verwenden Sie beispielsweise name.first, um auf ein first-Feld innerhalb eines name-Objekts zu verweisen. Alle anderen Felder sind optional. Beim Festlegen wird dafür ein Standardwert aus dem JSON-Schema übernommen.

Felder
key*String
Gibt die Felddefinition im JSON-Schema an.
widgetWidget
Gibt das UI-Widget an, das für dieses Feld verwendet werden soll. Standardwert: basiert auf der Zuordnung des Feldtyps.
titleString
Titel für das Feld. Übernimmt title vom Schema.
notitleBoolean
Gibt an, ob der Titel ausgeblendet werden soll. Standardeinstellung: false.
descriptionString
Wird als Hinweis oder Kurzinfo für das Feld verwendet. Übernimmt description vom Schema.
validationMessageString
Nachricht, die angezeigt wird, wenn das Feld ungültig ist.
placeholderString
Platzhalter für das Feld. Hinweis: Material Design verwendet stattdessen title als Platzhalter.
readonlyBoolean
Gibt an, ob das Feld schreibgeschützt ist. Übernimmt readonly vom Schema.
conditionString
Ein logischer Ausdruck, der bestimmt, ob das Feld angezeigt wird.
titleMapTitle map
Stellt Textlabels für die Optionen in den Widgets checkboxes, radio und select bereit.

* erforderlich

Spezielle Handhabung für Typen

Object

Für den Typ object definiert das Feld additionalProperties, ob zusätzliche Attribute vorhanden sein können. Das Feld kann den Wert „true“ (alle Attribute zulassen), „false“ (keine zusätzlichen Attribute zulässig) oder ein JSON-Schema haben, das die zusätzlich zulässigen Attribute einschränkt. Wenn der Wert „false“ oder nicht vorhanden ist, werden Widgets für die im Attribut items aufgeführten Felder angezeigt. Bei anderen Werten (true oder JSON-Schema) wird ein Textbereich für die Eingabe eines JSON-Werts angezeigt.

Typ-to-widget-Zuordnung

Wenn im Formularschema kein Widget angegeben ist, wird basierend auf dem JSON-Schematyp des Felds ein Standardwert verwendet:

Schematyp Schemaformular-Widget
string text
Zahl number
integer number
boolean Kästchen
Objekt fieldset
String + Enum radio (maximal drei Optionen)
String + Enum select (vier oder mehr Optionen)
Array + Enum Kästchen
array Array

Widget

Ein Widget wird als String angegeben, der auf eine der folgenden Datenstrukturen verweist.

Array

Eine Liste, in der Zeilen hinzugefügt, entfernt und neu angeordnet werden können. Im JSON-Schema kann das Attribut items für den Typ array entweder ein Schema oder eine Liste mit Schemas sein. Diese Liste wird vom Formularschema nicht unterstützt.

Arrays mit einfachen Elementen

Da das Formularschema voraussetzt, dass alle Formulareinträge einen Schlüssel haben müssen, und Arrays, die einfache Elemente (keine Objekte) enthalten, für die kein Schlüssel zum Verweis vorhanden ist, sollte das Formular auf den primitiven Arrayeintrag mit einem reservierten Suchbegriff verweisen: "x-googleProperty".

So würden Sie beispielsweise ein JSON-Schema-Array mit Strings definieren:

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

Muss dann im Formularschema so referenziert werden:

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

Arrays mit Objektelementen

In Arrays, die Objekte enthalten, sollte jeder Schlüssel im Elementtyp angegeben werden, der im Formular dargestellt werden soll.

Erwägen Sie beispielsweise ein JSON-Schema-Array, das ein Objekt enthält:

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

Das für die Erstellung eines Formular-Arrays erforderliche Formularschema mit einer Eingabe für das Attribut someArrayItemAttribute lautet:

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

Kästchen

Ein Eingabefeld vom Typ checkbox.

Kontrollkästchen

Eine Liste mit Eingabefeldern vom Typ checkbox. Das JSON-Schemafeld muss den Typ array und das Attribut enum haben. Zum Bereitstellen von Labels für die Optionen können Sie eine titleMap angeben.

Maximieren

Ähnelt einem Abschnitt, doch hier sind Felder in einem Erweiterungsfeld-Widget vorhanden, die Nutzer durch Klicken auf den Titel öffnen und schließen können.

Zahl

Ein Eingabefeld vom Typ number. Die folgenden Attribute aus dem JSON-Schema sind Validierungen für das Feld minimum, maximum, exclusiveMinimum, exclusiveMaximum und multipleOf.

Passwort

Ein Eingabefeld vom Typ password.

Funk

Ein Eingabefeld vom Typ radio. Verwenden Sie dies für Felder mit einer enum-Liste im JSON-Schema oder mit einem booleschen Typ. Zum Bereitstellen von Labels für die Optionen können Sie eine titleMap angeben.

Bereich

Dieses Widget gruppiert eine Reihe von Feldern. Das Feld key wird ignoriert. Ein Abschnitt hat ein erforderliches items-Attribut, das ein Array von Formulareintragsobjekten ist. Ein Abschnitt kann die folgenden optionalen Attribute haben: title, description und condition.

Auswählen

Ein select-Eingabefeld. Verwenden Sie dies für Felder mit einer enum-Liste im JSON-Schema oder mit einem booleschen Typ. Zum Bereitstellen von Labels für die Optionen können Sie eine titleMap angeben.

SMS

Ein Eingabe-Widget vom Typ text. Wenn das JSON-Schema das Attribut pattern enthält, wird es als Regex-Validator verwendet.

Textbereich

Ein Eingabe-Widget für den Textbereich. Dieses Widget wird in manchen Fällen zum direkten Eingeben von JSON angezeigt. Siehe Objekt.

Titelzuordnung

Das Attribut titleMap kann für Widgets vom Typ checkboxes, radio und select angegeben werden. Bei anderen Widgets wird es ignoriert.

Das Attribut ist ein Array von Objekten, die zwei Attribute enthalten: value und name. Das Attribut value ist ein Verweis auf einen Enumerationswert für das Feld. Das Attribut name ist ein Text, der als Label für die entsprechende Option im UI-Widget verwendet wird. Wenn das Widget radio oder checkboxes ist, wird ein optionales Feld description als Subtext für dieses Optionsfeld oder Kästchen hinzugefügt.

Wenn kein titleMap angegeben ist, werden stattdessen die Aufzählungswerte verwendet.

Nicht unterstützte Features

Die folgenden Features werden derzeit im Formularschema nicht unterstützt:

  • Globale Optionen
  • Komplexe Bestätigungsnachrichten (nur eine Nachricht wird unterstützt)
  • Interpolation von Bestätigungsnachrichten
  • Bestätigungsnachricht-Features
  • Benutzerdefinierte Bestätigung
  • Nicht unterstützte Widgets: actions, fieldset, radios-inline, radiobuttons, help, template, tab und tabarray
  • Nicht unterstützte Optionen: onChange, feedback, disabledSuccessState, disabledErrorState, ngModelOptions, htmlClass, fieldHtmlClass, labelHtmlClass, copyValueTo und destroyStrategy
  • Nachbearbeitungs-Feature
  • Ereignisse
  • Manuelle Feldeingabe