You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

53 lines
1.1 KiB

#!/bin/bash
limit=''
force=''
while test $# -gt 0; do
case "$1" in
(-h|--help) cat <<EOF
$0 [OPTIONS] FILES…
OPTIONS
-h, --help show this help
-s, --limit service limit update to given service
-f, --force force update
FILES…
List of stack names or yaml files to deploy. There must be yaml
files with the same name. The extension .yaml may be given or not.
DESCRIPTION
Updates the docker images of all services in the given stacks.
EOF
exit;;
(-l|--limit) shift; limit=$1;;
(-f|--force) force='--force';;
(*) break;;
esac
if test $# -lt 1; then
echo "error: missing argument, try $0 --help" 1>&2
exit 1
fi
shift
done
for f in $*; do
name=${f%.yaml}
file=${name}.yaml
name=${name##*/}
echo "upgrading ${name}"
IFS="
"
for param in $(sed -n '/^ *\([^:]\+\): *$/{s,,'"${name}"'_\1,;h};/^ *image: */{s///;G;s/\n/ /p}' $file); do
IFS=" "
if [ -z "$limit" ] || [[ "${param}" =~ " ${name}_${limit}" ]]; then
echo "....update $param: docker service update --image $param"
docker service update $force --image $param
fi
done
done