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.version
rangesProposed demo script:
demo-catalog:latest
containing a bundlev2.0.0-alpha1
Catalog
pointing to a tag for (1) with a short polling interval (15s)Operator
that specifiesspec.version: 2.0.x
v2.0.0
, and push to the samedemo-catalog:latest
tag.Operator
or theCatalog
, observe that the resolution succeeds in ~15s and a bundle deployment is created.Operator
s whenCatalog
polling is enabled and the next poll resolves to a new SHA.Healthy
condition transition fromFalse
toTrue
and watch as the Healthy condition message changes to reflect the current health status.v2.1.0
, and again push to the samedemo-catalog:latest
tagOperator
or theCatalog
, observe no upgrade occurs:Operator.spec.version
limits versions to the 2.0 z-streamv2.0.1
, and again push to the samedemo-catalog:latest
tagCatalog
, observe that an upgrade occurs tov2.0.1
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 theOperator
object.Operator.spec.version
to2.1.x
v2.1.0
Operator
results in re-resolutionv3.0.0
, and again push to the samedemo-catalog:latest
tag.3.0.x
Operator
to setspec.upgradeConstraintPolicy: Ignore
v3.0.0
succeed.Operator
with.spec.version: 2.1.x
andspec.upgradeConstraintPolicy: Enforce
Operator
to setspec.upgradeConstraintPolicy: Ignore
v2.1.0
succeed.