utilities/tools/collector/debian-scripts/collect_openstack.sh
Charles Short 87dd74faf0 debian: Create debian version of collect
Debian and Centos use the same tools but they are installed
in different places. In order for collect to work on Debian,
make sure that we are trying not use to RPMs on Debian. This
is done in the collect-patching script so that the "smart"
program is not run.

Also kdump uses the /var/lib/kdump path on Debian rather
than /var/crash on Centos.

Also checked for 'rpm -qa' usage and changed them to 'dpkg -l'.

Test Plan
PASS Build package
PASS Build and install ISO
PASS Run the collect -v -all

Story: 2009101
Task: 43732

Depends-On: https://review.opendev.org/c/starlingx/tools/+/838327

Signed-off-by: Charles Short <charles.short@windriver.com>
Change-Id: I66cf0615f8cab7fe877b6cb09d605557c9258c43
2022-04-19 10:21:23 -04:00

155 lines
5.5 KiB
Bash
Executable File

#! /bin/bash
#
# Copyright (c) 2013-2019 Wind River Systems, Inc.
#
# SPDX-License-Identifier: Apache-2.0
#
# Loads Up Utilities and Commands Variables
source /usr/local/sbin/collect_parms
source /usr/local/sbin/collect_utils
# Environment for kubectl
export KUBECONFIG=/etc/kubernetes/admin.conf
SERVICE="openstack"
LOGFILE="${extradir}/${SERVICE}.info"
echo "${hostname}: Openstack Info ....: ${LOGFILE}"
function is_service_active {
active=$(sm-query service rabbit-fs | grep "enabled-active")
if [ -z "${active}" ] ; then
return 0
else
return 1
fi
}
function is_openstack_node {
local PASS=0
local FAIL=1
# NOTE: hostname changes during first configuration
local this_node=$(cat /proc/sys/kernel/hostname)
labels=$(kubectl get node ${this_node} \
--no-headers --show-labels 2>/dev/null | awk '{print $NF}')
if [[ $labels =~ openstack-control-plane=enabled ]]; then
return ${PASS}
else
return ${FAIL}
fi
}
function openstack_credentials {
# Setup openstack admin tenant credentials using environment variables
unset OS_SERVICE_TOKEN
export OS_ENDPOINT_TYPE=internalURL
export CINDER_ENDPOINT_TYPE=internalURL
export OS_USERNAME=admin
export OS_PASSWORD=$(TERM=linux /opt/platform/.keyring/*/.CREDENTIAL 2>/dev/null)
export OS_AUTH_TYPE=password
export OS_AUTH_URL=http://keystone.openstack.svc.cluster.local/v3
export OS_PROJECT_NAME=admin
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_IDENTITY_API_VERSION=3
export OS_REGION_NAME=RegionOne
export OS_INTERFACE=internal
}
function openstack_commands {
declare -a CMDS=()
CMDS+=("openstack project list --long")
CMDS+=("openstack user list --long")
CMDS+=("openstack service list --long")
CMDS+=("openstack router list --long")
CMDS+=("openstack network list --long")
CMDS+=("openstack subnet list --long")
CMDS+=("openstack image list --long")
CMDS+=("openstack volume list --all-projects --long")
CMDS+=("openstack availability zone list --long")
CMDS+=("openstack server group list --all-projects --long")
CMDS+=('openstack server list --all-projects --long -c ID -c Name -c Status -c "Task State" -c "Power State" -c Networks -c "Image Name" -c "Image ID" -c "Flavor Name" -c "Flavor ID" -c "Availability Zone" -c Host -c Properties')
CMDS+=("openstack stack list --long --all-projects")
CMDS+=("openstack security group list --all-projects")
CMDS+=("openstack security group rule list --all-projects --long")
CMDS+=("openstack keypair list")
CMDS+=("openstack configuration show")
CMDS+=("openstack quota list --compute")
CMDS+=("openstack quota list --volume")
CMDS+=("openstack quota list --network")
CMDS+=("openstack host list")
CMDS+=("openstack hypervisor list --long")
CMDS+=("openstack hypervisor stats show")
HOSTS=( $(openstack hypervisor list -f value -c "Hypervisor Hostname" 2>/dev/null) )
for host in "${HOSTS[@]}" ; do
CMDS+=("openstack hypervisor show -f yaml ${host}")
done
# nova commands
CMDS+=("nova service-list")
for CMD in "${CMDS[@]}" ; do
delimiter ${LOGFILE} "${CMD}"
eval ${CMD} 2>>${COLLECT_ERROR_LOG} >>${LOGFILE}
echo >>${LOGFILE}
done
}
function rabbitmq_usage_stats {
# RabbitMQ usage stats
MQ_STATUS="rabbitmqctl status"
delimiter ${LOGFILE} "${MQ_STATUS} | grep -e '{memory' -A30"
${MQ_STATUS} 2>/dev/null | grep -e '{memory' -A30 >> ${LOGFILE}
echo >>${LOGFILE}
delimiter ${LOGFILE} "RabbitMQ Queue Info"
num_queues=$(rabbitmqctl list_queues | wc -l); ((num_queues-=2))
num_bindings=$(rabbitmqctl list_bindings | wc -l); ((num_bindings-=2))
num_exchanges=$(rabbitmqctl list_exchanges | wc -l); ((num_exchanges-=2))
num_connections=$(rabbitmqctl list_connections | wc -l); ((num_connections-=2))
num_channels=$(rabbitmqctl list_channels | wc -l); ((num_channels-=2))
arr=($(rabbitmqctl list_queues messages consumers memory | \
awk '/^[0-9]/ {a+=$1; b+=$2; c+=$3} END {print a, b, c}'))
messages=${arr[0]}; consumers=${arr[1]}; memory=${arr[2]}
printf "%6s %8s %9s %11s %8s %8s %9s %10s\n" "queues" "bindings" "exchanges" "connections" "channels" "messages" "consumers" "memory" >> ${LOGFILE} 2>>${COLLECT_ERROR_LOG}
printf "%6d %8d %9d %11d %8d %8d %9d %10d\n" $num_queues $num_bindings $num_exchanges $num_connections $num_channels $messages $consumers $memory >> ${LOGFILE} 2>>${COLLECT_ERROR_LOG}
}
###############################################################################
# Only Controller
###############################################################################
if [ "$nodetype" = "controller" ] ; then
is_service_active
if [ "$?" = "0" ] ; then
exit 0
fi
# host rabbitmq usage
rabbitmq_usage_stats
# Check for openstack label on this node
if ! is_openstack_node; then
exit 0
fi
# Run as subshell so we don't contaminate environment
(openstack_credentials; openstack_commands)
# TODO(jgauld): Should also get containerized rabbitmq usage,
# need wrapper script rabbitmq-cli
fi
###############################################################################
# collect does not retrieve /etc/keystone dir
# Additional logic included to copy /etc/keystone directory
###############################################################################
mkdir -p ${extradir}/../../etc/
cp -R /etc/keystone/ ${extradir}/../../etc
chmod -R 755 ${extradir}/../../etc/keystone
exit 0