2015-10-05 16:39:26 -04:00
|
|
|
#!/bin/bash
|
|
|
|
#
|
|
|
|
# functions - puppet-openstack-integration specific functions
|
|
|
|
#
|
|
|
|
|
|
|
|
# Install external Puppet modules with r10k
|
|
|
|
# Uses the following variables:
|
|
|
|
#
|
|
|
|
# - ``SCRIPT_DIR`` must be set to script path
|
|
|
|
# - ``GEM_BIN_DIR`` must be set to Gem bin directory
|
|
|
|
install_external() {
|
|
|
|
PUPPETFILE=${SCRIPT_DIR}/Puppetfile1 ${GEM_BIN_DIR}r10k puppetfile install -v
|
|
|
|
}
|
|
|
|
|
|
|
|
# Install Puppet OpenStack modules with zuul-cloner
|
|
|
|
# Uses the following variables:
|
|
|
|
#
|
|
|
|
# - ``PUPPETFILE_DIR`` must be set to Puppet modules directory
|
|
|
|
# - ``SCRIPT_DIR`` must be set to script path
|
2016-04-20 09:38:56 -04:00
|
|
|
# - ``ZUUL_REF`` must be set to Zuul ref. Fallback to 'None'.
|
|
|
|
# - ``ZUUL_BRANCH`` must be set to Zuul branch. Fallback to 'master'.
|
2015-10-05 16:39:26 -04:00
|
|
|
# - ``ZUUL_URL`` must be set to Zuul URL
|
|
|
|
install_openstack() {
|
|
|
|
cat > clonemap.yaml <<EOF
|
|
|
|
clonemap:
|
|
|
|
- name: '(.*?)/puppet-(.*)'
|
|
|
|
dest: '$PUPPETFILE_DIR/\2'
|
|
|
|
EOF
|
|
|
|
|
2016-04-20 09:38:56 -04:00
|
|
|
# Periodic jobs run without ref on master
|
|
|
|
ZUUL_REF=${ZUUL_REF:-None}
|
|
|
|
ZUUL_BRANCH=${ZUUL_BRANCH:-master}
|
|
|
|
|
2015-10-05 16:39:26 -04:00
|
|
|
local project_names=$(awk '{ if ($1 == ":git") print $3 }' \
|
|
|
|
${SCRIPT_DIR}/Puppetfile0 | tr -d "'," | cut -d '/' -f 4- | xargs
|
|
|
|
)
|
|
|
|
/usr/zuul-env/bin/zuul-cloner -m clonemap.yaml \
|
|
|
|
--cache-dir /opt/git \
|
|
|
|
--zuul-ref $ZUUL_REF \
|
|
|
|
--zuul-branch $ZUUL_BRANCH \
|
|
|
|
--zuul-url $ZUUL_URL \
|
|
|
|
git://git.openstack.org $project_names
|
2015-11-06 14:43:25 -05:00
|
|
|
|
|
|
|
# Because openstack-integration can't be a class name.
|
|
|
|
# https://projects.puppetlabs.com/issues/5268
|
|
|
|
mv $PUPPETFILE_DIR/openstack-integration $PUPPETFILE_DIR/openstack_integration
|
2015-10-05 16:39:26 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
# Install all Puppet modules with r10k
|
|
|
|
# Uses the following variables:
|
|
|
|
#
|
|
|
|
# - ``SCRIPT_DIR`` must be set to script path
|
|
|
|
install_all() {
|
2016-02-26 13:57:09 +01:00
|
|
|
PUPPETFILE=${SCRIPT_DIR}/Puppetfile r10k puppetfile install -v
|
2015-10-05 16:39:26 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
# Install Puppet OpenStack modules and dependencies by using
|
|
|
|
# zuul-cloner or r10k.
|
|
|
|
# Uses the following variables:
|
|
|
|
#
|
|
|
|
# - ``PUPPETFILE_DIR`` must be set to Puppet modules directory
|
|
|
|
# - ``SCRIPT_DIR`` must be set to script path
|
|
|
|
# - ``ZUUL_REF`` must be set to Zuul ref
|
|
|
|
# - ``ZUUL_BRANCH`` must be set to Zuul branch
|
|
|
|
# - ``ZUUL_URL`` must be set to Zuul URL
|
|
|
|
install_modules() {
|
|
|
|
# If zuul-cloner is there, have it install modules using zuul refs
|
|
|
|
if [ -e /usr/zuul-env/bin/zuul-cloner ] ; then
|
|
|
|
csplit ${SCRIPT_DIR}/Puppetfile /'External modules'/ \
|
|
|
|
--prefix ${SCRIPT_DIR}/Puppetfile \
|
|
|
|
--suffix '%d'
|
|
|
|
install_external
|
|
|
|
install_openstack
|
|
|
|
else
|
|
|
|
install_all
|
|
|
|
fi
|
|
|
|
}
|
2015-11-05 12:02:15 -05:00
|
|
|
|
|
|
|
is_fedora() {
|
|
|
|
if [ -f /etc/os-release ]; then
|
|
|
|
source /etc/os-release
|
|
|
|
test "$ID" = "fedora" -o "$ID" = "centos"
|
|
|
|
else
|
|
|
|
return 1
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
uses_debs() {
|
|
|
|
# check if apt-get is installed, valid for debian based
|
|
|
|
type "apt-get" 2>/dev/null
|
|
|
|
}
|
|
|
|
|
2016-04-14 14:04:57 -06:00
|
|
|
print_header() {
|
|
|
|
if [ -n "$(set | grep xtrace)" ]; then
|
|
|
|
set +x
|
|
|
|
local enable_xtrace='yes'
|
|
|
|
fi
|
|
|
|
local msg=$1
|
|
|
|
printf '%.0s-' {1..80}; echo
|
|
|
|
printf '| %-76s |\n' "${msg}"
|
|
|
|
printf '%.0s-' {1..80}; echo
|
|
|
|
if [ -n "${enable_xtrace}" ]; then
|
|
|
|
set -x
|
|
|
|
fi
|
|
|
|
}
|
2016-06-08 11:31:00 -04:00
|
|
|
|
|
|
|
install_puppet() {
|
|
|
|
if uses_debs; then
|
|
|
|
print_header 'Setup (Debian based)'
|
|
|
|
# Puppetlabs packaging:
|
|
|
|
# - trusty: puppet3 and puppet4
|
|
|
|
# - xenial: puppet4 only
|
|
|
|
if [[ ${DISTRO} == "trusty" ]] || [[ ${DISTRO} == "xenial" && ${PUPPET_MAJ_VERSION} == 4 ]]; then
|
|
|
|
if dpkg -l $PUPPET_RELEASE_FILE >/dev/null 2>&1; then
|
|
|
|
$SUDO apt-get purge -y $PUPPET_RELEASE_FILE
|
|
|
|
fi
|
|
|
|
$SUDO rm -f /tmp/puppet.deb
|
|
|
|
wget http://apt.puppetlabs.com/${PUPPET_RELEASE_FILE}-${DISTRO}.deb -O /tmp/puppet.deb
|
|
|
|
$SUDO dpkg -i /tmp/puppet.deb
|
|
|
|
# TODO(emilien): figure what installed /etc/default/puppet on the xenial nodepool image
|
|
|
|
# We have no problem on Trusty but on Xenial we need to remove /etc/default/puppet before
|
|
|
|
# trying to deploy puppet-agent from puppetlabs.com.
|
|
|
|
$SUDO rm -rf /etc/default/puppet
|
|
|
|
fi
|
|
|
|
$SUDO apt-get update
|
|
|
|
$SUDO apt-get install -y ${PUPPET_PKG}
|
|
|
|
elif is_fedora; then
|
|
|
|
print_header 'Setup (RedHat based)'
|
|
|
|
if rpm --quiet -q $PUPPET_RELEASE_FILE; then
|
|
|
|
$SUDO rpm -e $PUPPET_RELEASE_FILE
|
|
|
|
fi
|
|
|
|
# EPEL does not work fine with RDO, we need to make sure EPEL is really disabled
|
|
|
|
if rpm --quiet -q epel-release; then
|
|
|
|
$SUDO rpm -e epel-release
|
|
|
|
fi
|
|
|
|
$SUDO rm -f /tmp/puppet.rpm
|
|
|
|
|
|
|
|
wget http://yum.puppetlabs.com/${PUPPET_RELEASE_FILE}-el-7.noarch.rpm -O /tmp/puppet.rpm
|
|
|
|
$SUDO rpm -ivh /tmp/puppet.rpm
|
|
|
|
$SUDO yum install -y ${PUPPET_PKG}
|
|
|
|
fi
|
|
|
|
}
|