Custom Data Management
The Custom Data
feature implements a storage for ‘any’ data, which can be used by other components for data persistence.
Because the schema of the data being persisted varies from components, a CustomDataKind
must be defined to distinguish the data.
CustomDataKind
The YAML example below defines a CustomDataKind:
name: kind1
kind: CustomDataKind
idField: name
jsonSchema:
type: object
properties:
name:
type: string
required:
- name
The name
field is required, it is the kind name of custom data items of this kind.
The idField
is optional, and its default value is name
, the value of this field of a data item is used as its identifier.
The jsonSchema
is optional, if provided, data items of this kind will be validated against this JSON Schema. Use egctl
to create CustomDataKind
: egctl create -f kind1.yaml
or egctl apply -f kind1.yaml
.
CustomData
CustomData is a map, the keys of this map must be strings while the values can be any valid JSON values, but the keys of a nested map must be strings too.
A CustomData item must contain the idField
defined by its corresponding CustomDataKind, for example, the data items of the kind defined in the above example must contain the name
field as their identifiers.
Below is an example of a CustomData:
name: data1
field1: 12
field2: abc
field3: [1, 2, 3, 4]
API
Create a CustomDataKind * URL: http://{ip}:{port}/apis/v2/customdatakinds * Method: POST * Body: CustomDataKind definition is YAML.
Update a CustomDataKind * URL: http://{ip}:{port}/apis/v2/customdatakinds * Method: PUT * Body: CustomDataKind definition is YAML.
Query the definition of a CustomDataKind * URL: http://{ip}:{port}/apis/v2/customdatakinds/{kind name} * Method: GET
List the definition of all CustomDataKind * URL: http://{ip}:{port}/apis/v2/customdatakinds * Method: GET
Delete a CustomDataKind * URL: http://{ip}:{port}/apis/v2/customdatakinds/{kind name} * Method: DELETE
Create a CustomData * URL: http://{ip}:{port}/apis/v2/customdata/{kind name} * Method: POST * Body: CustomData definition is YAML.
Update a CustomData * URL: http://{ip}:{port}/apis/v2/customdata/{kind name} * Method: PUT * Body: CustomData definition is YAML.
Query the definition of a CustomData * URL: http://{ip}:{port}/apis/v2/customdata/{kind name}/{data id} * Method: GET
List the definition of all CustomData of a kind * URL: http://{ip}:{port}/apis/v2/customdata/{kind name} * Method: GET
Delete a CustomData * URL: http://{ip}:{port}/apis/v2/customdata/{kind name}/{data id} * Method: DELETE
Delete all CustomData of a kind * URL: http://{ip}:{port}/apis/v2/customdata/{kind name} * Method: DELETE
Bulk update * URL: http://{ip}:{port}/apis/v2/customdata/{kind name}/items * Method: POST * Body: A change request in YAML, as defined below.
name: kind1
kind: CustomData
rebuild: false
delete: [data1, data2]
list:
- name: data3
field1: 12
- name: data4
field1: foo
When rebuild
is true (default is false), all existing data items are deleted before processing the data items in list
. delete
is an array of data identifiers to be deleted, this array is ignored when rebuild
is true. list
is an array of data items to be created or updated. egctl
support to create or apply a change request, egctl create -f customdata-change-request.yaml
where name
is CustomDataKind
name and kind
is CustomData
.