#!/bin/bash
#
-# Copyright (C) 2009 Google Inc.
+# Copyright (C) 2009, 2010, 2011, 2012 Google Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301, USA.
-set -e
+set -e -u
+
+@SHELL_ENV_INIT@
+
+# Overridden by unittest
+: ${CHECK_CERT_EXPIRED:=$PKGLIBDIR/check-cert-expired}
+
+usage() {
+ echo "Usage: $0 node|master" 2>&1
+ exit $1
+}
+
+if [[ "$#" -ne 1 ]]; then
+ usage 1
+fi
+
+case "$1" in
+ node)
+ readonly CLEANER_LOG_DIR=$LOG_DIR/cleaner
+ ;;
+ master)
+ readonly CLEANER_LOG_DIR=$LOG_DIR/master-cleaner
+ ;;
+ --help-completion)
+ echo "choices=node,master 1 1"
+ exit 0
+ ;;
+ --help)
+ usage 0
+ ;;
+ *)
+ usage 1
+ ;;
+esac
+
+readonly CRYPTO_DIR=$RUN_DIR/crypto
+readonly QUEUE_ARCHIVE_DIR=$DATA_DIR/queue/archive
+
+in_cluster() {
+ [[ -e $DATA_DIR/ssconf_master_node ]]
+}
+
+cleanup_node() {
+ # Return if directory for crypto keys doesn't exist
+ [[ -d $CRYPTO_DIR ]] || return 0
+
+ find $CRYPTO_DIR -mindepth 1 -maxdepth 1 -type d | \
+ while read dir; do
+ if $CHECK_CERT_EXPIRED $dir/cert; then
+ rm -vf $dir/{cert,key}
+ rmdir -v --ignore-fail-on-non-empty $dir
+ fi
+ done
+}
+
+cleanup_watcher() {
+ # Return if machine is not part of a cluster
+ in_cluster || return 0
+
+ # Remove old watcher files
+ find $DATA_DIR -maxdepth 1 -type f -mtime +$REMOVE_AFTER \
+ \( -name 'watcher.*-*-*-*.data' -or \
+ -name 'watcher.*-*-*-*.instance-status' \) -print0 | \
+ xargs -r0 rm -vf
+}
cleanup_master() {
# Return if machine is not part of a cluster
- [[ -e $DATA_DIR/ssconf_master_node ]] || return 0
+ in_cluster || return 0
# Return if queue archive directory doesn't exist
[[ -d $QUEUE_ARCHIVE_DIR ]] || return 0
xargs -r0 rm -vf
}
-DATA_DIR=@LOCALSTATEDIR@/lib/ganeti
-CLEANER_LOG_DIR=@LOCALSTATEDIR@/log/ganeti/cleaner
-QUEUE_ARCHIVE_DIR=$DATA_DIR/queue/archive
-
# Define how many days archived jobs should be left alone
REMOVE_AFTER=21
find $CLEANER_LOG_DIR -maxdepth 1 -type f | sort | head -n -$KEEP_LOGS | \
xargs -r rm -vf
-cleanup_master
+case "$1" in
+ node)
+ cleanup_node
+ cleanup_watcher
+ ;;
+ master)
+ cleanup_master
+ ;;
+esac
exit 0