cloud_object_storage service has 5 resource kinds, each listed below with its endpoints, fields, and dependencies. Values resolve late, so you reference another resource with ${kind.ref_name}. For defaults, validation rules, and examples, run wxctl explain <kind>.
YAML envelope & reference syntax
YAML envelope & reference syntax
- Envelope: A config is one or more YAML documents separated by
---. Each has top-levelkindandref_name, then the fields below at the top level (not nested underspec). ref_name: Unique handle for this resource within the config. Used to reference it from other resources, then stripped before the API call (not a schema field).- References: Reference another resource by its ref_name:
${<kind>.<ref_name>}resolves to its id,${<kind>.<ref_name>.<field>}to a specific field. Values resolve late, at plan/apply time.
adls_container
Azure Data Lake Storage container (Gen1 or Gen2).
Runs on SaaS · ID field filesystem
Endpoints
| Operation | Method | Path |
|---|---|---|
| Create | POST | /adls/{filesystem} |
| Read | GET | /adls/{filesystem} |
| Delete | DELETE | /adls/{filesystem} |
| Field | Type | Required | Description |
|---|---|---|---|
connection | string | Required | Reference to a storage_connection of type: adls_gen1 or adls_gen2. Carries auth credentials. |
filesystem | string | Optional | ADLS Gen2 filesystem (container) name. Required when the linked connection’s type: adls_gen2; ignored for Gen1. |
data_lake_store_name | string | Optional | ADLS Gen1 store name. Required when the linked connection’s type: adls_gen1; ignored for Gen2. |
path | string | Optional | Optional sub-path inside the filesystem / store. Mutable. |
connection→storage_connection(required)
storage_registration→.bucket(optional)
gcs_bucket
Google Cloud Storage bucket.
Runs on SaaS · ID field name
Endpoints
| Operation | Method | Path |
|---|---|---|
| Create | POST | /gcs/{name} |
| Read | GET | /gcs/{name} |
| Delete | DELETE | /gcs/{name} |
| Field | Type | Required | Description |
|---|---|---|---|
connection | string | Required | Reference to a storage_connection of type: google_cs. |
name | string | Required | |
location | string | Required | |
storage_class | string | Optional |
endpoint.
Depends on
connection→storage_connection(required)
storage_registration→.bucket(optional)
s3_bucket
S3-compatible bucket (IBM COS, AWS S3, MinIO, Ceph).
Runs on SaaS + Software · ID field name
Endpoints
| Operation | Method | Path |
|---|---|---|
| Create | POST | /cos/{name} |
| Read | GET | /cos/{name} |
| Update | PUT | /cos/{name} |
| Delete | DELETE | /cos/{name} |
| Field | Type | Required | Description |
|---|---|---|---|
connection | string | Required | Reference to a storage_connection supplying credentials. The connection’s type: drives bucket behaviour (LocationConstraint, storage-class validation, endpoint derivation). Immutable, credential rotation happens on the connection; changing which connection backs a bucket would move its ownership. |
name | string | Required | Bucket name, globally unique in the backing account’s namespace. Immutable. |
region | string | Required | Backing region. Used to derive the regional S3 endpoint and the LocationConstraint value on bucket CREATE. |
storage_class | string | Optional | Storage class. Enum validation varies by the linked storage_connection.type, cross-resource validator WXCTL-V503. For ibm_cos: [standard, vault, cold, smart, onerate_active]. For aws_s3/amazon_s3/s3: AWS classes (STANDARD, STANDARD_IA, ONEZONE_IA, GLACIER, DEEP_ARCHIVE, INTELLIGENT_TIERING). For minio/ibm_ceph: free-form. |
tags | array<string> | Optional | Bucket tags (max 10, per S3 limit). Mutable via PUT ?tagging; other fields are immutable. |
force_destroy | boolean | Optional | When true, DELETE paginates ListObjectsV2 + DeleteObjects before removing the bucket. Safety cap at 10,000 objects. |
endpoint, bucket_location.
Depends on
connection→storage_connection(required)
ingestion_job→.source.file_paths(optional)s3_object→.bucket(required)s3_object→.region(required)spark_engine→.associated_catalogs(optional)storage_registration→.bucket(required)
s3_object
An object inside an s3_bucket.
Runs on SaaS + Software · ID field key
Endpoints
| Operation | Method | Path |
|---|---|---|
| Create | POST | /cos/{bucket}/{key} |
| Read | GET | /cos/{bucket}/{key} |
| Update | PUT | /cos/{bucket}/{key} |
| Delete | DELETE | /cos/{bucket}/{key} |
| Field | Type | Required | Description |
|---|---|---|---|
bucket | string | Required | |
region | string | Required | Backing region of the containing bucket. Typically populated via ${s3_bucket.<ref>.region} so the object follows the bucket’s region. |
key | string | Required | Object key. S3 limit is 1024 UTF-8 bytes, not characters, multibyte keys are measured post-encoding. |
content | string | Optional | Inline literal content. Exactly one of content or path must be set (WXCTL-V501). |
path | string | Optional | Local filesystem path, resolved relative to CWD. The file must exist at apply time. Files larger than 100 MB are rejected without being opened. |
content_type | string | Optional | MIME type. Auto-detected from the key extension when omitted; falls back to application/octet-stream. |
metadata | object | Optional | User metadata sent as x-amz-meta-* headers. The handler automatically adds x-amz-meta-wxctl-sha256 holding the streaming SHA-256 of the body for drift detection. |
etag.
Depends on
bucket→s3_bucket(required)region→s3_bucket(required)
ingestion_job→.source.file_paths(optional)
storage_connection
Credential-holding kind for object-store / file-system backends.
Runs on SaaS + Software · ID field ref_name
Endpoints
| Operation | Method | Path |
|---|---|---|
| Create | POST | /local/storage_connections |
| Read | GET | /local/storage_connections/{ref_name} |
| Delete | DELETE | /local/storage_connections/{ref_name} |
| Field | Type | Required | Description |
|---|---|---|---|
type | string | Required | Storage backend family. Drives the active variant, fields outside the active variant emit WXCTL-V401 (warn) at validation; unknown values likewise emit WXCTL-V401 rather than blocking (the API catalog grows faster than this list). |
adls_container→.connection(required)gcs_bucket→.connection(required)s3_bucket→.connection(required)

