]> gitweb.fluxo.info Git - hydra.git/commitdiff
App skeleton
authorSilvio Rhatto <rhatto@riseup.net>
Wed, 22 Sep 2010 19:29:40 +0000 (16:29 -0300)
committerSilvio Rhatto <rhatto@riseup.net>
Wed, 22 Sep 2010 19:29:40 +0000 (16:29 -0300)
16 files changed:
.gitignore [new file with mode: 0644]
hydra
hydractl [changed from file to symlink]
lib/functions [new file with mode: 0644]
lib/git [new file with mode: 0644]
lib/misc [new file with mode: 0644]
lib/tmpfile [new file with mode: 0644]
share/hydra/init [new file with mode: 0755]
share/hydra/register [new file with mode: 0755]
share/hydractl/backports [new file with mode: 0755]
share/hydractl/install-puppet [new file with mode: 0755]
share/hydractl/puppet-reset [new file with mode: 0755]
share/hydractl/puppet-reset-stored [new file with mode: 0755]
share/hydractl/puppet-trigger [new file with mode: 0755]
share/hydractl/requirements [new file with mode: 0755]
share/hydractl/upgrade [new file with mode: 0755]

diff --git a/.gitignore b/.gitignore
new file mode 100644 (file)
index 0000000..1377554
--- /dev/null
@@ -0,0 +1 @@
+*.swp
diff --git a/hydra b/hydra
index 46a2e5bdd260a633f66c148006f64c9151074006..489c41271bb197130f3309e84f859ed993032129 100755 (executable)
--- a/hydra
+++ b/hydra
@@ -1,6 +1,6 @@
 #!/bin/bash
 #
-# Hydra Process Command Tool.
+# Hydra Management Tool.
 #
 # Copyright (C) 2010 Sarava Group - sarava at lists.riseup.net
 # 
 # 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
deleted file mode 100755 (executable)
index 2e2fa25b878ff8c929a19fedce6f12a4173c66b3..0000000000000000000000000000000000000000
--- a/hydractl
+++ /dev/null
@@ -1,50 +0,0 @@
-#!/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
new file mode 120000 (symlink)
index 0000000000000000000000000000000000000000..29084b05d6952e6653218de5ba51aa93b1f99917
--- /dev/null
+++ b/hydractl
@@ -0,0 +1 @@
+hydra
\ No newline at end of file
diff --git a/lib/functions b/lib/functions
new file mode 100644 (file)
index 0000000..473ea9e
--- /dev/null
@@ -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
diff --git a/lib/git b/lib/git
new file mode 100644 (file)
index 0000000..6e7f05a
--- /dev/null
+++ b/lib/git
@@ -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 (file)
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 (file)
index 0000000..886d61c
--- /dev/null
@@ -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 (executable)
index 0000000..f1b4afe
--- /dev/null
@@ -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 (executable)
index 0000000..5364f58
--- /dev/null
@@ -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 (executable)
index 0000000..dbf9ec1
--- /dev/null
@@ -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 (executable)
index 0000000..11a0048
--- /dev/null
@@ -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 (executable)
index 0000000..04d02b1
--- /dev/null
@@ -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 (executable)
index 0000000..000933b
--- /dev/null
@@ -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 (executable)
index 0000000..2326d37
--- /dev/null
@@ -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 (executable)
index 0000000..dc96894
--- /dev/null
@@ -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 (executable)
index 0000000..f129b79
--- /dev/null
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+aptitude safe-upgrade -y