summaryrefslogtreecommitdiffstats
path: root/build
diff options
context:
space:
mode:
authorMichal Ptacek <m.ptacek@partner.samsung.com>2019-02-13 15:34:14 +0000
committerGerrit Code Review <gerrit@onap.org>2019-02-13 15:34:14 +0000
commit8063d1a15de138bbeff98fc8b48c78154ada8717 (patch)
treea0d21b562a259c17e9caac20294df6abb3c5f367 /build
parent59d5c325dcdd0f46be5ae15b683474578b13d98c (diff)
parentf3eee9e2131a59e2a0995c53c07001f24f9187a2 (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.conf129
-rwxr-xr-xbuild/package.sh132
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