Update Crossplane GCP Bucket generation rules to use preferred API version

Modified the generation rules for Crossplane GCP Buckets to omit the version in resource type definitions, allowing the use of the API server's preferred version (currently v1beta2). Updated documentation to reflect this change and clarify version pinning for schema stability.

Changes include:
- Updated YAML generation rules to remove explicit versioning.
- Revised documentation to explain the implications of omitting versioning and the preferred version usage.

This enhances resilience across CRD upgrades and simplifies the configuration for users.
This commit is contained in:
stewartshea
2026-06-30 21:55:36 -04:00
parent eb8160e659
commit 31ac475c97
3 changed files with 20 additions and 7 deletions
@@ -4,12 +4,15 @@ spec:
platform: kubernetes platform: kubernetes
generationRules: generationRules:
# Discover every Crossplane GCP Bucket in the cluster. # Discover every Crossplane GCP Bucket in the cluster.
# Resource type syntax: plural.group/version # Resource type syntax: plural.group[/version]
# plural = buckets (from `kubectl api-resources | grep storage.gcp.upbound.io`) # plural = buckets (from `kubectl api-resources | grep storage.gcp.upbound.io`)
# group = storage.gcp.upbound.io # group = storage.gcp.upbound.io
# version = v1beta1 (omit /version to use the API server's preferred version) # version = omitted (use the API server's preferred version — currently v1beta2)
#
# Pin an explicit version like `buckets.storage.gcp.upbound.io/v1beta1`
# if you need schema stability across CRD upgrades.
- resourceTypes: - resourceTypes:
- buckets.storage.gcp.upbound.io/v1beta1 - buckets.storage.gcp.upbound.io
matchRules: matchRules:
# Match every Bucket by name. Swap this regex to scope by naming # Match every Bucket by name. Swap this regex to scope by naming
# convention (for example `^prod-.*` to only cover prod buckets) or # convention (for example `^prod-.*` to only cover prod buckets) or
+8 -2
View File
@@ -24,12 +24,18 @@ Three things to note:
1. **`buckets`** — this is the *plural resource name*. It is what you 1. **`buckets`** — this is the *plural resource name*. It is what you
put in the generation rule, not the singular `Bucket`. put in the generation rule, not the singular `Bucket`.
2. **`storage.gcp.upbound.io/v1beta1`** — the API group and preferred 2. **`storage.gcp.upbound.io/v1beta2`** — the API group and preferred
version. version (older `v1beta1` may also be served for compatibility).
3. **`false` in the "NAMESPACED" column** — Crossplane managed resources 3. **`false` in the "NAMESPACED" column** — Crossplane managed resources
are **cluster-scoped**. This is why our generation rule uses are **cluster-scoped**. This is why our generation rule uses
`qualifiers: ["resource", "cluster"]` and not `namespace`. `qualifiers: ["resource", "cluster"]` and not `namespace`.
> **Version pinning:** our rule uses just `buckets.storage.gcp.upbound.io`
> (no `/version`), which tells the indexer to use whatever the API server
> reports as preferred. That's the most resilient choice across CRD
> upgrades. Pin `/v1beta1` or `/v1beta2` only when you deliberately need
> a specific schema.
Screenshot placeholder: `images/03-kubectl-api-resources.png` — output of Screenshot placeholder: `images/03-kubectl-api-resources.png` — output of
the above command. the above command.
+6 -2
View File
@@ -14,7 +14,7 @@ spec:
platform: kubernetes platform: kubernetes
generationRules: generationRules:
- resourceTypes: - resourceTypes:
- buckets.storage.gcp.upbound.io/v1beta1 - buckets.storage.gcp.upbound.io
matchRules: matchRules:
- type: pattern - type: pattern
pattern: ".+" pattern: ".+"
@@ -53,9 +53,13 @@ spec:
```yaml ```yaml
resourceTypes: resourceTypes:
- buckets.storage.gcp.upbound.io/v1beta1 - buckets.storage.gcp.upbound.io
``` ```
Omitting `/v1beta2` (or `/v1beta1`) tells the indexer to use the API
server's preferred version, which survives CRD schema upgrades. Pin the
version only when you rely on a specific schema shape.
This is the *selective discovery* signal. Because this string appears in This is the *selective discovery* signal. Because this string appears in
a loaded rule, the Kubernetes indexer knows to enumerate that CRD. a loaded rule, the Kubernetes indexer knows to enumerate that CRD.
Without any rule mentioning a CRD, it would not be listed. Without any rule mentioning a CRD, it would not be listed.