# For the packaging script it is expected that all artifacts are present on local file system
# (e.g. they can be mounted) Downloading stuff from internet is currently not supported.
# Furthermore we don't want to replicate content of our static data_lists for download in there
# and those are downloaded before this packaging script is supposed to be run.
# Therefore we can limit number of artifacts to be added into packages just to couple of items.

###########################
# Project specific params #
###########################

# Final package name will be ${SOFTWARE_PACKAGE_BASENAME}-${PROJECT_NAME}-${PROJECT_VERSION}.tar
SOFTWARE_PACKAGE_BASENAME="onap-offline"

########################
# Helm charts handling #
########################

# directory with helm charts
HELM_CHARTS_DIR="/root/oom"


###################
# Packages addons #
###################

# in there we define array of files/directories to be added into particular packages
# SW_PACKAGE_ADDONS are offline installer specific entries which are supposed to be inserted
# into ./ansible/application directory which is the only place where installer expects SW addons
# if directory is specified, whole dir will be copied into ./ansible/application inc. subdirs
# if file is specified it will be just copied into ./ansible/application folder.
#
SW_PACKAGE_ADDONS=(
    '/root/ansible/application/onap-me-patch-role'
    '/root/ansible/application/application_configuration.yml'
)

# following array contains directories and files from where offline installer can get required artifacts
# following binaries and files are expected:
# <path_to_downloads>/downloads        ... path to directory with application binaries (e.g. rancher, kubectl, jq, helm)
# <path_to_git-repo>/git-repo          ... path to directory with git repos
# <path_to_http>/http                  ... path to directory with http files
# <path_to_offline_data>/offline_data  ... path to directory with infra specific docker images
# <path_to_pkg>/pkg                    ... path to directory with rpm/deb packages
# <path_to_nexus_blob>/nexus_data.tar  ... path to tar file with collected nexus blobs (output of different script)
#
# alternatively and if all above is available just ./resources folder with contain all of those might be used
# <path_to_complete_resources_folder>/resources
#

EXTERNAL_BINARIES_PACKAGE_ADDONS=(
     '/root/resources'
)
#EXTERNAL_BINARIES_PACKAGE_ADDONS=(
#    '/root/resources/downloads'
#    '/root/resources/git-repo'
#    '/root/resources/http'
#    '/root/resources/offline_data'
#    '/root/resources/pkg'
#    '/root/resources/nexus_data.tar'
#)

# this param should be set to true if additional application package is supposed to be created
#
PREPARE_AUX_PACKAGE="true"

# tar files with additional application images supposed to be inserted into nexus during runtime are expected
#
#AUX_BINARIES_PACKAGE_ADDONS=(
#    '/root/resource_aux/aaa-component-0.0.1.tar'
#    '/root/resource_aux/xyz-component-0.0.1.tar'
#)
