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