Dependency resolution in OLM 1.0 (Technology Preview)

Operator Lifecycle Manager (OLM) 1.0 uses a dependency manager for resolving constraints over catalogs of RukPak bundles.

OLM 1.0 is a Technology Preview feature only. Technology Preview features are not supported with Red Hat production service level agreements (SLAs) and might not be functionally complete. Red Hat does not recommend using them in production. These features provide early access to upcoming product features, enabling customers to test functionality and provide feedback during the development process.

For more information about the support scope of Red Hat Technology Preview features, see Technology Preview Features Support Scope.

Concepts

There are a set of expectations from the user that the package manager should never do the following:

  • Install a package whose dependencies can not be fulfilled or that conflict with the dependencies of another package

  • Install a package whose constraints can not be met by the current set of installable packages

  • Update a package in a way that breaks another that depends on it

Example: Successful resolution

A user wants to install packages A and B that have the following dependencies:

Package A v0.1.0

Package B latest

↓ (depends on)

↓ (depends on)

Package C v0.1.0

Package D latest

Additionally, the user wants to pin the version of A to v0.1.0.

Packages and constraints passed to OLM 1.0

Packages

  • A

  • B

Constraints

  • A v0.1.0 depends on C v0.1.0

  • A pinned to v0.1.0

  • B depends on D

Output

  • Resolution set:

    • A v0.1.0

    • B latest

    • C v0.1.0

    • D latest

Example: Unsuccessful resolution

A user wants to install packages A and B that have the following dependencies:

Package A v0.1.0

Package B latest

↓ (depends on)

↓ (depends on)

Package C v0.1.0

Package C v0.2.0

Additionally, the user wants to pin the version of A to v0.1.0.

Packages and constraints passed to OLM 1.0

Packages

  • A

  • B

Constraints

  • A v0.1.0 depends on C v0.1.0

  • A pinned to v0.1.0

  • B latest depends on C v0.2.0

Output

  • Resolution set:

    • Unable to resolve because A v0.1.0 requires C v0.1.0, which conflicts with B latest requiring C v0.2.0