[Swift-devel] Contribution: swift-osg-ress-site-catalog

Mats Rynge rynge at renci.org
Mon Feb 16 17:01:50 CST 2009


Attached is a contribution for Swift. It is a script which queries the
OSG Resource Selection System (ReSS) for site information and builds a
Swift site catalog. I think the script should be located in bin/, but
feel free to include it anywhere in the distribution.

I have already submitted a signed contribution license agreement, and
this script is contributed under that agreement.

-- 
Mats Rynge
Renaissance Computing Institute <http://www.renci.org>
-------------- next part --------------
#!/usr/bin/perl

use strict;

use Pod::Usage;
use Getopt::Long;
use File::Temp qw/ tempfile tempdir mktemp /;

my $opt_help = 0;
my $opt_vo = 'engage';
my $opt_engage_verified = 0;
my $opt_gt4 = 0;
my $opt_out = '&STDOUT';

Getopt::Long::Configure('bundling');
GetOptions(
    "help"                   => \$opt_help,
    "vo=s"                   => \$opt_vo,
    "engage-verified"        => \$opt_engage_verified,
    "gt4"                    => \$opt_gt4,
    "out=s"                  => \$opt_out,
) or pod2usage(1);

if ($opt_help) {
    pod2usage(1);
}

if ($opt_engage_verified && $opt_vo ne "engage") {
    die("You can not specify a vo when using --engage-verified\n");
}

# make sure condor_status is in the path
my $out = `which condor_status 2>/dev/null`;
if ($out eq "") {
    die("This tool depends on condor_status.\n" .
        "Please make sure condor_status in your path.\n");
}

my %ads;
my %tmp;
my $cmd = "condor_status -any -long -constraint" .
          " 'StringlistIMember(\"VO:$opt_vo\";GlueCEAccessControlBaseRule)'" .
          " -pool osg-ress-1.fnal.gov";
# if we want the engage verified sites, ignore opt_vo and query against 
# engage central collector
if ($opt_engage_verified) {
    $cmd = "condor_status -any -long -constraint" .
           " 'SiteVerified==TRUE'" .
           " -pool engage-central.renci.org"
}
open(STATUS, "$cmd|");
while(<STATUS>) {
    chomp;
    if ($_ eq "") {
        if ($tmp{'GlueSiteName'} ne "") {
            my %copy = %tmp;
            $ads{$tmp{'GlueSiteName'}} = \%copy;
            undef %tmp;
        }
    }
    else {
        my ($key, $value) = split(/ = /, $_, 2);
        $value =~ s/^"|"$//g; # remove quotes from Condor strings
        $tmp{$key} = $value;
    }
}
close(STATUS);

# lowercase vo
my $lc_vo = lc($opt_vo);

open(FH, ">$opt_out") or die("Unable to open $opt_out");
print FH "<config>\n";
foreach my $sitename (keys %ads) {
    my $contact = $ads{$sitename}->{'GlueCEInfoContactString'};
    my $host = $contact;
    $host =~ s/:.*//;
    my $jm = $contact;
    $jm =~ s/.*jobmanager-//;
    if ($jm eq "pbs") {
        $jm = "PBS";
    }
    elsif ($jm eq "lsf") {
        $jm = "LSF";
    }
    elsif ($jm eq "sge") {
        $jm = "SGE";
    }
    elsif ($jm eq "condor") {
        $jm = "Condor";
    }
    my $workdir = $ads{$sitename}->{'GlueCEInfoDataDir'};
    print FH "\n";
    print FH "  <!-- $sitename -->\n";
    print FH "  <pool handle=\"$sitename\" >\n";
    print FH "    <gridftp  url=\"gsiftp://$host/\" />\n";
    if ($opt_gt4) {
        print FH "    <execution provider=\"gt4\" jobmanager=\"$jm\" url=\"$host:9443\" />\n";
    }
    else {
        print FH "    <jobmanager universe=\"vanilla\" url=\"$contact\" major=\"2\" />\n";
    }
    print FH "    <workdirectory >$workdir/$lc_vo/tmp</workdirectory>\n";
    print FH "  </pool>\n";
}
print FH "\n</config>\n";
close(FH);

exit(0);

__END__

=head1 NAME

swift-osg-ress-site-catalog - converts ReSS data to Swift site catalog

=head1 SYNOPSIS

swift-osg-ress-site-catalog [options]

=head1 OPTIONS

=over 8

=item B<--help>

Show this help message

=item B<--vo=[name]>

Set what VO to query ReSS for

=item B<--engage-verified>

Only retrieve sites verified by the Engagement VO site verification tests
This can not be used together with --vo, as the query will only work for
sites advertising support for the Engagement VO.

This option means information will be retrieved from the Engagement collector
instead of the top-level ReSS collector.

=item B<--out=[filename]>

Write to [filename] instead of stdout

=back

=head1 DESCRIPTION

B<swift-osg-ress-site-catalog> converts ReSS data to Swift site catalog

=cut





More information about the Swift-devel mailing list