The original mnaio was built using a lot of bash and was tailored
specifically for ubuntu 14.04. The new mnaio was built using a mix of
bash and ansible and was tailored specifically for ubuntu 16.04. This
patch takes the two code bases and combines the best things from each
method and wraps it up into a single code path all written using ansible
playbooks and basic variables.
While underlying system has changed the bash environment variable syntax
for overrides remains the same. This allows users to continue with what
has become their normal work-flow while leveraging the new structure and
capabilities.
High level overview:
* The general performance of the VMs running within the MNAIO will now
be a lot better. Before the VMs were built within QCOW2 containers,
while this was flexible and portable it was slower. The new
capabilities will use RAW logical volumes and native IO.
* New repo management starts with preseeds and allows the user to pin
to specific repositories without having to worry about flipping them
post build.
* CPU overhead will be a lot less. The old VM system used an
un-reasonable number of processors per VM which directly translated
to sockets. The new system will use cores and a single socket
allowing for generally better VM performance with a lot less
overhead and resource contention on the host.
* Memory consumption has been greatly reduced. Each VM is now
following the memory restrictions we'd find in the gate, as a MAX.
Most of the VMs are using 1 - 2 GiB of RAM which should be more than
enough for our purposes.
Overall the deployment process is simpler and more flexible and will
work on both trusty and xenial out of the box with the hope to bring
centos7 and suse into the fold some time in the future.
Change-Id: Idc8924452c481b08fd3b9362efa32d10d1b8f707
Signed-off-by: Kevin Carter <kevin.carter@rackspace.com>
87 lines
2.8 KiB
Bash
Executable File
87 lines
2.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Copyright 2015, Rackspace US, Inc.
|
|
#
|
|
# 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.
|
|
|
|
set -o pipefail
|
|
set -euov
|
|
|
|
BINDEP_FILE=${BINDEP_FILE:-bindep.txt}
|
|
|
|
source /etc/os-release || source /usr/lib/os-release
|
|
|
|
case "${ID,,}" in
|
|
*suse*)
|
|
# Need to pull libffi and python-pyOpenSSL early
|
|
# because we install ndg-httpsclient from pip on Leap 42.1
|
|
[[ "${VERSION}" == "42.1" ]] && extra_suse_deps="libffi-devel python-pyOpenSSL"
|
|
sudo zypper -n in python-devel lsb-release ${extra_suse_deps:-}
|
|
;;
|
|
amzn|centos|rhel)
|
|
sudo yum install -y python-devel redhat-lsb-core
|
|
;;
|
|
ubuntu|debian)
|
|
sudo apt-get update && sudo apt-get install -y python-dev lsb-release
|
|
;;
|
|
*)
|
|
echo "Unsupported distribution: ${ID,,}"
|
|
exit 1
|
|
esac
|
|
|
|
# Install pip
|
|
if ! which pip &>/dev/null; then
|
|
curl --silent --show-error --retry 5 \
|
|
https://bootstrap.pypa.io/get-pip.py | sudo python2.7
|
|
fi
|
|
|
|
# Install bindep and tox
|
|
sudo pip install 'bindep>=2.4.0' tox
|
|
|
|
# CentOS 7 requires two additional packages:
|
|
# redhat-lsb-core - for bindep profile support
|
|
# epel-release - required to install python-ndg_httpsclient/python2-pyasn1
|
|
if [[ ${ID,,} == "centos" ]]; then
|
|
sudo yum -y install redhat-lsb-core epel-release yum-utils
|
|
# epel-release could be installed but not enabled (which is very common
|
|
# in openstack-ci) so enable it here if needed
|
|
sudo yum-config-manager --enable epel || true
|
|
# openSUSE 42.1 does not have python-ndg-httpsclient
|
|
elif [[ ${ID,,} == *suse* ]] && [[ ${VERSION} == "42.1" ]]; then
|
|
sudo pip install ndg-httpsclient
|
|
fi
|
|
|
|
# Get a list of packages to install with bindep. If packages need to be
|
|
# installed, bindep exits with an exit code of 1.
|
|
BINDEP_PKGS=$(bindep -b -f ${BINDEP_FILE} test || true)
|
|
echo "Packages to install: ${BINDEP_PKGS}"
|
|
|
|
# Install OS packages using bindep
|
|
if [[ ${#BINDEP_PKGS} > 0 ]]; then
|
|
case "${ID,,}" in
|
|
*suse*)
|
|
sudo zypper -n in $BINDEP_PKGS
|
|
;;
|
|
centos)
|
|
sudo yum install -y $BINDEP_PKGS
|
|
;;
|
|
ubuntu|debian)
|
|
sudo apt-get update
|
|
DEBIAN_FRONTEND=noninteractive \
|
|
sudo apt-get -q --option "Dpkg::Options::=--force-confold" \
|
|
--assume-yes install $BINDEP_PKGS
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
sudo pip install ansible
|