#######################################################################################
# Copyright ETSI Contributors and Others.
#
# Licensed 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.
#######################################################################################

export ASSUME_YES=""
export APT_PROXY_URL=""
export K8S_CLUSTER_ENGINE="k3s"
export DEBUG_INSTALL=""
export RELEASE="testing-daily"
export REPOSITORY="testing"
export REPOSITORY_KEY="OSM%20ETSI%20Release%20Key.gpg"
export REPOSITORY_BASE="https://osm-download.etsi.org/repository/osm/debian"
export INSTALL_AUX_CLUSTER="y"
export INSTALL_MGMT_CLUSTER="y"
export OSM_NAMESPACE=osm
export OSM_HELM_RELEASE=osm
export OSM_DOCKER_TAG="testing-daily"
export DOCKER_USER="opensourcemano"
export DOCKER_REGISTRY_USER=
export DOCKER_REGISTRY_PASSWORD=
export DOCKER_REGISTRY_URL=
export DOCKER_PROXY_URL=
export MODULES_FOR_TESTING=
export MODULE_DOCKER_TAG=
export OSM_CLIENT_VERSION="master"
export OSM_IM_VERSION="master"
export OSM_HOME_DIR=${OSM_HOME_DIR:-"$HOME/.osm"}
export CREDENTIALS_DIR="${OSM_HOME_DIR}/.credentials"
export WORK_REPOS_DIR="${OSM_HOME_DIR}/repos"
export INSTALL_MINIO=${INSTALL_MINIO:-"y"}
export KUBECONFIG_AUX_CLUSTER=
export KUBECONFIG_MGMT_CLUSTER=
export KUBECONFIG_OSM_CLUSTER=
export OSM_BEHIND_PROXY=
export OPENSHIFT_MGMT_CLUSTER=
export MGMT_CLUSTER_CA_FILE=
export OSM_BASE_DOMAIN=
export OSM_HELM_TIMEOUT=
export OSM_CLUSTER_INGRESS_CLASS=
export AUX_CLUSTER_INGRESS_CLASS=