#!/usr/bin/perl
# removes the configuration of a node so that the next time you reboot 
# a node it forces it to go through the discovery process.
# usage: rmnodecfg <noderange>
# this does not remove it completely from xCAT.  You may want to do this
# command before running noderm to completely purge the system of the node
BEGIN
{
    $::XCATROOT = $ENV{'XCATROOT'} ? $ENV{'XCATROOT'} : '/opt/xcat';
}

use lib "$::XCATROOT/lib/perl";
use strict;
use Socket;

use Getopt::Long;

my $help;
GetOptions('h|help' => \$help);
if ($help) {
    print <<'EOS';
Usage: rmnodecfg [-h|--help] <noderange>

Removes the configuration of a node so that the next time you reboot 
it, it forces it to go through the discovery process.
This does not remove it completely from xCAT.  You may want to do this
command before running noderm to completely purge the system of the node

Author:  Vallard Benincosa
EOS
    exit 0;
}

require xCAT::Utils;
require xCAT::TableUtils;

my $blades = shift;
if(! $blades) {
  print "Please specify a noderange of blades to remove\n";
  exit; 
}

my $tftpdir = xCAT::TableUtils->getTftpDir();

foreach my $blade (`/opt/xcat/bin/nodels $blades`){
  chomp($blade);
  my $hex = ip2hex($blade); 
  my $cmd = "nodech $blade chain.currstate= chain.currchain= chain.chain=";
  $cmd = "chtab -d node=$blade chain";
  print "$cmd\n";
  `$cmd`;
  $cmd = "chtab -d node=$blade mac";
  print "$cmd\n";
  `$cmd`;
  $cmd = "makedhcp -d $blade";
  print "$cmd\n";
  `$cmd`;
  $cmd = "rm $tftpdir/pxelinux.cfg/$blade";
  print "$cmd\n";
  `$cmd`;
  if($hex){
    $cmd = "rm $tftpdir/pxelinux.cfg/$hex";
    print "$cmd\n";
    `$cmd`;     
  }     
}

sub ip2hex {
  my $node = shift;
  my $ip = '';
  my @quad;
  my $hex = '';
  my $packed_ip = gethostbyname($node);
  if(defined $packed_ip){
    $ip = inet_ntoa($packed_ip);
    @quad = split('\.', $ip);
    $hex = sprintf("%02X%02X%02X%02X", @quad);
  }
  return $hex;
}

