diff options
author | Silvio Rhatto <rhatto@riseup.net> | 2010-09-22 16:29:40 -0300 |
---|---|---|
committer | Silvio Rhatto <rhatto@riseup.net> | 2010-09-22 16:29:40 -0300 |
commit | fec2db557dcad1f52a1ffa8b612629a0b8b4c054 (patch) | |
tree | 5e1305477007f7720027fa5974824937aa4ffe63 | |
parent | 9d4d507a6c86412f1815efc1e9345f37f0956465 (diff) | |
download | hydra-fec2db557dcad1f52a1ffa8b612629a0b8b4c054.tar.gz hydra-fec2db557dcad1f52a1ffa8b612629a0b8b4c054.tar.bz2 |
App skeleton
-rw-r--r-- | .gitignore | 1 | ||||
-rwxr-xr-x | hydra | 76 | ||||
l---------[-rwxr-xr-x] | hydractl | 51 | ||||
-rw-r--r-- | lib/functions | 10 | ||||
-rw-r--r-- | lib/git | 33 | ||||
-rw-r--r-- | lib/misc | 114 | ||||
-rw-r--r-- | lib/tmpfile | 45 | ||||
-rwxr-xr-x | share/hydra/init | 12 | ||||
-rwxr-xr-x | share/hydra/register | 3 | ||||
-rwxr-xr-x | share/hydractl/backports | 7 | ||||
-rwxr-xr-x | share/hydractl/install-puppet | 5 | ||||
-rwxr-xr-x | share/hydractl/puppet-reset | 5 | ||||
-rwxr-xr-x | share/hydractl/puppet-reset-stored | 2 | ||||
-rwxr-xr-x | share/hydractl/puppet-trigger | 3 | ||||
-rwxr-xr-x | share/hydractl/requirements | 2 | ||||
-rwxr-xr-x | share/hydractl/upgrade | 3 |
16 files changed, 285 insertions, 87 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1377554 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*.swp @@ -1,6 +1,6 @@ #!/bin/bash # -# Hydra Process Command Tool. +# Hydra Management Tool. # # Copyright (C) 2010 Sarava Group - sarava at lists.riseup.net # @@ -18,52 +18,54 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. # -# TODO: get all needed requirements -function hydra_requirements { -} - -# TODO: check debian version and if backports is enabled -# TODO: check backports key signature -function hydra_backports { - echo "deb http://www.backports.org/debian lenny-backports main contrib non-free" >> /etc/apt/sources.list - apt-get update ; apt-get install debian-backports-keyring ; apt-get update - apt-get -t lenny-backports install puppet puppetmaster -} - -function hydra_install_puppet { - apt-get update - # TODO: use option '-t lenny-backports' if installing from backports - apt-get install puppet puppetmaster -} +# Load libraries +function hydra_load { + local dest + local base -# Initializes a new hydra from scratch -function hydra_init { - hydra_backports - hydra_install_puppet + # Determine if we are in a local or system-wide install. + if [ -h "$0" ]; then + dest="$(readlink $0)" - mkdir -p /etc/puppet/modules - git clone git://git.sarava.org/puppet-bootstrap /etc/puppet/modules/bootstrap + # Check again as the caller might be a symlink as well + if [ -h "$dest" ]; then + base="`dirname $dest`" + dest="$(dirname $(readlink $dest))" + else + base="`dirname $0`" + fi - # TODO: edit /etc/puppet/modules/bootstrap/manifests/site.pp to suit your needs. + # Deal with relative or absolute link + if [ "`basename $dest`" == "$dest" ]; then + export APP_BASE="$base" + else + export APP_BASE="$dest" + fi + else + export APP_BASE="`dirname $0`" + fi - puppetd --no-daemonize --debug --verbose --onetime /etc/puppet/modules/bootstrap/manifests/init.pp - puppetd --no-daemonize --debug --verbose -} - -# Register an existing hydra -function hydra_register { - # TODO + export ACTIONS="$APP_BASE/share/$BASENAME" + source $APP_BASE/lib/functions || exit 1 } # Command-line parameters -COMMAND="$1" BASENAME="`basename $0`" +ACTION="$1" # Command-line parser -if [ -z "$COMMAND" ]; then - echo "usage: $BASENAME <comman> [arguments]" +if [ -z "$ACTION" ]; then + echo "usage: $BASENAME <command> [arguments]" + exit 1 fi +# Load functions +hydra_load $* + # Dispatch -hydra_requirements -hydra_$COMMAND +if hydra_has_action $ACTION; then + hydra_dispatch $* +else + echo "No such action $ACTION" + exit 1 +fi @@ -1,50 +1 @@ -#!/bin/bash -# -# Hydra Process Control Tool. -# -# Copyright (C) 2010 Sarava Group - sarava at lists.riseup.net -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or any later version. -# -# This program 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 Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. -# - -function hydractl_requirements { - # TODO -} - -function hydractl_reset_puppetd { - /etc/init.d/puppet stop - rm -rf /var/lib/puppet/ssl - puppetd --server puppet.`facter domain` --waitforcert 60 --test --ca_port 8141 -} - -function hydractl_upgrade { - aptitude safe-upgrade -y -} - -function hydractl_puppet_trigger { - kill -USR1 `cat /var/run/puppet/puppetd.pid` -} - -# Command-line parameters -COMMAND="$1" -BASENAME="`basename $0`" - -# Command-line parser -if [ -z "$COMMAND" ]; then - echo "usage: $BASENAME <comman> [arguments]" -fi - -# Dispatch -hydractl_requirements -hydractl_$COMMAND +hydra
\ No newline at end of file diff --git a/lib/functions b/lib/functions new file mode 100644 index 0000000..473ea9e --- /dev/null +++ b/lib/functions @@ -0,0 +1,10 @@ +#!/bin/bash +# +# Common functions. +# + +# Setup environment +hydra_set_env $* +source $APP_BASE/lib/git +source $APP_BASE/lib/misc +source $APP_BASE/lib/tmpfile @@ -0,0 +1,33 @@ +#!/bin/bash + +# Add a pattern into gitignore +function hydra_git_ignore { + if [ ! -z "$BASEDIR/.gitignore" ]; then + echo $1 > $BASEDIR/.gitignore + hydra_exec git $BASEDIR add .gitignore + else + if ! grep -q -e "^$1$" $BASEDIR/.gitignore; then + echo $1 >> $BASEDIR/.gitignore + fi + fi +} + +# Check if a folder is inside a git repository +function hydra_is_git { + if [ -z "$1" ]; then + false + elif [ ! -d "$1" ]; then + false + elif [ -d "$1/.git" ]; then + true + else + cwd="`pwd`" + cd $1 && git="`git status &> /dev/null`" && cd $cwd + + if [ "$git" != "128" ]; then + true + else + false + fi + fi +} diff --git a/lib/misc b/lib/misc new file mode 100644 index 0000000..5691465 --- /dev/null +++ b/lib/misc @@ -0,0 +1,114 @@ +#!/bin/bash + +# Setup main configuration and load preferences +function hydra_config_load { + if [ -f "$HOME/.$NAME" ]; then + echo "Converting legacy configuration scheme..." + mv $HOME/.$NAME $HOME/.$NAME.tmp + mkdir $HOME/.$NAME + mv $HOME/.$NAME.tmp $CONFIG + fi + + if [ ! -e "$CONFIG" ]; then + echo "Creating $CONFIG..." + mkdir `dirname $CONFIG` + touch $CONFIG + chmod 600 $CONFIG + echo "# Hydra config file." > $CONFIG + echo "" >> $CONFIG + fi + + hydra_config_load_preferences +} + +# Load config preferences +function hydra_config_load_preferences { + # Load custom keyring preferences + if [ ! -z "$PREFERENCES" ] && [ -f "$PREFERENCES" ]; then + source $PREFERENCES + fi +} + +# Load a parameter from config +function hydra_config { + if [ -z "$CONFIG" ]; then + echo "Your have to set CONFIG variable in the code" + exit 1 + elif [ -e "$CONFIG" ]; then + grep -e "^$1=" $CONFIG | tail -n 1 | cut -d = -f 2 | sed -e 's/"//g' -e "s/'//g" | sed -e 's/ *#.*$//' + else + echo "Config file not found: $CONFIG" + exit 1 + fi +} + +# Check if there is a given action +function hydra_has_action { + if [ -z "$ACTIONS" ]; then + echo "Your have to set ACTIONS variable in the code" + exit 1 + fi + + if [ -e "$ACTIONS/$1" ]; then + true + else + false + fi +} + +# Execute an action +function hydra_exec { + # Setup + action="$1" + basedir="$2" + shift 2 + + # Dispatch + if hydra_has_action $action; then + $ACTIONS/$action $basedir $* + fi +} + +# Set needed environment variables and do basic checks. +function hydra_set_env { + if [ -z "$1" ]; then + echo "Error: missing arguments for hydra_set_env" + exit 1 + fi +} + +# Get a command argument +function hydra_get_command { + # Aditional parameters + COMMAND="$1" + + if [ -z "$COMMAND" ]; then + hydra_action_usage command + exit 1 + fi +} + +# Run the action usage +function hydra_action_usage { + if [ "`type -t "hydra_usage_$BASENAME"`" == "function" ]; then + # Use custom action usage + hydra_usage_$BASENAME + else + # Default usage + echo "Usage: hydra|hydractl <command> [arguments]" + fi +} + +function hydra_dispatch { + BASEDIR="`hydra_config $KEYRING`" + + # Dispatch + if [ ! -z "$BASEDIR" ]; then + shift 2 + hydra_exec $ACTION $BASEDIR $* + exit $? + else + echo "No keydir configured for $KEYRING" + exit 1 + fi +} diff --git a/lib/tmpfile b/lib/tmpfile new file mode 100644 index 0000000..886d61c --- /dev/null +++ b/lib/tmpfile @@ -0,0 +1,45 @@ +#!/bin/bash + +# Setup a temporary file +function hydra_set_tmpfile { + if [ -z "$BASEDIR" ]; then + echo "Please set BASEDIR before creating a tmp file" + exit 1 + fi + + if [ -z "$1" ]; then + template="$BASEDIR/tmp/hydra.XXXXXXXXXX" + else + template="$BASEDIR/tmp/$1.XXXXXXXXXX" + fi + + mkdir -p $BASEDIR/tmp + hydra_git_ignore 'tmp/*' + + if [ "$2" == "-d" ]; then + TMPWORK="`mktemp -d $template`" + else + TMPWORK="`mktemp $template`" + fi + + if [ "$?" != "0" ]; then + echo "Error: can't set TMPWORK $TMPWORK" + exit 1 + fi + + trap "hydra_unset_tmpfile $TMPWORK; exit" INT TERM EXIT +} + +# Remove a temporary file +function hydra_unset_tmpfile { + if [ -z "$1" ]; then + echo "No tmp file set" + fi + + rm -f $1 + + if [ "$?" != "0" ]; then + echo "Warning: could not delete file $1. Please delete it manually as it might have sensitive information." + exit 1 + fi +} diff --git a/share/hydra/init b/share/hydra/init new file mode 100755 index 0000000..f1b4afe --- /dev/null +++ b/share/hydra/init @@ -0,0 +1,12 @@ +#!/bin/bash + +hydra backports +hydra install_puppet + +mkdir -p /etc/puppet/modules +git clone git://git.sarava.org/puppet-bootstrap /etc/puppet/modules/bootstrap + +# TODO: edit /etc/puppet/modules/bootstrap/manifests/site.pp to suit your needs. + +puppetd --no-daemonize --debug --verbose --onetime /etc/puppet/modules/bootstrap/manifests/init.pp +puppetd --no-daemonize --debug --verbose diff --git a/share/hydra/register b/share/hydra/register new file mode 100755 index 0000000..5364f58 --- /dev/null +++ b/share/hydra/register @@ -0,0 +1,3 @@ +#!/bin/bash +# Register an existing hydra +# TODO diff --git a/share/hydractl/backports b/share/hydractl/backports new file mode 100755 index 0000000..dbf9ec1 --- /dev/null +++ b/share/hydractl/backports @@ -0,0 +1,7 @@ +#!/bin/bash + +# TODO: check debian version and if backports is enabled +# TODO: check backports key signature +echo "deb http://www.backports.org/debian lenny-backports main contrib non-free" >> /etc/apt/sources.list +apt-get update ; apt-get install debian-backports-keyring ; apt-get update +apt-get -t lenny-backports install puppet puppetmaster diff --git a/share/hydractl/install-puppet b/share/hydractl/install-puppet new file mode 100755 index 0000000..11a0048 --- /dev/null +++ b/share/hydractl/install-puppet @@ -0,0 +1,5 @@ +#!/bin/bash + +apt-get update +# TODO: use option '-t lenny-backports' if installing from backports +apt-get install puppet puppetmaster diff --git a/share/hydractl/puppet-reset b/share/hydractl/puppet-reset new file mode 100755 index 0000000..04d02b1 --- /dev/null +++ b/share/hydractl/puppet-reset @@ -0,0 +1,5 @@ +#!/bin/bash + +/etc/init.d/puppet stop +rm -rf /var/lib/puppet/ssl +puppetd --server puppet.`facter domain` --waitforcert 60 --test --ca_port 8141 diff --git a/share/hydractl/puppet-reset-stored b/share/hydractl/puppet-reset-stored new file mode 100755 index 0000000..000933b --- /dev/null +++ b/share/hydractl/puppet-reset-stored @@ -0,0 +1,2 @@ +#!/bin/bash +# TODO: reset stored configs diff --git a/share/hydractl/puppet-trigger b/share/hydractl/puppet-trigger new file mode 100755 index 0000000..2326d37 --- /dev/null +++ b/share/hydractl/puppet-trigger @@ -0,0 +1,3 @@ +#!/bin/bash + +kill -USR1 `cat /var/run/puppet/puppetd.pid` diff --git a/share/hydractl/requirements b/share/hydractl/requirements new file mode 100755 index 0000000..dc96894 --- /dev/null +++ b/share/hydractl/requirements @@ -0,0 +1,2 @@ +#!/bin/bash +# TODO: get all needed requirements diff --git a/share/hydractl/upgrade b/share/hydractl/upgrade new file mode 100755 index 0000000..f129b79 --- /dev/null +++ b/share/hydractl/upgrade @@ -0,0 +1,3 @@ +#!/bin/bash + +aptitude safe-upgrade -y |