You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by pc...@apache.org on 2024/07/02 07:35:44 UTC
(camel-k) 15/24: chore(e2e): enable custom conf operator
This is an automated email from the ASF dual-hosted git repository.
pcongiusti pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-k.git
commit 739ceb8d06100f22c7dfc71c77ab7ca6bb54cf22
Author: Pasquale Congiusti <pa...@gmail.com>
AuthorDate: Fri Jun 28 09:52:53 2024 +0200
chore(e2e): enable custom conf operator
---
e2e/advanced/catalog_builder_test.go | 2 +-
e2e/advanced/environment_test.go | 10 +++--
e2e/advanced/integration_profile_test.go | 6 +--
e2e/advanced/operator_id_filtering_test.go | 4 +-
e2e/advanced/operator_metrics_test.go | 8 +++-
e2e/advanced/promote_test.go | 4 +-
e2e/advanced/synthetic_test.go | 11 ++---
e2e/knative/knative_pipes_test.go | 2 +-
e2e/support/test_util.go | 48 ++++++++++++----------
.../kubernetes/descoped/kustomization.yaml | 3 ++
.../descoped/patch-operator-id.yaml} | 11 ++---
.../overlays/openshift/descoped/kustomization.yaml | 8 ++++
.../{kustomization.yaml => patch-operator-id.yaml} | 11 ++---
.../openshift/namespaced/kustomization.yaml | 5 +++
.../patch-operator-id.yaml} | 11 ++---
.../config/manager/operator-deployment.yaml | 3 --
script/Makefile | 45 +++++++++++++-------
17 files changed, 109 insertions(+), 83 deletions(-)
diff --git a/e2e/advanced/catalog_builder_test.go b/e2e/advanced/catalog_builder_test.go
index 396fecfe8..a9597ca68 100644
--- a/e2e/advanced/catalog_builder_test.go
+++ b/e2e/advanced/catalog_builder_test.go
@@ -58,7 +58,7 @@ func TestCamelCatalogBuilder(t *testing.T) {
g.Expect(
KamelRun(t, ctx, ns, "files/Java.java", "--name", name, "-t", "camel.runtime-version=1.15.0").Execute()).To(Succeed())
- g.Eventually(CamelCatalog(t, ctx, ns, nonCompatibleCatalogName)).ShouldNot(BeNil())
+ g.Eventually(CamelCatalog(t, ctx, ns, nonCompatibleCatalogName), TestTimeoutMedium).ShouldNot(BeNil())
g.Eventually(CamelCatalogPhase(t, ctx, ns, nonCompatibleCatalogName)).Should(Equal(v1.CamelCatalogPhaseError))
g.Eventually(CamelCatalogCondition(t, ctx, ns, nonCompatibleCatalogName, v1.CamelCatalogConditionReady)().Message).Should(ContainSubstring("Container image tool missing in catalog"))
diff --git a/e2e/advanced/environment_test.go b/e2e/advanced/environment_test.go
index 0735a094e..adf5c37d7 100644
--- a/e2e/advanced/environment_test.go
+++ b/e2e/advanced/environment_test.go
@@ -37,7 +37,7 @@ import (
"github.com/apache/camel-k/v2/pkg/util/defaults"
)
-func TestEnvironmentTrait(t *testing.T) {
+func TestHTTPProxy(t *testing.T) {
t.Parallel()
WithNewTestNamespace(t, func(ctx context.Context, g *WithT, ns string) {
@@ -65,8 +65,12 @@ func TestEnvironmentTrait(t *testing.T) {
}
// Install Camel K with the HTTP proxy environment variable
- //g.Expect(InstallOperator(t, ctx, operatorID, ns, "--operator-env-vars", fmt.Sprintf("HTTP_PROXY=%s", httpProxy), "--operator-env-vars", "NO_PROXY="+strings.Join(noProxy, ","))).To(Succeed())
- InstallOperator(t, ctx, g, ns)
+ InstallOperatorWithConf(t, ctx, g, ns, "",
+ map[string]string{
+ "HTTP_PROXY": httpProxy,
+ "NO_PROXY": strings.Join(noProxy, ","),
+ },
+ )
t.Run("Run integration with default environment", func(t *testing.T) {
name := RandomizedSuffixName("java-default")
diff --git a/e2e/advanced/integration_profile_test.go b/e2e/advanced/integration_profile_test.go
index 55fd47df5..61cc34fb4 100644
--- a/e2e/advanced/integration_profile_test.go
+++ b/e2e/advanced/integration_profile_test.go
@@ -41,7 +41,7 @@ func TestIntegrationProfile(t *testing.T) {
WithNewTestNamespace(t, func(ctx context.Context, g *WithT, ns string) {
operatorID := "camel-k-integration-profile"
- InstallOperatorWithID(t, ctx, g, ns, operatorID)
+ InstallOperatorWithConf(t, ctx, g, ns, operatorID, nil)
integrationProfile := v1.NewIntegrationProfile(ns, "ipr-global")
integrationProfile.SetOperatorID(operatorID)
@@ -125,7 +125,7 @@ func TestIntegrationProfileInfluencesKit(t *testing.T) {
WithNewTestNamespace(t, func(ctx context.Context, g *WithT, ns string) {
operatorID := "camel-k-ipr-kit"
- InstallOperatorWithID(t, ctx, g, ns, operatorID)
+ InstallOperatorWithConf(t, ctx, g, ns, operatorID, nil)
integrationProfile := v1.NewIntegrationProfile(ns, "ipr-global")
integrationProfile.SetOperatorID(operatorID)
@@ -166,7 +166,7 @@ func TestPropagateIntegrationProfileChanges(t *testing.T) {
WithNewTestNamespace(t, func(ctx context.Context, g *WithT, ns string) {
operatorID := "camel-k-ipr-changes"
- InstallOperatorWithID(t, ctx, g, ns, operatorID)
+ InstallOperatorWithConf(t, ctx, g, ns, operatorID, nil)
integrationProfile := v1.NewIntegrationProfile(ns, "debug-profile")
integrationProfile.SetOperatorID(operatorID)
diff --git a/e2e/advanced/operator_id_filtering_test.go b/e2e/advanced/operator_id_filtering_test.go
index c281390ff..83879f298 100644
--- a/e2e/advanced/operator_id_filtering_test.go
+++ b/e2e/advanced/operator_id_filtering_test.go
@@ -41,12 +41,12 @@ func TestOperatorIDFiltering(t *testing.T) {
WithNewTestNamespace(t, func(ctx context.Context, g *WithT, ns string) {
WithNewTestNamespace(t, func(ctx context.Context, g *WithT, nsop1 string) {
operator1 := "operator-1"
- InstallOperatorWithID(t, ctx, g, nsop1, operator1)
+ InstallOperatorWithConf(t, ctx, g, nsop1, operator1, nil)
g.Eventually(PlatformPhase(t, ctx, nsop1), TestTimeoutMedium).Should(Equal(v1.IntegrationPlatformPhaseReady))
WithNewTestNamespace(t, func(ctx context.Context, g *WithT, nsop2 string) {
operator2 := "operator-2"
- InstallOperatorWithID(t, ctx, g, nsop2, operator2)
+ InstallOperatorWithConf(t, ctx, g, nsop2, operator2, nil)
g.Eventually(PlatformPhase(t, ctx, nsop2), TestTimeoutMedium).Should(Equal(v1.IntegrationPlatformPhaseReady))
t.Run("Operators ignore non-scoped integrations", func(t *testing.T) {
diff --git a/e2e/advanced/operator_metrics_test.go b/e2e/advanced/operator_metrics_test.go
index 9228bc7b6..5f1077acb 100644
--- a/e2e/advanced/operator_metrics_test.go
+++ b/e2e/advanced/operator_metrics_test.go
@@ -49,8 +49,12 @@ func TestMetrics(t *testing.T) {
t.Parallel()
WithNewTestNamespace(t, func(ctx context.Context, g *WithT, ns string) {
- //g.Expect(InstallOperator(t, ctx, operatorID, ns, "--log-level", "debug")).To(Succeed())
- InstallOperator(t, ctx, g, ns)
+ // Install Camel K with the log debug enabled
+ InstallOperatorWithConf(t, ctx, g, ns, "",
+ map[string]string{
+ "LOG_LEVEL": "debug",
+ },
+ )
name := RandomizedSuffixName("java")
g.Expect(KamelRun(t, ctx, ns, "files/Java.java", "--name", name, "-t", "prometheus.enabled=true", "-t", "prometheus.pod-monitor=false").Execute()).To(Succeed())
diff --git a/e2e/advanced/promote_test.go b/e2e/advanced/promote_test.go
index 13716f71d..f37a6fa00 100644
--- a/e2e/advanced/promote_test.go
+++ b/e2e/advanced/promote_test.go
@@ -42,7 +42,7 @@ func TestKamelCLIPromote(t *testing.T) {
// Dev environment namespace
WithNewTestNamespace(t, func(ctx context.Context, g *WithT, nsDev string) {
operatorDevID := "camel-k-cli-promote-dev"
- InstallOperatorWithID(t, ctx, g, nsDev, operatorDevID)
+ InstallOperatorWithConf(t, ctx, g, nsDev, operatorDevID, nil)
g.Eventually(SelectedPlatformPhase(t, ctx, nsDev, operatorDevID), TestTimeoutMedium).Should(Equal(v1.IntegrationPlatformPhaseReady))
// Dev content configmap
@@ -88,7 +88,7 @@ func TestKamelCLIPromote(t *testing.T) {
// Prod environment namespace
WithNewTestNamespace(t, func(ctx context.Context, g *WithT, nsProd string) {
operatorProdID := "camel-k-cli-promote-prod"
- InstallOperatorWithID(t, ctx, g, nsProd, operatorProdID)
+ InstallOperatorWithConf(t, ctx, g, nsProd, operatorProdID, nil)
g.Eventually(PlatformPhase(t, ctx, nsProd), TestTimeoutMedium).Should(Equal(v1.IntegrationPlatformPhaseReady))
t.Run("no configmap in destination", func(t *testing.T) {
diff --git a/e2e/advanced/synthetic_test.go b/e2e/advanced/synthetic_test.go
index 5c5ec8e33..f2e85b9d3 100644
--- a/e2e/advanced/synthetic_test.go
+++ b/e2e/advanced/synthetic_test.go
@@ -60,11 +60,12 @@ func TestSyntheticIntegrationFromDeployment(t *testing.T) {
t.Parallel()
WithNewTestNamespace(t, func(ctx context.Context, g *WithT, ns string) {
- // Install Camel K with the synthetic Integration feature variable
- // g.Expect(InstallOperator(t, ctx, operatorID, ns,
- // "--operator-env-vars", "CAMEL_K_SYNTHETIC_INTEGRATIONS=true",
- // )).To(Succeed())
- InstallOperator(t, ctx, g, ns)
+ // Install Camel K with the proper configuration support
+ InstallOperatorWithConf(t, ctx, g, ns, "",
+ map[string]string{
+ "CAMEL_K_SYNTHETIC_INTEGRATIONS": "true",
+ },
+ )
g.Eventually(OperatorPodHas(t, ctx, ns, func(op *corev1.Pod) bool {
if envVar := envvar.Get(op.Spec.Containers[0].Env, "CAMEL_K_SYNTHETIC_INTEGRATIONS"); envVar != nil {
return envVar.Value == "true"
diff --git a/e2e/knative/knative_pipes_test.go b/e2e/knative/knative_pipes_test.go
index ce88f2bdf..1f4dc6b31 100644
--- a/e2e/knative/knative_pipes_test.go
+++ b/e2e/knative/knative_pipes_test.go
@@ -139,7 +139,7 @@ func TestRunBroker(t *testing.T) {
WithNewTestNamespaceWithKnativeBroker(t, func(ctx context.Context, g *WithT, ns string) {
// This test require an adhoc operator to run properly
operatorID := fmt.Sprintf("camel-k-%s", ns)
- InstallOperatorWithID(t, ctx, g, ns, operatorID)
+ InstallOperatorWithConf(t, ctx, g, ns, operatorID, nil)
g.Eventually(SelectedPlatformPhase(t, ctx, ns, operatorID), TestTimeoutMedium).Should(Equal(camelv1.IntegrationPlatformPhaseReady))
g.Expect(KamelRunWithID(t, ctx, operatorID, ns, "files/knativeevt1.yaml").Execute()).To(Succeed())
diff --git a/e2e/support/test_util.go b/e2e/support/test_util.go
index 933cf1e4a..63d49f0fe 100644
--- a/e2e/support/test_util.go
+++ b/e2e/support/test_util.go
@@ -42,8 +42,7 @@ import (
)
var (
- lock sync.Mutex
- lockID sync.Mutex
+ lock sync.Mutex
)
func init() {
@@ -70,36 +69,41 @@ func GetEnvOrDefault(key string, deflt string) string {
// InstallOperator is in charge to install a namespaced operator. The func must be
// executed in a critical section as there may be concurrent access to it.
func InstallOperator(t *testing.T, ctx context.Context, g *WithT, ns string) {
+ InstallOperatorWithConf(t, ctx, g, ns, "", nil)
+}
+
+// InstallOperatorWithConf is in charge to install a namespaced operator with additional configurations.
+func InstallOperatorWithConf(t *testing.T, ctx context.Context, g *WithT, ns, operatorID string, envs map[string]string) {
lock.Lock()
defer lock.Unlock()
KAMEL_INSTALL_REGISTRY := os.Getenv("KAMEL_INSTALL_REGISTRY")
+ args := []string{fmt.Sprintf("NAMESPACE=%s", ns)}
+ if KAMEL_INSTALL_REGISTRY != "" {
+ args = append(args, fmt.Sprintf("REGISTRY=%s", KAMEL_INSTALL_REGISTRY))
+ }
+ if operatorID != "" {
+ fmt.Printf("Setting operator ID property as %s\n", operatorID)
+ args = append(args, fmt.Sprintf("OPERATOR_ID=%s", operatorID))
+ }
+ if envs != nil {
+ envArgs := make([]string, len(envs))
+ for k, v := range envs {
+ envArgs = append(envArgs, fmt.Sprintf("%s=%s", k, v))
+ }
+ if len(envArgs) > 0 {
+ joinedArgs := strings.Join(envArgs, " ")
+ fmt.Printf("Setting operator env vars as %s\n", joinedArgs)
+ args = append(args, fmt.Sprintf("ENV=%s", joinedArgs))
+ }
+ }
os.Setenv("CAMEL_K_TEST_MAKE_DIR", "../../")
- fmt.Printf("Installing namespaced operator in namespace %s with registry %s\n", ns, KAMEL_INSTALL_REGISTRY)
ExpectExecSucceed(t, g,
- Make(t,
- fmt.Sprintf("NAMESPACE=%s", ns),
- fmt.Sprintf("REGISTRY=%s", KAMEL_INSTALL_REGISTRY),
- "install-k8s-ns"),
+ Make(t, "install-k8s-ns", args...),
)
// Let's make sure the operator has been deployed
g.Eventually(OperatorPod(t, ctx, ns)).ShouldNot(BeNil())
}
-// InstallOperatorWitID is in charge to install a namespaced operator with a given operator ID name.
-func InstallOperatorWithID(t *testing.T, ctx context.Context, g *WithT, ns, operatorID string) {
- lockID.Lock()
- defer lockID.Unlock()
- os.Setenv("CAMEL_K_TEST_MAKE_DIR", "../../")
- fmt.Printf("Setting operator ID property as %s\n", operatorID)
- ExpectExecSucceed(t, g,
- Make(t,
- fmt.Sprintf("OPERATOR_ID=%s", operatorID),
- "set-install-k8s-ns-operator-id"),
- )
-
- InstallOperator(t, ctx, g, ns)
-}
-
func ExpectExecSucceed(t *testing.T, g *WithT, command *exec.Cmd) {
t.Helper()
diff --git a/install/overlays/kubernetes/descoped/kustomization.yaml b/install/overlays/kubernetes/descoped/kustomization.yaml
index 421242eae..8ebdff72d 100644
--- a/install/overlays/kubernetes/descoped/kustomization.yaml
+++ b/install/overlays/kubernetes/descoped/kustomization.yaml
@@ -27,3 +27,6 @@ patches:
- path: patch-watch-namespace-global.yaml
target:
kind: Deployment
+- path: patch-operator-id.yaml
+ target:
+ kind: Deployment
diff --git a/install/overlays/openshift/descoped/kustomization.yaml b/install/overlays/kubernetes/descoped/patch-operator-id.yaml
similarity index 81%
copy from install/overlays/openshift/descoped/kustomization.yaml
copy to install/overlays/kubernetes/descoped/patch-operator-id.yaml
index 7d893bc47..25c150420 100644
--- a/install/overlays/openshift/descoped/kustomization.yaml
+++ b/install/overlays/kubernetes/descoped/patch-operator-id.yaml
@@ -14,12 +14,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
# ---------------------------------------------------------------------------
-apiVersion: kustomize.config.k8s.io/v1beta1
-kind: Kustomization
-resources:
-- ../../kubernetes/descoped
-- ../../../base/config/rbac/openshift
-- ../../../base/config/rbac/openshift/descoped
-
-namespace: camel-k
+- op: add
+ path: /spec/template/spec/containers/0/env/2/value
+ value: camel-k
diff --git a/install/overlays/openshift/descoped/kustomization.yaml b/install/overlays/openshift/descoped/kustomization.yaml
index 7d893bc47..ff7ed314f 100644
--- a/install/overlays/openshift/descoped/kustomization.yaml
+++ b/install/overlays/openshift/descoped/kustomization.yaml
@@ -23,3 +23,11 @@ resources:
- ../../../base/config/rbac/openshift/descoped
namespace: camel-k
+
+patches:
+- path: patch-watch-namespace-global.yaml
+ target:
+ kind: Deployment
+- path: patch-operator-id.yaml
+ target:
+ kind: Deployment
\ No newline at end of file
diff --git a/install/overlays/openshift/descoped/kustomization.yaml b/install/overlays/openshift/descoped/patch-operator-id.yaml
similarity index 81%
copy from install/overlays/openshift/descoped/kustomization.yaml
copy to install/overlays/openshift/descoped/patch-operator-id.yaml
index 7d893bc47..25c150420 100644
--- a/install/overlays/openshift/descoped/kustomization.yaml
+++ b/install/overlays/openshift/descoped/patch-operator-id.yaml
@@ -14,12 +14,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
# ---------------------------------------------------------------------------
-apiVersion: kustomize.config.k8s.io/v1beta1
-kind: Kustomization
-resources:
-- ../../kubernetes/descoped
-- ../../../base/config/rbac/openshift
-- ../../../base/config/rbac/openshift/descoped
-
-namespace: camel-k
+- op: add
+ path: /spec/template/spec/containers/0/env/2/value
+ value: camel-k
diff --git a/install/overlays/openshift/namespaced/kustomization.yaml b/install/overlays/openshift/namespaced/kustomization.yaml
index fb7e659a9..ad71b3259 100644
--- a/install/overlays/openshift/namespaced/kustomization.yaml
+++ b/install/overlays/openshift/namespaced/kustomization.yaml
@@ -23,3 +23,8 @@ resources:
- ../../../base/config/rbac/openshift/namespaced
namespace: default
+
+patches:
+- path: patch-operator-id.yaml
+ target:
+ kind: Deployment
\ No newline at end of file
diff --git a/install/overlays/openshift/descoped/kustomization.yaml b/install/overlays/openshift/namespaced/patch-operator-id.yaml
similarity index 81%
copy from install/overlays/openshift/descoped/kustomization.yaml
copy to install/overlays/openshift/namespaced/patch-operator-id.yaml
index 7d893bc47..25c150420 100644
--- a/install/overlays/openshift/descoped/kustomization.yaml
+++ b/install/overlays/openshift/namespaced/patch-operator-id.yaml
@@ -14,12 +14,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
# ---------------------------------------------------------------------------
-apiVersion: kustomize.config.k8s.io/v1beta1
-kind: Kustomization
-resources:
-- ../../kubernetes/descoped
-- ../../../base/config/rbac/openshift
-- ../../../base/config/rbac/openshift/descoped
-
-namespace: camel-k
+- op: add
+ path: /spec/template/spec/containers/0/env/2/value
+ value: camel-k
diff --git a/pkg/resources/config/manager/operator-deployment.yaml b/pkg/resources/config/manager/operator-deployment.yaml
index a02bc5d04..f76ab614d 100644
--- a/pkg/resources/config/manager/operator-deployment.yaml
+++ b/pkg/resources/config/manager/operator-deployment.yaml
@@ -72,9 +72,6 @@ spec:
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- # Change to true to be able to create synthetic Integrations
- - name: CAMEL_K_SYNTHETIC_INTEGRATIONS
- value: "false"
livenessProbe:
httpGet:
path: /healthz
diff --git a/script/Makefile b/script/Makefile
index c6e684b8c..15fca62f1 100644
--- a/script/Makefile
+++ b/script/Makefile
@@ -737,11 +737,35 @@ DEFAULT_NS = "camel-k"
.PHONY: install install-k8s-global install-k8s-ns install-openshift-global install-openshift-ns
-install-operator:
- @echo "####### Installing operator..."
+clone-kustomize-dir:
$(eval KUST_TMP=$(shell mktemp -d))
@echo "... cloning installation files to $(KUST_TMP)"
cp -Lr install $(KUST_TMP)/.
+
+# the set-operator targets are mostly thought as an utility for the e2e which require certain operator settings
+set-operator-id:
+ifdef OPERATOR_ID
+ @echo "INFO: setting operator ID to $(OPERATOR_ID)"
+ @sed -i 's/name: .*/name: $(OPERATOR_ID)/' $(KUST_TMP)/install/overlays/platform/integration-platform.yaml
+ @sed -i 's/value: .*/value: $(OPERATOR_ID)/' $(KUST_TMP)/$(KUSTOMIZE_DIR)/patch-operator-id.yaml
+else
+ @echo "INFO: no operator ID variable \"OPERATOR_ID\" provided. Keeping default."
+endif
+
+# ENV is expected to be in the formal ENV="myvar1=v1 myvar2=v2 ..."
+set-operator-env:
+ifdef ENV
+ @for n in $(ENV); do \
+ k=$${n%=*}; \
+ v=$${n#*=}; \
+ echo "INFO: setting operator env var $${k}=$${v}"; \
+ cd $(KUST_TMP)/$(KUSTOMIZE_DIR) && kustomize edit add patch --kind Deployment --patch \
+ "[{\"op\": \"add\", \"path\": \"/spec/template/spec/containers/0/env/-\", \"value\": {\"name\": \"$${k}\", \"value\": \"$${v}\"}}]"; \
+ done
+endif
+
+install-operator:
+ @echo "####### Installing operator..."
ifndef NAMESPACE
@echo "WARN: no namespace specified, using default namespace $(DEFAULT_NS)"
$(eval NAMESPACE=$(DEFAULT_NS))
@@ -765,30 +789,21 @@ ifneq ($(MINIKUBE_REGISTRY), "")
endif
endif
-set-install-k8s-ns-operator-id:
-ifdef OPERATOR_ID
- @echo "INFO: setting operator ID to $(OPERATOR_ID)"
- @sed -i 's/name: .*/name: $(OPERATOR_ID)/' install/overlays/platform/integration-platform.yaml
- @sed -i 's/value: .*/value: $(OPERATOR_ID)/' install/overlays/kubernetes/namespaced/patch-operator-id.yaml
-else
- @echo "INFO: no operator ID variable \"OPERATOR_ID\" provided"
-endif
-
install-k8s-global: DEFAULT_NS="camel-k"
install-k8s-global: KUSTOMIZE_DIR="install/overlays/kubernetes/descoped"
-install-k8s-global: install-operator install-registry
+install-k8s-global: clone-kustomize-dir set-operator-id set-operator-env install-operator install-registry
install-k8s-ns: DEFAULT_NS="default"
install-k8s-ns: KUSTOMIZE_DIR="install/overlays/kubernetes/namespaced"
-install-k8s-ns: install-operator install-registry
+install-k8s-ns: clone-kustomize-dir set-operator-id set-operator-env install-operator install-registry
install-openshift-global: DEFAULT_NS="camel-k"
install-openshift-global: KUSTOMIZE_DIR="install/overlays/openshift/descoped"
-install-openshift-global: install-operator
+install-openshift-global: clone-kustomize-dir set-operator-id set-operator-env install-operator
install-openshift-ns: DEFAULT_NS="default"
install-openshift-ns: KUSTOMIZE_DIR="install/overlays/openshift/namespaced"
-install-openshift-ns: install-operator
+install-openshift-ns: clone-kustomize-dir set-operator-id set-operator-env install-operator
uninstall:
ifdef NAMESPACE