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:
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:
- Erstellen Sie eine Deployment Manager-Vorlage.
- 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.
- 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. |
widget | Widget Gibt das UI-Widget an, das für dieses Feld verwendet werden soll. Standardwert: basiert auf der Zuordnung des Feldtyps. |
title | String Titel für das Feld. Übernimmt title vom Schema. |
notitle | Boolean Gibt an, ob der Titel ausgeblendet werden soll. Standardeinstellung: false. |
description | String Wird als Hinweis oder Kurzinfo für das Feld verwendet. Übernimmt description vom Schema. |
validationMessage | String Nachricht, die angezeigt wird, wenn das Feld ungültig ist. |
placeholder | String Platzhalter für das Feld. Hinweis: Material Design verwendet stattdessen title als Platzhalter. |
readonly | Boolean Gibt an, ob das Feld schreibgeschützt ist. Übernimmt readonly vom Schema. |
condition | String Ein logischer Ausdruck, der bestimmt, ob das Feld angezeigt wird. |
titleMap | Title 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
undtabarray
- Nicht unterstützte Optionen:
onChange
,feedback
,disabledSuccessState
,disabledErrorState
,ngModelOptions
,htmlClass
,fieldHtmlClass
,labelHtmlClass
,copyValueTo
unddestroyStrategy
- Nachbearbeitungs-Feature
- Ereignisse
- Manuelle Feldeingabe