This extension specifies incompatibilities with other Apollo Product Releases. Given several Product Releases and their manifests, Apollo will ensure that Product Releases that are incompatible with each other are not installed in the same Environment at the same time.
Copied!1 2 3 4 5 6 7 8 9
extensions: product-incompatibilities: # An unordered list of product incompatibilities - product-group: org.postgresql # (required) The incompatibility's product-group (as per its Apollo Product Spec manifest) product-name: postgresql # (required) The incompatibility's product-name (as per its Apollo Product Spec manifest) product-type: helm-chart # (optional) The incompatibility's product-type (as per its Apollo Product Spec manifest) minimum-version: 9.3.6 # (optional) An orderable version indicating the lowest allowed # version (inclusive) for this incompatibility maximum-version: 9.6.x # (optional) A version matcher indicating the highest allowed version # (inclusive) for this incompatibility
Orderable versions and version matchers are defined in Product Version Specification.
Consider the scenario of two services, Service A and Service B, which are incompatible and cannot be installed simultaneously in the same environment. To address this issue, both services should declare incompatibilities with each other in their respective Product Release manifests.
However, it is also important to note that specifying a Product Release incompatibility for only one of the services, either Service A or Service B, is sufficient. This is because Product Release incompatibilities function bidirectionally. For instance, if only an incompatibility on Service B was added to Service A's Product Release manifest:
This approach ensures that only one of the services, either Service A or Service B, can be installed in the environment at any given time. However, Product Release incompatibilities do not guarantee the installation of either Product. It is the responsibility of an Environment editor to designate either Service A or Service B for management by Apollo, as needed.
Product Release incompatibilities can also be used in conjunction with Product Release dependencies.
The optional minimum-version
and maximum-version
fields specify the range of versions that a Product Release is incompatible with.
For example, a Product Release for Service A is incompatible with version v
of Service B if and only if v
satisfies both the lower and the upper bounds:
minimum-version
is an orderable version such that v >= minimum-version
maximum-version
is a version matcher matching some release version upper-bound
such that upper-bound >= v
In the postgresql
example above, the following versions would satisfy the incompatibility specification: 9.3.6
, 9.4.0
, 9.4.2-rc1
, 9.6.0-rc1
, and 9.6.1-22-g1a2b3c4
. The following examples do not satisfy the version range: 9.2.0
(too low), 10.0.0
(too high), 11.1.2-rc2
(too high), 9.7.0-1-gabcdef
(too high), 9.5.0-custom-branch
(non-orderable).
Note that when maximum-version
is a release version matcher, then snapshot versions with the same major/minor/patch components do not satisfy the maximum-version constraint since they are larger. For example, if maximum-version
is 1.2.3
, then 1.2.3
and 1.2.3-rc4
satisfy the maximum-version constraint whereas 1.2.4
and 1.2.3-4-gabcdef
do not.
Product Release incompatibilities can optionally be defined for a specific Product Type. If a product type is not specified, the incompatibility applies to all product types.