Merge "Change AIO bootstrap disk preparation"

This commit is contained in:
Jenkins 2015-11-27 19:12:42 +00:00 committed by Gerrit Code Review
commit 11a74481a8
3 changed files with 103 additions and 68 deletions

View File

@ -21,6 +21,7 @@ set -e -u -x
## Vars ----------------------------------------------------------------------
DEFAULT_PASSWORD=$(tr -dc 'a-zA-Z0-9' < /dev/urandom | head -c 32)
export BOOTSTRAP_AIO="yes"
export BOOTSTRAP_AIO_DIR=${BOOTSTRAP_AIO_DIR:-"/openstack"}
export HTTP_PROXY=${HTTP_PROXY:-""}
export HTTPS_PROXY=${HTTPS_PROXY:-""}
export ADMIN_PASSWORD=${ADMIN_PASSWORD:-$DEFAULT_PASSWORD}
@ -140,9 +141,9 @@ else
echo 'PermitRootLogin yes' >> /etc/ssh/sshd_config
fi
# Create /opt if it doesn't already exist
if [ ! -d "/opt" ];then
mkdir /opt
# Create the directory BOOTSTRAP_AIO_DIR if it doesn't already exist
if [ ! -d "${BOOTSTRAP_AIO_DIR}" ]; then
mkdir -p ${BOOTSTRAP_AIO_DIR}
fi
# Remove the pip directory if its found
@ -194,7 +195,7 @@ if [ ! "$(swapon -s | grep -v Filename)" ]; then
else
swap_size="8589934592"
fi
loopback_create "/opt/swap.img" ${swap_size} thick swap
loopback_create "${BOOTSTRAP_AIO_DIR}/swap.img" ${swap_size} thick swap
# Ensure swap will be used on the host
if [ ! $(sysctl vm.swappiness | awk '{print $3}') == "10" ];then
sysctl -w vm.swappiness=10 | tee -a /etc/sysctl.conf
@ -206,7 +207,7 @@ if [ "${DEPLOY_OPENSTACK}" == "yes" ]; then
# Build the loopback drive for cinder to use
CINDER="cinder.img"
if ! vgs cinder-volumes; then
loopback_create "/opt/${CINDER}" 1073741824000 thin rc
loopback_create "${BOOTSTRAP_AIO_DIR}/${CINDER}" 1073741824000 thin rc
CINDER_DEVICE=$(losetup -a | awk -F: "/${CINDER}/ {print \$1}")
pvcreate ${CINDER_DEVICE}
pvscan
@ -216,24 +217,36 @@ if [ "${DEPLOY_OPENSTACK}" == "yes" ]; then
fi
# Ensure that the cinder loopback is enabled after reboot
if ! grep ${CINDER} /etc/rc.local && ! vgs cinder-volumes; then
sed -i "\$i losetup \$(losetup -f) /opt/${CINDER}" /etc/rc.local
sed -i "\$i losetup \$(losetup -f) /${BOOTSTRAP_AIO_DIR}/${CINDER}" /etc/rc.local
fi
fi
# Build the loopback drive for nova instance storage
NOVA="nova.img"
if ! grep -q "${NOVA}" /proc/mounts; then
loopback_create "${BOOTSTRAP_AIO_DIR}/${NOVA}" 1073741824000 thin none
mkfs.ext4 -F "${BOOTSTRAP_AIO_DIR}/${NOVA}"
mkdir -p /var/lib/nova/instances
mount "${BOOTSTRAP_AIO_DIR}/${NOVA}" /var/lib/nova/instances
fi
if ! grep -qw "^${BOOTSTRAP_AIO_DIR}/${NOVA}" /etc/fstab; then
echo "${BOOTSTRAP_AIO_DIR}/${NOVA} /var/lib/nova/instances ext4 defaults 0 0" >> /etc/fstab
fi
fi
# Enable swift deployment
if [ "${DEPLOY_SWIFT}" == "yes" ]; then
# build the loopback drives for swift to use
for SWIFT in swift1 swift2 swift3; do
if ! grep "${SWIFT}" /proc/mounts > /dev/null; then
loopback_create "/opt/${SWIFT}.img" 1073741824000 thin none
if ! grep -w "^/opt/${SWIFT}.img" /etc/fstab > /dev/null; then
echo "/opt/${SWIFT}.img /srv/${SWIFT}.img xfs loop,noatime,nodiratime,nobarrier,logbufs=8 0 0" >> /etc/fstab
if ! grep -q "${SWIFT}" /proc/mounts; then
loopback_create "${BOOTSTRAP_AIO_DIR}/${SWIFT}.img" 1073741824000 thin none
if ! grep -qw "^${BOOTSTRAP_AIO_DIR}/${SWIFT}.img" /etc/fstab; then
echo "${BOOTSTRAP_AIO_DIR}/${SWIFT}.img /srv/${SWIFT}.img xfs loop,noatime,nodiratime,nobarrier,logbufs=8 0 0" >> /etc/fstab
fi
# Format the lo devices
mkfs.xfs -f "/opt/${SWIFT}.img"
mkfs.xfs -f "${BOOTSTRAP_AIO_DIR}/${SWIFT}.img"
mkdir -p "/srv/${SWIFT}.img"
mount "/opt/${SWIFT}.img" "/srv/${SWIFT}.img"
mount "${BOOTSTRAP_AIO_DIR}/${SWIFT}.img" "/srv/${SWIFT}.img"
fi
done
fi

View File

@ -42,19 +42,6 @@ info_block "Checking for required libraries." 2> /dev/null || source $(dirname $
## Main ----------------------------------------------------------------------
# Disable Ansible color output
sed -i 's/nocolor.*/nocolor = 1/' $(dirname ${0})/../playbooks/ansible.cfg
# Make the /openstack/log directory for openstack-infra gate check log publishing
mkdir -p /openstack/log
# Implement the log directory link for openstack-infra log publishing
ln -sf /openstack/log $(dirname ${0})/../logs
# Create ansible logging directory and add in a log file entry into ansible.cfg
mkdir -p /openstack/log/ansible-logging
sed -i '/\[defaults\]/a log_path = /openstack/log/ansible-logging/ansible.log' $(dirname ${0})/../playbooks/ansible.cfg
# Adjust settings based on the Cloud Provider info in OpenStack-CI
if [ -f /etc/nodepool/provider -a -s /etc/nodepool/provider ]; then
source /etc/nodepool/provider
@ -82,9 +69,6 @@ if [ -f /etc/nodepool/provider -a -s /etc/nodepool/provider ]; then
fi
# Enable detailed task profiling
sed -i '/\[defaults\]/a callback_plugins = plugins/callbacks' $(dirname ${0})/../playbooks/ansible.cfg
# Bootstrap an AIO setup if required
if [ "${BOOTSTRAP_AIO}" == "yes" ]; then
source $(dirname ${0})/bootstrap-aio.sh
@ -95,6 +79,22 @@ if [ "${BOOTSTRAP_ANSIBLE}" == "yes" ]; then
source $(dirname ${0})/bootstrap-ansible.sh
fi
# Make the /openstack/log directory for openstack-infra gate check log publishing
mkdir -p /openstack/log
# Implement the log directory link for openstack-infra log publishing
ln -sf /openstack/log $(dirname ${0})/../logs
# Create ansible logging directory and add in a log file entry into ansible.cfg
mkdir -p /openstack/log/ansible-logging
sed -i '/\[defaults\]/a log_path = /openstack/log/ansible-logging/ansible.log' $(dirname ${0})/../playbooks/ansible.cfg
# Enable detailed task profiling
sed -i '/\[defaults\]/a callback_plugins = plugins/callbacks' $(dirname ${0})/../playbooks/ansible.cfg
# Disable Ansible color output
sed -i 's/nocolor.*/nocolor = 1/' $(dirname ${0})/../playbooks/ansible.cfg
# Enable debug logging for all services to make failure debugging easier
echo "debug: True" | tee -a /etc/openstack_deploy/user_variables.yml

View File

@ -18,7 +18,9 @@
## Vars ----------------------------------------------------------------------
LINE='----------------------------------------------------------------------'
MAX_RETRIES=${MAX_RETRIES:-5}
MIN_LXC_VG_SIZE_GB=${MIN_LXC_VG_SIZE_GB:-250}
BOOTSTRAP_AIO_DIR=${BOOTSTRAP_AIO_DIR:-"/openstack"}
DATA_DISK_DEVICE=${DATA_DISK_DEVICE:-}
MIN_DISK_SIZE_GB=${MIN_DISK_SIZE_GB:-80}
REPORT_DATA=${REPORT_DATA:-""}
ANSIBLE_PARAMETERS=${ANSIBLE_PARAMETERS:-""}
STARTTIME="${STARTTIME:-$(date +%s)}"
@ -77,48 +79,68 @@ function install_bits {
function configure_diskspace {
# If there are any block devices available other than the one
# used for the root disk, repurpose it for our needs.
MIN_LXC_VG_SIZE_B=$((MIN_LXC_VG_SIZE_GB * 1024 * 1024 * 1024))
# only do this if the lxc vg doesn't already exist
if ! vgs lxc > /dev/null 2>&1; then
blk_devices=$(lsblk -nrdo NAME,TYPE,RO | awk '/d[b-z]+ disk [^1]/ {print $1}')
for blk_dev in ${blk_devices}; do
# dismount any mount points on the device
mount_points=$(awk "/^\/dev\/${blk_dev}[0-9]* / {print \$2}" /proc/mounts)
for mount_point in ${mount_points}; do
umount ${mount_point}
sed -i ":${mount_point}:d" /etc/fstab
done
# If DATA_DISK_DEVICE is not set or empty, then try to figure out which
# device to use
if [ -z "${DATA_DISK_DEVICE}" ]; then
# Identify the list of disk devices available, sort from largest to
# smallest, and pick the largest.
# Excludes:
# - the first device, as that is where the OS is expected
# - read only devices, as we can't write to them
DATA_DISK_DEVICE=$(lsblk -brndo NAME,TYPE,RO,SIZE | \
awk '/d[b-z]+ disk 0/{ if ($4>m){m=$4; d=$1}}; END{print d}')
fi
# We only want to continue if a device was found to use. If not,
# then we simply leave the disks alone.
if [ ! -z "${DATA_DISK_DEVICE}" ]; then
# Calculate the minimum disk size in bytes
MIN_DISK_SIZE_B=$((MIN_DISK_SIZE_GB * 1024 * 1024 * 1024))
# Determine the size in bytes of the selected device
blk_dev_size_b=$(lsblk -nrdbo NAME,TYPE,SIZE | \
awk "/^${DATA_DISK_DEVICE} disk/ {print \$3}")
# Determine if the device is large enough
if [ "${blk_dev_size_b}" -ge "${MIN_DISK_SIZE_B}" ]; then
# Only execute the disk partitioning process if a partition labeled
# 'openstack-data{1,2}' is not present and that partition is not
# formatted as ext4. This is an attempt to achieve idempotency just
# in case this script is run multiple times.
if ! parted --script -l -m | egrep -q ':ext4:openstack-data[12]:;$'; then
# Dismount any mount points on the device
mount_points=$(awk "/^\/dev\/${DATA_DISK_DEVICE}[0-9]* / {print \$2}" /proc/mounts)
for mount_point in ${mount_points}; do
umount ${mount_point}
sed -i ":${mount_point}:d" /etc/fstab
done
# Partition the whole disk for our usage
parted --script /dev/${DATA_DISK_DEVICE} mklabel gpt
parted --align optimal --script /dev/${DATA_DISK_DEVICE} mkpart openstack-data1 ext4 0% 40%
parted --align optimal --script /dev/${DATA_DISK_DEVICE} mkpart openstack-data2 ext4 40% 100%
# Format the bootstrap partition, create the mount point, and mount it.
mkfs.ext4 /dev/${DATA_DISK_DEVICE}1
mkdir -p ${BOOTSTRAP_AIO_DIR}
mount /dev/${DATA_DISK_DEVICE}1 ${BOOTSTRAP_AIO_DIR}
# Format the lxc partition, create the mount point, and mount it.
mkfs.ext4 /dev/${DATA_DISK_DEVICE}2
mkdir -p /var/lib/lxc
mount /dev/${DATA_DISK_DEVICE}2 /var/lib/lxc
# add a vg for lxc
blk_dev_size_b=$(lsblk -nrdbo NAME,TYPE,SIZE | awk "/^${blk_dev} disk/ {print \$3}")
if [ "${blk_dev_size_b}" -gt "${MIN_LXC_VG_SIZE_B}" ]; then
if ! vgs lxc > /dev/null 2>&1; then
parted --script /dev/${blk_dev} mklabel gpt
parted --align optimal --script /dev/${blk_dev} mkpart lxc 0% 80%
part_num=$(parted /dev/${blk_dev} print --machine | awk -F':' '/lxc/ {print $1}')
pvcreate -ff -y /dev/${blk_dev}${part_num}
vgcreate lxc /dev/${blk_dev}${part_num}
fi
# add a vg for cinder volumes, but only if it doesn't already exist
if ! vgs cinder-volumes > /dev/null 2>&1; then
parted --align optimal --script /dev/${blk_dev} mkpart cinder 80% 100%
part_num=$(parted /dev/${blk_dev} print --machine | awk -F':' '/cinder/ {print $1}')
pvcreate -ff -y /dev/${blk_dev}${part_num}
vgcreate cinder-volumes /dev/${blk_dev}${part_num}
fi
else
if ! grep '/var/lib/lxc' /proc/mounts 2>&1; then
parted --script /dev/${blk_dev} mklabel gpt
parted --script /dev/${blk_dev} mkpart lxc ext4 0% 100%
part_num=$(parted /dev/${blk_dev} print --machine | awk -F':' '/lxc/ {print $1}')
# Format, Create, and Mount it all up.
mkfs.ext4 /dev/${blk_dev}${part_num}
mkdir -p /var/lib/lxc
mount /dev/${blk_dev}${part_num} /var/lib/lxc
fi
fi
done
# Add the fstab entries if they aren't there already
if ! grep -qw "^/dev/${DATA_DISK_DEVICE}1" /etc/fstab; then
echo "/dev/${DATA_DISK_DEVICE}1 ${BOOTSTRAP_AIO_DIR} ext4 defaults 0 0" >> /etc/fstab
fi
if ! grep -qw "^/dev/${DATA_DISK_DEVICE}2" /etc/fstab; then
echo "/dev/${DATA_DISK_DEVICE}2 /var/lib/lxc ext4 defaults 0 0" >> /etc/fstab
fi
fi
fi
}