54 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			54 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/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
 | 
						|
 |