Panoramica di Form Schema
Nel Catalogo di servizi, un tipo di soluzione supportata è costituito dalle configurazioni di Deployment Manager. Per aiutarti a creare ed eseguire il deployment delle configurazioni di Deployment Manager, abbiamo Schema modulo.
Lo schema del modulo viene utilizzato per disporre i componenti dell'interfaccia utente (UI) in un modulo HTML. In particolare, consente agli amministratori e agli sviluppatori cloud di fornire un'interfaccia utente per inserire i parametri durante la creazione di una nuova istanza o di un deployment cloud.
Gli amministratori cloud utilizzano lo schema dei moduli per creare moduli che consentono agli utenti di personalizzare le soluzioni basate su modelli di Deployment Manager prima di lanciarle. Ad esempio, gli utenti possono selezionare il tipo di macchina, le dimensioni del disco, la zona e il numero di CPU di una macchina virtuale. Questi moduli sono simili a quelli utilizzati nel Cloud Marketplace.
Lo screenshot seguente mostra l'aspetto di un modulo di implementazione:
Alternative a Form Schema
Lo schema del modulo è un'alternativa a un modo esistente per creare moduli dell'interfaccia utente, chiamato Metadati di visualizzazione.
Rispetto ai metadati visibili, lo schema dei moduli è più flessibile ed è open source.
Relazione con lo schema JSON
Lo schema del modulo si basa sul modulo dello schema JSON, che è uno schema open source scritto in JSON per specificare e convalidare un insieme di parametri.
Lo schema del modulo fa riferimento ai campi nello schema JSON e ne eredita gli attributi.
Puoi includere lo schema del modulo all'interno dello schema JSON includendo un array di oggetti form entry
all'interno dell'attributo form
, come illustrato nell'esempio seguente:
{ "$schema": "http://json-schema.org/draft-04/schema#", "type": "object", "properties": {...} "form": [ ...Form List goes here... ] }
Come specificare un'istanza di Form Schema
Puoi specificare le istanze dello schema del modulo in formato YAML.
Crea un file schema che dispone i widget dell'interfaccia utente nell'ordine in cui devono essere visualizzati nell'interfaccia utente. Questo file di schema ha l'estensione .py o .jinja, come descritto nella documentazione di Deployment Manager.
Aggiungi quindi i file a un archivio ZIP del modello Deployment Manager e caricalo.
Come lo schema del modulo si inserisce nel flusso di lavoro del catalogo dei servizi
Gli amministratori di Cloud utilizzano lo schema del modulo con catalogo dei servizi come segue:
- Crea un modello Deployment Manager.
- Specifica uno schema JSON per definire o convalidare i campi di immissione che possono essere utilizzati nell'interfaccia utente per la configurazione del modello Deployment Manager.
- Definisci nello schema del modulo i campi da includere per una determinata soluzione e l'ordine in cui devono essere visualizzati. Oltre all'ordinamento, puoi utilizzare lo schema del modulo per fornire un testo intuitivo per i campi enumerati, come i menu a discesa, e raggruppare i campi con i titoli delle sezioni.
Elenco dei moduli
Un array di oggetti form entry
. Ogni oggetto rappresenta un componente UI in un modulo. Devi specificare i campi nell'ordine in cui vuoi che vengano visualizzati nel modulo, indipendentemente dalla loro posizione nello schema.
Inserimento di moduli
Una voce del modulo specifica l'aspetto di un componente dell'interfaccia utente in un modulo. Può essere una stringa, in cui viene specificata la chiave per un campo nello schema JSON, o un oggetto. Quando una voce del modulo è una stringa, i valori predefiniti per l'aspetto vengono ereditati dalla voce dello schema JSON.
Quando una voce del modulo è un oggetto, l'attributo key
fa riferimento alla voce dello schema JSON. Utilizza un punto .
per separare i nodi di un valore nidificato. Ad esempio, utilizza
name.first
per fare riferimento a un campo first
all'interno di un oggetto name
. Tutti gli altri campi sono facoltativi e, se specificati, ereditano un valore predefinito dallo schema JSON.
Campi | |
---|---|
key* | String Specifica la definizione del campo nello schema JSON. |
widget | Widget Specifica il widget dell'interfaccia utente da utilizzare per questo campo. Valore predefinito: in base alla mappatura del tipo di campo. |
title | String Titolo del campo. Eredita title dallo schema. |
notitle | Boolean Se nascondere il titolo. Valore predefinito: false. |
description | String Utilizzato come suggerimento o descrizione comando per il campo. Eredita description dallo schema. |
validationMessage | String Messaggio da mostrare quando il campo non è valido. |
placeholder | String Segnaposto per il campo. Nota: Material Design utilizza invece title come segnaposto. |
readonly | Boolean Indica se il campo è di sola lettura. Eredita readonly dallo schema. |
condition | String Un'espressione logica che determina se il campo viene visualizzato. |
titleMap | Title map Fornisce le etichette di testo per le opzioni nei widget checkboxes , radio e select . |
* obbligatorio
Trattamento speciale per i tipi
Oggetto
Per il tipo object
, il campo additionalProperties
definisce se possono essere presenti proprietà aggiuntive. Il campo può avere un valore true (consenti qualsiasi valore),
false (non sono consentite proprietà aggiuntive) o uno schema JSON che vincola le proprietà aggiuntive consentite. Quando il valore è falso o non è presente, vengono visualizzati i widget per i campi elencati nell'attributo items
. Per altri valori (true o schema JSON), viene visualizzata un'area di testo per l'inserimento di un valore JSON.
Mappatura tipo-a-widget
Se nello schema del modulo non è specificato alcun widget, viene utilizzato un valore predefinito in base al tipo di schema JSON del campo, come segue:
Tipo di schema | Widget Schema Form |
---|---|
string | sms |
numero | number |
integer | number |
boolean | checkbox |
oggetto | fieldset |
stringa + enum | radio (fino a 3 opzioni) |
stringa + enum | select (4 o più opzioni) |
array + enum | caselle di controllo |
matrice | array |
Widget
Un widget viene specificato come stringa che fa riferimento a una delle seguenti strutture di dati.
Array
Un elenco in cui le righe possono essere aggiunte, rimosse e riordinate. Lo schema JSON consente alla proprietà items
per il tipo array
di essere uno schema o un elenco di schemi. L'elenco non è supportato dallo schema del modulo.
Array con elementi primitivi
Poiché lo schema del modulo richiede che tutte le voci del modulo abbiano una chiave e gli array che contengono elementi primitivi (non oggetti) non hanno una chiave a cui fare riferimento, il modulo deve fare riferimento alla voce dell'array primitivo utilizzando una parola chiave riservata: "x-googleProperty".
Ad esempio, dovresti definire un array di schemi JSON contenente stringhe come segue:
{ 'exampleArray': { 'type': 'array', 'items': { 'type': 'string' } } }
Deve quindi essere fatto riferimento allo schema del modulo come segue:
[ { 'key': 'exampleArray', 'widget': 'array', 'items': [ { 'key': 'exampleArray.x-arrayPrimitive' } ] }, ]
Array con elementi oggetto
Gli array che contengono oggetti devono specificare ogni chiave del tipo di elemento da visualizzare nel modulo.
Ad esempio, considera un array dello schema JSON contenente un oggetto:
{ 'exampleArray': { 'type': 'array', 'items': { 'type': 'object', 'properties': { 'someArrayItemAttribute': { 'type': 'string' } } } } }
Lo schema del modulo necessario per creare un array di moduli con un input per l'attributo someArrayItemAttribute
è:
[ { 'key': 'exampleArray', 'widget': 'array', 'items': [ { 'key': 'exampleArray.someArrayItemAttribute' } ] }, ]
Casella di controllo
Un campo di immissione di tipo checkbox
.
Caselle di controllo
Un elenco di campi di immissione di tipo checkbox
. Il campo dello schema JSON deve essere di tipo array
e avere un attributo enum
. Per fornire etichette per le opzioni,
puoi specificare un titleMap.
Espandi nodo
Molto simile a una sezione, ma inserisce i campi all'interno di un widget riquadro espandibile che gli utenti possono aprire e chiudere facendo clic sul titolo.
Numero
Un campo di immissione di tipo number
. I seguenti attributi dello schema JSON
sono convalidatori per il campo: minimum
, maximum
, exclusiveMinimum
,
exclusiveMaximum
, multipleOf
.
Password
Un campo di immissione di tipo password
.
Radio
Un campo di immissione di tipo radio
. Utilizzalo per i campi che hanno un elenco enum
nello schema JSON o sono di tipo booleano. Per fornire etichette per le opzioni,
puoi specificare un titleMap.
Sezione
Questo widget raggruppa un insieme di campi. Il campo key
viene ignorato. Una sezione ha un attributo items
obbligatorio, che è un array di oggetti elemento di modulo. Una sezione può avere i seguenti attributi facoltativi: title
, description
, condition
.
Seleziona
Un campo di immissione select
. Utilizzalo per i campi che hanno un elenco enum
nello schema JSON o sono di tipo booleano. Per fornire etichette per le opzioni, puoi specificare un titleMap.
Testo
Un widget di input di tipo text
. Se lo schema JSON contiene un attributo pattern
, il pattern viene utilizzato come convalidatore regex.
Area di testo
Un widget di input area di testo. Questo widget viene visualizzato in alcune situazioni per inserire direttamente il codice JSON. Vedi oggetto.
Mappa dei titoli
L'attributo titleMap
può essere specificato per i widget di tipo checkboxes
,
radio
e select
. Viene ignorato per gli altri widget.
L'attributo è un array di oggetti che contengono due attributi, value
e
name
. L'attributo value
è un riferimento a un valore enum per il campo.
L'attributo name
è il testo da utilizzare come etichetta per l'opzione corrispondente nel widget dell'interfaccia utente. Quando il widget è radio
o checkboxes
, viene aggiunto un campo facoltativo description
come testo secondario per il pulsante di opzione o la casella di controllo.
Se non viene fornito alcun titleMap
, vengono utilizzati i valori dell'enum.
Funzionalità non supportate
Le seguenti funzionalità non sono attualmente supportate nello schema del modulo:
- Opzioni globali
- Messaggi di convalida complessi (è supportato un solo messaggio)
- Interpolazione del messaggio di convalida
- Funzioni dei messaggi di convalida
- Convalida personalizzata
- Widget non supportati:
actions
,fieldset
,radios-inline
,radiobuttons
,help
,template
,tab
,tabarray
- Opzioni non supportate:
onChange
,feedback
,disabledSuccessState
,disabledErrorState
,ngModelOptions
,htmlClass
,fieldHtmlClass
,labelHtmlClass
,copyValueTo
,destroyStrategy
- Funzione di post-elaborazione
- Eventi
- Inserimento manuale dei campi