{
  "$comment": "Generated by website/build.mjs from website/src/docdata.mjs. Do not edit. `env` lists the driver-wide S3A_* variables that set the same thing; `default` is the value used when neither is given. Descriptions carry inline Markdown.",
  "name": "csi-s3-archiver",
  "driverName": "s3archiver.csi.trion.de",
  "csiSpec": "v1.12.0",
  "documentation": "https://s3archiver.csi.trion.de/configuration.html",
  "environment": [
    {
      "name": "CSI_ENDPOINT",
      "default": "unix:///csi/csi.sock",
      "description": "Socket the driver listens on. Unix domain sockets only; a `tcp://` value is rejected at startup."
    },
    {
      "name": "S3A_STATE_DIR",
      "default": "/var/lib/kubelet/plugins/…/state",
      "description": "Where per-volume state records and upload manifests live. Must be on a host path that outlives the driver container, or a restart re-uploads everything."
    },
    {
      "name": "NODE_NAME",
      "default": "hostname",
      "description": "The node id reported by `NodeGetInfo`. Set it from the downward API; the hostname fallback exists for local runs and logs a warning."
    },
    {
      "name": "S3A_LOG_LEVEL",
      "default": "info",
      "description": "Global log threshold: `trace`, `debug`, `info`, `warn`, `error`, `off`."
    },
    {
      "name": "S3A_LOG_LEVELS",
      "default": "unset",
      "description": "Per-logger overrides, comma-separated `prefix=level` (for example `io.grpc=warn,de.trion.csi=debug`). Longest matching prefix wins."
    },
    {
      "name": "S3A_NODE_CONCURRENCY",
      "default": "4",
      "description": "Concurrent uploads across all volumes on the node. A file is never uploaded concurrently with itself."
    },
    {
      "name": "S3A_RESCAN_SECONDS",
      "default": "60",
      "description": "Interval of the full rescan that backs up the inotify watcher."
    },
    {
      "name": "S3A_LOG_FORMAT",
      "default": "text",
      "description": "`text` for one human-readable line per record, `json` for one JSON object per line. JSON carries the full logger name and renders a throwable as fields, because a record that spans lines is not a JSON record."
    },
    {
      "name": "S3A_METRICS_PORT",
      "default": "unset (off)",
      "description": "Serve Prometheus metrics at `/metrics`. Off by default: A node plugin running as root should not open a listening port because someone upgraded it. Not 9808, which the `livenessprobe` sidecar already holds."
    },
    {
      "name": "S3A_WEBUI_PORT",
      "default": "unset (off)",
      "description": "Serve the read-only statistics page. Setting the port is what enables it; there is no separate switch."
    },
    {
      "name": "S3A_WEBUI_RETENTION_DAYS",
      "default": "7",
      "description": "How much hourly history each node keeps for the statistics page. 1 to 90."
    },
    {
      "name": "S3A_WEBUI_PEERS",
      "default": "unset (this node only)",
      "description": "Bare DNS name of a headless Service resolving to every driver pod, so any pod can render the whole cluster. Plain DNS rather than the Kubernetes API, which is what keeps the driver without permissions."
    },
    {
      "name": "S3A_CONTROLLER",
      "default": "false",
      "description": "Also serve the Controller service on the node socket. For `csi-sanity`; in a cluster the controller runs in its own pod."
    }
  ],
  "volumeAttributes": [
    {
      "name": "bucket",
      "default": "required",
      "env": [
        "S3A_BUCKET"
      ],
      "description": "Target bucket, from either place."
    },
    {
      "name": "prefix",
      "default": "{namespace}/{podName}/",
      "env": [
        "S3A_PREFIX"
      ],
      "description": "Key prefix template. See placeholders below."
    },
    {
      "name": "endpoint",
      "default": "AWS",
      "env": [
        "S3A_ENDPOINT"
      ],
      "description": "S3 endpoint override for Ceph, SeaweedFS and the like."
    },
    {
      "name": "region",
      "default": "us-east-1",
      "env": [
        "S3A_REGION"
      ],
      "description": "Region."
    },
    {
      "name": "pathStyle",
      "default": "false",
      "env": [
        "S3A_PATH_STYLE"
      ],
      "description": "Force path-style addressing; most non-AWS stores need it."
    },
    {
      "name": "appendOnly",
      "default": "false",
      "env": [
        "S3A_APPEND_ONLY"
      ],
      "description": "Periodically sync growing files instead of waiting for them to go quiet."
    },
    {
      "name": "deleteAfterUpload",
      "default": "false",
      "env": [
        "S3A_DELETE_AFTER_UPLOAD"
      ],
      "description": "Delete the local file after a successful upload. Mutually exclusive with `appendOnly`."
    },
    {
      "name": "quiescenceSeconds",
      "default": "30",
      "env": [
        "S3A_QUIESCENCE_SECONDS"
      ],
      "description": "How long a file must be unmodified before it is uploaded."
    },
    {
      "name": "appendSyncSeconds",
      "default": "60",
      "env": [
        "S3A_APPEND_SYNC_SECONDS"
      ],
      "description": "Sync interval in `appendOnly` mode."
    },
    {
      "name": "appendStrategy",
      "default": "rewrite",
      "env": [
        "S3A_APPEND_STRATEGY"
      ],
      "description": "`rewrite` re-uploads the whole file per sync; `segments` uploads only new tail bytes and compacts at pod end."
    },
    {
      "name": "segmentTargetBytes",
      "default": "8388608",
      "env": [
        "S3A_SEGMENT_TARGET_BYTES"
      ],
      "description": "`segments`: Flush the pending tail at this size."
    },
    {
      "name": "include",
      "alsoAccepts": [
        "exclude"
      ],
      "default": "all / none",
      "env": [
        "S3A_INCLUDE",
        "S3A_EXCLUDE"
      ],
      "description": "Comma-separated glob filters on paths inside the volume."
    },
    {
      "name": "storageClass",
      "default": "bucket default",
      "env": [
        "S3A_STORAGE_CLASS"
      ],
      "description": "For example `STANDARD_IA`."
    },
    {
      "name": "sweepTimeoutSeconds",
      "default": "unlimited",
      "env": [
        "S3A_SWEEP_TIMEOUT_SECONDS"
      ],
      "description": "Bound for the final sweep at pod termination."
    },
    {
      "name": "presignEndpoint",
      "default": "unset",
      "env": [
        "S3A_PRESIGN_ENDPOINT"
      ],
      "description": "Signer service URL; switches the volume to presigned-upload mode."
    },
    {
      "name": "presignMultipart",
      "default": "false",
      "env": [
        "S3A_PRESIGN_MULTIPART"
      ],
      "description": "Presigned mode: Upload large files in parts, lifting the 5 GiB single-PUT cap. Needs a signer that signs the multipart operations, and is opt-in because a `putObject`-only signer answers them plausibly and wrongly."
    },
    {
      "name": "compression",
      "default": "none",
      "env": [
        "S3A_COMPRESSION"
      ],
      "description": "`gzip` compresses each object and appends `.gz` to the key. `zstd` is refused with a reason: It needs a per-architecture native library, which a static binary does not have."
    },
    {
      "name": "serverSideEncryption",
      "default": "none",
      "env": [
        "S3A_SERVER_SIDE_ENCRYPTION"
      ],
      "description": "`AES256` or `aws:kms`, with `sseKmsKeyId`. A KMS key without KMS mode is a hard error rather than a silently ignored setting."
    },
    {
      "name": "sseKmsKeyId",
      "default": "none",
      "env": [
        "S3A_SSE_KMS_KEY_ID"
      ],
      "description": "The KMS key id or ARN to encrypt with. Only meaningful alongside `serverSideEncryption: aws:kms`; setting it without that mode is a hard error rather than a silently ignored value."
    },
    {
      "name": "sizeLimitBytes",
      "default": "unlimited",
      "env": [
        "S3A_SIZE_LIMIT_BYTES"
      ],
      "description": "Reported as the volume capacity by `NodeGetVolumeStats`, and an overrun is logged. **Not enforced by deletion**: The driver will not delete a workload's files to stay under a limit."
    },
    {
      "name": "appendUpload",
      "default": "auto",
      "env": [
        "S3A_APPEND_UPLOAD"
      ],
      "description": "How a growing object is extended: `copy` uses `UploadPartCopy`, `offset` uses `x-amz-write-offset-bytes` and needs an S3 Express directory bucket, `off` re-uploads the whole file. Only in `appendOnly` mode."
    },
    {
      "name": "durable",
      "default": "false",
      "env": [
        "S3A_DURABLE"
      ],
      "description": "The volume outlives its pod: Restored from the archive at publish, archived and mirrored at unpublish. PVC-declared volumes only, and credential mode only."
    },
    {
      "name": "restoreTimeoutSeconds",
      "default": "unlimited",
      "env": [
        "S3A_RESTORE_TIMEOUT_SECONDS"
      ],
      "description": "Bounds how long a pod start may block on a durable restore. Past it the pod gets what arrived and the driver logs that the volume is incomplete."
    }
  ]
}
