#!/bin/bash # Set needed environment variables and do basic checks function hydra_set_env { export BASEREPOS="config doc bootless dns git/public git/private puppet" export OSVERSION="`cut -d . -f 1 /etc/debian_version`" export COMMIT="`( cd $APP_BASE && git log -n 1 --pretty=oneline 2> /dev/null | cut -d " " -f 1 )`" export CONFIG="$HOME/.hydra/config" if [ "`whoami`" != 'root' ]; then SUDO="sudo" fi if [ ! -z "$HYDRA" ]; then export HYDRA_FOLDER="`hydra_eval_parameter $HYDRA`" export PREFERENCES="$HOME/.hydra/$HYDRA" fi if [ "$NAME" == "hydra" ]; then if [ -z "$HYDRA" ]; then hydra_action_usage exit 1 elif [ "$ACTION" != "register" ] && [ "$ACTION" != "init" ]; then if [ -z "$HYDRA_FOLDER" ] || [ ! -d "$HYDRA_FOLDER" ]; then echo "hydra $HYDRA not configured, aborting" exit 1 fi fi fi } # Read a parameter from user function hydra_user_input { local input local param="$1" local default="$2" shift 2 if echo $param | grep -q 'passwd'; then read -s -rep "$* (defaults to $default): " input else read -rep "$* (defaults to $default): " input fi if [ -z "$input" ]; then export $param="$default" else export $param="$input" fi } # Get a configuration parameter if not previously defined by a sourced file function hydra_user_config { local param="$1" local default="$2" shift 2 if [ -z "`eval echo '$'$param`" ]; then hydra_user_input $param $default $* fi } # Install a package function hydra_install_package { if [ -z "$1" ]; then return fi dpkg -s $1 &> /dev/null if [ "$?" == "1" ]; then echo "Installing package $1..." DEBIAN_FRONTEND=noninteractive $SUDO apt-get install $1 -y || exit 1 fi } # Truncate a database function hydra_truncate_database { if [ ! -z "$1" ]; then mysql $1 -e "drop database $1; create database $1;" fi } # Check for a command function hydra_check_command { if [ -z "$1" ]; then return fi if ! which $1 &> /dev/null; then echo "Please install a package for $1 to run this action" exit 1 fi } # Check for an user function hydra_check_user { if [ -z "$1" ]; then return 1 fi grep -qe "^$1:" /etc/passwd } # Check for a group function hydra_check_group { if [ -z "$1" ]; then return 1 fi grep -qe "^$1:" /etc/group } # Abort on error function hydra_exit_on_error { if [ "$?" != "0" ]; then echo "Error: $*" exit 1 fi } # Run a command or abort function hydra_safe_run { $* hydra_exit_on_error $* } # Run a command using sudo and abort on error function hydra_sudo_run { $SUDO $* hydra_exit_on_error $* } # Determine the next debian release function hydra_next_debian_release { local release="$1" if [ "$release" == "lenny" ]; then echo "squeeze" elif [ "$release" == "squeeze" ]; then echo "wheezy" elif [ "$release" == "wheezy" ]; then echo "jessie" elif [ "$release" == "jessie" ]; then echo "stretch" else echo "Unsupported release" exit 1 fi } # Get fqdn from nodename function hydra_get_fqdn_from_nodename { local node="$1" if [ -z "$node" ]; then return fi if [ "$node" == "localhost" ]; then facter fqdn elif echo $node | grep -q '\.'; then echo $node else domain=`hydra $HYDRA config domain` echo $node.$domain fi }