Skip to content

Commit bb7a2ee

Browse files
authored
Merge pull request #86479 from adellape/418_ocpmaxversion
2 parents babd80d + 20ab6dc commit bb7a2ee

13 files changed

+144
-62
lines changed

_attributes/common-attributes.adoc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@
1010
:toc-title:
1111
:imagesdir: images
1212
:prewrap!:
13+
// n-1 and n+1 OCP versions relative to the current branch's {product-version} attr
14+
:ocp-nminus1: 4.17
15+
:ocp-nplus1: 4.19
16+
// Operating system attributes
1317
:op-system-first: Red Hat Enterprise Linux CoreOS (RHCOS)
1418
:op-system: RHCOS
1519
:op-system-lowercase: rhcos

_topic_maps/_topic_map.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2097,8 +2097,8 @@ Topics:
20972097
Topics:
20982098
- Name: Managing extensions
20992099
File: managing-ce
2100-
- Name: Upgrade edges
2101-
File: upgrade-edges
2100+
- Name: Update paths
2101+
File: update-paths
21022102
- Name: CRD upgrade safety
21032103
File: crd-upgrade-safety
21042104
---

extensions/ce/managing-ce.adoc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,13 @@ include::modules/olmv1-installing-an-operator.adoc[leveloffset=+1]
2525
.Additional resources
2626
* xref:../../extensions/ce/managing-ce.adoc#olmv1-supported-extensions_managing-ce[Supported extensions]
2727
* xref:../../extensions/ce/managing-ce.adoc#olmv1-creating-a-service-account_managing-ce[Creating a service account]
28-
* xref:../../extensions/ce/upgrade-edges.adoc#olmv1-about-target-versions_upgrade-edges[Example custom resources (CRs) that specify a target version]
29-
* xref:../../extensions/ce/upgrade-edges.adoc#olmv1-version-range-support_upgrade-edges[Support for version ranges]
28+
* xref:../../extensions/ce/update-paths.adoc#olmv1-about-target-versions_update-paths[Example custom resources (CRs) that specify a target version]
29+
* xref:../../extensions/ce/update-paths.adoc#olmv1-version-range-support_update-paths[Support for version ranges]
3030
3131
include::modules/olmv1-updating-an-operator.adoc[leveloffset=+1]
3232

3333
[role="_additional-resources"]
3434
.Additional resources
35-
* xref:../../extensions/ce/upgrade-edges.adoc#upgrade-edges[Upgrade edges]
35+
* xref:../../extensions/ce/update-paths.adoc#update-paths[Update paths]
3636
3737
include::modules/olmv1-deleting-an-operator.adoc[leveloffset=+1]

extensions/ce/update-paths.adoc

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
:_mod-docs-content-type: ASSEMBLY
2+
[id="update-paths"]
3+
= Update paths
4+
include::_attributes/common-attributes.adoc[]
5+
:context: update-paths
6+
7+
toc::[]
8+
9+
When determining _update paths_, also known as upgrade edges or upgrade constraints, for an installed cluster extension, {olmv1-first} supports {olmv0} semantics starting in {product-title} 4.16. This support follows the behavior from {olmv0}, including `replaces`, `skips`, and `skipRange` directives, with a few noted differences.
10+
11+
By supporting {olmv0} semantics, {olmv1} accurately reflects the update graph from catalogs.
12+
13+
.Differences from original {olmv0} implementation
14+
15+
* If there are multiple possible successors, {olmv1} behavior differs in the following ways:
16+
** In {olmv0}, the successor closest to the channel head is chosen.
17+
** In {olmv1}, the successor with the highest semantic version (semver) is chosen.
18+
19+
* Consider the following set of file-based catalog (FBC) channel entries:
20+
+
21+
[source,yaml]
22+
----
23+
# ...
24+
- name: example.v3.0.0
25+
skips: ["example.v2.0.0"]
26+
- name: example.v2.0.0
27+
skipRange: >=1.0.0 <2.0.0
28+
----
29+
+
30+
If `1.0.0` is installed, {olmv1} behavior differs in the following ways:
31+
+
32+
--
33+
** {olmv0-caps} will not detect an update path to `v2.0.0` because `v2.0.0` is skipped and not on the `replaces` chain.
34+
** {olmv1} will detect the update path because {olmv1} does not have a concept of a `replaces` chain. {olmv1} finds all entries that have a `replace`, `skip`, or `skipRange` value that covers the currently installed version.
35+
--
36+
37+
[role="_additional-resources"]
38+
.Additional resources
39+
* xref:../../operators/understanding/olm/olm-workflow.adoc#olm-upgrades_olm-workflow[{olmv0-caps} upgrade semantics]
40+
41+
include::modules/olmv1-version-range-support.adoc[leveloffset=+1]
42+
43+
include::modules/olmv1-version-range-comparisons.adoc[leveloffset=+1]
44+
include::modules/olmv1-about-target-versions.adoc[leveloffset=+1]
45+
include::modules/olmv1-forcing-an-update-or-rollback.adoc[leveloffset=+1]
46+
47+
[role="_additional-resources"]
48+
.Additional resources
49+
* xref:../../extensions/ce/update-paths.adoc#olmv1-version-range-support_update-paths[Support for version ranges]
50+
// after #82245 merges, add an xref to _Creating a service account to manage cluster extensions_
51+
52+
include::modules/olmv1-ocp-compat.adoc[leveloffset=+1]
53+
54+
[role="_additional-resources"]
55+
.Additional resources
56+
* link:https://kubernetes.io/docs/reference/using-api/deprecation-guide/[Deprecated API Migration Guide] (Kubernetes documentation)
57+
58+
59+
include::modules/olmv1-blocked-cluster-updates.adoc[leveloffset=+2]
60+
61+
[role="_additional-resources"]
62+
.Additional resources
63+
* xref:../../updating/understanding_updates/intro-to-updates.adoc#understanding_clusteroperator_conditiontypes_understanding-openshift-updates[Understanding cluster Operator condition types]
64+
* xref:../../operators/admin/olm-upgrading-operators.adoc#olm-upgrading-operators[Upgrading installed Operators]
65+
* xref:../../operators/admin/olm-deleting-operators-from-cluster.adoc#olm-deleting-operators-from-a-cluster[Deleting Operators from a cluster]
66+
* xref:../../operators/operator-reference.adoc#cluster-operators-ref-olmv1_cluster-operators-ref[Cluster Operators reference -> {olmv1-first} Operator]

extensions/ce/upgrade-edges.adoc

Lines changed: 0 additions & 50 deletions
This file was deleted.

modules/olm-channel-schema.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
[id="olm-channel-schema_{context}"]
66
= olm.channel schema
77

8-
The `olm.channel` schema defines a channel within a package, the bundle entries that are members of the channel, and the upgrade edges for those bundles.
8+
The `olm.channel` schema defines a channel within a package, the bundle entries that are members of the channel, and the upgrade paths for those bundles.
99

1010
If a bundle entry represents an edge in multiple `olm.channel` blobs, it can only appear once per channel.
1111

modules/olm-fb-catalogs-guidelines.adoc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,12 @@ Consider the following guidelines when maintaining file-based catalogs.
1212

1313
The general advice with Operator Lifecycle Manager (OLM) is that bundle images and their metadata should be treated as immutable.
1414

15-
If a broken bundle has been pushed to a catalog, you must assume that at least one of your users has upgraded to that bundle. Based on that assumption, you must release another bundle with an upgrade edge from the broken bundle to ensure users with the broken bundle installed receive an upgrade. OLM will not reinstall an installed bundle if the contents of that bundle are updated in the catalog.
15+
If a broken bundle has been pushed to a catalog, you must assume that at least one of your users has upgraded to that bundle. Based on that assumption, you must release another bundle with an upgrade path from the broken bundle to ensure users with the broken bundle installed receive an upgrade. OLM will not reinstall an installed bundle if the contents of that bundle are updated in the catalog.
1616

1717
However, there are some cases where a change in the catalog metadata is preferred:
1818

1919
* Channel promotion: If you already released a bundle and later decide that you would like to add it to another channel, you can add an entry for your bundle in another `olm.channel` blob.
20-
* New upgrade edges: If you release a new `1.2.z` bundle version, for example `1.2.4`, but `1.3.0` is already released, you can update the catalog metadata for `1.3.0` to skip `1.2.4`.
20+
* New upgrade paths: If you release a new `1.2.z` bundle version, for example `1.2.4`, but `1.3.0` is already released, you can update the catalog metadata for `1.3.0` to skip `1.2.4`.
2121

2222
[id="olm-fb-catalogs-source-control_{context}"]
2323
== Source control

modules/olm-fb-catalogs.adoc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ This editability enables the following features and user-defined extensions:
1616
--
1717
* Promoting an existing bundle to a new channel
1818
* Changing the default channel of a package
19-
* Custom algorithms for adding, updating, and removing upgrade edges
19+
* Custom algorithms for adding, updating, and removing upgrade paths
2020
--
2121

2222
Composability::
@@ -34,6 +34,6 @@ Because Operator authors are most familiar with their Operator, its dependencies
3434
Extensibility::
3535
The file-based catalog specification is a low-level representation of a catalog. While it can be maintained directly in its low-level form, catalog maintainers can build interesting extensions on top that can be used by their own custom tooling to make any number of mutations.
3636
+
37-
For example, a tool could translate a high-level API, such as `(mode=semver)`, down to the low-level, file-based catalog format for upgrade edges. Or a catalog maintainer might need to customize all of the bundle metadata by adding a new property to bundles that meet a certain criteria.
37+
For example, a tool could translate a high-level API, such as `(mode=semver)`, down to the low-level, file-based catalog format for upgrade paths. Or a catalog maintainer might need to customize all of the bundle metadata by adding a new property to bundles that meet a certain criteria.
3838
+
3939
While this extensibility allows for additional official tooling to be developed on top of the low-level APIs for future {product-title} releases, the major benefit is that catalog maintainers have this capability as well.

modules/olm-terms.adoc

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,13 @@ An Operator may have a _dependency_ on another Operator being present in the clu
4343

4444
OLM resolves dependencies by ensuring that all specified versions of Operators and CRDs are installed on the cluster during the installation phase. This dependency is resolved by finding and installing an Operator in a catalog that satisfies the required CRD API, and is not related to packages or bundles.
4545

46+
[id="olm-common-terms-extension_{context}"]
47+
== Extension
48+
49+
Extensions enable cluster administrators to extend capabilities for users on their {product-tile} cluster. Extensions are managed by {olmv1-first}.
50+
51+
The `ClusterExtension` API streamlines management of installed extensions, which includes Operators via the `registry+v1` bundle format, by consolidating user-facing APIs into a single object. Administrators and SREs can use the API to automate processes and define desired states by using GitOps principles.
52+
4653
[id="olm-common-terms-index-image_{context}"]
4754
== Index image
4855
In the bundle format, an _index image_ refers to an image of a database (a database snapshot) that contains information about Operator bundles including CSVs and CRDs of all versions. This index can host a history of Operators on a cluster and be maintained by adding or removing Operators using the `opm` CLI tool.
@@ -57,6 +64,13 @@ A _tenant_ in {product-title} is a user or group of users that share common acce
5764

5865
When a cluster is shared by multiple users or groups, it is considered a _multitenant_ cluster.
5966

67+
[id="olm-common-terms-operator_{context}"]
68+
== Operator
69+
70+
Operators are a method of packaging, deploying, and managing a Kubernetes application. A Kubernetes application is an app that is both deployed on Kubernetes and managed using the Kubernetes APIs and `kubectl` or `oc` tooling.
71+
72+
In {olmv1-first}, the `ClusterExtension` API streamlines management of installed extensions, which includes Operators via the `registry+v1` bundle format.
73+
6074
[id="olm-common-terms-operatorgroup_{context}"]
6175
== Operator group
6276

@@ -77,3 +91,5 @@ A _subscription_ keeps CSVs up to date by tracking a channel in a package.
7791
[id="olm-common-terms-update-graph_{context}"]
7892
== Update graph
7993
An _update graph_ links versions of CSVs together, similar to the update graph of any other packaged software. Operators can be installed sequentially, or certain versions can be skipped. The update graph is expected to grow only at the head with newer versions being added.
94+
95+
Also known as _update edges_ or _update paths_.
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
// Module included in the following assemblies:
2+
//
3+
// * extensions/ce/update-paths.adoc
4+
5+
:_mod-docs-content-type: CONCEPT
6+
[id="olmv1-blocked-cluster-updates_{context}"]
7+
= Cluster updates blocked by olm cluster Operator
8+
9+
If an installed Operator's `olm.maxOpenShiftVersion` field is set and a cluster administrator attempts to update their cluster to a version that the Operator does not provide a valid update path for, the cluster update fails and the `Upgradeable` status for the `olm` cluster Operator is set to `False`.
10+
11+
To resolve the issue, the cluster administrator must either update the installed Operator to a version with a valid update path, if one is available, or they must uninstall the Operator. Then, they can attempt the cluster update again.

0 commit comments

Comments
 (0)