@@ -389,6 +389,9 @@ 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+
392395# Build a catalog image by adding bundle images to an empty catalog using the operator package manager tool, 'opm'.
393396# This recipe invokes 'opm' in 'semver' bundle add mode. For more information on add modes, see:
394397# https://github.com/operator-framework/community-operators/blob/7f1438c/docs/packaging-operator.md#updating-your-existing-operator
@@ -535,28 +538,110 @@ OADP_TEST_NAMESPACE ?= openshift-adp
535538.PHONY : deploy-olm
536539deploy-olm : THIS_OPERATOR_IMAGE?=ttl.sh/oadp-operator-$(GIT_REV ) :$(TTL_DURATION ) # Set target specific variable
537540deploy-olm : THIS_BUNDLE_IMAGE?=ttl.sh/oadp-operator-bundle-$(GIT_REV ) :$(TTL_DURATION ) # Set target specific variable
541+ deploy-olm : THIS_CATALOG_IMAGE?=ttl.sh/oadp-operator-catalog-$(GIT_REV ) :$(TTL_DURATION ) # Set target specific variable
538542deploy-olm : DEPLOY_TMP:=$(shell mktemp -d) / # Set target specific variable
539543deploy-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
540544 @make versions
541545 @echo " DEPLOY_TMP: $( DEPLOY_TMP) "
542- # build and push operator and bundle image
543- # use $(OPERATOR_SDK) to install bundle to authenticated cluster
546+ # build and push operator, bundle, and catalog images
544547 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; \
548+ IMG=$(THIS_OPERATOR_IMAGE ) BUNDLE_IMG=$(THIS_BUNDLE_IMAGE ) BUNDLE_IMGS= $( THIS_BUNDLE_IMAGE ) CATALOG_IMG= $( THIS_CATALOG_IMAGE ) \
549+ make docker-build docker-push bundle bundle-build bundle-push catalog-build catalog-push ; \
547550 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 )
551+ # Create CatalogSource with restricted security context
552+ @echo " Creating CatalogSource $( CATALOG_SOURCE_NAME) ..."
553+ @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 -
554+ # Wait for CatalogSource to be ready
555+ @echo " Waiting for CatalogSource to be ready..."
556+ @timeout=120; \
557+ while [ $$ timeout -gt 0 ]; do \
558+ STATE=$$($(OC_CLI ) get catalogsource $(CATALOG_SOURCE_NAME ) -n $(OADP_TEST_NAMESPACE ) -o jsonpath='{.status.connectionState.lastObservedState}' 2>/dev/null) ; \
559+ if [ " $$ STATE" = " READY" ]; then \
560+ echo " CatalogSource is ready" ; \
561+ break ; \
562+ fi ; \
563+ echo -n " ." ; \
564+ sleep 2; \
565+ timeout=$$((timeout-2 ) ); \
566+ done ; \
567+ if [ $$ timeout -le 0 ]; then \
568+ echo " Timeout waiting for CatalogSource" ; \
569+ $(OC_CLI ) get catalogsource $(CATALOG_SOURCE_NAME ) -n $(OADP_TEST_NAMESPACE ) -o yaml; \
570+ exit 1; \
571+ fi
572+ # Create OperatorGroup if not exists
573+ @echo " Checking OperatorGroup..."
574+ @OG_COUNT=$$($(OC_CLI ) get operatorgroup -n $(OADP_TEST_NAMESPACE ) --no-headers 2>/dev/null | wc -l | tr -d ' ') ; \
575+ if [ " $$ OG_COUNT" -eq " 0" ]; then \
576+ echo " Creating OperatorGroup..." ; \
577+ 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 -; \
578+ else \
579+ echo " OperatorGroup already exists" ; \
580+ fi
581+ # Create Subscription
582+ @echo " Creating Subscription..."
583+ @echo -e " apiVersion: operators.coreos.com/v1alpha1\nkind: Subscription\nmetadata:\n name: oadp-operator\n namespace: $( OADP_TEST_NAMESPACE) \nspec:\n channel: $( DEFAULT_CHANNEL) \n name: oadp-operator\n source: $( CATALOG_SOURCE_NAME) \n sourceNamespace: $( OADP_TEST_NAMESPACE) \n installPlanApproval: Automatic" | $(OC_CLI ) apply -f -
584+ # Wait for operator to be ready
585+ @echo " Waiting for InstallPlan to be created..."
586+ @timeout=60; \
587+ while [ $$ timeout -gt 0 ]; do \
588+ INSTALL_PLAN=$$($(OC_CLI ) get subscription oadp-operator -n $(OADP_TEST_NAMESPACE ) -o jsonpath='{.status.installPlanRef.name}' 2>/dev/null) ; \
589+ if [ -n " $$ INSTALL_PLAN" ]; then \
590+ echo " InstallPlan $$ INSTALL_PLAN found" ; \
591+ break ; \
592+ fi ; \
593+ echo -n " ." ; \
594+ sleep 2; \
595+ timeout=$$((timeout-2 ) ); \
596+ done ; \
597+ if [ $$ timeout -le 0 ]; then \
598+ echo " Timeout waiting for InstallPlan" ; \
599+ exit 1; \
600+ fi
601+ @echo " Waiting for CSV to exist..."
602+ @timeout=120; \
603+ CSV_NAME=" " ; \
604+ while [ $$ timeout -gt 0 ]; do \
605+ CSV_NAME=$$($(OC_CLI ) get subscription oadp-operator -n $(OADP_TEST_NAMESPACE ) -o jsonpath='{.status.currentCSV}' 2>/dev/null) ; \
606+ if [ -n " $$ CSV_NAME" ]; then \
607+ if $( OC_CLI) get csv/$$ CSV_NAME -n $( OADP_TEST_NAMESPACE) > /dev/null 2>&1 ; then \
608+ echo " CSV $$ CSV_NAME found" ; \
609+ break ; \
610+ fi ; \
611+ fi ; \
612+ echo -n " ." ; \
613+ sleep 2; \
614+ timeout=$$((timeout-2 ) ); \
615+ done ; \
616+ if [ $$ timeout -le 0 ]; then \
617+ echo " Timeout waiting for CSV to exist" ; \
618+ exit 1; \
619+ fi
620+ @echo " Waiting for CSV to be ready..."
621+ @CSV_NAME=$$($(OC_CLI ) get subscription oadp-operator -n $(OADP_TEST_NAMESPACE ) -o jsonpath='{.status.currentCSV}' 2>/dev/null) ; \
622+ if [ -n " $$ CSV_NAME" ]; then \
623+ $(OC_CLI ) wait --for=jsonpath=' {.status.phase}' =Succeeded csv/$$ CSV_NAME -n $(OADP_TEST_NAMESPACE ) --timeout=300s; \
624+ fi
625+ @echo " Operator is ready!"
626+ @$(OC_CLI ) get subscription oadp-operator -n $(OADP_TEST_NAMESPACE )
627+ @$(OC_CLI ) get csv -n $(OADP_TEST_NAMESPACE )
549628
550629.PHONY : undeploy-olm
551- undeploy-olm : login-required operator-sdk # # Uninstall current branch operator via OLM
630+ undeploy-olm : login-required # # Uninstall current branch operator via OLM
552631 $(OC_CLI ) whoami # Check if logged in
553632 $(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
633+ # Delete Subscription
556634 -$(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
635+ # Delete any subscriptions using our catalog
636+ -$(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
637+ # Delete CSV with OADP label
558638 -$(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
639+ # Delete any CSV starting with oadp-operator
640+ -$(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
641+ # Delete CatalogSource
642+ -$(OC_CLI ) delete catalogsource $(CATALOG_SOURCE_NAME ) -n $(OADP_TEST_NAMESPACE ) --ignore-not-found=true
643+ # Delete OperatorGroup (only if we created it)
644+ -$(OC_CLI ) delete operatorgroup oadp-operator-group -n $(OADP_TEST_NAMESPACE ) --ignore-not-found=true
560645
561646# Create subscription YAML helper function
562647# Parameters:
@@ -568,9 +653,9 @@ create-sts-subscription = \
568653 echo " name: oadp-operator" >> $(1 ) && \
569654 echo " namespace: $(OADP_TEST_NAMESPACE ) " >> $(1 ) && \
570655 echo "spec:" >> $(1 ) && \
571- echo " channel: operator-sdk-run-bundle " >> $(1 ) && \
656+ echo " channel: $( DEFAULT_CHANNEL ) " >> $(1 ) && \
572657 echo " name: oadp-operator" >> $(1 ) && \
573- echo " source: oadp-operator-catalog " >> $(1 ) && \
658+ echo " source: $( CATALOG_SOURCE_NAME ) " >> $(1 ) && \
574659 echo " sourceNamespace: $(OADP_TEST_NAMESPACE ) " >> $(1 ) && \
575660 echo " installPlanApproval: Automatic" >> $(1 ) && \
576661 echo " config:" >> $(1 ) && \
@@ -631,14 +716,14 @@ apply-sts-subscription = \
631716.PHONY : deploy-olm-stsflow
632717deploy-olm-stsflow : deploy-olm # # Deploy via OLM then uninstall CSV/Subscription and provide console URL for standardized flow
633718 @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
719+ -$(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
635720 -$(OC_CLI ) delete csv oadp-operator.v$(VERSION ) -n $(OADP_TEST_NAMESPACE ) --ignore-not-found=true
636721 @echo " "
637722 @echo " ==========================================================================="
638723 @echo " Open the following URL in your browser to trigger the standardized flow UI:"
639724 @echo " "
640725 @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) "
726+ echo " https://$$ CONSOLE_URL/operatorhub/ns/$( OADP_TEST_NAMESPACE) ?keyword=oadp-operator&details-item=oadp-operator-$( CATALOG_SOURCE_NAME ) - $( OADP_TEST_NAMESPACE) &channel=$( DEFAULT_CHANNEL ) &version=$( VERSION) "
642727 @echo " "
643728 @echo " ==========================================================================="
644729
0 commit comments