diff --git a/Makefile b/Makefile index 0f9eb20f1..9935883b9 100644 --- a/Makefile +++ b/Makefile @@ -51,7 +51,7 @@ CONTAINER_RUNTIME := docker else ifneq (, $(shell command -v podman 2>/dev/null)) CONTAINER_RUNTIME := podman else -$(warning Could not find docker or podman in path! This may result in targets requiring a container runtime failing!) +$(warning Could not find docker or podman in path! This may result in targets requiring a container runtime failing!) endif KUSTOMIZE_BUILD_DIR := config/default @@ -194,6 +194,7 @@ registry-load-bundles: ## Load selected e2e testdata container images created in testdata/bundles/registry-v1/build-push-e2e-bundle.sh ${E2E_REGISTRY_NAMESPACE} $(REGISTRY_ROOT)/bundles/registry-v1/prometheus-operator:v1.2.0 prometheus-operator.v1.2.0 prometheus-operator.v1.0.0 testdata/bundles/registry-v1/build-push-e2e-bundle.sh ${E2E_REGISTRY_NAMESPACE} $(REGISTRY_ROOT)/bundles/registry-v1/prometheus-operator:v2.0.0 prometheus-operator.v2.0.0 prometheus-operator.v1.0.0 testdata/bundles/registry-v1/build-push-e2e-bundle.sh ${E2E_REGISTRY_NAMESPACE} $(REGISTRY_ROOT)/bundles/registry-v1/package-with-webhooks:v1.0.0 package-with-webhooks.v1.0.0 package-with-webhooks.v1.0.0 + testdata/bundles/registry-v1/build-push-e2e-bundle.sh ${E2E_REGISTRY_NAMESPACE} $(REGISTRY_ROOT)/bundles/registry-v1/package-with-unsupported-install-modes:v1.0.0 package-with-unsupported-install-modes.v1.0.0 package-with-unsupported-install-modes.v1.0.0 #SECTION Build diff --git a/test/e2e/cluster_extension_registryV1_limitations_test.go b/test/e2e/cluster_extension_registryV1_limitations_test.go index 824b1f686..15ba8eab7 100644 --- a/test/e2e/cluster_extension_registryV1_limitations_test.go +++ b/test/e2e/cluster_extension_registryV1_limitations_test.go @@ -37,3 +37,29 @@ func TestClusterExtensionPackagesWithWebhooksAreNotAllowed(t *testing.T) { assert.Equal(ct, &ocv1alpha1.BundleMetadata{Name: "package-with-webhooks.1.0.0", Version: "1.0.0"}, clusterExtension.Status.ResolvedBundle) }, pollDuration, pollInterval) } + +func TestClusterExtensionPackagesWithUnsupportedInstallModesAreNotAllowed(t *testing.T) { + ctx := context.Background() + clusterExtension, catalog := testInit(t) + defer testCleanup(t, catalog, clusterExtension) + defer getArtifactsOutput(t) + + clusterExtension.Spec = ocv1alpha1.ClusterExtensionSpec{ + PackageName: "package-with-unsupported-install-modes", + Version: "1.0.0", + InstallNamespace: "default", + } + + require.NoError(t, c.Create(ctx, clusterExtension)) + require.EventuallyWithT(t, func(ct *assert.CollectT) { + assert.NoError(ct, c.Get(ctx, types.NamespacedName{Name: clusterExtension.Name}, clusterExtension)) + cond := apimeta.FindStatusCondition(clusterExtension.Status.Conditions, ocv1alpha1.TypeInstalled) + if !assert.NotNil(ct, cond) { + return + } + assert.Equal(ct, metav1.ConditionFalse, cond.Status) + assert.Equal(ct, ocv1alpha1.ReasonInstallationFailed, cond.Reason) + assert.Contains(ct, cond.Message, "he bundle does not support required \"AllNamespaces\" install mode. Supported install modes: [MultiNamespace OwnNamespace SingleNamespace]") + assert.Equal(ct, &ocv1alpha1.BundleMetadata{Name: "package-with-unsupported-install-modes.1.0.0", Version: "1.0.0"}, clusterExtension.Status.ResolvedBundle) + }, pollDuration, pollInterval) +} diff --git a/testdata/bundles/registry-v1/package-with-unsupported-install-modes.v1.0.0/Dockerfile b/testdata/bundles/registry-v1/package-with-unsupported-install-modes.v1.0.0/Dockerfile new file mode 100644 index 000000000..5b03cf08f --- /dev/null +++ b/testdata/bundles/registry-v1/package-with-unsupported-install-modes.v1.0.0/Dockerfile @@ -0,0 +1,15 @@ +FROM scratch + +# Core bundle labels. +LABEL operators.operatorframework.io.bundle.mediatype.v1=registry+v1 +LABEL operators.operatorframework.io.bundle.manifests.v1=manifests/ +LABEL operators.operatorframework.io.bundle.metadata.v1=metadata/ +LABEL operators.operatorframework.io.bundle.package.v1=package-with-unsupported-install-modes +LABEL operators.operatorframework.io.bundle.channels.v1=beta +LABEL operators.operatorframework.io.metrics.builder=operator-sdk-v1.28.0 +LABEL operators.operatorframework.io.metrics.mediatype.v1=metrics+v1 +LABEL operators.operatorframework.io.metrics.project_layout=unknown + +# Copy files to locations specified by labels. +COPY manifests /manifests/ +COPY metadata /metadata/ diff --git a/testdata/bundles/registry-v1/package-with-unsupported-install-modes.v1.0.0/manifests/package-with-unsupported-install-modes.clusterserviceversion.yaml b/testdata/bundles/registry-v1/package-with-unsupported-install-modes.v1.0.0/manifests/package-with-unsupported-install-modes.clusterserviceversion.yaml new file mode 100644 index 000000000..d437d6fc3 --- /dev/null +++ b/testdata/bundles/registry-v1/package-with-unsupported-install-modes.v1.0.0/manifests/package-with-unsupported-install-modes.clusterserviceversion.yaml @@ -0,0 +1,34 @@ +apiVersion: operators.coreos.com/v1alpha1 +kind: ClusterServiceVersion +metadata: + name: package-with-unsupported-install-modes.v1.0.0 + namespace: placeholder +spec: + webhookdefinitions: + - admissionReviewVersions: + - v1alpha1 + - v1beta1 + containerPort: 443 + conversionCRDs: + - testcds.package-with-unsupported-install-modes.io + deploymentName: test-operator-controller-manager + generateName: testcrds + sideEffects: None + targetPort: 9443 + type: ConversionWebhook + webhookPath: /convert + description: Test package with webhooks + displayName: Package with webhooks + icon: + - base64data: PHN2ZyB3aWR0aD0iMjQ5MCIgaGVpZ2h0PSIyNTAwIiB2aWV3Qm94PSIwIDAgMjU2IDI1NyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCI+PHBhdGggZD0iTTEyOC4wMDEuNjY3QzU3LjMxMS42NjcgMCA1Ny45NzEgMCAxMjguNjY0YzAgNzAuNjkgNTcuMzExIDEyNy45OTggMTI4LjAwMSAxMjcuOTk4UzI1NiAxOTkuMzU0IDI1NiAxMjguNjY0QzI1NiA1Ny45NyAxOTguNjg5LjY2NyAxMjguMDAxLjY2N3ptMCAyMzkuNTZjLTIwLjExMiAwLTM2LjQxOS0xMy40MzUtMzYuNDE5LTMwLjAwNGg3Mi44MzhjMCAxNi41NjYtMTYuMzA2IDMwLjAwNC0zNi40MTkgMzAuMDA0em02MC4xNTMtMzkuOTRINjcuODQyVjE3OC40N2gxMjAuMzE0djIxLjgxNmgtLjAwMnptLS40MzItMzMuMDQ1SDY4LjE4NWMtLjM5OC0uNDU4LS44MDQtLjkxLTEuMTg4LTEuMzc1LTEyLjMxNS0xNC45NTQtMTUuMjE2LTIyLjc2LTE4LjAzMi0zMC43MTYtLjA0OC0uMjYyIDE0LjkzMyAzLjA2IDI1LjU1NiA1LjQ1IDAgMCA1LjQ2NiAxLjI2NSAxMy40NTggMi43MjItNy42NzMtOC45OTQtMTIuMjMtMjAuNDI4LTEyLjIzLTMyLjExNiAwLTI1LjY1OCAxOS42OC00OC4wNzkgMTIuNTgtNjYuMjAxIDYuOTEuNTYyIDE0LjMgMTQuNTgzIDE0LjggMzYuNTA1IDcuMzQ2LTEwLjE1MiAxMC40Mi0yOC42OSAxMC40Mi00MC4wNTYgMC0xMS43NjkgNy43NTUtMjUuNDQgMTUuNTEyLTI1LjkwNy02LjkxNSAxMS4zOTYgMS43OSAyMS4xNjUgOS41MyA0NS40IDIuOTAyIDkuMTAzIDIuNTMyIDI0LjQyMyA0Ljc3MiAzNC4xMzguNzQ0LTIwLjE3OCA0LjIxMy00OS42MiAxNy4wMTQtNTkuNzg0LTUuNjQ3IDEyLjguODM2IDI4LjgxOCA1LjI3IDM2LjUxOCA3LjE1NCAxMi40MjQgMTEuNDkgMjEuODM2IDExLjQ5IDM5LjYzOCAwIDExLjkzNi00LjQwNyAyMy4xNzMtMTEuODQgMzEuOTU4IDguNDUyLTEuNTg2IDE0LjI4OS0zLjAxNiAxNC4yODktMy4wMTZsMjcuNDUtNS4zNTVjLjAwMi0uMDAyLTMuOTg3IDE2LjQwMS0xOS4zMTQgMzIuMTk3eiIgZmlsbD0iI0RBNEUzMSIvPjwvc3ZnPg== + mediatype: image/svg+xml + installModes: + - supported: true + type: OwnNamespace + - supported: true + type: SingleNamespace + - supported: true + type: MultiNamespace + - supported: false + type: AllNamespaces + version: 1.0.0 diff --git a/testdata/bundles/registry-v1/package-with-unsupported-install-modes.v1.0.0/metadata/annotations.yaml b/testdata/bundles/registry-v1/package-with-unsupported-install-modes.v1.0.0/metadata/annotations.yaml new file mode 100644 index 000000000..b1e445520 --- /dev/null +++ b/testdata/bundles/registry-v1/package-with-unsupported-install-modes.v1.0.0/metadata/annotations.yaml @@ -0,0 +1,10 @@ +annotations: + # Core bundle annotations. + operators.operatorframework.io.bundle.mediatype.v1: registry+v1 + operators.operatorframework.io.bundle.manifests.v1: manifests/ + operators.operatorframework.io.bundle.metadata.v1: metadata/ + operators.operatorframework.io.bundle.package.v1: package-with-unsupported-install-modes + operators.operatorframework.io.bundle.channels.v1: beta + operators.operatorframework.io.metrics.builder: operator-sdk-v1.28.0 + operators.operatorframework.io.metrics.mediatype.v1: metrics+v1 + operators.operatorframework.io.metrics.project_layout: unknown diff --git a/testdata/catalogs/test-catalog/catalog.yaml b/testdata/catalogs/test-catalog/catalog.yaml index 2911e341c..b7ed555d3 100644 --- a/testdata/catalogs/test-catalog/catalog.yaml +++ b/testdata/catalogs/test-catalog/catalog.yaml @@ -80,3 +80,24 @@ properties: value: packageName: package-with-webhooks version: 1.0.0 + +--- +schema: olm.package +name: package-with-unsupported-install-modes +defaultChannel: beta +--- +schema: olm.channel +name: beta +package: package-with-unsupported-install-modes +entries: + - name: package-with-unsupported-install-modes.1.0.0 +--- +schema: olm.bundle +name: package-with-unsupported-install-modes.1.0.0 +package: package-with-unsupported-install-modes +image: docker-registry.operator-controller-e2e.svc.cluster.local:5000/bundles/registry-v1/package-with-unsupported-install-modes:v1.0.0 +properties: + - type: olm.package + value: + packageName: package-with-unsupported-install-modes + version: 1.0.0