update addkit command according to revision 16568 for kit framework

git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/branches/2.8@16586 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
This commit is contained in:
wanghuaz 2013-06-08 09:28:28 +00:00
parent d7bc639fc6
commit 03584e81fb

View File

@ -23,6 +23,13 @@ use File::Path;
my $kitconf = "kit.conf";
# kit framework version for this xcat.
$::KITFRAMEWORK ="1";
# this code is compatible with other kits that are at framework 0 or 1.
$::COMPATIBLE_KITFRAMEWORKS = "0,1";
#-------------------------------------------------------
=head3 handled_commands
@ -985,6 +992,14 @@ sub addkit
return 1;
}
#
# check contents of kit.conf to make sure the framework
# is compatible with this codes framework
if (&check_framework(\@lines)) {
return 1;
}
my $sec;
my $kitname;
my $kitreponame;
@ -4231,3 +4246,89 @@ sub create_lskit_stanza_response {
1;
#-----------------------------------------------------------------------------
=head3 check_framework
Check the compatible frameworks of the kit to see if it is
compatible with the running code.
If one of the compatible frameworks of the kit matches one of the
compatible frameworks of the running code then we're good.
NOTE: compatible_kitframeworks are the kitframeworks that I can add
and kit frameworks that I can be added to.
Returns:
0 - OK
1 - error
Example:
my $rc = &check_framework(\@lines);
=cut
#-----------------------------------------------------------------------------
sub check_framework
{
my $lines = shift;
my @kitconflines = @$lines;
my $kitbasename;
my $kitcompat;
my $section = '';
foreach my $l (@kitconflines) {
# skip blank and comment lines
if ( $l =~ /^\s*$/ || $l =~ /^\s*#/ ) {
next;
}
if ( $l =~ /^\s*(\w+)\s*:/ ) {
$section = $1;
next;
}
if ( $l =~ /^\s*(\w+)\s*=\s*(.*)\s*/ ) {
my $attr = $1;
my $val = $2;
$attr =~ s/^\s*//; # Remove any leading whitespace
$attr =~ s/\s*$//; # Remove any trailing whitespace
$attr =~ tr/A-Z/a-z/; # Convert to lowercase
$val =~ s/^\s*//;
$val =~ s/\s*$//;
if ($section eq 'kitbuildinfo') {
if ( $attr eq 'compatible_kitframeworks' ) {
$kitcompat = $val;
}
}
if ($section eq 'kit') {
if ( $attr eq 'basename' ) { $kitbasename = $val; }
}
}
}
if (!$kitcompat) {
print "Warning: Could not determine the kit compatible framework values for \'$kitbasename\' from the kit.conf file. Continuing for now.\n";
return 0;
}
my @kit_compat_list = split (',', $kitcompat);
my @my_compat_list = split (',', $::COMPATIBLE_KITFRAMEWORKS);
foreach my $myfw (@my_compat_list) {
chomp $myfw;
foreach my $kitfw (@kit_compat_list) {
chomp $kitfw;
if ($myfw eq $kitfw) {
return 0;
}
}
}
print "Error: The kit named \'$kitbasename\' is not compatible with this version of the addkit command. \'$kitbasename\' is compatible with \'$kitcompat\' and the addkit command is compatible with \'$::COMPATIBLE_KITFRAMEWORKS\'\n";
return 1;
}