aboutsummaryrefslogtreecommitdiffstats
path: root/mcp/scripts/xdf_data.sh.j2
blob: 8c9d5d969efba817da1ece99fb1235ff0e666de4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#!/bin/bash -e
# shellcheck disable=SC2034
##############################################################################
# Copyright (c) 2018 Mirantis Inc., Enea AB and others.
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Apache License, Version 2.0
# which accompanies this distribution, and is available at
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
#
# Data derived from XDF (PDF/IDF/SDF/etc), used as input in deploy.sh
#

{%- set arch = conf[conf.MCP_JUMP_ARCH] -%}

{%- macro bash_arr(_l) -%}
  ({%- for n in _l -%}'{{ n }}' {% endfor -%})
{%- endmacro -%}

{#- Pack list as `sep`-separated string, replacing spaces with '|' -#}
{%- macro pack(x = [], sep = ',') -%}
  {{ x | join(sep) | replace(' ', '|') }}
{%- endmacro -%}

{#- Pack all vnode data as string -#}
{%- macro serialize_vnodes() -%}
  {%- set V = conf.virtual -%}
  {%- set arr = [] -%}
  {%- for n in V.nodes -%}
    {%- if n not in V -%}{%- do V.update({n: {}}) -%}{%- endif -%}
    {%- do arr.append(pack([n, V[n].ram or arch.default.ram,
                               V[n].vcpus or arch.default.vcpus])) -%}
  {%- endfor -%}
  '{{ pack(arr, '|') }}'
{%- endmacro -%}

{#- Pack apt_pkg data as string -#}
{%- macro serialize_apt_pkg() -%}
  {%- set arr = [] -%}
  {%- set sections = [arch.common] -%}
  {%- if conf.MCP_VCP -%}
    {%- do sections.append(arch.control) -%}
  {%- endif -%}
  {%- for c in sections -%}
    {%- do arr.append(pack([pack(c.apt['keys']), pack(c.apt.repos),
                            pack(c.pkg.install), pack(c.pkg.remove)], '^')) -%}
  {%- endfor -%}
  '{{ pack(arr, '^') }}'
{%- endmacro -%}

{%- set bridges = conf.idf.fuel.jumphost.bridges %}
# Determine bridge names based on IDF, where all bridges are now mandatory
OPNFV_BRIDGES=(
  '{{ bridges.admin or "pxebr" }}'
  '{{ bridges.mgmt or "mgmt" }}'
  '{{ bridges.private or "internal" }}'
  '{{ bridges.public or "public" }}'
)

export CLUSTER_DOMAIN={{ conf.cluster.domain }}
cluster_states={{ bash_arr(conf.cluster.states) }}
virtual_nodes={{ bash_arr(conf.virtual.nodes) }}
base_image={{ arch.base_image }}

# Serialize vnode data as '<name0>,<ram0>,<vcpu0>|<name1>,<ram1>,<vcpu1>[...]'
virtual_nodes_data={{ serialize_vnodes() }}

# Serialize repos, packages to (pre-)install/remove for:
# - foundation node VM base image (virtual: all VMs, baremetal: cfg01|mas01)
# - virtualized control plane VM base image (only when VCP is used)
virtual_repos_pkgs={{ serialize_apt_pkg() }}
n> alternative remote access method script/program. curl is default. -f flag[...] build flags: s: Do nothing, succeed f: Do nothing, fail D: Debug mode P: Clear the local cache before building. This flag is only valid if the "-c cache-URI" options has been specified and and the method in the cache-URI is file:// (local cache). -h help, prints this help text output-directory, specifies the directory for the output artifacts (.iso file). If no output-directory is specified, the current path when calling the script is used. Description: build.sh builds the opnfv .iso artifact. To reduce build time it uses build caches on a local or remote location. A cache is rebuilt and uploaded if either of the below conditions are met: 1) The P(opulate) flag is set and the -c cache-base-URI is provided and set to the method file:// , if -c is not provided the cache will stay local. 2) If a cache is invalidated by the make system - the exact logic is encoded in the cache.mk of the different parts of the build. 3) A valid cache does not exist on the specified -c cache-base-URI. A cache has a blob (binary data) and a meta file in the format of: <SHA1>.blob <SHA1>.meta Logging is by default to console, but can be directed elsewhere with the -l option in which case both stdout and stderr is redirected to that destination. Built in unit testing of components is enabled by adding the t(est) flag. Return codes: - 0 Success! - 1-99 Unspecified build error - 100-199 Build system internal error (not build it self) - 101 Build system instance busy - 200 Build failure Examples: build -c http://opnfv.org/artifactory/fuel/cache \ -d ~/jenkins/genesis/fuel/ci/output -f ti NOTE: At current the build scope is set to the git root of the repository, -d destination locations outside that scope will not work! EOF } # # END of usage description ############################################################################ ############################################################################ # BEGIN of function error_exit error_exit() { echo "$@" >&2 exit 1 } # # END of function error_exit ############################################################################ ############################################################################ # BEGIN of shorthand variables for internal use # SCRIPT_DIR=$(readlink -f $(dirname ${BASH_SOURCE[0]})) BUILD_BASE=$(readlink -e ${SCRIPT_DIR}/../build/) RESULT_DIR="${BUILD_BASE}/release" BUILD_SPEC="${BUILD_BASE}/config.mk" LOCAL_CACHE_ARCH_NAME="${LOCAL_CACHE_ARCH_NAME:-fuel-cache}" # # END of variables to customize ############################################################################ ############################################################################ # BEGIN of script assigned default variables # export CACHEBASE="file://$HOME/cache" export CACHETRANSPORT="curl --silent" CLEAR_CACHE=0 MAKE_ARGS="" # # END of script assigned variables ############################################################################ build() { echo "CI build parameters:" echo "SCRIPT_DIR = $SCRIPT_DIR" echo "BUILD_BASE = $BUILD_BASE" echo "RESULT_DIR = $RESULT_DIR" echo "BUILD_SPEC = $BUILD_SPEC" echo "LOCAL_CACHE_ARCH_NAME = $LOCAL_CACHE_ARCH_NAME" echo "CLEAR_CACHE = $CLEAR_CACHE" echo "DEBUG = $DEBUG" echo "OUTPUT_DIR = $OUTPUT_DIR" echo "BUILD_LOG = $BUILD_LOG" echo "MAKE_ARGS = $MAKE_ARGS" echo "CACHEBASE = $CACHEBASE" echo "CACHETRANSPORT = $CACHETRANSPORT" if [ "$CLEAR_CACHE" -eq 1 ]; then echo $CACHEBASE | grep -q '^file://' $CACHE_BASE if [ $? -ne 0 ]; then error_exit "Can't clear a non-local cache!" else CACHEDIR=$(echo $CACHEBASE | sed 's;file://;;') echo "Clearing local cache at $CACHEDIR..." rm -rvf $CACHEDIR/* fi fi echo make ${MAKE_ARGS} cache cd ${BUILD_BASE} if make ${MAKE_ARGS} cache; then echo "Copying build result into $OUTPUT_DIR" sort ${BUILD_BASE}/gitinfo*.txt > ${OUTPUT_DIR}/gitinfo.txt cp ${RESULT_DIR}/*.iso ${OUTPUT_DIR} cp ${RESULT_DIR}/*.iso.txt ${OUTPUT_DIR} else error_exit "Build failed" fi } ############################################################################ # BEGIN of main # while getopts "s:c:l:v:f:r:f:h" OPTION do case $OPTION in s) BUILD_SPEC=${OPTARG} if [ ! -f ${BUILD_SPEC} ]; then echo "spec file does not exist: $BUILD_SPEC - exiting ...." exit 100 fi ;; c) # This value is used by cache.sh export CACHEBASE=${OPTARG} ;; l) BUILD_LOG=$(readlink -f ${OPTARG}) ;; v) MAKE_ARGS+="REVSTATE=${OPTARG}" ;; r) # This value is used by cache.sh export CACHETRANSPORT=${OPTARG} ;; h) usage rc=0 exit $rc ;; f) BUILD_FLAGS=${OPTARG} for ((i=0; i<${#BUILD_FLAGS};i++)); do case ${BUILD_FLAGS:$i:1} in s) exit 0 ;; f) exit 1 ;; P) CLEAR_CACHE=1 ;; D) DEBUG=1 ;; *) error_exit "${BUILD_FLAGS:$i:1} is not a valid build flag - exiting ...." ;; esac done ;; *) echo "${OPTION} is not a valid argument" rc=100 exit $rc ;; esac done # Get output directory shift $[$OPTIND - 1] case $# in 0) # No directory on command line OUTPUT_DIR=$(pwd) ;; 1) # Directory on command line OUTPUT_DIR=$(readlink -f $1) ;; *) error_exit "Too many arguments" ;; esac mkdir -p $OUTPUT_DIR || error_exit "Could not access output directory $OUTPUT_DIR" if [ -n "${BUILD_LOG}" ]; then touch ${BUILD_LOG} || error_exit "Could not write to log file ${BUILD_LOG}" build 2>&1 | tee ${BUILD_LOG} else build fi rc=$? exit $rc # # END of main ############################################################################