#   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.

# OSM target for the tests
export OSM_HOSTNAME=

# VIM to be used for the tests
export VIM_TARGET=
export VIM_MGMT_NET=

# Variables required for tests running locally on the host (not necessary in Docker since they are already defined)
export PACKAGES_FOLDER= # path to the location of the OSM packages
export K8S_CREDENTIALS= # path to the kubeconfig file

# Variables required for tests interacting with Openstack
export OS_CLOUD=    # OpenStack Cloud defined in $HOME/.config/openstack/clouds.yaml or in /etc/openstack/clouds.yaml

# Openstack variables required when using Docker to run tests (they are used to register the VIM)
export OS_USERNAME=
export OS_PASSWORD=
export OS_TENANT_NAME=
export OS_AUTH_URL=
export OS_TENANT_ID=
export OS_IDENTITY_API_VERSION=

# SDN controller variables required for running tests with SDN controllers
export SDNC_USER=
export SDNC_PASSWORD=
export SDNC_TYPE=
export SDNC_URL=

# OCI registry variables required for tests that uses OCI artifacts
export OCI_REGISTRY_URL=
export OCI_REGISTRY_USER=
export OCI_REGISTRY_PASSWORD=