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:42 UTC

[camel-k] 31/40: Create pre-flight action and adds to cleanup action

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 fa8253061577f0393d6337266d93d6cbbf4d155f
Author: phantomjinx <p....@phantomjinx.co.uk>
AuthorDate: Fri Jan 7 19:29:44 2022 +0000

    Create pre-flight action and adds to cleanup action
    
    * Pre-flight
     * Adds action to execute a pre-flight test to ensure the kamel operator
       is the correct version as that built by the workflow
    
    * Cleanup
     * Adds function to clean up any image streams left around by pushing
       images to exposed cluster registries
---
 .github/actions/e2e-kubernetes/action.yml          |  12 ++
 .github/actions/kamel-cleanup/action.yaml          |   6 +-
 .github/actions/kamel-cleanup/cleanup.sh           |  19 ++-
 .github/actions/kamel-preflight-test/action.yml    |  55 +++++++
 .../actions/kamel-preflight-test/preflight-test.sh | 180 +++++++++++++++++++++
 5 files changed, 270 insertions(+), 2 deletions(-)

diff --git a/.github/actions/e2e-kubernetes/action.yml b/.github/actions/e2e-kubernetes/action.yml
index 2d004dc..ad5f6f5 100644
--- a/.github/actions/e2e-kubernetes/action.yml
+++ b/.github/actions/e2e-kubernetes/action.yml
@@ -60,6 +60,17 @@ runs:
     with:
       kube-admin-user-ctx: ${{ steps.config-cluster.outputs.cluster-kube-admin-user-ctx }}
 
+  - id: preflight-test
+    name: Preflight Check Test
+    uses: ./.github/actions/kamel-preflight-test
+    with:
+      build-catalog-source: ${{ steps.build-kamel.outputs.build-bundle-catalog-source-name }}
+      image-namespace: ${{ steps.config-cluster.outputs.cluster-image-namespace }}
+      image-registry-host: ${{ steps.config-cluster.outputs.cluster-image-registry-pull-host }}
+      image-name: ${{ steps.build-kamel.outputs.build-binary-local-image-name }}
+      image-registry-insecure: ${{steps.config-cluster.outputs.cluster-image-registry-insecure }}
+      image-version: ${{ steps.build-kamel.outputs.build-binary-local-image-version }}
+
   - id: run-it
     name: Run IT
     shell: bash
@@ -78,3 +89,4 @@ runs:
     if: ${{ always() }}
     with:
       build-bundle-catalog-source: ${{ steps.build-kamel.outputs.build-bundle-catalog-source-name }}
+      image-namespace: ${{ steps.config-cluster.outputs.cluster-image-namespace }}
diff --git a/.github/actions/kamel-cleanup/action.yaml b/.github/actions/kamel-cleanup/action.yaml
index 2f970a5..cace15a 100644
--- a/.github/actions/kamel-cleanup/action.yaml
+++ b/.github/actions/kamel-cleanup/action.yaml
@@ -22,6 +22,9 @@ inputs:
   build-bundle-catalog-source:
     description: "Name of the catalog source for the build bundle image"
     required: true
+  image-namespace:
+    description: "Installed location of the images if resident on the cluster (only applies to clusters with partnered registries)"
+    required: false
 
 runs:
   using: "composite"
@@ -32,4 +35,5 @@ runs:
       if: ${{ always() }}
       run: |
         ./.github/actions/kamel-cleanup/cleanup.sh \
-          -c "${{ inputs.build-bundle-catalog-source-name }}"
+          -c "${{ inputs.build-bundle-catalog-source }}" \
+          -i "${{ inputs.image-namespace }}"
diff --git a/.github/actions/kamel-cleanup/cleanup.sh b/.github/actions/kamel-cleanup/cleanup.sh
index 03875dc..3a5b4aa 100755
--- a/.github/actions/kamel-cleanup/cleanup.sh
+++ b/.github/actions/kamel-cleanup/cleanup.sh
@@ -25,11 +25,14 @@
 
 set -e
 
-while getopts ":c:" opt; do
+while getopts ":c:i:" opt; do
   case "${opt}" in
     c)
       BUILD_CATALOG_SOURCE=${OPTARG}
       ;;
+    i)
+      IMAGE_NAMESPACE=${OPTARG}
+      ;;
     :)
       echo "ERROR: Option -$OPTARG requires an argument"
       exit 1
@@ -55,6 +58,19 @@ fi
 kubectl get crds | grep camel | awk '{print $1}' | xargs kubectl delete crd &> /dev/null
 set -e
 
+if [ -n "${IMAGE_NAMESPACE}" ]; then
+  imgstreams="camel-k camel-k-bundle camel-k-iib"
+  set +e
+  for cis in ${imgstreams}
+  do
+    if kubectl get is ${cis} -n ${IMAGE_NAMESPACE} &> /dev/null
+    then
+      kubectl delete is ${cis} -n ${IMAGE_NAMESPACE}
+    fi
+  done
+  set -e
+fi
+
 #
 # Remove Catalog Source
 #
@@ -63,6 +79,7 @@ if [ -z "${BUILD_CATALOG_SOURCE}" ]; then
   exit 0
 fi
 
+
 set +e
 CATALOG_NS=$(kubectl get catalogsource --all-namespaces | grep ${BUILD_CATALOG_SOURCE} | awk {'print $1'})
 for ns in ${CATALOG_NS}
diff --git a/.github/actions/kamel-preflight-test/action.yml b/.github/actions/kamel-preflight-test/action.yml
new file mode 100644
index 0000000..5cf1041
--- /dev/null
+++ b/.github/actions/kamel-preflight-test/action.yml
@@ -0,0 +1,55 @@
+# ---------------------------------------------------------------------------
+# 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.
+# ---------------------------------------------------------------------------
+
+name: kamel-preflight-test
+description: 'Does a preflight-test to check the operator can be installed correctly'
+
+inputs:
+  build-catalog-source:
+    description: "The name of the bundle catalog (only installed in the cluster if OLM is used)"
+    required: false
+  image-namespace:
+    description: 'Namespace in which the image is stored'
+    required: true
+  image-registry-host:
+    description: 'Location of image registry host'
+    required: true
+  image-name:
+    description: 'Reference of the camel-k image'
+    required: true
+  image-registry-insecure:
+    description: "Whether the registry is insecure"
+    required: true
+  image-version:
+    description: "Reference of the camel-k image version"
+    required: true
+
+runs:
+  using: "composite"
+
+  steps:
+  - id: preflight-test
+    name: Execute Preflight Test
+    shell: bash
+    run: |
+      ./.github/actions/kamel-preflight-test/preflight-test.sh \
+        -c "${{ inputs.build-catalog-source }}" \
+        -i "${{ inputs.image-namespace }}" \
+        -l "${{ inputs.image-registry-host }}" \
+        -n "${{ inputs.image-name }}" \
+        -s "${{ inputs.image-registry-insecure }}" \
+        -v "${{ inputs.image-version }}"
diff --git a/.github/actions/kamel-preflight-test/preflight-test.sh b/.github/actions/kamel-preflight-test/preflight-test.sh
new file mode 100755
index 0000000..4061d30
--- /dev/null
+++ b/.github/actions/kamel-preflight-test/preflight-test.sh
@@ -0,0 +1,180 @@
+#!/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.
+# ---------------------------------------------------------------------------
+
+####
+#
+# Execute the kubernetes tests
+#
+####
+
+set -e
+
+while getopts ":c:i:l:n:s:v:" opt; do
+  case "${opt}" in
+    c)
+      BUILD_CATALOG_SOURCE=${OPTARG}
+      ;;
+    i)
+      IMAGE_NAMESPACE=${OPTARG}
+      ;;
+    l)
+      REGISTRY_PULL_HOST=${OPTARG}
+      ;;
+    n)
+      IMAGE_NAME=${OPTARG}
+      ;;
+    s)
+      REGISTRY_INSECURE=${OPTARG}
+      ;;
+    v)
+      IMAGE_VERSION=${OPTARG}
+      ;;
+    :)
+      echo "ERROR: Option -$OPTARG requires an argument"
+      exit 1
+      ;;
+    \?)
+      echo "ERROR: Invalid option -$OPTARG"
+      exit 1
+      ;;
+  esac
+done
+shift $((OPTIND-1))
+
+if [ -z "${IMAGE_NAME}" ]; then
+  echo "Error: local-image-name not defined"
+  exit 1
+fi
+
+if [ -z "${IMAGE_VERSION}" ]; then
+  echo "Error: local-image-version not defined"
+  exit 1
+fi
+
+if [ -z "${IMAGE_NAMESPACE}" ]; then
+  echo "Error: image-namespace not defined"
+  exit 1
+fi
+
+if [ -z "${REGISTRY_PULL_HOST}" ]; then
+  echo "Error: image-registry-pull-host not defined"
+  exit 1
+fi
+
+if [ -z "${REGISTRY_INSECURE}" ]; then
+  echo "Error: image-registry-insecure not defined"
+  exit 1
+fi
+
+#
+# Create the preflight test namespace
+#
+NAMESPACE="preflight"
+set +e
+if kubectl get ns ${NAMESPACE} &> /dev/null
+then
+  kubectl delete ns ${NAMESPACE}
+fi
+set -e
+
+kubectl create namespace ${NAMESPACE}
+if [ $? != 0 ]; then
+  echo "Error: failed to create the ${NAMESPACE} namespace"
+  exit 1
+fi
+
+#trap "kubectl delete ns ${NAMESPACE} &> /dev/null" EXIT
+
+# Cluster environment
+export CUSTOM_IMAGE=${IMAGE_NAME}
+export CUSTOM_VERSION=${IMAGE_VERSION}
+
+#
+# If bundle has been built and installed then use it
+#
+has_olm="false"
+if [ -n "${BUILD_CATALOG_SOURCE}" ]; then
+  export KAMEL_INSTALL_OLM_SOURCE_NAMESPACE=${IMAGE_NAMESPACE}
+  export KAMEL_INSTALL_OLM_SOURCE=${BUILD_CATALOG_SOURCE}
+  has_olm="true"
+fi
+
+export KAMEL_INSTALL_MAVEN_REPOSITORIES=$(make get-staging-repo)
+export KAMEL_INSTALL_REGISTRY=${REGISTRY_PULL_HOST}
+export KAMEL_INSTALL_REGISTRY_INSECURE=${REGISTRY_INSECURE}
+export KAMEL_INSTALL_OPERATOR_IMAGE=${CUSTOM_IMAGE}:${CUSTOM_VERSION}
+
+# Will only have an effect if olm=false
+# since, for OLM, the csv determine the policy
+export KAMEL_INSTALL_OPERATOR_IMAGE_PULL_POLICY="Always"
+
+#
+# Install the operator
+#
+kamel install -n ${NAMESPACE} --olm=${has_olm}
+if [ $? != 0 ]; then
+  echo "Error: kamel install returned an error."
+  exit 1
+fi
+
+sleep 3
+
+#
+# Wait for the operator to be running
+#
+timeout=180
+i=1
+command="kubectl get pods -n ${NAMESPACE} 2> /dev/null | grep camel-k | grep Running &> /dev/null"
+
+until eval "${command}"
+do
+  ((i++))
+  if [ "${i}" -gt "${timeout}" ]; then
+    echo "kamel operator not successfully installed, aborting due to ${timeout}s timeout"
+    exit 1
+  fi
+
+  sleep 1
+done
+
+echo "Camel-K operator up and running"
+
+camel_operator=$(kubectl get pods -n ${NAMESPACE} | grep camel-k | awk '{print $1}')
+camel_op_version=$(kubectl logs ${camel_operator} -n ${NAMESPACE} | sed -n 's/.*"Camel K Operator Version: \(.*\)"}/\1/p')
+camel_op_commit=$(kubectl logs ${camel_operator} -n ${NAMESPACE} | sed -n 's/.*"Camel K Git Commit: \(.*\)"}/\1/p')
+
+src_commit=$(git rev-parse HEAD)
+
+#
+# Test whether the versions are the same
+#
+if [ "${camel_op_version}" != "${IMAGE_VERSION}" ]; then
+  echo "Preflight Test: Failure - Installed operator version (${camel_op_version} does not match expected version (${IMAGE_VERSION})"
+  exit 1
+fi
+
+#
+# Test whether the commit ids are the same
+#
+if [ "${camel_op_commit}" != "${src_commit}" ]; then
+  echo "Preflight Test: Failure - Installed operator commit id (${camel_op_commit}) does not match expected commit id (${src_commit})"
+  exit 1
+fi
+
+echo "Preflight Test: Success"