Test OLM Bundles
Pre-requisites
Versions listed are the ones known to work, lower versions may work but were not tested
-
task-3.17.0
(asdf
) -
operator-sdk-1.32.0
(asdf
) -
kubectl-1.25.3
(asdf
) -
helm-3.10.1
(asdf
) -
kustomize-4.5.7
(asdf
) -
yq-4.29.2
(asdf
) -
opm-1.26.2
(is auto-downloaded by script, or can be installed viaasdf
using asdf-opm plugin) -
kind-0.17.0
(asdf
) -
docker
(could be replaced bypodman
viaDOCKER="podman"
) -
podman
(some of the OperatorSDK toolchain use podman) -
k9s-0.26.7
(asdf
OPTIONAL)
Set up environment
Set up Podman
podman login registry.gitlab.com
Set up Docker
If you’re not using podman
for all tasks, authorize Docker to access registry.gitlab.com
:
docker login registry.gitlab.com
Set up Git
Ensure user.name
and user.email
are configured in Git.
Set up environment
variable name | required | default | description |
---|---|---|---|
OPERATOR_VERSION | yes | Version of Operator to upgrade to | |
PREVIOUS_OPERATOR_VERSION | yes | Version of Operator to upgrade from | |
LOCAL_IP | yes | 127.0.0.1 | Local machine IP, needed for GITLAB_OPERATOR_DOMAIN . When GITLAB_OPERATOR_DOMAIN is provided - LOCAL_IP can be omitted |
GITLAB_OPERATOR_OLM_REGISTRY | yes | registry.gitlab.com/gitlab-org/cloud-native/gitlab-operator/bundle | OLM Bundles and Catalogs Registry with released bundles and catalogs |
BUNDLE_REGISTRY | yes | Staging container registry to publish intermediary OLM Bundles and Catalogs to | |
OLM_TESTING_ENVIRONMENT | no | ./test_olm.env | File containing environment variables necessary for test runs |
OPERATOR_TAG | no | $OPERATOR_VERSION | Operator Container tag to test |
OLM_BUNDLE_SH | no | scripts/olm_bundle.sh | Path to underlying olm_bundle.sh script |
PROVISION_AND_DEPLOY_SH | no | scripts/provision_and_deploy.sh | Path to underlying provision_and_deploy.sh script |
YQ | no | yq | Path to yq utility |
OPM_VERSION | no | 1.26.2 |
opm version to automatically fetch if no binary specified in OPM
|
OPM | no | .build/opm | Path to opm binary. Auto-fetched if empty (using OPM_VERSION ) |
OSDK_BASE_DIR | no | .build/operatorhub-io | Directory for intermediate OLM Bundling artifacts storage |
OLM_PACKAGE_VERSION | no | $OPERATOR_TAG | Version to apply to OLM package |
KUBERNETES_TIMEOUT | no | 120s | Timeout for Kubernetes operations |
DO_NOT_PUBLISH | no | "" | Controls whether to compile and publish current bundle/catalog (to a temporary registry) or use already published ones from public registry |
BUNDLE_VERSION | no | $OPERATOR_VERSION | Version of the bundle to upgrade to |
PREVIOUS_BUNDLE_VERSION | no | $PREVIOUS_OPERATOR_VERSION | Version of the bundle to upgrade from |
PREVIOUS_CHART_VERSION | no | autogenerated | Chart version to upgrade from |
GITLAB_OPERATOR_DOMAIN | no | ${LOCAL_IP}.nip.io | Domain to deploy test GitLab instance to |
GITLAB_OPERATOR_DIR | no | . | Directory with GitLab Operator repository |
GITLAB_CHART_VERSION | no | first line in ${GITLAB_OPERATOR_DIR}/CHART_VERSIONS}
| Chart Version to upgrade to |
GITLAB_CHART_REPO | no | https://gitlab.com/gitlab-org/charts/gitlab | GitLab Helm Chart repository HTTP URI. Mainly used to fetch default KinD configs. |
K8S_VERSION | no | 1.25.9 | K8s version to use for cluster setup |
KIND_CONFIG | no |
examples/kind/kind-ssl.yaml from GitLab Chart’s default branch | KinD configuration file to prepare KinD cluster for GitLab deployment |
For additional variables look at Provision and deploy and OperatorHub publishing
Create test_olm.env
in Operator’s root dir (or point to a file in a custom location using ${OLM_TESTING_ENVIRONMENT}
environment variable)
Make sure to confirm every following customization line reflects your personal setup:
export OPERATOR_VERSION="0.10.2"
export BUNDLE_REGISTRY="registry.gitlab.com/dmakovey/gitlab-operator-bundle"
export PREVIOUS_OPERATOR_VERSION="0.9.1"
export LOCAL_IP="192.168.3.194"
export DO_NOT_PUBLISH="yes" # do not re-compile and publish bundle/catalog
# use the ones already published
Prepare KinD Cluster (Optional)
To run tests in KinD cluster with OLM set up:
scripts/test_olm.sh setup_kind_cluster
Otherwise current kubectl
context should point to an existing cluster that has OLM pre-installed
Running tests
-
Setup KinD cluster and deploy Operator there:
scripts/test_olm.sh upgrade_test_step1
Operator Pod should be up and running. Confirm by running:
kubectl get pod -n gitlab-system -l control-plane=controller-manager
-
Deploy “old” version of GitLab via Operator:
scripts/test_olm.sh upgrade_test_step2
Confirm GitLab has been deployed:
kubectl get -n gitlab-system gitlab
-
Upgrade the Operator:
scripts/test_olm.sh upgrade_test_step3
Confirm that Operator has been upgraded.
Wait for the install to roll out before next step
-
Upgrade GitLab:
scripts/test_olm.sh upgrade_test_step4
Confirm that GitLab has been upgraded and is functional
Wait for the upgrade to complete
-
Confirm GitLab is running:
scripts/test_olm.sh check_gitlab
above will query Operator for GitLab status, alternatively use
scripts/test_olm.sh check_gitlab2
which bypasses Operator checks and runs checks against GitLab instance itself.