openstack-ansible-ops/multi-node-aio/functions.rc
Rick Box 952f91f004 Adds in network config - removes hardcoded values
172.29 has the potential to conflict with internal addressing schemes.
Rather than have this hard coded these changes are to allow this to be
configured. Variables file has also been added to allow customization of
defined values.

Change-Id: I0b3e68443e7331b02794c3a54478e131d23fd5ec
2017-02-10 15:27:12 +00:00

242 lines
6.8 KiB
Bash
Executable File

#!/usr/bin/env bash
# Copyright [2016] [Kevin Carter]
#
# 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.
function mkdir_check {
if [ ! -d "$1" ];then
mkdir -p "$1"
fi
}
function ssh_agent_reset {
# If you were running ssh-agent with forwarding this will clear out the keys
# in your cache which can cause confusion.
if pgrep ssh-agent; then
killall ssh-agent; eval `ssh-agent`
fi
}
function iptables_general_rule_add {
if ! iptables -w -C $1;then
iptables -w -I $1
fi
}
function iptables_filter_rule_add {
if ! iptables -w -t $1 -C $2;then
iptables -w -t $1 -I $2
fi
}
function get_host_type {
python <<EOL
import json
with open('hosts.json') as f:
x = json.loads(f.read())
for k, v in x.get("$1").items():
print('%s:%s' % (k, v))
EOL
}
function get_all_hosts {
python <<EOL
import json
with open('hosts.json') as f:
x = json.loads(f.read())
for i in x.values():
for k, v in i.items():
print('%s:%s' % (k, v))
EOL
}
function get_all_types {
python <<EOL
import json
with open('hosts.json') as f:
x = json.loads(f.read())
for i in x.keys():
print(i)
EOL
}
function wait_ssh {
echo "Waiting for all nodes to become available. This can take around ${1:-10} min"
for node in $(get_all_hosts); do
echo "Waiting for node: ${node%%":"*} on 10.0.0.${node#*":"}"
until ssh -q -o StrictHostKeyChecking=no -o BatchMode=yes -o ConnectTimeout=10 10.0.0.${node#*':'} exit > /dev/null; do
sleep 15
done
done
}
function rekick_vms {
# If you pass the short name of the host to the function it will only force rekick just the ONE host.
# Set the VM disk size in gigabytes
VM_DISK_SIZE="${VM_DISK_SIZE:-252}"
for node in ${1:-$(get_all_hosts)}; do
for node_name in $(virsh list --all --name | grep "${node%%":"*}"); do
virsh destroy "${node_name}" || true
done
# Instruct the system to run the image create.
# If you have the option ``VM_IMAGE_CREATE=true`` the system will reformat the disk image
# destroying anything that was it image previously.
VM_IMAGE_CREATE=${VM_IMAGE_CREATE:-true}
if [[ "${VM_IMAGE_CREATE}" = true ]]; then
qemu-img create -f qcow2 \
-o preallocation=metadata,compat=1.1,lazy_refcounts=on \
/var/lib/libvirt/images/${node%%":"*}.openstackci.local.img \
"${VM_DISK_SIZE}G"
fi
VM_NAME=$(virsh list --all --name | grep "${node%%":"*}" || echo "")
if [[ -z "${VM_NAME}" ]]; then
virsh define /etc/libvirt/qemu/${node%%":"*}.openstackci.local.xml || true
virsh create /etc/libvirt/qemu/${node%%":"*}.openstackci.local.xml || true
else
virsh start "${VM_NAME}"
fi
done
}
function write_osa_general_confd {
CONFD_FILE="/etc/openstack_deploy/conf.d/${1}.yml"
echo "## DO NOT WRITE TO THIS FILE, CHANGES WILL BE LOST!" > ${CONFD_FILE}
echo "---" >> ${CONFD_FILE}
echo "$1:" >> ${CONFD_FILE}
for node in $(get_host_type ${2}); do
echo " ${node%%':'*}:" >> ${CONFD_FILE}
echo " ip: ${NETWORK_BASE}.236.${node#*":"}" >> ${CONFD_FILE}
done
}
function write_osa_cinder_confd {
CONFD_FILE="/etc/openstack_deploy/conf.d/${1}.yml"
echo "## DO NOT WRITE TO THIS FILE, CHANGES WILL BE LOST!" > ${CONFD_FILE}
echo "---" >> ${CONFD_FILE}
echo "$1:" >> ${CONFD_FILE}
for node in $(get_host_type ${2}); do
echo " ${node%%':'*}:" >> ${CONFD_FILE}
echo " ip: ${NETWORK_BASE}.236.${node#*":"}" >> ${CONFD_FILE}
cat >> ${CONFD_FILE} <<EOF
container_vars:
cinder_backends:
limit_container_types: cinder_volume
lvm:
volume_group: cinder-volumes
volume_driver: cinder.volume.drivers.lvm.LVMVolumeDriver
volume_backend_name: LVM_iSCSI
iscsi_ip_address: "${NETWORK_BASE}.236.${node#*":"}"
EOF
done
}
function write_osa_swift_proxy_confd {
CONFD_FILE="/etc/openstack_deploy/conf.d/${1}.yml"
echo "## DO NOT WRITE TO THIS FILE, CHANGES WILL BE LOST!" > ${CONFD_FILE}
echo "---" >> ${CONFD_FILE}
echo "$1:" >> ${CONFD_FILE}
for node in $(get_host_type ${2}); do
echo " ${node%%':'*}:" >> ${CONFD_FILE}
echo " ip: ${NETWORK_BASE}.236.${node#*":"}" >> ${CONFD_FILE}
cat >> ${CONFD_FILE} <<EOF
container_vars:
swift_proxy_vars:
limit_container_types: swift_proxy
read_affinity: "r1=100"
write_affinity: "r1"
write_affinity_node_count: "1 * replicas"
EOF
done
}
function write_osa_swift_storage_confd {
CONFD_FILE="/etc/openstack_deploy/conf.d/${1}.yml"
echo "## DO NOT WRITE TO THIS FILE, CHANGES WILL BE LOST!" > ${CONFD_FILE}
echo "---" >> ${CONFD_FILE}
echo "$1:" >> ${CONFD_FILE}
for node in $(get_host_type ${2}); do
echo " ${node%%':'*}:" >> ${CONFD_FILE}
echo " ip: ${NETWORK_BASE}.236.${node#*":"}" >> ${CONFD_FILE}
cat >> ${CONFD_FILE} <<EOF
container_vars:
swift_vars:
limit_container_types: swift
zone: 0
region: 1
EOF
done
}
function osa_user_var_add {
if ! grep -q "^$1" /etc/openstack_deploy/user_variables.yml; then
echo "$2" | tee -a /etc/openstack_deploy/user_variables.yml
else
sed -i "s|$1.*|$2|g" /etc/openstack_deploy/user_variables.yml
fi
}
function ansible_static_inventory {
CONFD_FILE="$1"
echo "## DO NOT WRITE TO THIS FILE, CHANGES WILL BE LOST!" > ${CONFD_FILE}
for node_type in $(get_all_types); do
echo "[${node_type}]" >> ${CONFD_FILE}
for node in $(get_host_type ${node_type}); do
echo "10.0.0.${node#*":"}" >> ${CONFD_FILE}
done
done
}
function install_bits {
successerator openstack-ansible $@
}
function successerator {
set +e
# Get the time taht the method was started
OP_START_TIME=$(date +%s)
#Set the initial return value to failure.
false
for ((RETRY=0; $? != 0 && RETRY < MAX_RETRIES; RETRY++)); do
if [ ${RETRY} -gt 1 ]; then
$@ -vvvv
else
$@
fi
done
# If max retries were hit, fail.
if [ $? -ne 0 && [ ${RETRY} -eq ${MAX_RETRIES} ];then
echo -e "\n Hit maximum number of retries, giving up..\n"
exit
fi
# Print the time that the method completed.
OP_TOTAL_SECONDS="$(( $(date +%s) - OP_START_TIME ))"
REPORT_OUTPUT="${OP_TOTAL_SECONDS} seconds"
REPORT_DATA+="- Operation: [ $@ ]\t${REPORT_OUTPUT}\tNumber of Attempts [ ${RETRY} ]\n"
echo -e "Run Time = ${REPORT_OUTPUT}"
set -e
}
# Return 1 if the second argument is a substring of the first argument, otherwise return 0
contains() {
string="$1"
substring="$2"
if test "${string#*$substring}" == "$string"
then
echo 0 # $substring is not in $string
else
echo 1 # $substring is in $string
fi
}