Version: v1.0

Generating UI Forms

For any capabilities installed via Definition Objects, KubeVela will automatically generate OpenAPI v3 JSON schema based on its parameter list, and store it in a ConfigMap in the same namespace with the definition object.

The default KubeVela system namespace is vela-system, the built-in capabilities and schemas are laid there.

List Schema

This ConfigMap will have a common label definition.oam.dev=schema, so you can find easily by:

  1. $ kubectl get configmap -n vela-system -l definition.oam.dev=schema
  2. NAME DATA AGE
  3. schema-ingress 1 19s
  4. schema-scaler 1 19s
  5. schema-task 1 19s
  6. schema-webservice 1 19s
  7. schema-worker 1 20s

The ConfigMap name is in the format of schema-<your-definition-name>, and the data key is openapi-v3-json-schema.

For example, we can use the following command to get the JSON schema of webservice.

  1. $ kubectl get configmap schema-webservice -n vela-system -o yaml
  2. apiVersion: v1
  3. kind: ConfigMap
  4. metadata:
  5. name: schema-webservice
  6. namespace: vela-system
  7. data:
  8. openapi-v3-json-schema: '{"properties":{"cmd":{"description":"Commands to run in
  9. the container","items":{"type":"string"},"title":"cmd","type":"array"},"cpu":{"description":"Number
  10. of CPU units for the service, like `0.5` (0.5 CPU core), `1` (1 CPU core)","title":"cpu","type":"string"},"env":{"description":"Define
  11. arguments by using environment variables","items":{"properties":{"name":{"description":"Environment
  12. variable name","title":"name","type":"string"},"value":{"description":"The value
  13. of the environment variable","title":"value","type":"string"},"valueFrom":{"description":"Specifies
  14. a source the value of this var should come from","properties":{"secretKeyRef":{"description":"Selects
  15. a key of a secret in the pod''s namespace","properties":{"key":{"description":"The
  16. key of the secret to select from. Must be a valid secret key","title":"key","type":"string"},"name":{"description":"The
  17. name of the secret in the pod''s namespace to select from","title":"name","type":"string"}},"required":["name","key"],"title":"secretKeyRef","type":"object"}},"required":["secretKeyRef"],"title":"valueFrom","type":"object"}},"required":["name"],"type":"object"},"title":"env","type":"array"},"image":{"description":"Which
  18. image would you like to use for your service","title":"image","type":"string"},"port":{"default":80,"description":"Which
  19. port do you want customer traffic sent to","title":"port","type":"integer"}},"required":["image","port"],"type":"object"}'

Specifically, this schema is generated based on parameter section in capability definition:

  • For CUE based definition: the parameter is a keyword in CUE template.
  • For Helm based definition: the parameter is generated from values.yaml in Helm chart.

Render Form

You can render above schema into a form by form-render or React JSON Schema form and integrate with your dashboard easily.

Below is a form rendered with form-render:

Generating UI Forms - 图1

Helm Based Components

If a Helm based component definition is installed in KubeVela, it will also generate OpenAPI v3 JSON schema based on the values.schema.json in the Helm chart, and store it in the ConfigMap following convention above. If values.schema.json is not provided by the chart author, KubeVela will automatically generate OpenAPI v3 JSON schema based on its values.yaml file automatically.

What’s Next

It’s by design that KubeVela supports multiple ways to define the schematic. Hence, we will explain .schematic field in detail with following guides.