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
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 |
|
|
|
|