aboutsummaryrefslogtreecommitdiffstats
path: root/nfvbenchvm/dib
diff options
context:
space:
mode:
authorGwenael Lambrouin <gwenael.lambrouin@orange.com>2021-12-13 17:35:18 +0100
committerGwenael Lambrouin <gwenael.lambrouin@orange.com>2022-03-04 09:17:23 +0100
commit415d892039c4dc75a0b7fe6158268dfb0169ce7b (patch)
tree1bca366a6c2a4b8f77b53dc147129e8aaa7478e8 /nfvbenchvm/dib
parentebf68732e277ab06175df8a0fcde46dc7a730321 (diff)
nfvbenchvm: add option to use local nfvbench code
build-image.sh has a new option -s to build the generator VM image from the local nfvbench code (Git working copy) instead of the master branch of nfvbench repository on OPNFV Gerrit. This is useful for testing during the development phases. When this option is used, the version of the generator VM image is extended with nfvbench development version number to be able to distinguish the development images from the latest published image. Change-Id: If21cbf2be59ff4f4110ebc157af0f934b98bddcb Signed-off-by: Gwenael Lambrouin <gwenael.lambrouin@orange.com>
Diffstat (limited to 'nfvbenchvm/dib')
-rwxr-xr-xnfvbenchvm/dib/build-image.sh93
-rwxr-xr-xnfvbenchvm/dib/elements/nfvbenchvm/post-install.d/52-nfvbench-script18
2 files changed, 92 insertions, 19 deletions
diff --git a/nfvbenchvm/dib/build-image.sh b/nfvbenchvm/dib/build-image.sh
index 445807b..8ee9bf3 100755
--- a/nfvbenchvm/dib/build-image.sh
+++ b/nfvbenchvm/dib/build-image.sh
@@ -11,8 +11,8 @@ set -euo pipefail
DEBUG=no
verify_only=0
-generator_only=0
-loopvm_only=0
+build_generator=0
+build_loopvm=0
__prefix__=""
# Artifact URL
@@ -23,6 +23,9 @@ __version__=0.15
loopvm_image_name=nfvbenchvm_centos-$__version__
generator_image_name=nfvbenchvm_centos-generator-$__version__
+# Default values for nfvbenchvm dib element variables
+export DIB_NFVBENCH_CODE_ORIGIN=opnfv-gerrit
+
# ----------------------------------------------------------------------------
# Parse command line options and configure the script
@@ -38,6 +41,8 @@ OPTIONS
-l: build NFVbench loop VM image
-g: build NFVbench generator image
-v: verify only (build but do not push to google storage)
+ -s: use local nfvbench code instead of cloning from OPNFV gerrit
+ (only relevant for NFVbench generator image)
-t: enable debug trace (set -x + DIB_DEBUG_TRACE=1)
-d: start debug shell in image chroot in case of build error
@@ -46,17 +51,20 @@ EOF
exit 1
}
-while getopts ":lgvtdh" opt; do
+while getopts ":lgvstdh" opt; do
case $opt in
l)
- loopvm_only=1
+ build_loopvm=1
;;
g)
- generator_only=1
+ build_generator=1
;;
v)
verify_only=1
;;
+ s)
+ export DIB_NFVBENCH_CODE_ORIGIN=static
+ ;;
t)
set -x
export DIB_DEBUG_TRACE=1
@@ -76,6 +84,42 @@ while getopts ":lgvtdh" opt; do
done
+# Build all VM images if the image to build is not specified on the CLI
+if [[ $build_generator -eq 0 ]] && [[ $build_loopvm -eq 0 ]]; then
+ build_generator=1
+ build_loopvm=1
+fi
+
+if [[ "${DIB_NFVBENCH_CODE_ORIGIN}" == "static" ]] && [[ $build_generator -eq 0 ]]; then
+ echo "Error: option -s is only relevant to the build of the generator image"
+ exit 1
+fi
+
+
+# ----------------------------------------------------------------------------
+# Copy local nfvbench code to elements/nfvbenchvm/static/opt/nfvbench
+# ----------------------------------------------------------------------------
+
+function copy_local_nfvbench_code_to_static_dir {
+ echo "Copy local nfvbench code to elements/nfvbenchvm/static/opt"
+ # Create elements/nfvbenchvm/static/opt/ directory if it does not exist and
+ # move there
+ pushd $(dirname $0)/elements/nfvbenchvm/static
+ [ -d opt ] || mkdir opt
+ cd opt
+
+ # Remove nfvbench code if it is already there
+ [ -d nfvbench ] && rm -rf nfvbench
+
+ # Use git to "copy" the local nfvbench code.
+ # This will include all the committed changes of the current branch.
+ git clone ../../../../../.. nfvbench
+
+ # Go back to the current directory when this function was called
+ popd
+}
+
+
# ----------------------------------------------------------------------------
# Configure and start the nfvbenchvm image build
# ----------------------------------------------------------------------------
@@ -172,18 +216,31 @@ function build_image {
# Main program
# ----------------------------------------------------------------------------
-if [ ! $generator_only -eq 1 ] && [ ! $loopvm_only -eq 1 ]; then
- echo "Build loop VM image"
- build_image $loopvm_image_name
- echo "Build generator image"
- build_image $generator_image_name
-else
- if [ $loopvm_only -eq 1 ]; then
- echo "Build loop VM image"
- build_image $loopvm_image_name
- fi
- if [ $generator_only -eq 1 ]; then
- echo "Build generator image"
- build_image $generator_image_name
+if [ $build_loopvm -eq 1 ]; then
+ echo "Build loop VM image"
+ build_image $loopvm_image_name
+fi
+
+if [ $build_generator -eq 1 ]; then
+ echo "Build generator image"
+
+ if [[ "${DIB_NFVBENCH_CODE_ORIGIN}" == "static" ]]; then
+ echo "Use local nfvbench code"
+ copy_local_nfvbench_code_to_static_dir
+
+ # Append nfvbench version number to the image name:
+ # during development, this is useful to distinguish the development
+ # images from the latest published image.
+ #
+ # To avoid confusion, we use the same versioning as nfvbench (see
+ # nfvbench/__init__.py), although "git describe" would give us a better
+ # number with respect to uniqueness. So we will typically get something
+ # like "5.0.4.dev31" where "5.0.4" is the latest annotated tag ("5.0.3")
+ # plus one and where dev31 indicates the number of commits (31) since
+ # that tag.
+ nfvbench_version=$(python -c 'import pbr.version; print(pbr.version.VersionInfo("nfvbench").version_string_with_vcs())')
+ generator_image_name="${generator_image_name}-${nfvbench_version}"
fi
+
+ build_image $generator_image_name
fi
diff --git a/nfvbenchvm/dib/elements/nfvbenchvm/post-install.d/52-nfvbench-script b/nfvbenchvm/dib/elements/nfvbenchvm/post-install.d/52-nfvbench-script
index 2182c83..37af915 100755
--- a/nfvbenchvm/dib/elements/nfvbenchvm/post-install.d/52-nfvbench-script
+++ b/nfvbenchvm/dib/elements/nfvbenchvm/post-install.d/52-nfvbench-script
@@ -24,7 +24,23 @@ rm -rf /opt/trex/$TREX_VER/automation/trex_control_plane/interactive/trex
# NFVbench installation
cd /opt
-git clone https://gerrit.opnfv.org/gerrit/nfvbench
+if [[ "${DIB_NFVBENCH_CODE_ORIGIN}" == "static" ]]; then
+ # nfvbench code has been copied by the install-static element to
+ # /opt/nfvbench without the .git/ directory. But pip will need that .git/
+ # directory to compute nfvbench version, so will now finish the incomplete
+ # job of install-static:
+ STATIC_NFVBENCH_CODE="$(dirname $0)/../static/opt/nfvbench"
+ [ -d "${STATIC_NFVBENCH_CODE}" ] || {
+ echo "Error: directory ${STATIC_NFVBENCH_CODE} missing."
+ echo " You requested a build from local nfvbench code with"
+ echo " DIB_NFVBENCH_CODE_ORIGIN=static, but you likely forgot"
+ echo " to clone nfvbench code in elements/nfvbenchvm/static/opt/nfvbench"
+ exit 1
+ }
+ rsync -lr "${STATIC_NFVBENCH_CODE}"/ /opt/nfvbench/
+else
+ git clone https://gerrit.opnfv.org/gerrit/nfvbench
+fi
cd nfvbench/
python3 -m pip install . --use-deprecated=legacy-resolver
cp xtesting/testcases.yaml /usr/local/lib/python3.6/site-packages/xtesting/ci/testcases.yaml