フォーム スキーマの概要

サービス カタログでサポートされるソリューションの一つに、Deployment Manager の構成があります。Google では Deployment Manager の構成の作成とデプロイに役立つフォーム スキーマを用意しています。

フォーム スキーマは、HTML フォームにユーザー インターフェース(UI)コンポーネントを配置する目的に使用します。具体的には、これによりクラウド管理者やデベロッパーは、新しいインスタンスやクラウド デプロイ作成時のパラメータ入力に使用する UI を提供できます。

Cloud 管理者は、フォーム スキーマを使用して、ユーザーがソリューションを起動する前に、Deployment Manager のテンプレート ベースのソリューションをカスタマイズできるようにするフォームを作成します。たとえば、ユーザーは仮想マシンに割り当てるマシンタイプ、ディスクサイズ、ゾーン、CPU 数を選択できます。これらのフォームは、Cloud Marketplace で使用されるフォームと類似しています。

次のスクリーンショットは、デプロイメント フォームの表示を示したものです。

デプロイメント フォーム

フォーム スキーマに代わる方法

フォーム スキーマは、ディスプレイ メタデータと呼ばれる UI フォームの既存の作成法の代わりに使用するものです。

ディスプレイ メタデータと比較して、フォーム スキーマは柔軟性に優れており、またオープンソースです。

JSON スキーマとの関係

フォーム スキーマは、JSON スキーマ フォームをベースとしています。これは、JSON で記述されたオープンソースのスキーマで、パラメータ セットを指定および検証する用途に使用します。

フォーム スキーマは、JSON スキーマ内のフィールドを参照し、フィールドから属性を継承します。

フォーム スキーマ を JSON スキーマ内に含めるには、次の例に示すように、form オブジェクト内に form entry オブジェクトの配列を追加します。

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

フォーム スキーマ インスタンスを指定する方法

フォーム スキーマ インスタンスは YAML 形式で指定できます。

UI ウィジェットを UI に表示する順序で配置するスキーマ ファイルを作成します。Deployment Manager のドキュメントで説明されているとおり、このスキーマ ファイルの拡張子は .py または .jinja です。

次に、Deployment Manager テンプレートの ZIP アーカイブにファイルを追加し、ZIP アーカイブをアップロードします。

サービス カタログ ワークフローでのフォーム スキーマの位置付け

Cloud 管理者は、サービス カタログを使用したフォーム スキーマを次のように使用します。

  1. Deployment Manager テンプレートを作成します。
  2. Deployment Manager テンプレート構成の UI で使用できる入力フィールドを定義または検証するには、JSON スキーマを指定します。
  3. フォーム スキーマで、特定のソリューションに含めるフィールドとフィールドを表示する順序を定義します。フォーム スキーマを使用すると、順序のほかに、プルダウンなどの列挙型フィールドやセクション タイトルを付けたグループなど、わかりやすいテキストを表示できます。

フォームリスト

form entry オブジェクトの配列。各オブジェクトは 1 つのフォームの UI コンポーネントを表します。フィールドは、スキーマ内の場所に関係なく、フォームに表示される順序で指定する必要があります。

フォームの入力

フォームの入力は、フォーム内の UI コンポーネントの外観を指定します。JSON スキーマ内のフィールドやオブジェクトのキーを指定する文字列として機能します。フォームの入力が文字列の場合、外観のデフォルト値は JSON スキーマ エントリから継承されます。

フォームの入力がオブジェクトの場合、key 属性は JSON スキーマ エントリを参照します。ネストされた値の場合は、ドット . を使用してノードを区切ります。たとえば、name.first を使用して、name オブジェクト内の first フィールドを参照します。その他のフィールドはすべて省略可能で、指定すると、JSON スキーマからデフォルト値が継承されます。

項目
key*String
JSON スキーマのフィールド定義を指定します。
widgetWidget
このフィールドに使用する UI ウィジェットを指定します。デフォルト: フィールド タイプのマッピングに基づきます。
titleString
フィールドのタイトル。スキーマから title を継承します。
notitleBoolean
タイトルを非表示にするかどうか。デフォルト: false。
descriptionString
フィールドのヒントまたはツールチップとして使用されます。スキーマから description を継承します。
validationMessageString
フィールドが無効であるときに表示されるメッセージ。
placeholderString
フィールドのプレースホルダ。注: マテリアル デザインでは、代わりに title をプレースホルダとして使用します。
readonlyBoolean
フィールドが読み取り専用かどうか。スキーマから readonly を継承します。
conditionString
フィールドが表示されるかどうかを決定する論理式。
titleMapTitle map
checkboxesradioselect ウィジェットのオプションのテキストラベルを指定します。

* 必須。

タイプの特殊な処理

オブジェクト

object 型では、additionalProperties フィールドで、追加のプロパティを使用できるかどうかが定義されます。このフィールドの値は、true(すべてを許可)、false(追加のプロパティは使用できません)、または追加の追加のプロパティを制限する一部の JSON スキーマのいずれかになります。値が false または存在しない場合、items 属性にリストされたフィールドのウィジェットが表示されます。他の値(true または JSON スキーマ)の場合は、JSON 値を入力するためのテキスト領域が表示されます。

タイプからウィジェットへのマッピング

フォーム スキーマでウィジェットが指定されていない場合は、以下に示すように、フィールドの JSON スキーマタイプに基づいてデフォルト値が使用されます。

スキーマタイプ スキーマ フォーム ウィジェット
文字列 テキスト
数値 数値
整数 数値
ブール値 チェックボックス
オブジェクト フィールド セット
文字列 + 列挙型 無線通信(3 つ以下)
文字列 + 列挙型 選択(4 個以上の選択)
配列 + 列挙型 チェックボックス
配列 配列

ウィジェット

ウィジェットは、次のいずれかのデータ構造を参照する文字列として指定します。

配列

行を追加、削除、並べ替えできるリスト。JSON スキーマでは、array 型の items プロパティをスキーマまたはスキーマのリストにできます。このリストは、フォーム スキーマではサポートされていません。

プリミティブ アイテムを含む配列

フォーム スキーマではすべてのフォーム エントリにキーが必要であり、プリミティブ(オブジェクト以外)アイテムを含む配列にはそれらを参照するためのキーがないため、フォームは予約済みキーワードである「x-googleProperty」を使用してプリミティブ配列エントリを参照する必要があります。

たとえば、次のような文字列を含む JSON スキーマ配列を定義します。

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

この場合は、フォーム スキーマで次のように参照する必要があります。

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

オブジェクト アイテムを含む配列

オブジェクトを含む配列は、フォーム内でレンダリングするアイテムタイプの各キーを指定する必要があります。

たとえば、オブジェクトを含む JSON スキーマ配列を考えてみましょう。

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

someArrayItemAttribute 属性の入力を含むフォーム配列を作成する際に必要なフォーム スキーマは次のとおりです。

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

チェックボックス

checkbox 型の入力フィールド

チェックボックス

checkbox 型の入力フィールドのリスト。JSON スキーマ フィールドは array 型で、enum 属性を持つ必要があります。オプションのラベルを指定するには、titleMap を指定します。

展開

セクションと非常に類似していますが、フィールドは、展開パネル ウィジェット内に配置します。このパネルは、ユーザーがタイトルをクリックすると開いて閉じることができます。

番号

number 型の入力フィールド 次の SON スキーマの属性は、minimummaximumexclusiveMinimumexclusiveMaximummultipleOf の各フィールドのバリデータです。

パスワード

password 型の入力フィールド

無線通信

radio 型の入力フィールド JSON スキーマで enum リストを持つフィールドまたはブール値型のフィールドに対して使用します。オプションのラベルを指定するには、titleMap を指定します。

セクション

このウィジェットは一連のフィールドをグループ化します。key フィールドは無視されます。セクションには必須の items 属性があり、これはフォーム エントリ オブジェクトの配列です。セクションには、titledescriptioncondition のオプションの属性を含めることができます。

選択

select 入力フィールド。JSON スキーマで enum リストを持つフィールドまたはブール値型のフィールドに対して使用します。オプションのラベルを指定するには、titleMap を指定します。

テキスト

text 型の入力ウィジェット。JSON スキーマに pattern 属性が含まれている場合、パターンは正規表現バリデータとして使用されます。

テキストエリア

テキストエリアの入力ウィジェット。このウィジェットは、JSON に直接入力する際の一部の状況で表示されます。オブジェクトを参照してください。

タイトルマップ

titleMap 属性は、checkboxesradioselect タイプのウィジェットに指定できます。他のウィジェットでは無視されます。

この属性は、valuename の 2 つの属性を含むオブジェクトの配列です。value 属性は、フィールドの 1 つの列挙値への参照です。name 属性は、UI ウィジェットの対応するオプションのラベルとして使用するテキストです。ウィジェットの状態が radio または checkboxes の場合、description フィールド(省略可)がラジオボタンまたはチェックボックスのサブテキストとして追加されます。

titleMap が指定されていない場合は、代わりに列挙値が使用されます。

サポートされていない機能

現在、フォーム スキーマでは、次の機能はサポートされていません。

  • グローバル オプション
  • 複雑な検証メッセージ(1 つのメッセージのみがサポートされています)
  • 検証メッセージの補間
  • 検証メッセージ関数
  • カスタム検証
  • サポートされていないウィジェット: actionsfieldsetradios-inlineradiobuttonshelptemplatetabtabarray
  • サポートされていないオプション: onChangefeedbackdisabledSuccessStatedisabledErrorStatengModelOptionshtmlClassfieldHtmlClasslabelHtmlClasscopyValueTodestroyStrategy
  • 後処理関数
  • イベント
  • フィールドの手動挿入