Updating provisioner to use latest bootstrap script

This commit is contained in:
Ray Elsleiman 2013-06-20 08:51:44 +10:00
parent e108995023
commit 836eadf7b0
2 changed files with 415 additions and 121 deletions

View File

@ -16,7 +16,7 @@
# CREATED: 10/15/2012 09:49:37 PM WEST # CREATED: 10/15/2012 09:49:37 PM WEST
#=============================================================================== #===============================================================================
set -o nounset # Treat unset variables as an error set -o nounset # Treat unset variables as an error
ScriptVersion="1.5.4" ScriptVersion="1.5.5"
ScriptName="bootstrap-salt.sh" ScriptName="bootstrap-salt.sh"
#=============================================================================== #===============================================================================
@ -145,7 +145,7 @@ usage() {
-C Only run the configuration function. This option automaticaly -C Only run the configuration function. This option automaticaly
bypasses any installation. bypasses any installation.
-P Allow pip based installations. On some distributions the required salt -P Allow pip based installations. On some distributions the required salt
packages or it's dependencies are not available as a package for that packages or its dependencies are not available as a package for that
distribution. Using this flag allows the script to use pip as a last distribution. Using this flag allows the script to use pip as a last
resort method. NOTE: This works for functions which actually implement resort method. NOTE: This works for functions which actually implement
pip based installations. pip based installations.
@ -154,6 +154,65 @@ usage() {
EOT EOT
} # ---------- end of function usage ---------- } # ---------- end of function usage ----------
#=== FUNCTION ================================================================
# NAME: __fetch_url
# DESCRIPTION: Retrieves a URL and writes it to a given path
#===============================================================================
__fetch_url() {
curl --insecure -s -o "$1" "$2" >/dev/null 2>&1 ||
wget --no-check-certificate -q -O "$1" "$2" >/dev/null 2>&1 ||
fetch -q -o "$1" "$2" >/dev/null 2>&1
}
#=== FUNCTION ================================================================
# NAME: __check_config_dir
# DESCRIPTION: Checks the config directory, retrieves URLs if provided.
#===============================================================================
__check_config_dir() {
CC_DIR_NAME="$1"
CC_DIR_BASE=$(basename "${CC_DIR_NAME}")
case "$CC_DIR_NAME" in
http://*|https://*)
__fetch_url "/tmp/${CC_DIR_BASE}" "${CC_DIR_NAME}"
CC_DIR_NAME="/tmp/${CC_DIR_BASE}"
;;
ftp://*)
__fetch_url "/tmp/${CC_DIR_BASE}" "${CC_DIR_NAME}"
CC_DIR_NAME="/tmp/${CC_DIR_BASE}"
;;
*)
if [ ! -e "${CC_DIR_NAME}" ]; then
echo "null"
return 0
fi
;;
esac
case "$CC_DIR_NAME" in
*.tgz|*.tar.gz)
tar -zxf "${CC_DIR_NAME}" -C /tmp
CC_DIR_BASE=$(basename ${CC_DIR_BASE} ".tgz")
CC_DIR_BASE=$(basename ${CC_DIR_BASE} ".tar.gz")
CC_DIR_NAME="/tmp/${CC_DIR_BASE}"
;;
*.tbz|*.tar.bz2)
tar -xjf "${CC_DIR_NAME}" -C /tmp
CC_DIR_BASE=$(basename ${CC_DIR_BASE} ".tbz")
CC_DIR_BASE=$(basename ${CC_DIR_BASE} ".tar.bz2")
CC_DIR_NAME="/tmp/${CC_DIR_BASE}"
;;
*.txz|*.tar.xz)
tar -xJf "${CC_DIR_NAME}" -C /tmp
CC_DIR_BASE=$(basename ${CC_DIR_BASE} ".txz")
CC_DIR_BASE=$(basename ${CC_DIR_BASE} ".tar.xz")
CC_DIR_NAME="/tmp/${CC_DIR_BASE}"
;;
esac
echo "${CC_DIR_NAME}"
}
#----------------------------------------------------------------------- #-----------------------------------------------------------------------
# Handle command line arguments # Handle command line arguments
#----------------------------------------------------------------------- #-----------------------------------------------------------------------
@ -177,8 +236,12 @@ do
v ) echo "$0 -- Version $ScriptVersion"; exit 0 ;; v ) echo "$0 -- Version $ScriptVersion"; exit 0 ;;
n ) COLORS=0; __detect_color_support ;; n ) COLORS=0; __detect_color_support ;;
D ) ECHO_DEBUG=$BS_TRUE ;; D ) ECHO_DEBUG=$BS_TRUE ;;
c ) TEMP_CONFIG_DIR="$OPTARG" c ) TEMP_CONFIG_DIR=$(__check_config_dir "$OPTARG")
# If the configuration directory does not exist, error out # If the configuration directory does not exist, error out
if [ "$TEMP_CONFIG_DIR" = "null" ]; then
echoerror "Unsupported URI scheme for $OPTARG"
exit 1
fi
if [ ! -d "$TEMP_CONFIG_DIR" ]; then if [ ! -d "$TEMP_CONFIG_DIR" ]; then
echoerror "The configuration directory ${TEMP_CONFIG_DIR} does not exist." echoerror "The configuration directory ${TEMP_CONFIG_DIR} does not exist."
exit 1 exit 1
@ -211,7 +274,13 @@ shift $(($OPTIND-1))
__check_unparsed_options() { __check_unparsed_options() {
shellopts="$1" shellopts="$1"
unparsed_options=$( echo "$shellopts" | grep -E '[-]+[[:alnum:]]' ) # grep alternative for SunOS
if [ -f /usr/xpg4/bin/grep ]; then
grep='/usr/xpg4/bin/grep'
else
grep='grep'
fi
unparsed_options=$( echo "$shellopts" | ${grep} -E '[-]+[[:alnum:]]' )
if [ "x$unparsed_options" != "x" ]; then if [ "x$unparsed_options" != "x" ]; then
usage usage
echo echo
@ -267,9 +336,14 @@ if [ "$#" -gt 0 ]; then
echoerror "Too many arguments." echoerror "Too many arguments."
exit 1 exit 1
fi fi
# whoami alternative for SunOS
if [ -f /usr/xpg4/bin/id ]; then
whoami='/usr/xpg4/bin/id -un'
else
whoami='whoami'
fi
# Root permissions are required to run this script # Root permissions are required to run this script
if [ $(whoami) != "root" ] ; then if [ $(${whoami}) != "root" ]; then
echoerror "Salt requires root privileges to install. Please re-run this script as root." echoerror "Salt requires root privileges to install. Please re-run this script as root."
exit 1 exit 1
fi fi
@ -279,7 +353,7 @@ if [ "${CALLER}x" = "${0}x" ]; then
CALLER="PIPED THROUGH" CALLER="PIPED THROUGH"
fi fi
echoinfo "${CALLER} ${0} -- Version ${ScriptVersion}" echoinfo "${CALLER} ${0} -- Version ${ScriptVersion}"
echowarn "Running the unstable version of ${ScriptName}" #echowarn "Running the unstable version of ${ScriptName}"
#--- FUNCTION ---------------------------------------------------------------- #--- FUNCTION ----------------------------------------------------------------
@ -639,6 +713,13 @@ __gather_sunos_system_info() {
-e 's;^5\.\([0-9][0-9]*\).*;\1;' -e 's;^5\.\([0-9][0-9]*\).*;\1;'
) )
fi fi
if [ "${DISTRO_NAME}" = "SmartOS" ]; then
VIRTUAL_TYPE="smartmachine"
if [ "$(zonename)" = "global" ]; then
VIRTUAL_TYPE="global"
fi
fi
} }
@ -783,7 +864,7 @@ __git_clone_and_checkout() {
git pull --rebase || return 1 git pull --rebase || return 1
fi fi
else else
git clone https://github.com/saltstack/salt.git salt || return 1 git clone git://github.com/saltstack/salt.git || return 1
cd $SALT_GIT_CHECKOUT_DIR cd $SALT_GIT_CHECKOUT_DIR
git checkout $GIT_REV || return 1 git checkout $GIT_REV || return 1
fi fi
@ -963,7 +1044,7 @@ install_ubuntu_deps() {
} }
install_ubuntu_daily_deps() { install_ubuntu_daily_deps() {
apt-get update install_ubuntu_deps
if [ $DISTRO_MAJOR_VERSION -eq 12 ] && [ $DISTRO_MINOR_VERSION -gt 04 ] || [ $DISTRO_MAJOR_VERSION -gt 12 ]; then if [ $DISTRO_MAJOR_VERSION -eq 12 ] && [ $DISTRO_MINOR_VERSION -gt 04 ] || [ $DISTRO_MAJOR_VERSION -gt 12 ]; then
# Above Ubuntu 12.04 add-apt-repository is in a different package # Above Ubuntu 12.04 add-apt-repository is in a different package
__apt_get_noinput software-properties-common || return 1 __apt_get_noinput software-properties-common || return 1
@ -1194,91 +1275,112 @@ install_debian_deps() {
} }
install_debian_6_deps() { install_debian_6_deps() {
check_pip_allowed
echowarn "PyZMQ will be installed from PyPi in order to compile it against ZMQ3"
echowarn "This is required for long term stable minion connections to the master."
# No user interaction, libc6 restart services for example # No user interaction, libc6 restart services for example
export DEBIAN_FRONTEND=noninteractive export DEBIAN_FRONTEND=noninteractive
wget -q http://debian.saltstack.com/debian-salt-team-joehealy.gpg.key -O - | apt-key add - || return 1
if [ $PIP_ALLOWED -eq $BS_TRUE ]; then
echowarn "PyZMQ will be installed from PyPI in order to compile it against ZMQ3"
echowarn "This is required for long term stable minion connections to the master."
echowarn "YOU WILL END UP WILL QUITE A FEW PACKAGES FROM DEBIAN UNSTABLE"
echowarn "Sleeping for 3 seconds so you can cancel..."
sleep 3
if [ ! -f /etc/apt/sources.list.d/debian-unstable.list ]; then
cat <<_eof > /etc/apt/sources.list.d/debian-unstable.list
deb http://ftp.debian.org/debian unstable main
deb-src http://ftp.debian.org/debian unstable main
_eof
cat <<_eof > /etc/apt/preferences.d/libzmq3-debian-unstable.pref
Package: libzmq3
Pin: release a=unstable
Pin-Priority: 800
Package: libzmq3-dev
Pin: release a=unstable
Pin-Priority: 800
_eof
fi
apt-get update
# We NEED to install the unstable dpkg or mime-support WILL fail to install
__apt_get_noinput -t unstable dpkg liblzma5 python mime-support || return 1
__apt_get_noinput -t unstable libzmq3 libzmq3-dev || return 1
__apt_get_noinput build-essential python-dev python-pip || return 1
# Saltstack's Unstable Debian repository
if [ "x$(grep -R 'debian.saltstack.com' /etc/apt)" = "x" ]; then
echo "deb http://debian.saltstack.com/debian unstable main" >> \
/etc/apt/sources.list.d/saltstack.list
fi
return 0
fi
# Debian Backports
if [ "x$(grep -R 'backports.debian.org' /etc/apt)" = "x" ]; then if [ "x$(grep -R 'backports.debian.org' /etc/apt)" = "x" ]; then
echo "deb http://backports.debian.org/debian-backports squeeze-backports main" >> \ echo "deb http://backports.debian.org/debian-backports squeeze-backports main" >> \
/etc/apt/sources.list.d/backports.list /etc/apt/sources.list.d/backports.list
fi fi
if [ ! -f /etc/apt/preferences.d/local-salt-backport.pref ]; then # Saltstack's Stable Debian repository
# Add madduck's repo since squeeze packages have been deprecated if [ "x$(grep -R 'squeeze-saltstack' /etc/apt)" = "x" ]; then
for fname in salt-common salt-master salt-minion salt-syndic salt-doc; do echo "deb http://debian.saltstack.com/debian squeeze-saltstack main" >> \
echo "Package: $fname" /etc/apt/sources.list.d/saltstack.list
echo "Pin: release a=squeeze-backports"
echo "Pin-Priority: 600"
echo
done > /etc/apt/preferences.d/local-salt-backport.pref
cat <<_eof > /etc/apt/sources.list.d/local-madduck-backports.list
deb http://debian.madduck.net/repo squeeze-backports main
deb-src http://debian.madduck.net/repo squeeze-backports main
_eof
wget -q http://debian.madduck.net/repo/gpg/archive.key -O - | apt-key add - || return 1
fi fi
apt-get update || return 1
if [ ! -f /etc/apt/sources.list.d/debian-experimental.list ]; then __apt_get_noinput python-zmq || return 1
cat <<_eof > /etc/apt/sources.list.d/debian-experimental.list
deb http://ftp.debian.org/debian experimental main
deb-src http://ftp.debian.org/debian experimental main
_eof
cat <<_eof > /etc/apt/preferences.d/libzmq3-debian-experimental.pref
Package: libzmq3
Pin: release a=experimental
Pin-Priority: 800
Package: libzmq3-dev
Pin: release a=experimental
Pin-Priority: 800
_eof
fi
apt-get update
__apt_get_noinput -t experimental libzmq3 libzmq3-dev || return 1
__apt_get_noinput build-essential python-dev python-pip || return 1
return 0 return 0
} }
install_debian_7_deps() { install_debian_7_deps() {
check_pip_allowed # No user interaction, libc6 restart services for example
echowarn "PyZMQ will be installed from PyPi in order to compile it against ZMQ3" export DEBIAN_FRONTEND=noninteractive
echowarn "This is required for long term stable minion connections to the master."
if [ ! -f /etc/apt/sources.list.d/debian-experimental.list ]; then # Saltstack's Stable Debian repository
cat <<_eof > /etc/apt/sources.list.d/debian-experimental.list if [ "x$(grep -R 'wheezy-saltstack' /etc/apt)" = "x" ]; then
deb http://ftp.debian.org/debian experimental main echo "deb http://debian.saltstack.com/debian wheezy-saltstack main" >> \
deb-src http://ftp.debian.org/debian experimental main /etc/apt/sources.list.d/saltstack.list
fi
wget -q http://debian.saltstack.com/debian-salt-team-joehealy.gpg.key -O - | apt-key add - || return 1
if [ $PIP_ALLOWED -eq $BS_TRUE ]; then
echowarn "PyZMQ will be installed from PyPI in order to compile it against ZMQ3"
echowarn "This is required for long term stable minion connections to the master."
echowarn "YOU WILL END UP WILL QUITE A FEW PACKAGES FROM DEBIAN UNSTABLE"
echowarn "Sleeping for 3 seconds so you can cancel..."
sleep 3
if [ ! -f /etc/apt/sources.list.d/debian-unstable.list ]; then
cat <<_eof > /etc/apt/sources.list.d/debian-unstable.list
deb http://ftp.debian.org/debian unstable main
deb-src http://ftp.debian.org/debian unstable main
_eof _eof
cat <<_eof > /etc/apt/preferences.d/libzmq3-debian-experimental.pref cat <<_eof > /etc/apt/preferences.d/libzmq3-debian-unstable.pref
Package: libzmq3 Package: libzmq3
Pin: release a=experimental Pin: release a=unstable
Pin-Priority: 800 Pin-Priority: 800
Package: libzmq3-dev Package: libzmq3-dev
Pin: release a=experimental Pin: release a=unstable
Pin-Priority: 800 Pin-Priority: 800
_eof _eof
fi fi
apt-get update apt-get update
__apt_get_noinput -t experimental libzmq3 libzmq3-dev || return 1 __apt_get_noinput -t unstable libzmq3 libzmq3-dev || return 1
__apt_get_noinput build-essential python-dev python-pip || return 1 __apt_get_noinput build-essential python-dev python-pip || return 1
else
apt-get update || return 1
__apt_get_noinput python-zmq || return 1
fi
return 0 return 0
} }
install_debian_git_deps() { install_debian_git_deps() {
check_pip_allowed
echowarn "PyZMQ will be installed from PyPi in order to compile it against ZMQ3"
echowarn "This is required for long term stable minion connections to the master."
# No user interaction, libc6 restart services for example # No user interaction, libc6 restart services for example
export DEBIAN_FRONTEND=noninteractive export DEBIAN_FRONTEND=noninteractive
@ -1299,19 +1401,32 @@ install_debian_git_deps() {
} }
install_debian_6_git_deps() { install_debian_6_git_deps() {
install_debian_6_deps || return 1 # Add backports install_debian_6_deps || return 1
install_debian_git_deps || return 1 # Grab the actual deps if [ $PIP_ALLOWED -eq $BS_TRUE ]; then
easy_install -U Jinja2 || return 1
__apt_get_noinput lsb-release python python-pkg-resources python-crypto \
python-m2crypto python-yaml msgpack-python python-pip git || return 1
__git_clone_and_checkout || return 1
# Let's trigger config_salt()
if [ "$TEMP_CONFIG_DIR" = "null" ]; then
TEMP_CONFIG_DIR="${SALT_GIT_CHECKOUT_DIR}/conf/"
CONFIG_SALT_FUNC="config_salt"
fi
else
install_debian_git_deps || return 1 # Grab the actual deps
fi
return 0 return 0
} }
install_debian_7_git_deps() { install_debian_7_git_deps() {
install_debian_7_deps || return 1 # Add experimental repository for ZMQ3 install_debian_7_deps || return 1
install_debian_git_deps || return 1 # Grab the actual deps install_debian_git_deps || return 1 # Grab the actual deps
return 0 return 0
} }
__install_debian_stable() { __install_debian_stable() {
check_pip_allowed
packages="" packages=""
if [ $INSTALL_MINION -eq $BS_TRUE ]; then if [ $INSTALL_MINION -eq $BS_TRUE ]; then
packages="${packages} salt-minion" packages="${packages} salt-minion"
@ -1324,9 +1439,13 @@ __install_debian_stable() {
fi fi
__apt_get_noinput ${packages} || return 1 __apt_get_noinput ${packages} || return 1
# Building pyzmq from source to build it against libzmq3. if [ $PIP_ALLOWED -eq $BS_TRUE ]; then
# Should override current installation # Building pyzmq from source to build it against libzmq3.
pip install -U pyzmq || return 1 # Should override current installation
# Using easy_install instead of pip because at least on Debian 6,
# there's no default virtualenv active.
easy_install -U pyzmq || return 1
fi
return 0 return 0
} }
@ -1337,15 +1456,23 @@ install_debian_6_stable() {
return 0 return 0
} }
install_debian_git() { install_debian_7_stable() {
python setup.py install --install-layout=deb || return 1 __install_debian_stable || return 1
# Building pyzmq from source to build it against libzmq3.
# Should override current installation
pip install -U pyzmq || return 1
return 0 return 0
} }
install_debian_git() {
if [ $PIP_ALLOWED -eq $BS_TRUE ]; then
# Building pyzmq from source to build it against libzmq3.
# Should override current installation
# Using easy_install instead of pip because at least on Debian 6,
# there's no default virtualenv active.
easy_install -U pyzmq || return 1
fi
python setup.py install --install-layout=deb || return 1
}
install_debian_6_git() { install_debian_6_git() {
install_debian_git || return 1 install_debian_git || return 1
return 0 return 0
@ -1784,14 +1911,21 @@ install_amazon_linux_ami_git_post() {
# #
install_arch_linux_stable_deps() { install_arch_linux_stable_deps() {
grep '\[salt\]' /etc/pacman.conf >/dev/null 2>&1 || echo '[salt] grep '\[salt\]' /etc/pacman.conf >/dev/null 2>&1 || echo '[salt]
Server = http://intothesaltmine.org/archlinux Include = /etc/pacman.d/salt.conf
' >> /etc/pacman.conf ' >> /etc/pacman.conf
# Create a pacman .d directory so we can just override salt's
# included configuration if needed
[ -d /etc/pacman.d ] || mkdir -p /etc/pacman.d
cat <<_eof > /etc/pacman.d/salt.conf
Server = http://intothesaltmine.org/archlinux
SigLevel = Optional TrustAll
_eof
} }
install_arch_linux_git_deps() { install_arch_linux_git_deps() {
grep '\[salt\]' /etc/pacman.conf >/dev/null 2>&1 || echo '[salt] install_arch_linux_stable_deps
Server = http://intothesaltmine.org/archlinux
' >> /etc/pacman.conf
pacman -Sy --noconfirm pacman || return 1 pacman -Sy --noconfirm pacman || return 1
pacman -Sy --noconfirm git python2-crypto python2-distribute \ pacman -Sy --noconfirm git python2-crypto python2-distribute \
@ -1920,28 +2054,36 @@ __freebsd_get_packagesite() {
} }
install_freebsd_9_stable_deps() { install_freebsd_9_stable_deps() {
__freebsd_get_packagesite if [ ! -x /usr/local/sbin/pkg ]; then
__freebsd_get_packagesite
fetch "${BS_PACKAGESITE}/Latest/pkg.txz" || return 1 fetch "${BS_PACKAGESITE}/Latest/pkg.txz" || return 1
tar xf ./pkg.txz -s ",/.*/,,g" "*/pkg-static" || return 1 tar xf ./pkg.txz -s ",/.*/,,g" "*/pkg-static" || return 1
./pkg-static add ./pkg.txz || return 1 ./pkg-static add ./pkg.txz || return 1
/usr/local/sbin/pkg2ng || return 1 /usr/local/sbin/pkg2ng || return 1
echo "PACKAGESITE: ${BS_PACKAGESITE}" > /usr/local/etc/pkg.conf echo "PACKAGESITE: ${BS_PACKAGESITE}" > /usr/local/etc/pkg.conf
fi
/usr/local/sbin/pkg install -y swig || return 1 /usr/local/sbin/pkg install -y swig || return 1
# Lets set SALT_ETC_DIR to ports default
SALT_ETC_DIR=${BS_SALT_ETC_DIR:-/usr/local/etc/salt}
return 0 return 0
} }
install_freebsd_git_deps() { install_freebsd_git_deps() {
__freebsd_get_packagesite if [ ! -x /usr/local/sbin/pkg ]; then
__freebsd_get_packagesite
fetch "${BS_PACKAGESITE}/Latest/pkg.txz" || return 1 fetch "${BS_PACKAGESITE}/Latest/pkg.txz" || return 1
tar xf ./pkg.txz -s ",/.*/,,g" "*/pkg-static" || return 1 tar xf ./pkg.txz -s ",/.*/,,g" "*/pkg-static" || return 1
./pkg-static add ./pkg.txz || return 1 ./pkg-static add ./pkg.txz || return 1
/usr/local/sbin/pkg2ng || return 1 /usr/local/sbin/pkg2ng || return 1
echo "PACKAGESITE: ${BS_PACKAGESITE}" > /usr/local/etc/pkg.conf echo "PACKAGESITE: ${BS_PACKAGESITE}" > /usr/local/etc/pkg.conf
fi
/usr/local/sbin/pkg install -y swig || return 1 /usr/local/sbin/pkg install -y swig git || return 1
__git_clone_and_checkout || return 1 __git_clone_and_checkout || return 1
# Let's trigger config_salt() # Let's trigger config_salt()
@ -1959,7 +2101,7 @@ install_freebsd_9_stable() {
} }
install_freebsd_git() { install_freebsd_git() {
/usr/local/sbin/pkg install -y git sysutils/py-salt || return 1 /usr/local/sbin/pkg install -y sysutils/py-salt || return 1
/usr/local/sbin/pkg delete -y sysutils/py-salt || return 1 /usr/local/sbin/pkg delete -y sysutils/py-salt || return 1
/usr/local/bin/python setup.py install || return 1 /usr/local/bin/python setup.py install || return 1
@ -2039,11 +2181,11 @@ install_smartos_deps() {
CONFIG_SALT_FUNC="config_salt" CONFIG_SALT_FUNC="config_salt"
# Let's download, since they were not provided, the default configuration files # Let's download, since they were not provided, the default configuration files
if [ ! -f /etc/salt/minion ] && [ ! -f $TEMP_CONFIG_DIR/minion ]; then if [ ! -f $SALT_ETC_DIR/minion ] && [ ! -f $TEMP_CONFIG_DIR/minion ]; then
curl -sk -o $TEMP_CONFIG_DIR/minion -L \ curl -sk -o $TEMP_CONFIG_DIR/minion -L \
https://raw.github.com/saltstack/salt/develop/conf/minion || return 1 https://raw.github.com/saltstack/salt/develop/conf/minion || return 1
fi fi
if [ ! -f /etc/salt/master ] && [ ! -f $TEMP_CONFIG_DIR/master ]; then if [ ! -f $SALT_ETC_DIR/master ] && [ ! -f $TEMP_CONFIG_DIR/master ]; then
curl -sk -o $TEMP_CONFIG_DIR/master -L \ curl -sk -o $TEMP_CONFIG_DIR/master -L \
https://raw.github.com/saltstack/salt/develop/conf/master || return 1 https://raw.github.com/saltstack/salt/develop/conf/master || return 1
fi fi
@ -2079,24 +2221,54 @@ install_smartos_git() {
} }
install_smartos_post() { install_smartos_post() {
smf_dir="/opt/custom/smf"
# Install manifest files if needed. # Install manifest files if needed.
for fname in minion master syndic; do for fname in minion master syndic; do
# Skip if not meant to be installed
[ $fname = "minion" ] && [ $INSTALL_MINION -eq $BS_FALSE ] && continue
[ $fname = "master" ] && [ $INSTALL_MASTER -eq $BS_FALSE ] && continue
[ $fname = "syndic" ] && [ $INSTALL_SYNDIC -eq $BS_FALSE ] && continue
svcs network/salt-$fname > /dev/null 2>&1 svcs network/salt-$fname > /dev/null 2>&1
if [ $? -eq 1 ]; then if [ $? -eq 1 ]; then
if [ ! -f $TEMP_CONFIG_DIR/salt-$fname.xml ]; then if [ ! -f $TEMP_CONFIG_DIR/salt-$fname.xml ]; then
curl -sk -o $TEMP_CONFIG_DIR/salt-$fname.xml -L https://raw.github.com/saltstack/salt/develop/pkg/solaris/salt-$fname.xml curl -sk -o $TEMP_CONFIG_DIR/salt-$fname.xml -L https://raw.github.com/saltstack/salt/develop/pkg/smartos/salt-$fname.xml
fi fi
svccfg import $TEMP_CONFIG_DIR/salt-$fname.xml svccfg import $TEMP_CONFIG_DIR/salt-$fname.xml
if [ "${VIRTUAL_TYPE}" = "global" ]; then
if [ ! -d $smf_dir ]; then
mkdir -p $smf_dir && cp $TEMP_CONFIG_DIR/salt-$fname.xml $smf_dir/
fi
if [ ! -f $smf_dir/salt-$fname.xml ]; then
cp $TEMP_CONFIG_DIR/salt-$fname.xml $smf_dir/
fi
fi
fi fi
done done
} }
install_smartos_git_post() { install_smartos_git_post() {
smf_dir="/opt/custom/smf"
# Install manifest files if needed. # Install manifest files if needed.
for fname in minion master syndic; do for fname in minion master syndic; do
# Skip if not meant to be installed
[ $fname = "minion" ] && [ $INSTALL_MINION -eq $BS_FALSE ] && continue
[ $fname = "master" ] && [ $INSTALL_MASTER -eq $BS_FALSE ] && continue
[ $fname = "syndic" ] && [ $INSTALL_SYNDIC -eq $BS_FALSE ] && continue
svcs network/salt-$fname > /dev/null 2>&1 svcs network/salt-$fname > /dev/null 2>&1
if [ $? -eq 1 ]; then if [ $? -eq 1 ]; then
svccfg import ${SALT_GIT_CHECKOUT_DIR}/pkg/solaris/salt-$fname.xml svccfg import ${SALT_GIT_CHECKOUT_DIR}/pkg/smartos/salt-$fname.xml
if [ "${VIRTUAL_TYPE}" = "global" ]; then
if [ ! -d $smf_dir ]; then
mkdir -p $smf_dir && cp ${SALT_GIT_CHECKOUT_DIR}/pkg/smartos/salt-$fname.xml $smf_dir/
fi
if [ ! -f $smf_dir/salt-$fname.xml ]; then
cp ${SALT_GIT_CHECKOUT_DIR}/pkg/smartos/salt-$fname.xml $smf_dir/
fi
fi
fi fi
done done
} }
@ -2134,7 +2306,13 @@ install_opensuse_stable_deps() {
http://download.opensuse.org/repositories/devel:/languages:/python/${DISTRO_REPO}/devel:languages:python.repo || return 1 http://download.opensuse.org/repositories/devel:/languages:/python/${DISTRO_REPO}/devel:languages:python.repo || return 1
fi fi
zypper --gpg-auto-import-keys --non-interactive refresh || return 1 zypper --gpg-auto-import-keys --non-interactive refresh
exitcode=$?
if [ $? -ne 0 ] && [ $? -ne 4 ]; then
# If the exit code is not 0, and it's not 4(failed to update a
# repository) return a failure. Otherwise continue.
return 1
fi
zypper --non-interactive install --auto-agree-with-licenses libzmq3 python \ zypper --non-interactive install --auto-agree-with-licenses libzmq3 python \
python-Jinja2 python-M2Crypto python-PyYAML python-msgpack-python \ python-Jinja2 python-M2Crypto python-PyYAML python-msgpack-python \
python-pycrypto python-pyzmq || return 1 python-pycrypto python-pyzmq || return 1
@ -2295,7 +2473,7 @@ install_suse_11_stable_deps() {
[ $fname = "syndic" ] && fname=master [ $fname = "syndic" ] && fname=master
# Let's download, since they were not provided, the default configuration files # Let's download, since they were not provided, the default configuration files
if [ ! -f /etc/salt/$fname ] && [ ! -f $TEMP_CONFIG_DIR/$fname ]; then if [ ! -f $SALT_ETC_DIR/$fname ] && [ ! -f $TEMP_CONFIG_DIR/$fname ]; then
curl -sk -o $TEMP_CONFIG_DIR/$fname -L \ curl -sk -o $TEMP_CONFIG_DIR/$fname -L \
https://raw.github.com/saltstack/salt/develop/conf/$fname || return 1 https://raw.github.com/saltstack/salt/develop/conf/$fname || return 1
fi fi
@ -2376,6 +2554,110 @@ install_suse_11_restart_daemons() {
# #
############################################################################## ##############################################################################
##############################################################################
#
# Gentoo Install Functions.
#
__gentoo_set_ackeys() {
GENTOO_ACKEYS=""
if [ ! -e /etc/portage/package.accept_keywords ]; then
# This is technically bad, but probably for the best.
# We'll assume that they want a file, as that's the default behaviour of portage.
# If they really want a folder they'll need to handle that themselves.
# We could use the ACCEPT_KEYWORDS environment variable, but that exceeds the minimum requires.
GENTOO_ACKEYS="/etc/portage/package.accept_keywords"
else
if [ -f /etc/portage/package.accept_keywords ]; then
GENTOO_ACKEYS="/etc/portage/package.accept_keywords"
elif [ -d /etc/portage/package.accept_keywords ]; then
GENTOO_ACKEYS="/etc/portage/package.accept_keywords/salt"
else
# We could use accept_keywords env, but this likely indicates a bigger problem.
echo "Error: /etc/portage/package.accept_keywords is neither directory nor file."
return 1
fi
fi
return 0
}
__gentoo_pre_dep() {
emerge --sync
if [ ! -d /etc/portage ]; then
mkdir /etc/portage
fi
__gentoo_set_ackeys || return 1
cat >> ${GENTOO_ACKEYS} << _EOT
# Keywords added by bootstrap-salt
# required by salt, based on the 0.15.1 ebuild
>=dev-python/pycryptopp-0.6.0
>=dev-python/m2crypto-0.21.1-r1
>=dev-python/pyyaml-3.10-r1
>=dev-python/pyzmq-13.1.0
>=dev-python/msgpack-0.3.0
_EOT
}
__gentoo_post_dep() {
cat >> ${GENTOO_ACKEYS} << _EOT
# End of bootstrap-salt keywords.
_EOT
# the -o option asks it to emerge the deps but not the package.
emerge -vo salt
}
install_gentoo_deps() {
__gentoo_pre_dep || return 1
echo "app-admin/salt" >> ${GENTOO_ACKEYS}
__gentoo_post_dep
}
install_gentoo_git_deps() {
emerge git
__gentoo_pre_dep || return 1
echo "=app-admin/salt-9999 **" >> ${GENTOO_ACKEYS}
__gentoo_post_dep
}
install_gentoo_stable() {
emerge -v salt || return 1
}
install_gentoo_git() {
install_gentoo_stable || return 1
}
install_gentoo_post() {
for fname in minion master syndic; do
# Skip if not meant to be installed
[ $fname = "minion" ] && [ $INSTALL_MINION -eq $BS_FALSE ] && continue
[ $fname = "master" ] && [ $INSTALL_MASTER -eq $BS_FALSE ] && continue
[ $fname = "syndic" ] && [ $INSTALL_SYNDIC -eq $BS_FALSE ] && continue
rc-update add salt-$fname default
/etc/init.d/salt-$fname start
done
}
install_gentoo_restart_daemons() {
for fname in minion master syndic; do
# Skip if not meant to be installed
[ $fname = "minion" ] && [ $INSTALL_MINION -eq $BS_FALSE ] && continue
[ $fname = "master" ] && [ $INSTALL_MASTER -eq $BS_FALSE ] && continue
[ $fname = "syndic" ] && [ $INSTALL_SYNDIC -eq $BS_FALSE ] && continue
/etc/init.d/salt-$fname stop > /dev/null 2>&1
/etc/init.d/salt-$fname start
done
}
#
# End of Gentoo Install Functions.
#
##############################################################################
############################################################################## ##############################################################################
# #
# Default minion configuration function. Matches ANY distribution as long as # Default minion configuration function. Matches ANY distribution as long as
@ -2399,7 +2681,7 @@ config_salt() {
# Copy the minions configuration if found # Copy the minions configuration if found
if [ -f "$TEMP_CONFIG_DIR/minion" ]; then if [ -f "$TEMP_CONFIG_DIR/minion" ]; then
mv "$TEMP_CONFIG_DIR/minion" /etc/salt || return 1 mv "$TEMP_CONFIG_DIR/minion" $SALT_ETC_DIR || return 1
CONFIGURED_ANYTHING=$BS_TRUE CONFIGURED_ANYTHING=$BS_TRUE
fi fi
@ -2423,7 +2705,7 @@ config_salt() {
# Copy the masters configuration if found # Copy the masters configuration if found
if [ -f "$TEMP_CONFIG_DIR/master" ]; then if [ -f "$TEMP_CONFIG_DIR/master" ]; then
mv "$TEMP_CONFIG_DIR/master" /etc/salt || return 1 mv "$TEMP_CONFIG_DIR/master" $SALT_ETC_DIR || return 1
CONFIGURED_ANYTHING=$BS_TRUE CONFIGURED_ANYTHING=$BS_TRUE
fi fi
@ -2459,14 +2741,21 @@ config_salt() {
# #
preseed_master() { preseed_master() {
# Create the PKI directory # Create the PKI directory
[ -d $PKI_DIR/minions ] || mkdir -p $PKI_DIR/minions && chmod 700 $PKI_DIR/minions || return 1
if [ $(ls $TEMP_KEYS_DIR | wc -l) -lt 1 ]; then
echoerror "No minion keys were uploaded. Unable to pre-seed master"
return 1
fi
SEED_DEST="$PKI_DIR/master/minions"
[ -d $SEED_DEST ] || mkdir -p $SEED_DEST && chmod 700 $SEED_DEST || return 1
for keyfile in $(ls $TEMP_KEYS_DIR); do for keyfile in $(ls $TEMP_KEYS_DIR); do
src_keyfile="${TEMP_KEYS_DIR}/${keyfile}" src_keyfile="${TEMP_KEYS_DIR}/${keyfile}"
dst_keyfile="${PKI_DIR}/minions/${keyfile}" dst_keyfile="${SEED_DEST}/${keyfile}"
# If it's not a file, skip to the next # If it's not a file, skip to the next
[ ! -f $keyfile_path ] && continue [ ! -f $src_keyfile ] && continue
movefile "$src_keyfile" "$dst_keyfile" || return 1 movefile "$src_keyfile" "$dst_keyfile" || return 1
chmod 664 $dst_keyfile || return 1 chmod 664 $dst_keyfile || return 1
@ -2493,7 +2782,12 @@ daemons_running() {
[ $fname = "master" ] && [ $INSTALL_MASTER -eq $BS_FALSE ] && continue [ $fname = "master" ] && [ $INSTALL_MASTER -eq $BS_FALSE ] && continue
[ $fname = "syndic" ] && [ $INSTALL_SYNDIC -eq $BS_FALSE ] && continue [ $fname = "syndic" ] && [ $INSTALL_SYNDIC -eq $BS_FALSE ] && continue
if [ "x$(ps aux | grep -v grep | grep salt-$fname)" = "x" ]; then if [ "${DISTRO_NAME}" = "SmartOS" ]; then
if [ "$(svcs -Ho STA salt-$fname)" != "ON" ]; then
echoerror "salt-$fname was not found running"
FAILED_DAEMONS=$(expr $FAILED_DAEMONS + 1)
fi
elif [ "x$(ps wwwaux | grep -v grep | grep salt-$fname)" = "x" ]; then
echoerror "salt-$fname was not found running" echoerror "salt-$fname was not found running"
FAILED_DAEMONS=$(expr $FAILED_DAEMONS + 1) FAILED_DAEMONS=$(expr $FAILED_DAEMONS + 1)
fi fi