Add force argument to rmhypervisor

git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@9019 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
This commit is contained in:
jbjohnso 2011-03-09 15:20:00 +00:00
parent 1f6d533218
commit e9f1d08be2

View File

@ -45,6 +45,7 @@ my $requester;
my $viavcenter;
my $viavcenterbyhyp;
my $vcenterautojoin=1;
my $vcenterforceremove=0; #used in rmhypervisor
my $reconfigreset=1;
my $vmwaresdkdetect = eval {
require VMware::VIRuntime;
@ -383,6 +384,9 @@ sub process_request {
if ($command eq 'rmigrate' or $command eq 'rmhypervisor') { #Only use vcenter when required, fewer prereqs
$viavcenter = 1;
}
if ($command eq 'rmhypervisor' and grep /-f/, @exargs) { #force remove of hypervisor
$vcenterforceremove=1;
}
my $keytab = xCAT::Table->new('prodkey');
if ($keytab) {
my @hypes = keys %hyphash;
@ -1012,6 +1016,28 @@ sub connecthost_callback {
}
}
sub delhost_callback { #only called in rmhypervisor -f case during validate vcenter phase
my $task = shift;
my $args = shift;
my $hv = $args->{hostview};
my $state = $task->info->state->val;
if ($state eq "success") {
xCAT::SvrUtils::sendmsg("removed", $output_handler,$args->{hypname});
$hypready{$args->{hypname}} = -1; #Impossible for this hypervisor to ever be ready
$vcenterhash{$args->{vcenter}}->{badhyps}->{$args->{hypname}} = 1;
} elsif ($state eq 'error') {
my $error = $task->info->error->localizedMessage;
if (defined ($task->info->error->fault->faultMessage)) { #Only in 4.0, support of 3.5 must be careful?
foreach(@{$task->info->error->fault->faultMessage}) {
$error.=$_->message;
}
}
xCAT::SvrUtils::sendmsg([1,$error], $output_handler); #,$node);
$hypready{$args->{hypname}} = -1; #Impossible for this hypervisor to ever be ready
$vcenterhash{$args->{vcenter}}->{badhyps}->{$args->{hypname}} = 1;
}
}
sub get_clusterview {
my %args = @_;
my $clustname = $args{clustname};
@ -1768,9 +1794,9 @@ sub rmhypervisor_disconnected {
my $state = $task->info->state->val;
if ($state eq 'success') {
my $task = $hyphash{$hyp}->{hostview}->Destroy_Task();
$running_tasks{$task}->{data} = { node => $node, successtext => 'removed' };
$running_tasks{$task}->{task} = $task;
$running_tasks{$task}->{callback} = \&generic_task_callback;
$running_tasks{$task}->{data} = { node => $node, successtext => 'removed' };
$running_tasks{$task}->{task} = $task;
$running_tasks{$task}->{callback} = \&generic_task_callback;
$running_tasks{$task}->{hyp} =$hyp;
} elsif ($state eq 'error') {
relay_vmware_err($task,"",$node);
@ -2861,7 +2887,7 @@ sub validate_vcenter_prereqs { #Communicate with vCenter and ensure this host is
return 1;
} elsif ($vcenterautojoin) { #if allowed autojoin and the current view seems corrupt, throw it away and rejoin
} elsif ($vcenterautojoin or $vcenterforceremove) { #if allowed autojoin and the current view seems corrupt, throw it away and rejoin
my $ref_to_delete;
if ($hview->parent->type eq 'ClusterComputeResource') { #We are allowed to specifically kill a host in a cluster
$ref_to_delete = $hview->{mo_ref};
@ -2870,7 +2896,11 @@ sub validate_vcenter_prereqs { #Communicate with vCenter and ensure this host is
}
my $task = $hyphash{$hyp}->{vcenter}->{conn}->get_view(mo_ref=>$ref_to_delete)->Destroy_Task();
$running_tasks{$task}->{task} = $task;
$running_tasks{$task}->{callback} = \&addhosttovcenter;
if ($vcenterautojoin) {
$running_tasks{$task}->{callback} = \&addhosttovcenter;
} elsif ($vcenterforceremove) {
$running_tasks{$task}->{callback} = \&delhost_callback;
}
$running_tasks{$task}->{conn} = $hyphash{$hyp}->{vcenter}->{conn};
$running_tasks{$task}->{data} = { depfun => $depfun, depargs => $depargs, conn=> $hyphash{$hyp}->{vcenter}->{conn}, connspec=>$connspec,hostview=>$hview,hypname=>$hyp,vcenter=>$vcenter };
return undef;