|
||
---|---|---|
src/operator_repo | ||
tests | ||
.gitignore | ||
.pre-commit-config.yaml | ||
README.md | ||
pyproject.toml | ||
tox.ini |
README.md
operator-repo
This project is a library and utility for managing repositories of kubernetes operator packages as used by the Operator Lifecycle Manager (OLM) and OperatorHub. It provides functionality to load and parse YAML files, validate repository structures, operators and bundles, and perform upgrade graph verifications.
The old and deprecated package manifest format is not supported.
Getting Started
Installation
pip install git+https://whatever
Using the CLI
The CLI tool is called optool
accepts an optional --repo
or -r
argument pointing to the root directory of a
repository of operators. If one is not provided, the current directory will be used as the repository root.
list (or its alias ls)
Shows the contents of the resources given on the command line.
The format is either operator_name
to indicate an operator or operator_name/bundle_version
to
indicate a bundle. If no resource is given, then it will show the contents of the repo.
It accepts an optional --recursive
or -R
flag to recursively walk the tree below the given resources
when listing the contents.
Examples
$ optool ls etcd
Operator(etcd)
Bundle(etcd/0.6.1)
Bundle(etcd/0.9.0)
Bundle(etcd/0.9.2)
Bundle(etcd/0.9.4)
$ optool -r ~/operator-repo ls etcd/0.9.4
Bundle(etcd/0.9.4)
Description : Create and maintain highly-available etcd clusters on Kubernetes
Name : etcdoperator.v0.9.4
Channels : singlenamespace-alpha
Default channel : singlenamespace-alpha
Container image : quay.io/coreos/etcd-operator@sha256:66a37fd61a06a43969854ee6d3e21087a98b93838e284a6086b13917f96b0d9b
Replaces : etcdoperator.v0.9.2
Skips : []
check
Runs a suite of formal checks on the given operators or bundles.
Just like the list
command, it supports the --recursive
(-R
) flag.
If no suite is specified with the --suite
(-s
) option, the built-in operator_repo.checks
suite will be used.
The --list
(-l
) option can be used to list the checks contained in the selected suite.
Examples
$ optool check --list
operator checks:
- upgrade: Validate upgrade graphs for all channels
bundle checks:
- image: Check if containerImage is properly defined and used in a deployment
- operator_name: Check if the operator names used in CSV, metadata and filesystem are consistent
- semver: Check that the bundle version is semver compliant
$ optool check etcd/0.9.4
failure: check_operator_name(Bundle(etcd/0.9.4)): Operator name from annotations.yaml (etcd) does not match the name defined in the CSV (etcdoperator)
$ optool check -R datadog-operator
failure: check_image(Bundle(datadog-operator/0.1.3)): container image datadog/operator:v0.1.3 not used by any deployment
failure: check_image(Bundle(datadog-operator/0.3.1)): container image datadog/operator:0.2.0 not used by any deployment
failure: check_image(Bundle(datadog-operator/0.3.2)): container image datadog/operator:0.2.0 not used by any deployment
failure: check_image(Bundle(datadog-operator/0.4.0)): CSV doesn't define .metadata.annotations.containerImage
failure: check_image(Bundle(datadog-operator/0.5.0)): CSV doesn't define .metadata.annotations.containerImage
failure: check_image(Bundle(datadog-operator/0.6.0)): CSV doesn't define .metadata.annotations.containerImage
Creating a custom check suite
A check suite is a python package containing two modules, operator
and bundle
. All functions in those modules with
a name starting with check_
will be used as a check for operator or bundle resources respectively.
A check function must take a single argument, either an Operator
or a Bundle
object, and return a generator of
CheckResult
objects (either Fail
or Warn
).