kudobuilder / kudo

Kubernetes Universal Declarative Operator (KUDO)
https://kudo.dev
Apache License 2.0
1.17k stars 103 forks source link

Operator upgrade fails after making one of the parameters immutable #1778

Open alembiewski opened 3 years ago

alembiewski commented 3 years ago

What happened: Got the following error during the upgrade after adding immutable: true to one of the operator's parameters (default value is set and don't change in a new version):

admission webhook "instance-admission.kudo.dev" denied the request: failed to check immutable parameters for Instance test/operator-instance: parameter 'foo' was changed to immutable in operator version operator-1.0.0-0.0.2 but no value was provided

There is also another variation of this error, even though the use-case is the same (parameter became immutable without changing its value):

Error: failed to update instance for new operatorversion operator/operator-1.2.0-1.0.1-rc1: admission webhook "instance-admission.kudo.dev" denied the request: failed to check immutable parameters for Instance operator/instance: parameter 'clusterDomainName' was added in operator version operator-1.2.0-1.0.1-rc1, but no value was provided (default would be cluster.local)

What you expected to happen: Upgrade completes successfully, the default value of the parameter is used.

How to reproduce it (as minimally and precisely as possible):

  1. Create a simple operator with a single parameter:
    apiVersion: kudo.dev/v1beta1
    parameters:
    - name: foo
    default: "bar"
  2. Install the operator.
  3. Make the parameter immutable:
    apiVersion: kudo.dev/v1beta1
    parameters:
    - name: foo
    default: "bar"
    immutable: true
  4. Bump operator version and run the upgrade.

Anything else we need to know?:

Environment: