Skip to Content
OpenETL
Reference

Connector descriptor

Every field of a Connector document, which describes one version of a connector package.

Edit on GitHub

A connector package's version: its metadata, and each role's runtime and spec. openetl connector package writes it from openetl-connector.yaml; it isn't written by hand.

openetl connector apply applies a descriptor to the org, from a file or by a package version's reference, and runners fetch each role's executable or image from what it names. openetl connector schema descriptor prints its JSON Schema.

This page is generated from internal/spec/connector.schema.json. A field that isn't listed is refused, unless its section says other fields are allowed.

Top-level fields

FieldTypeRequiredDescription
apiVersionstringYesIs always openetl.io/v1alpha2.
kindstringYesIs always Connector.
metadataobjectYesWhich package and version this is, and what the console shows about it.
specobjectYesEach role's runtime and spec.

metadata

Which package and version this is, and what the console shows about it.

FieldTypeRequiredDescription
namestringYesThe package: owner/name, or name for the official owner, openetl. Each part is lowercase letters, digits and hyphens, at most 63 characters. Matches ^([a-z0-9]([-a-z0-9]{0,61}[a-z0-9])?/)?[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])?$.
versionstringYesSemantic version, without build metadata (+…): versions that differ only by it compare as equal. Matches ^(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)(-[0-9A-Za-z.-]+)?$.
titlestringNoA display name, such as PostgreSQL. None: the name. Matches ^[^\r\n]*$. Has at most 100 characters.
descriptionstringNoOne line. Matches ^[^\r\n]*$. Has at most 500 characters.
licensestringNoAn SPDX expression, such as Apache-2.0. Matches ^[A-Za-z0-9.+:()\- ]{1,100}$.
repositoryhttpsYesThe source repository. The package's name stays with it.
docshttpsNoThe package's documentation, which the console's connector catalog links to.
logohttps or ociBlobNoAn SVG or PNG image, which the UI shows.
authorstringNoWho makes the package, which the catalog shows. Has at most 200 characters.
tagsarray of stringNoWords the catalog shows with the package, such as database. Has at most 20 items. Each item matches ^[a-z0-9][a-z0-9-]{0,31}$.
releaseobjectNoThe release the version was built from.

metadata.release

The release the version was built from.

FieldTypeRequiredDescription
tagstringNoThe git tag the version was built from. Matches ^\S*$. Has at most 255 characters.
urlhttpsNoThe release's page.

spec

Each role's runtime and spec.

FieldTypeRequiredDescription
rolesobjectYesWhat the package provides: a source, a destination, or both.

spec.roles

What the package provides: a source, a destination, or both.

FieldTypeRequiredDescription
sourceobjectNoThe package's source. Can't have capabilities.
destinationobjectNoThe package's destination. Needs capabilities. Can't have runtime.manifest. Can't have acknowledges, splits, resplit or retention.
  • Has at least one of its fields.

spec.roles.ROLE

ROLE is source or destination.

What a package provides as a source or a destination, and how it runs.

FieldTypeRequiredDescription
requiresobjectNoWhat the role needs from the platform.
runtimeobjectYesAt least one of binaries and an image, or a manifest alone.
resourcesobjectNoA container launcher's requests and limits, and the job size the role wants.
stateobjectNoThe version of the checkpoint state it writes, and the oldest it reads (at most version).
egressobjectNoWhat the connector means to reach on the network. OpenETL doesn't enforce it yet: connectors are trusted code.
setupbooleanNoThe connector serves Setup and Teardown.
acknowledgesbooleanNoA source's: it acknowledges upstream once a checkpoint commits.
splitsbooleanNoA source's: it divides streams into splits.
resplitbooleanNoA source's: it splits a running split's remainder. Needs splits.
retentionbooleanNoA source's: it says, without reading, how much of what it keeps for a pipeline a checkpoint's positions have used.
capabilitiesobjectNoA destination's.
configobjectNoThe config's JSON Schema, as Spec returns it.
  • resplit needs splits.
  • If it has runtime.manifest: A manifest's config and egress are in the manifest, and it speaks no protocol. Can't have runtime.binaries or runtime.image. Can't have requires.protocol. Can't have egress, config or capabilities.
  • Otherwise: Needs requires, egress and config. Needs requires.protocol.

spec.roles.ROLE.requires

What the role needs from the platform.

FieldTypeRequiredDescription
protocolstringNoThe connector protocol it speaks; none for a manifest. Is always v1.
featuresarray of stringNoAdditions to the protocol after v1 that it can't run without. Each item matches ^[a-z0-9][a-z0-9.-]{0,62}$.
platformstringNoThe oldest openetl release it runs on. Matches ^(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)(-[0-9A-Za-z.-]+)?(\+[0-9A-Za-z.-]+)?$.

spec.roles.ROLE.runtime

At least one of binaries and an image, or a manifest alone.

FieldTypeRequiredDescription
binariesmap of platform to objectNoOne executable per platform, downloaded over HTTP and pinned by digest.
imageobjectNoAn OCI image index that serves the launch contract under the image contract.
manifestobjectNoA DeclarativeSource's spec: the role's whole runtime, run in the platform. Sources only.
  • Has at least one of these: binaries with at least one entry; image; or manifest.

spec.roles.ROLE.runtime.binaries.PLATFORM

One platform's executable.

FieldTypeRequiredDescription
urlstring or ociBlobYesWhere the executable is downloaded from: an http or https URL, or a blob in an OCI registry. Either a string that matches ^https?://[^/?#\s]+([/?#]\S*)?$ and has at most 2048 characters, or ociBlob.
digestdigestNoThe executable's digest. The API fills in a missing one when the version is applied.
attestationhttps or ociBlobNoThe executable's provenance attestation.

spec.roles.ROLE.runtime.image

An OCI image index that serves the launch contract under the image contract.

FieldTypeRequiredDescription
refstringYesA repository, without a tag or digest. Matches ^[a-z0-9]+([._-][a-z0-9]+)*(\.[a-z0-9-]+)*(:[0-9]+)?(/[a-z0-9]+([._-][a-z0-9]+)*)+$.
digestdigestYesThe index's digest.
platformsarray of platformYesThe platforms the index has an image for. Has at least one item.
commandarray of stringNoThe connector's argv, where it isn't the entrypoint. Each item isn't empty.
attestationhttps or ociBlobNoThe image's provenance attestation.

spec.roles.ROLE.resources

A container launcher's requests and limits, and the job size the role wants.

FieldTypeRequiredDescription
cpustringNoCPU, as a Kubernetes quantity, such as 500m or 2. Matches ^([0-9]+m|[0-9]+(\.[0-9]{1,3})?)$.
memorybytesNoMemory.
diskbytesNoThe size of TMPDIR.
hintstringNoThe job size a pipeline of this role starts at when it's sized automatically. Is one of xs, s, m, l or xl.

spec.roles.ROLE.state

The version of the checkpoint state it writes, and the oldest it reads (at most version).

FieldTypeRequiredDescription
versionintegerYesThe version of the state it writes. Is from 1 to 4294967295.
readsintegerYesThe oldest version of the state it can resume from. Is from 1 to 4294967295.

spec.roles.ROLE.egress

What the connector means to reach on the network. OpenETL doesn't enforce it yet: connectors are trusted code.

FieldTypeRequiredDescription
tierstringYeshost: only through the host's services. proxy: HTTPS through a forward proxy, to the hosts in allow, for vendor SDKs. raw: sockets, to the host:port pairs in allow, for database drivers. Is one of host, proxy or raw.
allowarray of stringNoHosts on the proxy tier, host:port pairs on raw.

spec.roles.ROLE.capabilities

A destination's.

FieldTypeRequiredDescription
classstringYesHow the destination makes an epoch visible. stage_and_apply: it stages in PreCommit and applies in Commit. transactional_stream: it flushes into a transaction in PreCommit and commits it in Commit. deliver_and_ack: it delivers during the epoch, and PreCommit returns once everything is acknowledged. Is one of stage_and_apply, transactional_stream or deliver_and_ack.
scopesarray of stringNoThe commit scopes a pipeline may choose in delivery.commit.scope: pipeline, where every stream's epoch becomes visible together, and stream, where each stream's does on its own. Each item is one of pipeline or stream.
dedupeAtApplybooleanNoThe destination can skip append and overwrite rows whose _openetl_id is already in the target.
defaultCommitIntervaldurationNoThe commit interval of a pipeline whose delivery.commit.interval sets none.
minCommitIntervaldurationNoThe shortest delivery.commit.interval a pipeline may set.
maxCommitIntervaldurationNoThe longest delivery.commit.interval a pipeline may set. None: no maximum.
nanosecondTimestampsbooleanNoTimestamps keep nanoseconds; otherwise only microseconds.
maxIdentifierLengthintegerNoThe longest table or column name, in bytes; 0 for no limit. Is from 0 to 4294967295.
writeModesarray of stringNoNone: append only. Each item is one of append, overwrite or merge.
deliverystringNoHow epochs reach it: streamed as batches, or staged as Parquet files the platform hands over. None: streamed. Is one of streamed or staged.
maxWriterLanesintegerNoThe most writer lanes an attempt may open, writing concurrently. None: one. Is from 0 to 4294967295.
holdsobjectNoWhat the destination does with held columns and cells. None: it takes no holds.

spec.roles.ROLE.capabilities.holds

What the destination does with held columns and cells. None: it takes no holds.

FieldTypeRequiredDescription
byKeybooleanNoPatches a merge stream's rows by their key.
byIdbooleanNoPatches an append stream's rows by their _openetl_id.
lastbooleanNoA held cell can keep the target's value, in a merge stream.
guardedbooleanNoA patch fills a cell only where the target still holds the version it comes from.

Types

Fields above refer to these types by name.

https

An https URL. A string. Matches ^https://[^/?#\s]+([/?#]\S*)?$. Has at most 2048 characters.

ociBlob

A blob in an OCI registry, by its digest. A string. Matches ^oci://[^/@\s]+/[a-z0-9]+([._/-][a-z0-9]+)*@sha256:[0-9a-f]{64}$. Has at most 2048 characters.

platform

os/arch, such as linux/amd64. A string. Matches ^[a-z0-9]+/[a-z0-9]+$.

digest

A SHA-256 digest: sha256: and 64 hex digits. A string. Matches ^sha256:[0-9a-f]{64}$.

bytes

A Kubernetes quantity of bytes, such as 512Mi. A string. Matches ^[0-9]+(Ki|Mi|Gi|Ti|k|M|G|T)?$.

duration

A Go duration, such as 90s or 15m. A string. Matches ^-?([0-9]+(\.[0-9]*)?|\.[0-9]+)(ns|us|µs|ms|s|m|h)(([0-9]+(\.[0-9]*)?|\.[0-9]+)(ns|us|µs|ms|s|m|h))*$|^0$.

On this page