forked from sensu/sensu-build
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpara-vagrant.sh
executable file
·59 lines (50 loc) · 2.28 KB
/
para-vagrant.sh
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
#!/bin/sh
# concurrency is hard, let's have a beer
# any valid parallel argument will work here, such as -P x.
MAX_PROCS="--use-cpus-instead-of-cores"
parallel_provision() {
while read box; do
echo $box
done | parallel $MAX_PROCS -I"BOX" -q \
sh -c 'LOGFILE="logs/BOX.out.txt" ; \
printf "[BOX] Provisioning. Log: $LOGFILE, Result: " ; \
vagrant provision BOX >$LOGFILE 2>&1 ; \
RETVAL=$? ; \
if [ $RETVAL -gt 0 ]; then \
echo " FAILURE"; \
tail -12 $LOGFILE | sed -e "s/^/[BOX] /g"; \
echo "[BOX] ---------------------------------------------------------------------------"; \
echo "FAILURE ec=$RETVAL" >>$LOGFILE; \
else \
echo " SUCCESS"; \
tail -5 $LOGFILE | sed -e "s/^/[BOX] /g"; \
echo "[BOX] ---------------------------------------------------------------------------"; \
echo "SUCCESS" >>$LOGFILE; \
fi; \
exit $RETVAL'
failures=$(egrep '^FAILURE' logs/*.out.txt | sed -e 's/^logs\///' -e 's/\.out\.txt:.*//' -e 's/^/ /')
successes=$(egrep '^SUCCESS' logs/*.out.txt | sed -e 's/^logs\///' -e 's/\.out\.txt:.*//' -e 's/^/ /')
echo
echo "Failures:"
echo '------------------'
echo "$failures"
echo
echo "Successes:"
echo '------------------'
echo "$successes"
}
## -- main -- ##
# cleanup old logs
mkdir logs >/dev/null 2>&1
rm -f logs/*.out.txt
# start boxes sequentially to avoid vbox explosions
echo ' ==> Calling "vagrant up" to boot the boxes...'
vagrant up --no-provision
# but run provision tasks in parallel
echo " ==> Beginning parallel 'vagrant provision' processes ..."
cat <<EOF | parallel_provision
centos_5_10_32
centos_5_10_64
ubuntu_10_04_32
ubuntu_10_04_64
EOF