docs icon indicating copy to clipboard operation
docs copied to clipboard

Updating XRD default values does not affect claims

Open daniel-s-palmer opened this issue 1 year ago • 3 comments

What happened?

Updating default values in an XRD does not update claims that use default values

How can we reproduce it?

Create a simple XRD like:

apiVersion: apiextensions.crossplane.io/v1
kind: CompositeResourceDefinition
metadata:
  name: xexamples.example.com
spec:
  group: example.com
  names:
    kind: XExample
    plural: xexamples
  claimNames:
    kind: Example
    plural: examples
  versions:
    - name: v1alpha1
      served: true
      referenceable: true
      schema:
        openAPIV3Schema:
          type: object
          properties:
            spec:
              type: object
              properties:
                values:
                  x-kubernetes-preserve-unknown-fields: true
                  description: An example default value
                  type: string
                  default: "default value"

Create Claim that uses the default value:

apiVersion: example.com/v1alpha1
kind: Example
metadata:
  name: example-test
  namespace: default
spec: {}

Resulting Claim in cluster looks like:

apiVersion: example.com/v1alpha1
kind: Example
metadata: <removed for brevity>
spec:
  compositeDeletePolicy: Background
  compositionUpdatePolicy: Automatic
  resourceRef:
    apiVersion: example.com/v1alpha1
    kind: XExample
    name: example-test-9p6k8
  values: default value
status: <removed for brevity>

Update default value in XRD like so:

apiVersion: apiextensions.crossplane.io/v1
kind: CompositeResourceDefinition
metadata:
  name: xexamples.example.com
spec:
  group: example.com
  names:
    kind: XExample
    plural: xexamples
  claimNames:
    kind: Example
    plural: examples
  versions:
    - name: v1alpha1
      served: true
      referenceable: true
      schema:
        openAPIV3Schema:
          type: object
          properties:
            spec:
              type: object
              properties:
                values:
                  x-kubernetes-preserve-unknown-fields: true
                  description: An example default value
                  type: string
                  default: "new default value"

Expected results:

  • Claim is updated with new default value

Actual results:

  • Claim has old default value

What environment did it happen in?

Crossplane version: v1.15.0 Kubernetes version: v1.26.13

daniel-s-palmer avatar Feb 29 '24 21:02 daniel-s-palmer

Isn't this the exact thing happening with plain CustomResourceDefinitions (CRD)? I think that's how defaults are supposed to work.

phisco avatar Feb 29 '24 21:02 phisco

Default values are only set at create time. They don't apply retroactively to existing claims. It's better to think of them as default initialization values.

As @phisco mentions, this is how Kubernetes custom resource definitions (CRDs) work. Crossplane XRDs are built on CRDs. I think the behavior we have today is reasonable - it's what I would personally expect.

I don't think we're likely to change this. At best we could update our docs to make it clearer.

negz avatar Feb 29 '24 23:02 negz

Copy. That makes sense.

For my use case, it looks like I can put default data that may update in the composition.

Thanks for the discussion! We can close this if you'd like.

daniel-s-palmer avatar Mar 01 '24 16:03 daniel-s-palmer