# shellcheck shell=bash # some functions are used from test-lib.sh, that is usually in the same dir # shellcheck source=/dev/null source "$(dirname "${BASH_SOURCE[0]}")"/test-lib.sh # Set of functions for testing docker images in OpenShift using 'oc' command # A variable containing the overall test result; must be changed to 0 in the end # of the testing script: # OS_TESTSUITE_RESULT=0 # And the following trap must be set, in the beginning of the test script: # trap ct_os_cleanup EXIT SIGINT # ct_os_set_path_oc_4 OC_VERSION # -------------------- # This is a trick that helps using correct version 4 of the `oc`: # The input is version of the openshift in format 4.4 etc. # If the currently available version of oc is not of this version, # it first takes a look into /usr/local/oc-/bin directory, # Arguments: oc_version - X.Y part of the version of OSE (e.g. 3.9) function ct_os_set_path_oc_4() { echo "Setting OCP4 client" local oc_version=$1 local installed_oc_path="/usr/local/oc-v${oc_version}/bin" echo "PATH ${installed_oc_path}" if [ -x "${installed_oc_path}/oc" ] ; then oc_path="${installed_oc_path}" echo "Binary oc found in ${installed_oc_path}" >&2 else echo "OCP4 not found" return 1 fi export PATH="${oc_path}:${PATH}" oc version if ! oc version | grep -q "Client Version: ${oc_version}." ; then echo "ERROR: something went wrong, oc located at ${oc_path}, but oc of version ${oc_version} not found in PATH ($PATH)" >&1 return 1 else echo "PATH set correctly, binary oc found in version ${oc_version}: $(command -v oc)" fi } # ct_os_prepare_ocp4 # ------------------ # Prepares environment for testing images in OpenShift 4 environment # # function ct_os_set_ocp4() { if [ "${CVP:-0}" -eq "1" ]; then echo "Testing in CVP environment. No need to login to OpenShift cluster. This is already done by CVP pipeline." return fi local login OS_OC_CLIENT_VERSION=${OS_OC_CLIENT_VERSION:-4.4} ct_os_set_path_oc_4 "${OS_OC_CLIENT_VERSION}" oc version login=$(cat "$KUBEPASSWORD") oc login -u kubeadmin -p "$login" echo "Login to OpenShift ${OS_OC_CLIENT_VERSION} is DONE" # let openshift cluster to sync to avoid some race condition errors sleep 3 } function ct_os_upload_image_external_registry() { local input_name="${1}" ; shift local image_name=${input_name##*/} local imagestream=${1:-$image_name:latest} local output_name ct_os_login_external_registry output_name="${INTERNAL_DOCKER_REGISTRY}/rhscl-ci-testing/$imagestream" docker images docker tag "${input_name}" "${output_name}" docker push "${output_name}" } function ct_os_login_external_registry() { local docker_token # docker login fails with "404 page not found" error sometimes, just try it more times # shellcheck disable=SC2034 echo "loging" [ -z "${INTERNAL_DOCKER_REGISTRY:-}" ] && "INTERNAL_DOCKER_REGISTRY has to be set for working with Internal registry" && return 1 # shellcheck disable=SC2034 for i in $(seq 12) ; do # shellcheck disable=SC2015 docker_token=$(cat "$DOCKER_UPSHIFT_TOKEN") # shellcheck disable=SC2015 docker login -u rhscl-ci-testing -p "$docker_token" "${INTERNAL_DOCKER_REGISTRY}" && return 0 || : sleep 5 done return 1 } function ct_os_import_image_ocp4() { local image_name="${1}"; shift local imagestream=${1:-$image_name:latest} local namespace namespace=${CT_NAMESPACE:-"$(oc project -q)"} deploy_image_name="${INTERNAL_DOCKER_REGISTRY}/rhscl-ci-testing/${imagestream}" echo "Uploading image ${image_name} as ${deploy_image_name} , ${imagestream} into external registry." ct_os_upload_image_external_registry "${image_name}" "${imagestream}" if [ "${CT_TAG_IMAGE:-false}" == 'true' ]; then echo "Tag ${deploy_image_name} to ${namespace}/${imagestream}" oc tag --source=docker "${deploy_image_name}" "${namespace}/${imagestream}" --insecure=true --reference-policy=local else echo "Import image into OpenShift 4 environment ${namespace}/${imagestream} from ${deploy_image_name}" oc import-image "${namespace}/${imagestream}" --from="${deploy_image_name}" --confirm --reference-policy=local fi }