scstadmin: Add command-line option -cont_on_err

git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@5065 d57e44dd-8a1f-0410-8b47-8ef2f437770f
This commit is contained in:
Bart Van Assche
2013-10-10 15:28:05 +00:00
parent 4b63daed53
commit 00a6eeafe7

View File

@@ -211,7 +211,8 @@ Options
-force : Force all configuration changes,
even deletions (DANGER!).
-noprompt : Do not prompt or pause. Use with caution!
-cont_on_err : Continue after an error occurred.
Debugging (limited support)
-debug : Debug mode - don\'t do anything destructive.
@@ -258,6 +259,7 @@ my $CONFIG;
my $CONFIGFILE;
my $_DEBUG_;
my $_NOPROMPT_;
my $_CONT_ON_ERR_;
my %CURRENT;
@@ -458,6 +460,7 @@ sub getArgs {
'nonkey' => \$nonkey,
'noprompt' => \$_NOPROMPT_,
'cont_on_err' => \$_CONT_ON_ERR_,
'force' => \$force,
'debug' => \$_DEBUG_))
{
@@ -471,6 +474,7 @@ sub getArgs {
$_DEBUG_ = TRUE if (defined($_DEBUG_));
$_NOPROMPT_ = TRUE if (defined($_NOPROMPT_));
$_CONT_ON_ERR_ = TRUE if (defined($_CONT_ON_ERR_));
$force = TRUE if (defined($force));
$nonkey = TRUE if (defined($nonkey));
@@ -2017,13 +2021,13 @@ sub applyConfigDevices {
my $attributes = configToAttr(\%_attributes);
my $create_attrs = configToAttr(\%_attributes);
my $possible = $SCST->deviceCreateAttributes($handler);
immediateExit($SCST->errorString());
condExit($SCST->errorString());
filterCreateAttributes($possible, $create_attrs, FALSE);
filterCreateAttributes($possible, $attributes, TRUE);
if (handlerHasDevice($handler, $device)) {
my $old_create_attrs = $SCST->deviceAttributes($device);
immediateExit($SCST->errorString());
condExit($SCST->errorString());
filterCreateAttributes($possible, $old_create_attrs, FALSE);
if (compareToKeyAttribute($create_attrs, $old_create_attrs)) {
@@ -2103,9 +2107,9 @@ sub applyConfigAssignments {
} else {
my $c_attrs = configToAttr($$config{'TARGET_DRIVER'}->{$driver}->{'TARGET'}->{$target}->{'LUN'}->{$lun}->{$device});
my $o_attrs = $SCST->lunAttributes($driver, $target, $lun);
immediateExit($SCST->errorString());
condExit($SCST->errorString());
my $possible = $SCST->lunCreateAttributes($driver, $target);
immediateExit($SCST->errorString());
condExit($SCST->errorString());
filterCreateAttributes($possible, $c_attrs, FALSE);
@@ -2146,9 +2150,9 @@ sub applyConfigAssignments {
} else {
my $c_attrs = configToAttr($$config{'TARGET_DRIVER'}->{$driver}->{'TARGET'}->{$target}->{'GROUP'}->{$group}->{'LUN'}->{$lun}->{$device});
my $o_attrs = $SCST->lunAttributes($driver, $target, $lun, $group);
immediateExit($SCST->errorString());
condExit($SCST->errorString());
my $possible = $SCST->lunCreateAttributes($driver, $target, $group);
immediateExit($SCST->errorString());
condExit($SCST->errorString());
filterCreateAttributes($possible, $c_attrs, FALSE);
@@ -2189,7 +2193,7 @@ sub applyConfigAssignments {
foreach my $driver (sort keys %{$assignments}) {
if (!defined($CURRENT{'assign'}->{$driver})) {
immediateExit("Target driver '$driver' is not loaded or available.");
condExit("Target driver '$driver' is not loaded or available.");
}
my %_attributes;
@@ -2459,7 +2463,7 @@ sub applyTargetAssignments {
if ($deletions && $isVirtual) {
my $rc = removeVirtualTarget($driver, $target);
immediateExit($SCST->errorString($rc)) if ($rc);
condExit($SCST->errorString($rc));
$changes++;
} else {
print "\t-> Virtual target '$target' for driver '$driver' is not in configuration. ".
@@ -2479,7 +2483,7 @@ sub applyTargetAssignments {
foreach my $target (sort keys %{$targets}) {
if (!defined($CURRENT{'assign'}->{$driver}->{$target})) {
if (!$is_virtual) {
immediateExit("Target '$target' for driver '$driver' does not exist.");
condExit("Target '$target' for driver '$driver' does not exist.");
} else {
my %_attributes;
@@ -2492,13 +2496,13 @@ sub applyTargetAssignments {
my $attributes = configToAttr(\%_attributes);
if (defined($$attributes{'HW_TARGET'})) {
immediateExit("Hardware target '$target' for driver '$driver' does not exist.");
condExit("Hardware target '$target' for driver '$driver' does not exist.");
}
filterCreateAttributes($possible, $attributes, FALSE);
my $rc = addVirtualTarget($driver, $target, $attributes);
immediateExit($SCST->errorString($rc)) if ($rc);
condExit($SCST->errorString($rc));
$changes++ if (!$rc);
}
}
@@ -4299,7 +4303,7 @@ sub addDriverDynamicAttribute {
my $rc = $SCST->addDriverDynamicAttribute($driver, $attribute, $value);
print "done.\n";
immediateExit($SCST->errorString($rc)) if ($rc);
condExit($SCST->errorString($rc));
return FALSE;
}
@@ -4338,7 +4342,7 @@ sub removeDriverDynamicAttribute {
my $rc = $SCST->removeDriverDynamicAttribute($driver, $attribute, $value);
print "done.\n";
immediateExit($SCST->errorString($rc)) if ($rc);
condExit($SCST->errorString($rc));
return FALSE;
}
@@ -4360,7 +4364,7 @@ sub setTargetAttribute {
my $rc = $SCST->setTargetAttribute($driver, $target, $attribute, $value);
print "done.\n";
immediateExit($SCST->errorString($rc)) if ($rc);
condExit($SCST->errorString($rc));
return FALSE;
}
@@ -4481,7 +4485,7 @@ sub addTargetDynamicAttribute {
my $rc = $SCST->addTargetDynamicAttribute($driver, $target, $attribute, $value);
print "done.\n";
immediateExit($SCST->errorString($rc)) if ($rc);
condExit($SCST->errorString($rc));
return FALSE;
}
@@ -4523,7 +4527,7 @@ sub removeTargetDynamicAttribute {
my $rc = $SCST->removeTargetDynamicAttribute($driver, $target, $attribute, $value);
print "done.\n";
immediateExit($SCST->errorString($rc)) if ($rc);
condExit($SCST->errorString($rc));
return FALSE;
}
@@ -4541,7 +4545,7 @@ sub openDevice {
print "done.\n";
immediateExit($SCST->errorString($rc)) if ($rc);
condExit($SCST->errorString($rc));
return FALSE;
}
@@ -4567,7 +4571,7 @@ sub closeDevice {
print "done.\n";
immediateExit($SCST->errorString($rc)) if ($rc);
condExit($SCST->errorString($rc));
return FALSE;
}
@@ -4590,7 +4594,7 @@ sub addDeviceGroup {
print "done.\n";
immediateExit($SCST->errorString($rc)) if ($rc);
condExit($SCST->errorString($rc));
return FALSE;
}
@@ -4605,7 +4609,7 @@ sub addTargetGroup {
print "done.\n";
immediateExit($SCST->errorString($rc)) if ($rc);
condExit($SCST->errorString($rc));
return FALSE;
}
@@ -4621,7 +4625,7 @@ sub addTargetGroupTarget {
print "done.\n";
immediateExit($SCST->errorString($rc)) if ($rc);
condExit($SCST->errorString($rc));
return FALSE;
}
@@ -4647,7 +4651,7 @@ sub removeDeviceGroup {
print "done.\n";
immediateExit($SCST->errorString($rc)) if ($rc);
condExit($SCST->errorString($rc));
return FALSE;
}
@@ -4673,7 +4677,7 @@ sub removeTargetGroup {
print "done.\n";
immediateExit($SCST->errorString($rc)) if ($rc);
condExit($SCST->errorString($rc));
return FALSE;
}
@@ -4690,7 +4694,7 @@ sub removeTargetGroupTarget {
print "done.\n";
immediateExit($SCST->errorString($rc)) if ($rc);
condExit($SCST->errorString($rc));
return FALSE;
}
@@ -4705,7 +4709,7 @@ sub addDeviceGroupDevice {
print "done.\n";
immediateExit($SCST->errorString($rc)) if ($rc);
condExit($SCST->errorString($rc));
return FALSE;
}
@@ -4740,7 +4744,7 @@ sub removeDeviceGroupDevice {
print "done.\n";
immediateExit($SCST->errorString($rc)) if ($rc);
condExit($SCST->errorString($rc));
return FALSE;
}
@@ -4758,7 +4762,7 @@ sub addGroup {
print "done.\n";
immediateExit($SCST->errorString($rc)) if ($rc);
condExit($SCST->errorString($rc));
return FALSE;
}
@@ -4785,7 +4789,7 @@ sub removeGroup {
print "done.\n";
immediateExit($SCST->errorString($rc)) if ($rc);
condExit($SCST->errorString($rc));
return FALSE;
}
@@ -4819,7 +4823,7 @@ sub addInitiator {
print "done.\n";
immediateExit($SCST->errorString($rc)) if ($rc);
condExit($SCST->errorString($rc));
return FALSE;
}
@@ -4837,7 +4841,7 @@ sub removeInitiator {
print "done.\n";
immediateExit($SCST->errorString($rc)) if ($rc);
condExit($SCST->errorString($rc));
return FALSE;
}
@@ -4855,7 +4859,7 @@ sub moveInitiator {
print "done.\n";
immediateExit($SCST->errorString($rc)) if ($rc);
condExit($SCST->errorString($rc));
return FALSE;
}
@@ -4871,7 +4875,7 @@ sub clearInitiators {
print "done.\n";
immediateExit($SCST->errorString($rc)) if ($rc);
condExit($SCST->errorString($rc));
return FALSE;
}
@@ -4898,7 +4902,7 @@ sub addLun {
print "done.\n";
immediateExit($SCST->errorString($rc)) if ($rc);
condExit($SCST->errorString($rc));
return FALSE;
}
@@ -4921,7 +4925,7 @@ sub removeLun {
print "done.\n";
immediateExit($SCST->errorString($rc)) if ($rc);
condExit($SCST->errorString($rc));
return FALSE;
}
@@ -4941,7 +4945,7 @@ sub replaceLun {
print "done.\n";
immediateExit($SCST->errorString($rc)) if ($rc);
condExit($SCST->errorString($rc));
return FALSE;
}
@@ -4961,7 +4965,7 @@ sub clearLuns {
print "done.\n";
immediateExit($SCST->errorString($rc)) if ($rc);
condExit($SCST->errorString($rc));
return FALSE;
}
@@ -4983,7 +4987,7 @@ sub clearDriverDynamicAttributes {
my $value = $$attributes{$attribute}->{'keys'}->{$key}->{'value'};
my $rc = $SCST->removeDriverDynamicAttribute($driver, $attribute, $value);
immediateExit($SCST->errorString($rc)) if ($rc);
condExit($SCST->errorString($rc));
}
}
}
@@ -5012,7 +5016,7 @@ sub clearTargetDynamicAttributes {
my $value = $$attributes{$attribute}->{'keys'}->{$key}->{'value'};
my $rc = $SCST->removeTargetDynamicAttribute($driver, $target, $attribute, $value);
immediateExit($SCST->errorString($rc)) if ($rc);
condExit($SCST->errorString($rc));
}
}
}
@@ -5410,7 +5414,7 @@ sub readOldConfigFile {
addAllGroupsToTarget(\%config, \%new, $driver, $target);
$has_enabled = TRUE;
} else {
immediateExit("Unable to determine target driver information for target '$wwn'. ".
condExit("Unable to determine target driver information for target '$wwn'. ".
"Please ensure this target driver is loaded.");
}
}
@@ -5616,6 +5620,19 @@ sub immediateExit {
exit 1;
}
# If an error occurred, exit if -cont_on_err has not been specified.
sub condExit {
my $error = shift;
if (!$error) {
;
} elsif ($_CONT_ON_ERR_) {
print "$error\n";
} else {
immediateExit($error);
}
}
sub issueWarning {
my $error = shift;