The Package Manifest Format for Operators is the legacy packaging format introduced by the Operator Framework. While this format is deprecated in OpenShift Container Platform 4.5, it is still supported and Operators provided by Red Hat are currently shipped using this method.
In this format, a version of an Operator is represented by a single cluster service version (CSV) and typically the custom resource definitions (CRDs) that define the owned APIs of the CSV, though additional objects may be included.
All versions of the Operator are nested in a single directory:
Example Package Manifest Format layout
etcd
├── 0.6.1
│ ├── etcdcluster.crd.yaml
│ └── etcdoperator.clusterserviceversion.yaml
├── 0.9.0
│ ├── etcdbackup.crd.yaml
│ ├── etcdcluster.crd.yaml
│ ├── etcdoperator.v0.9.0.clusterserviceversion.yaml
│ └── etcdrestore.crd.yaml
├── 0.9.2
│ ├── etcdbackup.crd.yaml
│ ├── etcdcluster.crd.yaml
│ ├── etcdoperator.v0.9.2.clusterserviceversion.yaml
│ └── etcdrestore.crd.yaml
└── etcd.package.yaml
It also includes a <name>.package.yaml
file that is the package manifest that defines the package name and channels details:
Example package manifest
packageName: etcd
channels:
- name: alpha
currentCSV: etcdoperator.v0.9.2
- name: beta
currentCSV: etcdoperator.v0.9.0
- name: stable
currentCSV: etcdoperator.v0.9.2
defaultChannel: alpha
When loading package manifests into the Operator Registry database, the following requirements are validated:
-
Every package has at least one channel.
-
Every CSV pointed to by a channel in a package exists.
-
Every version of an Operator has exactly one CSV.
-
If a CSV owns a CRD, that CRD must exist in the directory of the Operator version.
-
If a CSV replaces another, both the old and the new must exist in the package.