Have esxi5 install almost implemented

git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@10700 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
This commit is contained in:
jbjohnso 2011-10-04 20:02:36 +00:00
parent b5206140dc
commit 79a186c19c

View File

@ -92,6 +92,7 @@ sub handled_commands{
return {
copycd => 'esx',
mknetboot => "nodetype:os=(esxi.*)",
mkinstall => "nodetype:os=(esxi5.*)",
rpower => 'nodehm:power,mgt',
rsetboot => 'nodehm:power,mgt',
rmigrate => 'nodehm:power,mgt',
@ -125,7 +126,8 @@ sub preprocess_request {
if ($request->{command}->[0] eq 'copycd')
{ #don't farm out copycd
return [$request];
}elsif($request->{command}->[0] eq 'mknetboot'){
}elsif($request->{command}->[0] eq 'mknetboot'
or $request->{command}->[0] eq 'mkinstall'){
return [$request];
}
xCAT::Common::usage_noderange($request,$callback);
@ -286,6 +288,8 @@ sub process_request {
#a hypervisor provisioning plugin (akin to anaconda, windows, sles plugins)
if($command eq 'copycd'){
return copycd($request,$executerequest);
}elsif($command eq 'mkinstall'){
return mkinstall($request,$executerequest);
}elsif($command eq 'mknetboot'){
return mknetboot($request,$executerequest);
}
@ -4211,7 +4215,41 @@ sub makecustomizedmod {
rmtree($tempdir);
return 1;
}
sub getplatform {
my $os = shift;
if ($os =~ /esxi/) {
return "esxi";
}
return $os;
}
sub esxi_kickstart_from_template {
my %args=@_;
my $installdir = "/install";
if ($::XCATSITEVALS{installdir}) { $installdir = $::XCATSITEVALS{installdir}; }
my $plat = getplatform($args{os});
my $template = xCAT::SvrUtils::get_tmpl_file_name("$installdir/custom/install/$plat",$args{profile},$args{os},$args{arch},$args{os});
unless ($template) {
$template = xCAT::SvrUtils::get_tmpl_file_name("$::XCATROOT/share/xcat/install/$plat",$args{profile},$args{os},$args{arch},$args{os});
}
my $tmperr;
if (-r "$template") {
$tmperr=xCAT::Template->subvars($template,"$installdir/autoinst/".$args{node},$args{node},undef);
} else {
$tmperr="Unable to find template in /install/custom/install/$plat or $::XCATROOT/share/xcat/install/$plat (for $args{profile}/$args{os}/$args{arch} combination)";
}
if ($tmperr) {
xCAT::SvrUtils::sendmsg([1,$tmperr], $output_handler,$args{node});
}
}
sub mkinstall {
return mkcommonboot("install",@_);
}
sub mknetboot {
return mkcommonboot("stateless",@_);
}
sub mkcommonboot {
my $bootmode = shift;
my $req = shift;
my $doreq = shift;
my $tftpdir = "/tftpboot";
@ -4300,7 +4338,7 @@ sub mknetboot {
unless($donetftp{$osver,$arch}) {
my $srcdir = "$installroot/$osver/$arch";
my $dest = "$tftpdir/xcat/netboot/$osver/$arch/$shortprofname";
cpNetbootImages($osver,$srcdir,$dest,$custprofpath,\%mods);
cpNetbootImages($osver,$srcdir,$dest,$custprofpath,\%mods,bootmode=>$bootmode);
if (makecustomizedmod($osver,$dest)) {
push @reqmods,"mod.tgz";
$mods{"mod.tgz"}=1;
@ -4370,7 +4408,11 @@ sub mknetboot {
}
elsif ($osver =~ /esxi5/) { #do a more straightforward thing..
$kernel = "$tp/mboot.c32";
$append = "-c $tp/boot.cfg.stateless";
$append = "-c $tp/boot.cfg.$bootmode";
if ($bootmode eq "install") {
$append .= " ks=http://!myipfn!/install/autoinst/$node";
esxi_kickstart_from_template(node=>$node,os=>$osver,arch=>$arch,profile=>$profile);
}
if ($serialconfig->{$node}) {
my $comport = 1;
if (defined $serialconfig->{$node}->[0]->{serialport}) {
@ -4404,6 +4446,9 @@ sub cpNetbootImages {
my $destDir = shift;
my $overridedir = shift;
my $modulestoadd = shift;
my %parmargs = @_;
my $bootmode="stateless";
if ($parmargs{bootmode}) { $bootmode = $parmargs{bootmode} }
my $tmpDir = "/tmp/xcat.$$";
if($osver =~ /esxi4/){
# we don't want to go through this all the time, so if its already
@ -4497,18 +4542,18 @@ sub cpNetbootImages {
}
}elsif ($osver =~ /esxi5/) { #we need boot.cfg.stateles
if (! -r "$srcDir/boot.cfg.stateless" and ! -r "$overridedir/boot.cfg.stateless") {
xCAT::SvrUtils::sendmsg([1,"$srcDir is missing boot.cfg.stateless file required for stateless boot"], $output_handler);
if (! -r "$srcDir/boot.cfg.$bootmode" and ! -r "$overridedir/boot.cfg.$bootmode") {
xCAT::SvrUtils::sendmsg([1,"$srcDir is missing boot.cfg.$bootmode file required for $bootmode boot"], $output_handler);
return;
}
my $statelesscfg;
my @filestocopy = ("boot.cfg.stateless");
if (-r "$overridedir/boot.cfg.stateless") {
open ($statelesscfg,"<","$overridedir/boot.cfg.stateless");
} elsif (-r "$srcDir/boot.cfg.stateless") {
open ($statelesscfg,"<","$srcDir/boot.cfg.stateless");
my @filestocopy = ("boot.cfg.$bootmode");
if (-r "$overridedir/boot.cfg.$bootmode") {
open ($statelesscfg,"<","$overridedir/boot.cfg.$bootmode");
} elsif (-r "$srcDir/boot.cfg.$bootmode") {
open ($statelesscfg,"<","$srcDir/boot.cfg.$bootmode");
} else {
die "boot.cfg.stateless was missing from $srcDir???";
die "boot.cfg.$bootmode was missing from $srcDir???";
}
my @statelesscfg=<$statelesscfg>;