95 lines
2.4 KiB
Bash
Executable File
95 lines
2.4 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
function usage() {
|
|
echo "$0 <recipes|apps>: check for co-op cloud recipes"
|
|
echo
|
|
echo "OPTIONS"
|
|
echo "-s|--servers <SERVER_FILE> provide a file with servers"
|
|
}
|
|
|
|
while [[ $# -gt 0 ]]; do
|
|
case $1 in
|
|
-s|--servers)
|
|
server_file="$2"
|
|
shift # past argument
|
|
shift # past value
|
|
;;
|
|
recipes)
|
|
action="recipes"
|
|
shift # past argument
|
|
shift # past value
|
|
;;
|
|
apps)
|
|
action="apps"
|
|
shift # past argument
|
|
shift # past value
|
|
;;
|
|
-h|--help)
|
|
usage
|
|
exit 1
|
|
;;
|
|
*)
|
|
echo "Unknown argument"
|
|
usage
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
if [ -z "$action" ]; then
|
|
usage
|
|
exit 1
|
|
fi
|
|
|
|
if [ -n "$server_file" ]; then
|
|
readarray -t servers < "$server_file"
|
|
else
|
|
readarray -t servers < <(./bin/gum choose --no-limit < infrastructure-data/coopcloud-servers)
|
|
fi
|
|
|
|
log_file=$(mktemp)
|
|
|
|
echo "$(tput setaf 7)Logging to $log_file $(tput sgr0)"
|
|
echo
|
|
|
|
if [ "$action" = "recipes" ]; then
|
|
readarray -t recipes < <(for server in "${servers[@]}"; do
|
|
abra app ls -s "$server" -m | jq -r ".\"$server\".apps[].recipe"
|
|
done | sort -u)
|
|
|
|
for recipe in "${recipes[@]}"; do
|
|
echo "$(tput setaf 2)$recipe $(tput sgr0)"
|
|
readarray -t line < <(abra recipe upgrade -n -m "$recipe" 2>>"$log_file" | jq -r '. | keys[] as $k | .[$k].service, (.[$k].upgrades | length), (.[$k].upgrades[0])')
|
|
if [ "${#line[@]}" = 0 ]; then
|
|
echo "$(tput setaf 3)No updates for $recipe $(tput sgr0)"
|
|
else
|
|
for (( i = 0; i < $(("${#line[@]}" / 3)); i++ )); do
|
|
echo "${line[$((i * 3))]} has ${line[$((i * 3 + 1))]} available update(s), latest is ${line[$((i * 3 + 2))]}"
|
|
done
|
|
fi
|
|
echo
|
|
done
|
|
|
|
echo
|
|
elif [ "$action" == "apps" ]; then
|
|
for server in "${servers[@]}"; do
|
|
echo "$(tput setaf 2)Server: $server$(tput sgr0)"
|
|
OLDIFS="$IFS"
|
|
IFS=$'\n'
|
|
for app_data in $(abra app ls -s "$server" -S -m | jq -c ".\"$server\".apps[]"); do
|
|
IFS="|" read recipe appName version upgrade < <(echo "$app_data" | jq -r '[.recipe, .appName, .version, .upgrade] | join("|")')
|
|
if [ ! "$upgrade" = "latest" ]; then echo -n "$(tput setaf 3)"; fi
|
|
if [ "$upgrade" = "unknown" ]; then echo -n "$(tput setaf 1)"; fi
|
|
echo "$appName ($recipe): $version → $upgrade"
|
|
echo -n "$(tput sgr0)"
|
|
done
|
|
IFS="$OLDIFS"
|
|
|
|
echo
|
|
done
|
|
fi
|
|
|
|
echo "$(tput setaf 3)Errors and warnings: $(tput sgr0)"
|
|
grep -v "no new versions available for" "$log_file"
|
|
rm "$log_file"
|