diff options
author | Michal Ptacek <m.ptacek@partner.samsung.com> | 2019-02-13 15:34:14 +0000 |
---|---|---|
committer | Gerrit Code Review <gerrit@onap.org> | 2019-02-13 15:34:14 +0000 |
commit | 8063d1a15de138bbeff98fc8b48c78154ada8717 (patch) | |
tree | a0d21b562a259c17e9caac20294df6abb3c5f367 /build | |
parent | 59d5c325dcdd0f46be5ae15b683474578b13d98c (diff) | |
parent | f3eee9e2131a59e2a0995c53c07001f24f9187a2 (diff) |
Merge changes Idcc4c510,I81261f51,Ica9fc768,I7b5d135a
* changes:
More default values and simplify onap config
Clarify packaging variables documentation
Helm install optional and default values
Helm charts dir commenting causes / dir copying
Diffstat (limited to 'build')
-rw-r--r-- | build/package.conf | 129 | ||||
-rwxr-xr-x | build/package.sh | 132 |
2 files changed, 133 insertions, 128 deletions
diff --git a/build/package.conf b/build/package.conf index 1141798b..29ca3cb1 100644 --- a/build/package.conf +++ b/build/package.conf @@ -1,71 +1,80 @@ -# 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. +# For the packaging script it is expected that all artifacts are present on local file system. +# Artifacts include: +# - installer source code (this git repository content) +# - all binary artifacts pre-downloaded from internet (docker images, rpm packages, npm packages, Maven artifacts etc.) +# Script will create 3 packages: +# offline-${PROJECT_NAME}-${PROJECT_VERSION}-sw.tar +# - installer code (ansible dir in this git repo) +# - Files/dirs defined by APP_CONFIGURATION if any. +# - Directory content of HELM_CHARTS_DIR if defined. +# offline-${PROJECT_NAME}-${PROJECT_VERSION}-resources.tar +# - Directory content of APP_BINARY_RESOURCES_DIR if defined. +# offline-${PROJECT_NAME}-${PROJECT_VERSION}-aux-resources.tar +# - Files defined by APP_AUX_BINARIES if any. ########################### -# Project specific params # +# Application Helm charts # ########################### -# Final package name will be ${SOFTWARE_PACKAGE_BASENAME}-${PROJECT_NAME}-${PROJECT_VERSION}.tar -SOFTWARE_PACKAGE_BASENAME="onap-offline" +# Provide application installed to Kubernetes cluster. Helm chart is the supported format https://helm.sh/. +# Directory provided here must contain all the Chart directories of the application (https://docs.helm.sh/developing_charts/#charts) and Makefile. +# E.g. in case of ONAP oom repo it will be the content of kubernetes directory. +# NOTE: Leaving this variable commented out will mean that no Helm application will be installed to +# offline Kubernetes cluster. This may be sometimes wanted. +#HELM_CHARTS_DIR=<oom-clone>/kubernetes +HELM_CHARTS_DIR=/tmp/oom-clone/kubernetes -######################## -# Helm charts handling # -######################## +##################################### +# Application install configuration # +##################################### -# 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' +# APP_CONFIGURATION array variable can be used to provide files/directories +# into sw package available for the Ansible process to consume. +# The main configuration for you application is a yml file +# "application_configuration.yml" (name of file can be anything) where user +# need to provide values to control ansible installer process. Yml file is given +# as command line parameter to ansible run. +# See more from UserGuide documentation (LINK HERE) how to use installer. +# Available configuration parameters user can configure is seen from group_vars files: +# ansible/group_vars/all.yml +# ansible/group_vars/infrastucture.yml +# ansible/group_vars/kubernetes.yml +# Additionally user can optionally provide own ansible roles code to customize install process. +# At the moment 2 custom ansible roles are supported pre and post install roles, which are +# run by installer prior Helm install and after Kubernetes app has been installed. +# In application_configuration.yml those role names are configured with variables: +# application_pre_install_role: my-pre-install-role +# application_post_install_role: my-post-install-role +# And according to Ansible functionality, roles' code must be placed to directories +# with the same name. +#APP_CONFIGURATION=( +# <offline-installer-clone>/config/application_configuration.yml +# <offline-installer-clone>/patches/onap-casablanca-patch-role +# ~/myappfiles/my-post-install-role +#) +APP_CONFIGURATION=( + /tmp/offline-installer/config/application_configuration.yml + /tmp/offline-installer/patches/onap-casablanca-patch-role ) -# 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 -# +# APP_BINARY_RESOURCES_DIR is variable to directory containing directories and files for offline +# installer infra and the the application run in that infra. +# Currently mixed with infra and app binaries to same, maybe to be separated in the future. +# Following directories and files are expected: +# downloads ... directory with exacutable binaries for offline infra usage (e.g. rancher, kubectl, jq, helm) +# git-repo ... directory with git repos for application needs to be simulated +# http ... directory with http simulation files (e.g. Maven artifacts are simulated here) +# offline_data ... directory with offline infra specific docker images +# pkg ... directory with rpm/deb packages mainly for offline infra +# nexus_data.tar ... tar file with pre-generated nexus blobs containing e.g. docker images for the application. +#APP_BINARY_RESOURCES_DIR=~/myappfiles/all_binaries +APP_BINARY_RESOURCES_DIR=/tmp/onap-offline/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' +# APP_AUX_BINARIES is array variable for additional application files. +# Docker images supported currently in tar format. +#APP_AUX_BINARIES=( +# ~/myappfiles/docker_images_populated_runtime/aaa-component-0.0.1.tar +# ~/myappfiles/docker_images_populated_runtime/xyz-component-0.0.1.tar #) +APP_AUX_BINARIES=() -# 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' -#) diff --git a/build/package.sh b/build/package.sh index 0e4f1213..63774e02 100755 --- a/build/package.sh +++ b/build/package.sh @@ -50,12 +50,18 @@ function create_tar { find ${tar_dir}/* -maxdepth 0 -type d -exec rm -rf '{}' \; # Remove packaged files find ${tar_dir}/* ! -name ${tar_name} -exec rm '{}' \; - echo "tar file ${tar_name} created in target dir" + echo "Tar file created to $(dirname ${tar_dir})/${tar_name}" +} + +function create_pkg { + local pkg_type="$1" + echo "[Creating ${pkg_type} package]" + create_tar "${PKG_ROOT}" offline-${PROJECT_NAME}-${PROJECT_VERSION}-${pkg_type}.tar + rm -rf "${PKG_ROOT}" } function add_metadata { local metafile="$1" - echo "Project name: ${PROJECT_NAME}" >> "${metafile}" echo "Project version: ${PROJECT_VERSION}" >> "${metafile}" echo "Package date: ${TIMESTAMP}" >> "${metafile}" @@ -64,7 +70,6 @@ function add_metadata { function add_additions { local source="$1" local target="$2" - if [ -d "${source}" ]; then mkdir -p "${target}/$(basename $source)" cp -r "${source}" "${target}" @@ -80,7 +85,7 @@ function add_additions { } function build_sw_artifacts { - cd ../ansible/docker + cd ${LOCAL_PATH}/../ansible/docker ./build_ansible_image.sh if [ $? -ne 0 ]; then crash 5 "Building of ansible runner image failed." @@ -89,92 +94,75 @@ function build_sw_artifacts { } function create_sw_package { - local pkg_root="${PACKAGING_TARGET_DIR}/sw" - - # Create tar package - echo "[Creating software package]" + PKG_ROOT="${PACKAGING_TARGET_DIR}/sw" # Create directory structure of the sw package - mkdir -p "${pkg_root}" - cp -r ansible "${pkg_root}" + mkdir -p "${PKG_ROOT}" + cp -r ${LOCAL_PATH}/../ansible "${PKG_ROOT}" - # Add additional files/dirs into package based on package.conf - for item in "${SW_PACKAGE_ADDONS[@]}";do + # Add application additional files/dirs into package based on package.conf + for item in "${APP_CONFIGURATION[@]}";do # all SW package addons are expected within ./ansible/application folder - add_additions "${item}" "${pkg_root}/ansible/application" + add_additions "${item}" "${PKG_ROOT}/${APPLICATION_FILES_IN_PACKAGE}" done - # Helm charts handling - echo "Helm charts handling" - # Copy charts available for ansible playbook to use/move them to target server/dir - mkdir -p "${pkg_root}"/ansible/application/helm_charts - cp -r "${HELM_CHARTS_DIR}"/* "${pkg_root}"/ansible/application/helm_charts + # Application Helm charts + # To be consistent with resources and aux dir, create charts dir even if no charts provided. + mkdir -p ${PKG_ROOT}/${HELM_CHARTS_DIR_IN_PACKAGE} + if [ ! -z "${HELM_CHARTS_DIR}" ]; + then + echo "Add application Helm charts" + # Copy charts available for ansible playbook to use/move them to target server/dir + cp -r "${HELM_CHARTS_DIR}"/* ${PKG_ROOT}/${HELM_CHARTS_DIR_IN_PACKAGE} + else + echo "No Helm charts defined, no application will be automatically installed by this package!" + fi # Add metadata to the package - add_metadata "${pkg_root}"/package.info + add_metadata "${PKG_ROOT}"/package.info # Create sw tar package - echo "Creating tar file ..." - PACKAGE_BASE_NAME="${SOFTWARE_PACKAGE_BASENAME}" - create_tar "${pkg_root}" ${PACKAGE_BASE_NAME}-${PROJECT_NAME}-${PROJECT_VERSION}-sw.tar - rm -rf "${pkg_root}" + create_pkg sw } function create_resource_package { - local pkg_root="${PACKAGING_TARGET_DIR}/resources" - - # Create resource tar package - echo "[Creating resource package]" + PKG_ROOT="${PACKAGING_TARGET_DIR}/resources" # Create directory structure of the resource package - mkdir -p "${pkg_root}" + mkdir -p "${PKG_ROOT}" - # Add artifacts into resource packagee based on package.conf config - for item in "${EXTERNAL_BINARIES_PACKAGE_ADDONS[@]}";do - if [ "$(basename $item)" == "resources" ]; then - echo "Note: Packaging all resources at once" - add_additions "${item}" "${PACKAGING_TARGET_DIR}" - else - add_additions "${item}" "${pkg_root}" - fi - done + # Add artifacts into resource package based on package.conf config + if [ ! -z ${APP_BINARY_RESOURCES_DIR} ]; then + cp -r ${APP_BINARY_RESOURCES_DIR}/* ${PKG_ROOT} + fi # tar file with nexus_data is expected, we should find and untar it # before resource.tar is created - for i in `ls -1 ${pkg_root} | grep tar`; do - tar tvf "${pkg_root}/${i}" | grep nexus_data &> /dev/null - if [ $? -eq 0 ]; then - echo "Debug: tar file with nexus blobs detected ${pkg_root}/${i}. Start unarchive ..." - tar xf "${pkg_root}/${i}" -C "${pkg_root}" &> /dev/null - echo "Debug: unarchive finished. Removing original file" - rm -f "${pkg_root}/${i}" - fi + for i in `ls -1 ${PKG_ROOT} | grep tar`; do + tar tvf "${PKG_ROOT}/${i}" | grep nexus_data &> /dev/null + if [ $? -eq 0 ]; then + echo "Debug: tar file with nexus blobs detected ${PKG_ROOT}/${i}. Start unarchive ..." + tar xf "${PKG_ROOT}/${i}" -C "${PKG_ROOT}" &> /dev/null + echo "Debug: unarchive finished. Removing original file" + rm -f "${PKG_ROOT}/${i}" + fi done - echo "Creating tar file ..." - PACKAGE_BASE_NAME="${SOFTWARE_PACKAGE_BASENAME}" - create_tar "${pkg_root}" "${PACKAGE_BASE_NAME}-${PROJECT_NAME}-${PROJECT_VERSION}-resources.tar" - rm -rf "${pkg_root}" + create_pkg resources } function create_aux_package { - local pkg_root="${PACKAGING_TARGET_DIR}/aux" - - # Create aux resource tar package - echo "Creating aux resource package" + PKG_ROOT="${PACKAGING_TARGET_DIR}/aux" # Create directory structure of the aux resource package - mkdir -p "${pkg_root}" + mkdir -p "${PKG_ROOT}" # Add artifacts into resource packagee based on package.conf config - for item in "${AUX_BINARIES_PACKAGE_ADDONS[@]}";do - add_additions "${item}" "${pkg_root}" + for item in "${APP_AUX_BINARIES[@]}";do + add_additions "${item}" "${PKG_ROOT}" done - echo "Creating tar file ..." - PACKAGE_BASE_NAME="${SOFTWARE_PACKAGE_BASENAME}" - create_tar "${pkg_root}" "${PACKAGE_BASE_NAME}-${PROJECT_NAME}-${PROJECT_VERSION}-aux-resources.tar" - rm -rf "${pkg_root}" + create_pkg aux-resources } # @@ -189,6 +177,21 @@ TIMESTAMP=$(date -u +%Y%m%dT%H%M%S) SCRIPT_DIR=$(dirname "${0}") LOCAL_PATH=$(readlink -f "$SCRIPT_DIR") +# Relative location inside the package for application related files. +# Application means Kubernetes application installed by Helm charts on ready cluster (e.g. onap). +APPLICATION_FILES_IN_PACKAGE="ansible/application" + +# Relative location inside the package to place Helm charts to be available for +# Ansible process to transfer them into machine (infra node) running Helm repository. +# NOTE: This is quite hardcoded place to put them and agreement with Ansible code +# is done in ansible/group_vars/all.yml with variable "app_helm_charts_install_directory" +# whihc value must match to value of this variable (with exception of slash '/' +# prepended so that ansible docker/chroot process can see the dir). +# This variable can be of course changed in package.conf if really needed if +# corresponding ansible variable "app_helm_charts_install_directory" value +# adjusted accordingly. +HELM_CHARTS_DIR_IN_PACKAGE="${APPLICATION_FILES_IN_PACKAGE}/helm_charts" + if [ "$#" -lt 3 ]; then echo "Missing some mandatory parameter!" usage @@ -227,13 +230,6 @@ rm -rf ${PACKAGING_TARGET_DIR} build_sw_artifacts create_sw_package create_resource_package - -# This part will create aux package which consists of -# artifacts which can be added into offline nexus during runtime -if [ "${PREPARE_AUX_PACKAGE}" == "true" ]; then - create_aux_package -else - echo "AUX package won't be created" -fi +create_aux_package popd |