che-operator/build/scripts/oc-tests/oc-common.sh

102 lines
4.4 KiB
Bash

#!/bin/bash
#
# Copyright (c) 2019-2021 Red Hat, Inc.
# This program and the accompanying materials are made
# available under the terms of the Eclipse Public License 2.0
# which is available at https://www.eclipse.org/legal/epl-2.0/
#
# SPDX-License-Identifier: EPL-2.0
#
# Contributors:
# Red Hat, Inc. - initial API and implementation
#
export NAMESPACE="eclipse-che"
export ARTIFACTS_DIR=${ARTIFACT_DIR:-"/tmp/artifacts-che"}
export ECLIPSE_CHE_PACKAGE_NAME="eclipse-che"
export ECLIPSE_CHE_CATALOG_SOURCE_NAME="eclipse-che"
export ECLIPSE_CHE_SUBSCRIPTION_NAME="eclipse-che"
catchFinish() {
local RESULT=$?
# Collect all Eclipse Che logs
set +e && chectl server:logs -n $NAMESPACE -d $ARTIFACTS_DIR --telemetry off && set -e
[[ "${RESULT}" != "0" ]] && echo "[ERROR] Job failed." || echo "[INFO] Job completed successfully."
rm -rf ${OPERATOR_REPO}/tmp
exit ${RESULT}
}
waitForRemovedSubscription() {
while [[ $(oc get subscription -A -o json | jq -r '.items | .[] | select(.spec.name == "'$1'")') != "" ]]; do
sleep 5s
done
}
useCustomOperatorImageInCSV() {
local OPERATOR_IMAGE=$1
discoverEclipseCheSubscription
oc patch csv ${ECLIPSE_CHE_INSTALLED_CSV} -n ${ECLIPSE_CHE_SUBSCRIPTION_NAMESPACE} --type=json -p '[{"op": "replace", "path": "/spec/install/spec/deployments/0/spec/template/spec/containers/0/image", "value": "'${OPERATOR_IMAGE}'"}]'
}
getCheClusterCRFromInstalledCSV() {
discoverEclipseCheSubscription
oc get csv ${ECLIPSE_CHE_INSTALLED_CSV} -n ${ECLIPSE_CHE_SUBSCRIPTION_NAMESPACE} -o yaml | yq -r '.metadata.annotations["alm-examples"] | fromjson | .[] | select(.apiVersion == "org.eclipse.che/v2")'
}
getCheVersionFromInstalledCSV() {
discoverEclipseCheSubscription
oc get csv ${ECLIPSE_CHE_INSTALLED_CSV} -n ${ECLIPSE_CHE_SUBSCRIPTION_NAMESPACE} -o yaml | yq -r '.spec.install.spec.deployments[0].spec.template.spec.containers[0].env[] | select(.name == "CHE_VERSION") | .value'
}
discoverEclipseCheSubscription() {
ECLIPSE_CHE_SUBSCRIPTION_RECORD=$(oc get subscription -A -o json | jq -r '.items | .[] | select(.spec.name == "'${ECLIPSE_CHE_PACKAGE_NAME}'")')
ECLIPSE_CHE_SUBSCRIPTION_NAME=$(echo ${ECLIPSE_CHE_SUBSCRIPTION_RECORD} | jq -r '.metadata.name')
ECLIPSE_CHE_SUBSCRIPTION_NAMESPACE=$(echo ${ECLIPSE_CHE_SUBSCRIPTION_RECORD} | jq -r '.metadata.namespace')
ECLIPSE_CHE_INSTALLED_CSV=$(echo ${ECLIPSE_CHE_SUBSCRIPTION_RECORD} | jq -r '.status.installedCSV')
}
discoverEclipseCheBundles() {
local OPENSHIFT_VERSION=$(oc version -o json | yq -r '.openshiftVersion')
local CHANNEL=$1
local CATALOG_SERVICE=$(oc get service ${ECLIPSE_CHE_CATALOG_SOURCE_NAME} -n openshift-marketplace -o yaml)
local REGISTRY_IP=$(echo "${CATALOG_SERVICE}" | yq -r ".spec.clusterIP")
local CATALOG_PORT=$(echo "${CATALOG_SERVICE}" | yq -r ".spec.ports[0].targetPort")
local xFlag="+x"; [[ $- =~ x ]] && xFlag="-x"
set +x # suppress output
local POD_OVERRIDES='{"apiVersion": "v1", "spec": {"securityContext": {"allowPrivilegeEscalation": false, "runAsNonRoot": true, "capabilities": {"drop": ["ALL"]}, "seccompProfile": {"type": "RuntimeDefault"}}}}'
[[ ${OPENSHIFT_VERSION} =~ ^4[.]10 ]] && POD_OVERRIDES=''
local BUNDLES=$(oc run grpcurl-query -n openshift-marketplace \
--rm=true \
--restart=Never \
--attach=true \
--overrides="${POD_OVERRIDES}" \
--image=docker.io/fullstorydev/grpcurl:v1.7.0 \
-- -plaintext "${REGISTRY_IP}:${CATALOG_PORT}" api.Registry.ListBundles | head -n -1)
local LATEST_BUNDLE=$(echo "${BUNDLES}" | jq -s '.' | jq ". | map(. | select(.channelName == \"${CHANNEL}\"))" | yq -r '. |=sort_by(.csvName) | .[length - 1]')
local PREVIOUS_BUNDLE=$(echo "${BUNDLES}" | jq -s '.' | jq ". | map(. | select(.channelName == \"${CHANNEL}\"))" | yq -r '. |=sort_by(.csvName) | .[length - 2]')
export LATEST_CSV_NAME=$(echo "${LATEST_BUNDLE}" | yq -r ".csvName")
export PREVIOUS_CSV_NAME=$(echo "${PREVIOUS_BUNDLE}" | yq -r ".csvName")
if [[ ${CHANNEL} == "next" ]]; then
export LATEST_VERSION="next"
export PREVIOUS_VERSION="next"
else
export LATEST_VERSION=${LATEST_CSV_NAME#${ECLIPSE_CHE_PACKAGE_NAME}.v}
export PREVIOUS_VERSION=${PREVIOUS_CSV_NAME#${ECLIPSE_CHE_PACKAGE_NAME}.v}
fi
echo "[INFO] PREVIOUS_CSV_NAME: ${PREVIOUS_CSV_NAME}"
echo "[INFO] PREVIOUS_VERSION: ${PREVIOUS_VERSION}"
echo "[INFO] LATEST_CSV_NAME: ${LATEST_CSV_NAME}"
echo "[INFO] LATEST_VERSION: ${LATEST_VERSION}"
set ${xFlag}
}