83ced7f6e6
Make inventory/service for service-specific things, including the groups.yaml group definitions, and inventory/base for hostvars related to the base system, including the list of hosts. Move the exisitng host_vars into inventory/service, since most of them are likely service-specific. Move group_vars/all.yaml into base/group_vars as almost all of it is related to base things, with the execption of the gerrit public key. A followup patch will move host-specific values into equivilent files in inventory/base. This should let us override hostvars in gate jobs. It should also allow us to do better file matchers - and to be able to organize our playbooks move if we want to. Depends-On: https://review.opendev.org/731583 Change-Id: Iddf57b5be47c2e9de16b83a1bc83bee25db995cf
109 lines
3.7 KiB
Bash
109 lines
3.7 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
|
|
|
|
virtualenv --system-site-packages /tmp/apply-ansible-env
|
|
/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
|
|
|