diff --git a/src/confd/bin/dagger b/src/confd/bin/dagger index e1fa0fff..7f7de0eb 100755 --- a/src/confd/bin/dagger +++ b/src/confd/bin/dagger @@ -104,7 +104,9 @@ do_abandon() [ "$next" ] && [ -d "$basedir/$next" ] \ || abort "Next generation does not exist" - mv "$basedir/$next" "$basedir/$next-ABANDONED-$(date +%F-%T)" + tar caf "$basedir/$next-ABANDONED-$(date +%F-%t).tar.gz" "$basedir/$next" + rm -rf "$basedir/$next" + rm "$basedir/next" inform info "Abandoned generation $next" } @@ -128,6 +130,19 @@ do_evolve() mv "$basedir/next" "$basedir/current" inform info "Evolved to generation $next" + + if [ "$current" ]; then + (cd "$basedir" && tar caf "$current.tar.gz" "$current") + rm -rf "$basedir/$current" + fi +} + +do_prune() +{ + local keep=${1:-10} + + cd "$basedir" + rm -f old=$(ls -rv *.tar.gz | tail "+$((keep + 1))") } usage() @@ -158,6 +173,10 @@ Commands: exec Run the specified action of the current generation. + prune [] + Remove all but the last , or 10 by default, + archived generations. + help Show this message. @@ -201,6 +220,9 @@ case $cmd in "exec") do_exec "$@" ;; + "prune") + do_prune "$@" + ;; *) usage && exit 1 diff --git a/src/confd/src/dagger.c b/src/confd/src/dagger.c index 36213b8a..de98decf 100644 --- a/src/confd/src/dagger.c +++ b/src/confd/src/dagger.c @@ -114,11 +114,23 @@ int dagger_evolve(struct dagger *d) return exitcode; } +static int dagger_prune(struct dagger *d) +{ + int exitcode; + + exitcode = systemf("dagger -C %s prune", d->path); + DEBUG("dagger(%d->%d): prune: exitcode=%d\n", + d->current, d->next, exitcode); + + return exitcode; +} + int dagger_evolve_or_abandon(struct dagger *d) { int exitcode, err; exitcode = dagger_evolve(d); + dagger_prune(d); if (!exitcode) return 0;