root / tools / vcluster-setup.in @ bfca72bc
History | View | Annotate | Download (7.6 kB)
1 | 29386d3e | Michael Hanselmann | #!/bin/bash |
---|---|---|---|
2 | 29386d3e | Michael Hanselmann | # |
3 | 29386d3e | Michael Hanselmann | |
4 | 29386d3e | Michael Hanselmann | # Copyright (C) 2012 Google Inc. |
5 | 29386d3e | Michael Hanselmann | # |
6 | 29386d3e | Michael Hanselmann | # This program is free software; you can redistribute it and/or modify |
7 | 29386d3e | Michael Hanselmann | # it under the terms of the GNU General Public License as published by |
8 | 29386d3e | Michael Hanselmann | # the Free Software Foundation; either version 2 of the License, or |
9 | 29386d3e | Michael Hanselmann | # (at your option) any later version. |
10 | 29386d3e | Michael Hanselmann | # |
11 | 29386d3e | Michael Hanselmann | # This program is distributed in the hope that it will be useful, but |
12 | 29386d3e | Michael Hanselmann | # WITHOUT ANY WARRANTY; without even the implied warranty of |
13 | 29386d3e | Michael Hanselmann | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
14 | 29386d3e | Michael Hanselmann | # General Public License for more details. |
15 | 29386d3e | Michael Hanselmann | # |
16 | 29386d3e | Michael Hanselmann | # You should have received a copy of the GNU General Public License |
17 | 29386d3e | Michael Hanselmann | # along with this program; if not, write to the Free Software |
18 | 29386d3e | Michael Hanselmann | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA |
19 | 29386d3e | Michael Hanselmann | # 02110-1301, USA. |
20 | 29386d3e | Michael Hanselmann | |
21 | 29386d3e | Michael Hanselmann | set -e -u -o pipefail |
22 | 29386d3e | Michael Hanselmann | shopt -s extglob |
23 | 29386d3e | Michael Hanselmann | |
24 | 29386d3e | Michael Hanselmann | readonly self=$(readlink -f $0) |
25 | 29386d3e | Michael Hanselmann | readonly ensure_dirs=@PKGLIBDIR@/ensure-dirs |
26 | a6d3644b | Michael Hanselmann | readonly action_shortcuts=( start stop restart status watcher ) |
27 | 29386d3e | Michael Hanselmann | readonly default_nodecount=5 |
28 | 29386d3e | Michael Hanselmann | readonly default_instcount=10 |
29 | 29386d3e | Michael Hanselmann | readonly default_netprefix=192.0.2 |
30 | 29386d3e | Michael Hanselmann | readonly default_netdev=eth0 |
31 | a6d3644b | Michael Hanselmann | readonly default_initscript=@SYSCONFDIR@/init.d/ganeti |
32 | 29386d3e | Michael Hanselmann | readonly cluster_name=cluster |
33 | 36683bad | Michael Hanselmann | readonly etc_hosts_filename=/etc/hosts |
34 | 29386d3e | Michael Hanselmann | |
35 | 29386d3e | Michael Hanselmann | # IP address space: |
36 | 29386d3e | Michael Hanselmann | # Cluster: .1 |
37 | 29386d3e | Michael Hanselmann | # Nodes: .10-.99 |
38 | 29386d3e | Michael Hanselmann | # Instances: .100-.254 |
39 | 29386d3e | Michael Hanselmann | readonly first_node_ipaddr_octet=10 |
40 | 29386d3e | Michael Hanselmann | readonly first_inst_ipaddr_octet=100 |
41 | 29386d3e | Michael Hanselmann | |
42 | 29386d3e | Michael Hanselmann | readonly max_node_count=$((first_inst_ipaddr_octet - first_node_ipaddr_octet)) |
43 | 29386d3e | Michael Hanselmann | readonly max_instance_count=$((255 - first_inst_ipaddr_octet)) |
44 | 29386d3e | Michael Hanselmann | |
45 | 29386d3e | Michael Hanselmann | usage() { |
46 | 1266a29b | Michael Hanselmann | echo "Usage: $0 [-E] [-N] [-c <number>] [-i <number>] [-p <prefix>]"\ |
47 | a6d3644b | Michael Hanselmann | '[-n <netdev>] [-I <path>] <directory>' |
48 | 29386d3e | Michael Hanselmann | echo |
49 | 29386d3e | Michael Hanselmann | echo 'Options:' |
50 | 29386d3e | Michael Hanselmann | echo " -c Number of virtual nodes (defaults to $default_nodecount)" |
51 | 29386d3e | Michael Hanselmann | echo " -i Number of instances (defaults to $default_instcount)" |
52 | 29386d3e | Michael Hanselmann | echo " -p IPv4 network prefix (defaults to $default_netprefix)" |
53 | 29386d3e | Michael Hanselmann | echo ' -n Network device for virtual IP addresses (defaults to'\ |
54 | 29386d3e | Michael Hanselmann | "$default_netdev)" |
55 | a6d3644b | Michael Hanselmann | echo " -I Path to init script (defaults to $default_initscript)" |
56 | 36683bad | Michael Hanselmann | echo " -E Do not modify $etc_hosts_filename" |
57 | 1266a29b | Michael Hanselmann | echo ' -N Do not configure networking' |
58 | 29386d3e | Michael Hanselmann | } |
59 | 29386d3e | Michael Hanselmann | |
60 | 29386d3e | Michael Hanselmann | # Variables for options |
61 | 29386d3e | Michael Hanselmann | nodecount=$default_nodecount |
62 | 29386d3e | Michael Hanselmann | instcount=$default_instcount |
63 | 29386d3e | Michael Hanselmann | netprefix=$default_netprefix |
64 | 29386d3e | Michael Hanselmann | netdev=$default_netdev |
65 | a6d3644b | Michael Hanselmann | initscript=$default_initscript |
66 | 1266a29b | Michael Hanselmann | etchosts=1 |
67 | 1266a29b | Michael Hanselmann | networking=1 |
68 | 29386d3e | Michael Hanselmann | |
69 | 29386d3e | Michael Hanselmann | # Parse options |
70 | a6d3644b | Michael Hanselmann | while getopts :hENc:p:n:i:I: opt; do |
71 | 29386d3e | Michael Hanselmann | case "$opt" in |
72 | 29386d3e | Michael Hanselmann | h) |
73 | 29386d3e | Michael Hanselmann | usage |
74 | 29386d3e | Michael Hanselmann | exit 0 |
75 | 29386d3e | Michael Hanselmann | ;; |
76 | 29386d3e | Michael Hanselmann | c) |
77 | 29386d3e | Michael Hanselmann | nodecount="$OPTARG" |
78 | 29386d3e | Michael Hanselmann | if [[ "$nodecount" != +([0-9]) ]]; then |
79 | 29386d3e | Michael Hanselmann | echo "Invalid node count number: $nodecount" >&2 |
80 | 29386d3e | Michael Hanselmann | exit 1 |
81 | 29386d3e | Michael Hanselmann | elif (( nodecount > max_node_count )); then |
82 | 29386d3e | Michael Hanselmann | echo "Node count must be $max_node_count or lower" >&2 |
83 | 29386d3e | Michael Hanselmann | exit 1 |
84 | 29386d3e | Michael Hanselmann | fi |
85 | 29386d3e | Michael Hanselmann | ;; |
86 | 29386d3e | Michael Hanselmann | i) |
87 | 29386d3e | Michael Hanselmann | instcount="$OPTARG" |
88 | 29386d3e | Michael Hanselmann | if [[ "$instcount" != +([0-9]) ]]; then |
89 | 29386d3e | Michael Hanselmann | echo "Invalid instance count number: $instcount" >&2 |
90 | 29386d3e | Michael Hanselmann | exit 1 |
91 | 29386d3e | Michael Hanselmann | elif (( instcount > max_instance_count )); then |
92 | 29386d3e | Michael Hanselmann | echo "Instance count must be $max_instance_count or lower" >&2 |
93 | 29386d3e | Michael Hanselmann | exit 1 |
94 | 29386d3e | Michael Hanselmann | fi |
95 | 29386d3e | Michael Hanselmann | ;; |
96 | 29386d3e | Michael Hanselmann | p) |
97 | 29386d3e | Michael Hanselmann | netprefix="$OPTARG" |
98 | 29386d3e | Michael Hanselmann | if [[ "$netprefix" != +([0-9]).+([0-9]).+([0-9]) ]]; then |
99 | 29386d3e | Michael Hanselmann | echo "Invalid network prefix: $netprefix" >&2 |
100 | 29386d3e | Michael Hanselmann | exit 1 |
101 | 29386d3e | Michael Hanselmann | fi |
102 | 29386d3e | Michael Hanselmann | ;; |
103 | 29386d3e | Michael Hanselmann | n) |
104 | 29386d3e | Michael Hanselmann | netdev="$OPTARG" |
105 | 29386d3e | Michael Hanselmann | if ! ip link show $netdev >/dev/null; then |
106 | 29386d3e | Michael Hanselmann | echo "Invalid network device: $netdev" >&2 |
107 | 29386d3e | Michael Hanselmann | exit 1 |
108 | 29386d3e | Michael Hanselmann | fi |
109 | 29386d3e | Michael Hanselmann | ;; |
110 | a6d3644b | Michael Hanselmann | I) |
111 | a6d3644b | Michael Hanselmann | initscript="$OPTARG" |
112 | a6d3644b | Michael Hanselmann | if [[ ! -x $initscript ]]; then |
113 | a6d3644b | Michael Hanselmann | echo "Init script '$initscript' is not executable" >&2 |
114 | a6d3644b | Michael Hanselmann | exit 1 |
115 | a6d3644b | Michael Hanselmann | fi |
116 | a6d3644b | Michael Hanselmann | ;; |
117 | 1266a29b | Michael Hanselmann | E) |
118 | 1266a29b | Michael Hanselmann | etchosts= |
119 | 1266a29b | Michael Hanselmann | ;; |
120 | 1266a29b | Michael Hanselmann | N) |
121 | 1266a29b | Michael Hanselmann | networking= |
122 | 1266a29b | Michael Hanselmann | ;; |
123 | 29386d3e | Michael Hanselmann | \?) |
124 | 29386d3e | Michael Hanselmann | echo "Invalid option: -$OPTARG" >&2 |
125 | 29386d3e | Michael Hanselmann | usage >&2 |
126 | 29386d3e | Michael Hanselmann | exit 1 |
127 | 29386d3e | Michael Hanselmann | ;; |
128 | 29386d3e | Michael Hanselmann | :) |
129 | 29386d3e | Michael Hanselmann | echo "Option -$OPTARG requires an argument" >&2 |
130 | 29386d3e | Michael Hanselmann | usage >&2 |
131 | 29386d3e | Michael Hanselmann | exit 1 |
132 | 29386d3e | Michael Hanselmann | ;; |
133 | 29386d3e | Michael Hanselmann | esac |
134 | 29386d3e | Michael Hanselmann | done |
135 | 29386d3e | Michael Hanselmann | |
136 | 29386d3e | Michael Hanselmann | shift $((OPTIND - 1)) |
137 | 29386d3e | Michael Hanselmann | |
138 | 29386d3e | Michael Hanselmann | if [[ "$#" != 1 ]]; then |
139 | 29386d3e | Michael Hanselmann | usage |
140 | 29386d3e | Michael Hanselmann | exit 1 |
141 | 29386d3e | Michael Hanselmann | fi |
142 | 29386d3e | Michael Hanselmann | |
143 | 29386d3e | Michael Hanselmann | readonly rootdir=$1; shift |
144 | 29386d3e | Michael Hanselmann | |
145 | 29386d3e | Michael Hanselmann | if [[ ! -d "$rootdir" ]]; then |
146 | 29386d3e | Michael Hanselmann | echo "Directory '$rootdir' does not exist!" >&2 |
147 | 29386d3e | Michael Hanselmann | exit 1 |
148 | 29386d3e | Michael Hanselmann | fi |
149 | 29386d3e | Michael Hanselmann | |
150 | 29386d3e | Michael Hanselmann | if (( $nodecount < 1 )); then |
151 | 29386d3e | Michael Hanselmann | echo "Must create at least one node, currently requested $nodecount" >&2 |
152 | 29386d3e | Michael Hanselmann | exit 1 |
153 | 29386d3e | Michael Hanselmann | fi |
154 | 29386d3e | Michael Hanselmann | |
155 | 29386d3e | Michael Hanselmann | node_hostname() { |
156 | 29386d3e | Michael Hanselmann | local -r number="$1" |
157 | 29386d3e | Michael Hanselmann | |
158 | 29386d3e | Michael Hanselmann | echo "node$((number + 1))" |
159 | 29386d3e | Michael Hanselmann | } |
160 | 29386d3e | Michael Hanselmann | |
161 | 29386d3e | Michael Hanselmann | instance_hostname() { |
162 | 29386d3e | Michael Hanselmann | local -r number="$1" |
163 | 29386d3e | Michael Hanselmann | |
164 | 29386d3e | Michael Hanselmann | echo "instance$((number + 1))" |
165 | 29386d3e | Michael Hanselmann | } |
166 | 29386d3e | Michael Hanselmann | |
167 | 29386d3e | Michael Hanselmann | node_ipaddr() { |
168 | 29386d3e | Michael Hanselmann | local -r number="$1" |
169 | 29386d3e | Michael Hanselmann | |
170 | 29386d3e | Michael Hanselmann | echo "$netprefix.$((first_node_ipaddr_octet + number))" |
171 | 29386d3e | Michael Hanselmann | } |
172 | 29386d3e | Michael Hanselmann | |
173 | 29386d3e | Michael Hanselmann | instance_ipaddr() { |
174 | 29386d3e | Michael Hanselmann | local -r number="$1" |
175 | 29386d3e | Michael Hanselmann | |
176 | 29386d3e | Michael Hanselmann | echo "$netprefix.$((first_inst_ipaddr_octet + number))" |
177 | 29386d3e | Michael Hanselmann | } |
178 | 29386d3e | Michael Hanselmann | |
179 | 29386d3e | Michael Hanselmann | setup_node() { |
180 | 29386d3e | Michael Hanselmann | local -r number="$1" |
181 | 29386d3e | Michael Hanselmann | local -r nodedir=$rootdir/$(node_hostname $number) |
182 | 29386d3e | Michael Hanselmann | |
183 | 29386d3e | Michael Hanselmann | echo "Setting up node '$(node_hostname $number)' ..." >&2 |
184 | 29386d3e | Michael Hanselmann | |
185 | 29386d3e | Michael Hanselmann | if [[ ! -d $nodedir ]]; then |
186 | 29386d3e | Michael Hanselmann | mkdir $nodedir |
187 | 29386d3e | Michael Hanselmann | fi |
188 | 29386d3e | Michael Hanselmann | |
189 | 29386d3e | Michael Hanselmann | mkdir -p \ |
190 | 6bf7dad4 | Michael Hanselmann | $nodedir@SYSCONFDIR@/{default,ganeti} \ |
191 | 1266a29b | Michael Hanselmann | $nodedir@LOCALSTATEDIR@/lock\ |
192 | 1266a29b | Michael Hanselmann | $nodedir@LOCALSTATEDIR@/{lib,log,run}/ganeti |
193 | 29386d3e | Michael Hanselmann | |
194 | 29386d3e | Michael Hanselmann | GANETI_HOSTNAME=$(node_hostname $number) \ |
195 | 29386d3e | Michael Hanselmann | GANETI_ROOTDIR=$nodedir \ |
196 | 29386d3e | Michael Hanselmann | $ensure_dirs |
197 | 29386d3e | Michael Hanselmann | |
198 | 29386d3e | Michael Hanselmann | local -r daemon_args="-b $(node_ipaddr $number)" |
199 | 29386d3e | Michael Hanselmann | |
200 | 29386d3e | Michael Hanselmann | cat > $nodedir/etc/default/ganeti <<EOF |
201 | 29386d3e | Michael Hanselmann | # Default settings for virtual node $i |
202 | 29386d3e | Michael Hanselmann | NODED_ARGS='--no-mlock $daemon_args' |
203 | 29386d3e | Michael Hanselmann | MASTERD_ARGS='' |
204 | 29386d3e | Michael Hanselmann | RAPI_ARGS='$daemon_args' |
205 | 29386d3e | Michael Hanselmann | CONFD_ARGS='$daemon_args' |
206 | 3695a4e0 | Thomas Thrainer | LUXID_ARGS='' |
207 | 29386d3e | Michael Hanselmann | |
208 | 29386d3e | Michael Hanselmann | export GANETI_ROOTDIR='$nodedir' |
209 | 29386d3e | Michael Hanselmann | export GANETI_HOSTNAME='$(node_hostname $number)' |
210 | 29386d3e | Michael Hanselmann | EOF |
211 | 29386d3e | Michael Hanselmann | |
212 | 29386d3e | Michael Hanselmann | cat > $nodedir/cmd <<EOF |
213 | 29386d3e | Michael Hanselmann | #!/bin/bash |
214 | 29386d3e | Michael Hanselmann | |
215 | 29386d3e | Michael Hanselmann | export GANETI_ROOTDIR='$nodedir' |
216 | 29386d3e | Michael Hanselmann | export GANETI_HOSTNAME='$(node_hostname $number)' |
217 | 29386d3e | Michael Hanselmann | |
218 | 29386d3e | Michael Hanselmann | bash -c "\$*" |
219 | 29386d3e | Michael Hanselmann | EOF |
220 | 29386d3e | Michael Hanselmann | chmod +x $nodedir/cmd |
221 | 29386d3e | Michael Hanselmann | } |
222 | 29386d3e | Michael Hanselmann | |
223 | 29386d3e | Michael Hanselmann | setup_all_nodes() { |
224 | 29386d3e | Michael Hanselmann | for ((i=0; i < nodecount; ++i)); do |
225 | 29386d3e | Michael Hanselmann | setup_node $i |
226 | 29386d3e | Michael Hanselmann | done |
227 | 29386d3e | Michael Hanselmann | } |
228 | 29386d3e | Michael Hanselmann | |
229 | 29386d3e | Michael Hanselmann | setup_etc_hosts() { |
230 | 36683bad | Michael Hanselmann | echo "Configuring $etc_hosts_filename ..." >&2 |
231 | 29386d3e | Michael Hanselmann | ( |
232 | 29386d3e | Michael Hanselmann | set -e -u |
233 | 36683bad | Michael Hanselmann | local -r tmpfile=$(mktemp $etc_hosts_filename.vcluster.XXXXX) |
234 | 29386d3e | Michael Hanselmann | trap "rm -f $tmpfile" EXIT |
235 | 29386d3e | Michael Hanselmann | { |
236 | 36683bad | Michael Hanselmann | egrep -v "^$netprefix.[[:digit:]]+[[:space:]]" $etc_hosts_filename |
237 | 29386d3e | Michael Hanselmann | echo "$netprefix.1 $cluster_name" |
238 | 29386d3e | Michael Hanselmann | for ((i=0; i < nodecount; ++i)); do |
239 | 29386d3e | Michael Hanselmann | echo "$(node_ipaddr $i) $(node_hostname $i)" |
240 | 29386d3e | Michael Hanselmann | done |
241 | 29386d3e | Michael Hanselmann | for ((i=0; i < instcount; ++i)); do |
242 | 29386d3e | Michael Hanselmann | echo "$(instance_ipaddr $i) $(instance_hostname $i)" |
243 | 29386d3e | Michael Hanselmann | done |
244 | 29386d3e | Michael Hanselmann | } > $tmpfile && \ |
245 | 29386d3e | Michael Hanselmann | chmod 0644 $tmpfile && \ |
246 | 36683bad | Michael Hanselmann | mv $tmpfile $etc_hosts_filename && \ |
247 | 29386d3e | Michael Hanselmann | trap - EXIT |
248 | 29386d3e | Michael Hanselmann | ) |
249 | 29386d3e | Michael Hanselmann | } |
250 | 29386d3e | Michael Hanselmann | |
251 | 29386d3e | Michael Hanselmann | setup_network_interfaces() { |
252 | 29386d3e | Michael Hanselmann | echo 'Configuring network ...' >&2 |
253 | 29386d3e | Michael Hanselmann | for ((i=0; i < nodecount; ++i)); do |
254 | 29386d3e | Michael Hanselmann | local ipaddr="$(node_ipaddr $i)/32" |
255 | 29386d3e | Michael Hanselmann | ip addr del "$ipaddr" dev "$netdev" || : |
256 | 29386d3e | Michael Hanselmann | ip addr add "$ipaddr" dev "$netdev" |
257 | 29386d3e | Michael Hanselmann | done |
258 | 29386d3e | Michael Hanselmann | } |
259 | 29386d3e | Michael Hanselmann | |
260 | 29386d3e | Michael Hanselmann | setup_scripts() { |
261 | 29386d3e | Michael Hanselmann | echo 'Configuring helper scripts ...' >&2 |
262 | 29386d3e | Michael Hanselmann | for action in "${action_shortcuts[@]}"; do |
263 | 29386d3e | Michael Hanselmann | { |
264 | 29386d3e | Michael Hanselmann | echo '#!/bin/bash' |
265 | 29386d3e | Michael Hanselmann | for ((i=0; i < nodecount; ++i)); do |
266 | 29386d3e | Michael Hanselmann | local name=$(node_hostname $i) |
267 | a6d3644b | Michael Hanselmann | if [[ $action = watcher ]]; then |
268 | a6d3644b | Michael Hanselmann | echo "echo 'Running watcher for virtual node \"$name\" ..." |
269 | a6d3644b | Michael Hanselmann | echo "$name/cmd ganeti-watcher \"\$@\"" |
270 | a6d3644b | Michael Hanselmann | else |
271 | a6d3644b | Michael Hanselmann | echo "echo 'Action \"$action\" for virtual node \"$name\" ...'" |
272 | a6d3644b | Michael Hanselmann | echo "$name/cmd $initscript $action \"\$@\"" |
273 | a6d3644b | Michael Hanselmann | fi |
274 | 29386d3e | Michael Hanselmann | done |
275 | 29386d3e | Michael Hanselmann | } > $rootdir/$action-all |
276 | 29386d3e | Michael Hanselmann | chmod +x $rootdir/$action-all |
277 | 29386d3e | Michael Hanselmann | done |
278 | 29386d3e | Michael Hanselmann | } |
279 | 29386d3e | Michael Hanselmann | |
280 | 29386d3e | Michael Hanselmann | show_info() { |
281 | 29386d3e | Michael Hanselmann | cat <<EOF |
282 | 29386d3e | Michael Hanselmann | Virtual cluster setup is complete. |
283 | 29386d3e | Michael Hanselmann | |
284 | 29386d3e | Michael Hanselmann | Root directory: $rootdir |
285 | 29386d3e | Michael Hanselmann | Cluster name: $cluster_name |
286 | 29386d3e | Michael Hanselmann | EOF |
287 | 29386d3e | Michael Hanselmann | |
288 | 29386d3e | Michael Hanselmann | echo 'Nodes:' $(for ((i=0; i < nodecount; ++i)); do node_hostname $i; done) |
289 | 29386d3e | Michael Hanselmann | |
290 | 29386d3e | Michael Hanselmann | cat <<EOF |
291 | 29386d3e | Michael Hanselmann | |
292 | 29386d3e | Michael Hanselmann | Initialize cluster: |
293 | 1266a29b | Michael Hanselmann | cd $rootdir && node1/cmd gnt-cluster init --no-etc-hosts \\ |
294 | 1266a29b | Michael Hanselmann | --no-ssh-init --no-lvm-storage --no-drbd-storage $cluster_name |
295 | 29386d3e | Michael Hanselmann | |
296 | 29386d3e | Michael Hanselmann | Change cluster settings: |
297 | 29386d3e | Michael Hanselmann | cd $rootdir && node1/cmd gnt-cluster modify \\ |
298 | 1266a29b | Michael Hanselmann | --enabled-hypervisors=fake --specs-nic-count=min=0 \\ |
299 | 29386d3e | Michael Hanselmann | --specs-disk-size=min=0 --specs-disk-count=min=0 |
300 | 29386d3e | Michael Hanselmann | |
301 | 29386d3e | Michael Hanselmann | Add node: |
302 | 29386d3e | Michael Hanselmann | cd $rootdir && node1/cmd gnt-node add --no-ssh-key-check node2 |
303 | 29386d3e | Michael Hanselmann | EOF |
304 | 29386d3e | Michael Hanselmann | } |
305 | 29386d3e | Michael Hanselmann | |
306 | 29386d3e | Michael Hanselmann | setup_all_nodes |
307 | 1266a29b | Michael Hanselmann | if [[ -n "$etchosts" ]]; then |
308 | 1266a29b | Michael Hanselmann | setup_etc_hosts |
309 | 1266a29b | Michael Hanselmann | fi |
310 | 1266a29b | Michael Hanselmann | if [[ -n "$networking" ]]; then |
311 | 1266a29b | Michael Hanselmann | setup_network_interfaces |
312 | 1266a29b | Michael Hanselmann | fi |
313 | 29386d3e | Michael Hanselmann | setup_scripts |
314 | 29386d3e | Michael Hanselmann | show_info |
315 | 29386d3e | Michael Hanselmann | |
316 | 29386d3e | Michael Hanselmann | exit 0 |
317 | 29386d3e | Michael Hanselmann | |
318 | 29386d3e | Michael Hanselmann | # vim: set sw=2 sts=2 et : |