Create osimage with profile compute for management node
git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@15738 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
This commit is contained in:
parent
30d3984998
commit
83e983106c
@ -702,6 +702,174 @@ sub update_tables_with_templates
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
=head3 update_tables_with_mgt_image
|
||||
This function is called after copycds to generate a default osimage for management node
|
||||
It will get all the possible templates from the default directories for the
|
||||
management node's osver and osarch, and update the osimage table
|
||||
Arguments:
|
||||
|
||||
Returns:
|
||||
an array (retcode, errmsg). The first one is the return code. If 0, it means succesful.
|
||||
|
||||
=cut
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
sub update_tables_with_mgt_image
|
||||
{
|
||||
my $osver = shift; #like sle11, rhel5.3
|
||||
if (($osver) && ($osver =~ /xCAT::SvrUtils/)) {
|
||||
$osver = shift;
|
||||
}
|
||||
my $arch = shift; #like ppc64, x86, x86_64
|
||||
my $ospkgdir=shift;
|
||||
my $osdistroname=shift;
|
||||
|
||||
my $osname=$osver;; #like sles, rh, centos, windows
|
||||
my $ostype="Linux"; #like Linux, Windows
|
||||
my $imagetype="linux";
|
||||
if (($osver =~ /^win/) || ($osver =~ /^imagex/)) {
|
||||
$osname="windows";
|
||||
$ostype="Windows";
|
||||
$imagetype="windows";
|
||||
} elsif ($osver =~ /^hyperv/) {
|
||||
$osname="hyperv";
|
||||
$ostype="Windows";
|
||||
$imagetype="windows";
|
||||
} else {
|
||||
until (-r "$::XCATROOT/share/xcat/install/$osname/" or not $osname) {
|
||||
chop($osname);
|
||||
}
|
||||
unless ($osname) {
|
||||
return (1, "Unable to find $::XCATROOT/share/xcat/install directory for $osver");
|
||||
}
|
||||
}
|
||||
|
||||
#for rhels5.1 genos=rhel5
|
||||
my $genos = $osver;
|
||||
$genos =~ s/\..*//;
|
||||
if ($genos =~ /rh.*s(\d*)/) {
|
||||
$genos = "rhel$1";
|
||||
}
|
||||
|
||||
|
||||
my $myosver = xCAT::Utils->osver("all");
|
||||
$myosver =~ s/,//;
|
||||
if ( $osver != $myosver ) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
my $installroot = xCAT::TableUtils->getInstallDir();
|
||||
my @installdirs = xCAT::TableUtils->get_site_attribute("installdir");
|
||||
my $tmp = $installdirs[0];
|
||||
if ( defined($tmp)) {
|
||||
$installroot = $tmp;
|
||||
}
|
||||
my $cuspath="$installroot/custom/install/$osname";
|
||||
my $defpath="$::XCATROOT/share/xcat/install/$osname";
|
||||
|
||||
#now get all the profile names for full installation
|
||||
my %profiles=();
|
||||
my @tmplfiles=glob($cuspath."/*.tmpl");
|
||||
foreach (@tmplfiles) {
|
||||
my $tmpf=basename($_);
|
||||
#get the profile name out of the file, TODO: this does not work if the profile name contains the '.'
|
||||
$tmpf =~ /^([^\.]*)\..*$/;
|
||||
$tmpf = $1;
|
||||
#print "$tmpf\n";
|
||||
$profiles{$tmpf}=1;
|
||||
}
|
||||
@tmplfiles=glob($defpath."/*.tmpl");
|
||||
foreach (@tmplfiles) {
|
||||
my $tmpf=basename($_);
|
||||
#get the profile name out of the file, TODO: this does not work if the profile name contains the '.'
|
||||
$tmpf =~ /^([^\.]*)\..*$/;
|
||||
$tmpf = $1;
|
||||
if ( $tmpf = "compute" ) {
|
||||
$profiles{$tmpf}=1;
|
||||
}
|
||||
}
|
||||
#update the osimage and linuximage table
|
||||
my $osimagetab;
|
||||
my $linuximagetab;
|
||||
foreach my $profile (keys %profiles) {
|
||||
#print "profile=$profile\n";
|
||||
#get template file
|
||||
my $tmplfile=get_tmpl_file_name ($cuspath, $profile, $osver, $arch, $genos);
|
||||
if (!$tmplfile) { $tmplfile=get_tmpl_file_name ($defpath, $profile, $osver, $arch, $genos);}
|
||||
if (!$tmplfile) { next; }
|
||||
|
||||
#get otherpkgs.pkglist file
|
||||
my $otherpkgsfile=get_otherpkgs_pkglist_file_name($cuspath, $profile, $osver, $arch);
|
||||
if (!$otherpkgsfile) { $otherpkgsfile=get_otherpkgs_pkglist_file_name($defpath, $profile, $osver, $arch);}
|
||||
|
||||
#get synclist file
|
||||
my $synclistfile=xCAT::SvrUtils->getsynclistfile(undef, $osver, $arch, $profile, "netboot");
|
||||
|
||||
#get the pkglist file
|
||||
my $pkglistfile=get_pkglist_file_name($cuspath, $profile, $osver, $arch);
|
||||
if (!$pkglistfile) { $pkglistfile=get_pkglist_file_name($defpath, $profile, $osver, $arch);}
|
||||
|
||||
#now update the db
|
||||
if (!$osimagetab) {
|
||||
$osimagetab=xCAT::Table->new('osimage',-create=>1);
|
||||
}
|
||||
|
||||
if ($osimagetab) {
|
||||
#check if the image is already in the table
|
||||
if ($osimagetab) {
|
||||
my $found=0;
|
||||
my $tmp1=$osimagetab->getAllEntries();
|
||||
if (defined($tmp1) && (@$tmp1 > 0)) {
|
||||
foreach my $rowdata(@$tmp1) {
|
||||
if (($osver eq $rowdata->{osvers}) && ($arch eq $rowdata->{osarch}) && ($rowdata->{provmethod} eq "install") && ($profile eq $rowdata->{profile})){
|
||||
$found=1;
|
||||
last;
|
||||
}
|
||||
}
|
||||
}
|
||||
# if ($found) { next; }
|
||||
|
||||
my $imagename=$osver . "-" . $arch . "-mgmtimage";
|
||||
#TODO: check if there happen to be a row that has the same imagename but with different contents
|
||||
#now we can wirte the info into db
|
||||
my %key_col = (imagename=>$imagename);
|
||||
my %tb_cols=(imagetype=>$imagetype,
|
||||
provmethod=>"install",
|
||||
profile=>$profile,
|
||||
osname=>$ostype,
|
||||
osvers=>$osver,
|
||||
osarch=>$arch,
|
||||
synclists=>$synclistfile,
|
||||
osdistroname=>$osdistroname);
|
||||
$osimagetab->setAttribs(\%key_col, \%tb_cols);
|
||||
|
||||
if ($osname !~ /^win/) {
|
||||
if (!$linuximagetab) { $linuximagetab=xCAT::Table->new('linuximage',-create=>1); }
|
||||
if ($linuximagetab) {
|
||||
my %key_col = (imagename=>$imagename);
|
||||
my %tb_cols=(template=>$tmplfile,
|
||||
pkgdir=>$ospkgdir,
|
||||
pkglist=>$pkglistfile,
|
||||
otherpkglist=>$otherpkgsfile,
|
||||
otherpkgdir=>"$installroot/post/otherpkgs/$osver/$arch");
|
||||
$linuximagetab->setAttribs(\%key_col, \%tb_cols);
|
||||
|
||||
} else {
|
||||
return (1, "Cannot open the linuximage table.");
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return (1, "Cannot open the osimage table.");
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($osimagetab) { $osimagetab->close(); }
|
||||
if ($linuximagetab) { $linuximagetab->close(); }
|
||||
return (0, "");
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
=head3 update_tables_with_diskless_image
|
||||
This function is called after a diskless image is created by packimage.
|
||||
It'll writes the newimage info into the osimage and the linuximage tables.
|
||||
|
@ -2247,6 +2247,9 @@ sub copycd
|
||||
}
|
||||
|
||||
#hiding the messages about this not being found, since it may be intentional
|
||||
|
||||
my @ret=xCAT::SvrUtils->update_tables_with_mgt_image($distname, $arch, $path,$osdistroname);
|
||||
|
||||
my @ret=xCAT::SvrUtils->update_tables_with_diskless_image($distname, $arch, undef, "netboot",$path,$osdistroname);
|
||||
#if ($ret[0] != 0) {
|
||||
#$callback->({data => "Error when updating the osimage tables for stateless: " . $ret[1]});
|
||||
|
@ -1553,6 +1553,11 @@ sub copycd
|
||||
if ($ret[0] != 0) {
|
||||
$callback->({data => "Error when updating the osimage tables: " . $ret[1]});
|
||||
}
|
||||
|
||||
my @ret=xCAT::SvrUtils->update_tables_with_mgt_image($distname, $arch, $path,$osdistroname);
|
||||
if ($ret[0] != 0) {
|
||||
$callback->({data => "Error when updating the osimage tables for management node " . $ret[1]});
|
||||
}
|
||||
|
||||
my @ret=xCAT::SvrUtils->update_tables_with_diskless_image($distname, $arch, undef, "netboot",$path,$osdistroname);
|
||||
if ($ret[0] != 0) {
|
||||
|
Loading…
Reference in New Issue
Block a user