From c4379c5baf46945d252b6b16fd4c2f987e2d18e1 Mon Sep 17 00:00:00 2001 From: Bruno Tavares Date: Thu, 20 Feb 2014 12:50:49 -0300 Subject: [PATCH] Kickstart helper modules to be used on recipes --- kickstart/install.sh | 3 +++ kickstart/recipes/kickstart.sh | 29 +++++++++++++++++++++++ kickstart/recipes/kickstart/apt.sh | 20 ++++++++++++++++ kickstart/recipes/kickstart/download.sh | 14 +++++++++++ kickstart/recipes/kickstart/group.sh | 3 +++ kickstart/recipes/kickstart/package.sh | 31 +++++++++++++++++++++++++ kickstart/recipes/kickstart/service.sh | 20 ++++++++++++++++ kickstart/recipes/kickstart/user.sh | 3 +++ 8 files changed, 123 insertions(+) create mode 100644 kickstart/install.sh create mode 100644 kickstart/recipes/kickstart.sh create mode 100644 kickstart/recipes/kickstart/apt.sh create mode 100644 kickstart/recipes/kickstart/download.sh create mode 100644 kickstart/recipes/kickstart/group.sh create mode 100644 kickstart/recipes/kickstart/package.sh create mode 100644 kickstart/recipes/kickstart/service.sh create mode 100644 kickstart/recipes/kickstart/user.sh diff --git a/kickstart/install.sh b/kickstart/install.sh new file mode 100644 index 0000000..d6db7f0 --- /dev/null +++ b/kickstart/install.sh @@ -0,0 +1,3 @@ +#!/bin/bash -e + +source recipes/kickstart.sh diff --git a/kickstart/recipes/kickstart.sh b/kickstart/recipes/kickstart.sh new file mode 100644 index 0000000..fa9bfc5 --- /dev/null +++ b/kickstart/recipes/kickstart.sh @@ -0,0 +1,29 @@ +kickstart.os() { + ( uname -a | grep -q Ubuntu ) && echo "Ubuntu" +} + +kickstart.codename() { + lsb_release -sc +} + +kickstart.info() { + echo $@ >&2 +} + +kickstart.mute() { + echo "Running \"$@\"" + `$@ >/dev/null 2>&1` + return $? +} + +kickstart.add_to_profile.d() { + file=$1 + [ ! -f files/$file ] && echo "File files/$file not found" && exit 1 + + cp files/$file /etc/profile.d/$file + grep -q $file /etc/zshenv 2>&1 || ( echo "[[ -f /etc/profile.d/$file ]] && source /etc/profile.d/$file" >> /etc/zshenv ) +} + +for recipe in recipes/kickstart/*; do + source $recipe +done diff --git a/kickstart/recipes/kickstart/apt.sh b/kickstart/recipes/kickstart/apt.sh new file mode 100644 index 0000000..596b5cd --- /dev/null +++ b/kickstart/recipes/kickstart/apt.sh @@ -0,0 +1,20 @@ +kickstart.apt.update() { + kickstart.mute "apt-get update -y" +} + +kickstart.apt.upgrade() { + kickstart.mute "apt-get -y upgrade" +} + +kickstart.apt.ppa() { + kickstart.mute "add-apt-repository -y $1" + kickstart.apt.update +} + +kickstart.apt.add_key_from_url() { + kickstart.download.stream $1 | kickstart.mute 'apt-key add -' +} + +kickstart.apt.add_key_from_keychain() { + kickstart.mute "apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv $1" +} diff --git a/kickstart/recipes/kickstart/download.sh b/kickstart/recipes/kickstart/download.sh new file mode 100644 index 0000000..a8ef593 --- /dev/null +++ b/kickstart/recipes/kickstart/download.sh @@ -0,0 +1,14 @@ +kickstart.download.file() { + kickstart.download.stream $1 > $2 +} + +kickstart.download.stream() { + if [ `which curl` ]; then + curl $1 + elif [ `which wget` ]; then + wget -qO - $1 + else + kickstart.info "No download application found" + exit 1 + fi +} diff --git a/kickstart/recipes/kickstart/group.sh b/kickstart/recipes/kickstart/group.sh new file mode 100644 index 0000000..223c83d --- /dev/null +++ b/kickstart/recipes/kickstart/group.sh @@ -0,0 +1,3 @@ +kickstart.group.create() { + grep -q $1 /etc/group || groupadd docker +} diff --git a/kickstart/recipes/kickstart/package.sh b/kickstart/recipes/kickstart/package.sh new file mode 100644 index 0000000..c23ed62 --- /dev/null +++ b/kickstart/recipes/kickstart/package.sh @@ -0,0 +1,31 @@ +# Set $kickstart_pkg to "apt-get" or "yum", or abort. +if which apt-get >/dev/null 2>&1; then + export kickstart_pkg=apt-get +elif which yum >/dev/null 2>&1; then + export kickstart_pkg=yum +fi + +if [ "$kickstart_pkg" = '' ]; then + echo 'kickstart only supports apt-get or yum!' >&2 + exit 1 +fi + +kickstart.package.installed() { + if [ "$kickstart_pkg" = 'apt-get' ]; then + dpkg -s $@ >/dev/null 2>&1 + elif [ "$kickstart_pkg" = 'yum' ]; then + rpm -qa | grep $@ >/dev/null + fi + return $? +} + +kickstart.package.install() { + if kickstart.package.installed "$@"; then + echo "$@ already installed" + return 1 + else + echo "No packages found matching $@. Installing..." + kickstart.mute "$kickstart_pkg -y install $@" + return 0 + fi +} diff --git a/kickstart/recipes/kickstart/service.sh b/kickstart/recipes/kickstart/service.sh new file mode 100644 index 0000000..3f5b61b --- /dev/null +++ b/kickstart/recipes/kickstart/service.sh @@ -0,0 +1,20 @@ +kickstart.service.enable() { + [ `which enable` ] && enable $1 +} +kickstart.service.disable() { + [ `which disable` ] && disable $1 +} + +kickstart.service.start() { + [ `which start` ] && start $1 +} + +kickstart.service.stop() { + [ `which stop` ] && stop $1 +} + +kickstart.service.restart() { + kickstart.service.stop $1 + kickstart.service.start $1 +} + diff --git a/kickstart/recipes/kickstart/user.sh b/kickstart/recipes/kickstart/user.sh new file mode 100644 index 0000000..07c69e3 --- /dev/null +++ b/kickstart/recipes/kickstart/user.sh @@ -0,0 +1,3 @@ +kickstart.user.add_group() { + grep -q $2 <(groups $1) || usermod -a -G $2 $1 +}