#!/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 # Michael Gebetsroither # # 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 . # # # 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" 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" fi done } clean_all() { for machine in "$OUTPUT_DIR"/*; do if [ -d "$machine" ]; then machine=`basename $machine` echo "removing files from $machine ... " generate_instance_list $machine ssh -i "$SSH_KEY" -F "$SSH_CONFIG" $SSH_USER@"$machine" remove < "$OUTPUT_DIR/$machine.list" fi done } generate_instance_list() { machine=$1 rm -f "$OUTPUT_DIR/$machine.list" touch "$OUTPUT_DIR/$machine.list" if [ -d "$OUTPUT_DIR/$machine/managers" ]; then for name in "$OUTPUT_DIR/$machine/managers/"*; do name=`basename "$name"` echo "manager $name" >> "$OUTPUT_DIR/$machine.list" done fi for name in "$OUTPUT_DIR/$machine/workers/"*.xml; do name=`basename "$name"` name=${name%%.xml} echo "worker $name" >> "$OUTPUT_DIR/$machine.list" done } start_all() { for machine in "$OUTPUT_DIR"/*; do if [ -d "$machine" ] && [ -d "$machine/managers" ]; then machine=`basename $machine` echo " $machine (manager, worker)" generate_instance_list $machine ssh -i "$SSH_KEY" -F "$SSH_CONFIG" $SSH_USER@"$machine" start < "$OUTPUT_DIR/$machine.list" break fi done for machine in "$OUTPUT_DIR"/*; do if [ -d "$machine" ] && [ ! -d "$machine/managers" ]; then machine=`basename $machine` echo " $machine (worker)" generate_instance_list $machine ssh -i "$SSH_KEY" -F "$SSH_CONFIG" $SSH_USER@"$machine" start < "$OUTPUT_DIR/$machine.list" fi done } stop_all() { for machine in "$OUTPUT_DIR"/*; do if [ -d "$machine" ] && [ ! -d "$machine/managers" ]; then machine=`basename $machine` echo " $machine (worker)" generate_instance_list $machine ssh -i "$SSH_KEY" -F "$SSH_CONFIG" $SSH_USER@"$machine" stop < "$OUTPUT_DIR/$machine.list" fi done for machine in "$OUTPUT_DIR"/*; do if [ -d "$machine" ] && [ -d "$machine/managers" ]; then machine=`basename $machine` echo " $machine (manager, worker)" generate_instance_list $machine ssh -i "$SSH_KEY" -F "$SSH_CONFIG" $SSH_USER@"$machine" stop < "$OUTPUT_DIR/$machine.list" break fi done } case "$1" in deploy) echo "Deploying configuration to all machines ..." deploy_all ;; clean) echo "cleaning/removing configuration from all machines ..." clean_all ;; wipe) if [ -z "$2" ]; then echo "Usage: $0 wipe " fi echo "wipeing configuration for from all machines inside ssh-config ..." wipe_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