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.