diff options
Diffstat (limited to 'tests/lib')
-rw-r--r-- | tests/lib/inspector | 30 | ||||
-rw-r--r-- | tests/lib/inspectors/congress | 69 | ||||
-rw-r--r-- | tests/lib/inspectors/sample | 16 | ||||
-rw-r--r-- | tests/lib/installer | 34 | ||||
-rw-r--r-- | tests/lib/installers/apex | 24 | ||||
-rw-r--r-- | tests/lib/installers/fuel | 107 | ||||
-rw-r--r-- | tests/lib/installers/local | 21 |
7 files changed, 301 insertions, 0 deletions
diff --git a/tests/lib/inspector b/tests/lib/inspector new file mode 100644 index 00000000..2fb7c409 --- /dev/null +++ b/tests/lib/inspector @@ -0,0 +1,30 @@ +#!/bin/bash + +INSPECTOR_TYPE=${INSPECTOR_TYPE:-sample} + +function is_inspector_supported { + local inspector="$1" + [[ -f $TOP_DIR/lib/inspectors/$inspector ]] +} + +function is_inspector { + local inspector="$1" + [[ $inspector == $INSPECTOR_TYPE ]] +} + +function start_inspector { + if ! is_inspector_supported $INSPECTOR_TYPE; then + die $LINENO"INSPECTOR_TYPE=$INSPECTOR_TYPE is not supported." + fi + + source $TOP_DIR/lib/inspectors/$INSPECTOR_TYPE + start_inspector_$INSPECTOR_TYPE +} + +function stop_inspector { + stop_inspector_$INSPECTOR_TYPE +} + +function cleanup_inspector { + cleanup_inspector_$INSPECTOR_TYPE +} diff --git a/tests/lib/inspectors/congress b/tests/lib/inspectors/congress new file mode 100644 index 00000000..04825252 --- /dev/null +++ b/tests/lib/inspectors/congress @@ -0,0 +1,69 @@ +#!/bin/bash + +function _congress_add_rule { + name=$1 + policy=$2 + rule=$3 + + if ! openstack congress policy rule list $policy | grep -q -e "// Name: $name$" ; then + openstack congress policy rule create --name $name $policy "$rule" + fi +} + +function _congress_del_rule { + name=$1 + policy=$2 + + if openstack congress policy rule list $policy | grep -q -e "^// Name: $name$" ; then + openstack congress policy rule delete $policy $name + fi +} + +function _congress_add_rules { + _congress_add_rule host_down classification \ + 'host_down(host) :- + doctor:events(hostname=host, type="compute.host.down", status="down")' + + _congress_add_rule active_instance_in_host classification \ + 'active_instance_in_host(vmid, host) :- + nova:servers(id=vmid, host_name=host, status="ACTIVE")' + + _congress_add_rule host_force_down classification \ + 'execute[nova:services.force_down(host, "nova-compute", "True")] :- + host_down(host)' + + _congress_add_rule error_vm_states classification \ + 'execute[nova:servers.reset_state(vmid, "error")] :- + host_down(host), + active_instance_in_host(vmid, host)' +} + +function start_inspector_congress { + nova_api_min_version="2.11" + nova_api_version=$(openstack congress datasource list | \ + grep nova | grep -Po "(?<='api_version': ')[^']*") + [[ -z $nova_api_version ]] && nova_api_version="2.0" + if [[ "$nova_api_version" < "$nova_api_min_version" ]]; then + echo "ERROR: Congress Nova datasource API version < $nova_api_min_version ($nova_api_version)" + exit 1 + fi + openstack congress driver list | grep -q " doctor " + openstack congress datasource list | grep -q " doctor " || { + openstack congress datasource create doctor doctor + } + _congress_add_rules + +} + +function stop_inspector_congress { + _congress_del_rule host_force_down classification + _congress_del_rule error_vm_states classification + _congress_del_rule active_instance_in_host classification + _congress_del_rule host_down classification + +} + +function cleanup_inspector_congress { + # Noop + return +} diff --git a/tests/lib/inspectors/sample b/tests/lib/inspectors/sample new file mode 100644 index 00000000..cd21a008 --- /dev/null +++ b/tests/lib/inspectors/sample @@ -0,0 +1,16 @@ +#!/bin/bash + +function start_inspector_sample { + pgrep -f "python inspector.py" && return 0 + python inspector.py "$INSPECTOR_PORT" > inspector.log 2>&1 & +} + +function stop_inspector_sample { + pgrep -f "python inspector.py" || return 0 + kill $(pgrep -f "python inspector.py") +} + +function cleanup_inspector_sample { + # Noop + return +} diff --git a/tests/lib/installer b/tests/lib/installer new file mode 100644 index 00000000..cdde6eff --- /dev/null +++ b/tests/lib/installer @@ -0,0 +1,34 @@ +#!/bin/bash + +INSTALLER_TYPE=${INSTALLER_TYPE:-local} +INSTALLER_IP=${INSTALLER_IP:-none} +ssh_opts_cpu="$ssh_opts" + +function is_installer_supported { + local installer="$1" + [[ -f $TOP_DIR/lib/installers/$installer ]] +} + +function is_installer { + local installer="$1" + [[ $installer == $INSTALLER_TYPE ]] +} + +function setup_installer { + if ! is_installer_supported $INSTALLER_TYPE; then + die $LINENO"INSTALLER_TYPE=$INSTALLER_TYPE is not supported." + fi + + source $TOP_DIR/lib/installers/$INSTALLER_TYPE + + if ! is_set INSTALLER_IP; then + get_installer_ip + fi + + installer_get_ssh_keys + installer_apply_patches +} + +function cleanup_installer { + cleanup_installer_$INSTALLER_TYPE +} diff --git a/tests/lib/installers/apex b/tests/lib/installers/apex new file mode 100644 index 00000000..54b3dce2 --- /dev/null +++ b/tests/lib/installers/apex @@ -0,0 +1,24 @@ +#!/bin/bash + +function get_installer_ip { + local instack_mac=$(sudo virsh domiflist instack | awk '/default/{print $5}') + INSTALLER_IP=$(/usr/sbin/arp -e | grep ${instack_mac} | awk '{print $1}') + die_if_not_set $LINENO $INSTALLER_IP "No installer IP" +} + +function installer_get_ssh_keys { + sudo scp $ssh_opts root@"$INSTALLER_IP":/home/stack/.ssh/id_rsa instack_key + sudo chown $(whoami):$(whoami) instack_key + chmod 400 instack_key + ssh_opts_cpu+=" -i instack_key" +} + +function installer_apply_patches { + # Noop + return +} + +function cleanup_installer_apex { + # Noop + return +} diff --git a/tests/lib/installers/fuel b/tests/lib/installers/fuel new file mode 100644 index 00000000..34a86922 --- /dev/null +++ b/tests/lib/installers/fuel @@ -0,0 +1,107 @@ +#!/bin/bash + +function get_installer_ip { + local instack_mac=$(sudo virsh domiflist fuel-opnfv | awk '/pxebr/{print $5}') + INSTALLER_IP=$(/usr/sbin/arp -e | grep ${instack_mac} | awk '{print $1}') + die_if_not_set $LINENO $INSTALLER_IP "No installer IP" +} + +function installer_get_ssh_keys { + sshpass -p r00tme scp $ssh_opts root@${INSTALLER_IP}:.ssh/id_rsa instack_key + sudo chown $(whoami):$(whoami) instack_key + chmod 400 instack_key + ssh_opts_cpu+=" -i instack_key" +} + +function installer_apply_patches { + cat > set_conf.sh << 'END_TXT' +#!/bin/bash +if [ -e /etc/ceilometer/event_pipeline.yaml ]; then + if ! grep -q '^ *- notifier://?topic=alarm.all$' /etc/ceilometer/event_pipeline.yaml; then + sed -i 's|- notifier://|- notifier://?topic=alarm.all|' /etc/ceilometer/event_pipeline.yaml + echo "modify the ceilometer config" + service ceilometer-agent-notification restart + fi +else + echo "ceilometer event_pipeline.yaml file does not exist" + exit 1 +fi +if [ -e /etc/nova/nova.conf ]; then + if ! grep -q '^notification_driver=messaging$' /etc/nova/nova.conf; then + sed -i -r 's/notification_driver=/notification_driver=messaging/g' /etc/nova/nova.conf + echo "modify nova config" + service nova-api restart + fi +else + echo "nova.conf file does not exist" + exit 1 +fi +exit 0 +END_TXT + + chmod +x set_conf.sh + CONTROLLER_IP=$(sshpass -p r00tme ssh 2>/dev/null $ssh_opts root@${INSTALLER_IP} \ + "fuel node | grep controller | cut -d '|' -f 5|xargs") + for node in $CONTROLLER_IP;do + scp $ssh_opts_cpu set_conf.sh "root@$node:" + ssh $ssh_opts_cpu "root@$node" './set_conf.sh > set_conf.log 2>&1 &' + sleep 1 + scp $ssh_opts_cpu "root@$node:set_conf.log" set_conf_$node.log + done + + if grep -q "modify the ceilometer config" set_conf_*.log ; then + NEED_TO_RESTORE_CEILOMETER=true + fi + if grep -q "modify nova config" set_conf_*.log ; then + NEED_TO_RESTORE_NOVA=true + fi + + echo "waiting service restart..." + sleep 60 + +} + +function cleanup_installer_fuel { + if ! ($NEED_TO_RESTORE_CEILOMETER || $NEED_TO_RESTORE_NOVA) ; then + echo "Don't need to restore config" + exit 0 + fi + + echo "restore the configuration..." + cat > restore_conf.sh << 'END_TXT' +#!/bin/bash +if @NEED_TO_RESTORE_CEILOMETER@ ; then + if [ -e /etc/ceilometer/event_pipeline.yaml ]; then + if grep -q '^ *- notifier://?topic=alarm.all$' /etc/ceilometer/event_pipeline.yaml; then + sed -i 's|- notifier://?topic=alarm.all|- notifier://|' /etc/ceilometer/event_pipeline.yaml + service ceilometer-agent-notification restart + fi + else + echo "ceilometer event_pipeline.yaml file does not exist" + exit 1 + fi +fi +if @NEED_TO_RESTORE_NOVA@ ; then + if [ -e /etc/nova/nova.conf ]; then + if grep -q '^notification_driver=messaging$' /etc/nova/nova.conf; then + sed -i -r 's/notification_driver=messaging/notification_driver=/g' /etc/nova/nova.conf + service nova-api restart + fi + else + echo "nova.conf file does not exist" + exit 1 + fi +fi +exit 0 +END_TXT + sed -i -e "s/@NEED_TO_RESTORE_CEILOMETER@/$NEED_TO_RESTORE_CEILOMETER/" restore_conf.sh + sed -i -e "s/@NEED_TO_RESTORE_NOVA@/$NEED_TO_RESTORE_NOVA/" restore_conf.sh + chmod +x restore_conf.sh + for node in $CONTROLLER_IP;do + scp $ssh_opts_cpu restore_conf.sh "root@$node:" + ssh $ssh_opts_cpu "root@$node" './restore_conf.sh > restore_conf.log 2>&1 &' + done + + echo "waiting service restart..." + sleep 60 +} diff --git a/tests/lib/installers/local b/tests/lib/installers/local new file mode 100644 index 00000000..e7aed14f --- /dev/null +++ b/tests/lib/installers/local @@ -0,0 +1,21 @@ +#!/bin/bash + +function get_installer_ip { + # Noop + return +} + +function installer_get_ssh_keys { + echo "INSTALLER_TYPE set to 'local'. Assuming SSH keys already exchanged with $COMPUTE_HOST" + return +} + +function installer_apply_patches { + # Noop + return +} + +function cleanup_installer_local { + # Noop + return +} |