It would be great to see something that incorporates all the new features:
- catalogd polling
Operator.spec.version ranges
- semver-based upgrade constraint policy
- rukpak bundle health
Proposed demo script:
- Create and push a scratch-based FBC image for
demo-catalog:latest containing a bundle v2.0.0-alpha1
- Create a
Catalog pointing to a tag for (1) with a short polling interval (15s)
- Create an
Operator that specifies spec.version: 2.0.x
- Observe a resolution failure because no bundles exist in that range
- Highlight: pre-releases are excluded when range implies non-prerelease versions.
- Update the catalog image with a new bundle,
v2.0.0, and push to the same demo-catalog:latest tag.
- Without modifying the
Operator or the Catalog, observe that the resolution succeeds in ~15s and a bundle deployment is created.
- Highlight: Operator controller reconciles
Operators when Catalog polling is enabled and the next poll resolves to a new SHA.
- Watch the bundle deployment and observe its updates. See the
Healthy condition transition from False to True and watch as the Healthy condition message changes to reflect the current health status.
- Highlight: BD installed condition still tells you whether the BD was successfully applied
- Highlight: BD healthy condition gives you details about what is going on with the bundle after it has been applied.
- Update the catalog image with a new bundle
v2.1.0, and again push to the same demo-catalog:latest tag
- Without modifying the
Operator or the Catalog, observe no upgrade occurs:
- Highlight:
Operator.spec.version limits versions to the 2.0 z-stream
- Future work idea: perhaps we can put something on the Operator status that says there are successors available that fall outside the specified version range?
- Update the catalog image with a new bundle
v2.0.1, and again push to the same demo-catalog:latest tag
- Without modifying the Operator or the
Catalog, observe that an upgrade occurs to v2.0.1
- Highlight: Again,
Operator.spec.version limits versions to the 2.0 z-stream. v2.0.1 is in the range. An upgrade proceeds automatically without a change to the Operator object.
- Update
Operator.spec.version to 2.1.x
- Observe that an upgrade occurs to
v2.1.0
- Highlight: change to
Operator results in re-resolution
- Update the catalog image with a new bundle
v3.0.0, and again push to the same demo-catalog:latest tag.
- Update Operator.spec.version to
3.0.x
- Observe a resolution failure.
- Highlight: Operator controller understands semver and assumes that a major version bump could break existing users, and therefore refuses to upgrade.
- Update
Operator to set spec.upgradeConstraintPolicy: Ignore
- Observe resolution and upgrade to
v3.0.0 succeed.
- Highlight: Administrators have an escape hatch to override OLM's safety mechanisms and allow upgrades across major versions.
- In a single update, set the
Operator with .spec.version: 2.1.x and spec.upgradeConstraintPolicy: Enforce
- Observe resolution fail
- Highlight: downgrades are disallowed by default
- Update
Operator to set spec.upgradeConstraintPolicy: Ignore
- Observe resolution and downgrade to
v2.1.0 succeed.
- Highlight: Administrators have an escape hatch to override OLM's safety mechanisms and allow downgrades
It would be great to see something that incorporates all the new features:
Operator.spec.versionrangesProposed demo script:
demo-catalog:latestcontaining a bundlev2.0.0-alpha1Catalogpointing to a tag for (1) with a short polling interval (15s)Operatorthat specifiesspec.version: 2.0.xv2.0.0, and push to the samedemo-catalog:latesttag.Operatoror theCatalog, observe that the resolution succeeds in ~15s and a bundle deployment is created.Operators whenCatalogpolling is enabled and the next poll resolves to a new SHA.Healthycondition transition fromFalsetoTrueand watch as the Healthy condition message changes to reflect the current health status.v2.1.0, and again push to the samedemo-catalog:latesttagOperatoror theCatalog, observe no upgrade occurs:Operator.spec.versionlimits versions to the 2.0 z-streamv2.0.1, and again push to the samedemo-catalog:latesttagCatalog, observe that an upgrade occurs tov2.0.1Operator.spec.versionlimits versions to the 2.0 z-stream.v2.0.1is in the range. An upgrade proceeds automatically without a change to theOperatorobject.Operator.spec.versionto2.1.xv2.1.0Operatorresults in re-resolutionv3.0.0, and again push to the samedemo-catalog:latesttag.3.0.xOperatorto setspec.upgradeConstraintPolicy: Ignorev3.0.0succeed.Operatorwith.spec.version: 2.1.xandspec.upgradeConstraintPolicy: EnforceOperatorto setspec.upgradeConstraintPolicy: Ignorev2.1.0succeed.