mirror of
				https://github.com/xcat2/xcat-core.git
				synced 2025-10-31 03:12:30 +00:00 
			
		
		
		
	Provide a mechanism for bundled xCAT instances to forbid image import without existing templates
git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/branches/2.8@15793 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
This commit is contained in:
		| @@ -554,6 +554,7 @@ sub  update_tables_with_templates | ||||
|     my $arch = shift;  #like ppc64, x86, x86_64 | ||||
|     my $ospkgdir=shift;       | ||||
|     my $osdistroname=shift; | ||||
|     my %args = @_; | ||||
|  | ||||
|     my $osname=$osver;;  #like sles, rh, centos, windows | ||||
|     my $ostype="Linux";  #like Linux, Windows | ||||
| @@ -606,6 +607,11 @@ sub  update_tables_with_templates | ||||
|     foreach (@tmplfiles) { | ||||
| 	my $tmpf=basename($_);  | ||||
| 	#get the profile name out of the file, TODO: this does not work if the profile name contains the '.' | ||||
| 	if ($tmpf =~ /[^\.]*\.([^\.]*)\.([^\.]*)\./) { # osver *and* arch specific, make sure they match | ||||
| 		unless ($1 eq $osver and $2 eq $arch) { next; } | ||||
| 	} elsif ($tmpf =~  /[^\.]*\.([^\.]*)\./) { #osver *or* arch specific, make sure one matches | ||||
| 		unless ($1 eq $osver or $2 eq $arch) { next; } | ||||
| 	} | ||||
| 	$tmpf =~ /^([^\.]*)\..*$/; | ||||
| 	$tmpf = $1; | ||||
| 	#print "$tmpf\n"; | ||||
| @@ -615,6 +621,11 @@ sub  update_tables_with_templates | ||||
|     foreach (@tmplfiles) { | ||||
| 	my $tmpf=basename($_);  | ||||
| 	#get the profile name out of the file, TODO: this does not work if the profile name contains the '.' | ||||
| 	if ($tmpf =~ /[^\.]*\.([^\.]*)\.([^\.]*)\./) { # osver *and* arch specific, make sure they match | ||||
| 		unless ($1 eq $osver and $2 eq $arch) { next; } | ||||
| 	} elsif ($tmpf =~  /[^\.]*\.([^\.]*)\./) { #osver *or* arch specific, make sure one matches | ||||
| 		unless ($1 eq $osver or $2 eq $arch) { next; } | ||||
| 	} | ||||
| 	$tmpf =~ /^([^\.]*)\..*$/; | ||||
| 	$tmpf = $1; | ||||
| 	$profiles{$tmpf}=1; | ||||
| @@ -623,6 +634,13 @@ sub  update_tables_with_templates | ||||
|     #update the osimage and linuximage table | ||||
|     my $osimagetab; | ||||
|     my $linuximagetab; | ||||
|     if ($args{checkonly}) { | ||||
|     	if (keys %profiles) { | ||||
| 		return (0,""); | ||||
| 	} else { | ||||
| 		return (1,"Missing template files"); | ||||
| 	} | ||||
|     } | ||||
|     foreach my $profile (keys %profiles) { | ||||
| 	#print "profile=$profile\n"; | ||||
| 	#get template file | ||||
|   | ||||
| @@ -2064,12 +2064,21 @@ sub copycd | ||||
|  | ||||
|  | ||||
|     %{$request} = ();    #clear request we've got it. | ||||
|     my $disccopiedin=0; | ||||
|     my $osdistroname=$distname."-".$arch; | ||||
|  | ||||
|     my $defaultpath="$installroot/$distname/$arch"; | ||||
|     unless($path) | ||||
|     { | ||||
|         $path=$defaultpath; | ||||
|     } | ||||
|     if ($::XCATSITEVALS{osimagerequired}){ | ||||
| 	   my ($nohaveimages,$errstr) = xCAT::SvrUtils->update_tables_with_templates($distname, $arch,$path,$osdistroname,checkonly=>1); | ||||
| 	   if ($nohaveimages) {  | ||||
|         	$callback->({error => "No Templates found to support $distname($arch)"}); | ||||
| 		return; | ||||
| 	   } | ||||
|     } | ||||
|  | ||||
|     #tranverse the directory structure of the os media and get the fingerprint      | ||||
|     my @filelist=(); | ||||
|   | ||||
| @@ -4222,6 +4222,13 @@ sub copycd { | ||||
|      } | ||||
|  | ||||
|     unless ($found) { return; } #not our media | ||||
|     if ($::XCATSITEVALS{osimagerequired}){ | ||||
|           my $haveimages=xCAT::SvrUtils->update_tables_with_templates($distname, $arch,"","",checkonly=>1); | ||||
|           unless ($haveimages) {  | ||||
|                $callback->({error => "No Templates found to support $distname($arch)"}); | ||||
|           } | ||||
|     } | ||||
|  | ||||
| 	xCAT::SvrUtils::sendmsg("Copying media to $installroot/$distname/$arch/", $output_handler); | ||||
|     my $omask = umask 0022; | ||||
|     mkpath("$installroot/$distname/$arch"); | ||||
|   | ||||
| @@ -1328,6 +1328,14 @@ sub copycd | ||||
|     { | ||||
|         $path=$defaultpath; | ||||
|     } | ||||
|     my $osdistroname=$distname."-".$arch; | ||||
|     if ($::XCATSITEVALS{osimagerequired}){ | ||||
| 	   my ($nohaveimages,$errstr) = xCAT::SvrUtils->update_tables_with_templates($distname, $arch,$path,$osdistroname,checkonly=>1); | ||||
| 	   if ($nohaveimages) {  | ||||
|         	$callback->({error => "No Templates found to support $distname($arch)"}); | ||||
| 		return; | ||||
| 	   } | ||||
|     } | ||||
|  | ||||
|     my $ospkgpath= "$path/$discnumber"; | ||||
|    | ||||
| @@ -1346,7 +1354,6 @@ sub copycd | ||||
|      | ||||
|     #check whether the os media has already been copied in | ||||
|     my $disccopiedin=0; | ||||
|     my $osdistroname=$distname."-".$arch; | ||||
|     my $tabosdistro=xCAT::Table->new('osdistro',-create=>1); | ||||
|     if($tabosdistro) | ||||
|     { | ||||
|   | ||||
| @@ -634,6 +634,14 @@ sub copycd | ||||
|     { | ||||
|         $path=$defaultpath; | ||||
|     } | ||||
|     my $osdistroname=$distname."-".$arch; | ||||
|     if ($::XCATSITEVALS{osimagerequired}){ | ||||
| 	   my ($nohaveimages,$errstr) = xCAT::SvrUtils->update_tables_with_templates($distname, $arch,$path,$osdistroname,checkonly=>1); | ||||
| 	   if ($nohaveimages) {  | ||||
|         	$callback->({error => "No Templates found to support $distname($arch)"}); | ||||
| 		return; | ||||
| 	   } | ||||
|     } | ||||
|  | ||||
|     $callback->( | ||||
|          {data => "Copying media to $path"}); | ||||
| @@ -718,7 +726,6 @@ sub copycd | ||||
|     else | ||||
|     { | ||||
|         $callback->({data => "Media copy operation successful"}); | ||||
|         my $osdistroname=$distname."-".$arch; | ||||
|         my @ret=xCAT::SvrUtils->update_osdistro_table($distname,$arch,$path,$osdistroname); | ||||
|         if ($ret[0] != 0) { | ||||
|             $callback->({data => "Error when updating the osdistro tables: " . $ret[1]}); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user