mirror of
				https://github.com/xcat2/xcat-core.git
				synced 2025-10-25 00:15:43 +00:00 
			
		
		
		
	git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@9037 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
		
			
				
	
	
		
			86 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			86 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/env perl
 | |
| # IBM(c) 2007 EPL license http://www.eclipse.org/legal/epl-v10.html
 | |
| use Fcntl qw(:DEFAULT :flock);
 | |
| sub get_lock {
 | |
|     unless (flock(LOCKHANDLE,LOCK_EX|LOCK_NB)) {
 | |
|         $| = 1;
 | |
|         print "Acquiring startup lock...";
 | |
|         flock(LOCKHANDLE,LOCK_EX) or die "Fatal error securing startup lock";
 | |
|         print "done\n";
 | |
|     }
 | |
|     truncate(LOCKHANDLE,0);
 | |
|     print LOCKHANDLE $$."\n";
 | |
| }
 | |
| 
 | |
| sub release_lock {
 | |
|     truncate(LOCKHANDLE,0);
 | |
|     flock(LOCKHANDLE,LOCK_UN);
 | |
| }
 | |
| BEGIN
 | |
| {
 | |
|     use Time::HiRes qw(sleep);
 | |
|     use File::Path;
 | |
|     use Fcntl qw(:DEFAULT :flock);
 | |
|     $::XCATROOT = $ENV{'XCATROOT'} ? $ENV{'XCATROOT'} : '/opt/xcat';
 | |
|     umask 0077;
 | |
|     mkpath("/tmp/xcat/");
 | |
|     unless (sysopen(LOCKHANDLE,"/tmp/xcat/consolelock",O_WRONLY | O_CREAT)) {
 | |
|         sleep 15;
 | |
|         print "Unable to open lock file";
 | |
|         exit 0;
 | |
|     }
 | |
|     get_lock();
 | |
|     #my $sleepint=int(rand(10));
 | |
|     #print "Opening console in ".(2+(0.5*$sleepint))." seconds...\n";
 | |
|     #sleep $sleepint;
 | |
| }
 | |
| #BEGIN
 | |
| #{
 | |
| #    use Time::HiRes qw(sleep);
 | |
| #    $::XCATROOT = $ENV{'XCATROOT'} ? $ENV{'XCATROOT'} : '/opt/xcat';
 | |
| #    my $sleepint=int(rand(10));
 | |
| #    print "Opening console in ".(0.5*$sleepint)." seconds...\n";
 | |
| #    sleep (0.5*$sleepint);
 | |
| #}
 | |
| my $sleepint;
 | |
| use lib "$::XCATROOT/lib/perl";
 | |
| require xCAT::Client;
 | |
| 
 | |
| require File::Basename;
 | |
| import File::Basename;
 | |
| my $scriptname = $0;
 | |
| 
 | |
| my $cmdref={
 | |
|     command=>"getxencons",
 | |
|     arg=>"text",
 | |
|     noderange=>$ARGV[0]
 | |
| };
 | |
| use Data::Dumper;
 | |
| my $dsthost;
 | |
| my $dstty;
 | |
| my $speed;
 | |
| sub getans {
 | |
|     my $rsp = shift; 
 | |
|     if ($rsp->{node}) {
 | |
|         $dsthost = $rsp->{node}->[0]->{sshhost}->[0];
 | |
|         $dstty = $rsp->{node}->[0]->{psuedotty}->[0];
 | |
|         $speed = $rsp->{node}->[0]->{baudrate}->[0];
 | |
|     }
 | |
| }
 | |
| xCAT::Client::submit_request($cmdref,\&getans);
 | |
| until ($dsthost and $speed and $dstty) {
 | |
|     release_lock();
 | |
|     $sleepint=int(rand(30))+60;
 | |
|     print "Console not ready, retrying in $sleepint seconds (Ctrl-C to skip delay)\n";
 | |
|     exec "sleep $sleepint";
 | |
| }
 | |
| release_lock();
 | |
| exec "ssh -t $dsthost screen -U -a -O -e ^]a -d -R -S serial-".$ARGV[0]."-cons -A $dstty $speed";
 | |
| 
 | |
| #my $pathtochild= dirname($scriptname). "/";
 | |
| #exec $pathtochild."blade.expect $mm $slot $username $password";
 | |
|   
 | |
| 
 | |
| 
 | |
| 
 |