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.
Docs
Edit this page to fix an error or add an improvement in a merge request.
Create an issue to suggest an improvement to this page.
Product
Create an issue if there's something you don't like about this feature.
Propose functionality by submitting a feature request.
Feature availability and product trials
View pricing to see all GitLab tiers and features, or to upgrade.
Try GitLab for free with access to all features for 30 days.
Get help
If you didn't find what you were looking for, search the docs.
If you want help with something specific and could use community support, post on the GitLab forum.
For problems setting up or using this feature (depending on your GitLab subscription).
Request support