Eric Paris 3b954b3
#!/bin/bash
Eric Paris 3b954b3
Eric Paris 3b954b3
usage() {
Eric Paris 3b954b3
	echo "$0 [-f FLANNEL-ENV-FILE] [-d DOCKER-ENV-FILE] [-i] [-c] [-m]
Eric Paris 3b954b3
Eric Paris 3b954b3
Generate Docker daemon options based on flannel env file
Eric Paris 3b954b3
OPTIONS:
Eric Paris 3b954b3
	-f	Path to flannel env file. Defaults to /run/flannel/subnet.env
Eric Paris 3b954b3
	-d	Path to Docker env file to write to. Defaults to /run/docker_opts.env
Eric Paris 3b954b3
	-i	Output each Docker option as individual var. e.g. DOCKER_OPT_MTU=1500
Eric Paris 3b954b3
	-c	Output combined Docker options into DOCKER_OPTS var
Eric Paris 3b954b3
	-k	Set the combined options key to this value (default DOCKER_OPTS=)
Eric Paris 3b954b3
	-m	Do not output --ip-masq (useful for older Docker version)
Eric Paris 3b954b3
" >/dev/stderr 
Eric Paris 3b954b3
Eric Paris 3b954b3
	exit 1
Eric Paris 3b954b3
}
Eric Paris 3b954b3
Eric Paris 3b954b3
flannel_env="/run/flannel/subnet.env"
Eric Paris 3b954b3
docker_env="/run/docker_opts.env"
Eric Paris 3b954b3
combined_opts_key="DOCKER_OPTS"
Eric Paris 3b954b3
indiv_opts=false
Eric Paris 3b954b3
combined_opts=false
Eric Paris 3b954b3
ipmasq=true
Eric Paris 3b954b3
Eric Paris 3b954b3
while getopts "f:d:ick:" opt; do
Eric Paris 3b954b3
	case $opt in
Eric Paris 3b954b3
		f)
Eric Paris 3b954b3
			flannel_env=$OPTARG
Eric Paris 3b954b3
			;;
Eric Paris 3b954b3
		d)
Eric Paris 3b954b3
			docker_env=$OPTARG
Eric Paris 3b954b3
			;;
Eric Paris 3b954b3
		i)
Eric Paris 3b954b3
			indiv_opts=true
Eric Paris 3b954b3
			;;
Eric Paris 3b954b3
		c)
Eric Paris 3b954b3
			combined_opts=true
Eric Paris 3b954b3
			;;
Eric Paris 3b954b3
		m)
Eric Paris 3b954b3
			ipmasq=false
Eric Paris 3b954b3
			;;
Eric Paris 3b954b3
		k)
Eric Paris 3b954b3
			combined_opts_key=$OPTARG
Eric Paris 3b954b3
			;;
Eric Paris 3b954b3
		\?)
Eric Paris 3b954b3
			usage
Eric Paris 3b954b3
			;;
Eric Paris 3b954b3
	esac
Eric Paris 3b954b3
done
Eric Paris 3b954b3
Eric Paris 3b954b3
if [ $indiv_opts = false ] && [ $combined_opts = false ]; then
Eric Paris 3b954b3
	indiv_opts=true
Eric Paris 3b954b3
	combined_opts=true
Eric Paris 3b954b3
fi
Eric Paris 3b954b3
Eric Paris 3b954b3
if [ -f "$flannel_env" ]; then
Eric Paris 3b954b3
	source $flannel_env
Eric Paris 3b954b3
fi
Eric Paris 3b954b3
Eric Paris 3b954b3
if [ -n "$FLANNEL_SUBNET" ]; then
Eric Paris 3b954b3
	DOCKER_OPT_BIP="--bip=$FLANNEL_SUBNET"
Eric Paris 3b954b3
fi
Eric Paris 3b954b3
Eric Paris 3b954b3
if [ -n "$FLANNEL_MTU" ]; then
Eric Paris 3b954b3
	DOCKER_OPT_MTU="--mtu=$FLANNEL_MTU"
Eric Paris 3b954b3
fi
Eric Paris 3b954b3
Eric Paris 3b954b3
if [ "$FLANNEL_IPMASQ" = true ] && [ $ipmasq = true ] ; then
Eric Paris 3b954b3
	DOCKER_OPT_IPMASQ="--ip-masq=false"
Eric Paris 3b954b3
fi
Eric Paris 3b954b3
Eric Paris 3b954b3
eval docker_opts="\$${combined_opts_key}"
Eric Paris 3b954b3
docker_opts+=" "
Eric Paris 3b954b3
Eric Paris 3b954b3
echo -n "" >$docker_env
Eric Paris 3b954b3
for opt in $(compgen -v DOCKER_OPT_); do
Eric Paris 3b954b3
	eval val=\$$opt
Eric Paris 3b954b3
Eric Paris 3b954b3
	if [ "$indiv_opts" = true ]; then
Eric Paris 3b954b3
		echo "$opt=\"$val\"" >>$docker_env
Eric Paris 3b954b3
	fi
Eric Paris 3b954b3
Eric Paris 3b954b3
	docker_opts+="$val "
Eric Paris 3b954b3
done
Eric Paris 3b954b3
Eric Paris 3b954b3
if [ "$combined_opts" = true ]; then
Eric Paris 3b954b3
	echo "${combined_opts_key}=\"${docker_opts}\"" >>$docker_env
Eric Paris 3b954b3
fi