-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathsindplz
executable file
·155 lines (139 loc) · 3.77 KB
/
sindplz
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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
#!/bin/bash
set -euo pipefail
SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd)
POSITIONAL_ARGS=()
if [ -f $SCRIPT_DIR/.sindplz.env ]; then
source $SCRIPT_DIR/.sindplz.env
fi
while [[ $# -gt 0 ]]; do
case $1 in
# -e|--extension)
# EXTENSION="$2"
# shift # past argument
# shift # past value
# ;;
-* | --*)
echo "Unknown option $1"
exit 1
;;
*)
POSITIONAL_ARGS+=("$1") # save positional arg
shift # past argument
;;
esac
done
nodes=2
SSH_PUBLIC_KEY=${SSH_PUBLIC_KEY:-${SSH_PRIVATE_KEY}.pub}
ensure_public_key() {
if [ ! -f $SSH_PUBLIC_KEY ]; then
echo >&2 "no public key at $SSH_PUBLIC_KEY, set SSH_PUBLIC_KEY env to point to a valid ssh public key"
exit 2
fi
}
ensure_private_key() {
if [ ! -f $SSH_PRIVATE_KEY ]; then
echo >&2 "no private key at $SSH_PRIVATE_KEY, set SSH_PRIVATE_KEY env to point to a valid ssh private key"
exit 2
fi
}
stop_nodes() {
node_names=$(seq $nodes | sed 's/^/node-/' | xargs)
docker stop $node_names
}
start_nodes() {
node_names=$(seq $nodes | sed 's/^/node-/' | xargs)
docker start $node_names
}
# shellcheck disable=SC2128
case "$POSITIONAL_ARGS" in
create)
ensure_public_key
node_names=$(seq $nodes | sed 's/^/node-/' | xargs)
set +u
should_build="${SIND_BUILD}"
set -u
if [[ -n "${should_build}" ]]; then
docker build -t ghcr.io/skateco/sind $SCRIPT_DIR/../images/sind
fi
docker rm -f $node_names
for f in $(seq $nodes); do
docker run -d \
--privileged \
-p 222$f:22 \
--dns 127.0.0.1 \
--cgroupns host \
--hostname node-$f \
--tmpfs /tmp \
--tmpfs /run \
--tmpfs /run/lock \
--name node-$f ghcr.io/skateco/sind
auth_key=$(cat $SSH_PUBLIC_KEY)
docker exec node-$f bash -c "echo '$auth_key' > /home/skate/.ssh/authorized_keys"
done
;;
info)
# for f in $(seq $nodes); do
# multipass info node-$f
# done
;;
ips)
for f in $(seq $nodes); do
echo "127.0.0.1 222$f"
done
;;
start)
start_nodes
;;
stop)
stop_nodes
;;
remove)
node_names=$(seq $nodes | sed 's/^/node-/' | xargs)
docker rm -f $node_names
;;
shell)
SESSION="sindplz"
tmux kill-session -t $SESSION || true
tmux new-session -d -s $SESSION
# todo, split $nodes-1 times
for f in $(seq $nodes); do
tmux send-keys -t $SESSION "docker exec -it node-$f /bin/bash" Enter
if [ $f -ne $nodes ]; then
tmux split-window -h -t $SESSION
fi
done
tmux attach-session -t $SESSION
;;
skate)
ensure_private_key
for f in $(seq $nodes); do
peer_host=$(docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' node-$f)
cargo run --bin skate create node --name node-$f --host 127.0.0.1 --peer-host $peer_host --port 222$f --subnet-cidr "20.${f}.0.0/16" --key $SSH_PRIVATE_KEY --user skate
done
;;
skatelet)
set -x
arch=$(docker exec node-1 arch|tr -d '\r')
if [ "$(arch)" = "$arch" ]; then
binary=target/release/skatelet
if [ ! -f $binary ]; then
set -x
cargo build --bin skatelet --release --locked
set +x
fi
else
target=${arch}-unknown-linux-gnu
binary=target/$target/release/skatelet
if [ ! -f $binary ]; then
set -x
cross build --bin skatelet --release --locked --target "$target"
set +x
fi
fi
echo "copying skatelet binaries for ${arch}"
for f in $(seq $nodes); do
docker cp $binary node-$f:/
docker exec node-$f sudo mv skatelet /usr/local/bin/skatelet
done
;;
esac