system-config/tools/prep-apply.sh
Clark Boylan be802b319a Install older setuptools in puppet apply jobs
We create a virtualenv to install ansible in which then runs puppet for
us in our puppet apply jobs. This is pulling in setuptools 50 which then
fails due to the problems setuptools 50 has with older pythons. Address
this by pinning back to setuptools <50.

Change-Id: I02ea466319f7cd90f73972bf5a99876d14823ac1
2020-09-01 13:59:21 -07:00

111 lines
3.8 KiB
Bash

#!/bin/bash -ex
# Copyright 2014 Hewlett-Packard Development Company, L.P.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
ROOT=$(readlink -fn $(dirname $0)/..)
# MODULE_ENV_FILE sets the list of modules to read from and install and can be
# overridden by setting it outside the script.
export MODULE_ENV_FILE=${MODULE_ENV_FILE:-modules.env}
# PUPPET_MANIFEST sets the manifest that is being tested and can be overridden
# by setting it outside the script.
export PUPPET_MANIFEST=${PUPPET_MANIFEST:-manifests/site.pp}
export PUPPET_VERSION=${PUPPET_VERSION:-3}
export PUPPET_INTEGRATION_TEST=1
# These arrays are initialized here and populated in modules.env
# Array of modules to be installed key:value is module:version.
declare -A MODULES
# Array of modues to be installed from source and without dependency resolution.
# key:value is source location, revision to checkout
declare -A SOURCE_MODULES
# Array of modues to be installed from source and without dependency resolution from openstack git
# key:value is source location, revision to checkout
declare -A INTEGRATION_MODULES
source $MODULE_ENV_FILE
python3 -m virtualenv -p python3 --system-site-packages /tmp/apply-ansible-env
# Work around the fact that setuptools~=50 is broken
/tmp/apply-ansible-env/bin/pip install -U 'setuptools<50'
/tmp/apply-ansible-env/bin/pip install ansible
# Install puppet
ansible_root=$(mktemp -d)
cat > $ansible_root/ansible.cfg <<EOF
[defaults]
local_tmp=$ansible_root/local_tmp
remote_tmp=$ansible_root/remote_tmp
inventory=$ROOT/inventory/base/gate-hosts,$ROOT/inventory/service/gate-groups
roles_path=$ROOT/roles
EOF
cat > $ROOT/inventory/base/gate-hosts <<EOF
localhost ansible_connection=local
EOF
cat > $ROOT/inventory/service/gate-groups <<EOF
[puppet]
localhost
EOF
sudo -H ANSIBLE_CONFIG=$ansible_root/ansible.cfg /tmp/apply-ansible-env/bin/ansible-playbook -e "{\"puppet_install_version\":$PUPPET_VERSION}" $ROOT/playbooks/install_puppet.yaml
rm -rf $ansible_root
if [ "$PUPPET_VERSION" == "3" ] ; then
export MODULE_PATH=/etc/puppet/modules
elif [ "$PUPPET_VERSION" == "4" ] ; then
export MODULE_PATH=/etc/puppetlabs/code/modules
else
echo "ERROR: unsupported puppet version $PUPPET_VERSION"
exit 1
fi
# Install SOURCE_MODULES
sudo -E bash -x $ROOT/install_modules.sh
# Install INTEGRATION_MODULES
cat > clonemap.yaml <<EOF
clonemap:
- name: '(.*?)/puppet-(.*)'
dest: '$MODULE_PATH/\2'
- name: '(.*?)/ansible-role-(.*)'
dest: '/etc/ansible/roles/\2'
EOF
project_names="opendev/ansible-role-puppet"
for MOD in ${!INTEGRATION_MODULES[*]}; do
project_scope=$(basename `dirname $MOD`)
repo_name=`basename $MOD`
project_names+=" $project_scope/$repo_name"
done
sudo -E /usr/zuul-env/bin/zuul-cloner -m clonemap.yaml --cache-dir /opt/git \
https://git.openstack.org \
$project_names
# Fix hostname lookups
grep -v 127.0.1.1 /etc/hosts >/tmp/hosts
HOST=`echo $HOSTNAME |awk -F. '{ print $1 }'`
echo "127.0.1.1 $HOST.openstack.org $HOST" >> /tmp/hosts
sudo mv /tmp/hosts /etc/hosts
# Set up the production config directory, and then let ansible take care
# of configuring hiera.
sudo mkdir -p /opt/system-config
sudo ln -sf $(pwd) /opt/system-config/production
# Really make sure that the openstack_project module is in the module path
sudo cp -a /opt/system-config/production/modules/openstack_project $MODULE_PATH
sudo -H mkdir -p ~/.ansible/tmp