summaryrefslogtreecommitdiff
path: root/puppet/bin
diff options
context:
space:
mode:
Diffstat (limited to 'puppet/bin')
-rwxr-xr-xpuppet/bin/dependencies28
-rwxr-xr-xpuppet/bin/deploy58
-rwxr-xr-xpuppet/bin/mrconfig29
-rwxr-xr-xpuppet/bin/post-receive7
-rwxr-xr-xpuppet/bin/post-update16
-rwxr-xr-xpuppet/bin/provision35
-rwxr-xr-xpuppet/bin/submodules31
-rwxr-xr-xpuppet/bin/subtrees41
-rwxr-xr-xpuppet/bin/symlinks24
9 files changed, 269 insertions, 0 deletions
diff --git a/puppet/bin/dependencies b/puppet/bin/dependencies
new file mode 100755
index 0000000..507145b
--- /dev/null
+++ b/puppet/bin/dependencies
@@ -0,0 +1,28 @@
+#!/bin/bash
+#
+# Puppet bootstrap dependencies.
+#
+
+# Install a package, thanks to the Hydra Suite.
+function provision_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
+ fi
+}
+
+# Set sudo config
+if [ "`whoami`" != 'root' ]; then
+ SUDO="sudo"
+fi
+
+# Ensure basic packages are installed.
+for package in puppet git mr whois; do
+ provision_package $package
+done
diff --git a/puppet/bin/deploy b/puppet/bin/deploy
new file mode 100755
index 0000000..5d3361b
--- /dev/null
+++ b/puppet/bin/deploy
@@ -0,0 +1,58 @@
+#!/bin/bash
+#
+# Deploy configuration using puppet.
+#
+
+# Parameters
+DIRNAME="`dirname $0`"
+BASEDIR="$DIRNAME/.."
+DEPLOY_DEPENDENCIES="puppet ruby-sqlite3 ruby-activerecord ruby-activerecord-deprecated-finders"
+
+# Determine hostname
+if [ ! -z "$1" ]; then
+ FQDN="$1"
+else
+ FQDN="`cat /etc/hostname`"
+fi
+
+# Check for manifest
+PUPPET_MANIFEST="$BASEDIR/puppet/manifests/nodes/$FQDN.pp"
+if [ ! -e "$PUPPET_MANIFEST" ]; then
+ echo "file not found: $PUPPET_MANIFEST"
+ exit 1
+fi
+
+# Install dependencies
+source $DIRNAME/dependencies
+
+# Ensure additional dependencies are installed.
+for package in $DEPLOY_DEPENDENCIES; do
+ provision_package $package
+done
+
+# Parameters that needs dependencies installed
+DIST="`facter lsbdistcodename`"
+
+# Apply patches
+if [ -d "$BASEDIR/puppet/files/patches/$DIST" ]; then
+ (
+ # Patches should be generated relativelly to the root folder
+ cd /
+
+ # Only apply if needed
+ # Thanks https://unix.stackexchange.com/questions/55780/check-if-a-file-or-folder-has-been-patched-already
+ for patch in `ls $BASEDIR/puppet/files/patches/$DIST`; do
+ patch -p0 -N --dry-run --silent < $BASEDIR/puppet/files/patches/$DIST/$patch &> /dev/null
+ # If the patch has not been applied then the $? which is the exit status
+ # for last command would have a success status code = 0
+ if [ "$?" == "0" ]; then
+ # Apply the patch
+ patch -p0 -N < $BASEDIR/puppet/files/patches/$DIST/$patch
+ fi
+ done
+ )
+fi
+
+# Run puppet apply
+PUPPET_OPTS="--confdir=$BASEDIR/puppet --modulepath=$BASEDIR/puppet/modules"
+LC_ALL=C $SUDO puppet apply $PUPPET_OPTS $PUPPET_MANIFEST
diff --git a/puppet/bin/mrconfig b/puppet/bin/mrconfig
new file mode 100755
index 0000000..dc753ac
--- /dev/null
+++ b/puppet/bin/mrconfig
@@ -0,0 +1,29 @@
+#!/bin/bash
+#
+# Build a mrconfig for the needed modules.
+#
+
+# Parameters
+GIT="git.fluxo.info"
+URL="https://$GIT/?a=project_index"
+CWD="`pwd`"
+WORK="`dirname $0`/.."
+
+# Create a new config
+cd $WORK
+rm -f .mrconfig
+touch .mrconfig
+
+# Fetch repository list and updtate mrconfig
+curl --stderr - $URL | grep "^puppet-" | cut -d ' ' -f 1 | while read module; do
+ folder="`echo $module | sed -e 's/^puppet-//'`"
+ folder="`basename $folder .git`"
+
+ if [ "$folder" != "bootstrap" ]; then
+ echo "Processing $folder..."
+ mr config puppet/modules/$folder checkout="git clone git://$GIT/$module $folder"
+ fi
+done
+
+# Teardown
+cd $CWD
diff --git a/puppet/bin/post-receive b/puppet/bin/post-receive
new file mode 100755
index 0000000..996189d
--- /dev/null
+++ b/puppet/bin/post-receive
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+cd ..
+unset GIT_DIR
+
+git checkout -f
+git submodule update --init --recursive
diff --git a/puppet/bin/post-update b/puppet/bin/post-update
new file mode 100755
index 0000000..48a6a16
--- /dev/null
+++ b/puppet/bin/post-update
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+cd ..
+unset GIT_DIR
+
+if [ -d ".git/annex" ]; then
+ git annex sync
+else
+ git reset HEAD
+ git checkout -f
+fi
+
+git submodule update --init --recursive
+
+cd -
+exec git update-server-info
diff --git a/puppet/bin/provision b/puppet/bin/provision
new file mode 100755
index 0000000..16f102f
--- /dev/null
+++ b/puppet/bin/provision
@@ -0,0 +1,35 @@
+#!/bin/bash
+#
+# Simple shell provisioner for Vagrant instances.
+#
+
+# Parameters
+DIRNAME="`dirname $0`"
+
+# Load dependencies
+source $DIRNAME/dependencies
+
+# Ensure the system is updated.
+$SUDO apt-get update && DEBIAN_FRONTEND=noninteractive $SUDO apt-get dist-upgrade -y && $SUDO apt-get autoremove -y && $SUDO apt-get clean
+
+# Ensure additional dependencies are installed.
+for package in usbutils; do
+ provision_package $package
+done
+
+# Storeconfigs support
+for package in ruby-sqlite3 ruby-activerecord ruby-activerecord-deprecated-finders; do
+ provision_package $package
+done
+
+# Link hiera configuration if needed.
+if [ ! -h "/etc/puppet/hiera.yaml" ]; then
+ $SUDO rm -f /etc/puppet/hiera.yaml
+ $SUDO ln -s $DIRNAME/../hiera/hiera.yaml /etc/puppet/hiera.yaml
+fi
+
+# Link puppet configuration if needed.
+if [ ! -h "/etc/puppet/puppet.conf" ]; then
+ $SUDO rm -f /etc/puppet/puppet.conf
+ $SUDO ln -s $DIRNAME/../puppet.conf /etc/puppet/puppet.conf
+fi
diff --git a/puppet/bin/submodules b/puppet/bin/submodules
new file mode 100755
index 0000000..3abc46d
--- /dev/null
+++ b/puppet/bin/submodules
@@ -0,0 +1,31 @@
+#!/bin/bash
+#
+# Setup submodules.
+#
+
+# Parameters
+DIRNAME="`dirname $0`"
+
+# Usage
+function usage {
+ echo "Usage: $1 add-submodules <DIR>"
+ exit $2
+}
+
+# Get module list
+repos="`grep = $DIRNAME/../.mrconfig | cut -d = -f 2 | cut -d ' ' -f 4`"
+
+# Add submodules
+for repo in $repos; do
+ module="`basename $repo .git | sed -e s/^puppet-//`"
+ if [ ! -d "modules/$module" ]; then
+ echo "Processing puppet module $module..."
+ git submodule add -f $repo modules/$module
+ elif [ -e "modules/$module/.git" ]; then
+ # The puppet module exists and is a git submodule, so update it
+ ( cd module/$module && git pull origin master )
+ fi
+done
+
+# Update all modules
+git submodule update --init
diff --git a/puppet/bin/subtrees b/puppet/bin/subtrees
new file mode 100755
index 0000000..1858a48
--- /dev/null
+++ b/puppet/bin/subtrees
@@ -0,0 +1,41 @@
+#!/bin/bash
+#
+# Setup subtrees.
+#
+
+# Parameters
+DIRNAME="`dirname $0`"
+
+# Usage
+function usage {
+ echo "Usage: $1 add-submodules <DIR>"
+ exit $2
+}
+
+# Check for git-subtree
+if ! which git-subtree &> /dev/null; then
+ echo "fatal: please install git-subtree"
+ exit 1
+fi
+
+# Get module list
+repos="`grep = $DIRNAME/../.mrconfig | cut -d = -f 2 | cut -d ' ' -f 4`"
+
+# Add subtrees
+for repo in $repos; do
+ module="`basename $repo .git | sed -e s/^puppet-//`"
+ if [ ! -d "modules/$module" ]; then
+ echo "Processing puppet module $module..."
+ git remote add $module $repo
+ git subtree add --prefix modules/$module $module master --squash
+ elif [ ! -d "modules/$module/.git" ]; then
+ # The puppet module exists and is a subtree, so update it
+ if ! git remote | grep -qe "^$module$"; then
+ git remote add $module $repo
+ fi
+
+ # Update subtrees
+ git fetch $module master
+ git subtree pull --prefix modules/$module $module master --squash
+ fi
+done
diff --git a/puppet/bin/symlinks b/puppet/bin/symlinks
new file mode 100755
index 0000000..0a221c4
--- /dev/null
+++ b/puppet/bin/symlinks
@@ -0,0 +1,24 @@
+#!/bin/bash
+#
+# Setup symlinks.
+#
+
+# Parameters
+BASENAME="`basename $0`"
+MODULES="$1"
+
+# Check parameters
+if [ -z "$MODULES" ]; then
+ echo "Usage: $BASENAME <submodules-folder>"
+ exit 1
+elif [ ! -e "$MODULES" ]; then
+ echo "Not found: $MODULES"
+fi
+
+# Add module symlinks using absolute folders
+for module in `ls $MODULES`; do
+ if [ "$module" != "bootstrap" ]; then
+ path="`cd $MODULES/$module && pwd`"
+ ( cd modules &> /dev/null && ln -sf $path )
+ fi
+done