diff options
Diffstat (limited to 'puppet/bin')
-rwxr-xr-x | puppet/bin/dependencies | 28 | ||||
-rwxr-xr-x | puppet/bin/deploy | 58 | ||||
-rwxr-xr-x | puppet/bin/mrconfig | 29 | ||||
-rwxr-xr-x | puppet/bin/post-receive | 7 | ||||
-rwxr-xr-x | puppet/bin/post-update | 16 | ||||
-rwxr-xr-x | puppet/bin/provision | 35 | ||||
-rwxr-xr-x | puppet/bin/submodules | 31 | ||||
-rwxr-xr-x | puppet/bin/subtrees | 41 | ||||
-rwxr-xr-x | puppet/bin/symlinks | 24 |
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 |