@@ -389,6 +389,12 @@ ifneq ($(origin CATALOG_BASE_IMG), undefined)
389389FROM_INDEX_OPT := --from-index $(CATALOG_BASE_IMG )
390390endif
391391
392+ # Catalog source name for deploy-olm
393+ CATALOG_SOURCE_NAME ?= oadp-operator-catalog
394+
395+ # Bundle channel (from bundle/metadata/annotations.yaml)
396+ BUNDLE_CHANNEL ?= dev
397+
392398# Build a catalog image by adding bundle images to an empty catalog using the operator package manager tool, 'opm'.
393399# This recipe invokes 'opm' in 'semver' bundle add mode. For more information on add modes, see:
394400# https://github.com/operator-framework/community-operators/blob/7f1438c/docs/packaging-operator.md#updating-your-existing-operator
@@ -535,28 +541,110 @@ OADP_TEST_NAMESPACE ?= openshift-adp
535541.PHONY : deploy-olm
536542deploy-olm : THIS_OPERATOR_IMAGE?=ttl.sh/oadp-operator-$(GIT_REV ) :$(TTL_DURATION ) # Set target specific variable
537543deploy-olm : THIS_BUNDLE_IMAGE?=ttl.sh/oadp-operator-bundle-$(GIT_REV ) :$(TTL_DURATION ) # Set target specific variable
544+ deploy-olm : THIS_CATALOG_IMAGE?=ttl.sh/oadp-operator-catalog-$(GIT_REV ) :$(TTL_DURATION ) # Set target specific variable
538545deploy-olm : DEPLOY_TMP:=$(shell mktemp -d) / # Set target specific variable
539546deploy-olm : undeploy-olm # # Build current branch operator image, bundle image, push and install via OLM. For more information, check docs/developer/install_from_source.md
540547 @make versions
541548 @echo " DEPLOY_TMP: $( DEPLOY_TMP) "
542- # build and push operator and bundle image
543- # use $(OPERATOR_SDK) to install bundle to authenticated cluster
549+ # build and push operator, bundle, and catalog images
544550 cp -r . $(DEPLOY_TMP ) && cd $(DEPLOY_TMP ) && \
545- IMG=$(THIS_OPERATOR_IMAGE ) BUNDLE_IMG=$(THIS_BUNDLE_IMAGE ) \
546- make docker-build docker-push bundle bundle-build bundle-push; \
551+ IMG=$(THIS_OPERATOR_IMAGE ) BUNDLE_IMG=$(THIS_BUNDLE_IMAGE ) BUNDLE_IMGS= $( THIS_BUNDLE_IMAGE ) CATALOG_IMG= $( THIS_CATALOG_IMAGE ) \
552+ make docker-build docker-push bundle bundle-build bundle-push catalog-build catalog-push ; \
547553 chmod -R 777 $(DEPLOY_TMP ) && rm -rf $(DEPLOY_TMP )
548- $(OPERATOR_SDK ) run bundle --security-context-config restricted $(THIS_BUNDLE_IMAGE ) --namespace $(OADP_TEST_NAMESPACE )
554+ # Create CatalogSource with restricted security context
555+ @echo " Creating CatalogSource $( CATALOG_SOURCE_NAME) ..."
556+ @echo -e " apiVersion: operators.coreos.com/v1alpha1\nkind: CatalogSource\nmetadata:\n name: $( CATALOG_SOURCE_NAME) \n namespace: $( OADP_TEST_NAMESPACE) \nspec:\n sourceType: grpc\n image: $( THIS_CATALOG_IMAGE) \n displayName: OADP Operator Catalog\n publisher: OADP Team\n grpcPodConfig:\n securityContextConfig: restricted" | $(OC_CLI ) apply -f -
557+ # Wait for CatalogSource to be ready
558+ @echo " Waiting for CatalogSource to be ready..."
559+ @timeout=120; \
560+ while [ $$ timeout -gt 0 ]; do \
561+ STATE=$$($(OC_CLI ) get catalogsource $(CATALOG_SOURCE_NAME ) -n $(OADP_TEST_NAMESPACE ) -o jsonpath='{.status.connectionState.lastObservedState}' 2>/dev/null) ; \
562+ if [ " $$ STATE" = " READY" ]; then \
563+ echo " CatalogSource is ready" ; \
564+ break ; \
565+ fi ; \
566+ echo -n " ." ; \
567+ sleep 2; \
568+ timeout=$$((timeout-2 ) ); \
569+ done ; \
570+ if [ $$ timeout -le 0 ]; then \
571+ echo " Timeout waiting for CatalogSource" ; \
572+ $(OC_CLI ) get catalogsource $(CATALOG_SOURCE_NAME ) -n $(OADP_TEST_NAMESPACE ) -o yaml; \
573+ exit 1; \
574+ fi
575+ # Create OperatorGroup if not exists
576+ @echo " Checking OperatorGroup..."
577+ @OG_COUNT=$$($(OC_CLI ) get operatorgroup -n $(OADP_TEST_NAMESPACE ) --no-headers 2>/dev/null | wc -l | tr -d ' ') ; \
578+ if [ " $$ OG_COUNT" -eq " 0" ]; then \
579+ echo " Creating OperatorGroup..." ; \
580+ echo -e " apiVersion: operators.coreos.com/v1\nkind: OperatorGroup\nmetadata:\n name: oadp-operator-group\n namespace: $( OADP_TEST_NAMESPACE) \nspec:\n targetNamespaces:\n - $( OADP_TEST_NAMESPACE) " | $(OC_CLI ) apply -f -; \
581+ else \
582+ echo " OperatorGroup already exists" ; \
583+ fi
584+ # Create Subscription
585+ @echo " Creating Subscription..."
586+ @echo -e " apiVersion: operators.coreos.com/v1alpha1\nkind: Subscription\nmetadata:\n name: oadp-operator\n namespace: $( OADP_TEST_NAMESPACE) \nspec:\n channel: $( BUNDLE_CHANNEL) \n name: oadp-operator\n source: $( CATALOG_SOURCE_NAME) \n sourceNamespace: $( OADP_TEST_NAMESPACE) \n installPlanApproval: Automatic" | $(OC_CLI ) apply -f -
587+ # Wait for operator to be ready
588+ @echo " Waiting for InstallPlan to be created..."
589+ @timeout=60; \
590+ while [ $$ timeout -gt 0 ]; do \
591+ INSTALL_PLAN=$$($(OC_CLI ) get subscription oadp-operator -n $(OADP_TEST_NAMESPACE ) -o jsonpath='{.status.installPlanRef.name}' 2>/dev/null) ; \
592+ if [ -n " $$ INSTALL_PLAN" ]; then \
593+ echo " InstallPlan $$ INSTALL_PLAN found" ; \
594+ break ; \
595+ fi ; \
596+ echo -n " ." ; \
597+ sleep 2; \
598+ timeout=$$((timeout-2 ) ); \
599+ done ; \
600+ if [ $$ timeout -le 0 ]; then \
601+ echo " Timeout waiting for InstallPlan" ; \
602+ exit 1; \
603+ fi
604+ @echo " Waiting for CSV to exist..."
605+ @timeout=120; \
606+ CSV_NAME=" " ; \
607+ while [ $$ timeout -gt 0 ]; do \
608+ CSV_NAME=$$($(OC_CLI ) get subscription oadp-operator -n $(OADP_TEST_NAMESPACE ) -o jsonpath='{.status.currentCSV}' 2>/dev/null) ; \
609+ if [ -n " $$ CSV_NAME" ]; then \
610+ if $( OC_CLI) get csv/$$ CSV_NAME -n $( OADP_TEST_NAMESPACE) > /dev/null 2>&1 ; then \
611+ echo " CSV $$ CSV_NAME found" ; \
612+ break ; \
613+ fi ; \
614+ fi ; \
615+ echo -n " ." ; \
616+ sleep 2; \
617+ timeout=$$((timeout-2 ) ); \
618+ done ; \
619+ if [ $$ timeout -le 0 ]; then \
620+ echo " Timeout waiting for CSV to exist" ; \
621+ exit 1; \
622+ fi
623+ @echo " Waiting for CSV to be ready..."
624+ @CSV_NAME=$$($(OC_CLI ) get subscription oadp-operator -n $(OADP_TEST_NAMESPACE ) -o jsonpath='{.status.currentCSV}' 2>/dev/null) ; \
625+ if [ -n " $$ CSV_NAME" ]; then \
626+ $(OC_CLI ) wait --for=jsonpath=' {.status.phase}' =Succeeded csv/$$ CSV_NAME -n $(OADP_TEST_NAMESPACE ) --timeout=300s; \
627+ fi
628+ @echo " Operator is ready!"
629+ @$(OC_CLI ) get subscription oadp-operator -n $(OADP_TEST_NAMESPACE )
630+ @$(OC_CLI ) get csv -n $(OADP_TEST_NAMESPACE )
549631
550632.PHONY : undeploy-olm
551- undeploy-olm : login-required operator-sdk # # Uninstall current branch operator via OLM
633+ undeploy-olm : login-required # # Uninstall current branch operator via OLM
552634 $(OC_CLI ) whoami # Check if logged in
553635 $(OC_CLI ) create namespace $(OADP_TEST_NAMESPACE ) || true
554- -$(OPERATOR_SDK ) cleanup oadp-operator --namespace $(OADP_TEST_NAMESPACE ) || true
555- # Also try to clean up any leftover resources
636+ # Delete Subscription
556637 -$(OC_CLI ) delete subscription oadp-operator -n $(OADP_TEST_NAMESPACE ) --ignore-not-found=true
557- -$(OC_CLI ) get subscription -n $(OADP_TEST_NAMESPACE ) -o name | xargs -I {} $(OC_CLI ) get {} -n $(OADP_TEST_NAMESPACE ) -o jsonpath=' {.metadata.name}{"\t"}{.spec.source}{"\n"}' | grep " oadp-operator-catalog" | cut -f1 | xargs -I {} $(OC_CLI ) delete subscription {} -n $(OADP_TEST_NAMESPACE ) --ignore-not-found=true
638+ # Delete any subscriptions using our catalog
639+ -$(OC_CLI ) get subscription -n $(OADP_TEST_NAMESPACE ) -o name 2> /dev/null | xargs -I {} $(OC_CLI ) get {} -n $(OADP_TEST_NAMESPACE ) -o jsonpath=' {.metadata.name}{"\t"}{.spec.source}{"\n"}' 2> /dev/null | grep " $( CATALOG_SOURCE_NAME) " | cut -f1 | xargs -I {} $(OC_CLI ) delete subscription {} -n $(OADP_TEST_NAMESPACE ) --ignore-not-found=true || true
640+ # Delete CSV with OADP label
558641 -$(OC_CLI ) delete csv -l operators.coreos.com/oadp-operator.$(OADP_TEST_NAMESPACE ) -n $(OADP_TEST_NAMESPACE ) --ignore-not-found=true
559- -$(OC_CLI ) delete catalogsource oadp-operator-catalog -n $(OADP_TEST_NAMESPACE ) --ignore-not-found=true
642+ # Delete any CSV starting with oadp-operator
643+ -$(OC_CLI ) get csv -n $(OADP_TEST_NAMESPACE ) -o name 2> /dev/null | grep oadp-operator | xargs -I {} $(OC_CLI ) delete {} -n $(OADP_TEST_NAMESPACE ) --ignore-not-found=true || true
644+ # Delete CatalogSource
645+ -$(OC_CLI ) delete catalogsource $(CATALOG_SOURCE_NAME ) -n $(OADP_TEST_NAMESPACE ) --ignore-not-found=true
646+ # Delete OperatorGroup (only if we created it)
647+ -$(OC_CLI ) delete operatorgroup oadp-operator-group -n $(OADP_TEST_NAMESPACE ) --ignore-not-found=true
560648
561649# Create subscription YAML helper function
562650# Parameters:
@@ -568,9 +656,9 @@ create-sts-subscription = \
568656 echo " name: oadp-operator" >> $(1 ) && \
569657 echo " namespace: $(OADP_TEST_NAMESPACE ) " >> $(1 ) && \
570658 echo "spec:" >> $(1 ) && \
571- echo " channel: operator-sdk-run-bundle " >> $(1 ) && \
659+ echo " channel: $( BUNDLE_CHANNEL ) " >> $(1 ) && \
572660 echo " name: oadp-operator" >> $(1 ) && \
573- echo " source: oadp-operator-catalog " >> $(1 ) && \
661+ echo " source: $( CATALOG_SOURCE_NAME ) " >> $(1 ) && \
574662 echo " sourceNamespace: $(OADP_TEST_NAMESPACE ) " >> $(1 ) && \
575663 echo " installPlanApproval: Automatic" >> $(1 ) && \
576664 echo " config:" >> $(1 ) && \
@@ -631,14 +719,14 @@ apply-sts-subscription = \
631719.PHONY : deploy-olm-stsflow
632720deploy-olm-stsflow : deploy-olm # # Deploy via OLM then uninstall CSV/Subscription and provide console URL for standardized flow
633721 @echo " Uninstalling CSV and Subscription to trigger standardized flow UI..."
634- -$(OC_CLI ) get subscription -n $(OADP_TEST_NAMESPACE ) -o name | xargs -I {} $(OC_CLI ) get {} -n $(OADP_TEST_NAMESPACE ) -o jsonpath=' {.metadata.name}{"\t"}{.spec.source}{"\n"}' | grep " oadp-operator-catalog " | cut -f1 | xargs -I {} $(OC_CLI ) delete subscription {} -n $(OADP_TEST_NAMESPACE ) --ignore-not-found=true
722+ -$(OC_CLI ) get subscription -n $(OADP_TEST_NAMESPACE ) -o name 2> /dev/null | xargs -I {} $(OC_CLI ) get {} -n $(OADP_TEST_NAMESPACE ) -o jsonpath=' {.metadata.name}{"\t"}{.spec.source}{"\n"}' 2> /dev/null | grep " $( CATALOG_SOURCE_NAME ) " | cut -f1 | xargs -I {} $(OC_CLI ) delete subscription {} -n $(OADP_TEST_NAMESPACE ) --ignore-not-found=true || true
635723 -$(OC_CLI ) delete csv oadp-operator.v$(VERSION ) -n $(OADP_TEST_NAMESPACE ) --ignore-not-found=true
636724 @echo " "
637725 @echo " ==========================================================================="
638726 @echo " Open the following URL in your browser to trigger the standardized flow UI:"
639727 @echo " "
640728 @CONSOLE_URL=$$($(OC_CLI ) get route console -n openshift-console -o jsonpath='{.spec.host}') ; \
641- echo " https://$$ CONSOLE_URL/operatorhub/ns/$( OADP_TEST_NAMESPACE) ?keyword=oadp-operator&details-item=oadp-operator-oadp-operator-catalog- $( OADP_TEST_NAMESPACE) &channel=operator-sdk-run-bundle &version=$( VERSION) "
729+ echo " https://$$ CONSOLE_URL/operatorhub/ns/$( OADP_TEST_NAMESPACE) ?keyword=oadp-operator&details-item=oadp-operator-$( CATALOG_SOURCE_NAME ) - $( OADP_TEST_NAMESPACE) &channel=$( BUNDLE_CHANNEL ) &version=$( VERSION) "
642730 @echo " "
643731 @echo " ==========================================================================="
644732
0 commit comments