Skip to content

GarageBucket v1alpha1

API version: garage.rajsingh.info/v1alpha1. Scope: Namespaced.

The custom-resource guide explains operational behavior. The JSON schemas are the validation source of truth.

This compatibility version's schema is preserved from the historical CRD. Current version schemas are generated from the Go API types.

Spec

GarageBucketSpec defines the desired state of GarageBucket

Field path Type Constraints Description
clusterRef object required ClusterRef references the GarageCluster this bucket belongs to
clusterRef.kubeConfigSecretRef object KubeConfigSecretRef references a secret containing kubeconfig for a remote cluster. Only used for cross-cluster references in multi-cluster federation scenarios.
clusterRef.kubeConfigSecretRef.key string required The key of the secret to select from. Must be a valid secret key.
clusterRef.kubeConfigSecretRef.name string default: "" Name of the referent. This field is effectively required, but due to backwards compatibility is allowed to be empty. Instances of this type with an empty value here are almost certainly wrong. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
clusterRef.kubeConfigSecretRef.optional boolean Specify whether the Secret or its key must be defined
clusterRef.name string required Name of the GarageCluster
clusterRef.namespace string Namespace of the GarageCluster (defaults to the same namespace as the referencing resource)
deletionPolicy string default: "Delete"; enum: ["Delete", "Retain"] DeletionPolicy controls whether deleting this resource also deletes the corresponding Garage bucket. The default is Delete.
globalAlias string GlobalAlias is the global alias for this bucket (optional) If not set, the bucket name from metadata.name is used
keyPermissions array of object KeyPermissions grants access to specific GarageKeys. Note: Permissions can be granted from either direction: - Here (GarageBucket.keyPermissions): Grant keys access to this bucket - On GarageKey (GarageKey.bucketPermissions): Grant the key access to buckets Both approaches are equivalent and result in the same Garage API calls. Use whichever is more convenient for your workflow: - Bucket-centric: Define all key access on the bucket - Key-centric: Define all bucket access on the key If the same permission is defined in both places, they are merged (not conflicting).
keyPermissions[].keyRef string required KeyRef references the GarageKey by name
keyPermissions[].owner boolean Owner allows bucket owner operations
keyPermissions[].read boolean Read allows reading objects
keyPermissions[].write boolean Write allows writing objects
localAliases array of object LocalAliases are per-key local aliases for this bucket
localAliases[].alias string required Alias is the local alias name
localAliases[].keyRef string required KeyRef references the GarageKey
quotas object Quotas configures bucket quotas
quotas.maxObjects integer format: "int64" MaxObjects is the maximum number of objects
quotas.maxSize integer or string pattern: "^(\+|-)?(([0-9]+(\.[0-9])?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9])?)|(\.[0-9]+))))?$" MaxSize is the maximum bucket size in bytes
website object Website configures static website hosting for this bucket. Note: Only indexDocument and errorDocument are supported via the Admin API. For advanced features (routing rules, redirectAll), use S3 PutBucketWebsite API directly.
website.enabled boolean Enabled enables static website hosting
website.errorDocument string ErrorDocument is the error document to serve for 404s
website.indexDocument string default: "index.html" IndexDocument is the default index document (default: index.html)

Status

GarageBucketStatus defines the observed state of GarageBucket

Field path Type Constraints Description
bucketId string BucketID is the internal Garage bucket ID
conditions array of object Conditions represent the current state
conditions[].lastTransitionTime string required; format: "date-time" lastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.
conditions[].message string required; max length: 32768 message is a human readable message indicating details about the transition. This may be an empty string.
conditions[].observedGeneration integer format: "int64"; min: 0 observedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance.
conditions[].reason string required; min length: 1; max length: 1024; pattern: "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$" reason contains a programmatic identifier indicating the reason for the condition's last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty.
conditions[].status string required; enum: ["True", "False", "Unknown"] status of the condition, one of True, False, Unknown.
conditions[].type string required; max length: 316; pattern: "^([a-z0-9]([-a-z0-9][a-z0-9])?(\.[a-z0-9]([-a-z0-9][a-z0-9])?)/)?(([A-Za-z0-9][-A-Za-z0-9_.])?[A-Za-z0-9])$" type of condition in CamelCase or in foo.example.com/CamelCase.
createdAt string format: "date-time" CreatedAt is when the bucket was created in Garage
globalAlias string GlobalAlias is the assigned global alias
incompleteUploadBytes integer format: "int64" IncompleteUploadBytes is the total bytes in incomplete multipart uploads
incompleteUploadParts integer format: "int64" IncompleteUploadParts is the count of parts in incomplete multipart uploads
incompleteUploads integer format: "int64" IncompleteUploads is the count of incomplete multipart uploads
keys array of object Keys contains keys with access to this bucket
keys[].keyId string KeyID is the access key ID
keys[].name string Name is the key name
keys[].permissions object Permissions granted to this key
keys[].permissions.owner boolean Owner permission
keys[].permissions.read boolean Read permission
keys[].permissions.write boolean Write permission
localAliases array of object LocalAliases tracks per-key local aliases for this bucket
localAliases[].alias string Alias is the local alias name
localAliases[].keyId string KeyID is the access key ID that owns this alias
localAliases[].keyName string KeyName is the friendly name of the key
objectCount integer format: "int64" ObjectCount is the current object count
observedGeneration integer format: "int64" ObservedGeneration is the last observed generation
phase string Phase represents the current phase
quotaUsage object QuotaUsage shows current quota consumption
quotaUsage.objectCount integer format: "int64" ObjectCount is the current object count
quotaUsage.objectLimit integer format: "int64" ObjectLimit is the configured object limit (0 = unlimited)
quotaUsage.objectPercent integer format: "int32" ObjectPercent is the percentage of object quota used
quotaUsage.sizeBytes integer format: "int64" SizeBytes is the current size in bytes
quotaUsage.sizeLimit integer format: "int64" SizeLimit is the configured size limit in bytes (0 = unlimited)
quotaUsage.sizePercent integer format: "int32" SizePercent is the percentage of size quota used
size string Size is the current bucket size
websiteConfig object WebsiteConfig shows the current website configuration details
websiteConfig.errorDocument string ErrorDocument is the configured error document
websiteConfig.indexDocument string IndexDocument is the configured index document
websiteEnabled boolean WebsiteEnabled indicates if website hosting is currently enabled
websiteUrl string WebsiteURL is the computed website URL (if website hosting is enabled)