Fix protect images 06/65606/5
authorAric Gardner <agardner@linuxfoundation.org>
Wed, 23 Sep 2020 18:52:41 +0000 (14:52 -0400)
committerAric Gardner <agardner@linuxfoundation.org>
Wed, 23 Sep 2020 19:55:30 +0000 (19:55 +0000)
Projects that do not have images in jjb
are failing this step of the build

fix code so we don't need to mess with set -u
or shellcheck disable
also only merge arrays if needed

Signed-off-by: Aric Gardner <agardner@linuxfoundation.org>
Change-Id: I119b68e344a34bb5bbe8baea2cc310497b7ee629

releasenotes/notes/openstack-protect-in-use-images-cf8e4f722a1512ec.yaml [new file with mode: 0644]
shell/openstack-protect-in-use-images.sh

diff --git a/releasenotes/notes/openstack-protect-in-use-images-cf8e4f722a1512ec.yaml b/releasenotes/notes/openstack-protect-in-use-images-cf8e4f722a1512ec.yaml
new file mode 100644 (file)
index 0000000..72f16e6
--- /dev/null
@@ -0,0 +1,9 @@
+---
+fixes:
+  - |
+    openstack-protect-in-use-images.sh
+    Projects that do not have images in jjb were failing this step of the build.
+    code now runs with set -eu -o pipefail for the duration of the script.
+    shellcheck disable comments no longer needed and removed.
+    Code now only merges arrays if non-empty.
+    Simplify dedupe array code.
index a422cd8..e229906 100644 (file)
 # getting purged by the image cleanup script.
 # This script assumes images prefixed with the string "ZZCI - " are ci-managed
 # images.
+set -eu -o pipefail
 echo "---> Protect in-use images"
-
 os_cloud="${OS_CLOUD:-vex}"
 
-set -eu -o pipefail
+images=()
+while read -r -d $'\n' ; do
+    images+=("$REPLY")
+done < <(grep -r IMAGE_NAME --include \*.cfg jenkins-config \
+         | awk -F'=' '{print $2}' \
+         | sort -u)
+
+jjbimages=()
+while read -r -d $'\n' ; do
+    jjbimages+=("$REPLY")
+done < <(grep -r 'ZZCI - ' --include \*.yaml jjb \
+         | awk -F": " '{print $3}' \
+         | sed -e "s:'::;s:'$::;/^$/d" -e 's/^"//' -e 's/"$//' \
+         | sort -u)
+
+if ! [[ ${#images[@]} -eq 0 ]]; then
+    echo "INFO: There are images to protect defined in jenkins-config."
+else
+    echo "ERROR: No images detected in the jenkins-config dir."
+    exit 1
+fi
 
-declare -a images
-images+=("$(grep -r IMAGE_NAME --include \*.cfg jenkins-config \
-    | awk -F'=' '{print $2}' | sort -u)")
-set +o pipefail  # Not all projects have images in YAML files and grep returns non-zero on 0 results
-# Ignore SC2179 since we do not want () to result in an empty array item.
-#shellcheck disable=SC2179
-images+=("$(grep -r 'ZZCI - ' --include \*.yaml jjb \
-    | awk -F": " '{print $3}' | sed -e "s:'::;s:'$::;/^$/d" -e 's/^"//' -e 's/"$//' | sort -u)")
-set -o pipefail
-readarray -t images <<< "$(for i in "${images[@]}"; do echo "$i"; done | sort -u)"
+if ! [[ ${#jjbimages[@]} -eq 0 ]]; then
+    echo "INFO: There are additional images to protect in the jjb dir."
+    images=("${images[@]}" "${jjbimages[@]}")
+    #dedupe
+    readarray -t images < <(printf '%s\n' "${images[@]}" | sort -u)
+fi
+
+
+echo "INFO: Protecting the following images:"
+for image in "${images[@]}"; do
+    echo "$image"
+done
 
 for image in "${images[@]}"; do
     os_image_protected=$(openstack --os-cloud "$os_cloud" \