mirror of
https://github.com/SCST-project/scst.git
synced 2026-08-17 04:36:22 +00:00
- Updated for vdisk/vcdrom from disk_fileio/cdrom_fileio
- Added new errorString() method to SCST/SCST.pm containing error message of last error encountered. - Minor updates to scst_db - UNTESTED - Changed SCST/SCST.pm to look for files like vdisk/vdisk instead of vdisk/type to gather list of valid device handlers - Minor bug fixes git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@130 d57e44dd-8a1f-0410-8b47-8ef2f437770f
This commit is contained in:
@@ -15,3 +15,14 @@ Changes since 0.9.5-pre0:
|
||||
- Removed the comment which prevented a target from being enabled in enableTarget()
|
||||
- Updated init.d/scst to use scstadmin instead of scst_db
|
||||
- Fixup of README file
|
||||
|
||||
Changes since 0.9.6-pre2:
|
||||
|
||||
- Updated SCST/SCST.pm for vdisk/vcdrom from cdrom_fileio/disk_fileio
|
||||
- Updated scstadmin for vdisk/vcdrom...
|
||||
- Minor updates to scst_db for vdisk/vcdrom - UNTESTED
|
||||
- Enhanced error messages in SCST/SCST.pm. Now has new method errorString()
|
||||
- Added additional error messaging to scstadmin
|
||||
- Changed SCST/SCST.pm to look for vdisk/vdisk instead of vdisk/type for
|
||||
valid device handler types.
|
||||
- Minor bug fixes
|
||||
|
||||
+273
-62
@@ -17,13 +17,13 @@ my $_SCST_IO_ = $_SCST_DIR_.'/scsi_tgt';
|
||||
my $_SCST_CDROM_IO_ = $_SCST_DIR_.'/dev_cdrom/dev_cdrom';
|
||||
my $_SCST_CHANGER_IO_ = $_SCST_DIR_.'/dev_changer/dev_changer';
|
||||
my $_SCST_DISK_IO_ = $_SCST_DIR_.'/dev_disk/dev_disk';
|
||||
my $_SCST_DISK_FILE_IO_ = $_SCST_DIR_.'/disk_fileio/disk_fileio';
|
||||
my $_SCST_CDROM_FILE_IO_ = $_SCST_DIR_.'/cdrom_fileio/cdrom_fileio';
|
||||
my $_SCST_DISKP_IO_ = $_SCST_DIR_.'/dev_disk_perf/dev_disk_perf';
|
||||
my $_SCST_MODISK_IO_ = $_SCST_DIR_.'/dev_modisk/dev_modisk';
|
||||
my $_SCST_MODISKP_IO_ = $_SCST_DIR_.'/dev_modisk_perf/dev_modisk_perf';
|
||||
my $_SCST_TAPE_IO_ = $_SCST_DIR_.'/dev_tape/dev_tape';
|
||||
my $_SCST_TAPEP_IO_ = $_SCST_DIR_.'/dev_tape_perf/dev_tape_perf';
|
||||
my $_SCST_VDISK_IO_ = $_SCST_DIR_.'/vdisk/vdisk';
|
||||
my $_SCST_VCDROM_IO_ = $_SCST_DIR_.'/vcdrom/vcdrom';
|
||||
my $_SCST_GROUPS_DIR_ = $_SCST_DIR_.'/groups';
|
||||
my $_SCST_SGV_STATS_ = $_SCST_DIR_.'/sgv';
|
||||
my $_SCST_SESSIONS_ = $_SCST_DIR_.'/sessions';
|
||||
@@ -34,32 +34,32 @@ my $_SCST_DEVICES_IO_ = 'devices';
|
||||
|
||||
my @_AVAILABLE_OPTIONS_ = ('WRITE_THROUGH', 'O_DIRECT', 'READ_ONLY', 'NULLIO', 'NV_CACHE');
|
||||
|
||||
use vars qw(@ISA @EXPORT $VERSION $CDROM_TYPE $CHANGER_TYPE $DISK_TYPE $DISKFILE_TYPE
|
||||
$CDROMFILE_TYPE $DISKPERF_TYPE $MODISK_TYPE $MODISKPERF_TYPE $TAPE_TYPE
|
||||
use vars qw(@ISA @EXPORT $VERSION $CDROM_TYPE $CHANGER_TYPE $DISK_TYPE $VDISK_TYPE
|
||||
$VCDROM_TYPE $DISKPERF_TYPE $MODISK_TYPE $MODISKPERF_TYPE $TAPE_TYPE
|
||||
$TAPEPERF_TYPE);
|
||||
|
||||
$CDROM_TYPE = 1;
|
||||
$CHANGER_TYPE = 2;
|
||||
$DISK_TYPE = 3;
|
||||
$DISKFILE_TYPE = 4;
|
||||
$CDROMFILE_TYPE = 5;
|
||||
$VDISK_TYPE = 4;
|
||||
$VCDROM_TYPE = 5;
|
||||
$DISKPERF_TYPE = 6;
|
||||
$MODISK_TYPE = 7;
|
||||
$MODISKPERF_TYPE = 8;
|
||||
$TAPE_TYPE = 9;
|
||||
$TAPEPERF_TYPE = 10;
|
||||
|
||||
$VERSION = 0.6;
|
||||
$VERSION = 0.6.1;
|
||||
|
||||
my $_SCST_MIN_MAJOR_ = 0;
|
||||
my $_SCST_MIN_MINOR_ = 9;
|
||||
my $_SCST_MIN_RELEASE_ = 5;
|
||||
my $_SCST_MIN_RELEASE_ = 6;
|
||||
|
||||
my %_IO_MAP_ = ($CDROM_TYPE => $_SCST_CDROM_IO_,
|
||||
$CHANGER_TYPE => $_SCST_CHANGER_IO_,
|
||||
$DISK_TYPE => $_SCST_DISK_IO_,
|
||||
$DISKFILE_TYPE => $_SCST_DISK_FILE_IO_,
|
||||
$CDROMFILE_TYPE => $_SCST_CDROM_FILE_IO_,
|
||||
$VDISK_TYPE => $_SCST_VDISK_IO_,
|
||||
$VCDROM_TYPE => $_SCST_VCDROM_IO_,
|
||||
$DISKPERF_TYPE => $_SCST_DISKP_IO_,
|
||||
$MODISK_TYPE => $_SCST_MODISK_IO_,
|
||||
$MODISKPERF_TYPE => $_SCST_MODISKP_IO_,
|
||||
@@ -69,8 +69,8 @@ my %_IO_MAP_ = ($CDROM_TYPE => $_SCST_CDROM_IO_,
|
||||
my %_TYPE_MAP_ = ('dev_cdrom' => $CDROM_TYPE,
|
||||
'dev_changer' => $CHANGER_TYPE,
|
||||
'dev_disk' => $DISK_TYPE,
|
||||
'disk_fileio' => $DISKFILE_TYPE,
|
||||
'cdrom_fileio' => $CDROMFILE_TYPE,
|
||||
'vdisk' => $VDISK_TYPE,
|
||||
'vcdrom' => $VCDROM_TYPE,
|
||||
'dev_disk_perf' => $DISKPERF_TYPE,
|
||||
'dev_modisk' => $MODISK_TYPE,
|
||||
'dev_modisk_perf' => $MODISKPERF_TYPE,
|
||||
@@ -87,11 +87,12 @@ sub new {
|
||||
|
||||
bless($self, $class);
|
||||
|
||||
$self->{'debug'} = $debug if $debug;
|
||||
$self->{'debug'} = $debug;
|
||||
|
||||
my $scstVersion = $self->scstVersion();
|
||||
|
||||
my($major, $minor, $release) = split(/\./, $scstVersion, 3);
|
||||
($release, undef) = split(/\-/, $release) if ($release =~ /\-/);
|
||||
|
||||
$badVersion = $FALSE if (($major > $_SCST_MIN_MAJOR_) ||
|
||||
(($major == $_SCST_MIN_MAJOR_) && ($minor > $_SCST_MIN_MINOR_)) ||
|
||||
@@ -152,7 +153,11 @@ sub addGroup {
|
||||
return 2 if ($self->groupExists($group));
|
||||
|
||||
my $io = new IO::File $_SCST_IO_, O_WRONLY;
|
||||
return $TRUE if (!$io);
|
||||
|
||||
if (!$io) {
|
||||
$self->{'error'} = "addGroup(): Failed to open handler IO $_SCST_IO_";
|
||||
return $TRUE;
|
||||
}
|
||||
|
||||
my $cmd = "add_group $group\n";
|
||||
|
||||
@@ -175,7 +180,11 @@ sub removeGroup {
|
||||
return 2 if (!$self->groupExists($group));
|
||||
|
||||
my $io = new IO::File $_SCST_IO_, O_WRONLY;
|
||||
return $TRUE if (!$io);
|
||||
|
||||
if (!$io) {
|
||||
$self->{'error'} = "removeGroup(): Failed to open handler IO $_SCST_IO_";
|
||||
return $TRUE;
|
||||
}
|
||||
|
||||
my $cmd = "del_group $group\n";
|
||||
|
||||
@@ -197,7 +206,10 @@ sub sgvStats {
|
||||
my %stats;
|
||||
my $first = $TRUE;
|
||||
|
||||
return undef if (!$io);
|
||||
if (!$io) {
|
||||
$self->{'error'} = "sgvStats(): Failed to open handler IO $_SCST_IO_";
|
||||
return undef;
|
||||
}
|
||||
|
||||
while (my $line = <$io>) {
|
||||
chomp $line;
|
||||
@@ -244,7 +256,10 @@ sub sessions {
|
||||
my %sessions;
|
||||
my $first = $TRUE;
|
||||
|
||||
return undef if (!$io);
|
||||
if (!$io) {
|
||||
$self->{'error'} = "sessions(): Failed to open handler IO $_SCST_IO_";
|
||||
return undef;
|
||||
}
|
||||
|
||||
while (my $line = <$io>) {
|
||||
chomp $line;
|
||||
@@ -270,7 +285,10 @@ sub devices {
|
||||
my %devices;
|
||||
my $first = $TRUE;
|
||||
|
||||
return undef if (!$io);
|
||||
if (!$io) {
|
||||
$self->{'error'} = "devices(): Failed to open handler IO $_SCST_IO_";
|
||||
return undef;
|
||||
}
|
||||
|
||||
while (my $line = <$io>) {
|
||||
chomp $line;
|
||||
@@ -296,11 +314,22 @@ sub handlerDevices {
|
||||
my $first = $TRUE;
|
||||
my %devices;
|
||||
|
||||
return undef if (!$handler_io);
|
||||
return undef if (!$self->handlerExists($handler));
|
||||
if (!$handler_io) {
|
||||
$self->{'error'} = "handlerDevices(): Failed to open handler IO $handler_io or handler $handler invalid";
|
||||
return undef;
|
||||
}
|
||||
|
||||
if (!$self->handlerExists($handler)) {
|
||||
$self->{'error'} = "handlerDevices(): Handler $handler does not exist";
|
||||
return undef;
|
||||
}
|
||||
|
||||
my $io = new IO::File $handler_io, O_RDONLY;
|
||||
return undef if (!$io);
|
||||
|
||||
if (!$io) {
|
||||
$self->{'error'} = "handlerDevices(): Failed to open handler IO $handler_io";
|
||||
return undef;
|
||||
}
|
||||
|
||||
while (my $line = <$io>) {
|
||||
chomp $line;
|
||||
@@ -349,10 +378,26 @@ sub openDevice {
|
||||
my $blocksize = shift;
|
||||
my $handler_io = $_IO_MAP_{$handler};
|
||||
|
||||
return $TRUE if ($self->checkOptions($options));
|
||||
return $TRUE if (!$handler_io);
|
||||
return $TRUE if (!$self->handlerExists($handler));
|
||||
return 2 if ($self->handlerDeviceExists($handler, $device));
|
||||
if ($self->checkOptions($options)) {
|
||||
$self->{'error'} = "openDevice(): Invalid options '$options' given for device $device";
|
||||
return $TRUE;
|
||||
}
|
||||
|
||||
if (!$handler_io) {
|
||||
$self->{'error'} = "openDevice(): Failed to open handler IO $handler_io or ".
|
||||
"handler $handler invalid";
|
||||
return $TRUE;
|
||||
}
|
||||
|
||||
if (!$self->handlerExists($handler)) {
|
||||
$self->{'error'} = "openDevice(): Handler $handler does not exist";
|
||||
return $TRUE;
|
||||
}
|
||||
|
||||
if ($self->handlerDeviceExists($handler, $device)) {
|
||||
$self->{'error'} = "openDevice(): Device $device is already open";
|
||||
return 2;
|
||||
}
|
||||
|
||||
$options = $self->cleanupString($options);
|
||||
|
||||
@@ -364,7 +409,15 @@ sub openDevice {
|
||||
|
||||
return $FALSE if ($self->{'debug'});
|
||||
return $rc if ($rc);
|
||||
return !$self->handlerDeviceExists($handler, $device);
|
||||
|
||||
$rc = !$self->handlerDeviceExists($handler, $device);
|
||||
|
||||
if ($rc) {
|
||||
$self->{'error'} = "openDevice(): An error occured while opening device $device. ".
|
||||
"See dmesg/kernel log for more information.";
|
||||
}
|
||||
|
||||
return $rc;
|
||||
}
|
||||
|
||||
sub closeDevice {
|
||||
@@ -374,9 +427,20 @@ sub closeDevice {
|
||||
my $path = shift;
|
||||
my $handler_io = $_IO_MAP_{$handler};
|
||||
|
||||
return $TRUE if (!$handler_io);
|
||||
return $TRUE if (!$self->handlerExists($handler));
|
||||
return 2 if (!$self->handlerDeviceExists($handler, $device));
|
||||
if (!$handler_io) {
|
||||
$self->{'error'} = "closeDevice(): Failed to open handler IO $handler_io or handler $handler invalid";
|
||||
return $TRUE;
|
||||
}
|
||||
|
||||
if (!$self->handlerExists($handler)) {
|
||||
$self->{'error'} = "closeDevice(): Handler $handler does not exist";
|
||||
return $TRUE;
|
||||
}
|
||||
|
||||
if ($self->handlerDeviceExists($handler, $device)) {
|
||||
$self->{'error'} = "closeDevice(): Device $device is not open";
|
||||
return 2;
|
||||
}
|
||||
|
||||
my $cmd = "close $device $path\n";
|
||||
|
||||
@@ -384,7 +448,15 @@ sub closeDevice {
|
||||
|
||||
return $FALSE if ($self->{'debug'});
|
||||
return $rc if ($rc);
|
||||
return $self->handlerDeviceExists($handler, $device);
|
||||
|
||||
$rc = $self->handlerDeviceExists($handler, $device);
|
||||
|
||||
if ($rc) {
|
||||
$self->{'error'} = "closeDevice(): An error occured while closing device $device. ".
|
||||
"See dmesg/kernel log for more information.";
|
||||
}
|
||||
|
||||
return $rc;
|
||||
}
|
||||
|
||||
sub userExists {
|
||||
@@ -411,7 +483,12 @@ sub users {
|
||||
return undef if (!$self->groupExists($group));
|
||||
|
||||
my $io = new IO::File $_SCST_GROUPS_DIR_."/$group/".$_SCST_USERS_IO_, O_RDONLY;
|
||||
return undef if (!$io);
|
||||
|
||||
if (!$io) {
|
||||
$self->{'error'} = "users(): Failed to open handler IO ".$_SCST_GROUPS_DIR_.
|
||||
"/$group/".$_SCST_USERS_IO_;
|
||||
return undef;
|
||||
}
|
||||
|
||||
while (my $line = <$io>) {
|
||||
chomp $line;
|
||||
@@ -429,8 +506,15 @@ sub addUser {
|
||||
my $user = shift;
|
||||
my $group = shift;
|
||||
|
||||
return $TRUE if (!$self->groupExists($group));
|
||||
return 2 if ($self->userExists($user, $group));
|
||||
if (!$self->groupExists($group)) {
|
||||
$self->{'error'} = "addUser(): Group $group does not exist";
|
||||
return $TRUE;
|
||||
}
|
||||
|
||||
if ($self->userExists($user, $group)) {
|
||||
$self->{'error'} = "addUser(): User $user already exists in group $group";
|
||||
return 2;
|
||||
}
|
||||
|
||||
my $cmd = "add $user\n";
|
||||
|
||||
@@ -438,7 +522,15 @@ sub addUser {
|
||||
|
||||
return $FALSE if ($self->{'debug'});
|
||||
return $rc if ($rc);
|
||||
return !$self->userExists($user, $group);
|
||||
|
||||
$rc = !$self->userExists($user, $group);
|
||||
|
||||
if ($rc) {
|
||||
$self->{'error'} = "addUser(): An error occured while adding user $user to group $group. ".
|
||||
"See dmesg/kernel log for more information.";
|
||||
}
|
||||
|
||||
return $rc;
|
||||
}
|
||||
|
||||
sub removeUser {
|
||||
@@ -446,8 +538,15 @@ sub removeUser {
|
||||
my $user = shift;
|
||||
my $group = shift;
|
||||
|
||||
return $TRUE if (!$self->groupExists($group));
|
||||
return 2 if (!$self->userExists($user, $group));
|
||||
if (!$self->groupExists($group)) {
|
||||
$self->{'error'} = "removeUser(): Group $group does not exist";
|
||||
return $TRUE;
|
||||
}
|
||||
|
||||
if ($self->userExists($user, $group)) {
|
||||
$self->{'error'} = "removeUser(): User $user does not exist in group $group";
|
||||
return 2;
|
||||
}
|
||||
|
||||
my $cmd = "del $user\n";
|
||||
|
||||
@@ -455,21 +554,37 @@ sub removeUser {
|
||||
|
||||
return $FALSE if ($self->{'debug'});
|
||||
return $rc if ($rc);
|
||||
return $self->userExists($user, $group);
|
||||
|
||||
$rc = $self->userExists($user, $group);
|
||||
|
||||
if ($rc) {
|
||||
$self->{'error'} = "removeUser(): An error occured while removing user $user ".
|
||||
"from group $group. See dmesg/kernel log for more information.";
|
||||
}
|
||||
|
||||
return $rc;
|
||||
}
|
||||
|
||||
sub clearUsers {
|
||||
my $self = shift;
|
||||
my $group = shift;
|
||||
|
||||
return $TRUE if (!$self->groupExists($group));
|
||||
if (!$self->groupExists($group)) {
|
||||
$self->{'error'} = "clearUsers(): Group $group does not exist";
|
||||
return $TRUE;
|
||||
}
|
||||
|
||||
my $cmd = "clear\n";
|
||||
|
||||
my $rc = $self->group_private($group, $_SCST_USERS_IO_, $cmd);
|
||||
|
||||
return $FALSE if ($self->{'debug'});
|
||||
return $rc if ($rc);
|
||||
|
||||
if ($rc) {
|
||||
$self->{'error'} = "clearUsers(): An error occured while clearing users from ".
|
||||
"group $group. See dmesg/kernel log for more information.";
|
||||
return $rc;
|
||||
}
|
||||
|
||||
my $users = $self->users($group);
|
||||
|
||||
@@ -498,8 +613,7 @@ sub handlers {
|
||||
|
||||
foreach my $entry (readdir($dirHandle)) {
|
||||
next if (($entry eq '.') || ($entry eq '..'));
|
||||
|
||||
if ((-d $_SCST_DIR_.'/'.$entry ) && (-f $_SCST_DIR_.'/'.$entry.'/type')) {
|
||||
if ((-d $_SCST_DIR_.'/'.$entry ) && (-f $_SCST_DIR_.'/'.$entry.'/'.$entry)) {
|
||||
push @handlers, $_TYPE_MAP_{$entry} if ($_TYPE_MAP_{$entry});
|
||||
}
|
||||
}
|
||||
@@ -533,10 +647,18 @@ sub groupDevices {
|
||||
my %devices;
|
||||
my $first = $TRUE;
|
||||
|
||||
return undef if (!$self->groupExists($group));
|
||||
if (!$self->groupExists($group)) {
|
||||
$self->{'error'} = "groupDevices(): Group $group does not exist";
|
||||
return undef;
|
||||
}
|
||||
|
||||
my $io = new IO::File $_SCST_GROUPS_DIR_."/$group/".$_SCST_DEVICES_IO_, O_RDONLY;
|
||||
return undef if (!$io);
|
||||
|
||||
if (!$io) {
|
||||
$self->{'error'} = "groupDevices(): Failed to open handler IO ".$_SCST_GROUPS_DIR_.
|
||||
"/$group/".$_SCST_DEVICES_IO_;
|
||||
return undef;
|
||||
}
|
||||
|
||||
while (my $line = <$io>) {
|
||||
chomp $line;
|
||||
@@ -562,8 +684,16 @@ sub assignDeviceToGroup {
|
||||
my $group = shift;
|
||||
my $lun = shift;
|
||||
|
||||
return $TRUE if (!$self->groupExists($group));
|
||||
return 2 if ($self->groupDeviceExists($device, $group, $lun));
|
||||
if (!$self->groupExists($group)) {
|
||||
$self->{'error'} = "assignDeviceToGroup(): Group $group does not exist";
|
||||
return $TRUE;
|
||||
}
|
||||
|
||||
if ($self->groupDeviceExists($device, $group, $lun)) {
|
||||
$self->{'error'} = "assignDeviceToGroup(): Device $device is already ".
|
||||
"assigned to group $group";
|
||||
return 2;
|
||||
}
|
||||
|
||||
my $cmd = "add $device $lun\n";
|
||||
|
||||
@@ -571,7 +701,15 @@ sub assignDeviceToGroup {
|
||||
|
||||
return $FALSE if ($self->{'debug'});
|
||||
return $rc if ($rc);
|
||||
return !$self->groupDeviceExists($device, $group, $lun);
|
||||
|
||||
$rc = !$self->groupDeviceExists($device, $group, $lun);
|
||||
|
||||
if ($rc) {
|
||||
$self->{'error'} = "assignDeviceToGroup(): An error occured while assigning device $device ".
|
||||
"to group $group. See dmesg/kernel log for more information.";
|
||||
}
|
||||
|
||||
return $rc;
|
||||
}
|
||||
|
||||
sub assignDeviceToHandler {
|
||||
@@ -579,10 +717,22 @@ sub assignDeviceToHandler {
|
||||
my $device = shift;
|
||||
my $handler = shift;
|
||||
my $handler_io = $_IO_MAP_{$handler};
|
||||
|
||||
return $TRUE if (!$handler_io);
|
||||
return $TRUE if (!$self->handlerExists($handler));
|
||||
return 2 if ($self->handlerDeviceExists($handler, $device));
|
||||
|
||||
if (!$handler_io) {
|
||||
$self->{'error'} = "assignDeviceToHandler(): Failed to open handler IO $handler_io or ".
|
||||
"handler $handler invalid";
|
||||
return $TRUE;
|
||||
}
|
||||
|
||||
if (!$self->handlerExists($handler)) {
|
||||
$self->{'error'} = "assignDeviceToHandler(): Handler $handler does not exist";
|
||||
return $TRUE;
|
||||
}
|
||||
|
||||
if ($self->handlerDeviceExists($device, $handler)) {
|
||||
$self->{'error'} = "assignDeviceToHandler(): Device $device is already assigned to handler $handler";
|
||||
return 2;
|
||||
}
|
||||
|
||||
my $cmd = "assign $device $handler\n";
|
||||
|
||||
@@ -590,7 +740,15 @@ sub assignDeviceToHandler {
|
||||
|
||||
return $FALSE if ($self->{'debug'});
|
||||
return $rc if($rc);
|
||||
return !$self->handlerDeviceExists($handler, $device);
|
||||
|
||||
$rc = !$self->handlerDeviceExists($handler, $device);
|
||||
|
||||
if ($rc) {
|
||||
$self->{'error'} = "assignDeviceToHandler(): An error occured while assigning device $device ".
|
||||
"to handler $handler. See dmesg/kernel log for more information.";
|
||||
}
|
||||
|
||||
return $rc;
|
||||
}
|
||||
|
||||
sub removeDeviceFromGroup {
|
||||
@@ -598,8 +756,15 @@ sub removeDeviceFromGroup {
|
||||
my $device = shift;
|
||||
my $group = shift;
|
||||
|
||||
return $TRUE if (!$self->groupExists($group));
|
||||
return 2 if (!$self->groupDeviceExists($device, $group));
|
||||
if (!$self->groupExists($group)) {
|
||||
$self->{'error'} = "removeDeviceFromGroup(): Group $group does not exist";
|
||||
return $TRUE;
|
||||
}
|
||||
|
||||
if (!$self->groupDeviceExists($device, $group)) {
|
||||
$self->{'error'} = "removeDeviceFromGroup(): Device $device does not exist in group $group";
|
||||
return 2;
|
||||
}
|
||||
|
||||
my $cmd = "del $device\n";
|
||||
|
||||
@@ -607,7 +772,15 @@ sub removeDeviceFromGroup {
|
||||
|
||||
return $FALSE if ($self->{'debug'});
|
||||
return $rc if ($rc);
|
||||
return $self->groupDeviceExists($device, $group);
|
||||
|
||||
$rc = $self->groupDeviceExists($device, $group);
|
||||
|
||||
if ($rc) {
|
||||
$self->{'error'} = "removeDeviceFromGroup(): An error occured while removing device $device ".
|
||||
"from group $group. See dmesg/kernel log for more information.";
|
||||
}
|
||||
|
||||
return $rc;
|
||||
}
|
||||
|
||||
sub clearGroupDevices {
|
||||
@@ -621,7 +794,12 @@ sub clearGroupDevices {
|
||||
my $rc = $self->group_private($group, $_SCST_DEVICES_IO_, $cmd);
|
||||
|
||||
return $FALSE if ($self->{'debug'});
|
||||
return $rc if ($rc);
|
||||
|
||||
if ($rc) {
|
||||
$self->{'error'} = "clearGroupDevices(): An error occured while clearing devices from ".
|
||||
"group $group. See dmesg/kernel log for more information.";
|
||||
return $rc;
|
||||
}
|
||||
|
||||
my $devices = $self->groupDevices($group);
|
||||
|
||||
@@ -634,7 +812,11 @@ sub handler_private {
|
||||
my $cmd = shift;
|
||||
|
||||
my $io = new IO::File $handler_io, O_WRONLY;
|
||||
return $TRUE if (!$io);
|
||||
|
||||
if (!$io) {
|
||||
$self->{'error'} = "SCST/SCST.pm: Failed to open handler IO $handler_io";
|
||||
return $TRUE;
|
||||
}
|
||||
|
||||
if ($self->{'debug'}) {
|
||||
print "DBG($$): '$handler_io' -> '$cmd'\n";
|
||||
@@ -652,7 +834,11 @@ sub scst_private {
|
||||
my $cmd = shift;
|
||||
|
||||
my $io = new IO::File $_SCST_IO_, O_WRONLY;
|
||||
return $TRUE if (!$io);
|
||||
|
||||
if (!$io) {
|
||||
$self->{'error'} = "SCST/SCST.pm: Failed to open handler IO $_SCST_IO_";
|
||||
return $TRUE;
|
||||
}
|
||||
|
||||
if ($self->{'debug'}) {
|
||||
print "DBG($$): '$_SCST_IO_' -> '$cmd'\n";
|
||||
@@ -672,7 +858,11 @@ sub group_private {
|
||||
my $cmd = shift;
|
||||
|
||||
my $io = new IO::File $_SCST_GROUPS_DIR_."/$group/".$file, O_WRONLY;
|
||||
return $TRUE if (!$io);
|
||||
|
||||
if (!$io) {
|
||||
$self->{'error'} = "SCST/SCST.pm: Failed to open handler IO ".$_SCST_GROUPS_DIR_."/$group/".$file;
|
||||
return $TRUE;
|
||||
}
|
||||
|
||||
if ($self->{'debug'}) {
|
||||
print "DBG($$): $_SCST_GROUPS_DIR_/$group/$file -> $cmd\n";
|
||||
@@ -700,6 +890,17 @@ sub checkOptions {
|
||||
return $TRUE;
|
||||
}
|
||||
|
||||
sub errorString {
|
||||
my $self = shift;
|
||||
|
||||
return undef if (!$self->{'error'});
|
||||
|
||||
my $string = $self->{'error'};
|
||||
$self->{'error'} = undef;
|
||||
|
||||
return $string;
|
||||
}
|
||||
|
||||
sub cleanupString {
|
||||
my $self = shift;
|
||||
my $string = shift;
|
||||
@@ -724,9 +925,9 @@ SCST::SCST - Generic SCST methods.
|
||||
|
||||
print "Using SCST version".$p->scstVersion()."\n";
|
||||
|
||||
if ($p->handlerDeviceExists($SCST::SCST::DISKFILE_TYPE)) {
|
||||
if ($p->handlerDeviceExists($SCST::SCST::VDISK_TYPE)) {
|
||||
print "openDevice() failed\n"
|
||||
if ($p->openDevice($SCST::SCST::DISKFILE_TYPE, 'DISK01', '/vdisk/disk01.dsk'));
|
||||
if ($p->openDevice($SCST::SCST::VDISK_TYPE, 'DISK01', '/vdisk/disk01.dsk'));
|
||||
}
|
||||
|
||||
undef $p;
|
||||
@@ -976,6 +1177,16 @@ Arguments: (string) $group
|
||||
|
||||
Returns: (int) $success
|
||||
|
||||
=item SCST::SCST->errorString();
|
||||
|
||||
Contains a description of the last error occured or undef if no error
|
||||
has occured or if this method has already been called once since the
|
||||
last error.
|
||||
|
||||
Arguments: (void)
|
||||
|
||||
Returns: (string) $error_string
|
||||
|
||||
=back
|
||||
|
||||
=head1 WARNING
|
||||
@@ -992,8 +1203,8 @@ Available Device Handlers:
|
||||
CDROM_TYPE,
|
||||
CHANGER_TYPE,
|
||||
DISK_TYPE,
|
||||
DISKFILE_TYPE,
|
||||
CDROMFILE_TYPE,
|
||||
VDISK_TYPE,
|
||||
VCDROM_TYPE,
|
||||
DISKPERF_TYPE,
|
||||
MODISK_TYPE,
|
||||
MODISKPERF_TYPE,
|
||||
|
||||
@@ -1,51 +1,60 @@
|
||||
# Automatically generated by scst.
|
||||
|
||||
[HANDLER disk_fileio]
|
||||
DEVICE GW15K000,/dev/evms/GW15K000,512
|
||||
DEVICE GW15K001,/dev/evms/GW15K001,512
|
||||
DEVICE MP15K004,/dev/evms/MP15K004,512
|
||||
DEVICE MP15K005,/dev/evms/MP15K005,512
|
||||
DEVICE MP15K006,/dev/evms/MP15K006,512
|
||||
DEVICE MP15K007,/dev/evms/MP15K007,512
|
||||
DEVICE MP15K008,/dev/evms/MP15K008,512
|
||||
DEVICE MP15K009,/dev/evms/MP15K009,512
|
||||
DEVICE MP15K00a,/dev/evms/MP15K00a,512
|
||||
DEVICE MP15K00b,/dev/evms/MP15K00b,512
|
||||
DEVICE MP15K00c,/dev/evms/MP15K00c,512
|
||||
DEVICE MP15K00d,/dev/evms/MP15K00d,512
|
||||
DEVICE MP15K00e,/dev/evms/MP15K00e,512
|
||||
DEVICE MS10K006,/dev/evms/MS10K002,512
|
||||
DEVICE MS15K000,/dev/evms/MS15K000,512
|
||||
DEVICE MS15K001,/dev/evms/MS15K001,512
|
||||
DEVICE MS15K002,/dev/evms/MS15K002,512
|
||||
DEVICE MS15K005,/dev/evms/MS15K003,512
|
||||
DEVICE RG10K000,/dev/evms/RG10K000,512
|
||||
DEVICE RG72K001,/dev/evms/RG72K001,512
|
||||
[HANDLER vdisk]
|
||||
#DEVICE <vdisk name>,<device path>,<options>,<block size>
|
||||
DEVICE GW15K000,/dev/evms/GW15K000,,512
|
||||
DEVICE GW15K001,/dev/evms/GW15K001,,512
|
||||
DEVICE MP15K004,/dev/evms/MP15K004,,512
|
||||
DEVICE MP15K005,/dev/evms/MP15K005,,512
|
||||
DEVICE MP15K006,/dev/evms/MP15K006,,512
|
||||
DEVICE MP15K007,/dev/evms/MP15K007,,512
|
||||
DEVICE MP15K008,/dev/evms/MP15K008,,512
|
||||
DEVICE MP15K009,/dev/evms/MP15K009,,512
|
||||
DEVICE MP15K00a,/dev/evms/MP15K00a,,512
|
||||
DEVICE MP15K00b,/dev/evms/MP15K00b,,512
|
||||
DEVICE MP15K00c,/dev/evms/MP15K00c,,512
|
||||
DEVICE MP15K00d,/dev/evms/MP15K00d,,512
|
||||
DEVICE MP15K00e,/dev/evms/MP15K00e,,512
|
||||
DEVICE MS10K006,/dev/evms/MS10K002,,512
|
||||
DEVICE MS15K000,/dev/evms/MS15K000,,512
|
||||
DEVICE MS15K001,/dev/evms/MS15K001,,512
|
||||
DEVICE MS15K002,/dev/evms/MS15K002,,512
|
||||
DEVICE MS15K005,/dev/evms/MS15K003,,512
|
||||
DEVICE RG10K000,/dev/evms/RG10K000,,512
|
||||
DEVICE RG72K001,/dev/evms/RG72K001,,512
|
||||
|
||||
[HANDLER cdrom_fileio]
|
||||
[HANDLER vcdrom]
|
||||
|
||||
[GROUP CORBIN2_a]
|
||||
#USER <user wwn>
|
||||
USER 21:00:00:e0:8b:11:8d:8a
|
||||
|
||||
[GROUP CORBIN3_a]
|
||||
#USER <user wwn>
|
||||
USER 21:00:00:e0:8b:03:9e:1a
|
||||
|
||||
[GROUP MENTASM_a]
|
||||
#USER <user wwn>
|
||||
USER 21:00:00:e0:8b:11:06:8a
|
||||
|
||||
[GROUP PC1_a]
|
||||
#USER <user wwn>
|
||||
USER 21:00:00:e0:8b:11:3f:8d
|
||||
|
||||
[GROUP PC2_a]
|
||||
#USER <user wwn>
|
||||
USER 21:00:00:e0:8b:03:d8:4a
|
||||
|
||||
[GROUP PC3_a]
|
||||
#USER <user wwn>
|
||||
USER 21:00:00:e0:8b:13:ba:01
|
||||
|
||||
[GROUP PC4_a]
|
||||
#USER <user wwn>
|
||||
USER 21:00:00:e0:8b:11:a6:8b
|
||||
|
||||
[GROUP RAISTLIN_a]
|
||||
#USER <user wwn>
|
||||
USER 21:00:00:e0:8b:11:75:8b
|
||||
|
||||
[ASSIGNMENT CORBIN2_a]
|
||||
@@ -55,35 +64,44 @@ DEVICE RG10K000,2
|
||||
DEVICE RG72K001,3
|
||||
|
||||
[ASSIGNMENT CORBIN3_a]
|
||||
#ASSIGNMENT <device name>,<lun>
|
||||
DEVICE MP15K00d,0
|
||||
|
||||
[ASSIGNMENT Default]
|
||||
#ASSIGNMENT <device name>,<lun>
|
||||
DEVICE GW15K000,0
|
||||
DEVICE GW15K001,1
|
||||
|
||||
[ASSIGNMENT MENTASM_a]
|
||||
#ASSIGNMENT <device name>,<lun>
|
||||
DEVICE MP15K006,0
|
||||
DEVICE MP15K008,1
|
||||
DEVICE MP15K00e,2
|
||||
|
||||
[ASSIGNMENT PC1_a]
|
||||
#ASSIGNMENT <device name>,<lun>
|
||||
DEVICE MS15K000,0
|
||||
|
||||
[ASSIGNMENT PC2_a]
|
||||
#ASSIGNMENT <device name>,<lun>
|
||||
DEVICE MS15K005,0
|
||||
|
||||
[ASSIGNMENT PC3_a]
|
||||
#ASSIGNMENT <device name>,<lun>
|
||||
DEVICE MP15K00c,0
|
||||
|
||||
[ASSIGNMENT PC4_a]
|
||||
#ASSIGNMENT <device name>,<lun>
|
||||
DEVICE MP15K005,0
|
||||
DEVICE MP15K007,1
|
||||
|
||||
[ASSIGNMENT RAISTLIN_a]
|
||||
#ASSIGNMENT <device name>,<lun>
|
||||
DEVICE MP15K00a,0
|
||||
DEVICE MP15K00b,1
|
||||
|
||||
[TARGETS enable]
|
||||
#HOST <wwn identifier>
|
||||
HOST 0x50060b0000397178
|
||||
HOST 0x50060b000039717a
|
||||
|
||||
|
||||
@@ -148,7 +148,7 @@ CREATE TABLE `scst_handlers` (
|
||||
|
||||
LOCK TABLES `scst_handlers` WRITE;
|
||||
/*!40000 ALTER TABLE `scst_handlers` DISABLE KEYS */;
|
||||
INSERT INTO `scst_handlers` VALUES (1,'disk','N'),(2,'disk_fileio','Y'),(3,'cdrom','N'),(4,'changer','N'),(5,'disk_perf','N'),(6,'modisk','N'),(7,'modisk_perf','N'),(8,'tape','N'),(9,'tape_perf','N');
|
||||
INSERT INTO `scst_handlers` VALUES (1,'disk','N'),(2,'vdisk','Y'),(3,'cdrom','N'),(4,'changer','N'),(5,'disk_perf','N'),(6,'modisk','N'),(7,'modisk_perf','N'),(8,'tape','N'),(9,'tape_perf','N');
|
||||
/*!40000 ALTER TABLE `scst_handlers` ENABLE KEYS */;
|
||||
UNLOCK TABLES;
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/perl
|
||||
$Version = 'SCST DB Configurator v0.51';
|
||||
$Version = 'SCST DB Configurator v0.51.1';
|
||||
|
||||
# Configures SCST
|
||||
#
|
||||
@@ -61,8 +61,8 @@ my %MD_DEVICES;
|
||||
my %_HANDLER_MAP_ = ('cdrom' => $SCST::SCST::CDROM_TYPE,
|
||||
'changer' => $SCST::SCST::CHANGER_TYPE,
|
||||
'disk' => $SCST::SCST::DISK_TYPE,
|
||||
'disk_fileio' => $SCST::SCST::DISKFILE_TYPE,
|
||||
'cdrom_fileio' => $SCST::SCST::CDROMFILE_TYPE,
|
||||
'vdisk' => $SCST::SCST::VDISK_TYPE,
|
||||
'vcdrom' => $SCST::SCST::VCDROM_TYPE,
|
||||
'disk_perf' => $SCST::SCST::DISKPERF_TYPE,
|
||||
'modisk' => $SCST::SCST::MODISK_TYPE,
|
||||
'modisk_perf' => $SCST::SCST::MODISKPERF_TYPE,
|
||||
@@ -72,8 +72,8 @@ my %_HANDLER_MAP_ = ('cdrom' => $SCST::SCST::CDROM_TYPE,
|
||||
my %_REVERSE_MAP_ = ($SCST::SCST::CDROM_TYPE => 'cdrom',
|
||||
$SCST::SCST::CHANGER_TYPE => 'changer',
|
||||
$SCST::SCST::DISK_TYPE => 'disk',
|
||||
$SCST::SCST::DISKFILE_TYPE => 'disk_fileio',
|
||||
$SCST::SCST::CDROMFILE_TYPE => 'cdrom_fileio',
|
||||
$SCST::SCST::VDISK_TYPE => 'vdisk',
|
||||
$SCST::SCST::VCDROM_TYPE => 'vcdrom',
|
||||
$SCST::SCST::DISKPERF_TYPE => 'disk_perf',
|
||||
$SCST::SCST::MODISK_TYPE => 'modisk',
|
||||
$SCST::SCST::MODISKPERF_TYPE => 'modisk_perf',
|
||||
|
||||
+56
-18
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/perl
|
||||
$Version = 'SCST Configurator v0.6';
|
||||
$Version = 'SCST Configurator v0.6.1';
|
||||
|
||||
# Configures SCST
|
||||
#
|
||||
@@ -59,7 +59,7 @@ Debugging (limited support)
|
||||
-debug : Debug mode - don\'t do anything destructive.
|
||||
|
||||
Available Handlers:
|
||||
disk, disk_fileio, disk_perf, cdrom, changer, modisk, modisk_perf, tape, tape_perf
|
||||
disk, vdisk, disk_perf, cdrom, vcdrom, changer, modisk, modisk_perf, tape, tape_perf
|
||||
|
||||
Available Options for create and open:
|
||||
WRITE_THROUGH, READ_ONLY, O_DIRECT, NULLIO, NV_CACHE
|
||||
@@ -75,7 +75,7 @@ Examples:
|
||||
scstadmin -addgroup HOST01
|
||||
|
||||
Create a device given an already existing disk file:
|
||||
scstadmin -adddev DISK01 -handler disk_fileio -path /vdisks/disk01.dsk -options READ_ONLY,WRITE_THROUGH
|
||||
scstadmin -adddev DISK01 -handler vdisk -path /vdisks/disk01.dsk -options READ_ONLY,WRITE_THROUGH
|
||||
|
||||
Assign a device to a security group:
|
||||
scstadmin -assigndev DISK01 -group HOST01 -lun 1
|
||||
@@ -113,8 +113,8 @@ my $_DEBUG_;
|
||||
my %_HANDLER_MAP_ = ('cdrom' => $SCST::SCST::CDROM_TYPE,
|
||||
'changer' => $SCST::SCST::CHANGER_TYPE,
|
||||
'disk' => $SCST::SCST::DISK_TYPE,
|
||||
'disk_fileio' => $SCST::SCST::DISKFILE_TYPE,
|
||||
'cdrom_fileio' => $SCST::SCST::CDROMFILE_TYPE,
|
||||
'vdisk' => $SCST::SCST::VDISK_TYPE,
|
||||
'vcdrom' => $SCST::SCST::VCDROM_TYPE,
|
||||
'disk_perf' => $SCST::SCST::DISKPERF_TYPE,
|
||||
'modisk' => $SCST::SCST::MODISK_TYPE,
|
||||
'modisk_perf' => $SCST::SCST::MODISKPERF_TYPE,
|
||||
@@ -124,8 +124,8 @@ my %_HANDLER_MAP_ = ('cdrom' => $SCST::SCST::CDROM_TYPE,
|
||||
my %_REVERSE_MAP_ = ($SCST::SCST::CDROM_TYPE => 'cdrom',
|
||||
$SCST::SCST::CHANGER_TYPE => 'changer',
|
||||
$SCST::SCST::DISK_TYPE => 'disk',
|
||||
$SCST::SCST::DISKFILE_TYPE => 'disk_fileio',
|
||||
$SCST::SCST::CDROMFILE_TYPE => 'cdrom_fileio',
|
||||
$SCST::SCST::VDISK_TYPE => 'vdisk',
|
||||
$SCST::SCST::VCDROM_TYPE => 'vcdrom',
|
||||
$SCST::SCST::DISKPERF_TYPE => 'disk_perf',
|
||||
$SCST::SCST::MODISK_TYPE => 'modisk',
|
||||
$SCST::SCST::MODISKPERF_TYPE => 'modisk_perf',
|
||||
@@ -134,6 +134,8 @@ my %_REVERSE_MAP_ = ($SCST::SCST::CDROM_TYPE => 'cdrom',
|
||||
|
||||
$SIG{INT} = \&commitSuicide;
|
||||
|
||||
use vars qw($Version);
|
||||
|
||||
POSIX::setsid();
|
||||
|
||||
&main();
|
||||
@@ -268,6 +270,8 @@ sub getArgs {
|
||||
usage();
|
||||
}
|
||||
|
||||
$_DEBUG_ = $TRUE if (defined($_DEBUG_));
|
||||
|
||||
$forceConfig = $TRUE if (defined($forceConfig));
|
||||
$showSessions = $TRUE if (defined($showSessions));
|
||||
|
||||
@@ -403,6 +407,8 @@ sub readCurrentConfig {
|
||||
|
||||
my $eHandlers = $SCST->handlers();
|
||||
|
||||
immediateExit($SCST->errorString());
|
||||
|
||||
foreach my $handler (@{$eHandlers}) {
|
||||
$HANDLERS{$handler}++; # For quick lookups
|
||||
}
|
||||
@@ -410,7 +416,10 @@ sub readCurrentConfig {
|
||||
$TARGETS = targets();
|
||||
|
||||
$DEVICES = $SCST->devices();
|
||||
immediateExit($SCST->errorString());
|
||||
|
||||
my $_eGroups = $SCST->groups();
|
||||
immediateExit($SCST->errorString());
|
||||
|
||||
foreach my $group (@{$_eGroups}) {
|
||||
$GROUPS{$group}++; # For quick lookups
|
||||
@@ -445,14 +454,17 @@ sub writeConfiguration {
|
||||
|
||||
print "Writing current configuration to file '$file'.. ";
|
||||
|
||||
print $io "# Automatically generated by scst.\n\n";
|
||||
print $io "# Automatically generated by $Version.\n\n";
|
||||
|
||||
# Device information
|
||||
foreach my $handler (sort keys %HANDLERS) {
|
||||
print $io "[HANDLER ".$_REVERSE_MAP_{$handler}."]\n";
|
||||
print $io "#DEVICE <vdisk name>,<device path>,<options>,<block size>\n";
|
||||
|
||||
my $devices = $SCST->handlerDevices($handler);
|
||||
|
||||
immediateExit($SCST->errorString());
|
||||
|
||||
foreach my $device (sort keys %{$devices}) {
|
||||
my $options = $$devices{$device}->{'OPTIONS'};
|
||||
$options =~ s/\,/\|/;
|
||||
@@ -469,6 +481,7 @@ sub writeConfiguration {
|
||||
# User configuration
|
||||
foreach my $group (sort keys %USERS) {
|
||||
print $io "[GROUP $group]\n";
|
||||
print $io "#USER <user wwn>\n";
|
||||
|
||||
foreach my $user (keys %{$USERS{$group}}) {
|
||||
print $io "USER $user\n";
|
||||
@@ -480,6 +493,7 @@ sub writeConfiguration {
|
||||
# Assignments configuration
|
||||
foreach my $group (sort keys %ASSIGNMENTS) {
|
||||
print $io "[ASSIGNMENT $group]\n";
|
||||
print $io "#DEVICE <device name>,<lun>\n";
|
||||
|
||||
my $pointer = $ASSIGNMENTS{$group};
|
||||
foreach my $device (sort keys %{$pointer}) {
|
||||
@@ -492,6 +506,7 @@ sub writeConfiguration {
|
||||
# Targets configuration
|
||||
foreach my $type ('enable', 'disable') {
|
||||
print $io "[TARGETS $type]\n";
|
||||
print $io "#HOST <wwn identifier>\n";
|
||||
|
||||
foreach my $target (sort keys %{$TARGETS}) {
|
||||
if ((($type eq 'enable') && $$TARGETS{$target}->{'enabled'}) ||
|
||||
@@ -827,6 +842,7 @@ sub clearConfiguration {
|
||||
|
||||
sub showSessions {
|
||||
my $sessions = $SCST->sessions();
|
||||
immediateExit($SCST->errorString());
|
||||
|
||||
print "\n\tTarget Name\tInitiator Name\t\t\tGroup Name\t\tCommand Count\n";
|
||||
|
||||
@@ -864,7 +880,8 @@ sub addDevice {
|
||||
print "\t-> Opening virtual device '$device' at path '$path' using handler '$handler'..\n";
|
||||
|
||||
if ($SCST->openDevice($_handler, $device, $path, $options, $blocksize)) {
|
||||
print "WARNING: Failed to open virtual device '$device' at path '$path'.\n";
|
||||
print "WARNING: Failed to open virtual device '$device' at path '$path': ".
|
||||
$SCST->errorString()."\n";
|
||||
return $TRUE;
|
||||
}
|
||||
|
||||
@@ -887,7 +904,8 @@ sub removeDevice {
|
||||
print "\t-> Closing virtual device '$device'..\n";
|
||||
|
||||
if ($SCST->closeDevice($_handler, $device)) {
|
||||
print "WARNING: Failed to close virtual device '$device'.\n";
|
||||
print "WARNING: Failed to close virtual device '$device': ".
|
||||
$SCST->errorString();
|
||||
return $TRUE;
|
||||
}
|
||||
|
||||
@@ -907,7 +925,8 @@ sub addGroup {
|
||||
print "\t-> Creating security group '$group'..\n";
|
||||
|
||||
if ($SCST->addGroup($group)) {
|
||||
print "WARNING: Failed to create security group '$group'.\n";
|
||||
print "WARNING: Failed to create security group '$group': ".
|
||||
$SCST->errorString()."\n";
|
||||
return $TRUE;
|
||||
}
|
||||
|
||||
@@ -927,7 +946,8 @@ sub removeGroup {
|
||||
print "\t-> Removing security group '$group'..\n";
|
||||
|
||||
if ($SCST->removeGroup($group)) {
|
||||
print "WARNING: Failed to remove security group '$group'.\n";
|
||||
print "WARNING: Failed to remove security group '$group': ".
|
||||
$SCST->errorString()."\n";
|
||||
return $TRUE;
|
||||
}
|
||||
|
||||
@@ -953,7 +973,8 @@ sub addUser {
|
||||
print "\t-> Adding user '$user' to security group '$group'..\n";
|
||||
|
||||
if ($SCST->addUser($user, $group)) {
|
||||
print "WARNING: Failed to add user '$user' to security group '$group'.\n";
|
||||
print "WARNING: Failed to add user '$user' to security group '$group': ".
|
||||
$SCST->errorString()."\n";
|
||||
return $TRUE;
|
||||
}
|
||||
|
||||
@@ -979,7 +1000,8 @@ sub removeUser {
|
||||
print "\t-> Removing user '$user' from security group '$group'..\n";
|
||||
|
||||
if ($SCST->removeUser($user, $group)) {
|
||||
print "WARNING: Failed to add user '$user' to security group '$group'.\n";
|
||||
print "WARNING: Failed to add user '$user' to security group '$group': ".
|
||||
$SCST->errorString()."\n";
|
||||
return $TRUE;
|
||||
}
|
||||
|
||||
@@ -999,7 +1021,8 @@ sub clearUsers {
|
||||
print "\t-> Clearing users from security group '$group'..\n";
|
||||
|
||||
if ($SCST->clearUsers($group)) {
|
||||
print "WARNING: Failed to clear users from security group '$group'.\n";
|
||||
print "WARNING: Failed to clear users from security group '$group': ".
|
||||
$SCST->errorString()."\n";
|
||||
return $TRUE;
|
||||
}
|
||||
|
||||
@@ -1052,7 +1075,8 @@ sub assignDevice {
|
||||
print "\t-> Assign virtual device '$device' to group '$group' at LUN '$lun'..\n";
|
||||
|
||||
if ($SCST->assignDeviceToGroup($device, $group, $lun)) {
|
||||
print "WARNING: Failed to assign device '$device' to group '$group'.\n";
|
||||
print "WARNING: Failed to assign device '$device' to group '$group': ".
|
||||
$SCST->errorString()."\n";
|
||||
return $TRUE;
|
||||
}
|
||||
|
||||
@@ -1085,7 +1109,8 @@ sub releaseDevice {
|
||||
print "\t-> Release virtual device '$device' from group '$group'..\n";
|
||||
|
||||
if ($SCST->removeDeviceFromGroup($device, $group)) {
|
||||
print "WARNING: Failed to release device '$device' from group '$group'.\n";
|
||||
print "WARNING: Failed to release device '$device' from group '$group': ".
|
||||
$SCST->errorString()."\n";
|
||||
return $TRUE;
|
||||
}
|
||||
|
||||
@@ -1107,7 +1132,8 @@ sub clearDevices {
|
||||
print "\t-> Clear virtual devices from group '$group'..\n";
|
||||
|
||||
if ($SCST->clearGroupDevices($group)) {
|
||||
print "WARNING: Failed to clear devices from group '$group'.\n";
|
||||
print "WARNING: Failed to clear devices from group '$group': ".
|
||||
$SCST->errorString()."\n";
|
||||
return $TRUE;
|
||||
}
|
||||
|
||||
@@ -1263,6 +1289,18 @@ sub unformatTarget {
|
||||
return $target;
|
||||
}
|
||||
|
||||
# If we have an unread error from SCST, exit immediately
|
||||
sub immediateExit {
|
||||
my $error = shift;
|
||||
|
||||
return if (!$error);
|
||||
|
||||
print "\n\nFATAL: Received the following error:\n\n\t";
|
||||
print "$error\n\n";
|
||||
|
||||
exit 1;
|
||||
}
|
||||
|
||||
# Hey! Stop that!
|
||||
sub commitSuicide {
|
||||
print "\n\nAborting immediately.\n";
|
||||
|
||||
Reference in New Issue
Block a user