mirror of
https://github.com/openshift/openshift-docs.git
synced 2026-02-06 06:46:26 +01:00
70 lines
2.8 KiB
Plaintext
70 lines
2.8 KiB
Plaintext
// Module included in the following assemblies:
|
|
//
|
|
// * operators/understanding_olm/olm-understanding-operatorgroups.adoc
|
|
|
|
[id="olm-operatorgroups-intersection_{context}"]
|
|
= OperatorGroup intersection
|
|
|
|
Two OperatorGroups are said to have _intersecting provided APIs_ if the
|
|
intersection of their target namespace sets is not an empty set and the
|
|
intersection of their provided API sets, defined by `olm.providedAPIs`
|
|
annotations, is not an empty set.
|
|
|
|
A potential issue is that OperatorGroups with intersecting provided APIs can
|
|
compete for the same resources in the set of intersecting namespaces.
|
|
|
|
[NOTE]
|
|
====
|
|
When checking intersection rules, an OperatorGroup's namespace is always
|
|
included as part of its selected target namespaces.
|
|
====
|
|
|
|
[discrete]
|
|
[id="olm-operatorgroups-intersection-rules_{context}"]
|
|
=== Rules for intersection
|
|
|
|
Each time an active member CSV synchronizes, OLM queries the cluster for the set
|
|
of intersecting provided APIs between the CSV's OperatorGroup and all others.
|
|
OLM then checks if that set is an empty set:
|
|
|
|
* If `true` and the CSV's provided APIs are a subset of the OperatorGroup's:
|
|
** Continue transitioning.
|
|
* If `true` and the CSV's provided APIs are _not_ a subset of the
|
|
OperatorGroup's:
|
|
** If the OperatorGroup is static:
|
|
*** Clean up any deployments that belong to the CSV.
|
|
*** Transition the CSV to a failed state with status reason
|
|
`CannotModifyStaticOperatorGroupProvidedAPIs`.
|
|
** If the OperatorGroup is _not_ static:
|
|
*** Replace the OperatorGroup's `olm.providedAPIs` annotation with the union of
|
|
itself and the CSV's provided APIs.
|
|
* If `false` and the CSV's provided APIs are _not_ a subset of the
|
|
OperatorGroup's:
|
|
** Clean up any deployments that belong to the CSV.
|
|
** Transition the CSV to a failed state with status reason
|
|
`InterOperatorGroupOwnerConflict`.
|
|
* If `false` and the CSV's provided APIs are a subset of the OperatorGroup's:
|
|
** If the OperatorGroup is static:
|
|
*** Clean up any deployments that belong to the CSV.
|
|
*** Transition the CSV to a failed state with status reason
|
|
`CannotModifyStaticOperatorGroupProvidedAPIs`.
|
|
** If the OperatorGroup is _not_ static:
|
|
*** Replace the OperatorGroup's `olm.providedAPIs` annotation with the
|
|
difference between itself and the CSV's provided APIs.
|
|
|
|
[NOTE]
|
|
====
|
|
Failure states caused by OperatorGroups are non-terminal.
|
|
====
|
|
|
|
The following actions are performed each time an OperatorGroup synchronizes:
|
|
|
|
* The set of provided APIs from active member CSVs is calculated from the
|
|
cluster. Note that copied CSVs are ignored.
|
|
* The cluster set is compared to `olm.providedAPIs`, and if `olm.providedAPIs`
|
|
contains any extra APIs, then those APIs are pruned.
|
|
* All CSVs that provide the same APIs across all namespaces are requeued. This
|
|
notifies conflicting CSVs in intersecting groups that their conflict has
|
|
possibly been resolved, either through resizing or through deletion of the
|
|
conflicting CSV.
|