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() {
2018-02-06 03:34:34 +00:00
PUPPETFILE=${SCRIPT_DIR}/Puppetfile1 r10k -v DEBUG puppetfile install
2015-10-05 16:39:26 -04:00
}
# Install Puppet OpenStack modules with zuul-cloner
# Uses the following variables:
#
2018-02-06 03:34:34 +00:00
# - ``PUPPETFILE_DIR`` must be set to Puppet modules directory
2015-10-05 16:39:26 -04:00
# - ``SCRIPT_DIR`` must be set to script path
2016-04-20 09:38:56 -04:00
# - ``ZUUL_BRANCH`` must be set to Zuul branch. Fallback to 'master'.
2015-10-05 16:39:26 -04:00
install_openstack() {
cat > clonemap.yaml <<EOF
clonemap:
- name: '(.*?)/puppet-(.*)'
2018-02-06 03:34:34 +00:00
dest: '$PUPPETFILE_DIR/\2'
2015-10-05 16:39:26 -04:00
EOF
2016-04-20 09:38:56 -04:00
# Periodic jobs run without ref on master
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
)
2016-09-16 11:48:00 -04:00
project_names="${project_names} openstack/puppet-openstack-integration"
2015-10-05 16:39:26 -04:00
/usr/zuul-env/bin/zuul-cloner -m clonemap.yaml \
--cache-dir /opt/git \
--zuul-branch $ZUUL_BRANCH \
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
2018-02-06 03:34:34 +00:00
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-09-16 11:48:00 -04:00
# When installing from local source, we want to install the current source
# we're working from.
2018-02-06 03:34:34 +00:00
PUPPETFILE=${SCRIPT_DIR}/Puppetfile r10k -v DEBUG puppetfile install
cp -a ${SCRIPT_DIR} ${PUPPETFILE_DIR}/openstack_integration
2015-10-05 16:39:26 -04:00
}
# Install Puppet OpenStack modules and dependencies by using
# zuul-cloner or r10k.
# Uses the following variables:
#
2018-02-06 03:34:34 +00:00
# - ``PUPPETFILE_DIR`` must be set to Puppet modules directory
2015-10-05 16:39:26 -04:00
# - ``SCRIPT_DIR`` must be set to script path
# - ``ZUUL_BRANCH`` must be set to Zuul branch
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
2016-07-13 13:50:17 -06:00
# Write out basic hiera configuration
#
# Uses the following variables:
# - ``SCRIPT_DIR`` must be set to the dir that contains a /hiera folder to use
# - ``HIERA_CONFIG`` must be set to the hiera config file location
#
configure_hiera() {
cat <<EOF >$HIERA_CONFIG
---
:backends:
- yaml
:yaml:
:datadir: "${SCRIPT_DIR}/hiera"
:hierarchy:
- "%{::operatingsystem}"
- "%{::osfamily}"
- common
EOF
}
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:
# - xenial: puppet4 only
2017-05-26 13:42:25 -06:00
if dpkg -l $PUPPET_RELEASE_FILE >/dev/null 2>&1; then
$SUDO apt-get purge -y $PUPPET_RELEASE_FILE
2016-06-08 11:31:00 -04:00
fi
2018-01-24 23:01:06 -08:00
echo "deb ${NODEPOOL_PUPPETLABS_MIRROR} xenial PC1" | $SUDO tee /etc/apt/sources.list.d/puppetlabs.list
$SUDO apt-key add files/GPG-KEY-puppetlabs
2017-05-26 13:42:25 -06:00
# 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
2016-06-08 11:31:00 -04:00
$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
2017-05-30 11:48:50 +02:00
if [ "${MANAGE_REPOS}" == "true" ] ; then
2018-01-24 23:01:06 -08:00
$SUDO rpm --import files/GPG-KEY-puppetlabs
$SUDO rpm --import files/GPG-KEY-puppet
$SUDO bash -c "cat << EOF > /etc/yum.repos.d/puppetlabs.repo
[puppetlabs-products]
name=Puppet Labs Products El 7 - x86_64
baseurl=${NODEPOOL_PUPPETLABS_MIRROR}/el/7/PC1/x86_64/
gpgkey=file:///etc/pki/rpm-gpg/GPG-KEY-puppetlabs
file:///etc/pki/rpm-gpg/GPG-KEY-puppet
enabled=1
gpgcheck=1
EOF"
2017-05-30 11:48:50 +02:00
fi
2016-06-08 11:31:00 -04:00
$SUDO yum install -y ${PUPPET_PKG}
fi
}
2016-06-08 11:44:10 -04:00
function run_puppet() {
local manifest=$1
$SUDO $PUPPET_FULL_PATH apply $PUPPET_ARGS fixtures/${manifest}.pp
local res=$?
return $res
}
function catch_selinux_alerts() {
if is_fedora; then
$SUDO sealert -a /var/log/audit/audit.log
if $SUDO grep -iq 'type=AVC' /var/log/audit/audit.log; then
echo "AVC detected in /var/log/audit/audit.log"
# TODO: figure why latest rabbitmq deployed with SSL tries to write in SSL pem file.
# https://bugzilla.redhat.com/show_bug.cgi?id=1341738
if $SUDO grep -iqE 'denied.*system_r:rabbitmq_t' /var/log/audit/audit.log; then
echo "non-critical RabbitMQ AVC, ignoring it now."
else
echo "Please file a bug on https://bugzilla.redhat.com/enter_bug.cgi?product=Red%20Hat%20OpenStack&component=openstack-selinux showing sealert output."
exit 1
fi
else
echo 'No AVC detected in /var/log/audit/audit.log'
fi
fi
}
2016-10-31 15:15:34 -06:00
function timestamp_puppet_log() {
2016-12-02 10:45:17 -07:00
$SUDO mv ${WORKSPACE}/puppet.log ${WORKSPACE}/puppet-$(date +%Y%m%d_%H%M%S).log
2016-10-31 15:15:34 -06:00
}
function catch_puppet_failures() {
2017-03-08 17:10:32 +01:00
grep -wiE '(Error|\(err\))' ${WORKSPACE}/puppet.log
2016-10-31 15:15:34 -06:00
}