summaryrefslogtreecommitdiff
path: root/src/manage.sh
blob: 9123cb8921171b603ee58ac06122b9e249f14f9e (plain) (blame)
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
#!/bin/sh
#
# flufigut
#
# flufigut, the flumotion configuration utility, is a simple tool
# that generates flumotion configuration files using pyhton jinja2
# template engine and simplejson. flufigut generates planet.xml
# and worker.xml files from configuration templates and an easy to
# understand representation of the flow structure written in json.
#
#
# Copyright (C) 2012 Christian Pointner <equinox@spreadspace.org>
#                    Michael Gebetsroither <michael@mgeb.org>
#
# This file is part of flufigut.
#
# flufigut is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# any later version.
#
# flufigut is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with flufigut. If not, see <http://www.gnu.org/licenses/>.
#

#
# Initialization:
# - generate ssh key:
#   $ ssh-keygen -f id_rsa
# - configure ssh.config
# - copy flufigut-client.sh to every machine and install it
#   $ sudo ./flufigut-client.sh install
#

OUTPUT_DIR="output"
SSH_KEY="id_rsa"
SSH_CONFIG="ssh.config"
SSH_USER="flufigut"

set -e

deploy_all() {
  for machine in "$OUTPUT_DIR"/*; do
    if [ -d "$machine" ]; then
      machine=`basename $machine`
      echo "copying files to $machine ... "
      tar -czf "$OUTPUT_DIR/$machine.tar.gz" "$OUTPUT_DIR/$machine"/*
      scp -i "$SSH_KEY" -F "$SSH_CONFIG" "$OUTPUT_DIR/$machine.tar.gz" $SSH_USER@"$machine":/tmp
      ssh -i "$SSH_KEY" -F "$SSH_CONFIG" $SSH_USER@"$machine" install "/tmp/$machine.tar.gz"
      rm "$OUTPUT_DIR/$machine.tar.gz"
    fi
  done
}

start_all() {
  for machine in "$OUTPUT_DIR"/*; do
    if [ -d "$machine" ] && [ -d "$machine/managers" ]; then
      machine=`basename $machine`
      echo " $machine (manager, worker)"
      ssh -i "$SSH_KEY" -F "$SSH_CONFIG" $SSH_USER@"$machine" start
      break
    fi
  done
  for machine in "$OUTPUT_DIR"/*; do
    if [ -d "$machine" ] && [ ! -d "$machine/managers" ]; then
      machine=`basename $machine`
      echo " $machine (worker)"
      ssh -i "$SSH_KEY" -F "$SSH_CONFIG" $SSH_USER@"$machine" start
      break
    fi
  done
}

stop_all() {
  for machine in "$OUTPUT_DIR"/*; do
    if [ -d "$machine" ] && [ ! -d "$machine/managers" ]; then
      machine=`basename $machine`
      echo " $machine (worker)"
      ssh -i "$SSH_KEY" -F "$SSH_CONFIG" $SSH_USER@"$machine" stop
      break
    fi
  done
  for machine in "$OUTPUT_DIR"/*; do
    if [ -d "$machine" ] && [ -d "$machine/managers" ]; then
      machine=`basename $machine`
      echo " $machine (manager, worker)"
      ssh -i "$SSH_KEY" -F "$SSH_CONFIG" $SSH_USER@"$machine" stop
      break
    fi
  done
}

case "$1" in
  deploy)
    echo "Deploying configuration to all machines ..."
    deploy_all
  ;;
  start)
    echo "Start manager and worker on all machines ..."
    start_all
  ;;
  stop)
    echo "Stop manager and worker on all machines ..."
    stop_all
  ;;
  restart)
    echo "Restart manager and worker on all machines ..."
    stop_all
    sleep 1
    start_all
  ;;
  *)
    echo "Usage $0 (deploy|start|stop|restart)"
    exit 1
  ;;
esac

exit 0