You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by as...@apache.org on 2022/01/31 08:58:35 UTC

[camel-k] 24/40: Remove any credential leakage in the log output

This is an automated email from the ASF dual-hosted git repository.

astefanutti pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-k.git

commit e32d557334bc2e103cd00ce69774e12d56c59c3c
Author: phantomjinx <p....@phantomjinx.co.uk>
AuthorDate: Mon Dec 6 19:35:58 2021 +0000

    Remove any credential leakage in the log output
    
    * Discontinue using json-to-variables and converted secret to simple
      key-value list
    
    * Converts all environment variables into inputs and outputs as these are
      not logged
    
    * Creates bash scripts that are called from run: calls as these scripts do
      not get logged and set-output and set-mask can be used without leakage
---
 .github/actions/e2e-builder/action.yml             |  34 ++--
 .github/actions/e2e-knative-yaks/action.yml        |  34 ++--
 .github/actions/e2e-knative/action.yml             |  34 ++--
 .github/actions/e2e-kubernetes/action.yml          |  34 ++--
 .github/actions/e2e-upgrade/action.yml             |  35 +++--
 .github/actions/json-to-variables                  |   1 -
 .github/actions/kamel-build-binary/action.yml      |  14 +-
 .github/actions/kamel-build-bundle/action.yaml     |  28 +++-
 .github/actions/kamel-build/action.yml             |  21 ++-
 .github/actions/kamel-cleanup/action.yaml          |  11 +-
 .../actions/kamel-config-cluster-custom/action.yml | 175 ++++-----------------
 .../kamel-config-cluster-custom/connect-cluster.sh | 142 +++++++++++++++++
 .../actions/kamel-config-cluster-kind/action.yml   |  49 +++---
 .../kamel-config-cluster-kind/extract-config.sh    |  51 ++++++
 .../actions/kamel-config-cluster-ocp3/action.yml   |  57 +++++--
 .github/actions/kamel-config-cluster/action.yaml   |  84 ++++++++--
 .../actions/kamel-config-cluster/output-config.sh  |  81 ++++++++++
 .github/actions/kamel-prepare-env/action.yml       |   3 -
 .github/workflows/builder.yml                      |   1 +
 .github/workflows/knative.yml                      |   2 +
 .github/workflows/kubernetes.yml                   |   1 +
 .github/workflows/openshift.yml                    |  24 +--
 .github/workflows/upgrade.yml                      |   1 +
 .gitmodules                                        |   4 -
 config/rbac/operator-role.yaml                     |  21 ---
 25 files changed, 631 insertions(+), 311 deletions(-)

diff --git a/.github/actions/e2e-builder/action.yml b/.github/actions/e2e-builder/action.yml
index caeff37..a4e814b 100644
--- a/.github/actions/e2e-builder/action.yml
+++ b/.github/actions/e2e-builder/action.yml
@@ -22,6 +22,9 @@ inputs:
   cluster-config-data:
     description: 'The configuration of the underlying cluster (if cluster-type is custom)'
     required: false
+  cluster-kube-config-data:
+    description: 'Base16 encoded kube config - required for custom cluster type only'
+    required: false
   publisher:
     description: 'The publishing strategy to be used'
     required: true
@@ -34,30 +37,31 @@ runs:
     name: Prepare Test Environment
     uses: ./.github/actions/kamel-prepare-env
 
-  - id: configure-cluster
+  - id: config-cluster
     name: Configure Platform
     uses: ./.github/actions/kamel-config-cluster
     with:
       cluster-type: ${{ env.TEST_CLUSTER }}
       cluster-config-data: ${{ inputs.cluster-config-data }}
+      cluster-kube-config-data: ${{ inputs.cluster-kube-config-data }}
 
   - id: build-kamel
     name: Build Kamel
     uses: ./.github/actions/kamel-build
     with:
-      image-registry-push-host: ${{ env.CLUSTER_IMAGE_REGISTRY_PUSH_HOST }}
-      image-registry-pull-host: ${{ env.CLUSTER_IMAGE_REGISTRY_PULL_HOST }}
-      image-namespace: ${{ env.CLUSTER_IMAGE_NAMESPACE }}
+      image-registry-push-host: ${{ steps.config-cluster.outputs.cluster-image-registry-push-host }}
+      image-registry-pull-host: ${{ steps.config-cluster.outputs.cluster-image-registry-pull-host }}
+      image-namespace: ${{ steps.config-cluster.outputs.cluster-image-namespace }}
       # Builds the bundle if an OLM is available - depends on cluster being tested
-      build-bundle: ${{ env.CLUSTER_HAS_OLM }}
+      build-bundle: ${{ steps.config-cluster.outputs.cluster-has-olm }}
       # Can be empty and so catalog source will not be created
-      catalog-source-namespace: ${{ env.CLUSTER_CATALOG_SOURCE_NAMESPACE }}
+      catalog-source-namespace: ${{ steps.config-cluster.outputs.cluster-catalog-source-namespace }}
 
   - id: install-kamel-cluster-setup
     name: Install Kamel Cluster Setup
     uses: ./.github/actions/kamel-install-cluster-setup
     with:
-      kube-admin-user-ctx: ${{ env.CLUSTER_KUBE_ADMIN_USER_CTX }}
+      kube-admin-user-ctx: ${{ steps.config-cluster.outputs.cluster-kube-admin-user-ctx }}
 
   - id: run-it
     name: Run IT
@@ -66,19 +70,19 @@ runs:
       KAMEL_INSTALL_BUILD_PUBLISH_STRATEGY: ${{ inputs.publisher }}
     run: |
       # Cluster environment
-      export CUSTOM_IMAGE=${{ env.BUILD_BINARY_LOCAL_IMAGE_NAME }}
-      export CUSTOM_VERSION=${{ env.BUILD_BINARY_LOCAL_IMAGE_VERSION }}
+      export CUSTOM_IMAGE=${{ steps.build-kamel.outputs.build-binary-local-image-name }}
+      export CUSTOM_VERSION=${{ steps.build-kamel.outputs.build-binary-local-image-version }}
 
       #
       # If bundle has been built and installed then use it
       #
-      if [ -n "${{ env.BUILD_BUNDLE_CATALOG_SOURCE }}" ]; then
-        export KAMEL_INSTALL_OLM_SOURCE_NAMESPACE=${{ env.CLUSTER_IMAGE_NAMESPACE }}
-        export KAMEL_INSTALL_OLM_SOURCE=${{ env.BUILD_BUNDLE_CATALOG_SOURCE }}
+      if [ -n "${{ steps.build-kamel.outputs.build-bundle-catalog-source-name }}" ]; then
+        export KAMEL_INSTALL_OLM_SOURCE_NAMESPACE=${{ steps.config-cluster.outputs.cluster-image-namespace }}
+        export KAMEL_INSTALL_OLM_SOURCE=${{ steps.build-kamel.outputs.build-bundle-catalog-source-name }}
       fi
 
-      export KAMEL_INSTALL_REGISTRY=${{ env.CLUSTER_IMAGE_REGISTRY_PULL_HOST }}
-      export KAMEL_INSTALL_REGISTRY_INSECURE=${{ env.CLUSTER_IMAGE_REGISTRY_INSECURE }}
+      export KAMEL_INSTALL_REGISTRY=${{ steps.config-cluster.outputs.cluster-image-registry-pull-host }}
+      export KAMEL_INSTALL_REGISTRY_INSECURE=${{steps.config-cluster.outputs.cluster-image-registry-insecure }}
       export KAMEL_INSTALL_OPERATOR_IMAGE=${CUSTOM_IMAGE}:${CUSTOM_VERSION}
       export CAMEL_K_TEST_IMAGE_NAME=${CUSTOM_IMAGE}
       export CAMEL_K_TEST_IMAGE_VERSION=${CUSTOM_VERSION}
@@ -90,3 +94,5 @@ runs:
   - name: Cleanup
     uses: ./.github/actions/kamel-cleanup
     if: ${{ always() }}
+    with:
+      build-bundle-catalog-source: ${{ steps.build-kamel.outputs.build-bundle-catalog-source-name }}
diff --git a/.github/actions/e2e-knative-yaks/action.yml b/.github/actions/e2e-knative-yaks/action.yml
index fc95dad..df367ae 100644
--- a/.github/actions/e2e-knative-yaks/action.yml
+++ b/.github/actions/e2e-knative-yaks/action.yml
@@ -22,6 +22,9 @@ inputs:
   cluster-config-data:
     description: 'The configuration of the underlying cluster (if cluster-type is custom)'
     required: false
+  cluster-kube-config-data:
+    description: 'Base16 encoded kube config - required for custom cluster type only'
+    required: false
 
 runs:
   using: "composite"
@@ -31,12 +34,13 @@ runs:
     name: Prepare Test Environment
     uses: ./.github/actions/kamel-prepare-env
 
-  - id: configure-cluster
+  - id: config-cluster
     name: Configure Platform
     uses: ./.github/actions/kamel-config-cluster
     with:
       cluster-type: ${{ env.TEST_CLUSTER }}
       cluster-config-data: ${{ inputs.cluster-config-data }}
+      cluster-kube-config-data: ${{ inputs.cluster-kube-config-data }}
 
   - name: Install YAKS
     uses: ./.github/actions/kamel-install-yaks
@@ -48,38 +52,38 @@ runs:
     name: Build Kamel
     uses: ./.github/actions/kamel-build
     with:
-      image-registry-push-host: ${{ env.CLUSTER_IMAGE_REGISTRY_PUSH_HOST }}
-      image-registry-pull-host: ${{ env.CLUSTER_IMAGE_REGISTRY_PULL_HOST }}
-      image-namespace: ${{ env.CLUSTER_IMAGE_NAMESPACE }}
+      image-registry-push-host: ${{ steps.config-cluster.outputs.cluster-image-registry-push-host }}
+      image-registry-pull-host: ${{ steps.config-cluster.outputs.cluster-image-registry-pull-host }}
+      image-namespace: ${{ steps.config-cluster.outputs.cluster-image-namespace }}
       # Builds the bundle if an OLM is available - depends on cluster being tested
-      build-bundle: ${{ env.CLUSTER_HAS_OLM }}
+      build-bundle: ${{ steps.config-cluster.outputs.cluster-has-olm }}
       # Can be empty and so catalog source will not be created
-      catalog-source-namespace: ${{ env.CLUSTER_CATALOG_SOURCE_NAMESPACE }}
+      catalog-source-namespace: ${{ steps.config-cluster.outputs.cluster-catalog-source-namespace }}
 
   - id: install-kamel-cluster-setup
     name: Install Kamel Cluster Setup
     uses: ./.github/actions/kamel-install-cluster-setup
     with:
-      kube-admin-user-ctx: ${{ env.CLUSTER_KUBE_ADMIN_USER_CTX }}
+      kube-admin-user-ctx: ${{ steps.config-cluster.outputs.cluster-kube-admin-user-ctx }}
 
   - id: run-it
     name: Run IT
     shell: bash
     run: |
       # Cluster environment
-      export CUSTOM_IMAGE=${{ env.BUILD_BINARY_LOCAL_IMAGE_NAME }}
-      export CUSTOM_VERSION=${{ env.BUILD_BINARY_LOCAL_IMAGE_VERSION }}
+      export CUSTOM_IMAGE=${{ steps.build-kamel.outputs.build-binary-local-image-name }}
+      export CUSTOM_VERSION=${{ steps.build-kamel.outputs.build-binary-local-image-version }}
 
       #
       # If bundle has been built and installed then use it
       #
-      if [ -n "${{ env.BUILD_BUNDLE_CATALOG_SOURCE }}" ]; then
-        export KAMEL_INSTALL_OLM_SOURCE_NAMESPACE=${{ env.CLUSTER_IMAGE_NAMESPACE }}
-        export KAMEL_INSTALL_OLM_SOURCE=${{ env.BUILD_BUNDLE_CATALOG_SOURCE }}
+      if [ -n "${{ steps.build-kamel.outputs.build-bundle-catalog-source-name }}" ]; then
+        export KAMEL_INSTALL_OLM_SOURCE_NAMESPACE=${{ steps.config-cluster.outputs.cluster-image-namespace }}
+        export KAMEL_INSTALL_OLM_SOURCE=${{ steps.build-kamel.outputs.build-bundle-catalog-source-name }}
       fi
 
-      export KAMEL_INSTALL_REGISTRY=${{ env.CLUSTER_IMAGE_REGISTRY_PULL_HOST }}
-      export KAMEL_INSTALL_REGISTRY_INSECURE=${{ env.CLUSTER_IMAGE_REGISTRY_INSECURE }}
+      export KAMEL_INSTALL_REGISTRY=${{ steps.config-cluster.outputs.cluster-image-registry-pull-host }}
+      export KAMEL_INSTALL_REGISTRY_INSECURE=${{steps.config-cluster.outputs.cluster-image-registry-insecure }}
       export KAMEL_INSTALL_OPERATOR_IMAGE=${CUSTOM_IMAGE}:${CUSTOM_VERSION}
       export CAMEL_K_TEST_IMAGE_NAME=${CUSTOM_IMAGE}
       export CAMEL_K_TEST_IMAGE_VERSION=${CUSTOM_VERSION}
@@ -98,3 +102,5 @@ runs:
   - name: Cleanup
     uses: ./.github/actions/kamel-cleanup
     if: ${{ always() }}
+    with:
+      build-bundle-catalog-source: ${{ steps.build-kamel.outputs.build-bundle-catalog-source-name }}
diff --git a/.github/actions/e2e-knative/action.yml b/.github/actions/e2e-knative/action.yml
index a1af033..ce3658a 100644
--- a/.github/actions/e2e-knative/action.yml
+++ b/.github/actions/e2e-knative/action.yml
@@ -22,6 +22,9 @@ inputs:
   cluster-config-data:
     description: 'The configuration of the underlying cluster (if cluster-type is custom)'
     required: false
+  cluster-kube-config-data:
+    description: 'Base16 encoded kube config - required for custom cluster type only'
+    required: false
 
 runs:
   using: "composite"
@@ -31,12 +34,13 @@ runs:
     name: Prepare Test Environment
     uses: ./.github/actions/kamel-prepare-env
 
-  - id: configure-cluster
+  - id: config-cluster
     name: Configure Platform
     uses: ./.github/actions/kamel-config-cluster
     with:
       cluster-type: ${{ env.TEST_CLUSTER }}
       cluster-config-data: ${{ inputs.cluster-config-data }}
+      cluster-kube-config-data: ${{ inputs.cluster-kube-config-data }}
 
   - name: Install Knative
     uses: ./.github/actions/kamel-install-knative
@@ -45,38 +49,38 @@ runs:
     name: Build Kamel
     uses: ./.github/actions/kamel-build
     with:
-      image-registry-push-host: ${{ env.CLUSTER_IMAGE_REGISTRY_PUSH_HOST }}
-      image-registry-pull-host: ${{ env.CLUSTER_IMAGE_REGISTRY_PULL_HOST }}
-      image-namespace: ${{ env.CLUSTER_IMAGE_NAMESPACE }}
+      image-registry-push-host: ${{ steps.config-cluster.outputs.cluster-image-registry-push-host }}
+      image-registry-pull-host: ${{ steps.config-cluster.outputs.cluster-image-registry-pull-host }}
+      image-namespace: ${{ steps.config-cluster.outputs.cluster-image-namespace }}
       # Builds the bundle if an OLM is available - depends on cluster being tested
-      build-bundle: ${{ env.CLUSTER_HAS_OLM }}
+      build-bundle: ${{ steps.config-cluster.outputs.cluster-has-olm }}
       # Can be empty and so catalog source will not be created
-      catalog-source-namespace: ${{ env.CLUSTER_CATALOG_SOURCE_NAMESPACE }}
+      catalog-source-namespace: ${{ steps.config-cluster.outputs.cluster-catalog-source-namespace }}
 
   - id: install-kamel-cluster-setup
     name: Install Kamel Cluster Setup
     uses: ./.github/actions/kamel-install-cluster-setup
     with:
-      kube-admin-user-ctx: ${{ env.CLUSTER_KUBE_ADMIN_USER_CTX }}
+      kube-admin-user-ctx: ${{ steps.config-cluster.outputs.cluster-kube-admin-user-ctx }}
 
   - id: run-it
     name: Run IT
     shell: bash
     run: |
       # Cluster environment
-      export CUSTOM_IMAGE=${{ env.BUILD_BINARY_LOCAL_IMAGE_NAME }}
-      export CUSTOM_VERSION=${{ env.BUILD_BINARY_LOCAL_IMAGE_VERSION }}
+      export CUSTOM_IMAGE=${{ steps.build-kamel.outputs.build-binary-local-image-name }}
+      export CUSTOM_VERSION=${{ steps.build-kamel.outputs.build-binary-local-image-version }}
 
       #
       # If bundle has been built and installed then use it
       #
-      if [ -n "${{ env.BUILD_BUNDLE_CATALOG_SOURCE }}" ]; then
-        export KAMEL_INSTALL_OLM_SOURCE_NAMESPACE=${{ env.CLUSTER_IMAGE_NAMESPACE }}
-        export KAMEL_INSTALL_OLM_SOURCE=${{ env.BUILD_BUNDLE_CATALOG_SOURCE }}
+      if [ -n "${{ steps.build-kamel.outputs.build-bundle-catalog-source-name }}" ]; then
+        export KAMEL_INSTALL_OLM_SOURCE_NAMESPACE=${{ steps.config-cluster.outputs.cluster-image-namespace }}
+        export KAMEL_INSTALL_OLM_SOURCE=${{ steps.build-kamel.outputs.build-bundle-catalog-source-name }}
       fi
 
-      export KAMEL_INSTALL_REGISTRY=${{ env.CLUSTER_IMAGE_REGISTRY_PULL_HOST }}
-      export KAMEL_INSTALL_REGISTRY_INSECURE=${{ env.CLUSTER_IMAGE_REGISTRY_INSECURE }}
+      export KAMEL_INSTALL_REGISTRY=${{ steps.config-cluster.outputs.cluster-image-registry-pull-host }}
+      export KAMEL_INSTALL_REGISTRY_INSECURE=${{steps.config-cluster.outputs.cluster-image-registry-insecure }}
       export KAMEL_INSTALL_OPERATOR_IMAGE=${CUSTOM_IMAGE}:${CUSTOM_VERSION}
       export CAMEL_K_TEST_IMAGE_NAME=${CUSTOM_IMAGE}
       export CAMEL_K_TEST_IMAGE_VERSION=${CUSTOM_VERSION}
@@ -92,3 +96,5 @@ runs:
   - name: Cleanup
     uses: ./.github/actions/kamel-cleanup
     if: ${{ always() }}
+    with:
+      build-bundle-catalog-source: ${{ steps.build-kamel.outputs.build-bundle-catalog-source-name }}
diff --git a/.github/actions/e2e-kubernetes/action.yml b/.github/actions/e2e-kubernetes/action.yml
index c3ee22f..6dfde05 100644
--- a/.github/actions/e2e-kubernetes/action.yml
+++ b/.github/actions/e2e-kubernetes/action.yml
@@ -22,6 +22,9 @@ inputs:
   cluster-config-data:
     description: 'The configuration of the underlying cluster (if cluster-type is custom)'
     required: false
+  cluster-kube-config-data:
+    description: 'Base16 encoded kube config - required for custom cluster type only'
+    required: false
 
 runs:
   using: "composite"
@@ -31,50 +34,51 @@ runs:
     name: Prepare Test Environment
     uses: ./.github/actions/kamel-prepare-env
 
-  - id: configure-cluster
+  - id: config-cluster
     name: Configure Platform
     uses: ./.github/actions/kamel-config-cluster
     with:
       cluster-type: ${{ env.TEST_CLUSTER }}
       cluster-config-data: ${{ inputs.cluster-config-data }}
+      cluster-kube-config-data: ${{ inputs.cluster-kube-config-data }}
 
   - id: build-kamel
     name: Build Kamel
     uses: ./.github/actions/kamel-build
     with:
-      image-registry-push-host: ${{ env.CLUSTER_IMAGE_REGISTRY_PUSH_HOST }}
-      image-registry-pull-host: ${{ env.CLUSTER_IMAGE_REGISTRY_PULL_HOST }}
-      image-namespace: ${{ env.CLUSTER_IMAGE_NAMESPACE }}
+      image-registry-push-host: ${{ steps.config-cluster.outputs.cluster-image-registry-push-host }}
+      image-registry-pull-host: ${{ steps.config-cluster.outputs.cluster-image-registry-pull-host }}
+      image-namespace: ${{ steps.config-cluster.outputs.cluster-image-namespace }}
       # Builds the bundle if an OLM is available - depends on cluster being tested
-      build-bundle: ${{ env.CLUSTER_HAS_OLM }}
+      build-bundle: ${{ steps.config-cluster.outputs.cluster-has-olm }}
       # Can be empty and so catalog source will not be created
-      catalog-source-namespace: ${{ env.CLUSTER_CATALOG_SOURCE_NAMESPACE }}
+      catalog-source-namespace: ${{ steps.config-cluster.outputs.cluster-catalog-source-namespace }}
 
   - id: install-kamel-cluster-setup
     name: Install Kamel Cluster Setup
     uses: ./.github/actions/kamel-install-cluster-setup
     with:
-      kube-admin-user-ctx: ${{ env.CLUSTER_KUBE_ADMIN_USER_CTX }}
+      kube-admin-user-ctx: ${{ steps.config-cluster.outputs.cluster-kube-admin-user-ctx }}
 
   - id: run-it
     name: Run IT
     shell: bash
     run: |
       # Cluster environment
-      export CUSTOM_IMAGE=${{ env.BUILD_BINARY_LOCAL_IMAGE_NAME }}
-      export CUSTOM_VERSION=${{ env.BUILD_BINARY_LOCAL_IMAGE_VERSION }}
+      export CUSTOM_IMAGE=${{ steps.build-kamel.outputs.build-binary-local-image-name }}
+      export CUSTOM_VERSION=${{ steps.build-kamel.outputs.build-binary-local-image-version }}
 
       #
       # If bundle has been built and installed then use it
       #
-      if [ -n "${{ env.BUILD_BUNDLE_CATALOG_SOURCE }}" ]; then
-        export KAMEL_INSTALL_OLM_SOURCE_NAMESPACE=${{ env.CLUSTER_IMAGE_NAMESPACE }}
-        export KAMEL_INSTALL_OLM_SOURCE=${{ env.BUILD_BUNDLE_CATALOG_SOURCE }}
+      if [ -n "${{ steps.build-kamel.outputs.build-bundle-catalog-source-name }}" ]; then
+        export KAMEL_INSTALL_OLM_SOURCE_NAMESPACE=${{ steps.config-cluster.outputs.cluster-image-namespace }}
+        export KAMEL_INSTALL_OLM_SOURCE=${{ steps.build-kamel.outputs.build-bundle-catalog-source-name }}
       fi
 
       export KAMEL_INSTALL_MAVEN_REPOSITORIES=$(make get-staging-repo)
-      export KAMEL_INSTALL_REGISTRY=${{ env.CLUSTER_IMAGE_REGISTRY_PULL_HOST }}
-      export KAMEL_INSTALL_REGISTRY_INSECURE=${{ env.CLUSTER_IMAGE_REGISTRY_INSECURE }}
+      export KAMEL_INSTALL_REGISTRY=${{ steps.config-cluster.outputs.cluster-image-registry-pull-host }}
+      export KAMEL_INSTALL_REGISTRY_INSECURE=${{steps.config-cluster.outputs.cluster-image-registry-insecure }}
       export KAMEL_INSTALL_OPERATOR_IMAGE=${CUSTOM_IMAGE}:${CUSTOM_VERSION}
 
       export CAMEL_K_TEST_IMAGE_NAME=${CUSTOM_IMAGE}
@@ -90,3 +94,5 @@ runs:
   - name: Cleanup
     uses: ./.github/actions/kamel-cleanup
     if: ${{ always() }}
+    with:
+      build-bundle-catalog-source: ${{ steps.build-kamel.outputs.build-bundle-catalog-source-name }}
diff --git a/.github/actions/e2e-upgrade/action.yml b/.github/actions/e2e-upgrade/action.yml
index 1da7253..b968392 100644
--- a/.github/actions/e2e-upgrade/action.yml
+++ b/.github/actions/e2e-upgrade/action.yml
@@ -22,6 +22,9 @@ inputs:
   cluster-config-data:
     description: 'The configuration of the underlying cluster (if cluster-type is custom)'
     required: false
+  cluster-kube-config-data:
+    description: 'Base16 encoded kube config - required for custom cluster type only'
+    required: false
 
 runs:
   using: "composite"
@@ -31,15 +34,17 @@ runs:
     name: Prepare Test Environment
     uses: ./.github/actions/kamel-prepare-env
 
-  - id: configure-cluster
+  - id: config-cluster
     name: Configure Cluster
     uses: ./.github/actions/kamel-config-cluster
     with:
       cluster-type: ${{ env.TEST_CLUSTER }}
       cluster-config-data: ${{ inputs.cluster-config-data }}
+      cluster-kube-config-data: ${{ inputs.cluster-kube-config-data }}
       require-olm: true
 
-  - name: Get Released Kamel CLI
+  - id: released-kamel-cli
+    name: Get Released Kamel CLI
     shell: bash
     run: |
       export KAMEL_VERSION=$(make get-last-released-version)
@@ -57,7 +62,7 @@ runs:
       mv /tmp/kamel ${RELEASED_KAMEL_BINARY}
       if [ $? == 0 ]; then
         echo "Info: Kamel version installed: $(${RELEASED_KAMEL_BINARY} version)"
-        echo "E2E_UPGRADE_RELEASED_KAMEL_BINARY=${RELEASED_KAMEL_BINARY}" >> $GITHUB_ENV
+        echo "::set-output name=released-kamel-binary::${RELEASED_KAMEL_BINARY}"
       else
         echo "Error: Failed to install kamel binary ${KAMEL_VERSION}"
         exit 1
@@ -67,35 +72,35 @@ runs:
     name: Build Kamel
     uses: ./.github/actions/kamel-build
     with:
-      image-registry-push-host: ${{ env.CLUSTER_IMAGE_REGISTRY_PUSH_HOST }}
-      image-registry-pull-host: ${{ env.CLUSTER_IMAGE_REGISTRY_PULL_HOST }}
-      image-namespace: ${{ env.CLUSTER_IMAGE_NAMESPACE }}
+      image-registry-push-host: ${{ steps.config-cluster.outputs.cluster-image-registry-push-host }}
+      image-registry-pull-host: ${{ steps.config-cluster.outputs.cluster-image-registry-pull-host }}
+      image-namespace: ${{ steps.config-cluster.outputs.cluster-image-namespace }}
       # Builds the bundle if an OLM is available.
       # Since configure-cluster requires OLM then this should be true
-      build-bundle: ${{ env.CLUSTER_HAS_OLM }}
+      build-bundle: ${{ steps.config-cluster.outputs.cluster-has-olm }}
       # Can be empty and so catalog source will not be created
-      catalog-source-namespace: ${{ env.CLUSTER_CATALOG_SOURCE_NAMESPACE }}
+      catalog-source-namespace: ${{ steps.config-cluster.outputs.cluster-catalog-source-namespace }}
 
   - name: Run IT
     shell: bash
     run: |
       # Use the last released Kamel CLI
-      export RELEASED_KAMEL_BIN=${{ env.E2E_UPGRADE_RELEASED_KAMEL_BINARY }}
+      export RELEASED_KAMEL_BIN=${{ steps.released-kamel-cli.outputs.released-kamel-binary }}
 
       echo "Kamel version: $(${RELEASED_KAMEL_BIN} version)"
 
       # Configure install options
-      export CUSTOM_IMAGE=${{ env.BUILD_BINARY_LOCAL_IMAGE_NAME }}
-      export CUSTOM_VERSION=${{ env.BUILD_BINARY_LOCAL_IMAGE_VERSION }}
+      export CUSTOM_IMAGE=${{ steps.build-kamel.outputs.build-binary-local-image-name }}
+      export CUSTOM_VERSION=${{ steps.build-kamel.outputs.build-binary-local-image-version }}
       export KAMEL_INSTALL_MAVEN_REPOSITORIES=$(make get-staging-repo)
-      export KAMEL_INSTALL_REGISTRY=${{ env.CLUSTER_IMAGE_REGISTRY_PULL_HOST }}
-      export KAMEL_INSTALL_REGISTRY_INSECURE=${{ env.CLUSTER_IMAGE_REGISTRY_INSECURE }}
+      export KAMEL_INSTALL_REGISTRY=${{ steps.config-cluster.outputs.cluster-image-registry-pull-host }}
+      export KAMEL_INSTALL_REGISTRY_INSECURE=${{steps.config-cluster.outputs.cluster-image-registry-insecure }}
 
       # Despite building a bundle we don't want it installed immediately so no OLM_INDEX_BUNDLE var
 
       # Configure test options
       export CAMEL_K_PREV_IIB=quay.io/operatorhubio/catalog:latest
-      export CAMEL_K_NEW_IIB=${{ env.BUILD_BUNDLE_LOCAL_IMAGE_BUNDLE_INDEX }}
+      export CAMEL_K_NEW_IIB=${{ steps.build-kamel.outputs.build-bundle-image-bundle-index }}
       export KAMEL_K_TEST_RELEASE_VERSION=$(make get-last-released-version)
       export KAMEL_K_TEST_OPERATOR_CURRENT_IMAGE=${CUSTOM_IMAGE}:${CUSTOM_VERSION}
       export CAMEL_K_TEST_SAVE_FAILED_TEST_NAMESPACE=${{ env.CAMEL_K_TEST_SAVE_FAILED_TEST_NAMESPACE }}
@@ -106,3 +111,5 @@ runs:
   - name: Cleanup
     uses: ./.github/actions/kamel-cleanup
     if: ${{ always() }}
+    with:
+      build-bundle-catalog-source: ${{ steps.build-kamel.outputs.build-bundle-catalog-source-name }}
diff --git a/.github/actions/json-to-variables b/.github/actions/json-to-variables
deleted file mode 160000
index cc8c639..0000000
--- a/.github/actions/json-to-variables
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit cc8c6394031e145c90f7f9ec909d83df92431fb8
diff --git a/.github/actions/kamel-build-binary/action.yml b/.github/actions/kamel-build-binary/action.yml
index 1355bf2..8b87dd6 100644
--- a/.github/actions/kamel-build-binary/action.yml
+++ b/.github/actions/kamel-build-binary/action.yml
@@ -81,5 +81,15 @@ runs:
         # Use the PULL host to ensure the correct image:tag
         # is passed into the tests for the deployment to pull from
         #
-        echo "BUILD_BINARY_LOCAL_IMAGE_NAME=${{ inputs.image-registry-pull-host }}/${{ inputs.image-namespace }}/camel-k" >> $GITHUB_ENV
-        echo "BUILD_BINARY_LOCAL_IMAGE_VERSION=$(make get-version)" >> $GITHUB_ENV
+        BUILD_BINARY_LOCAL_IMAGE_NAME="${{ inputs.image-registry-pull-host }}/${{ inputs.image-namespace }}/camel-k"
+        BUILD_BINARY_LOCAL_IMAGE_VERSION="$(make get-version)"
+        echo "::set-output name=build-binary-local-image-name::${BUILD_BINARY_LOCAL_IMAGE_NAME}"
+        echo "::set-output name=build-binary-local-image-version::${BUILD_BINARY_LOCAL_IMAGE_VERSION}"
+
+outputs:
+  build-binary-local-image-name:
+    description: "Full name of the binary operator image"
+    value: ${{ steps.build-operator.outputs.build-binary-local-image-name }}
+  build-binary-local-image-version:
+    description: "Version & tag of the binary operator image"
+    value: ${{ steps.build-operator.outputs.build-binary-local-image-version }}
diff --git a/.github/actions/kamel-build-bundle/action.yaml b/.github/actions/kamel-build-bundle/action.yaml
index 2191680..2a6f65f 100644
--- a/.github/actions/kamel-build-bundle/action.yaml
+++ b/.github/actions/kamel-build-bundle/action.yaml
@@ -97,7 +97,9 @@ runs:
         # Use the PULL host to ensure the correct image:tag
         # is passed into the tests for the deployment to pull from
         #
-        echo "BUILD_BUNDLE_LOCAL_IMAGE=${{ inputs.image-registry-pull-host }}/${{ inputs.image-namespace }}/camel-k-bundle:${{ inputs.local-image-version }}" >> $GITHUB_ENV
+        BUILD_BUNDLE_LOCAL_IMAGE="${{ inputs.image-registry-pull-host }}/${{ inputs.image-namespace }}/camel-k-bundle:${{ inputs.local-image-version }}"
+        echo "::set-output name=build-bundle-local-image::${BUILD_BUNDLE_LOCAL_IMAGE}"
+
 
     - id: install-opm
       name: Install opm if required
@@ -170,11 +172,11 @@ runs:
           #
           docker tag \
             ${PUSH_REGISTRY}/${{ inputs.image-namespace }}/camel-k-bundle:${{ inputs.local-image-version }} \
-            ${{ env.BUILD_BUNDLE_LOCAL_IMAGE }}
+            ${{ steps.build-bundle-image.outputs.build-bundle-local-image }}
 
           # Push the bundle image to the registry
           #
-          docker push ${{ env.BUILD_BUNDLE_LOCAL_IMAGE }}
+          docker push ${{ steps.build-bundle-image.outputs.build-bundle-local-image }}
         fi
 
         #
@@ -187,12 +189,13 @@ runs:
         #
         sudo opm index add \
           -c docker --skip-tls \
-          --bundles ${{ env.BUILD_BUNDLE_LOCAL_IMAGE }} \
+          --bundles ${{ steps.build-bundle-image.outputs.build-bundle-local-image }} \
           --from-index quay.io/operatorhubio/catalog:latest \
           --tag ${LOCAL_IIB}
 
         docker push ${LOCAL_IIB}
-        echo "BUILD_BUNDLE_LOCAL_IMAGE_BUNDLE_INDEX=${{ inputs.image-registry-pull-host }}/${{ inputs.image-namespace }}/camel-k-iib:${{ inputs.local-image-version }}" >> $GITHUB_ENV
+        BUILD_BUNDLE_LOCAL_IMAGE_BUNDLE_INDEX="${{ inputs.image-registry-pull-host }}/${{ inputs.image-namespace }}/camel-k-iib:${{ inputs.local-image-version }}"
+        echo "::set-output name=build-bundle-image-bundle-index::${BUILD_BUNDLE_LOCAL_IMAGE_BUNDLE_INDEX}"
 
     - id: build-image-catalog
       name: Create a new catalog to host the index image
@@ -211,7 +214,7 @@ runs:
         fi
 
         export BUILD_CATALOG_SOURCE="camel-k-test-source"
-        echo "BUILD_BUNDLE_CATALOG_SOURCE=${BUILD_CATALOG_SOURCE}" >> $GITHUB_ENV
+        echo "::set-output name=build-bundle-catalog-source-name::${BUILD_CATALOG_SOURCE}"
 
         cat <<EOF | kubectl apply -f -
         apiVersion: operators.coreos.com/v1alpha1
@@ -221,10 +224,21 @@ runs:
           namespace: ${{ inputs.image-namespace }}
         spec:
           displayName: OLM upgrade test Catalog
-          image: ${{ env.BUILD_BUNDLE_LOCAL_IMAGE_BUNDLE_INDEX }}
+          image: ${{ steps.build-index-image.outputs.build-bundle-image-bundle-index }}
           sourceType: grpc
           publisher: grpc
           updateStrategy:
             registryPoll:
               interval: 1m0s
         EOF
+
+outputs:
+  build-bundle-local-image:
+    description: "Full name of the bundle image"
+    value: ${{ steps.build-bundle-image.outputs.build-bundle-local-image }}
+  build-bundle-image-bundle-index:
+    description: "Full name of the bundle index image"
+    value: ${{ steps.build-index-image.outputs.build-bundle-image-bundle-index }}
+  build-bundle-catalog-source-name:
+    description: "Name of the catalog source for the build bundle image"
+    value: ${{ steps.build-image-catalog.outputs.build-bundle-catalog-source-name }}
diff --git a/.github/actions/kamel-build/action.yml b/.github/actions/kamel-build/action.yml
index ba84c06..09de53d 100644
--- a/.github/actions/kamel-build/action.yml
+++ b/.github/actions/kamel-build/action.yml
@@ -63,6 +63,23 @@ runs:
         image-registry-push-host: ${{ inputs.image-registry-push-host }}
         image-registry-pull-host: ${{ inputs.image-registry-pull-host }}
         image-namespace: ${{ inputs.image-namespace }}
-        local-image-name: ${{ env.BUILD_BINARY_LOCAL_IMAGE_NAME }}
-        local-image-version: ${{ env.BUILD_BINARY_LOCAL_IMAGE_VERSION }}
+        local-image-name: ${{ steps.build-kamel-binary.outputs.build-binary-local-image-name }}
+        local-image-version: ${{ steps.build-kamel-binary.outputs.build-binary-local-image-version }}
         catalog-source-namespace: ${{ inputs.catalog-source-namespace }}
+
+outputs:
+  build-binary-local-image-name:
+    description: "Full name of the binary operator image"
+    value: ${{ steps.build-kamel-binary.outputs.build-binary-local-image-name }}
+  build-binary-local-image-version:
+    description: "Version & tag of the binary operator image"
+    value: ${{ steps.build-kamel-binary.outputs.build-binary-local-image-version }}
+  build-bundle-local-image:
+    description: "Full name of the bundle image"
+    value: ${{ steps.build-kamel-bundle.outputs.build-bundle-local-image }}
+  build-bundle-image-bundle-index:
+    description: "Full name of the bundle index image"
+    value: ${{ steps.build-kamel-bundle.outputs.build-bundle-image-bundle-index }}
+  build-bundle-catalog-source-name:
+    description: "Name of the catalog source for the build bundle image"
+    value: ${{ steps.build-kamel-bundle.outputs.build-bundle-catalog-source-name }}
diff --git a/.github/actions/kamel-cleanup/action.yaml b/.github/actions/kamel-cleanup/action.yaml
index 338ad37..aadc8a4 100644
--- a/.github/actions/kamel-cleanup/action.yaml
+++ b/.github/actions/kamel-cleanup/action.yaml
@@ -18,6 +18,11 @@
 name: kamel-cleanup
 description: 'Cleans up the target cluster, removing any e2e test resources'
 
+inputs:
+  build-bundle-catalog-source:
+    description: "Name of the catalog source for the build bundle image"
+    required: true
+
 runs:
   using: "composite"
   steps:
@@ -41,15 +46,15 @@ runs:
       shell: bash
       if: ${{ always() }}
       run: |
-        if [ -z "${{ env.BUILD_BUNDLE_CATALOG_SOURCE }}" ]; then
+        if [ -z "${{ inputs.build-bundle-catalog-source-name }}" ]; then
           # Catalog source never defined so nothing to do
           exit 0
         fi
 
         set +e
-        CATALOG_NS=$(kubectl get catalogsource --all-namespaces | grep ${{ env.BUILD_BUNDLE_CATALOG_SOURCE }} | awk {'print $1'})
+        CATALOG_NS=$(kubectl get catalogsource --all-namespaces | grep ${{ inputs.build-bundle-catalog-source-name }} | awk {'print $1'})
         for ns in ${CATALOG_NS}
         do
-          kubectl delete CatalogSource ${{ env.BUILD_BUNDLE_CATALOG_SOURCE }} -n ${ns}
+          kubectl delete CatalogSource ${{ inputs.build-bundle-catalog-source-name }} -n ${ns}
         done
         set -e
diff --git a/.github/actions/kamel-config-cluster-custom/action.yml b/.github/actions/kamel-config-cluster-custom/action.yml
index e5986e1..7cb64f4 100644
--- a/.github/actions/kamel-config-cluster-custom/action.yml
+++ b/.github/actions/kamel-config-cluster-custom/action.yml
@@ -20,127 +20,26 @@ description: 'Provides configuration for acessing a custom kubernetes cluster'
 
 inputs:
   cluster-config-data:
-    description: 'The JSON configuration of the cluster'
+    description: 'Non-Secure Variables for the cluster configuration'
+    required: true
+  cluster-kube-config-data:
+    description: 'Base16 encoded kube config'
     required: true
 
 runs:
   using: "composite"
   steps:
-    - name: Read cluster-config-data variable to temporary file & override CLUSTER_TYPE if cluster config defined
-      shell: bash
-      if: ${{ env.CLUSTER_CUSTOM_CONFIGURED != 'true' }}
-      run: |
-        export CLUSTER_CONFIG_FILE=/tmp/cluster-config.json
-
-        if [ -f ${CLUSTER_CONFIG_FILE} ]; then
-          rm -f ${CLUSTER_CONFIG_FILE}
-        fi
-
-        touch "${CLUSTER_CONFIG_FILE}"
-        if [ -z "${{ inputs.cluster-config-data }}" ]; then
-          echo "Error: No cluster-config-data parameter has been defined"
-          exit 1
-        fi
-
-        cat << EOF > "${CLUSTER_CONFIG_FILE}"
-        ${{ inputs.cluster-config-data }}
-        EOF
-
-        if [ ! -f "${CLUSTER_CONFIG_FILE}" ]; then
-          echo "Error: No file ${CLUSTER_CONFIG_FILE} has been created"
-          exit 1
-        fi
-
-        if [ -s "${CLUSTER_CONFIG_FILE}" ]; then
-          echo "Info: Cluster configuration defined"
-          echo "CLUSTER_CONFIG_FILE=${CLUSTER_CONFIG_FILE}" >> $GITHUB_ENV
-        else
-          echo "Error: No cluster configuration defined"
-          exit 1
-        fi
-
-    - name: Cluster config JSON to variables
-      uses: ./.github/actions/json-to-variables
-      if: ${{ env.CLUSTER_CUSTOM_CONFIGURED != 'true' }}
-      with:
-        filename: ${{ env.CLUSTER_CONFIG_FILE }}
-        prefix: 'e2e'
-
     - id: connect-cluster
       name: Connect to cluster
       shell: bash
-      if: ${{ env.CLUSTER_CUSTOM_CONFIGURED != 'true' }}
       run: |
-        echo "::add-mask::${{ env.e2e_kube-config-data }}"
-        echo "::add-mask::${{ env.e2e_kube-admin-user-ctx }}"
-        echo "::add-mask::${{ env.e2e_kube-user-ctx }}"
-        echo "::add-mask::${{ env.e2e_image-registry-pull-host }}"
-        echo "::add-mask::${{ env.e2e_image-registry-push-host }}"
-        echo "::add-mask::${{ env.e2e_image-registry-user }}"
-        echo "::add-mask::${{ env.e2e_image-registry-token }}"
-        echo "::add-mask::${{ env.e2e_image-namespace }}"
-        echo "::add-mask::${{ env.e2e_catalog-source-namespace }}"
-
-        if [ -z "${{ env.e2e_kube-config-data }}" ]; then
-          echo "Error: kube config data property cannot be found"
-          exit 1
-        fi
-
-        if [ -z "${{ env.e2e_kube-admin-user-ctx }}" ]; then
-          echo "Error: kube admin context property cannot be found"
-          exit 1
-        fi
-
-        if [ -z "${{ env.e2e_kube-user-ctx }}" ]; then
-          echo "Error: kube user context property cannot be found"
-          exit 1
-        fi
-
-        if [ -z "${{ env.e2e_image-registry-pull-host }}" ]; then
-          echo "Error: image registry pull host property cannot be found"
-          exit 1
-        fi
-
-        if [ -z "${{ env.e2e_image-registry-push-host }}" ]; then
-          echo "Error: image registry build host property cannot be found"
-          exit 1
-        fi
-
-        if [ -n "${{ env.e2e_image-registry-user }}" ] && [ -n "${{ env.e2e_image-registry-token }}" ]; then
-          echo "Secured registry in use so login with docker"
-          docker login \
-            -u "${{ env.e2e_image-registry-user }}" \
-            -p "${{ env.e2e_image-registry-token }}" \
-            "${{ env.e2e_image-registry-push-host }}"
-        fi
-
-        # Copy the kube config to the correct location for kubectl
-        mkdir -p $HOME/.kube
-        echo -n "${{ env.e2e_kube-config-data }}" | base64 -d > ${HOME}/.kube/config
-        if [ ! -f ${HOME}/.kube/config ]; then
-          echo "Error: kube config file not created correctly"
-          exit 1
-        fi
-
-        set -e
-        kubectl config use-context "${{ env.e2e_kube-admin-user-ctx }}"
-        if [ $? != 0 ]; then
-          echo "Error: Failed to select kube admin context. Is the config and context correct?"
-          exit 1
-        fi
-        set +e
-
-    - id: info
-      name: Info
-      shell: bash
-      if: ${{ env.CLUSTER_CUSTOM_CONFIGURED != 'true' }}
-      run: |
-        kubectl describe nodes
+        ./.github/actions/kamel-config-cluster-custom/connect-cluster.sh \
+          -c "${{ inputs.cluster-config-data }}" \
+          -k "${{ inputs.cluster-kube-config-data }}"
 
     - id: configure-developer-user
       name: Configure Developer User
       shell: bash
-      if: ${{ env.CLUSTER_CUSTOM_CONFIGURED != 'true' }}
       run: |
         # Aggregate pod eviction permission to the default admin role
         cat <<EOF | kubectl apply -f -
@@ -197,36 +96,30 @@ runs:
         EOF
 
         # Set the context to the user
-        kubectl config use-context "${{ env.e2e_kube-user-ctx }}"
-
-    - id: extract-config
-      shell: bash
-      if: ${{ env.CLUSTER_CUSTOM_CONFIGURED != 'true' }}
-      run: |
-        echo "CLUSTER_IMAGE_REGISTRY_PUSH_HOST=${{ env.e2e_image-registry-push-host }}" >> $GITHUB_ENV
-        echo "CLUSTER_IMAGE_REGISTRY_PULL_HOST=${{ env.e2e_image-registry-pull-host }}" >> $GITHUB_ENV
-        echo "CLUSTER_IMAGE_REGISTRY_INSECURE=${{ env.e2e_image-registry-insecure }}" >> $GITHUB_ENV
-        echo "CLUSTER_CATALOG_SOURCE_NAMESPACE=${{ env.e2e_catalog-source-namespace }}" >> $GITHUB_ENV
-
-        #
-        # Export the image namespace if defined in the cluster config
-        #
-        if [ -n "${{ env.e2e_image-namespace }}" ]; then
-          echo "CLUSTER_IMAGE_NAMESPACE=${{ env.e2e_image-namespace }}" >> $GITHUB_ENV
-        fi
-
-        #
-        # Export the context used for admin and user
-        #
-        echo "CLUSTER_KUBE_ADMIN_USER_CTX=${{ env.e2e_kube-admin-user-ctx }}" >> $GITHUB_ENV
-        echo "CLUSTER_KUBE_USER_CTX=${{ env.e2e_kube-user-ctx }}" >> $GITHUB_ENV
-
-        #
-        # Export the flag for olm capability
-        #
-        echo "CLUSTER_HAS_OLM=${{ env.e2e_has-olm }}" >> $GITHUB_ENV
-
-        #
-        # Avoid configuring the cluster repeatedly
-        #
-        echo "CLUSTER_CUSTOM_CONFIGURED=true" >> $GITHUB_ENV
+        kubectl config use-context ${{ steps.connect-cluster.outputs.cluster-kube-user-ctx }}
+
+outputs:
+  cluster-image-registry-push-host:
+    description: "The image registry to which to push images"
+    value: ${{ steps.connect-cluster.outputs.cluster-image-registry-push-host }}
+  cluster-image-registry-pull-host:
+    description: "The image registry from which to pull images"
+    value: ${{ steps.connect-cluster.outputs.cluster-image-registry-pull-host }}
+  cluster-image-registry-insecure:
+    description: "Whether the pull registry is insecure"
+    value: ${{ steps.connect-cluster.outputs.cluster-image-registry-insecure }}
+  cluster-catalog-source-namespace:
+    description: "The namespace in which to install the OLM catalog source"
+    value: ${{ steps.connect-cluster.outputs.cluster-catalog-source-namespace }}
+  cluster-image-namespace:
+    description: "The namespace to install the camel-k images"
+    value: ${{ steps.connect-cluster.outputs.cluster-image-namespace }}
+  cluster-kube-admin-user-ctx:
+    description: "The context of the kube admin user"
+    value: ${{ steps.connect-cluster.outputs.cluster-kube-admin-user-ctx }}
+  cluster-kube-user-ctx:
+    description: "The context of the kube user"
+    value: ${{ steps.connect-cluster.outputs.cluster-kube-user-ctx }}
+  cluster-has-olm:
+    description: "Does the cluster have OLM"
+    value: ${{ steps.connect-cluster.outputs.cluster-has-olm }}
diff --git a/.github/actions/kamel-config-cluster-custom/connect-cluster.sh b/.github/actions/kamel-config-cluster-custom/connect-cluster.sh
new file mode 100755
index 0000000..8f6b087
--- /dev/null
+++ b/.github/actions/kamel-config-cluster-custom/connect-cluster.sh
@@ -0,0 +1,142 @@
+#!/bin/bash
+
+# ---------------------------------------------------------------------------
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ---------------------------------------------------------------------------
+
+####
+#
+# Configures access to the cluster
+#
+####
+
+set -e
+
+while getopts ":c:k:" opt; do
+  case "${opt}" in
+    c)
+      CLUSTER_CONFIG_DATA=${OPTARG}
+      ;;
+    k)
+      KUBE_CONFIG_DATA=${OPTARG}
+      ;;
+    :)
+      echo "ERROR: Option -$OPTARG requires an argument"
+      exit 1
+      ;;
+    \?)
+      echo "ERROR: Invalid option -$OPTARG"
+      exit 1
+      ;;
+  esac
+done
+shift $((OPTIND-1))
+
+has_property() {
+  if echo "${CLUSTER_CONFIG_DATA}" | grep ${1} &> /dev/null; then
+    echo 0
+  else
+    echo 1
+  fi
+}
+
+get_property() {
+  VAR=$(echo "${CLUSTER_CONFIG_DATA}" | grep ${1})
+  echo ${VAR#*=}
+}
+
+if [ -z "${KUBE_CONFIG_DATA}" ]; then
+  echo "Error: kube config data property cannot be found"
+  exit 1
+fi
+
+if [ ! $(has_property kube-admin-user-ctx) ]; then
+  echo "Error: kube admin context property cannot be found"
+  exit 1
+fi
+
+if [ ! $(has_property kube-user-ctx) ]; then
+  echo "Error: kube user context property cannot be found"
+  exit 1
+fi
+
+if [ ! $(has_property image-registry-pull-host) ]; then
+  echo "Error: image registry pull host property cannot be found"
+  exit 1
+fi
+
+if [ ! $(has_property image-registry-push-host) ]; then
+  echo "Error: image registry build host property cannot be found"
+  exit 1
+fi
+
+echo "::set-output name=cluster-image-registry-push-host::$(get_property image-registry-push-host)"
+echo "::set-output name=cluster-image-registry-pull-host::$(get_property image-registry-pull-host)"
+echo "::set-output name=cluster-image-registry-insecure::$(get_property image-registry-insecure)"
+echo "::set-output name=cluster-catalog-source-namespace::$(get_property catalog-source-namespace)"
+
+#
+# Export the image namespace if defined in the cluster config
+#
+if [ $(has_property image-namespace) ]; then
+  echo "::set-output name=cluster-image-namespace::$(get_property image-namespace)"
+fi
+
+#
+# Export the context used for admin and user
+#
+echo "::set-output name=cluster-kube-admin-user-ctx::$(get_property kube-admin-user-ctx)"
+echo "::set-output name=cluster-kube-user-ctx::$(get_property kube-user-ctx)"
+
+#
+# Keep values private in the log
+#
+echo "::add-mask::$(get_property image-registry-push-host)"
+echo "::add-mask::$(get_property image-registry-pull-host)"
+echo "::add-mask::$(get_property kube-admin-user-ctx)"
+echo "::add-mask::$(get_property kube-user-ctx)"
+
+#
+# Export the flag for olm capability
+#
+echo "::set-output name=cluster-has-olm::$(get_property has-olm)"
+
+#
+# Login to docker if registry is externally secured
+#
+if [ $(has_property image-registry-user) ] && [ $(has_property image-registry-token) ]; then
+  echo "Secured registry in use so login with docker"
+  docker login \
+    -u $(get_property image-registry-user) \
+    -p $(get_property image-registry-token) \
+    $(get_property image-registry-push-host)
+fi
+
+# Copy the kube config to the correct location for kubectl
+mkdir -p $HOME/.kube
+echo -n "${KUBE_CONFIG_DATA}" | base64 -d > ${HOME}/.kube/config
+if [ ! -f ${HOME}/.kube/config ]; then
+  echo "Error: kube config file not created correctly"
+  exit 1
+fi
+
+set -e
+kubectl config use-context $(get_property kube-admin-user-ctx)
+if [ $? != 0 ]; then
+  echo "Error: Failed to select kube admin context. Is the config and context correct?"
+  exit 1
+fi
+set +e
diff --git a/.github/actions/kamel-config-cluster-kind/action.yml b/.github/actions/kamel-config-cluster-kind/action.yml
index e680394..3034ee8 100644
--- a/.github/actions/kamel-config-cluster-kind/action.yml
+++ b/.github/actions/kamel-config-cluster-kind/action.yml
@@ -37,28 +37,35 @@ runs:
         kubectl cluster-info
         kubectl describe nodes
 
-    - id: extract-config
-      shell: bash
-      if: ${{ env.CLUSTER_KIND_CONFIGURED != 'true' }}
-      run: |
-        # Kind has the same interface for both pushing and pulling images in its registry
-        echo "CLUSTER_IMAGE_REGISTRY_PUSH_HOST=${{ env.KIND_REGISTRY }}" >> $GITHUB_ENV
-        echo "CLUSTER_IMAGE_REGISTRY_PULL_HOST=${{ env.KIND_REGISTRY }}" >> $GITHUB_ENV
-        echo "CLUSTER_IMAGE_REGISTRY_INSECURE=true" >> $GITHUB_ENV
-
         #
-        # Export the context used for admin and user
-        # Since kind has no rbac switched on then these can be the same
+        # Avoid bringing up the cluster repeatedly
         #
-        echo "CLUSTER_KUBE_ADMIN_USER_CTX=$(kubectl config current-context)" >> $GITHUB_ENV
-        echo "CLUSTER_KUBE_USER_CTX=$(kubectl config current-context)" >> $GITHUB_ENV
+        echo "CLUSTER_KIND_CONFIGURED=true" >> $GITHUB_ENV
 
-        #
-        # Export the flag for olm capability
-        #
-        echo "CLUSTER_HAS_OLM=false" >> $GITHUB_ENV
+    - id: extract-config
+      name: Output the config
+      shell: bash
+      run: ./.github/actions/kamel-config-cluster-kind/extract-config.sh
 
-        #
-        # Avoid configuring the cluster repeatedly
-        #
-        echo "CLUSTER_KIND_CONFIGURED=true" >> $GITHUB_ENV
+outputs:
+  cluster-image-registry-push-host:
+    description: "The image registry to which to push images"
+    value: ${{ steps.extract-config.outputs.cluster-image-registry-push-host }}
+  cluster-image-registry-pull-host:
+    description: "The image registry from which to pull images"
+    value: ${{ steps.extract-config.outputs.cluster-image-registry-pull-host }}
+  cluster-image-registry-insecure:
+    description: "Whether the pull registry is insecure"
+    value: ${{ steps.extract-config.outputs.cluster-image-registry-insecure }}
+  cluster-image-namespace:
+    description: "The namespace to install the camel-k images"
+    value: ${{ steps.extract-config.outputs.cluster-image-namespace }}
+  cluster-kube-admin-user-ctx:
+    description: "The context of the kube admin user"
+    value: ${{ steps.extract-config.outputs.cluster-kube-admin-user-ctx }}
+  cluster-kube-user-ctx:
+    description: "The context of the kube user"
+    value: ${{ steps.extract-config.outputs.cluster-kube-user-ctx }}
+  cluster-has-olm:
+    description: "Does the cluster have OLM"
+    value: ${{ steps.extract-config.outputs.cluster-has-olm }}
diff --git a/.github/actions/kamel-config-cluster-kind/extract-config.sh b/.github/actions/kamel-config-cluster-kind/extract-config.sh
new file mode 100755
index 0000000..69b4924
--- /dev/null
+++ b/.github/actions/kamel-config-cluster-kind/extract-config.sh
@@ -0,0 +1,51 @@
+#!/bin/bash
+
+# ---------------------------------------------------------------------------
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ---------------------------------------------------------------------------
+
+####
+#
+# Outputs the kind config to output variables
+#
+####
+
+set -e
+
+# Kind has the same interface for both pushing and pulling images in its registry
+echo "::set-output name=cluster-image-registry-push-host::${KIND_REGISTRY}"
+echo "::set-output name=cluster-image-registry-pull-host::${KIND_REGISTRY}"
+echo "::set-output name=cluster-image-registry-insecure::$(echo true)"
+
+#
+# Export the context used for admin and user
+# Since kind has no rbac switched on then these can be the same
+#
+echo "::set-output name=cluster-kube-admin-user-ctx::$(kubectl config current-context)"
+echo "::set-output name=cluster-kube-user-ctx::$(kubectl config current-context)"
+
+# Set the image namespace
+echo "::set-output name=cluster-image-namespace::$(echo apache)"
+
+#
+# cluster-catalog-source-namespace intentionally blank as OLM not routinely installed
+# upgrade tests will install their own catalog-source
+#
+
+#
+# Export the flag for olm capability
+#
+echo "::set-output name=cluster-has-olm::$(echo false)"
diff --git a/.github/actions/kamel-config-cluster-ocp3/action.yml b/.github/actions/kamel-config-cluster-ocp3/action.yml
index 2be4ca9..c6bdf96 100644
--- a/.github/actions/kamel-config-cluster-ocp3/action.yml
+++ b/.github/actions/kamel-config-cluster-ocp3/action.yml
@@ -67,9 +67,6 @@ runs:
         oc cluster up --public-hostname=$IP_ADDR --enable=persistent-volumes,registry,router
         oc login -u system:admin
 
-        # Export the context used for admin login
-        echo "CLUSTER_KUBE_ADMIN_USER_CTX=$(oc config current-context)" >> $GITHUB_ENV
-
         # Wait until we have a ready node in openshift
         TIMEOUT=0
         TIMEOUT_COUNT=60
@@ -89,6 +86,11 @@ runs:
 
         echo "openshift is deployed and reachable"
 
+        #
+        # Avoid configuring the cluster repeatedly
+        #
+        echo "CLUSTER_OCP3_CONFIGURED=true" >> $GITHUB_ENV
+
     - id: info
       name: Info
       shell: bash
@@ -99,8 +101,12 @@ runs:
     - id: configure-developer-user
       name: Configure Developer User
       shell: bash
-      if: ${{ env.CLUSTER_OCP3_CONFIGURED != 'true' }}
       run: |
+        oc login -u system:admin
+
+        # Export the context used for admin login
+        echo "::set-output name=cluster-kube-admin-user-ctx::$(oc config current-context)"
+
         # Aggregate pod eviction permission to the default admin role
         cat <<EOF | oc apply -f -
         kind: ClusterRole
@@ -186,19 +192,38 @@ runs:
         oc login -u developer
 
         # Export the context used for developer login
-        echo "CLUSTER_KUBE_USER_CTX=$(oc config current-context)" >> $GITHUB_ENV
+        echo "::set-output name=cluster-kube-user-ctx::$(oc config current-context)"
 
-
-    - id: extract-kube-config
+    - id: extract-config
       shell: bash
       if: ${{ env.CLUSTER_OCP3_CONFIGURED != 'true' }}
       run: |
-        echo "CLUSTER_IMAGE_REGISTRY_PUSH_HOST=" >> $GITHUB_ENV
-        echo "CLUSTER_IMAGE_REGISTRY_PULL_HOST=" >> $GITHUB_ENV
-        echo "CLUSTER_IMAGE_REGISTRY_INSECURE=false" >> $GITHUB_ENV
-        echo "CLUSTER_HAS_OLM=true" >> $GITHUB_ENV
-
-        #
-        # Avoid configuring the cluster repeatedly
-        #
-        echo "CLUSTER_OCP3_CONFIGURED=true" >> $GITHUB_ENV
+        echo "::set-output name=cluster-image-registry-pull-host::"
+        echo "::set-output name=cluster-image-registry-pull-host::"
+        echo "::set-output name=cluster-image-registry-insecure::$(echo true)"
+        echo "::set-output name=cluster-has-olm::$(echo false)"
+        echo "::set-output name=cluster-image-namespace::$(echo apache)"
+        /* cluster-catalog-source-namespace intentionally blank due to using straight docker */
+
+outputs:
+  cluster-image-registry-push-host:
+    description: "The image registry to which to push images"
+    value: ${{ steps.extract-config.outputs.cluster-image-registry-push-host }}
+  cluster-image-registry-pull-host:
+    description: "The image registry from which to pull images"
+    value: ${{ steps.extract-config.outputs.cluster-image-registry-pull-host }}
+  cluster-image-registry-insecure:
+    description: "Whether the pull registry is insecure"
+    value: ${{ steps.extract-config.outputs.cluster-image-registry-insecure }}
+  cluster-image-namespace:
+    description: "The namespace to install the camel-k images"
+    value: ${{ steps.extract-config.outputs.cluster-image-namespace }}
+  cluster-kube-admin-user-ctx:
+    description: "The context of the kube admin user"
+    value: ${{ steps.configure-developer-user.outputs.cluster-kube-admin-user-ctx }}
+  cluster-kube-user-ctx:
+    description: "The context of the kube user"
+    value: ${{ steps.configure-developer-user.outputs.cluster-kube-user-ctx }}
+  cluster-has-olm:
+    description: "Does the cluster have OLM"
+    value: ${{ steps.extract-config.outputs.cluster-has-olm }}
diff --git a/.github/actions/kamel-config-cluster/action.yaml b/.github/actions/kamel-config-cluster/action.yaml
index 7e87850..90a5ae7 100644
--- a/.github/actions/kamel-config-cluster/action.yaml
+++ b/.github/actions/kamel-config-cluster/action.yaml
@@ -24,7 +24,10 @@ inputs:
     required: true
     default: 'kind'
   cluster-config-data:
-    description: 'The JSON configuration of the cluster - required for custom cluster type only'
+    description: 'Variables for the cluster configuration - required for custom cluster type only'
+    required: false
+  cluster-kube-config-data:
+    description: 'Base16 encoded kube config - required for custom cluster type only'
     required: false
   require-olm:
     description: 'If OLM is not available by default ensure that it is installed'
@@ -62,6 +65,7 @@ runs:
       if: ${{ env.CLUSTER_TYPE == 'custom' }}
       with:
         cluster-config-data: ${{ inputs.cluster-config-data }}
+        cluster-kube-config-data: ${{ inputs.cluster-kube-config-data }}
 
     - id: execute-invalid
       name: Execute Invalid Cluster
@@ -71,14 +75,45 @@ runs:
         echo "Error: Unrecognised cluster request for type of cluster. Should be kind, ocp3 or custom."
         exit 1
 
-    - id: image-namespace
+    - id: cluster-config
+      name: Extract the config from the cluster
       shell: bash
-      env:
-        DEFAULT_IMAGE_NAMESPACE: 'apache'
       run: |
-        if [ -z "${{ env.CLUSTER_IMAGE_NAMESPACE }}" ]; then
-          echo "CLUSTER_IMAGE_NAMESPACE=apache" >> $GITHUB_ENV
-        fi
+        case ${{ env.CLUSTER_TYPE }} in
+        kind)
+          # Does not require cluster-catalog-source-namespace
+          ./.github/actions/kamel-config-cluster/output-config.sh \
+            -a "${{ steps.execute-kind.outputs.cluster-kube-admin-user-ctx }}" \
+            -n "${{ steps.execute-kind.outputs.cluster-image-namespace }}" \
+            -o "${{ steps.execute-kind.outputs.cluster-has-olm }}" \
+            -p "${{ steps.execute-kind.outputs.cluster-image-registry-push-host }}" \
+            -q "${{ steps.execute-kind.outputs.cluster-image-registry-pull-host }}" \
+            -s "${{ steps.execute-kind.outputs.cluster-image-registry-insecure }}" \
+            -u "${{ steps.execute-kind.outputs.cluster-kube-user-ctx }}"
+            ;;
+        custom)
+          ./.github/actions/kamel-config-cluster/output-config.sh \
+            -a "${{ steps.execute-custom.outputs.cluster-kube-admin-user-ctx }}" \
+            -c "${{ steps.execute-custom.outputs.cluster-catalog-source-namespace }}" \
+            -n "${{ steps.execute-custom.outputs.cluster-image-namespace }}" \
+            -o "${{ steps.execute-custom.outputs.cluster-has-olm }}" \
+            -p "${{ steps.execute-custom.outputs.cluster-image-registry-push-host }}" \
+            -q "${{ steps.execute-custom.outputs.cluster-image-registry-pull-host }}" \
+            -s "${{ steps.execute-custom.outputs.cluster-image-registry-insecure }}" \
+            -u "${{ steps.execute-custom.outputs.cluster-kube-user-ctx }}"
+            ;;
+        ocp3)
+          # Does not require cluster-catalog-source-namespace
+          ./.github/actions/kamel-config-cluster/output-config.sh \
+            -a "${{ steps.execute-ocp3.outputs.cluster-kube-admin-user-ctx }}" \
+            -n "${{ steps.execute-ocp3.outputs.cluster-image-namespace }}" \
+            -o "${{ steps.execute-ocp3.outputs.cluster-has-olm }}" \
+            -p "${{ steps.execute-ocp3.outputs.cluster-image-registry-push-host }}" \
+            -q "${{ steps.execute-ocp3.outputs.cluster-image-registry-pull-host }}" \
+            -s "${{ steps.execute-ocp3.outputs.cluster-image-registry-insecure }}" \
+            -u "${{ steps.execute-ocp3.outputs.cluster-kube-user-ctx }}"
+            ;;
+        esac
 
       #
       # Install opm if required
@@ -100,16 +135,17 @@ runs:
       name: Install OLM
       shell: bash
       run: |
-        if [ "${{ env.CLUSTER_HAS_OLM }}" == "true" ]; then
+        if [ "${{ steps.cluster-config.outputs.cluster-has-olm }}" == "true" ]; then
           # OLM already installed by default
           echo "OLM already available in cluster"
+          echo "::set-output name=cluster-has-olm::${{ steps.cluster-config.outputs.cluster-has-olm }}"
           exit 0
         fi
 
         if [ "${{ inputs.require-olm }}" != "true" ]; then
           # OLM not explicitly requested
           echo "OLM not explicity required for testing"
-          echo "CLUSTER_HAS_OLM=false" >> $GITHUB_ENV
+          echo "::set-output name=cluster-has-olm::$(echo false)"
           exit 0
         fi
 
@@ -123,7 +159,7 @@ runs:
         # Need to be admin so switch to the admin context
         #
         echo "Change to kube admin context"
-        kubectl config use-context "${{ env.CLUSTER_KUBE_ADMIN_USER_CTX }}"
+        kubectl config use-context "${{ steps.cluster-config.outputs.cluster-kube-admin-user-ctx }}"
 
         set +e
         echo "Check if OLM is already installed"
@@ -144,5 +180,31 @@ runs:
         echo "Return to original kube context"
         kubectl config use-context "${ctx}"
 
+        echo "::set-output name=cluster-has-olm::$(echo true)"
         echo "Complete"
-        echo "CLUSTER_HAS_OLM=true" >> $GITHUB_ENV
+
+outputs:
+  cluster-image-registry-push-host:
+    description: "The image registry to which to push images"
+    value: ${{ steps.cluster-config.outputs.cluster-image-registry-push-host }}
+  cluster-image-registry-pull-host:
+    description: "The image registry from which to pull images"
+    value: ${{ steps.cluster-config.outputs.cluster-image-registry-pull-host }}
+  cluster-image-registry-insecure:
+    description: "Whether the pull registry is insecure"
+    value: ${{ steps.cluster-config.outputs.cluster-image-registry-insecure }}
+  cluster-catalog-source-namespace:
+    description: "The namespace in which to install the OLM catalog source"
+    value: ${{ steps.cluster-config.outputs.cluster-catalog-source-namespace }}
+  cluster-image-namespace:
+    description: "The namespace to install the camel-k images"
+    value: ${{ steps.cluster-config.outputs.cluster-image-namespace }}
+  cluster-kube-admin-user-ctx:
+    description: "The context of the kube admin user"
+    value: ${{ steps.cluster-config.outputs.cluster-kube-admin-user-ctx }}
+  cluster-kube-user-ctx:
+    description: "The context of the kube user"
+    value: ${{ steps.cluster-config.outputs.cluster-kube-user-ctx }}
+  cluster-has-olm:
+    description: "Does the cluster have OLM"
+    value: ${{ steps.install-olm.outputs.cluster-has-olm }}
diff --git a/.github/actions/kamel-config-cluster/output-config.sh b/.github/actions/kamel-config-cluster/output-config.sh
new file mode 100755
index 0000000..99e9d86
--- /dev/null
+++ b/.github/actions/kamel-config-cluster/output-config.sh
@@ -0,0 +1,81 @@
+#!/bin/bash
+
+# ---------------------------------------------------------------------------
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ---------------------------------------------------------------------------
+
+####
+#
+# Outputs the config to cluster output variables
+#
+####
+
+set -e
+
+while getopts ":a:c:n:o:p:q:s:u:" opt; do
+  case "${opt}" in
+    a)
+      ADMIN_USER_CTX=${OPTARG}
+      ;;
+    c)
+      CATALOG_SOURCE_NAMESPACE=${OPTARG}
+      ;;
+    n)
+      IMAGE_NAMESPACE=${OPTARG}
+      ;;
+    o)
+      HAS_OLM=${OPTARG}
+      ;;
+    p)
+      PUSH_HOST=${OPTARG}
+      ;;
+    q)
+      PULL_HOST=${OPTARG}
+      ;;
+    s)
+      INSECURE=${OPTARG}
+      ;;
+    u)
+      USER_CTX=${OPTARG}
+      ;;
+    :)
+      echo "ERROR: Option -$OPTARG requires an argument"
+      exit 1
+      ;;
+    \?)
+      echo "ERROR: Invalid option -$OPTARG"
+      exit 1
+      ;;
+  esac
+done
+shift $((OPTIND-1))
+
+echo "::set-output name=cluster-image-registry-push-host::${PUSH_HOST}"
+echo "::set-output name=cluster-image-registry-pull-host::${PULL_HOST}"
+echo "::set-output name=cluster-image-registry-insecure::${INSECURE}"
+echo "::set-output name=cluster-kube-admin-user-ctx::${ADMIN_USER_CTX}"
+echo "::set-output name=cluster-kube-user-ctx::${USER_CTX}"
+
+# Set the image namespace
+echo "::set-output name=cluster-image-namespace::${IMAGE_NAMESPACE}"
+
+# Set the catalog source namespace
+echo "::set-output name=cluster-catalog-source-namespace::${CATALOG_SOURCE_NAMESPACE}"
+
+#
+# Export the flag for olm capability
+#
+echo "::set-output name=cluster-has-olm::${HAS_OLM}"
diff --git a/.github/actions/kamel-prepare-env/action.yml b/.github/actions/kamel-prepare-env/action.yml
index 666ae87..45871e1 100644
--- a/.github/actions/kamel-prepare-env/action.yml
+++ b/.github/actions/kamel-prepare-env/action.yml
@@ -103,9 +103,6 @@ runs:
       shell: bash
       if: ${{ env.KAMEL_PREPARE_ENV != 'true' }}
       run : |
-
-        echo "::add-mask::${{ env.DEBUG_USE_EXISTING_IMAGE }}"
-
         #
         # Avoid preparing the environment repeatedly
         #
diff --git a/.github/workflows/builder.yml b/.github/workflows/builder.yml
index bd77998..fd11628 100644
--- a/.github/workflows/builder.yml
+++ b/.github/workflows/builder.yml
@@ -66,4 +66,5 @@ jobs:
       uses: ./.github/actions/e2e-builder
       with:
         cluster-config-data: ${{ secrets.E2E_CLUSTER_CONFIG }}
+        cluster-kube-config-data: ${{ secrets.E2E_KUBE_CONFIG }}
         publisher: ${{ matrix.publisher }}
diff --git a/.github/workflows/knative.yml b/.github/workflows/knative.yml
index d3cdfd7..6092fd4 100644
--- a/.github/workflows/knative.yml
+++ b/.github/workflows/knative.yml
@@ -62,6 +62,7 @@ jobs:
       uses: ./.github/actions/e2e-knative
       with:
         cluster-config-data: ${{ secrets.E2E_CLUSTER_CONFIG }}
+        cluster-kube-config-data: ${{ secrets.E2E_KUBE_CONFIG }}
 
   yaks:
     runs-on: ubuntu-20.04
@@ -76,3 +77,4 @@ jobs:
       uses: ./.github/actions/e2e-knative-yaks
       with:
         cluster-config-data: ${{ secrets.E2E_CLUSTER_CONFIG }}
+        cluster-kube-config-data: ${{ secrets.E2E_KUBE_CONFIG }}
diff --git a/.github/workflows/kubernetes.yml b/.github/workflows/kubernetes.yml
index 55ce811..bcb0650 100644
--- a/.github/workflows/kubernetes.yml
+++ b/.github/workflows/kubernetes.yml
@@ -63,3 +63,4 @@ jobs:
       uses: ./.github/actions/e2e-kubernetes
       with:
         cluster-config-data: ${{ secrets.E2E_CLUSTER_CONFIG }}
+        cluster-kube-config-data: ${{ secrets.E2E_KUBE_CONFIG }}
diff --git a/.github/workflows/openshift.yml b/.github/workflows/openshift.yml
index 0470dbb..dff8a72 100644
--- a/.github/workflows/openshift.yml
+++ b/.github/workflows/openshift.yml
@@ -63,26 +63,32 @@ jobs:
       name: Prepare Test Environment
       uses: ./.github/actions/kamel-prepare-env
 
-    - id: configure-platform
+    - id: config-cluster
       name: Configure Platform
       uses: ./.github/actions/kamel-config-cluster
       with:
         cluster-type: 'ocp3'
 
-    - id: build-kamel-binary
-      name: Build Kamel Binary
-      uses: ./.github/actions/kamel-build-binary
+    - id: build-kamel
+      name: Build Kamel
+      uses: ./.github/actions/kamel-build
+      with:
+        image-registry-push-host: ${{ steps.config-cluster.outputs.cluster-image-registry-push-host }}
+        image-registry-pull-host: ${{ steps.config-cluster.outputs.cluster-image-registry-pull-host }}
+        image-namespace: ${{ steps.config-cluster.outputs.cluster-image-namespace }}
+        # Builds the bundle if an OLM is available - depends on cluster being tested
+        build-bundle: ${{ steps.config-cluster.outputs.cluster-has-olm }}
+        # Can be empty and so catalog source will not be created
+        catalog-source-namespace: ${{ steps.config-cluster.outputs.cluster-catalog-source-namespace }}
 
-    - name: Install Kamel Cluster Setup
+    - id: install-kamel-cluster-setup
+      name: Install Kamel Cluster Setup
       uses: ./.github/actions/kamel-install-cluster-setup
       with:
-        kube-admin-user-ctx: ${{ steps.configure-platform.outputs.kube-admin-user-ctx }}
+        kube-admin-user-ctx: ${{ steps.config-cluster.outputs.cluster-kube-admin-user-ctx }}
 
     - name: Run IT
       run: |
-        # Make the Apache Snapshots or Apache Staging repository enabled by default
-        export KAMEL_INSTALL_MAVEN_REPOSITORIES=$(make get-staging-repo)
-
         # Then run integration tests
         make test-integration
         make test-builder
diff --git a/.github/workflows/upgrade.yml b/.github/workflows/upgrade.yml
index 7967dc0..fceb860 100644
--- a/.github/workflows/upgrade.yml
+++ b/.github/workflows/upgrade.yml
@@ -62,3 +62,4 @@ jobs:
       uses: ./.github/actions/e2e-upgrade
       with:
         cluster-config-data: ${{ secrets.E2E_CLUSTER_CONFIG }}
+        cluster-kube-config-data: ${{ secrets.E2E_KUBE_CONFIG }}
diff --git a/.gitmodules b/.gitmodules
index 237f21a..4643631 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -8,7 +8,3 @@
 	path = .github/actions/action-dotenv-to-setenv
         url = https://github.com/c-py/action-dotenv-to-setenv.git
 	branch = tags/v3
-[submodule ".github/actions/json-to-variables"]
-	path = .github/actions/json-to-variables
-	url = https://github.com/antifree/json-to-variables.git
-	branch = tags/v1.0.1
diff --git a/config/rbac/operator-role.yaml b/config/rbac/operator-role.yaml
index e505081..0941d6e 100644
--- a/config/rbac/operator-role.yaml
+++ b/config/rbac/operator-role.yaml
@@ -165,24 +165,3 @@ rules:
   - patch
   - update
   - watch
-- apiGroups:
-  - operators.coreos.com
-  resources:
-  - operatorgroups
-  - subscriptions
-  - installplans
-  verbs:
-  - create
-  - delete
-  - update
-  - get
-  - list
-  - watch
-- apiGroups:
-  - operators.coreos.com
-  resources:
-  - clusterserviceversions
-  verbs:
-  - get
-  - list
-  - watch