mirror of
				https://github.com/xcat2/xcat-core.git
				synced 2025-11-03 21:02:34 +00:00 
			
		
		
		
	git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@104 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
		
			
				
	
	
		
			89 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
			
		
		
	
	
			89 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
# IBM(c) 2007 EPL license http://www.eclipse.org/legal/epl-v10.html
 | 
						|
package xCAT_plugin::hosts;
 | 
						|
use xCAT::Table;
 | 
						|
use Data::Dumper;
 | 
						|
 | 
						|
my @hosts; #Hold /etc/hosts data to be written back
 | 
						|
 | 
						|
 | 
						|
my %usage=(
 | 
						|
    makehosts => "Usage: makehosts [-n] <noderange>",
 | 
						|
);
 | 
						|
sub handled_commands {
 | 
						|
  return {
 | 
						|
    makehosts => "hosts",
 | 
						|
  }
 | 
						|
}
 | 
						|
  
 | 
						|
 | 
						|
sub addnode {
 | 
						|
  my $node = shift;
 | 
						|
  my $ip = shift;
 | 
						|
  my $othernames = shift;
 | 
						|
  my $idx=0;
 | 
						|
  my $foundone=0;
 | 
						|
  
 | 
						|
  while ($idx <= $#hosts) {
 | 
						|
    if ($hosts[$idx] =~ /^${ip}\s/ or $hosts[$idx] =~ /^\d+\.\d+\.\d+\.\d+\s+${node}\s/) {
 | 
						|
      #TODO: if foundone, delete a dupe
 | 
						|
      $hosts[$idx] = "$ip $node $othernames\n";
 | 
						|
      $foundone=1;
 | 
						|
    }
 | 
						|
    $idx++;
 | 
						|
  }
 | 
						|
  if ($foundone) { return;}
 | 
						|
  push @hosts,"$ip $node $othernames\n";
 | 
						|
}
 | 
						|
sub process_request {
 | 
						|
  my $req = shift;
 | 
						|
  my $callback = shift;
 | 
						|
  my $hoststab = xCAT::Table->new('hosts');
 | 
						|
  @hosts = ();
 | 
						|
  if (grep /-h/,@{$req->{arg}}) {
 | 
						|
      $callback->({data=>$usage{makehosts}});
 | 
						|
      return;
 | 
						|
  }
 | 
						|
  if (grep /-n/,@{$req->{arg}}) {
 | 
						|
    if (-e "/etc/hosts") {
 | 
						|
      my $bakname = "/etc/hosts.xcatbak";
 | 
						|
      while (-e $bakname) { #look for unused backup name..
 | 
						|
        $bakname .= "~";
 | 
						|
      }
 | 
						|
      rename("/etc/hosts",$bakname);
 | 
						|
    }
 | 
						|
  } else {
 | 
						|
    open($rconf,"/etc/hosts"); # Read file into memory
 | 
						|
    if ($rconf) {
 | 
						|
      while (<$rconf>) {
 | 
						|
        push @hosts,$_;
 | 
						|
      }
 | 
						|
      close($rconf);
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  if ($req->{node}) {
 | 
						|
    foreach(@{$req->{node}}) {
 | 
						|
      my $ref = $hoststab->getNodeAttribs($_,[qw(ip node hostnames)]);
 | 
						|
      addnode $ref->{node},$ref->{ip},$ref->{hostnames};
 | 
						|
    }
 | 
						|
  } else {
 | 
						|
    my @hostents = $hoststab->getAllNodeAttribs(['ip','node','hostnames']);
 | 
						|
    foreach (@hostents) {
 | 
						|
      addnode $_->{node},$_->{ip},$_->{hostnames};
 | 
						|
    }
 | 
						|
  }
 | 
						|
  writeout();
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
sub writeout {
 | 
						|
  my $targ;
 | 
						|
  open($targ,'>',"/etc/hosts");
 | 
						|
  foreach (@hosts) {
 | 
						|
    print $targ $_;
 | 
						|
  }
 | 
						|
  close($targ)
 | 
						|
}
 | 
						|
 | 
						|
1;
 |