6adb5c0aa5
The existing gate partitioned a disk for use with docker, depending on the gate it would use the swap disk (RAX) or a spare disk (HP). However, with the new gates (Bluebox + OVH) there is neither a spare disk nor a swap disk. This leaves us with one choice: File based loop device. This patch creates a file at /swapfile to ensure we have swap. It creates a file at /docker to ensure we have a loop device for Docker. Right now the /docker file is 10GB and the /swapfile is 4GB due to size limitations in the gate across all servers and types. This has proven to be enough space for all our current tests. Additionally, reduce the number of threads the gate uses to 4 to prevent the lockup and hour timeout we have been seeing as more recently in the gate. The scripts that setup the gate are moved to the tools directory rather than the tests directory to match the structure of the other projects. Partially-Implements: blueprint functional-testing-gate Change-Id: I3e370f2382b6df36103d8b2ceda9b21d9b4229d5
93 lines
2.6 KiB
Bash
Executable File
93 lines
2.6 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -o xtrace
|
|
set -o errexit
|
|
|
|
# Just for mandre :)
|
|
if [[ ! -f /etc/sudoers.d/jenkins ]]; then
|
|
echo "jenkins ALL=(:docker) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/jenkins
|
|
fi
|
|
|
|
function setup_config {
|
|
# generate the config
|
|
tox -e genconfig
|
|
# Copy configs
|
|
sudo cp -a etc/kolla /etc/
|
|
}
|
|
|
|
function detect_distro {
|
|
DISTRO=$(ansible all -i "localhost," -msetup -clocal | awk -F\" '/ansible_os_family/ {print $4}')
|
|
}
|
|
|
|
function setup_ssh {
|
|
# Generate a new keypair that Ansible will use
|
|
ssh-keygen -f /home/jenkins/.ssh/kolla -N ''
|
|
cat /home/jenkins/.ssh/kolla.pub >> /home/jenkins/.ssh/authorized_keys
|
|
|
|
# Push the the public key around to all of the nodes
|
|
for ip in $(cat /etc/nodepool/sub_nodes_private); do
|
|
scp /home/jenkins/.ssh/kolla.pub ${ip}:/home/jenkins/.ssh/authorized_keys
|
|
# TODO(SamYaple): Remove this root key pushing once Kolla doesn't
|
|
# require root anymore.
|
|
ssh ${ip} -i /home/jenkins/.ssh/kolla 'sudo mkdir -p /root/.ssh; sudo cp /home/jenkins/.ssh/* /root/.ssh/'
|
|
done
|
|
|
|
# From now on use the new IdentityFile for connecting to other hosts
|
|
echo "IdentityFile /home/jenkins/.ssh/kolla" >> /home/jenkins/.ssh/config
|
|
}
|
|
|
|
function setup_inventory {
|
|
local counter=0
|
|
|
|
detect_distro
|
|
if [[ "${DISTRO}" == "Debian" ]]; then
|
|
ANSIBLE_CONNECTION_TYPE=ssh
|
|
else
|
|
ANSIBLE_CONNECTION_TYPE=local
|
|
fi
|
|
|
|
echo -e "127.0.0.1\tlocalhost" > /tmp/hosts
|
|
for ip in $(cat /etc/nodepool/{node_private,sub_nodes_private}); do
|
|
: $((counter++))
|
|
echo -e "${ip}\tnode${counter} $(ssh ${ip} hostname)" >> /tmp/hosts
|
|
echo "node${counter} ansible_connection=${ANSIBLE_CONNECTION_TYPE}" >> ${RAW_INVENTORY}
|
|
done
|
|
|
|
sudo chown root: /tmp/hosts
|
|
sudo chmod 644 /tmp/hosts
|
|
sudo mv /tmp/hosts /etc/hosts
|
|
}
|
|
|
|
function setup_ansible {
|
|
RAW_INVENTORY=/tmp/kolla/raw_inventory
|
|
mkdir /tmp/kolla
|
|
|
|
sudo -H pip install "ansible<2" "docker-py>=1.6.0"
|
|
|
|
setup_inventory
|
|
|
|
# Record the running state of the environment as seen by the setup module
|
|
ansible all -i ${RAW_INVENTORY} -m setup > /tmp/logs/ansible/initial-setup
|
|
}
|
|
|
|
function setup_node {
|
|
ansible-playbook -i ${RAW_INVENTORY} tools/setup_nodes.yml
|
|
}
|
|
|
|
function setup_logging {
|
|
# This directory is the directory that is copied with the devstack-logs
|
|
# publisher. It must exist at /home/jenkins/workspace/<job-name>/logs
|
|
mkdir logs
|
|
|
|
# For ease of access we symlink that logs directory to a known path
|
|
ln -s $(pwd)/logs /tmp/logs
|
|
mkdir -p /tmp/logs/{ansible,build}
|
|
}
|
|
|
|
setup_logging
|
|
tools/dump_info.sh
|
|
setup_ssh
|
|
setup_ansible
|
|
setup_node
|
|
setup_config
|