inkluster
2.97 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#!/usr/bin/env bash
# OS/X does not include GPLv3 versions of bash, which precludes
# use of associative array support.
set -e
DEFAULT_INKLUSTER_IMAGE=brainfood/inkluster-dev
DEFAULT_INKLUSTER_VOLUME_NAME=""
if [[ -e values/apiserver-env.yaml ]]; then
buildName="$(sed -n -e 's/^buildName: "\(.*\)"$/\1/p' "values/apiserver-env.yaml")"
[[ $buildName ]] && DEFAULT_INKLUSTER_VOLUME_NAME="$buildName"
fi
declare -a config_keys=(INKLUSTER_IMAGE INKLUSTER_VOLUME_NAME)
declare -a config_files=()
if [[ -e .inkluster.env ]]; then
config_files+=("$PWD/.inkluster.env")
fi
# This copies ENV settings into the config, that haven't been set on the command line.
for setting in "${config_keys[@]}"; do
[[ ${!setting} ]] && eval CONFIG_$setting='"${!'setting'}"'
done
declare -a REST=()
while [[ $# -gt 0 ]]; do
case "$1" in
(-c)
config_files+=("$2")
shift 2
;;
(-i)
CONFIG_INKLUSTER_IMAGE="$2"
shift 2
;;
(-v)
CONFIG_INKLUSTER_VOLUME_NAME="$2"
shift 2
;;
(*)
break
;;
esac
done
# Now we copy the config settings into ENV
for config_file in "${config_files[@]}"; do
if [[ ! -e $config_file ]]; then
echo "Config file $config_file does not exist!" 1>&2
exit 1
fi
. "$config_file"
config_dir="${config_file%/*}"
[[ $config_dir = $config_file ]] && config_dir="$PWD"
if [[ -e $config_dir/values/apiserver-env.yaml ]]; then
buildName="$(sed -n -e 's/^buildName: "\(.*\)"$/\1/p' "$config_dir/values/apiserver-env.yaml")"
[[ $buildName && -z $INKLUSTER_VOLUME_NAME ]] && INKLUSTER_VOLUME_NAME="$buildName"
fi
done
# Any settings read from the config files, but not yet set, get applied.
for setting in "${config_keys[@]}"; do
if eval [[ '${CONFIG_'$setting'}' ]]; then
eval $setting='"${CONFIG_'$setting'}"'
else
[[ -z ${!setting} ]] && eval $setting='"${DEFAULT_'$setting'}"'
fi
done
has_volume=
if [[ $INKLUSTER_VOLUME_NAME ]]; then
docker volume inspect "inkluster-$INKLUSTER_VOLUME_NAME" 1>/dev/null 2>/dev/null && has_volume=1
fi
case "$1" in
(reset)
[[ $has_volume ]] && docker volume rm "inkluster-$INKLUSTER_VOLUME_NAME"
exit
;;
esac
declare -a docker_args=(--rm -i)
[[ -t 0 ]] && docker_args+=(-t)
docker_args+=(-v /:/srv/host-root)
docker_args+=(-w /srv/host-root/$PWD)
[[ -S /var/run/docker.sock ]] && docker_args+=(-v /var/run/docker.sock:/var/run/docker.sock)
[[ $SSH_AUTH_SOCK ]] && docker_args+=(-e "SSH_AUTH_SOCK=/srv/host-root/$SSH_AUTH_SOCK")
network=
if [[ $KUBECONFIG ]]; then
network=host
docker_args+=(-e "KUBECONFIG=/srv/host-root/$KUBECONFIG")
elif [[ -e $HOME/.kube/config ]]; then
network=host
docker_args+=(-v "$HOME/.kube/config:/home/tool/.kube/config")
fi
if [[ $network ]]; then
docker_args+=(--network host)
fi
docker_args+=(-e MAP_UID="$(id -u)" -e MAP_GROUPS="$(id -G)")
if [[ $INKLUSTER_VOLUME_NAME ]]; then
if [[ ! $has_volume ]]; then
docker volume create "inkluster-$INKLUSTER_VOLUME_NAME" 1>/dev/null
fi
docker_args+=(-v "inkluster-$INKLUSTER_VOLUME_NAME":/run)
fi
docker run "${docker_args[@]}" "$INKLUSTER_IMAGE" "$@"