initial provider commit
[lut.git] / bin / lut.sh
1 #!/bin/sh -x
2 # This script lives in the lut provider and should be run from there
3
4 provider_dir=`pwd`
5 platform_git=https://leap.se/git/leap_platform
6 cli_git=https://leap.se/git/leap_cli
7 from_version=$1
8 to_version=$2
9 #workdir=`mktemp -d`
10 workdir='/tmp/lut'
11 platform_link="${workdir}/leap_platform"
12 platform_from=${workdir}/platform_$1
13 platform_to=${workdir}/platform_$1
14 cli_from=${workdir}/cli_master
15 cli_to=${workdir}/cli_develop
16
17
18 # If you hit control-c or kill the process, stop the VMs
19 killed () {
20
21     leap vm stop upgrade
22     echo "VMs stopped, but not removed. Will still incur charges, please remove them if you are not using them anymore."
23     cleanup 3
24 }
25
26 trap "{ killed ; }" TERM INT ABRT QUIT
27
28 help () {
29     cat <<EOF
30 Usage lut <from version> <to version>
31
32 This script will setup leap platform, leap cli, for the versions required and
33 perform an upgrade test using leap vm credentials stored in cloud.json.
34
35 Note: the cloud.json file is encrypted with git-crypt. You need to decrypt it
36 first, just do once: apt install git-crypt and then git-crypt unlock.
37
38 EOF
39 }
40
41 check_version () {
42     git ls-remote --refs --heads --tags --exit-code $1 $2
43     if [ $? -ne 0 ]; then
44         echo "unknown <version>: $2 for $1, please use a tag from git tag -l, or specify a branch"
45         cleanup 2
46     fi
47 }
48
49 get_platform () {
50     echo "Setup platform, version $2"
51     git clone $1 ${workdir}/platform_${2} --branch $2
52     if [ $? -ne 0 ]; then
53         echo "Setup failed"
54         cleanup 2
55     fi
56 }
57
58 get_cli () {
59     cli_dir=${workdir}/cli_$2
60     echo "Setup leap_cli"
61     git clone $cli_git $cli_dir --branch $2
62     cd $cli_dir
63     rake build
64     bundle --path vendor/bundle
65 }
66
67 switch () {
68     rm -f $platform_link
69     ln -s platform_${1} $platform_link
70 }
71
72 cleanup () {
73     # leap vm rm upgrade
74     rm -rf $workdir
75     exit $1
76 }
77
78 start_nodes () {
79     echo "Starting all the VMs, you should go do something else now, this will take a while..."
80     # monarch: monitor, tor hidden service, webapp
81     leap vm add monarch
82     # dogface: couchdb/soledad
83     leap vm add dogface
84     # hairstreak: mx
85     leap vm add hairstreak
86     # checkerspot: openvn, need a gateway address to do openvpn, disabled
87     # spicebush: static node, with hidden service
88     leap vm add spicebush
89     # cloak: tor exit
90     leap vm add cloak
91 }
92
93 case "$1" in
94     -h | -help | --help )
95         help
96         exit
97         ;;
98 esac
99
100 if [ $# -ne 2 ]; then
101     help
102 else
103     check_version $platform_git $from_version
104     check_version $platform_git $to_version
105     get_platform $platform_git $from_version
106     get_platform $platform_git $to_version
107     get_cli $cli_git master
108     get_cli $cli_git develop
109     cd $provider_dir
110     switch $to_version
111     start_nodes
112     # because 0.8 doesn't have the right support, we need
113     # to use the new version to do the node init
114     # switch $from_version
115     # $cli_from/bin/leap -v2 node init upgrade
116     $cli_to/bin/leap -v2 node init upgrade
117     if [ $? -ne 0 ]; then
118         cleanup 1
119     else
120         echo "Nodes initialized with old platform"
121     fi
122     # temporary
123     switch $from_version
124     $cli_from/bin/leap -v2 --yes deploy upgrade
125     if [ $? -ne 0 ]; then
126         cleanup 1
127     else
128         echo "Nodes deployed with old version of platform"
129     fi
130     $cli_from/bin/leap test
131     switch $to_version
132     $cli_to/bin/leap -v2 --yes deploy upgrade
133     if [ $? -ne 0 ]; then
134         cleanup 1
135     else
136         echo "Nodes deployed with new version of platform"
137     fi
138     $cli_to/bin/leap test
139    
140     cleanup 0
141 fi
142