[AETHER-77] onos-diagnostics-k8s
- Adds onos-diagnostics-k8s
- Introduces profile abstraction to make some cmds optional
- Refactors onos-diagnostics to make use of the profiles
- Optimizes T3_OFFLINE profile
Change-Id: I615f03971018526b174894b39b4255e6f9ce4e3e
diff --git a/tools/package/runtime/bin/onos-diagnostics b/tools/package/runtime/bin/onos-diagnostics
index 655bb40..ec80974 100755
--- a/tools/package/runtime/bin/onos-diagnostics
+++ b/tools/package/runtime/bin/onos-diagnostics
@@ -23,6 +23,8 @@
echo "usage: $(basename $0) [-x] [-j] [-n name] [-P port] [-u user] [-p password] [ip1 ip2...]"
echo ""
echo "Environment Variables:"
+ echo " DIAGS_PROFILE Profile to be used to collect diags."
+ echo " Availables profiles in onos-diagnostics-profile"
echo " ONOS_INSTANCES IPs or hostnames of ONOS cluster machines"
echo " ONOS_WEB_USER username for REST API"
echo " ONOS_WEB_PASS password for REST API"
@@ -32,6 +34,7 @@
echo " # REST API user and password are drawn from environment variables."
echo " # Collection archive will be named /tmp/onos-diags.tar.gz"
echo " # The cluster node IPs will be drawn from ONOS_INSTANCES variable."
+ echo " # Diags profile is drawn from environment variable."
echo " > $(basename $0) "
echo ""
echo " # Collect diagnostics for the cluster and leave them extracted. "
@@ -55,91 +58,18 @@
exit 1
}
+# Let's source the different profiles
+. onos-diagnostics-profile
+
+# By default the ONOS base profile will be used
+[ -z "$DIAGS_PROFILE" ] && DIAGS_PROFILE=ONOS_PROFILE;
+
ONOS_WEB_USER=${ONOS_WEB_USER:-onos} # ONOS WEB User defaults to 'onos'
ONOS_WEB_PASS=${ONOS_WEB_PASS:-rocks} # ONOS WEB Password defaults to 'rocks'
ONOS_WEB_PORT=${ONOS_WEB_PORT:-8181} # REST API port defaults to '8181'
. $(dirname $0)/_find-node
-# TODO We should make SR commands optional
-CLI_COMMANDS=(
- "feature:repo-list"
- "feature:list"
- "bundle:list"
- "scr-list"
-
- "summary"
- "nodes"
- "apps -s"
- "netcfg"
- "cfg get"
-
- "devices"
- "device-drivers"
- "links"
- "hosts"
- "interfaces"
-
- "ports"
- "portstats -nz"
- "edge-ports"
-
- "packet-processors"
- "packet-requests"
-
- "intents"
- "flows"
- "groups"
-
- "roles"
- "masters"
-
- "maps"
-
- "fpm-connections"
- "routes"
- "obj-next-ids"
- "obj-pending-nexts"
- "obj-queues"
-
- "sr-device-subnets"
- "sr-ecmp-spg"
- "sr-should-program"
- "sr-link-state"
- "sr-mcast-tree"
- "sr-mcast-leader"
- "sr-mcast-role"
- "sr-pw-list"
- "sr-next-mcast"
- "sr-filt-mcast"
- "sr-next-dst"
- "sr-next-port"
- "sr-next-vlan"
- "sr-next-pw"
- "sr-next-xconnect"
- "sr-next-mac-vlan"
- "sr-pr-list"
- "dhcp-relay"
-
- "mcast-host-routes"
- "mcast-host-show"
-)
-
-JSON_CLI_COMMANDS=(
- "netcfg -j"
- "devices -j"
- "device-drivers -j"
- "links -j"
- "hosts -j"
- "ports -j"
- "edge-ports -j"
- "flows -j"
- "groups -j"
- "masters -j"
- "routes -j"
- "mcast-host-show -j"
-)
-
port=${ONOS_WEB_PORT}
user=${ONOS_WEB_USER}
password=${ONOS_WEB_PASS}
@@ -167,6 +97,9 @@
[ -z $1 ] && nodes=$ONOS_INSTANCES || nodes=$*
+# -j option will activate T3_OFFLINE_PROFILE
+[ ! -z $json ] && DIAGS_PROFILE=T3_OFFLINE_PROFILE
+
# Collect diagnostics from each cluster node
for node in $nodes; do
printf "Collecting diagnostics on $node..."
@@ -174,15 +107,19 @@
# Prepare a clean place for collecting the node diagnostic data
cd $diags; rm -fr $node; mkdir -p $node; cd $node;
- # Acquire locally obtained diagnostics via REST API and extract them
- printf "logs "
- curl -sS --fail --user $user:$password \
- http://$node:$port/onos/v1/diagnostics > ../$node.tar.gz
- tar zxf ../$node.tar.gz && rm ../$node.tar.gz
+ if [ -z $json ]; then
+ # Acquire locally obtained diagnostics via REST API and extract them
+ printf "logs "
+ curl -sS --fail --user $user:$password \
+ http://$node:$port/onos/v1/diagnostics > ../$node.tar.gz
+ tar zxf ../$node.tar.gz && rm ../$node.tar.gz
+ fi
# Acquire remotely obtained diagnostics via ssh CLI
- [ ! -z $json ] && CLI_COMMANDS=("${JSON_CLI_COMMANDS[@]}")
- for cmd in "${CLI_COMMANDS[@]}"; do
+ eval CLI_COMMANDS=\${${DIAGS_PROFILE}[@]}
+ for cmd in $CLI_COMMANDS; do
+ # @ is used as workaround for the array expansion
+ cmd="$(echo $cmd | sed 's/@/ /g')"
cmdLog="$(echo $cmd | cut -d\ -f1 | sed 's/:/-/g').txt"
[ ! -z $json ] && cmdLog="${cmdLog%.txt}.json"
printf "$cmdLog "