e68fe9d2db
git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@1561 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;
|