8a182302ee
Kilo and Liberty have a different name for the haproxy services than newer versions. Change-Id: I070eb22cc219451f42c436fa31e4db33fa79a8fe
258 lines
7.2 KiB
Bash
Executable File
258 lines
7.2 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
|
|
}
|
|
|
|
# Return all service ports
|
|
function get_osad_ports {
|
|
python <<EOL
|
|
import yaml
|
|
with open('haproxy_config.yml') as f:
|
|
x = yaml.safe_load(f.read())
|
|
haproxy_services = (x.get('haproxy_default_services')
|
|
or x.get('haproxy_service_configs'))
|
|
for i in haproxy_services:
|
|
y = i['service'].get('haproxy_port')
|
|
if isinstance(y, int):
|
|
print y
|
|
EOL
|
|
}
|
|
|