Document kinds
Weik.io 2026.2Every kind of document weikio apply accepts, with its fields and the JSON schema the CLI checks it against.
On this page
Everything Weik.io manages can be written as a YAML document and kept in Git: projects and roles, environments, integrations and their generated kinds, variables, deployments, APIs and entity types. Every document has the same envelope, and weikio apply -f <folder> creates or updates each one:
apiVersion: weik.io/v1
kind: variable
metadata: { name: erp-url, project: finance, environment: production }
spec: { value: https://erp.example.internal }metadata.project and metadata.environment can be left out when the project comes from a project.yaml in a parent folder or from --project, and the environment from --env. weikio validate checks every document against its kind’s schema without sending anything, and weikio export writes what the hub has as documents that apply again unchanged.
The schema of each kind is below each section. The hub serves the same schemas at GET /api/v1/schemas/{kind}, and an editor with the YAML language server marks a misspelled field as you type when a file points at the schema:
# finance/production/variables/erp-url.yaml
# yaml-language-server: $schema=../../../schemas/variable.jsonproject#
A project groups integrations, APIs and the values they share, and people get access to it through a role. A platform administrator writes projects.
apiVersion: weik.io/v1
kind: project
metadata: { name: finance }
spec:
displayName: Finance
description: Integrations of the finance team
labels: { team: finance }Metadata: name.
| Field | Type | What it is |
|---|---|---|
displayName |
string | The name the admin UI shows. |
description |
string | What the project is for. |
labels |
map | Labels as key and value, which weikio get projects - filters by. |
budgets |
object | storeBytes, the size of the project’s store for built versions, in bytes. |
JSON schema of project
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "project",
"type": "object",
"properties": {
"apiVersion": {
"const": "weik.io/v1"
},
"kind": {
"const": "project"
},
"metadata": {
"type": "object",
"properties": {
"name": {
"type": "string"
}
},
"required": [
"name"
],
"additionalProperties": false
},
"spec": {
"type": [
"object",
"null"
],
"properties": {
"displayName": {
"type": [
"string",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"labels": {
"type": "object",
"additionalProperties": {
"type": [
"string",
"null"
]
}
},
"budgets": {
"type": [
"object",
"null"
],
"properties": {
"storeBytes": {
"type": [
"string",
"integer"
],
"pattern": "^-?(?:0|[1-9]\\d*)$"
}
},
"additionalProperties": false,
"default": null
}
},
"additionalProperties": false
}
},
"required": [
"apiVersion",
"kind",
"metadata",
"spec"
],
"additionalProperties": false
}role#
A role is a set of verbs, and the same role serves every project. The seeded roles are viewer, editor, deployer and admin.
apiVersion: weik.io/v1
kind: role
metadata: { name: helpdesk }
spec: { verbs: [read] }Metadata: name.
| Field | Type | What it is |
|---|---|---|
description |
string | What the role is for. |
verbs |
list of strings, required | The verbs: read, author, operate, reveal, deploy, entity- and members. |
JSON schema of role
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "role",
"type": "object",
"properties": {
"apiVersion": {
"const": "weik.io/v1"
},
"kind": {
"const": "role"
},
"metadata": {
"type": "object",
"properties": {
"name": {
"type": "string"
}
},
"required": [
"name"
],
"additionalProperties": false
},
"spec": {
"type": [
"object",
"null"
],
"properties": {
"description": {
"type": [
"string",
"null"
]
},
"verbs": {
"type": "array",
"items": {
"type": [
"string",
"null"
]
}
}
},
"required": [
"verbs"
],
"additionalProperties": false
}
},
"required": [
"apiVersion",
"kind",
"metadata",
"spec"
],
"additionalProperties": false
}member#
A member document gives a user one role in a project, optionally limited to environments, integrations and APIs. The document’s name is the person’s e-mail address.
apiVersion: weik.io/v1
kind: member
metadata: { name: anna@example.com, project: finance }
spec:
role: helpdesk
environments: [production]
integrations: [erp-invoice-export, nightly-payroll]Metadata: name, project.
| Field | Type | What it is |
|---|---|---|
role |
string, required | The role the member has in the project. |
environments |
list of strings | The environments the grant covers, and every environment when the list is empty. |
integrations |
list of strings | The integrations the grant covers. With integrations and apis both empty, the grant covers the whole project. |
apis |
list of strings | The APIs the grant covers. |
JSON schema of member
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "member",
"type": "object",
"properties": {
"apiVersion": {
"const": "weik.io/v1"
},
"kind": {
"const": "member"
},
"metadata": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"project": {
"type": "string"
}
},
"required": [
"name",
"project"
],
"additionalProperties": false
},
"spec": {
"type": [
"object",
"null"
],
"properties": {
"role": {
"type": [
"string",
"null"
]
},
"environments": {
"type": [
"array",
"null"
],
"items": {
"type": [
"string",
"null"
]
}
},
"integrations": {
"type": [
"array",
"null"
],
"items": {
"type": [
"string",
"null"
]
}
},
"apis": {
"type": [
"array",
"null"
],
"items": {
"type": [
"string",
"null"
]
}
}
},
"required": [
"role"
],
"additionalProperties": false
}
},
"required": [
"apiVersion",
"kind",
"metadata",
"spec"
],
"additionalProperties": false
}environment#
An environment such as devtest or production belongs to the whole installation, with its own protection and storage budgets.
apiVersion: weik.io/v1
kind: environment
metadata: { name: production }
spec:
displayName: Production
order: 2
isProduction: true
protection: { allowSecretReveal: false }
budgets: { entityStoreBytes: 2147483648 }Metadata: name.
| Field | Type | What it is |
|---|---|---|
displayName |
string | The name the admin UI shows. |
order |
integer | The place in the promotion order. |
isProduction |
boolean | Marks a production environment, which every change needs -- for. It can’t be changed after the environment is created. |
protection |
object, required | allowSecretReveal, allowLatestVersion, startOffline and offlineStartMaxAge, how old a site’s saved copy of a deployment may be for the site to start it while the hub is out of reach. |
budgets |
object, required | The sizes in bytes of the stored events (eventsBytes), the entity events (entityEventsBytes), the entity store (entityStoreBytes), the dead letters (deadLetterBytes) and the record of handled events (idempotencyBytes). |
trustedCertificates |
list of strings | PEM certificates that every Java process deployed in the environment trusts. |
launchDefaults |
object | The Camel properties and Java jvmOptions the environment’s deployments start with. Each property replaces the installation’s property of the same name, and a jvmOptions list replaces the installation’s whole list. |
JSON schema of environment
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "environment",
"type": "object",
"properties": {
"apiVersion": {
"const": "weik.io/v1"
},
"kind": {
"const": "environment"
},
"metadata": {
"type": "object",
"properties": {
"name": {
"type": "string"
}
},
"required": [
"name"
],
"additionalProperties": false
},
"spec": {
"type": [
"object",
"null"
],
"properties": {
"displayName": {
"type": [
"string",
"null"
]
},
"order": {
"type": [
"string",
"integer"
],
"pattern": "^-?(?:0|[1-9]\\d*)$"
},
"isProduction": {
"type": "boolean"
},
"protection": {
"type": "object",
"properties": {
"allowSecretReveal": {
"type": "boolean"
},
"allowLatestVersion": {
"type": "boolean"
},
"offlineStartMaxAge": {
"type": [
"string",
"null"
],
"pattern": "^(0|([0-9]+y)?([0-9]+w)?([0-9]+d)?([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?)$",
"minLength": 1,
"description": "A duration: whole numbers, each with its unit y, w, d, h, m, s or ms, largest first, such as 30s, 1h30m or 7d."
},
"startOffline": {
"type": "boolean",
"default": true
}
},
"additionalProperties": false
},
"budgets": {
"type": "object",
"properties": {
"eventsBytes": {
"type": [
"string",
"integer"
],
"pattern": "^-?(?:0|[1-9]\\d*)$"
},
"entityEventsBytes": {
"type": [
"string",
"integer"
],
"pattern": "^-?(?:0|[1-9]\\d*)$"
},
"entityStoreBytes": {
"type": [
"string",
"integer"
],
"pattern": "^-?(?:0|[1-9]\\d*)$"
},
"deadLetterBytes": {
"type": [
"string",
"integer"
],
"pattern": "^-?(?:0|[1-9]\\d*)$",
"default": 0
},
"idempotencyBytes": {
"type": [
"string",
"integer"
],
"pattern": "^-?(?:0|[1-9]\\d*)$",
"default": 0
}
},
"required": [
"entityStoreBytes"
],
"additionalProperties": false
},
"trustedCertificates": {
"type": [
"array",
"null"
],
"items": {
"type": [
"string",
"null"
]
},
"default": null
},
"launchDefaults": {
"type": [
"object",
"null"
],
"properties": {
"properties": {
"type": [
"object",
"null"
],
"additionalProperties": {
"type": [
"string",
"null"
]
},
"default": null
},
"jvmOptions": {
"type": [
"array",
"null"
],
"items": {
"type": [
"string",
"null"
]
},
"default": null
}
},
"additionalProperties": false,
"default": null
}
},
"required": [
"protection",
"budgets"
],
"additionalProperties": false
}
},
"required": [
"apiVersion",
"kind",
"metadata",
"spec"
],
"additionalProperties": false
}settings#
The installation’s settings are one document without a name, which weikio settings get prints and weikio settings set changes.
The document has no metadata, because the installation has only one.
| Field | Type | What it is |
|---|---|---|
publicBaseUrl |
string, required | The address the hub is reached at. |
localAccounts |
string, required | Who can sign in with a local account: enabled or breakGlassOnly. |
bundleRetention |
object, required | How many built versions of each integration to keep and for how long. |
defaultCamelVersion |
string, required | The Camel line for integrations that don’t set one. |
launchDefaults |
object | The Camel properties and Java jvmOptions every deployment starts with. |
backupEvery |
duration | How often the backup service takes an archive, from 1h to 365d. |
backupKeep |
integer | How many archives the server keeps. |
backupCopyTo |
string | Where each archive is copied, such as an S3 bucket. |
twoFactorRequired |
boolean | Whether a platform administrator’s password sign-in needs a code from an authenticator app. On by default. |
apimEntrances |
list of objects | The hub’s gateway entrances, written when the hub is set up. |
certificates |
object | How the hub’s names and gateway hostnames get their certificates: the authority, the DNS connections, uploaded hub certificates and the platform’s own authority. |
allowedNetworks |
list of strings | The address ranges that can reach the hub, and every address when the list is empty. |
JSON schema of settings
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "settings",
"type": "object",
"properties": {
"apiVersion": {
"const": "weik.io/v1"
},
"kind": {
"const": "settings"
},
"spec": {
"type": [
"object",
"null"
],
"properties": {
"publicBaseUrl": {
"type": "string"
},
"localAccounts": {
"type": "string"
},
"bundleRetention": {
"type": "object",
"properties": {
"keepVersions": {
"type": [
"string",
"integer"
],
"pattern": "^-?(?:0|[1-9]\\d*)$"
},
"maxAge": {
"type": [
"string",
"null"
],
"pattern": "^(0|([0-9]+y)?([0-9]+w)?([0-9]+d)?([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?)$",
"minLength": 1,
"description": "A duration: whole numbers, each with its unit y, w, d, h, m, s or ms, largest first, such as 30s, 1h30m or 7d."
}
},
"additionalProperties": false
},
"defaultCamelVersion": {
"type": "string"
},
"launchDefaults": {
"type": [
"object",
"null"
],
"properties": {
"properties": {
"type": [
"object",
"null"
],
"additionalProperties": {
"type": [
"string",
"null"
]
},
"default": null
},
"jvmOptions": {
"type": [
"array",
"null"
],
"items": {
"type": [
"string",
"null"
]
},
"default": null
}
},
"additionalProperties": false,
"default": null
},
"backupEvery": {
"type": [
"string",
"null"
],
"pattern": "^(0|([0-9]+y)?([0-9]+w)?([0-9]+d)?([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?)$",
"minLength": 1,
"description": "A duration: whole numbers, each with its unit y, w, d, h, m, s or ms, largest first, such as 30s, 1h30m or 7d.",
"default": null
},
"backupKeep": {
"type": [
"string",
"integer",
"null"
],
"pattern": "^-?(?:0|[1-9]\\d*)$",
"default": null
},
"backupCopyTo": {
"type": [
"string",
"null"
],
"default": null
},
"twoFactorRequired": {
"type": "boolean",
"default": true
},
"apimEntrances": {
"type": [
"array",
"null"
],
"items": {
"type": [
"object",
"null"
],
"properties": {
"name": {
"type": "string"
},
"addresses": {
"type": "array",
"items": {
"type": [
"string",
"null"
]
}
},
"callerAddressKnown": {
"type": "boolean"
}
},
"required": [
"name"
],
"additionalProperties": false
},
"default": null
},
"certificates": {
"type": [
"object",
"null"
],
"properties": {
"automatic": {
"type": "boolean"
},
"authority": {
"type": [
"string",
"null"
],
"default": null
},
"contact": {
"type": [
"string",
"null"
],
"default": null
},
"publicAddresses": {
"type": [
"array",
"null"
],
"items": {
"type": [
"string",
"null"
]
},
"default": null
},
"hubCertificates": {
"type": [
"array",
"null"
],
"items": {
"type": [
"object",
"null"
],
"properties": {
"name": {
"type": "string"
},
"chain": {
"type": "string"
},
"key": {
"type": [
"string",
"null"
],
"default": null,
"writeOnly": true,
"description": "The certificate's private key in PEM, required when the certificate isn't stored yet. An entry sent without it keeps the stored key of the certificate of the same name and chain. The platform never returns a stored key."
}
},
"required": [
"name",
"chain"
],
"additionalProperties": false
},
"default": null
},
"dns": {
"type": [
"array",
"null"
],
"items": {
"type": [
"object",
"null"
],
"properties": {
"name": {
"type": "string"
},
"provider": {
"type": "string"
},
"zones": {
"type": "array",
"items": {
"type": [
"string",
"null"
]
}
},
"credential": {
"type": "string"
},
"azure": {
"type": [
"object",
"null"
],
"properties": {
"tenant": {
"type": "string"
},
"client": {
"type": "string"
},
"objectId": {
"type": "string"
},
"subscription": {
"type": "string"
},
"resourceGroup": {
"type": "string"
}
},
"required": [
"tenant",
"client",
"objectId",
"subscription",
"resourceGroup"
],
"additionalProperties": false,
"default": null
},
"rfc2136": {
"type": [
"object",
"null"
],
"properties": {
"server": {
"type": "string"
},
"keyName": {
"type": "string"
}
},
"required": [
"server",
"keyName"
],
"additionalProperties": false,
"default": null
}
},
"required": [
"name",
"provider",
"zones",
"credential"
],
"additionalProperties": false
},
"default": null
},
"authorities": {
"type": [
"array",
"null"
],
"items": {
"type": [
"object",
"null"
],
"properties": {
"name": {
"type": "string"
},
"acme": {
"type": "string"
},
"externalAccount": {
"type": [
"object",
"null"
],
"properties": {
"keyId": {
"type": "string"
},
"key": {
"type": "string"
}
},
"required": [
"keyId",
"key"
],
"additionalProperties": false
},
"trust": {
"type": [
"array",
"null"
],
"items": {
"type": [
"string",
"null"
]
}
},
"names": {
"type": "array",
"items": {
"type": [
"string",
"null"
]
}
},
"orders": {
"type": [
"string",
"null"
]
},
"clientCertificates": {
"type": "boolean"
}
},
"required": [
"name",
"acme",
"names"
],
"additionalProperties": false
},
"default": null
},
"platformAuthority": {
"type": [
"object",
"null"
],
"properties": {
"names": {
"type": [
"array",
"null"
],
"items": {
"type": [
"string",
"null"
]
}
}
},
"additionalProperties": false,
"default": null
},
"hubNames": {
"type": [
"string",
"null"
],
"default": null
}
},
"additionalProperties": false,
"default": null
},
"allowedNetworks": {
"type": [
"array",
"null"
],
"items": {
"type": [
"string",
"null"
]
},
"default": null
}
},
"required": [
"publicBaseUrl",
"localAccounts",
"bundleRetention",
"defaultCamelVersion"
],
"additionalProperties": false
}
},
"required": [
"apiVersion",
"kind",
"spec"
],
"additionalProperties": false
}telemetry-forwarding#
The telemetry forwarding document sends the installation’s logs, metrics, traces and audit records to your own systems, such as a SIEM, Splunk or Azure Monitor. A platform administrator applies it, and Telemetry forwarding has complete files.
The document has no metadata, because the installation has only one.
| Field | Type | What it is |
|---|---|---|
audit |
object, required | The exporters and processors the audit records go through. |
collector |
object, required | The OpenTelemetry Collector configuration of the forwarder: its extensions, processors, exporters and pipelines. A value written ${secret:<name>} is read from a platform secret. |
JSON schema of telemetry-forwarding
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "telemetry-forwarding",
"type": "object",
"properties": {
"apiVersion": {
"const": "weik.io/v1"
},
"kind": {
"const": "telemetry-forwarding"
},
"spec": {
"type": [
"object",
"null"
],
"properties": {
"audit": {
"type": "object",
"properties": {
"exporters": {
"type": "array",
"items": {
"type": [
"string",
"null"
]
}
},
"processors": {
"type": [
"array",
"null"
],
"items": {
"type": [
"string",
"null"
]
},
"default": null
}
},
"required": [
"exporters"
],
"additionalProperties": false
},
"collector": {
"type": "object"
}
},
"required": [
"audit",
"collector"
],
"additionalProperties": false
}
},
"required": [
"apiVersion",
"kind",
"spec"
],
"additionalProperties": false
}integration#
An integration is a folder of Camel files, and integration.yaml in the folder is optional. weikio init writes it with the fields at the top level, and the same fields can be written as a document under spec. The fields below are shared by every kind of integration, the generated kinds that follow included.
apiVersion: weik.io/v1
kind: integration
metadata: { name: erp-invoice-export }
spec:
version: 1.0.0
camelVersion: "4.22.1"
requirements: { os: linux }
dependencies:
- camel:jdbc
- mvn:com.microsoft.sqlserver:mssql-jdbc:12.8.1.jre11
kamelets: [erp-paging-source]Metadata: name, project.
| Field | Type | What it is |
|---|---|---|
version |
string | The version this folder publishes, such as 1.. Without it the first version is 0. and each apply with changed files publishes the next patch version. |
description |
string | What the integration does, shown in the admin UI. |
labels |
map | Labels as key and value. |
requirements |
map | The capabilities an agent needs to run the integration, such as os: linux or region: fi. |
variableDefaults |
map | Starting values for the integration’s own variables, used for a name that no value of the project and no properties file of the folder gives. |
camelVersion |
string | The Camel line to build on, such as 4.. Without it the build uses the installation’s default line. |
dependencies |
list of strings | Extra dependencies in Camel JBang’s form, such as camel:jdbc or mvn:com.. |
kamelets |
list of strings | The project’s shared kamelets the routes use. The folder’s own kamelets need no listing. |
jvm |
object | Java settings: options for the Java process, such as -, telemetry to turn telemetry on or off and traceSampling, the share of traces kept, from 0 to 1. |
startOffline |
boolean | Whether a site may start the integration from its saved state while the hub is out of reach. On by default. |
bundleRetention |
object | How many built versions to keep (keepVersions) and for how long (maxAge), in place of the installation’s setting. |
runtime |
string | The runtime, camel-, which is the only one. |
singleton |
boolean | Whether one copy at a time runs the routes that start by themselves. On by default for schedules, file transfers, change tracking and event sources. |
whenHubUnreachable |
one of keepLeading, standDown |
What the leading copy does while its agent can’t reach the hub: keepLeading, the default, or standDown, the default for change tracking. |
delivery |
object | How the events the integration reads are delivered to it: retries (1 to 100, 10 by default), retryDelays, maxRouteTime (10 minutes by default), inFlight (1 to 100, 1 by default) and ordered. |
JSON schema of integration
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "integration",
"type": "object",
"properties": {
"apiVersion": {
"const": "weik.io/v1"
},
"kind": {
"const": "integration"
},
"metadata": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"project": {
"type": "string"
}
},
"required": [
"name",
"project"
],
"additionalProperties": false
},
"spec": {
"type": "object",
"properties": {
"version": {
"type": [
"string",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"labels": {
"type": "object",
"additionalProperties": {
"type": [
"string",
"null"
]
}
},
"requirements": {
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"variableDefaults": {
"type": "object",
"additionalProperties": {
"type": [
"string",
"null"
]
}
},
"camelVersion": {
"type": [
"string",
"null"
]
},
"dependencies": {
"type": [
"array",
"null"
],
"items": {
"type": [
"string",
"null"
]
},
"default": null
},
"kamelets": {
"type": [
"array",
"null"
],
"items": {
"type": [
"string",
"null"
]
},
"default": null
},
"jvm": {
"type": [
"object",
"null"
],
"properties": {
"options": {
"type": "array",
"items": {
"type": [
"string",
"null"
]
}
},
"telemetry": {
"default": null
},
"traceSampling": {
"type": [
"string",
"number",
"null"
],
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
"default": null,
"minimum": 0,
"maximum": 1
}
},
"additionalProperties": false,
"default": null
},
"startOffline": {
"type": "boolean",
"default": true
},
"bundleRetention": {
"type": [
"object",
"null"
],
"properties": {
"keepVersions": {
"type": [
"string",
"integer"
],
"pattern": "^-?(?:0|[1-9]\\d*)$"
},
"maxAge": {
"type": [
"string",
"null"
],
"pattern": "^(0|([0-9]+y)?([0-9]+w)?([0-9]+d)?([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?)$",
"minLength": 1,
"description": "A duration: whole numbers, each with its unit y, w, d, h, m, s or ms, largest first, such as 30s, 1h30m or 7d."
}
},
"additionalProperties": false,
"default": null
},
"runtime": {
"type": "string",
"default": "camel-main"
},
"singleton": {
"type": [
"boolean",
"null"
],
"default": null
},
"whenHubUnreachable": {
"enum": [
"keepLeading",
"standDown",
null
],
"default": null
},
"delivery": {
"type": [
"object",
"null"
],
"properties": {
"retries": {
"type": [
"string",
"integer",
"null"
],
"pattern": "^-?(?:0|[1-9]\\d*)$",
"default": null,
"minimum": 1,
"maximum": 100
},
"retryDelays": {
"type": [
"array",
"null"
],
"items": {
"type": [
"string",
"null"
]
},
"default": null
},
"maxRouteTime": {
"type": [
"string",
"null"
],
"default": null
},
"inFlight": {
"type": [
"string",
"integer",
"null"
],
"pattern": "^-?(?:0|[1-9]\\d*)$",
"default": null,
"minimum": 1,
"maximum": 100
},
"ordered": {
"type": [
"boolean",
"null"
],
"default": null
}
},
"additionalProperties": false,
"default": null
}
},
"required": [],
"additionalProperties": false
}
},
"required": [
"apiVersion",
"kind",
"metadata",
"spec"
],
"additionalProperties": false
}mft#
A file transfer moves or copies files on a schedule between two places rclone can reach. Each remote is the name of a variable or secret that holds the remote’s rclone definition, or the definition written in place.
apiVersion: weik.io/v1
kind: mft
metadata: { name: supplier-invoices, project: finance }
spec:
schedule: "0 0 5 * * ?"
source: { remote: supplier-ftp, path: /outgoing }
destination: { remote: invoice-archive, path: invoices/incoming }
operation: move
filters: ["*.pdf"]Metadata: name, project.
The fields every integration has, from version to delivery, apply here too. The fields of this kind:
| Field | Type | What it is |
|---|---|---|
schedule |
string, required | When the transfer runs, as a Quartz cron expression in UTC. |
source |
object, required | Where the files come from: remote and path. |
destination |
object, required | Where the files go: remote and path. |
operation |
string, required | The rclone operation, such as copy, move or sync. |
filters |
any | rclone filters that pick the files, such as "*.. |
flags |
list of any | More rclone flags, one entry per argument. |
emitPerFile |
boolean | Whether to publish an event for every file beside the run summary, which is off by default. |
retries |
integer | How many times rclone tries within one run, from 0 to 10. |
retriesSleep |
string | How long rclone waits between tries, such as 30s. |
JSON schema of mft
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "mft",
"type": "object",
"properties": {
"apiVersion": {
"const": "weik.io/v1"
},
"kind": {
"const": "mft"
},
"metadata": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"project": {
"type": "string"
}
},
"required": [
"name",
"project"
],
"additionalProperties": false
},
"spec": {
"type": "object",
"properties": {
"version": {
"type": [
"string",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"labels": {
"type": "object",
"additionalProperties": {
"type": [
"string",
"null"
]
}
},
"requirements": {
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"variableDefaults": {
"type": "object",
"additionalProperties": {
"type": [
"string",
"null"
]
}
},
"camelVersion": {
"type": [
"string",
"null"
]
},
"dependencies": {
"type": [
"array",
"null"
],
"items": {
"type": [
"string",
"null"
]
},
"default": null
},
"kamelets": {
"type": [
"array",
"null"
],
"items": {
"type": [
"string",
"null"
]
},
"default": null
},
"jvm": {
"type": [
"object",
"null"
],
"properties": {
"options": {
"type": "array",
"items": {
"type": [
"string",
"null"
]
}
},
"telemetry": {
"default": null
},
"traceSampling": {
"type": [
"string",
"number",
"null"
],
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
"default": null,
"minimum": 0,
"maximum": 1
}
},
"additionalProperties": false,
"default": null
},
"startOffline": {
"type": "boolean",
"default": true
},
"bundleRetention": {
"type": [
"object",
"null"
],
"properties": {
"keepVersions": {
"type": [
"string",
"integer"
],
"pattern": "^-?(?:0|[1-9]\\d*)$"
},
"maxAge": {
"type": [
"string",
"null"
],
"pattern": "^(0|([0-9]+y)?([0-9]+w)?([0-9]+d)?([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?)$",
"minLength": 1,
"description": "A duration: whole numbers, each with its unit y, w, d, h, m, s or ms, largest first, such as 30s, 1h30m or 7d."
}
},
"additionalProperties": false,
"default": null
},
"runtime": {
"type": "string",
"default": "camel-main"
},
"singleton": {
"type": [
"boolean",
"null"
],
"default": null
},
"whenHubUnreachable": {
"enum": [
"keepLeading",
"standDown",
null
],
"default": null
},
"delivery": {
"type": [
"object",
"null"
],
"properties": {
"retries": {
"type": [
"string",
"integer",
"null"
],
"pattern": "^-?(?:0|[1-9]\\d*)$",
"default": null,
"minimum": 1,
"maximum": 100
},
"retryDelays": {
"type": [
"array",
"null"
],
"items": {
"type": [
"string",
"null"
]
},
"default": null
},
"maxRouteTime": {
"type": [
"string",
"null"
],
"default": null
},
"inFlight": {
"type": [
"string",
"integer",
"null"
],
"pattern": "^-?(?:0|[1-9]\\d*)$",
"default": null,
"minimum": 1,
"maximum": 100
},
"ordered": {
"type": [
"boolean",
"null"
],
"default": null
}
},
"additionalProperties": false,
"default": null
},
"schedule": {
"type": "string"
},
"source": {
"type": "object"
},
"destination": {
"type": "object"
},
"operation": {
"type": "string"
},
"filters": {},
"flags": {
"type": "array"
},
"emitPerFile": {
"type": "boolean"
},
"retries": {
"type": "integer"
},
"retriesSleep": {
"type": "string"
}
},
"required": [
"schedule",
"source",
"destination",
"operation"
],
"additionalProperties": false
}
},
"required": [
"apiVersion",
"kind",
"metadata",
"spec"
],
"additionalProperties": false
}schedule#
A schedule runs a command on an agent at set times, such as curl for a URL or a script the agent’s host has.
apiVersion: weik.io/v1
kind: schedule
metadata: { name: nightly-cleanup, project: finance }
spec:
cron: "0 30 1 * * ?"
command: curl
args: ["-fsS", "{{cleanup-url}}"]Metadata: name, project.
The fields every integration has, from version to delivery, apply here too. The fields of this kind:
| Field | Type | What it is |
|---|---|---|
cron |
string, required | When the command runs, as a Quartz cron expression in UTC. |
command |
string, required | The command to run. |
args |
list of any | The command’s arguments. |
JSON schema of schedule
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "schedule",
"type": "object",
"properties": {
"apiVersion": {
"const": "weik.io/v1"
},
"kind": {
"const": "schedule"
},
"metadata": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"project": {
"type": "string"
}
},
"required": [
"name",
"project"
],
"additionalProperties": false
},
"spec": {
"type": "object",
"properties": {
"version": {
"type": [
"string",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"labels": {
"type": "object",
"additionalProperties": {
"type": [
"string",
"null"
]
}
},
"requirements": {
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"variableDefaults": {
"type": "object",
"additionalProperties": {
"type": [
"string",
"null"
]
}
},
"camelVersion": {
"type": [
"string",
"null"
]
},
"dependencies": {
"type": [
"array",
"null"
],
"items": {
"type": [
"string",
"null"
]
},
"default": null
},
"kamelets": {
"type": [
"array",
"null"
],
"items": {
"type": [
"string",
"null"
]
},
"default": null
},
"jvm": {
"type": [
"object",
"null"
],
"properties": {
"options": {
"type": "array",
"items": {
"type": [
"string",
"null"
]
}
},
"telemetry": {
"default": null
},
"traceSampling": {
"type": [
"string",
"number",
"null"
],
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
"default": null,
"minimum": 0,
"maximum": 1
}
},
"additionalProperties": false,
"default": null
},
"startOffline": {
"type": "boolean",
"default": true
},
"bundleRetention": {
"type": [
"object",
"null"
],
"properties": {
"keepVersions": {
"type": [
"string",
"integer"
],
"pattern": "^-?(?:0|[1-9]\\d*)$"
},
"maxAge": {
"type": [
"string",
"null"
],
"pattern": "^(0|([0-9]+y)?([0-9]+w)?([0-9]+d)?([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?)$",
"minLength": 1,
"description": "A duration: whole numbers, each with its unit y, w, d, h, m, s or ms, largest first, such as 30s, 1h30m or 7d."
}
},
"additionalProperties": false,
"default": null
},
"runtime": {
"type": "string",
"default": "camel-main"
},
"singleton": {
"type": [
"boolean",
"null"
],
"default": null
},
"whenHubUnreachable": {
"enum": [
"keepLeading",
"standDown",
null
],
"default": null
},
"delivery": {
"type": [
"object",
"null"
],
"properties": {
"retries": {
"type": [
"string",
"integer",
"null"
],
"pattern": "^-?(?:0|[1-9]\\d*)$",
"default": null,
"minimum": 1,
"maximum": 100
},
"retryDelays": {
"type": [
"array",
"null"
],
"items": {
"type": [
"string",
"null"
]
},
"default": null
},
"maxRouteTime": {
"type": [
"string",
"null"
],
"default": null
},
"inFlight": {
"type": [
"string",
"integer",
"null"
],
"pattern": "^-?(?:0|[1-9]\\d*)$",
"default": null,
"minimum": 1,
"maximum": 100
},
"ordered": {
"type": [
"boolean",
"null"
],
"default": null
}
},
"additionalProperties": false,
"default": null
},
"cron": {
"type": "string"
},
"command": {
"type": "string"
},
"args": {
"type": "array"
}
},
"required": [
"cron",
"command"
],
"additionalProperties": false
}
},
"required": [
"apiVersion",
"kind",
"metadata",
"spec"
],
"additionalProperties": false
}event-channel#
A channel holds events that integrations publish and read. A channel with a type also delivers each event to a sink kamelet, such as Slack or HTTP.
apiVersion: weik.io/v1
kind: event-channel
metadata: { name: invoice-alerts, project: finance }
spec:
type: slack
parameters:
channel: "#invoices"
webhookUrl: "{{slack-webhook-url}}"Metadata: name, project.
The fields every integration has, from version to delivery, apply here too. The fields of this kind:
| Field | Type | What it is |
|---|---|---|
type |
string | The sink kamelet each event is delivered to, without its - suffix. Without a type the channel only stores events. |
parameters |
object | The sink kamelet’s parameters. |
retention |
string | How long events are kept: 30d, the environment’s default, or 0 for a channel that delivers without storing. |
JSON schema of event-channel
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "event-channel",
"type": "object",
"properties": {
"apiVersion": {
"const": "weik.io/v1"
},
"kind": {
"const": "event-channel"
},
"metadata": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"project": {
"type": "string"
}
},
"required": [
"name",
"project"
],
"additionalProperties": false
},
"spec": {
"type": "object",
"properties": {
"version": {
"type": [
"string",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"labels": {
"type": "object",
"additionalProperties": {
"type": [
"string",
"null"
]
}
},
"requirements": {
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"variableDefaults": {
"type": "object",
"additionalProperties": {
"type": [
"string",
"null"
]
}
},
"camelVersion": {
"type": [
"string",
"null"
]
},
"dependencies": {
"type": [
"array",
"null"
],
"items": {
"type": [
"string",
"null"
]
},
"default": null
},
"kamelets": {
"type": [
"array",
"null"
],
"items": {
"type": [
"string",
"null"
]
},
"default": null
},
"jvm": {
"type": [
"object",
"null"
],
"properties": {
"options": {
"type": "array",
"items": {
"type": [
"string",
"null"
]
}
},
"telemetry": {
"default": null
},
"traceSampling": {
"type": [
"string",
"number",
"null"
],
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
"default": null,
"minimum": 0,
"maximum": 1
}
},
"additionalProperties": false,
"default": null
},
"startOffline": {
"type": "boolean",
"default": true
},
"bundleRetention": {
"type": [
"object",
"null"
],
"properties": {
"keepVersions": {
"type": [
"string",
"integer"
],
"pattern": "^-?(?:0|[1-9]\\d*)$"
},
"maxAge": {
"type": [
"string",
"null"
],
"pattern": "^(0|([0-9]+y)?([0-9]+w)?([0-9]+d)?([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?)$",
"minLength": 1,
"description": "A duration: whole numbers, each with its unit y, w, d, h, m, s or ms, largest first, such as 30s, 1h30m or 7d."
}
},
"additionalProperties": false,
"default": null
},
"runtime": {
"type": "string",
"default": "camel-main"
},
"singleton": {
"type": [
"boolean",
"null"
],
"default": null
},
"whenHubUnreachable": {
"enum": [
"keepLeading",
"standDown",
null
],
"default": null
},
"delivery": {
"type": [
"object",
"null"
],
"properties": {
"retries": {
"type": [
"string",
"integer",
"null"
],
"pattern": "^-?(?:0|[1-9]\\d*)$",
"default": null,
"minimum": 1,
"maximum": 100
},
"retryDelays": {
"type": [
"array",
"null"
],
"items": {
"type": [
"string",
"null"
]
},
"default": null
},
"maxRouteTime": {
"type": [
"string",
"null"
],
"default": null
},
"inFlight": {
"type": [
"string",
"integer",
"null"
],
"pattern": "^-?(?:0|[1-9]\\d*)$",
"default": null,
"minimum": 1,
"maximum": 100
},
"ordered": {
"type": [
"boolean",
"null"
],
"default": null
}
},
"additionalProperties": false,
"default": null
},
"type": {
"type": "string"
},
"parameters": {
"type": "object"
},
"retention": {
"type": "string"
}
},
"required": [],
"additionalProperties": false
}
},
"required": [
"apiVersion",
"kind",
"metadata",
"spec"
],
"additionalProperties": false
}event-source#
An event source brings events in from another system through a source kamelet, such as files arriving in an S3 bucket.
apiVersion: weik.io/v1
kind: event-source
metadata: { name: invoice-files, project: finance }
spec:
type: aws-s3
parameters:
bucketNameOrArn: "{{invoice-bucket}}"
accessKey: "{{aws-access-key}}"
secretKey: "{{aws-secret-key}}"
region: eu-north-1Metadata: name, project.
The fields every integration has, from version to delivery, apply here too. The fields of this kind:
| Field | Type | What it is |
|---|---|---|
type |
string, required | The source kamelet, without its - suffix. |
parameters |
object | The source kamelet’s parameters. |
steps |
list of any | Steps each event goes through before it is published. |
errorHandler |
any | What happens to an event that fails. |
JSON schema of event-source
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "event-source",
"type": "object",
"properties": {
"apiVersion": {
"const": "weik.io/v1"
},
"kind": {
"const": "event-source"
},
"metadata": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"project": {
"type": "string"
}
},
"required": [
"name",
"project"
],
"additionalProperties": false
},
"spec": {
"type": "object",
"properties": {
"version": {
"type": [
"string",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"labels": {
"type": "object",
"additionalProperties": {
"type": [
"string",
"null"
]
}
},
"requirements": {
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"variableDefaults": {
"type": "object",
"additionalProperties": {
"type": [
"string",
"null"
]
}
},
"camelVersion": {
"type": [
"string",
"null"
]
},
"dependencies": {
"type": [
"array",
"null"
],
"items": {
"type": [
"string",
"null"
]
},
"default": null
},
"kamelets": {
"type": [
"array",
"null"
],
"items": {
"type": [
"string",
"null"
]
},
"default": null
},
"jvm": {
"type": [
"object",
"null"
],
"properties": {
"options": {
"type": "array",
"items": {
"type": [
"string",
"null"
]
}
},
"telemetry": {
"default": null
},
"traceSampling": {
"type": [
"string",
"number",
"null"
],
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
"default": null,
"minimum": 0,
"maximum": 1
}
},
"additionalProperties": false,
"default": null
},
"startOffline": {
"type": "boolean",
"default": true
},
"bundleRetention": {
"type": [
"object",
"null"
],
"properties": {
"keepVersions": {
"type": [
"string",
"integer"
],
"pattern": "^-?(?:0|[1-9]\\d*)$"
},
"maxAge": {
"type": [
"string",
"null"
],
"pattern": "^(0|([0-9]+y)?([0-9]+w)?([0-9]+d)?([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?)$",
"minLength": 1,
"description": "A duration: whole numbers, each with its unit y, w, d, h, m, s or ms, largest first, such as 30s, 1h30m or 7d."
}
},
"additionalProperties": false,
"default": null
},
"runtime": {
"type": "string",
"default": "camel-main"
},
"singleton": {
"type": [
"boolean",
"null"
],
"default": null
},
"whenHubUnreachable": {
"enum": [
"keepLeading",
"standDown",
null
],
"default": null
},
"delivery": {
"type": [
"object",
"null"
],
"properties": {
"retries": {
"type": [
"string",
"integer",
"null"
],
"pattern": "^-?(?:0|[1-9]\\d*)$",
"default": null,
"minimum": 1,
"maximum": 100
},
"retryDelays": {
"type": [
"array",
"null"
],
"items": {
"type": [
"string",
"null"
]
},
"default": null
},
"maxRouteTime": {
"type": [
"string",
"null"
],
"default": null
},
"inFlight": {
"type": [
"string",
"integer",
"null"
],
"pattern": "^-?(?:0|[1-9]\\d*)$",
"default": null,
"minimum": 1,
"maximum": 100
},
"ordered": {
"type": [
"boolean",
"null"
],
"default": null
}
},
"additionalProperties": false,
"default": null
},
"type": {
"type": "string"
},
"parameters": {
"type": "object"
},
"steps": {
"type": "array"
},
"errorHandler": {}
},
"required": [
"type"
],
"additionalProperties": false
}
},
"required": [
"apiVersion",
"kind",
"metadata",
"spec"
],
"additionalProperties": false
}event-subscription#
An event subscription sends the events of an event source or a channel to another channel, optionally filtered and changed on the way.
apiVersion: weik.io/v1
kind: event-subscription
metadata: { name: alert-on-invoices, project: finance }
spec:
source: invoice-created
channel: invoice-alerts
filter:
headers: { Weikio-Source: finance/erp-invoice-export }Metadata: name, project.
The fields every integration has, from version to delivery, apply here too. The fields of this kind:
| Field | Type | What it is |
|---|---|---|
source |
string, required | The event source or channel the events come from. |
channel |
string, required | The channel the events go to. |
steps |
list of any | Steps each event goes through. |
filter |
object | Which events pass, such as by header. |
errorHandler |
any | What happens to an event that fails. |
JSON schema of event-subscription
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "event-subscription",
"type": "object",
"properties": {
"apiVersion": {
"const": "weik.io/v1"
},
"kind": {
"const": "event-subscription"
},
"metadata": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"project": {
"type": "string"
}
},
"required": [
"name",
"project"
],
"additionalProperties": false
},
"spec": {
"type": "object",
"properties": {
"version": {
"type": [
"string",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"labels": {
"type": "object",
"additionalProperties": {
"type": [
"string",
"null"
]
}
},
"requirements": {
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"variableDefaults": {
"type": "object",
"additionalProperties": {
"type": [
"string",
"null"
]
}
},
"camelVersion": {
"type": [
"string",
"null"
]
},
"dependencies": {
"type": [
"array",
"null"
],
"items": {
"type": [
"string",
"null"
]
},
"default": null
},
"kamelets": {
"type": [
"array",
"null"
],
"items": {
"type": [
"string",
"null"
]
},
"default": null
},
"jvm": {
"type": [
"object",
"null"
],
"properties": {
"options": {
"type": "array",
"items": {
"type": [
"string",
"null"
]
}
},
"telemetry": {
"default": null
},
"traceSampling": {
"type": [
"string",
"number",
"null"
],
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
"default": null,
"minimum": 0,
"maximum": 1
}
},
"additionalProperties": false,
"default": null
},
"startOffline": {
"type": "boolean",
"default": true
},
"bundleRetention": {
"type": [
"object",
"null"
],
"properties": {
"keepVersions": {
"type": [
"string",
"integer"
],
"pattern": "^-?(?:0|[1-9]\\d*)$"
},
"maxAge": {
"type": [
"string",
"null"
],
"pattern": "^(0|([0-9]+y)?([0-9]+w)?([0-9]+d)?([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?)$",
"minLength": 1,
"description": "A duration: whole numbers, each with its unit y, w, d, h, m, s or ms, largest first, such as 30s, 1h30m or 7d."
}
},
"additionalProperties": false,
"default": null
},
"runtime": {
"type": "string",
"default": "camel-main"
},
"singleton": {
"type": [
"boolean",
"null"
],
"default": null
},
"whenHubUnreachable": {
"enum": [
"keepLeading",
"standDown",
null
],
"default": null
},
"delivery": {
"type": [
"object",
"null"
],
"properties": {
"retries": {
"type": [
"string",
"integer",
"null"
],
"pattern": "^-?(?:0|[1-9]\\d*)$",
"default": null,
"minimum": 1,
"maximum": 100
},
"retryDelays": {
"type": [
"array",
"null"
],
"items": {
"type": [
"string",
"null"
]
},
"default": null
},
"maxRouteTime": {
"type": [
"string",
"null"
],
"default": null
},
"inFlight": {
"type": [
"string",
"integer",
"null"
],
"pattern": "^-?(?:0|[1-9]\\d*)$",
"default": null,
"minimum": 1,
"maximum": 100
},
"ordered": {
"type": [
"boolean",
"null"
],
"default": null
}
},
"additionalProperties": false,
"default": null
},
"source": {
"type": "string"
},
"channel": {
"type": "string"
},
"steps": {
"type": "array"
},
"filter": {
"type": "object"
},
"errorHandler": {}
},
"required": [
"source",
"channel"
],
"additionalProperties": false
}
},
"required": [
"apiVersion",
"kind",
"metadata",
"spec"
],
"additionalProperties": false
}change-tracking#
Change tracking publishes the changes of a database’s tables as events, with Debezium. type picks the connector, such as postgres, mysql, sqlserver, oracle, mongodb or db2.
apiVersion: weik.io/v1
kind: change-tracking
metadata: { name: order-changes, project: shop }
spec:
type: postgres
databaseHostname: "{{orders-db-host}}"
databasePort: 5432
databaseDbname: orders
databaseUser: "{{orders-db-user}}"
databasePassword: "{{orders-db-password}}"
parameters:
additionalProperties.offset.storage.jdbc.connection.url: "jdbc:postgresql://{{orders-db-host}}:5432/orders"
additionalProperties.offset.storage.jdbc.connection.user: "{{orders-db-user}}"
additionalProperties.offset.storage.jdbc.connection.password: "{{orders-db-password}}"
offsetTable: weikio_offsets
channel: order-changedMetadata: name, project.
The fields every integration has, from version to delivery, apply here too. The fields of this kind:
| Field | Type | What it is |
|---|---|---|
type |
string, required | The Debezium connector. |
databaseHostname |
string | The database server’s host name. |
databasePort |
any | The database server’s port. |
databaseDbname |
string | The database. |
databaseUser |
string | The user the connector signs in as. |
databasePassword |
string | The user’s password, usually a placeholder for a secret. |
parameters |
object, required | The connector’s other settings, among them the JDBC connection of the table where it keeps its place. |
offsetTable |
string, required | The table where the connector keeps its place in the change log. |
channel |
string, required | The channel the changes are published to. |
JSON schema of change-tracking
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "change-tracking",
"type": "object",
"properties": {
"apiVersion": {
"const": "weik.io/v1"
},
"kind": {
"const": "change-tracking"
},
"metadata": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"project": {
"type": "string"
}
},
"required": [
"name",
"project"
],
"additionalProperties": false
},
"spec": {
"type": "object",
"properties": {
"version": {
"type": [
"string",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"labels": {
"type": "object",
"additionalProperties": {
"type": [
"string",
"null"
]
}
},
"requirements": {
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"variableDefaults": {
"type": "object",
"additionalProperties": {
"type": [
"string",
"null"
]
}
},
"camelVersion": {
"type": [
"string",
"null"
]
},
"dependencies": {
"type": [
"array",
"null"
],
"items": {
"type": [
"string",
"null"
]
},
"default": null
},
"kamelets": {
"type": [
"array",
"null"
],
"items": {
"type": [
"string",
"null"
]
},
"default": null
},
"jvm": {
"type": [
"object",
"null"
],
"properties": {
"options": {
"type": "array",
"items": {
"type": [
"string",
"null"
]
}
},
"telemetry": {
"default": null
},
"traceSampling": {
"type": [
"string",
"number",
"null"
],
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
"default": null,
"minimum": 0,
"maximum": 1
}
},
"additionalProperties": false,
"default": null
},
"startOffline": {
"type": "boolean",
"default": true
},
"bundleRetention": {
"type": [
"object",
"null"
],
"properties": {
"keepVersions": {
"type": [
"string",
"integer"
],
"pattern": "^-?(?:0|[1-9]\\d*)$"
},
"maxAge": {
"type": [
"string",
"null"
],
"pattern": "^(0|([0-9]+y)?([0-9]+w)?([0-9]+d)?([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?)$",
"minLength": 1,
"description": "A duration: whole numbers, each with its unit y, w, d, h, m, s or ms, largest first, such as 30s, 1h30m or 7d."
}
},
"additionalProperties": false,
"default": null
},
"runtime": {
"type": "string",
"default": "camel-main"
},
"singleton": {
"type": [
"boolean",
"null"
],
"default": null
},
"whenHubUnreachable": {
"enum": [
"keepLeading",
"standDown",
null
],
"default": null
},
"delivery": {
"type": [
"object",
"null"
],
"properties": {
"retries": {
"type": [
"string",
"integer",
"null"
],
"pattern": "^-?(?:0|[1-9]\\d*)$",
"default": null,
"minimum": 1,
"maximum": 100
},
"retryDelays": {
"type": [
"array",
"null"
],
"items": {
"type": [
"string",
"null"
]
},
"default": null
},
"maxRouteTime": {
"type": [
"string",
"null"
],
"default": null
},
"inFlight": {
"type": [
"string",
"integer",
"null"
],
"pattern": "^-?(?:0|[1-9]\\d*)$",
"default": null,
"minimum": 1,
"maximum": 100
},
"ordered": {
"type": [
"boolean",
"null"
],
"default": null
}
},
"additionalProperties": false,
"default": null
},
"type": {
"type": "string"
},
"databaseHostname": {
"type": "string"
},
"databasePort": {},
"databaseDbname": {
"type": "string"
},
"databaseUser": {
"type": "string"
},
"databasePassword": {
"type": "string"
},
"parameters": {
"type": "object",
"properties": {
"additionalProperties.offset.storage.jdbc.connection.url": {
"type": [
"string",
"number",
"boolean"
]
},
"additionalProperties.offset.storage.jdbc.connection.user": {
"type": [
"string",
"number",
"boolean"
]
},
"additionalProperties.offset.storage.jdbc.connection.password": {
"type": [
"string",
"number",
"boolean"
]
}
},
"required": [
"additionalProperties.offset.storage.jdbc.connection.url",
"additionalProperties.offset.storage.jdbc.connection.user",
"additionalProperties.offset.storage.jdbc.connection.password"
]
},
"offsetTable": {
"type": "string"
},
"channel": {
"type": "string"
}
},
"required": [
"type",
"parameters",
"offsetTable",
"channel"
],
"additionalProperties": false
}
},
"required": [
"apiVersion",
"kind",
"metadata",
"spec"
],
"additionalProperties": false
}variable#
A variable is a configuration value that routes read as a Camel property. Without an environment it’s the default, and with one it overrides the default there. With integration in its metadata it belongs to one integration.
apiVersion: weik.io/v1
kind: variable
metadata: { name: erp-url, project: finance, environment: production }
spec: { value: https://erp.example.internal }Metadata: name, project, environment, integration.
| Field | Type | What it is |
|---|---|---|
description |
string | What the value is for. |
value |
string, required | The value. |
JSON schema of variable
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "variable",
"type": "object",
"properties": {
"apiVersion": {
"const": "weik.io/v1"
},
"kind": {
"const": "variable"
},
"metadata": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"project": {
"type": "string"
},
"environment": {
"type": "string"
},
"integration": {
"type": "string"
}
},
"required": [
"name",
"project"
],
"additionalProperties": false
},
"spec": {
"type": [
"object",
"null"
],
"properties": {
"description": {
"type": [
"string",
"null"
]
},
"value": {
"type": "string"
}
},
"required": [
"value"
],
"additionalProperties": false
}
},
"required": [
"apiVersion",
"kind",
"metadata",
"spec"
],
"additionalProperties": false
}secret#
A secret has the same shape as a variable, but its value is stored encrypted and never listed. Values are set with weikio secret set so they stay out of Git, and an exported secret has no value.
Metadata: name, project, environment, integration.
| Field | Type | What it is |
|---|---|---|
description |
string | What the secret is for. |
value |
string | The value in plain text, which the hub stores encrypted. |
format |
string | file for a file of up to 128 KiB, such as a keystore, which routes read from a path. |
JSON schema of secret
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "secret",
"type": "object",
"properties": {
"apiVersion": {
"const": "weik.io/v1"
},
"kind": {
"const": "secret"
},
"metadata": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"project": {
"type": "string"
},
"environment": {
"type": "string"
},
"integration": {
"type": "string"
}
},
"required": [
"name",
"project"
],
"additionalProperties": false
},
"spec": {
"type": [
"object",
"null"
],
"properties": {
"description": {
"type": [
"string",
"null"
]
},
"value": {
"type": "string",
"writeOnly": true,
"description": "The secret's value, unsealed: the text itself, or, when `format` is `file`, the file's bytes in base64. A write must send it, not empty. Every read returns it empty; only the reveal routes return it. An export leaves it out."
},
"format": {
"type": [
"string",
"null"
],
"default": null
}
},
"additionalProperties": false
}
},
"required": [
"apiVersion",
"kind",
"metadata",
"spec"
],
"additionalProperties": false
}kamelet#
A kamelet shared by the integrations of a project. A kamelet in an integration’s own folder needs no document.
Metadata: name, project.
| Field | Type | What it is |
|---|---|---|
yaml |
string, required | The kamelet’s YAML. |
JSON schema of kamelet
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "kamelet",
"type": "object",
"properties": {
"apiVersion": {
"const": "weik.io/v1"
},
"kind": {
"const": "kamelet"
},
"metadata": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"project": {
"type": "string"
}
},
"required": [
"name",
"project"
],
"additionalProperties": false
},
"spec": {
"type": [
"object",
"null"
],
"properties": {
"yaml": {
"type": "string"
}
},
"required": [
"yaml"
],
"additionalProperties": false
}
},
"required": [
"apiVersion",
"kind",
"metadata",
"spec"
],
"additionalProperties": false
}deployment#
A deployment says which version of an integration runs in an environment. In Git, each environment’s folder has one deployment document per integration.
apiVersion: weik.io/v1
kind: deployment
metadata: { name: erp-invoice-export, project: finance, environment: production }
spec: { version: 1.1.0, state: started }Metadata: name, project, environment.
| Field | Type | What it is |
|---|---|---|
version |
string, required | The version to run, or latest where the environment allows it. |
state |
one of unknown, started, stopped |
started or stopped. |
variableOverrides |
map | Values for this deployment only, which beat every other value of the same name. |
jvm |
object | Java settings for this deployment, in place of the integration’s. |
trustedCertificates |
list of strings | PEM certificates this deployment trusts, added to the environment’s. |
singleton |
boolean | Overrides the integration’s singleton. |
whenHubUnreachable |
one of keepLeading, standDown |
Overrides the integration’s whenHubUnreachable. |
delivery |
object | Overrides the integration’s delivery, and adds maxPending, how many events may wait for an answer at once. |
JSON schema of deployment
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "deployment",
"type": "object",
"properties": {
"apiVersion": {
"const": "weik.io/v1"
},
"kind": {
"const": "deployment"
},
"metadata": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"project": {
"type": "string"
},
"environment": {
"type": "string"
}
},
"required": [
"name",
"project",
"environment"
],
"additionalProperties": false
},
"spec": {
"type": [
"object",
"null"
],
"properties": {
"version": {
"type": "string"
},
"state": {
"enum": [
"unknown",
"started",
"stopped"
]
},
"variableOverrides": {
"type": "object",
"additionalProperties": {
"type": [
"string",
"null"
]
}
},
"jvm": {
"type": [
"object",
"null"
],
"properties": {
"options": {
"type": "array",
"items": {
"type": [
"string",
"null"
]
}
},
"telemetry": {
"default": null
},
"traceSampling": {
"type": [
"string",
"number",
"null"
],
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
"default": null,
"minimum": 0,
"maximum": 1
}
},
"additionalProperties": false,
"default": null
},
"trustedCertificates": {
"type": [
"array",
"null"
],
"items": {
"type": [
"string",
"null"
]
},
"default": null
},
"singleton": {
"type": [
"boolean",
"null"
],
"default": null
},
"whenHubUnreachable": {
"enum": [
"keepLeading",
"standDown",
null
],
"default": null
},
"delivery": {
"type": [
"object",
"null"
],
"properties": {
"retries": {
"type": [
"string",
"integer",
"null"
],
"pattern": "^-?(?:0|[1-9]\\d*)$",
"default": null,
"minimum": 1,
"maximum": 100
},
"retryDelays": {
"type": [
"array",
"null"
],
"items": {
"type": [
"string",
"null"
]
},
"default": null
},
"maxRouteTime": {
"type": [
"string",
"null"
],
"default": null
},
"inFlight": {
"type": [
"string",
"integer",
"null"
],
"pattern": "^-?(?:0|[1-9]\\d*)$",
"default": null,
"minimum": 1,
"maximum": 100
},
"ordered": {
"type": [
"boolean",
"null"
],
"default": null
},
"maxPending": {
"type": [
"string",
"integer",
"null"
],
"pattern": "^-?(?:0|[1-9]\\d*)$",
"default": null,
"minimum": 1,
"maximum": 10000
}
},
"additionalProperties": false,
"default": null
}
},
"required": [
"version"
],
"additionalProperties": false
}
},
"required": [
"apiVersion",
"kind",
"metadata",
"spec"
],
"additionalProperties": false
}gateway#
A gateway is an entrance of one environment: its hostnames, who may call it, its client certificate rules, its rate limits and where its certificates come from. A platform administrator writes gateways.
Metadata: name.
| Field | Type | What it is |
|---|---|---|
displayName |
string | The name the admin UI shows. |
environment |
string, required | The environment the gateway serves. |
hostnames |
list of strings | The hostnames callers use. |
servedBy |
string | hub, or site for the APIM instances of sites labelled with the gateway. |
default |
boolean | Makes it a default gateway for the deployments and subscriptions of its projects that don’t choose one. |
projects |
list of strings | The projects that may use the gateway, and every project when the list is empty. |
entrances |
list of strings, required | The entrances the gateway is served on. |
networks |
list of strings, required | Who may call: internet, or address ranges such as 10.. |
clientCertificate |
object | mode, which is none, optional or required, and the authorities whose client certificates the gateway accepts. |
callerLimit |
object | Calls allowed per caller address, as permitLimit per window. |
subscriptionLimit |
object | Calls allowed per subscription that has no limit of its own. |
upstreams |
object | networks, the address ranges its APIs may call. |
maxRequestSize |
string | The largest request body it accepts. |
relayFrom |
list of strings | The hub gateways of the same environment that may relay calls into this site gateway. |
certificateSource |
string | Who signs its hostnames: automatic, public, platform, uploaded or a certificate authority’s name. |
serverCertificates |
list of objects | Uploaded certificates, each with a name, a chain and a key. |
JSON schema of gateway
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "gateway",
"type": "object",
"properties": {
"apiVersion": {
"const": "weik.io/v1"
},
"kind": {
"const": "gateway"
},
"metadata": {
"type": "object",
"properties": {
"name": {
"type": "string"
}
},
"required": [
"name"
],
"additionalProperties": false
},
"spec": {
"type": [
"object",
"null"
],
"properties": {
"displayName": {
"type": [
"string",
"null"
]
},
"environment": {
"type": [
"string",
"null"
]
},
"hostnames": {
"type": [
"array",
"null"
],
"items": {
"type": [
"string",
"null"
]
}
},
"servedBy": {
"type": [
"string",
"null"
]
},
"default": {
"type": "boolean"
},
"projects": {
"type": [
"array",
"null"
],
"items": {
"type": [
"string",
"null"
]
}
},
"entrances": {
"type": [
"array",
"null"
],
"items": {
"type": [
"string",
"null"
]
}
},
"networks": {
"type": [
"array",
"null"
],
"items": {
"type": [
"string",
"null"
]
}
},
"clientCertificate": {
"type": [
"object",
"null"
],
"properties": {
"mode": {
"type": "string"
},
"authorities": {
"type": [
"array",
"null"
],
"items": {
"type": [
"object",
"null"
],
"properties": {
"name": {
"type": "string"
},
"certificates": {
"type": "array",
"items": {
"type": [
"string",
"null"
]
}
},
"revoked": {
"type": [
"array",
"null"
],
"items": {
"type": [
"string",
"null"
]
}
}
},
"required": [
"name",
"certificates"
],
"additionalProperties": false
}
}
},
"required": [
"mode"
],
"additionalProperties": false,
"default": null
},
"callerLimit": {
"type": [
"object",
"null"
],
"properties": {
"permitLimit": {
"type": [
"string",
"integer"
],
"pattern": "^-?(?:0|[1-9]\\d*)$"
},
"window": {
"type": "string",
"pattern": "^(0|([0-9]+y)?([0-9]+w)?([0-9]+d)?([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?)$",
"minLength": 1,
"description": "A duration: whole numbers, each with its unit y, w, d, h, m, s or ms, largest first, such as 30s, 1h30m or 7d."
}
},
"required": [
"permitLimit",
"window"
],
"additionalProperties": false,
"default": null
},
"subscriptionLimit": {
"type": [
"object",
"null"
],
"properties": {
"permitLimit": {
"type": [
"string",
"integer"
],
"pattern": "^-?(?:0|[1-9]\\d*)$"
},
"window": {
"type": "string",
"pattern": "^(0|([0-9]+y)?([0-9]+w)?([0-9]+d)?([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?)$",
"minLength": 1,
"description": "A duration: whole numbers, each with its unit y, w, d, h, m, s or ms, largest first, such as 30s, 1h30m or 7d."
}
},
"required": [
"permitLimit",
"window"
],
"additionalProperties": false,
"default": null
},
"upstreams": {
"type": [
"object",
"null"
],
"properties": {
"networks": {
"type": "array",
"items": {
"type": [
"string",
"null"
]
}
}
},
"additionalProperties": false,
"default": null
},
"maxRequestSize": {
"type": [
"string",
"null"
],
"default": null
},
"relayFrom": {
"type": [
"array",
"null"
],
"items": {
"type": [
"string",
"null"
]
},
"default": null
},
"certificateSource": {
"type": [
"string",
"null"
],
"default": null
},
"serverCertificates": {
"type": [
"array",
"null"
],
"items": {
"type": [
"object",
"null"
],
"properties": {
"name": {
"type": "string"
},
"chain": {
"type": "string"
},
"key": {
"type": [
"string",
"null"
],
"default": null,
"writeOnly": true,
"description": "The certificate's private key in PEM, required when the certificate isn't stored yet. An entry sent without it keeps the stored key of the certificate of the same name and chain. The platform never returns a stored key."
}
},
"required": [
"name",
"chain"
],
"additionalProperties": false
},
"default": null
}
},
"required": [
"environment",
"entrances",
"networks"
],
"additionalProperties": false
}
},
"required": [
"apiVersion",
"kind",
"metadata",
"spec"
],
"additionalProperties": false
}api#
An API is the name and path prefix callers know, and its versions hold the definitions.
apiVersion: weik.io/v1
kind: api
metadata: { name: invoices, project: finance }
spec: { displayName: Invoice API, prefix: /invoices }Metadata: name, project.
| Field | Type | What it is |
|---|---|---|
displayName |
string | The name the admin UI shows. |
description |
string | What the API is for. |
prefix |
string, required | The path prefix the API is served under. |
JSON schema of api
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "api",
"type": "object",
"properties": {
"apiVersion": {
"const": "weik.io/v1"
},
"kind": {
"const": "api"
},
"metadata": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"project": {
"type": "string"
}
},
"required": [
"name",
"project"
],
"additionalProperties": false
},
"spec": {
"type": [
"object",
"null"
],
"properties": {
"displayName": {
"type": [
"string",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"prefix": {
"type": "string"
}
},
"required": [
"prefix"
],
"additionalProperties": false
}
},
"required": [
"apiVersion",
"kind",
"metadata",
"spec"
],
"additionalProperties": false
}api-version#
An API version is one definition of an API. A proxy version forwards calls to upstreams with YARP’s own route and cluster configuration, and a webhook version publishes each call to a channel.
apiVersion: weik.io/v1
kind: api-version
metadata: { name: v1, project: finance, api: invoices }
spec:
type: proxy
rateLimit: { permitLimit: 600, window: 1m }
routes:
- RouteId: pending
Match: { Path: "/{**rest}" }
ClusterId: erp
clusters:
- ClusterId: erp
LoadBalancingPolicy: RoundRobin
Destinations:
erp: { Address: "{{erp-url}}/api/invoices" }Metadata: name, project, api.
| Field | Type | What it is |
|---|---|---|
type |
string, required | proxy or webhook. |
routes |
list of any | YARP’s RouteConfig, as YARP writes it. |
clusters |
list of any | YARP’s ClusterConfig, as YARP writes it. |
rateLimit |
object | Calls allowed, as permitLimit per window. |
channel |
string | The channel a webhook version publishes to. |
openApi |
any | The version’s OpenAPI document. |
openApiDigest |
string | The digest of the stored OpenAPI document. |
authentication |
object | How the gateway signs in to the upstream, with a type and its parameters. |
connection |
object | Connection settings for the upstream: useProxy, allowAutoRedirect, automaticDecompression, useCookies, connectTimeout and a client certificate. |
JSON schema of api-version
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "api-version",
"type": "object",
"properties": {
"apiVersion": {
"const": "weik.io/v1"
},
"kind": {
"const": "api-version"
},
"metadata": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"project": {
"type": "string"
},
"api": {
"type": "string"
}
},
"required": [
"name",
"project",
"api"
],
"additionalProperties": false
},
"spec": {
"type": [
"object",
"null"
],
"properties": {
"type": {
"type": "string"
},
"routes": {
"type": "array"
},
"clusters": {
"type": "array"
},
"rateLimit": {
"type": [
"object",
"null"
],
"properties": {
"permitLimit": {
"type": [
"string",
"integer"
],
"pattern": "^-?(?:0|[1-9]\\d*)$"
},
"window": {
"type": "string",
"pattern": "^(0|([0-9]+y)?([0-9]+w)?([0-9]+d)?([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?)$",
"minLength": 1,
"description": "A duration: whole numbers, each with its unit y, w, d, h, m, s or ms, largest first, such as 30s, 1h30m or 7d."
}
},
"required": [
"permitLimit",
"window"
],
"additionalProperties": false
},
"channel": {
"type": [
"string",
"null"
]
},
"openApi": true,
"openApiDigest": {
"type": [
"string",
"null"
]
},
"authentication": {
"type": [
"object",
"null"
],
"properties": {
"type": {
"type": "string"
},
"parameters": {
"type": "object",
"additionalProperties": {
"type": [
"string",
"null"
]
}
},
"additionalParameters": {
"type": [
"object",
"null"
],
"additionalProperties": {
"type": [
"string",
"null"
]
},
"default": null
}
},
"additionalProperties": false,
"default": null
},
"connection": {
"type": [
"object",
"null"
],
"properties": {
"useProxy": {
"type": [
"boolean",
"null"
]
},
"allowAutoRedirect": {
"type": [
"boolean",
"null"
]
},
"automaticDecompression": {
"type": [
"string",
"null"
]
},
"useCookies": {
"type": [
"boolean",
"null"
]
},
"connectTimeout": {
"type": [
"string",
"null"
],
"pattern": "^(0|([0-9]+y)?([0-9]+w)?([0-9]+d)?([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?)$",
"minLength": 1,
"description": "A duration: whole numbers, each with its unit y, w, d, h, m, s or ms, largest first, such as 30s, 1h30m or 7d."
},
"clientCertificate": {
"oneOf": [
{
"type": "string"
},
{
"type": "object",
"properties": {
"issuedBy": {
"type": "string"
},
"name": {
"type": "string"
}
},
"required": [
"issuedBy"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"clientCertificatePassword": {
"type": [
"string",
"null"
]
},
"trustEnvironmentCertificates": {
"type": [
"boolean",
"null"
]
}
},
"additionalProperties": false,
"default": null
}
},
"required": [
"type"
],
"additionalProperties": false
}
},
"required": [
"apiVersion",
"kind",
"metadata",
"spec"
],
"additionalProperties": false
}api-deployment#
An API deployment serves one API version in one environment on one or more gateways. It keeps the definition it serves, so a later edit of the version reaches no gateway until it’s deployed again.
Metadata: name, project, environment, api.
| Field | Type | What it is |
|---|---|---|
gateways |
list of strings | The gateways that serve the version. |
variableOverrides |
map | Values for this deployment only. |
rules |
map | Stricter rules per gateway: networks, client certificates and limits. |
via |
map | The hub gateway each site gateway is reached through. |
definition |
object | The definition this deployment serves. |
previous |
object | The definition it served before, which weikio api rollback returns to. |
JSON schema of api-deployment
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "api-deployment",
"type": "object",
"properties": {
"apiVersion": {
"const": "weik.io/v1"
},
"kind": {
"const": "api-deployment"
},
"metadata": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"project": {
"type": "string"
},
"environment": {
"type": "string"
},
"api": {
"type": "string"
}
},
"required": [
"name",
"project",
"environment",
"api"
],
"additionalProperties": false
},
"spec": {
"type": [
"object",
"null"
],
"properties": {
"gateways": {
"type": [
"array",
"null"
],
"items": {
"type": [
"string",
"null"
]
}
},
"variableOverrides": {
"type": [
"object",
"null"
],
"additionalProperties": {
"type": [
"string",
"null"
]
},
"default": null
},
"rules": {
"type": [
"object",
"null"
],
"additionalProperties": {
"type": [
"object",
"null"
],
"properties": {
"networks": {
"type": [
"array",
"null"
],
"items": {
"type": [
"string",
"null"
]
},
"default": null
},
"clientCertificate": {
"type": [
"object",
"null"
],
"properties": {
"mode": {
"type": "string"
},
"authorities": {
"type": [
"array",
"null"
],
"items": {
"type": [
"string",
"null"
]
}
}
},
"required": [
"mode"
],
"additionalProperties": false,
"default": null
},
"callerLimit": {
"type": [
"object",
"null"
],
"properties": {
"permitLimit": {
"type": [
"string",
"integer"
],
"pattern": "^-?(?:0|[1-9]\\d*)$"
},
"window": {
"type": "string",
"pattern": "^(0|([0-9]+y)?([0-9]+w)?([0-9]+d)?([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?)$",
"minLength": 1,
"description": "A duration: whole numbers, each with its unit y, w, d, h, m, s or ms, largest first, such as 30s, 1h30m or 7d."
}
},
"required": [
"permitLimit",
"window"
],
"additionalProperties": false,
"default": null
},
"subscriptionLimit": {
"type": [
"object",
"null"
],
"properties": {
"permitLimit": {
"type": [
"string",
"integer"
],
"pattern": "^-?(?:0|[1-9]\\d*)$"
},
"window": {
"type": "string",
"pattern": "^(0|([0-9]+y)?([0-9]+w)?([0-9]+d)?([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?)$",
"minLength": 1,
"description": "A duration: whole numbers, each with its unit y, w, d, h, m, s or ms, largest first, such as 30s, 1h30m or 7d."
}
},
"required": [
"permitLimit",
"window"
],
"additionalProperties": false,
"default": null
}
},
"additionalProperties": false
},
"default": null
},
"via": {
"type": [
"object",
"null"
],
"additionalProperties": {
"type": [
"string",
"null"
]
},
"default": null
},
"definition": {
"type": [
"object",
"null"
],
"properties": {
"type": {
"type": "string"
},
"routes": {
"type": "array"
},
"clusters": {
"type": "array"
},
"rateLimit": {
"type": [
"object",
"null"
],
"properties": {
"permitLimit": {
"type": [
"string",
"integer"
],
"pattern": "^-?(?:0|[1-9]\\d*)$"
},
"window": {
"type": "string",
"pattern": "^(0|([0-9]+y)?([0-9]+w)?([0-9]+d)?([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?)$",
"minLength": 1,
"description": "A duration: whole numbers, each with its unit y, w, d, h, m, s or ms, largest first, such as 30s, 1h30m or 7d."
}
},
"required": [
"permitLimit",
"window"
],
"additionalProperties": false
},
"channel": {
"type": [
"string",
"null"
]
},
"authentication": {
"type": [
"object",
"null"
],
"properties": {
"type": {
"type": "string"
},
"parameters": {
"type": "object",
"additionalProperties": {
"type": [
"string",
"null"
]
}
},
"additionalParameters": {
"type": [
"object",
"null"
],
"additionalProperties": {
"type": [
"string",
"null"
]
},
"default": null
}
},
"additionalProperties": false,
"default": null
},
"connection": {
"type": [
"object",
"null"
],
"properties": {
"useProxy": {
"type": [
"boolean",
"null"
]
},
"allowAutoRedirect": {
"type": [
"boolean",
"null"
]
},
"automaticDecompression": {
"type": [
"string",
"null"
]
},
"useCookies": {
"type": [
"boolean",
"null"
]
},
"connectTimeout": {
"type": [
"string",
"null"
],
"pattern": "^(0|([0-9]+y)?([0-9]+w)?([0-9]+d)?([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?)$",
"minLength": 1,
"description": "A duration: whole numbers, each with its unit y, w, d, h, m, s or ms, largest first, such as 30s, 1h30m or 7d."
},
"clientCertificate": {
"oneOf": [
{
"type": "string"
},
{
"type": "object",
"properties": {
"issuedBy": {
"type": "string"
},
"name": {
"type": "string"
}
},
"required": [
"issuedBy"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"clientCertificatePassword": {
"type": [
"string",
"null"
]
},
"trustEnvironmentCertificates": {
"type": [
"boolean",
"null"
]
}
},
"additionalProperties": false,
"default": null
}
},
"required": [
"type"
],
"additionalProperties": false,
"default": null
},
"previous": {
"type": [
"object",
"null"
],
"properties": {
"type": {
"type": "string"
},
"routes": {
"$ref": "#/properties/spec/properties/definition/properties/routes"
},
"clusters": {
"$ref": "#/properties/spec/properties/definition/properties/clusters"
},
"rateLimit": {
"$ref": "#/properties/spec/properties/definition/properties/rateLimit"
},
"channel": {
"type": [
"string",
"null"
]
},
"authentication": {
"$ref": "#/properties/spec/properties/definition/properties/authentication",
"default": null
},
"connection": {
"$ref": "#/properties/spec/properties/definition/properties/connection",
"default": null
}
},
"required": [
"type"
],
"additionalProperties": false,
"default": null
}
},
"additionalProperties": false
}
},
"required": [
"apiVersion",
"kind",
"metadata",
"spec"
],
"additionalProperties": false
}api-subscription#
A subscription gives a caller access to APIs on one gateway of one environment.
apiVersion: weik.io/v1
kind: api-subscription
metadata: { name: partner-x, project: finance, environment: production }
spec:
apis: [invoices]
type: apikey
rateLimit: { permitLimit: 60, window: 1m }Metadata: name, project, environment.
| Field | Type | What it is |
|---|---|---|
owner |
string | Who the subscription is for. |
active |
boolean | Whether the subscription is enabled. |
apis |
list of strings | The APIs it gives access to. |
type |
string, required | apikey, queryparameter, basic, oidc, anonymous or certificate. |
credential |
object | For oidc, the token issuer and audience, and for certificate, the authority and name of the client certificate. |
additionalHeaders |
map | Headers the gateway adds to the subscription’s calls. |
rateLimit |
object | Calls allowed, as permitLimit per window. |
expiresAt |
string | When the subscription stops working. |
gateway |
string | The gateway it belongs to. |
JSON schema of api-subscription
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "api-subscription",
"type": "object",
"properties": {
"apiVersion": {
"const": "weik.io/v1"
},
"kind": {
"const": "api-subscription"
},
"metadata": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"project": {
"type": "string"
},
"environment": {
"type": "string"
}
},
"required": [
"name",
"project",
"environment"
],
"additionalProperties": false
},
"spec": {
"type": [
"object",
"null"
],
"properties": {
"owner": {
"type": [
"string",
"null"
]
},
"active": {
"type": [
"boolean",
"null"
]
},
"apis": {
"type": [
"array",
"null"
],
"items": {
"type": [
"string",
"null"
]
}
},
"type": {
"type": "string"
},
"credential": {
"type": "object",
"properties": {
"oidc": {
"type": [
"object",
"null"
],
"properties": {
"issuer": {
"type": "string"
},
"audience": {
"type": "string"
}
},
"required": [
"issuer",
"audience"
],
"additionalProperties": false
},
"certificate": {
"type": [
"object",
"null"
],
"properties": {
"authority": {
"type": "string"
},
"name": {
"type": "string"
}
},
"required": [
"authority",
"name"
],
"additionalProperties": false
}
},
"additionalProperties": false
},
"additionalHeaders": {
"type": "object",
"additionalProperties": {
"type": [
"string",
"null"
]
}
},
"rateLimit": {
"type": [
"object",
"null"
],
"properties": {
"permitLimit": {
"type": [
"string",
"integer"
],
"pattern": "^-?(?:0|[1-9]\\d*)$"
},
"window": {
"type": "string",
"pattern": "^(0|([0-9]+y)?([0-9]+w)?([0-9]+d)?([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?)$",
"minLength": 1,
"description": "A duration: whole numbers, each with its unit y, w, d, h, m, s or ms, largest first, such as 30s, 1h30m or 7d."
}
},
"required": [
"permitLimit",
"window"
],
"additionalProperties": false
},
"expiresAt": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"gateway": {
"type": [
"string",
"null"
]
}
},
"required": [
"type"
],
"additionalProperties": false
}
},
"required": [
"apiVersion",
"kind",
"metadata",
"spec"
],
"additionalProperties": false
}entity-store-policy#
An entity type’s policy in one environment: how much the type may store and how long and how many values of an entity it keeps.
apiVersion: weik.io/v1
kind: entity-store-policy
metadata: { name: invoice, project: finance, environment: production }
spec:
maxBytes: 536870912
history: 2Metadata: name, project, environment.
| Field | Type | What it is |
|---|---|---|
maxBytes |
integer | The most the type may store, in bytes. |
maxAge |
duration | How long an entity is kept, such as 30d. |
history |
integer | How many values of an entity are kept, the current one included. |
maxValueBytes |
integer | The largest single entity, in bytes. |
JSON schema of entity-store-policy
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "entity-store-policy",
"type": "object",
"properties": {
"apiVersion": {
"const": "weik.io/v1"
},
"kind": {
"const": "entity-store-policy"
},
"metadata": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"project": {
"type": "string"
},
"environment": {
"type": "string"
}
},
"required": [
"name",
"project",
"environment"
],
"additionalProperties": false
},
"spec": {
"type": [
"object",
"null"
],
"properties": {
"maxBytes": {
"type": [
"string",
"integer"
],
"pattern": "^-?(?:0|[1-9]\\d*)$"
},
"maxAge": {
"type": [
"string",
"null"
],
"pattern": "^(0|([0-9]+y)?([0-9]+w)?([0-9]+d)?([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?)$",
"minLength": 1,
"description": "A duration: whole numbers, each with its unit y, w, d, h, m, s or ms, largest first, such as 30s, 1h30m or 7d."
},
"history": {
"type": [
"string",
"integer"
],
"pattern": "^-?(?:0|[1-9]\\d*)$"
},
"maxValueBytes": {
"type": [
"string",
"integer"
],
"pattern": "^-?(?:0|[1-9]\\d*)$"
}
},
"additionalProperties": false
}
},
"required": [
"apiVersion",
"kind",
"metadata",
"spec"
],
"additionalProperties": false
}