- Added -moveuser, -renamegroup and -ReplaceDev options and necessary -to argument.

- Fixed minor bug in new renameGroup() method in SCST::SCST.



git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1102 d57e44dd-8a1f-0410-8b47-8ef2f437770f
This commit is contained in:
Mark Buechler
2009-09-16 19:28:13 +00:00
parent efe48552bc
commit c4061f22e2
3 changed files with 160 additions and 10 deletions

View File

@@ -1,3 +1,8 @@
Changes for 1.0.7
- Added -moveuser, -renamegroup and -ReplaceDev options and necessary -to argument.
- Fixed minor bug in new renameGroup() method in SCST::SCST.
Changes for 1.0.6
- Added -resyncdev option to work with the new SCST resync_size option.

View File

@@ -252,7 +252,7 @@ sub renameGroup {
my $oldName = shift;
my $newName = shift;
if ($self->groupExists($oldName)) {
if (!$self->groupExists($oldName)) {
$self->{'error'} = "renameGroup(): Group '$oldName' doesn't exist";
return 1;
}

View File

@@ -1,5 +1,5 @@
#!/usr/bin/perl
$Version = 'SCST Configurator v1.0.6';
$Version = 'SCST Configurator v1.0.7';
# Configures SCST
#
@@ -38,6 +38,9 @@ Device Operations
User Operations
-adduser <user> : Adds a user to a security group.
-group <group>
-MoveUser <user> : Moves a user from one security group to another.
-group <group 1>
-to <group 2>
-RemoveUser <user> : Delete a user from a security group.
-group <group>
-ClearUsers : Clear all users from a given security group.
@@ -45,12 +48,17 @@ User Operations
Group Operations
-addgroup <group> : Add a given group to available security groups.
-renamegroup <group> : Renames a give group to a new name.
-to <new group>
-RemoveGroup <group> : Remove a give group from available security groups.
Assignment Operations
-assigndev <device> : Assign a given device to a security group.
-group <group>
-lun <lun>
-ReplaceDev <new dev>: Replaces a device assigned to a give LUN and group.
-group <group>
-lun <lun>
-ReleaseDev <device> : Remove a given device from a security group.
-group <group>
-ClearDevs : Clear all device assignments for a security group.
@@ -84,6 +92,9 @@ Examples:
Assign a device to a security group:
scstadmin -assigndev DISK01 -group HOST01 -lun 1
Rename a security group:
scstadmin -RenameGroup HOST01 -to SERVER01
EndUsage
}
@@ -172,13 +183,18 @@ sub getArgs {
my $addDev;
my $devPath;
my $resyncDev;
my $replaceDev;
my $removeDev;
my $addUser;
my $moveUser;
my $removeUser;
my $clearUsers;
my $addGroup;
my $toGroup;
my $renameGroup;
my $removeGroup;
my $assignDev;
my $replaceDev;
my $releaseDev;
my $clearDevs;
my $devLun;
@@ -199,13 +215,17 @@ sub getArgs {
'sessions' => \$showSessions,
'adddev=s' => \$addDev,
'path=s' => \$devPath,
'ReplaceDev=s' => \$replaceDev,
'RemoveDev=s' => \$removeDev,
'lun=s' => \$devLun,
'adduser=s' => \$addUser,
'MoveUser=s' => \$moveUser,
'RemoveUser=s' => \$removeUser,
'ClearUsers' => \$clearUsers,
'addgroup=s' => \$addGroup,
'to=s' => \$toGroup,
'RemoveGroup=s' => \$removeGroup,
'renamegroup=s' => \$renameGroup,
'assigndev=s' => \$assignDev,
'resyncdev=s' => \$resyncDev,
'ReleaseDev=s' => \$releaseDev,
@@ -269,6 +289,11 @@ sub getArgs {
usage();
}
if ($moveUser && (!defined($group) || !defined($toGroup))) {
print "Please specify -group and -to with -MoveUser.\n\n";
usage();
}
if ($removeUser && !defined($group)) {
print "Please specify -group with -RemoveUser.\n\n";
usage();
@@ -279,8 +304,18 @@ sub getArgs {
usage();
}
if ($assignDev && !(defined($group) && defined($devLun))) {
print "Please specify -group and -lun with -assigndev.\n\n";
if ($renameGroup && !defined($toGroup)) {
print "Please specify -to with -renamegroup.\n\n";
usage();
}
if ($assignDev && !defined($group)) {
print "Please specify -group with -assigndev.\n\n";
usage();
}
if ($replaceDev && (!defined($group) || !defined($devLun))) {
print "Please specify -group and -lun with -ReplaceDev.\n\n";
usage();
}
@@ -320,9 +355,9 @@ sub getArgs {
$checkConfig = $_DEF_CONFIG_ if (defined($checkConfig) && !$checkConfig);
return ($enable, $disable, $addDev, $devPath, $devLun, $resyncDev, $removeDev, $addUser,
$removeUser, $clearUsers, $addGroup, $removeGroup, $assignDev, $releaseDev,
$clearDevs, $handler, $group, $options, $blocksize, $applyConfig, $forceConfig,
$clearConfig, $writeConfig, $checkConfig, $showSessions);
$moveUser, $removeUser, $clearUsers, $addGroup, $renameGroup, $toGroup, $removeGroup,
$assignDev, $replaceDev, $releaseDev, $clearDevs, $handler, $group, $options, $blocksize,
$applyConfig, $forceConfig, $clearConfig, $writeConfig, $checkConfig, $showSessions);
}
sub main {
@@ -334,9 +369,9 @@ sub main {
if ( $> ) {die("This program must run as root.\n");}
my ($enable, $disable, $addDev, $devPath, $devLun, $resyncDev, $removeDev, $addUser,
$removeUser, $clearUsers, $addGroup, $removeGroup, $assignDev, $releaseDev,
$clearDevs, $handler, $group, $options, $blocksize, $applyConfig, $forceConfig,
$clearConfig, $writeConfig, $checkConfig, $showSessions) = getArgs();
$moveUser, $removeUser, $clearUsers, $addGroup, $renameGroup, $toGroup, $removeGroup,
$assignDev, $replaceDev, $releaseDev, $clearDevs, $handler, $group, $options, $blocksize,
$applyConfig, $forceConfig, $clearConfig, $writeConfig, $checkConfig, $showSessions) = getArgs();
$SCST = new SCST::SCST($_DEBUG_);
@@ -388,6 +423,10 @@ sub main {
$rc = addUser($group, $addUser);
last SWITCH;
};
$moveUser && do {
$rc = moveUser($group, $moveUser, $toGroup);
last SWITCH;
};
$removeUser && do {
$rc = removeUser($group, $removeUser);
last SWITCH;
@@ -400,6 +439,10 @@ sub main {
$rc = addGroup($addGroup);
last SWITCH;
};
$renameGroup && do {
$rc = renameGroup($renameGroup, $toGroup);
last SWITCH;
};
$removeGroup && do {
$rc = removeGroup($removeGroup);
last SWITCH;
@@ -408,6 +451,10 @@ sub main {
$rc = assignDevice($group, $assignDev, $devLun);
last SWITCH;
};
$replaceDev && do {
$rc = replaceDevice($group, $replaceDev, $devLun);
last SWITCH;
};
$releaseDev && do {
$rc = releaseDevice($group, $releaseDev);
last SWITCH;
@@ -1136,6 +1183,29 @@ sub addGroup {
return $FALSE;
}
sub renameGroup {
my $group = shift;
my $toGroup = shift;
if (defined($GROUPS{$toGroup})) {
print "WARNING: Group '$toGroup' already exists.\n";
return $TRUE;
}
print "\t-> Renaming security group '$group' to '$toGroup'..\n";
if ($SCST->renameGroup($group, $toGroup)) {
print "WARNING: Failed to rename security group '$group' to ".
"'$toGroup': ".$SCST->errorString()."\n";
return $TRUE;
}
delete $GROUPS{$group};
$GROUPS{$toGroup}++;
return $FALSE;
}
sub removeGroup {
my $group = shift;
@@ -1186,6 +1256,35 @@ sub addUser {
return $FALSE;
}
sub moveUser {
my $group = shift;
my $user = shift;
my $toGroup = shift;
if (!defined($GROUPS{$group})) {
print "WARNING: Failed to move user '$user' from group '$group', group does not exist.\n";
return $TRUE;
}
if (defined($USERS{$toGroup}->{$user})) {
print "WARNING: User '$user' already exists in security group '$toGroup'.\n";
return $TRUE;
}
print "\t-> Moving user '$user' from security group '$group' to security group '$toGroup'..\n";
if ($SCST->moveUser($user, $group, $toGroup)) {
print "WARNING: Failed to move user '$user' from security group '$group' to ".
"security group '$toGroup': ".$SCST->errorString()."\n";
return $TRUE;
}
delete $USERS{$group}->{$user};
$USERS{$toGroup}->{$user}++;
return $FALSE;
}
sub removeUser {
my $group = shift;
my $user = shift;
@@ -1295,6 +1394,52 @@ sub assignDevice {
return $FALSE;
}
sub replaceDevice {
my $group = shift;
my $newDevice = shift;
my $lun = shift;
my %allLuns;
# Put luns into something easier to parse..
foreach my $_group (keys %ASSIGNMENTS) {
my $_gAssigns = $ASSIGNMENTS{$_group};
foreach my $_device (keys %{$_gAssigns}) {
@{$allLuns{$_group}}[$$_gAssigns{$_device}] = $_device;
}
}
if (!defined($$DEVICES{$newDevice})) {
print "WARNING: Unable to assign non-existant device '$newDevice' to group '$group'.\n";
return $TRUE;
}
if (${$allLuns{$group}}[$lun] eq $newDevice) {
print "ERROR: Device '$newDevice': Lun '$lun' is already assigned to device '$newDevice'.\n";
return $TRUE;
}
print "\t-> Replace device at LUN '$lun' in group '$group' with new device '$newDevice'..\n";
if ($SCST->replaceDeviceInGroup($newDevice, $group, $lun)) {
print "WARNING: Failed to replace LUN '$lun' in group '$group' with new device '$newDevice': ".
$SCST->errorString()."\n";
return $TRUE;
}
if (!defined($ASSIGNMENTS{$group})) {
my %assignments_t;
$ASSIGNMENTS{$group} = \%assignments_t;
}
my $_assignments = $ASSIGNMENTS{$group};
delete $$_assignments{${$allLuns{$group}}[$lun]};
$$_assignments{$newDevice} = $lun;
return $FALSE;
}
sub releaseDevice {
my $group = shift;
my $device = shift;