#!/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="$1/flumotion" SSH_KEY="$1/id_rsa" SSH_CONFIG="$1/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 -C "$OUTPUT_DIR" -czf "$OUTPUT_DIR/$machine.tar.gz" "$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 } wipe_all() { for machine in `grep "^Host" $SSH_CONFIG | awk '{ print($2) }'`; do echo "wipeing files belonging to planet '$1' from $machine ... " ssh -i "$SSH_KEY" -F "$SSH_CONFIG" $SSH_USER@"$machine" wipe "$1" 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 } print_usage() { echo "flufigut management script by Christian Pointner " echo "" echo "Usage $0 " echo "" echo "Commands:" echo " deploy copies all configuration file to all servers and installs them" echo " clean remove all configuration file from all servers" echo " wipe purges all configuration files belonging the planet" echo " start starts all instances on all servers (manager starts first)" echo " stop stop all instances on all servers (manager stops last)" echo " restart same as stop, start" echo " help prints this" } if [ -z "$1" ]; then print_usage exit 1 fi case "$2" in deploy) echo "Deploying configuration to all machines ..." deploy_all ;; clean) echo "cleaning/removing configuration from all machines ..." clean_all ;; wipe) echo "wipeing configuration for from all machines inside ssh-config ..." wipe_all "$1" ;; 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 ;; help) print_usage ;; *) echo "Usage $0 (deploy|clean|wipe|start|stop|restart|help)" exit 1 ;; esac exit 0