diff --git a/Makefile b/Makefile index 8e6e295892..fbb19078be 100644 --- a/Makefile +++ b/Makefile @@ -63,7 +63,7 @@ export CONFIGMAP_SERVER_IMAGE ?= quay.io/operator-framework/configmap-operator-r PKG := github.com/operator-framework/operator-lifecycle-manager IMAGE_REPO ?= quay.io/operator-framework/olm -IMAGE_TAG ?= "dev" +IMAGE_TAG ?= "local" # Go build settings # @@ -102,8 +102,8 @@ KUBEBUILDER_ASSETS ?= $(shell $(SETUP_ENVTEST) use -p path $(KUBE_MINOR).x) # Kind node image tags are in the format x.y.z we pin to version x.y.0 because patch releases and node images # are not guaranteed to be available when a new version of the kube apis is released -KIND_CLUSTER_IMAGE := kindest/node:v$(KUBE_MINOR).0 -KIND_CLUSTER_NAME ?= kind-olmv0 +export KIND_CLUSTER_IMAGE := kindest/node:v$(KUBE_MINOR).0 +export KIND_CLUSTER_NAME ?= kind-olmv0 # Targets # # Disable -j flag for make @@ -145,6 +145,10 @@ image: export GOOS = linux image: clean build #HELP Build image image for linux on host architecture docker build -t $(IMAGE_REPO):$(IMAGE_TAG) -f Dockerfile bin +.PHONE: build-e2e-fixture-images +build-e2e-fixture-images: #HELP Build images for e2e testing + ./scripts/e2e_test_fixtures.sh + .PHONY: e2e-build # the e2e and experimental_metrics tags are required to get e2e tests to pass # search the code for go:build e2e or go:build experimental_metrics to see where these tags are used @@ -207,13 +211,18 @@ kind-clean: $(KIND) #HELP Delete kind cluster $KIND_CLUSTER_NAME (default: kind- .PHONY: kind-create kind-create: kind-clean #HELP Create a new kind cluster $KIND_CLUSTER_NAME (default: kind-olmv0) - $(KIND) create cluster --name $(KIND_CLUSTER_NAME) --image $(KIND_CLUSTER_IMAGE) $(KIND_CREATE_OPTS) + ./scripts/kind_with_registry.sh $(KIND) export kubeconfig --name $(KIND_CLUSTER_NAME) +.PHONY: load-test-images +export REGISTRY ?= localhost:5001 +load-test-images: #HELP Load the OLM images into the kind cluster's registry + ./scripts/e2e_test_fixtures.sh --push-to="localhost:5001" + .PHONY: deploy -OLM_IMAGE := quay.io/operator-framework/olm:local +OLM_IMAGE ?= $(IMAGE_REPO):$(IMAGE_TAG) deploy: $(KIND) $(HELM) #HELP Deploy OLM to kind cluster $KIND_CLUSTER_NAME (default: kind-olmv0) using $OLM_IMAGE (default: quay.io/operator-framework/olm:local) - $(KIND) load docker-image $(OLM_IMAGE) --name $(KIND_CLUSTER_NAME); \ + $(KIND) load docker-image $(OLM_IMAGE) --name $(KIND_CLUSTER_NAME) $(HELM) upgrade --install olm deploy/chart \ --set debug=true \ --set olm.image.ref=$(OLM_IMAGE) \ diff --git a/scripts/build_test_images.sh b/scripts/build_test_images.sh deleted file mode 100755 index 32f1fcaa6e..0000000000 --- a/scripts/build_test_images.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/env bash - -# Busybox Operator Index Image -docker build -t quay.io/olmtest/busybox-bundle:1.0.0 ./test/images/busybox-index/busybox/1.0.0 -docker build -t quay.io/olmtest/busybox-bundle:2.0.0 ./test/images/busybox-index/busybox/2.0.0 - -docker build -t quay.io/olmtest/busybox-dependency-bundle:1.0.0 ./test/images/busybox-index/busybox-dependency/1.0.0 -docker build -t quay.io/olmtest/busybox-dependency-bundle:2.0.0 ./test/images/busybox-index/busybox-dependency/2.0.0 - -docker push quay.io/olmtest/busybox-bundle:1.0.0 -docker push quay.io/olmtest/busybox-bundle:2.0.0 -docker push quay.io/olmtest/busybox-dependency-bundle:1.0.0 -docker push quay.io/olmtest/busybox-dependency-bundle:2.0.0 - -opm index add --bundles quay.io/olmtest/busybox-dependency-bundle:1.0.0,quay.io/olmtest/busybox-bundle:1.0.0 --tag quay.io/olmtest/busybox-dependencies-index:1.0.0-with-ListBundles-method -c docker -docker push quay.io/olmtest/busybox-dependencies-index:1.0.0-with-ListBundles-method - -opm index add --bundles quay.io/olmtest/busybox-dependency-bundle:2.0.0,quay.io/olmtest/busybox-bundle:2.0.0 --tag quay.io/olmtest/busybox-dependencies-index:2.0.0-with-ListBundles-method --from-index quay.io/olmtest/busybox-dependencies-index:1.0.0-with-ListBundles-method -c docker -docker push quay.io/olmtest/busybox-dependencies-index:2.0.0-with-ListBundles-method diff --git a/scripts/e2e_test_fixtures.sh b/scripts/e2e_test_fixtures.sh new file mode 100755 index 0000000000..6d8c39381a --- /dev/null +++ b/scripts/e2e_test_fixtures.sh @@ -0,0 +1,30 @@ +#!/usr/bin/env bash + +KIND=${KIND:-kind} +CONTAINER_RUNTIME=${CONTAINER_RUNTIME:-docker} + +# Default values +OPERATOR_REGISTRY_VERSION="${OPERATOR_REGISTRY_VERSION:-$(go list -m github.com/operator-framework/operator-registry | cut -d" " -f2 | sed 's/^v//')}" +KIND_CLUSTER_NAME="${KIND_CLUSTER_NAME:-kind-olmv0}" +REGISTRY="${REGISTRY:-localhost:5001}" + +# Fixtures +# Note: the following catalogs reference bundles stored in quay.io/olmtest +INDEX_V1="${REGISTRY}/busybox-dependencies-index:1.0.0-with-ListBundles-method-${OPM_VERSION}" +INDEX_V2="${REGISTRY}/busybox-dependencies-index:2.0.0-with-ListBundles-method-${OPM_VERSION}" +TEST_CATALOG_IMAGE="${REGISTRY}/test-catalog:e2e" + +## Build +${CONTAINER_RUNTIME} build -t "${INDEX_V1}" --build-arg="OPM_VERSION=v${OPERATOR_REGISTRY_VERSION}" -f ./test/images/busybox-index/index.Dockerfile ./test/images/busybox-index/indexv1 +${CONTAINER_RUNTIME} build -t "${INDEX_V2}" --build-arg="OPM_VERSION=v${OPERATOR_REGISTRY_VERSION}" -f ./test/images/busybox-index/index.Dockerfile ./test/images/busybox-index/indexv2 + +# The following catalog used for e2e tests related to serving an extracted registry +# See catalog_e2e_test.go +# let's just reuse one of the other catalogs for this - the tests don't care about the content +# only that a catalog's content can be extracted and served by a different container +${CONTAINER_RUNTIME} tag "${INDEX_V2}" "${TEST_CATALOG_IMAGE}" + +### Push +${CONTAINER_RUNTIME} push "${INDEX_V1}" +${CONTAINER_RUNTIME} push "${INDEX_V2}" +${CONTAINER_RUNTIME} push "${TEST_CATALOG_IMAGE}" diff --git a/scripts/kind_with_registry.sh b/scripts/kind_with_registry.sh new file mode 100755 index 0000000000..1a05734664 --- /dev/null +++ b/scripts/kind_with_registry.sh @@ -0,0 +1,77 @@ +#!/bin/sh +set -o errexit +set -x + +. ".bingo/variables.env" + +# Original source: https://kind.sigs.k8s.io/docs/user/local-registry/ +KIND_CLUSTER_NAME=${KIND_CLUSTER_NAME:-kind-olmv0} +KIND=${KIND:-kind} +DOCKER=${DOCKER:-docker} +KUBECTL=${KUBECTL:-kubectl} + +# 1. Create registry container unless it already exists +reg_name='kind-registry' +reg_port='5001' +if [ "$(${DOCKER} inspect -f '{{.State.Running}}' "${reg_name}" 2>/dev/null || true)" != 'true' ]; then + ${DOCKER} run \ + -d --restart=always -p "127.0.0.1:${reg_port}:5000" --network bridge --name "${reg_name}" \ + registry:2 +fi + +# 2. Create kind cluster with containerd registry config dir enabled +# TODO: kind will eventually enable this by default and this patch will +# be unnecessary. +# +# See: +# https://github.com/kubernetes-sigs/kind/issues/2875 +# https://github.com/containerd/containerd/blob/main/docs/cri/config.md#registry-configuration +# See: https://github.com/containerd/containerd/blob/main/docs/hosts.md +if [ -n "${KIND_CLUSTER_IMAGE}" ]; then + KIND_IMAGE="--image=${KIND_CLUSTER_IMAGE}" +fi +cat <