From 2e1d048deebf9b53cbe7bbcc9bea29fe849927b7 Mon Sep 17 00:00:00 2001 From: wanghuaz Date: Mon, 30 Dec 2013 10:05:19 +0800 Subject: [PATCH] passing kitcomponent deploy parameters to genimage package installation, postinstall script and postbootscripts. --- xCAT-server/lib/perl/xCAT/Postage.pm | 72 ++++++++++- xCAT-server/lib/xcat/plugins/kit.pm | 114 ++++++++---------- xCAT/templates/mypostscript/mypostscript.tmpl | 4 + 3 files changed, 125 insertions(+), 65 deletions(-) diff --git a/xCAT-server/lib/perl/xCAT/Postage.pm b/xCAT-server/lib/perl/xCAT/Postage.pm index 2e0d4ac67..49f5fcd1c 100644 --- a/xCAT-server/lib/perl/xCAT/Postage.pm +++ b/xCAT-server/lib/perl/xCAT/Postage.pm @@ -241,7 +241,7 @@ sub makescript { if( $line =~ /^tabdump\(([\w]+)\)/) { my $tabname = $1; - if( $tabname !~ /^(auditlog|bootparams|chain|deps|domain|eventlog|firmware|hypervisor|iscsi|kvm_nodedata|mac|nics|ipmi|mp|ppc|ppcdirect|site|websrv|zvm|statelite|rack|hosts|prodkey|switch|node)/) { + if( $tabname !~ /^(auditlog|bootparams|chain|deps|domain|eventlog|firmware|hypervisor|iscsi|kvm_nodedata|mac|nics|ipmi|mp|ppc|ppcdirect|site|websrv|zvm|statelite|rack|hosts|prodkey|switch|node|kit|kitcomponent)/) { push @tabs, $tabname; } } @@ -488,6 +488,9 @@ sub makescript { $cloudres = getcloudres($cloud_module_name, $cloud_exists, $cloudinfo_hash, $node, \@clients); } + ## kit and kitcomponent parameter. + my $kitcomp_deployparams = getKitcompDeployParams($osimgname,\%image_hash); + #ok, now do everything else.. #$inc =~ s/#XCATVAR:([^#]+)#/envvar($1)/eg; #$inc =~ s/#ENV:([^#]+)#/envvar($1)/eg; @@ -503,6 +506,8 @@ sub makescript { $inc =~ s/#INCLUDE_POSTSCRIPTS_LIST#/$postscripts/eg; $inc =~ s/#INCLUDE_POSTBOOTSCRIPTS_LIST#/$postbootscripts/eg; + $inc =~ s/#KITCOMP_DEPLOY_PARAMS_EXPORT#/$kitcomp_deployparams/eg; + $inc =~ s/#CFGMGTINFO_EXPORT#/$cfgres/eg; $inc =~ s/#CLOUDINFO_EXPORT#/$cloudres/eg; @@ -582,6 +587,68 @@ sub getservicenode return 0; } +sub getKitcompDeployParams +{ + + my $osimagename = shift; + my $imagehash = shift; + my $result; + + my $kitcomptab = xCAT::Table->new('kitcomponent'); + unless ($kitcomptab) # no kitcomponent table + { + xCAT::MsgUtils->message('I', "Unable to open kitcomponent table.\n"); + return undef; + } + my $kittab = xCAT::Table->new('kit'); + unless ($kittab) # no kit table + { + xCAT::MsgUtils->message('I', "Unable to open kit table.\n"); + return undef; + } + + my %deployparamshash; + + if ( $osimagename and $imagehash->{$osimagename} and $imagehash->{$osimagename}->{kitcomponents} ) { + my @kitcomps = split /,/, $imagehash->{$osimagename}->{kitcomponents}; + foreach my $kitcompname (@kitcomps) { + (my $kitcomp) = $kitcomptab->getAttribs({kitcompname => $kitcompname}, 'kitname'); + if ( $kitcomp and $kitcomp->{'kitname'}) { + my $kitdeploy = $kittab->getAttribs({kitname => $kitcomp->{'kitname'}}, 'kitdeployparams', 'kitdir'); + if ( $kitdeploy and $kitdeploy->{kitdeployparams} and $kitdeploy->{kitdir} ) { + if ( -e "$kitdeploy->{kitdir}/other_files/$kitdeploy->{kitdeployparams}") { + my @lines; + if (open(DEPLOYPARAM, "<", "$kitdeploy->{kitdir}/other_files/$kitdeploy->{kitdeployparams}")) { + @lines = ; + close(DEPLOYPARAM); + } + + foreach my $line ( @lines ) { + if ($line =~ /^#ENV:.+=.+#$/) { + chomp($line); + $line =~ s/^#ENV://; + $line =~ s/#$//; + (my $name, my $value) = split(/=/, $line); + if ( $name and $value ) { + $deployparamshash{$name} = $value; + } + } + } + } + } + } + } + } + + foreach my $name ( keys %deployparamshash ) { + $result .= "$name='" . $deployparamshash{$name} . "'\n"; + $result .= "export $name\n"; + } + + return $result; + +} + sub getAllAttribsFromSiteTab { my $result; @@ -1548,7 +1615,7 @@ sub getScripts $script_hash{default_postboot} = $et->{'postbootscripts'}; - my @et2 = $ostab->getAllAttribs('imagename', 'postscripts', 'postbootscripts', 'osvers','osarch','profile','provmethod','synclists'); + my @et2 = $ostab->getAllAttribs('imagename', 'postscripts', 'postbootscripts', 'osvers','osarch','profile','provmethod','synclists','kitcomponents'); if( @et2 ) { foreach my $tmp_et2 (@et2) { my $imagename= $tmp_et2->{imagename}; @@ -1559,6 +1626,7 @@ sub getScripts $image_hash->{$imagename}->{profile} = $tmp_et2->{profile}; $image_hash->{$imagename}->{provmethod} = $tmp_et2->{provmethod}; $image_hash->{$imagename}->{synclists} = $tmp_et2->{synclists}; + $image_hash->{$imagename}->{kitcomponents} = $tmp_et2->{kitcomponents} if ( $tmp_et2->{kitcomponents} ); } } diff --git a/xCAT-server/lib/xcat/plugins/kit.pm b/xCAT-server/lib/xcat/plugins/kit.pm index 1bc002ba8..1b859a12b 100644 --- a/xCAT-server/lib/xcat/plugins/kit.pm +++ b/xCAT-server/lib/xcat/plugins/kit.pm @@ -371,6 +371,13 @@ sub assign_to_osimage } $installdir =~ s/\/$//; + + # Reading kitdir + my $kittable; + if ( $kitcomptable and $kitcomptable->{kitname} ) { + ($kittable) = $tabs->{kit}->getAttribs({kitname=> $kitcomptable->{kitname}}, 'kitdir', 'kitdeployparams'); + } + # Create osimage direcotry to save kit tmp files mkpath("$installdir/osimages/$osimage/kits/"); @@ -457,8 +464,31 @@ sub assign_to_osimage } unless ( grep(/$kitcompscript/ , @postinstalllines ) ) { + my $deployparams; + my @ls; + if ( $kittable and $kittable->{kitdeployparams} and $kittable->{kitdir} ) { + if (open(DEPLOYPARAM, "<", "$kittable->{kitdir}/other_files/$kittable->{kitdeployparams}")) { + @ls = ; + close(DEPLOYPARAM); + } + } + + foreach my $line (@ls) { + if ($line =~ /^#ENV:.+=.+#$/) { + chomp($line); + $line =~ s/^#ENV://; + $line =~ s/#$//; + } + } + + $deployparams = join / /, @ls; + if (open(NEWLIST, ">>", "$installdir/osimages/$osimage/kits/KIT_COMPONENTS.postinstall")) { - print NEWLIST "installroot=$rootimgdir otherpkgdir=$otherpkgdir $installdir/postscripts/$kitcompscript\n"; + if ($deployparams) { + print NEWLIST "installroot=$rootimgdir otherpkgdir=$otherpkgdir $deployparams $installdir/postscripts/$kitcompscript\n"; + } else { + print NEWLIST "installroot=$rootimgdir otherpkgdir=$otherpkgdir $installdir/postscripts/$kitcompscript\n"; + } close(NEWLIST); } } @@ -558,12 +588,6 @@ sub assign_to_osimage } } - # Reading kitdir - my $kittable; - if ( $kitcomptable and $kitcomptable->{kitname} ) { - ($kittable) = $tabs->{kit}->getAttribs({kitname=> $kitcomptable->{kitname}}, 'kitdir', 'kitdeployparams'); - } - # Adding kitcomponent.exlist to osimage.exlist if ( $kitcomptable and $kitcomptable->{exlist} and $kittable and $kittable->{kitdir} ) { @@ -620,23 +644,6 @@ sub assign_to_osimage my @kitdeployparams; if ( $kittable and $kittable->{kitdeployparams} and $kittable->{kitdir} ) { - # Reading contents from kit.kitdeployparams file - my @contents; - my $kitdir = $kittable->{kitdir}; - my $kitdeployfile = $kittable->{kitdeployparams}; - if ( -e "$kitdir/other_files/$kitdeployfile" ) { - if (open(KITDEPLOY, "<", "$kitdir/other_files/$kitdeployfile") ) { - @contents = ; - @kitdeployparams = @contents; - close(KITDEPLOY); - if($::VERBOSE){ - $callback->({data=>["\nReading kit deployparams from $kitdir/other_files/$kitdeployfile\n"]}); - } - } else { - $callback->({error => ["Could not open kit deployparams file $kitdir/other_files/$kitdeployfile"],errorcode=>[1]}); - } - } - # Creating kit deployparams file my @lines; mkpath("$installdir/osimages/$osimage/kits/"); @@ -655,20 +662,17 @@ sub assign_to_osimage # Checking if the kit deployparams have been written in the generated kit deployparams file. my @l; - foreach my $content ( @contents ) { - chomp $content; - my $matched = 0; - foreach my $line ( @lines ) { - chomp $line; - if ( $line =~ /$content/ ) { - $matched = 1; - last; - } + my $matched = 0; + foreach my $line ( @lines ) { + chomp $line; + if ( $line =~ m!$kittable->{kitdir}/other_files/$kittable->{kitdeployparams}! ) { + $matched = 1; + last; } + } - unless ( $matched ) { - push @l, $content . "\n"; - } + unless ( $matched ) { + push @l, "#INCLUDE:$kittable->{kitdir}/other_files/$kittable->{kitdeployparams}#\n"; } # Write the missing lines to kit deployparams file @@ -723,8 +727,9 @@ sub assign_to_osimage if (open(NEWOTHERPKGLIST, ">", "$installdir/osimages/$osimage/kits/KIT_COMPONENTS.otherpkgs.pkglist")) { if ( $kitcomptable and $kitcomptable->{prerequisite} ) { push @lines, "#NEW_INSTALL_LIST#\n"; - foreach my $kitdeployparam ( @kitdeployparams ) { - push @lines, "$kitdeployparam"; + + if ( $kittable and $kittable->{kitdeployparams} and $kittable->{kitdir} ) { + push @lines, "#INCLUDE:$kittable->{kitdir}/other_files/$kittable->{kitdeployparams}#\n"; } push @lines, "$kitreponame/$kitcomptable->{prerequisite}\n"; $::noupgrade = 1; @@ -738,9 +743,11 @@ sub assign_to_osimage if ( $::noupgrade ) { push @lines, "#NEW_INSTALL_LIST#\n"; - foreach my $kitdeployparam ( @kitdeployparams ) { - push @lines, "$kitdeployparam"; + + if ( $kittable and $kittable->{kitdeployparams} and $kittable->{kitdir} ) { + push @lines, "#INCLUDE:$kittable->{kitdir}/other_files/$kittable->{kitdeployparams}#\n"; } + push @lines, "$kitreponame/$basename\n"; print NEWOTHERPKGLIST @lines; } else { @@ -2995,20 +3002,7 @@ sub rmkitcomp unless ( $match ) { my @contents = ();; if ( -e "$kitdir/other_files/$kitdeployfile" ) { - if (open(KITDEPLOY, "<", "$kitdir/other_files/$kitdeployfile") ) { - @contents = ; - close(KITDEPLOY); - if($::VERBOSE){ - my %rsp; - push@{ $rsp{data} }, "Reading kit deployparams from $kitdir/other_files/$kitdeployfile"; - xCAT::MsgUtils->message( "I", \%rsp, $callback ); - } - } else { - my %rsp; - push@{ $rsp{data} }, "Could not open kit deployparams file $kitdir/other_files/$kitdeployfile"; - xCAT::MsgUtils->message( "E", \%rsp, $callback ); - return 1; - } + push @contents, "#INCLUDE:$kitdir/other_files/$kitdeployfile#"; } my @lines = (); @@ -3044,13 +3038,7 @@ sub rmkitcomp my @otherdeployparams; my $deployparam_file = $kittable->{kitdir}."/other_files/".$kittable->{kitdeployparams}; if ( -e "$deployparam_file" ) { - if (open(OTHERDEPLOYPARAM, "<", "$deployparam_file" )) { - @otherdeployparams = ; - close(OTHERDEPLOYPARAM); - } - } - foreach ( @otherdeployparams ) { - push @otherlines, $_; + push @otherlines, "#INCLUDE:$deployparam_file#"; } } } @@ -3065,7 +3053,7 @@ sub rmkitcomp #check if the parameter is used by other kitcomponent foreach my $otherline ( @otherlines ) { chomp $otherline; - if ( $line =~ /$otherline/ ) { + if ( $line =~ m!$otherline! ) { $found = 1; last; } @@ -3076,7 +3064,7 @@ sub rmkitcomp } else { foreach my $content ( @contents ) { chomp $content; - if ( $line =~ /$content/ ) { + if ( $line =~ m!$content! ) { $found = 1; last; } diff --git a/xCAT/templates/mypostscript/mypostscript.tmpl b/xCAT/templates/mypostscript/mypostscript.tmpl index f20ad9bdd..eaecb4670 100755 --- a/xCAT/templates/mypostscript/mypostscript.tmpl +++ b/xCAT/templates/mypostscript/mypostscript.tmpl @@ -94,6 +94,9 @@ export MACADDRESS ## get the diskless networks information. There may be no information. #NETWORK_FOR_DISKLESS_EXPORT# +## get the kitcomponent deploy parameters. There maybe no information. +#KITCOMP_DEPLOY_PARAMS_EXPORT# + ## NIC related attributes for the node for confignics postscript ## There may be no information @@ -125,6 +128,7 @@ export CFGSERVER #INCLUDE:/opt/xcat/share/xcat/templates/mypostscript/mypostscript_cloud.tmpl# + ## ##The line postscripts-start-here must not be deleted. # postscripts-start-here