summaryrefslogtreecommitdiffstats
path: root/tools/ves-clean.sh
diff options
context:
space:
mode:
Diffstat (limited to 'tools/ves-clean.sh')
-rw-r--r--tools/ves-clean.sh230
1 files changed, 230 insertions, 0 deletions
diff --git a/tools/ves-clean.sh b/tools/ves-clean.sh
new file mode 100644
index 0000000..0f9b8d7
--- /dev/null
+++ b/tools/ves-clean.sh
@@ -0,0 +1,230 @@
+#!/bin/bash
+# Copyright 2017-2018 AT&T Intellectual Property, Inc
+#
+# 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.
+#
+#. What this is: Cleanup script for the VES monitoring framework.
+#. With this script a VES deployment can be cleaned from one or more hosts.
+#.
+#. Prerequisites:
+#. - VES framework deployed as in ves-setup.sh in this repo
+#.
+#. Usage:
+#. bash ~/ves/ves-setup.sh clean <what> [cloudify]
+#. what: one of all|influxdb|grafana|collector|kafka|collectd|agent|nodes
+#. barometer: clean barometer
+#. agent: clean VES agent
+#. kafka: clean kafka
+#. zookeeper: clean zookeeper
+#. grafana: clean grafana
+#. influxdb: clean influxdb
+#. collector: clean VES collector
+#. nodes: clean VES code etc at nodes
+#. cloudify: (optional) clean up cloudify-based deployments
+#.
+#. See demo_deploy.sh in this repo for a recommended sequence of the above.
+#.
+#. Status: this is a work in progress, under test.
+
+# http://docs.opnfv.org/en/latest/submodules/barometer/docs/release/userguide/collectd.ves.userguide.html
+
+function fail() {
+ log "$1"
+ exit 1
+}
+
+function log() {
+ f=$(caller 0 | awk '{print $2}')
+ l=$(caller 0 | awk '{print $1}')
+ echo ""
+ echo "$f:$l ($(date)) $1"
+}
+
+function clean_all() {
+ log "clean installation"
+ clean_barometer
+ clean_agent
+ clean_kafka
+ clean_zookeeper
+ clean_grafana
+ clean_influxdb
+ clean_collector
+ clean_nodes
+}
+
+function clean_via_docker() {
+ log "clean docker container $1 at k8s master $k8s_master"
+ ssh -x -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no \
+ $k8s_user@$k8s_master <<EOF
+sudo docker stop $1
+sudo docker rm -v $1
+EOF
+}
+
+function clean_via_cloudify() {
+ log "clean $1 via cloudify"
+ bash ~/models/tools/cloudify/k8s-cloudify.sh stop $1 $1
+}
+
+
+function clean_grafana() {
+ log "clean grafana"
+
+ log "VES datasources and dashboards at grafana server, if needed"
+ curl -X DELETE \
+ http://$ves_grafana_auth@$ves_grafana_host:$ves_grafana_port/api/datasources/name/VESEvents
+ curl -X DELETE \
+ http://$ves_grafana_auth@$ves_grafana_host:$ves_grafana_port/api/dashboards/db/ves-demo
+
+ clean_via_docker ves-grafana
+}
+
+function clean_influxdb() {
+ log "clean influxdb"
+ clean_via_docker ves-influxdb
+}
+
+function clean_agent() {
+ log "clean ves-agent"
+ if [[ "$cloudify" == "cloudify" ]]; then
+ clean_via_cloudify ves-agent
+ force_k8s_clean ves-agent
+ else
+ clean_via_docker ves-agent
+ fi
+}
+
+function clean_kafka() {
+ log "clean ves-kafka"
+ if [[ "$cloudify" == "cloudify" ]]; then
+ clean_via_cloudify ves-kafka
+ force_k8s_clean ves-kafka
+ else
+ clean_via_docker ves-kafka
+ fi
+}
+
+function clean_zookeeper() {
+ log "clean ves-zookeeper"
+ if [[ "$cloudify" == "cloudify" ]]; then
+ clean_via_cloudify ves-zookeeper
+ force_k8s_clean ves-zookeeper
+ else
+ clean_via_docker ves-zookeeper
+ fi
+}
+
+function clean_collector() {
+ log "clean ves-zookeeper"
+ if [[ "$cloudify" == "cloudify" ]]; then
+ clean_via_cloudify ves-collector
+ force_k8s_clean ves-collector
+ else
+ clean_via_docker ves-collector
+ fi
+}
+
+function clean_barometer() {
+ log "clean ves-barometer"
+ ssh -x -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no \
+kubectl delete daemonset --namespace default ves-barometer
+EOF
+ force_k8s_clean ves-barometer
+}
+
+function clean_nodes() {
+ log "clean ves code etc from nodes"
+ if [[ "$k8s_master" == "$k8s_workers" ]]; then
+ nodes=$k8s_master
+ else
+ nodes="$k8s_master $k8s_workers"
+ fi
+ for node in $nodes; do
+ log "remove ves-barometer container and config for VES at node $node"
+ ssh -x -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no \
+ $k8s_user@$node <<EOF
+sudo rm -rf /home/$k8s_user/ves
+sudo rm -rf /home/$k8s_user/collectd
+EOF
+ done
+}
+
+function force_k8s_clean() {
+ log "force cleanup of k8s pod for $1 if still present"
+ ssh -x -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no \
+ $k8s_user@$k8s_master "kubectl delete pods --namespace default $1-pod"
+ pods=$(ssh -x -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $k8s_user@$k8s_master kubectl get pods --namespace default | grep -c $1)
+ echo "wait for all kubectl pods to be terminated"
+ tries=10
+ while [[ $pods -gt 0 && $tries -gt 0 ]]; do
+ echo "$pods VES pods remaining in kubectl"
+ sleep 30
+ ((tries--))
+ pods=$(ssh -x -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $k8s_user@$k8s_master kubectl get pods --namespace default | grep -c $1)
+ done
+ if [[ $pods -gt 0 ]]; then
+ log "manually terminate $1 pods via docker"
+ cs=$(ssh -x -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $k8s_user@$k8s_master sudo docker ps -a | awk "/$1/ {print $1}")
+ for c in $cs ; do
+ ssh -x -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $k8s_user@$k8s_master "sudo docker stop $c"
+ ssh -x -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $k8s_user@$k8s_master "sudo docker rm -v $c"
+ done
+ fi
+}
+
+dist=$(grep --m 1 ID /etc/os-release | awk -F '=' '{print $2}' | sed 's/"//g')
+if [[ $(grep -c $HOSTNAME /etc/hosts) -eq 0 ]]; then
+ echo "$(ip route get 8.8.8.8 | awk '{print $NF; exit}') $HOSTNAME" |\
+ sudo tee -a /etc/hosts
+fi
+
+source ~/k8s_env_$k8s_master_hostname.sh
+if [[ -f ~/ves/tools/ves_env.sh ]]; then
+ source ~/ves/tools/ves_env.sh
+fi
+log "VES environment as input"
+env | grep ves_
+
+trap 'fail' ERR
+
+cloudify=$2
+
+case "$1" in
+ "all")
+ clean_all
+ ;;
+ "modes")
+ clean_nodes
+ ;;
+ "collectd")
+ clean_collectd
+ ;;
+ "agent")
+ clean_agent
+ ;;
+ "influxdb")
+ clean_influxdb
+ ;;
+ "grafana")
+ clean_grafana
+ ;;
+ "collector")
+ clean_collector
+ ;;
+ "kafka")
+ clean_kafka
+ ;;
+ *)
+ grep '#. ' $0
+esac
+trap '' ERR