Search documentation
karat

+

K

ReferenceApollo Product SpecificationProducts and PackagingProduct Release Incompatibilities
Feedback

Product Release Incompatibilities Extension

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:

  • If Service A is added to the Environment but Service B is already installed, Apollo will prevent Service A from being installed since that would violate Service A’s incompatibility with Service B.
  • If Service A is already installed in the Environment and Service B is added later, Apollo will prevent Service B from being installed since that would violate Service A’s incompatibility with Service B.

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.

Version Incompatibility

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 Type

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.