passing kitcomponent deploy parameters to genimage package installation, postinstall script and postbootscripts.
This commit is contained in:
		| @@ -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 = <DEPLOYPARAM>; | ||||
|                             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} ); | ||||
|           } | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -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 = <DEPLOYPARAM>; | ||||
|                                 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 = <KITDEPLOY>; | ||||
|                 @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 = <KITDEPLOY>; | ||||
|                             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 = <OTHERDEPLOYPARAM>; | ||||
|                                         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; | ||||
|                                 } | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user