The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl

use strict;
use warnings;
use YAML::XS;

use Hermes;
use Hermes::DBI::Root;
use Vulcan::OptConf;
use Vulcan::Sudo;

Vulcan::Sudo->sudo();

$| ++;

$Vulcan::OptConf::THIS = 'hermes';

=head1 SYNOPSIS

Delete hermes databases entries

 $0 --cluster clusters --table table [--key nodes] [--value values]

=cut
my $option = Vulcan::OptConf->load();
my %o = $option->get( qw( cluster=s table=s key=s value=s ) )->dump();

my %range = $option->dump( 'range' );
my $range = Hermes->new( %range );
my ( $drop, %query ) = 1;

for my $index ( qw( key value ) )
{
    next unless defined $o{$index};
    $drop = 0;

    next unless my @list = $range->load( $o{$index} )->list();
    $query{$index} = [ 1 => @list ];
}

for my $cluster ( $range->load( $o{cluster} || [] )->list() )
{
    my $db = Hermes::DBI::Root->new( File::Spec->join( $o{root}, $cluster ) );

    for my $table ( $range->load( $o{table} || [] )->list() )
    {
        if ( %query ) { $db->delete( $table, %query ) }
        elsif ( $drop ) { $db->drop( $table ) }
    }
}

exit 0;