#!/bin/bash function usage() { echo "$0 : check for co-op cloud recipes" echo echo "OPTIONS" echo "-s|--servers 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"