mirror of
				https://github.com/xcat2/xcat-core.git
				synced 2025-10-31 03:12:30 +00:00 
			
		
		
		
	1. add "makeconserver -d" to "rmdef -C", 2. add "makeconserver -C|--cleanup" to remove entries for removed nodes
This commit is contained in:
		| @@ -90,7 +90,7 @@ OPTIONS | ||||
|  | ||||
| \ **-C|-**\ **-cleanup**\  | ||||
|   | ||||
|  Perform additional cleanup by running \ **nodeset offline**\  on the objects specified in the \ *noderange*\ . | ||||
|  Perform additional cleanup by running \ **nodeset offline**\  and \ **makeconservercf -d**\  on the objects specified in the \ *noderange*\ . | ||||
|   | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -21,6 +21,8 @@ SYNOPSIS | ||||
|  | ||||
| \ **makeconservercf**\  [\ **-V|-**\ **-verbose**\ ] [\ **-d|-**\ **-delete**\ ] [\ *noderange*\ ] | ||||
|  | ||||
| \ **makeconservercf**\  [\ **-V|-**\ **-verbose**\ ] [\ **-C|-**\ **-cleanup**\ ] | ||||
|  | ||||
| \ **makeconservercf**\  [\ **-V|-**\ **-verbose**\ ] [\ **-l|-**\ **-local**\ ] [\ *noderange*\ ] | ||||
|  | ||||
| \ **makeconservercf**\  [\ **-V|-**\ **-verbose**\ ] [\ **-c|-**\ **-conserver**\ ] [\ *noderange*\ ] | ||||
| @@ -42,6 +44,8 @@ does not have nodehm.cons set, it will not be written to the file. | ||||
|  | ||||
| If \ **-d**\  is specified, \ **makeconservercf**\  will remove specified nodes from /etc/conserver.cf file. If \ *noderange*\  is not specified, all xCAT nodes will be removed from /etc/conserver.cf file. | ||||
|  | ||||
| If \ **-C|-**\ **-cleanup**\  is specified, \ **makeconservercf**\  will remove console configuration entries from /etc/conserver.cf for the nodes whose definition have been removed from xCATdb. \ **Don't**\  specify any noderange. | ||||
|  | ||||
| In the case of a hierarchical cluster (i.e. one with service nodes) \ **makeconservercf**\  will determine | ||||
| which nodes will have their consoles accessed from the management node and which from a service node | ||||
| (based on the nodehm.conserver attribute).  The /etc/conserver.cf file will be created accordingly on | ||||
| @@ -60,6 +64,12 @@ OPTIONS | ||||
|   | ||||
|  | ||||
|  | ||||
| \ **-C|-**\ **-cleanup**\  | ||||
|   | ||||
|  Remove the entries for the nodes whose definition have been removed from xCAT db. | ||||
|   | ||||
|  | ||||
|  | ||||
| \ **-c|-**\ **-conserver**\  | ||||
|   | ||||
|  Only set up the conserver on the conserver host. If no conserver host | ||||
|   | ||||
| @@ -58,7 +58,7 @@ A set of comma delimited object types. | ||||
|  | ||||
| =item B<-C|--cleanup> | ||||
|  | ||||
| Perform additional cleanup by running B<nodeset offline> on the objects specified in the I<noderange>. | ||||
| Perform additional cleanup by running B<nodeset offline> and B<makeconservercf -d> on the objects specified in the I<noderange>. | ||||
|  | ||||
| =item B<-V|--verbose> | ||||
|  | ||||
|   | ||||
| @@ -6,6 +6,8 @@ B<makeconservercf> - creates the conserver configuration file from info in the x | ||||
|  | ||||
| B<makeconservercf> [B<-V|--verbose>] [B<-d|--delete>] [I<noderange>] | ||||
|  | ||||
| B<makeconservercf> [B<-V|--verbose>] [B<-C|--cleanup>] | ||||
|  | ||||
| B<makeconservercf> [B<-V|--verbose>] [B<-l|--local>] [I<noderange>] | ||||
|  | ||||
| B<makeconservercf> [B<-V|--verbose>] [B<-c|--conserver>] [I<noderange>] | ||||
| @@ -24,6 +26,8 @@ does not have nodehm.cons set, it will not be written to the file. | ||||
|  | ||||
| If B<-d> is specified, B<makeconservercf> will remove specified nodes from /etc/conserver.cf file. If I<noderange> is not specified, all xCAT nodes will be removed from /etc/conserver.cf file.  | ||||
|  | ||||
| If B<-C|--cleanup> is specified, B<makeconservercf> will remove console configuration entries from /etc/conserver.cf for the nodes whose definition have been removed from xCATdb. B<Don't> specify any noderange. | ||||
|  | ||||
| In the case of a hierarchical cluster (i.e. one with service nodes) B<makeconservercf> will determine | ||||
| which nodes will have their consoles accessed from the management node and which from a service node | ||||
| (based on the nodehm.conserver attribute).  The /etc/conserver.cf file will be created accordingly on | ||||
| @@ -38,6 +42,10 @@ all relevant management/service nodes.  If B<-l> is specified, it will only crea | ||||
|  | ||||
| Delete rather than add or refresh the nodes specified as a noderange. | ||||
|  | ||||
| =item B<-C|--cleanup> | ||||
|  | ||||
| Remove the entries for the nodes whose definition have been removed from xCAT db. | ||||
|  | ||||
| =item B<-c|--conserver> | ||||
|  | ||||
| Only set up the conserver on the conserver host. If no conserver host | ||||
|   | ||||
| @@ -4417,6 +4417,12 @@ sub defrm | ||||
|                 node => [@allnodes], | ||||
|                 arg  => ['offline'], | ||||
|             }, $doreq, 0 ,1); | ||||
|  | ||||
|             # Run makeconservercf -d <node> | ||||
|             @output = xCAT::Utils->runxcmd({ | ||||
|                 command => ['makeconservercf'], | ||||
|                 node => [@allnodes], | ||||
|                 arg => ['-d'],}, $doreq, 0, 1); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -8,6 +8,7 @@ use xCAT::TableUtils; | ||||
| use Getopt::Long; | ||||
| use Sys::Hostname; | ||||
| use xCAT::SvrUtils; | ||||
| use xCAT::Scope; | ||||
|  | ||||
| use strict; | ||||
| use Data::Dumper; | ||||
| @@ -28,6 +29,7 @@ my $usage_string = | ||||
|                      The default goes down to all the conservers on | ||||
|                      the server nodes and set them up | ||||
|     -d|--delete      Conserver has the relevant entries for the given noderange removed immediately from configuration | ||||
|     -C|--cleanup     To remove the entries for the nodes not exists in xCAT db | ||||
|     -t|--trust       Add additional trusted hosts. | ||||
|     -h|--help        Display this usage statement. | ||||
|     -V|--verbose     Verbose mode. | ||||
| @@ -71,6 +73,7 @@ sub preprocess_request { | ||||
|             'l|local'     => \$::LOCAL, | ||||
|             'h|help'      => \$::HELP, | ||||
|             'D|debug'     => \$::DEBUG, | ||||
|             'C|cleanup'   => \$::CLEANUP, | ||||
|             'v|version'   => \$::VERSION, | ||||
|             'V|verbose'   => \$::VERBOSE)) { | ||||
|         $request = {}; | ||||
| @@ -98,8 +101,25 @@ sub preprocess_request { | ||||
|         $request = {}; | ||||
|         return; | ||||
|     } | ||||
|  | ||||
|  | ||||
|     if ($::CLEANUP && ($::CONSERVER or $::LOCAL)) { | ||||
|         $callback->({ data => "Can not specify -l|--local or -c|--conserver together with -C|--cleanup." }); | ||||
|         $request = {}; | ||||
|         return; | ||||
|     } | ||||
|     # The cleanup shall run on both MN and all SNs | ||||
|     if ($::CLEANUP) { | ||||
|         if ($noderange && @$noderange > 0) { | ||||
|             $callback->({ data => "Can not specify noderange together with -C|--cleanup." }); | ||||
|             $request = {}; | ||||
|             return; | ||||
|         } | ||||
|         my @sns = xCAT::ServiceNodeUtils->getSNList(); | ||||
|         unless ( @sns > 0 ) { | ||||
|             return xCAT::Scope->get_parallel_scope($request); | ||||
|         } | ||||
|         return xCAT::Scope->get_broadcast_scope_with_parallel($request, \@sns); | ||||
|     } | ||||
|     | ||||
|     # get site master | ||||
|     my $master = xCAT::TableUtils->get_site_Master(); | ||||
|     if (!$master) { $master = hostname(); } | ||||
| @@ -335,7 +355,8 @@ sub makeconservercf { | ||||
|     #$Getopt::Long::pass_through=1; | ||||
|     my $delmode; | ||||
|     GetOptions('d|delete' => \$delmode, | ||||
|         't|trust=s' => \$::TRUSTED_HOST | ||||
|         't|trust=s' => \$::TRUSTED_HOST, | ||||
|         'C|cleanup' => \$::CLEANUP, | ||||
|     ); | ||||
|     my $nodes  = $req->{node}; | ||||
|     my $svboot = 0; | ||||
| @@ -409,6 +430,18 @@ sub makeconservercf { | ||||
|             #$cb->({node=>[{name=>$node,error=>"Bad configuration, check attributes under the nodehm category",errorcode=>1}]}); | ||||
|             xCAT::SvrUtils::sendmsg([ 1, "Bad configuration, check attributes under the nodehm category" ], $cb, $node); | ||||
|         } | ||||
|     } elsif ($::CLEANUP) { | ||||
|         my $nodelstab = xCAT::Table->new('nodelist'); | ||||
|         my @allnodeset = $nodelstab->getAllAttribs('node'); | ||||
|         my %allnodehash = map { $_->{node} => 1 } @allnodeset; | ||||
|         my $rmnodes = delete_undefined_nodes_entry(\@filecontent, \%allnodehash); | ||||
|         my $rsp; | ||||
|         if (!defined($rmnodes)) { | ||||
|             $rsp->{data}->[0] = "Nothing removed"; | ||||
|         } else{ | ||||
|             $rsp->{data}->[0] = "Remove console entry for the nodes:".join(',', @$rmnodes); | ||||
|         } | ||||
|         xCAT::MsgUtils->message("I", $rsp, $cb);  | ||||
|     } else {    #no nodes specified, do em all up | ||||
|         zapcfg(\@filecontent);    # strip all xCAT configured nodes from config | ||||
|  | ||||
| @@ -608,6 +641,41 @@ sub donodeent { | ||||
|     } | ||||
|     return 0; | ||||
| } | ||||
| # Remove cons entries for the undefined nodes | ||||
| sub delete_undefined_nodes_entry { | ||||
|     my $content = shift; | ||||
|     my $allnodeshash = shift; | ||||
|     my $idx      = 0; | ||||
|     my $toidx    = -1; | ||||
|     my $skip     = 0; | ||||
|     my $skipnext = 0; | ||||
|     my @rmnodes = (); | ||||
|     while ($idx <= $#$content) { | ||||
|         if ($content->[$idx] =~ /^#xCAT BEGIN (\S+) CONS/) { | ||||
|             $toidx   = $idx; | ||||
|             my $node = $1; | ||||
|             unless (exists($allnodeshash->{$node})) { | ||||
|                 $skip  = 1; | ||||
|                 $skipnext = 1;  | ||||
|                 push @rmnodes, $node; | ||||
|                 print __LINE__."===== push node: $node==\n"; | ||||
|             } | ||||
|         } elsif ($content->[$idx] =~ /^#xCAT END/) { | ||||
|             $skipnext = 0; | ||||
|         } | ||||
|         if ($skip) { | ||||
|             splice(@$content, $idx, 1); | ||||
|         } else { | ||||
|             $idx++; | ||||
|         } | ||||
|         $skip = $skipnext; | ||||
|     } | ||||
|     if (scalar(@rmnodes) > 0) { | ||||
|         return \@rmnodes; | ||||
|     } else { | ||||
|         return undef; | ||||
|     } | ||||
| } | ||||
|  | ||||
| # Delete any xcat added node entries from the file | ||||
| sub zapcfg { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user