summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSilvio Rhatto <rhatto@riseup.net>2010-11-14 14:50:55 -0200
committerSilvio Rhatto <rhatto@riseup.net>2010-11-14 14:50:55 -0200
commit2c1c916fc6b0a11ca572ede5a95e63b46fa1e61d (patch)
treee7b8ea9677150f7e234ff4e59a22a2a92f5a724e
parentdbf0e0cb984c7be0f805f58d20e65b6780dc6f77 (diff)
downloadhydra-2c1c916fc6b0a11ca572ede5a95e63b46fa1e61d.tar.gz
hydra-2c1c916fc6b0a11ca572ede5a95e63b46fa1e61d.tar.bz2
Nodes and mass updates
-rwxr-xr-xshare/hydra/mass15
-rwxr-xr-xshare/hydra/nodes35
2 files changed, 35 insertions, 15 deletions
diff --git a/share/hydra/mass b/share/hydra/mass
index 06447c2..9b87d4a 100755
--- a/share/hydra/mass
+++ b/share/hydra/mass
@@ -17,7 +17,7 @@ function mass_loop {
for node in $NODES; do
echo "Issuing $COMMAND on multiple nodes..."
echo "Connecting to $node..."
- ssh -o ConnectTimeout=15 $node $COMMAND
+ ssh -o ConnectTimeout=15 $node sudo $COMMAND
done
}
@@ -29,18 +29,17 @@ hydra_config_load
BASENAME="`basename $0`"
COMMAND="$*"
+# Initial node list
+NODES="`hydra $HYDRA nodes`"
+
# Validation
if [ "$BASENAME" == "mass-update" ]; then
- COMMAND="sudo aptitude update"
+ COMMAND="aptitude update"
elif [ "$BASENAME" == "mass-update" ]; then
- COMMAND="sudo aptitude safe-upgrade"
+ COMMAND="aptitude safe-upgrade"
elif [ "$BASENAME" == "mass-web" ]; then
- echo "Currently not implemented."
- exit 1
+ NODES="`hydra $HYDRA nodes web`"
fi
-# Build node list
-NODES="`hydra $HYDRA nodes`"
-
# Execute commands in hosts
mass_loop $COMMAND
diff --git a/share/hydra/nodes b/share/hydra/nodes
index 6b9d101..84eb7f0 100755
--- a/share/hydra/nodes
+++ b/share/hydra/nodes
@@ -3,26 +3,47 @@
# Node tool.
#
-# Default node retrieval method
-function hydra_get_nodes {
- # See http://www.mail-archive.com/puppet-users@googlegroups.com/msg01615.html
+# Get a list of puppet node files
+function hydra_node_files {
if [ -d "$PUPPET/manifests/nodes/" ]; then
- files="$PUPPET/manifests/nodes/*"
+ FILES="$PUPPET/manifests/nodes/*"
else
- files="`find $PUPPET -name 'nodes.pp'`"
+ FILES="`find $PUPPET -name 'nodes.pp'`"
fi
- grep ^node $files | sed -e 's/^node //' | awk -F, '{for(i=1;i<=NF;i++) {print $i}}' | cut -d "'" -f2
+}
+
+# Get all lines matching a node definition
+function hydra_node_lines {
+ # See http://www.mail-archive.com/puppet-users@googlegroups.com/msg01615.html
+ grep ^node $FILES | sed -e 's/^node //' | awk -F, '{for(i=1;i<=NF;i++) {print $i}}'
+}
+
+# Default node retrieval method
+function hydra_nodes {
+ hydra_node_lines | cut -d "'" -f2
}
# Load
source $APP_BASE/lib/hydra/functions || exit 1
hydra_config_load
+# Command line arguments
+CLASS="$1"
+
# Validation
if [ -z "$PUPPET" ]; then
echo "No PUPPET parameter defined at $HYDRA preferences."
exit 1
fi
+# Get initial file list
+hydra_node_files
+
# Get nodes
-hydra_get_nodes
+if [ ! -z "$CLASS" ]; then
+ FILES="`hydra_node_lines | cut -d ':' -f 1`"
+ FILES="`grep nodo::$CLASS $FILES | cut -d ':' -f 1`"
+ hydra_nodes
+else
+ hydra_nodes
+fi