github.com/verrazzano/verrazzano@v1.7.1/ci/scripts/install_verrazzano.sh (about) 1 #!/usr/bin/env bash 2 # Copyright (c) 2022, 2023, Oracle and/or its affiliates. 3 # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. 4 # 5 # Required env vars: 6 # INSTALL_CONFIG_FILE_KIND - source Verrazzano install configuration for KIND 7 # WORKSPACE - workspace for output files, temp files, etc 8 # TEST_SCRIPTS_DIR - Location of the E2E tests directory 9 # KUBECONFIG - kubeconfig path for the target cluster 10 # GO_REPO_PATH - Local path to the Verrazzano Github repo 11 # 12 # Indirect/optional env vars (used to process the installation config): 13 # 14 # INSTALL_PROFILE - Verrazzano profile, defaults to "dev" 15 # VZ_ENVIRONMENT_NAME - environmentName default 16 # EXTERNAL_ELASTICSEARCH - if "true" && VZ_ENVIRONMENT_NAME=="admin", sets Fluentd configuration to point to EXTERNAL_ES_SECRET and EXTERNAL_ES_URL 17 # SYSTEM_LOG_ID - configures Verrazzano for OCI logging using the specified OCI logging ID 18 # ENABLE_API_ENVOY_LOGGING - enables debug in the Istio Envoy containers 19 # WILDCARD_DNS_DOMAIN - an override for a user-specified wildcard DNS domain to use 20 # VERRAZZANO_INSTALL_LOGS_DIR - output location for the VZ install logs 21 # 22 set -o pipefail 23 24 if [ -z "$GO_REPO_PATH" ] ; then 25 echo "GO_REPO_PATH must be set" 26 exit 1 27 fi 28 if [ -z "$WORKSPACE" ]; then 29 echo "WORKSPACE must be set" 30 exit 1 31 fi 32 if [ -z "$TEST_SCRIPTS_DIR" ]; then 33 echo "TEST_SCRIPTS_DIR must be set to the E2E test script directory location" 34 exit 1 35 fi 36 if [ -z "${KUBECONFIG}" ]; then 37 echo "KUBECONFIG must be set" 38 exit 1 39 fi 40 if [ -z "$INSTALL_CONFIG_FILE_KIND" ]; then 41 echo "INSTALL_CONFIG_FILE_KIND must be set to valid Verrazzano install file" 42 exit 1 43 fi 44 45 scriptHome=$(dirname ${BASH_SOURCE[0]}) 46 47 is_macos () { 48 if [[ "${OSTYPE}" == "darwin"** ]] 49 then 50 return 0 51 fi 52 return 1 53 } 54 55 get_arch_type() { 56 local os=linux 57 if is_macos ; then 58 os=darwin 59 fi 60 echo $os 61 } 62 63 setup_overrides() { 64 # We should make this optional 65 TEST_OVERRIDE_CONFIGMAP_FILE="${TEST_SCRIPTS_DIR}/pre-install-overrides/test-overrides-configmap.yaml" 66 TEST_OVERRIDE_SECRET_FILE="${TEST_SCRIPTS_DIR}/pre-install-overrides/test-overrides-secret.yaml" 67 68 echo "Creating Override ConfigMap" 69 if ! kubectl get cm test-overrides 2>&1 > /dev/null; then 70 if ! kubectl create cm test-overrides --from-file="${TEST_OVERRIDE_CONFIGMAP_FILE}" ; then 71 echo "Could not create Override ConfigMap" 72 exit 1 73 fi 74 fi 75 76 echo "Creating Override Secret" 77 if ! kubectl get secret test-overrides 2>&1 > /dev/null; then 78 if ! kubectl create secret generic test-overrides --from-file="${TEST_OVERRIDE_SECRET_FILE}" ; then 79 echo "Could not create Override Secret" 80 exit 1 81 fi 82 fi 83 } 84 85 set -e 86 if [ -n "${VZ_TEST_DEBUG}" ]; then 87 set -xv 88 fi 89 90 INSTALL_TIMEOUT_VALUE=${INSTALL_TIMEOUT_VALUE:-30m} 91 WILDCARD_DNS_DOMAIN=${WILDCARD_DNS_DOMAIN:-""} 92 ENABLE_API_ENVOY_LOGGING=${ENABLE_API_ENVOY_LOGGING:-false} 93 CREATE_TEST_OVERRIDES=${CREATE_TEST_OVERRIDES:-true} 94 USE_DB_FOR_GRAFANA=${USE_DB_FOR_GRAFANA:-false} 95 96 echo "Create Image Pull Secrets" 97 ${TEST_SCRIPTS_DIR}/create-image-pull-secret.sh "${IMAGE_PULL_SECRET}" "${DOCKER_REPO}" "${DOCKER_CREDS_USR}" "${DOCKER_CREDS_PSW}" 98 # REVIEW: Do we need github-packages still? 99 ${TEST_SCRIPTS_DIR}/create-image-pull-secret.sh github-packages "${DOCKER_REPO}" "${DOCKER_CREDS_USR}" "${DOCKER_CREDS_PSW}" 100 if [ -n "${OCR_REPO}" ] && [ -n "${OCR_CREDS_USR}" ] && [ -n "${OCR_CREDS_PSW}" ]; then 101 echo "Creating Oracle Container Registry pull secret" 102 ${TEST_SCRIPTS_DIR}/create-image-pull-secret.sh ocr "${OCR_REPO}" "${OCR_CREDS_USR}" "${OCR_CREDS_PSW}" 103 fi 104 105 # Create the verrazzano-install namespace 106 kubectl create namespace verrazzano-install || true 107 108 # create secret in verrazzano-install ns 109 ${TEST_SCRIPTS_DIR}/create-image-pull-secret.sh "${IMAGE_PULL_SECRET}" "${DOCKER_REPO}" "${DOCKER_CREDS_USR}" "${DOCKER_CREDS_PSW}" "verrazzano-install" 110 111 # optionally create a cluster dump snapshot for verifying uninstalls 112 if [ -n "${CLUSTER_SNAPSHOT_DIR}" ]; then 113 ${TEST_SCRIPTS_DIR}/looping-test/dump_cluster.sh ${CLUSTER_SNAPSHOT_DIR} 114 fi 115 116 INSTALL_PROFILE=${INSTALL_PROFILE:-"dev"} 117 VERRAZZANO_INSTALL_LOGS_DIR=${VERRAZZANO_INSTALL_LOGS_DIR:-${WORKSPACE}/verrazzano/platform-operator/scripts/install/build/logs} 118 119 echo "Determine which yaml file to use to install the Verrazzano Platform Operator" 120 cd ${GO_REPO_PATH}/verrazzano 121 122 TARGET_OPERATOR_FILE=${TARGET_OPERATOR_FILE:-"${WORKSPACE}/acceptance-test-operator.yaml"} 123 if [ -z "$OPERATOR_YAML" ]; then 124 # Derive the name of the operator.yaml file, copy or generate the file, then install 125 if [ -z "${VERRAZZANO_OPERATOR_IMAGE}" ] || [ "NONE" == "${VERRAZZANO_OPERATOR_IMAGE}" ]; then 126 echo "Using operator.yaml from object storage" 127 oci --region us-phoenix-1 os object get --namespace ${OCI_OS_NAMESPACE} -bn ${OCI_OS_BUCKET} --name ${OCI_OS_LOCATION}/operator.yaml --file ${WORKSPACE}/downloaded-operator.yaml 128 cp -v ${WORKSPACE}/downloaded-operator.yaml ${TARGET_OPERATOR_FILE} 129 else 130 echo "Generating operator.yaml based on image name provided: ${VERRAZZANO_OPERATOR_IMAGE}" 131 env IMAGE_PULL_SECRETS=verrazzano-container-registry DOCKER_IMAGE=${VERRAZZANO_OPERATOR_IMAGE} ./tools/scripts/generate_operator_yaml.sh > ${TARGET_OPERATOR_FILE} 132 fi 133 else 134 # The operator.yaml filename was provided, install using that file. 135 echo "Using provided operator.yaml file: " ${OPERATOR_YAML} 136 TARGET_OPERATOR_FILE=${OPERATOR_YAML} 137 fi 138 139 # if enabled, deploy the Grafana MySQL instance and create the Grafana DB secret 140 if [ $USE_DB_FOR_GRAFANA == true ]; then 141 # create the necessary secrets 142 MYSQL_ROOT_PASSWORD=$(openssl rand -base64 12) 143 MYSQL_PASSWORD=$(openssl rand -base64 12) 144 ROOT_SECRET=$(echo -n $MYSQL_ROOT_PASSWORD | base64) 145 USER_SECRET=$(echo -n $MYSQL_PASSWORD | base64) 146 USER=$(echo -n "grafana" | base64) 147 148 kubectl apply -f - <<-EOF 149 apiVersion: v1 150 kind: Secret 151 metadata: 152 name: grafana-db 153 namespace: verrazzano-install 154 type: Opaque 155 data: 156 root-password: $ROOT_SECRET 157 username: $USER 158 password: $USER_SECRET 159 EOF 160 # deploy MySQL instance 161 kubectl apply -f $WORKSPACE/tests/testdata/grafana/grafana-mysql.yaml 162 fi 163 164 # optionally create a cluster dump snapshot for verifying uninstalls 165 if [ -n "${CLUSTER_SNAPSHOT_DIR}" ]; then 166 ./tests/e2e/config/scripts/looping-test/dump_cluster.sh ${CLUSTER_SNAPSHOT_DIR} 167 fi 168 169 # Configure the custom resource to install Verrazzano on Kind 170 VZ_INSTALL_FILE=${VZ_INSTALL_FILE:-"${WORKSPACE}/acceptance-test-config.yaml"} 171 ./tests/e2e/config/scripts/process_kind_install_yaml.sh ${INSTALL_CONFIG_FILE_KIND} ${WILDCARD_DNS_DOMAIN} 172 # If grafana is using a DB add the database configuration to the VZ file 173 if [ $USE_DB_FOR_GRAFANA == true ]; then 174 ./tests/e2e/config/scripts/process_grafana_db_install_yaml.sh ${INSTALL_CONFIG_FILE_KIND} 175 fi 176 cp -v ${INSTALL_CONFIG_FILE_KIND} ${VZ_INSTALL_FILE} 177 178 setup_overrides 179 180 if [[ -n "${OCI_OS_LOCATION}" ]]; then 181 ARCHTYPE=$(get_arch_type) 182 VZ_CLI_TARGZ="vz-${ARCHTYPE}-amd64.tar.gz" 183 echo "Downloading VZ CLI from object storage" 184 oci --region us-phoenix-1 os object get --namespace ${OCI_OS_NAMESPACE} -bn ${OCI_OS_BUCKET} --name ${OCI_OS_LOCATION}/$VZ_CLI_TARGZ --file ${WORKSPACE}/$VZ_CLI_TARGZ 185 tar xzf "$WORKSPACE"/$VZ_CLI_TARGZ -C "$WORKSPACE" 186 fi 187 188 echo "Installing Verrazzano on Kind" 189 if [ -f "$WORKSPACE/vz" ]; then 190 cd $WORKSPACE 191 ./vz install --filename ${WORKSPACE}/acceptance-test-config.yaml --manifests ${TARGET_OPERATOR_FILE} --timeout ${INSTALL_TIMEOUT_VALUE} 192 else 193 cd ${GO_REPO_PATH}/verrazzano/tools/vz 194 GO111MODULE=on GOPRIVATE=github.com/verrazzano go run main.go install --filename ${VZ_INSTALL_FILE} --manifests ${TARGET_OPERATOR_FILE} --timeout ${INSTALL_TIMEOUT_VALUE} 195 fi 196 197 result=$? 198 if [[ $result -ne 0 ]]; then 199 exit 1 200 fi 201 202 exit 0 203