script:/usr/local/sbin/dgridmap.pl
From Dgiref
#!/usr/bin/env perl # use Getopt::Long; $base_url = "https://dispatch.fz-juelich.de:8814"; # Defaultwerte $opt_pre = "dg"; $opt_cert = "/etc/grid-security"; # FZK extension $path="/etc/grid-security/gridmapdir"; # without slash on the end of path!! # funcions # global vars my @acarr; # logging output sub logging { $msg=$_[0]; print $msg; } # system/bash commands sub mysystem { $cmd=$_[0]; system $cmd; #logging $cmd; if ( $? == -1) { die ("Couldn't run '$cmd'"); } } # URL encoding sub URLEncode { my $theURL = $_[0]; $theURL =~ s/([\W])/"%" . uc(sprintf("%2.2x",ord($1)))/eg; return $theURL; } sub getAcc { # required global @acarr my $acstr=$_[0]; $acstr =~ s/\ *//; if(index($acstr, ",") != -1){ my $nstr=substr($acstr, index($acstr, ",") + 1); #print substr($acstr, 0, index($acstr, ","))."\n"; getAcc($nstr); my $ac=substr($acstr, 0, index($acstr, ",")); push(@acarr, $ac); } else { push(@acarr,$acstr); } } # Optionen einlesen $result = GetOptions ( "cert-path=s" => \$opt_cert, "pre=s" => \$opt_pre, "output-u=s" => \$opt_outu, "output-u-old=s" => \$opt_outu_old, "output-g=s" => \$opt_outg, "output-g-old=s" => \$opt_outg_old, "output-o=s" => \$opt_outo, "output-a=s" => \$opt_outa, "lcmaps" => \$lcmaps, "help" => \$opt_help ); if ((!$result) or (defined($opt_help))) { Usage(); exit(-1); } if ((length("$opt_pre") > 2)) { print "############################################################\n\n"; print "Fehler bei Option '-pre <zz>'; max. 2 Zeichen erlaubt !\n"; Usage(); exit(-1); } # Certificate-Spezifikationen $ca_dir = "$opt_cert"."\/certificates"; $cert_pub = "$opt_cert"."\/hostcert.pem"; $cert_priv = "$opt_cert"."\/hostkey.pem"; if (not -d $ca_dir) { print "############################################################\n\n"; print "Zertifikatsdirectory fuer certificates existiert nicht oder ist kein Directory ($ca_dir)!\n\n"; print "############################################################\n\n"; exit(-1); } if (-z $ca_dir) { print "############################################################\n\n"; print "Zertifikatsdirectory fuer certificates ist leer ($ca_dir)!\n\n"; print "############################################################\n\n"; exit(-1); } if (not -f $cert_pub) { print "############################################################\n\n"; print "'Grid-Server-Zertifikat' existiert nicht oder ist keine Datei ($cert_pub)!\n\n"; print "############################################################\n\n"; exit(-1); } if (-z $cert_pub) { print "############################################################\n\n"; print "'Grid-Server-Zertifikat' ist leer ($cert_pub)!\n\n"; print "############################################################\n\n"; exit(-1); } if (not -f $cert_priv) { print "############################################################\n\n"; print "'privater Schluessel des Grid-Server-Zertifikats' existiert nicht oder ist keine Datei ($cert_priv)!\n\n"; print "############################################################\n\n"; exit(-1); } if (-z $cert_priv) { print "############################################################\n\n"; print "'privater Schluessel des Grid-Server-Zertifikats' ist leer ($cert_priv)!\n\n"; print "############################################################\n\n"; exit(-1); } # kein Output-File def. --> alle Formate mit Defaultnamen generieren if ((!defined($opt_outu)) and (!defined($opt_outu_old)) and (!defined($opt_outg)) and (!defined($opt_outg_old)) and (!defined($opt_outo)) and (!defined($opt_outa))) { $opt_outu = "uudb"; $opt_outu_old = "uudb.old"; $opt_outg = "gridmap"; $opt_outg_old = "gridmap.old"; $opt_outo = "ogsa"; $opt_outa = "admin"; } ################################## # ALTE !!! UUDB-Daten erzeugen # ################################## if ((defined($opt_outu_old))) { $urlu = "get_gridmaps?pre=$opt_pre\&form=uudb_old"; $wget_cmd = "/usr/bin/wget -nv -t 1 --ca-directory=$ca_dir --certificate=$cert_pub --private-key=$cert_priv \'$base_url/$urlu\' -o /dev/null -O-"; @list = `exec $wget_cmd`; if ($? != 0) { print "############################################################\n\n"; print "wget command failed for uudb_old; rc is '$?' \n\n"; print "############################################################\n\n"; exit(-1); } $err = grep (/ERROR/,@list); if ($err > 0) { print "############################################################\n\n"; foreach $line (@list) {print "$line\n";} print "############################################################\n\n"; exit(-1); } # 1. Zeile lesen (enthält: !SITE!#sitename) $site_line =$list[0]; $sitefound = grep (/!SITE!/,$site_line); if ( $sitefound > 0 ) { @splitsite = split(/#/,$site_line); $site = @splitsite[1]; $site =~ s/ //g; if (("$opt_outu_old" eq "uudb.old")) { $opt_outu_old = "./"."$opt_outu_old".".$site"; } open(UUDB,">$opt_outu_old") or die "Fehler beim Oeffnen der UUDB-Datei ./$opt_outu_old\n"; } else { print "############################################################\n\n"; print "ERROR: get_gridmap-Fehler (leerer Output fuer uudb_old)\n\n"; print "############################################################\n\n"; # exit (-1); } # 1. Zeile überlesen print UUDB @list[1..$#list]; close (UUDB); } ##################################### # ALTE !!! GRIDMAP-Daten erzeugen # ##################################### if ((defined($opt_outg_old))) { $urlg = "get_gridmaps?pre=$opt_pre\&form=grid_old"; $wget_cmd = "/usr/bin/wget -nv -t 1 --ca-directory=$ca_dir --certificate=$cert_pub --private-key=$cert_priv \'$base_url/$urlg\' -o /dev/null -O-"; @list = `exec $wget_cmd`; if ($? != 0) { print "############################################################\n\n"; print "wget command failed for gridmap_old; rc is '$?' \n\n"; print "############################################################\n\n"; exit(-1); } $err = grep (/ERROR/,@list); if ($err > 0) { print "############################################################\n\n"; foreach $line (@list) {print "$line\n";} print "############################################################\n\n"; exit(-1); } # 1. Zeile lesen (enthält: !SITE!#sitename) $site_line =$list[0]; $sitefound = grep (/!SITE!/,$site_line); if ( $sitefound > 0 ) { @splitsite = split(/#/,$site_line); $site = @splitsite[1]; $site =~ s/ //g; if (("$opt_outg_old" eq "gridmap.old")) { $opt_outg_old = "./"."$opt_outg_old".".$site"; } open(GRID,">$opt_outg_old") or die "Fehler beim Oeffnen der GRIDMAP-Datei ./$opt_outg_old\n"; } else { print "############################################################\n\n"; print "ERROR: get_gridmap-Fehler (leerer Output fuer gridmap_old)\n\n"; print "############################################################\n\n"; # exit (-1); } # 1. Zeile überlesen print GRID @list[1..$#list]; close(GRID); } ######################### # UUDB-Daten erzeugen # ######################### if ((defined($opt_outu))) { $urlu = "get_gridmaps?pre=$opt_pre\&form=uudb"; $wget_cmd = "/usr/bin/wget -nv -t 1 --ca-directory=$ca_dir --certificate=$cert_pub --private-key=$cert_priv \'$base_url/$urlu\' -o /dev/null -O-"; @list = `exec $wget_cmd`; if ($? != 0) { print "############################################################\n\n"; print "wget command failed for uudb; rc is '$?' \n\n"; print "############################################################\n\n"; exit(-1); } $err = grep (/ERROR/,@list); if ($err > 0) { print "############################################################\n\n"; foreach $line (@list) {print "$line\n";} print "############################################################\n\n"; exit(-1); } # 1. Zeile lesen (enthält: !SITE!#sitename) $site_line =$list[0]; $sitefound = grep (/!SITE!/,$site_line); if ( $sitefound > 0 ) { @splitsite = split(/#/,$site_line); $site = @splitsite[1]; $site =~ s/ //g; if (("$opt_outu" eq "uudb")) { $opt_outu = "./"."$opt_outu".".$site"; } open(UUDB,">$opt_outu") or die "Fehler beim Oeffnen der UUDB-Datei ./$opt_outu\n"; } else { print "############################################################\n\n"; print "ERROR: get_gridmap-Fehler (leerer Output fuer uudb)\n\n"; print "############################################################\n\n"; # exit (-1); } # 1. Zeile überlesen print UUDB @list[1..$#list]; close (UUDB); } ############################ # GRIDMAP-Daten erzeugen # ############################ if ((defined($opt_outg))) { $urlg = "get_gridmaps?pre=$opt_pre\&form=grid"; $wget_cmd = "/usr/bin/wget -nv -t 1 --ca-directory=$ca_dir --certificate=$cert_pub --private-key=$cert_priv \'$base_url/$urlg\' -o /dev/null -O-"; @list = `exec $wget_cmd`; if ($? != 0) { print "############################################################\n\n"; print "wget command failed for gridmap; rc is '$?' \n\n"; print "############################################################\n\n"; exit(-1); } $err = grep (/ERROR/,@list); if ($err > 0) { print "############################################################\n\n"; foreach $line (@list) {print "$line\n";} print "############################################################\n\n"; exit(-1); } # 1. Zeile lesen (enthält: !SITE!#sitename) $site_line =$list[0]; $sitefound = grep (/!SITE!/,$site_line); if ( $sitefound > 0 ) { @splitsite = split(/#/,$site_line); $site = @splitsite[1]; $site =~ s/ //g; if (("$opt_outg" eq "gridmap")) { $opt_outg = "./"."$opt_outg".".$site"; } open(GRID,">$opt_outg") or die "Fehler beim Oeffnen der GRIDMAP-Datei ./$opt_outg\n"; } else { print "############################################################\n\n"; print "ERROR: get_gridmap-Fehler (leerer Output fuer gridmap)\n\n"; print "############################################################\n\n"; # exit (-1); } # 1. Zeile überlesen print $#list; print GRID @list[1..$#list]; close(GRID); ############################################# # FZK extension. Create lcmaps fixed links # if(defined($lcmaps)){ foreach $jline(@list){ # Get all VOs. Example: dghp0008,dgkg0010,dgmd0021 chomp($vjmap = substr($jline, rindex($jline,"\" ")+2)); # parsing VOs. Add them to array @acarr getAcc($vjmap); # forach Account $jmap (for exm.: $jmap="dgdt003") foreach $jmap(@acarr){ # get $vo von user with name $jmap=dgdt003 if(-e "$path/$jmap"){ chomp($grsting = `groups $jmap`); $vo=substr($grsting, rindex($grsting, "\:")+2); $ $vo="$vo"; } else { logging("ERROR: mapping for $jline $jmap-file not found! Nothing done.\n\n"); next; } # Create name for fix mapping $dn=%2fo%3dgermangrid%2fou%3dfzk%2fcn%3ddimitri%20nilsen%3adgtest $dn=substr( $jline, 1, rindex($jline, "\"") - 1); $dn =URLEncode($dn); $dn = lc($dn); $dn .= "%3a".$vo; # check if maping exists( -e %2fo%3dgermangrid%2fou%3dfzk%2fcn%3ddimitri%20nilsen%3adgtest) if(-e "$path/$dn"){ chomp($nodemk = `ls -i $path/$dn`); chomp($nodeac = `ls -i $path/$jmap`); $nodemk = substr($nodemk, 1); $nodeac = substr($nodeac, 1); $nodemk = substr($nodemk, 0, index($nodemk, " ")); $nodeac = substr($nodeac, 0, index($nodeac, " ")); if($nodemk ne $nodeac){ # Mapping exist, but to the wrong account -> re-create mapping logging( "RE-created:\n".$dn."::::".$jmap."\n".$nodemk."::::".$nodeac."\n\n" ); mysystem( "rm -f $path/$dn" ); mysystem( "ln $path/$jmap $path/$dn" ); } } else { # Create new mapping logging ("Created:\n".$dn."::::".$jmap."\n\n"); mysystem ("ln $path/$jmap $path/$dn"); } } @acarr=(); } # /end foreach $jline(@julich) } # /end defined($lcmaps) } ######################### # OGSA-Daten erzeugen # ######################### if ((defined($opt_outo))) { $urlo = "get_ogsa"; $wget_cmd = "/usr/bin/wget -nv -t 1 --ca-directory=$ca_dir --certificate=$cert_pub --private-key=$cert_priv \'$base_url/$urlo\' -o /dev/null -O-"; @list = `exec $wget_cmd`; if ($? != 0) { print "############################################################\n\n"; print "wget command failed for ogsa; rc is '$?' \n\n"; print "############################################################\n\n"; exit(-1); } $err = grep (/ERROR/,@list); if ($err > 0) { print "############################################################\n\n"; foreach $line (@list) {print "$line\n";} print "############################################################\n\n"; exit(-1); } # 1. Zeile lesen (enthält: !SITE!#sitename) $site_line = $list[0]; $sitefound = grep (/!SITE!/,$site_line); if ( $sitefound > 0 ) { @splitsite = split(/#/,$site_line); $site = @splitsite[1]; $site =~ s/ //g; if (("$opt_outo" eq "ogsa")) { $opt_outo = "./"."$opt_outo".".$site"; } open(OGSA,">$opt_outo") or die "Fehler beim Oeffnen der OGSA-Datei ./$opt_outo\n"; } else { print "############################################################\n\n"; print "ERROR: get_gridmap-Fehler (leerer Output fuer ogsa)\n\n"; print "############################################################\n\n"; # exit (-1); } # 1. Zeile überlesen @ogsa_list = @list[1..$#list]; foreach $line (@ogsa_list) { $line =~ s/\{//; $line =~ s/$\}//; print OGSA "$line"; } close(OGSA); } ########################## # ADMIN-Daten erzeugen # ########################## if ((defined($opt_outa))) { $urla = "get_admindata"; $wget_cmd = "/usr/bin/wget -nv -t 1 --ca-directory=$ca_dir --certificate=$cert_pub --private-key=$cert_priv \'$base_url/$urla\' -o /dev/null -O-"; @list = `exec $wget_cmd`; if ($? != 0) { print "############################################################\n\n"; print "wget command failed for admin; rc is '$?' \n\n"; print "############################################################\n\n"; exit(-1); } $err = grep (/ERROR/,@list); if ($err > 0) { print "############################################################\n\n"; foreach $line (@list) {print "$line\n";} print "############################################################\n\n"; exit(-1); } # 1. Zeile lesen (enthält: !SITE!#sitename) $site_line = $list[0]; $sitefound = grep (/!SITE!/,$site_line); if ( $sitefound > 0 ) { @splitsite = split(/#/,$site_line); $site = @splitsite[1]; $site =~ s/ //g; if (("$opt_outa" eq "admin")) { $opt_outa = "./"."$opt_outa".".$site"; } open(ADMIN,">$opt_outa") or die "Fehler beim Oeffnen der ADMIN-Datei ./$opt_outa\n"; } else { print "############################################################\n\n"; print "ERROR: get_gridmap-Fehler (leerer Output fuer admin)\n\n"; print "############################################################\n\n"; # exit (-1); } # 1. Zeile überlesen @admin_list = @list[1..$#list]; foreach $line (@admin_list) { $line =~ s/\{//; $line =~ s/$\}//; print ADMIN "$line"; } close(ADMIN); } exit(0); sub Usage { print <<EndOfUsage; ############################################################ Aufruf : ./dgridmap <-cert-path <certification-pathname>> <-pre <zz>> <-output-u <uudb-fn>> <-output-u-old <uudb-old-fn>> <-output-g <gridmap-fn>> <-output-g-old <gridmap-old-fn>> <-output-o <ogsa-fn>> <-output-a <admin-fn>> ############################################################ EndOfUsage }