summaryrefslogtreecommitdiffstats
path: root/config-db/slxconfig
diff options
context:
space:
mode:
authorOliver Tappe2007-11-29 14:19:16 +0100
committerOliver Tappe2007-11-29 14:19:16 +0100
commit355fafc70d0a8d98b1c73e9e7bd8aa109263fe85 (patch)
treed4eb3bb0bbe8aa7a70f7665d03a0ad89487f78c9 /config-db/slxconfig
parent* changed meaning of groups.priority such that it corresponds with sorting (diff)
downloadcore-355fafc70d0a8d98b1c73e9e7bd8aa109263fe85.tar.gz
core-355fafc70d0a8d98b1c73e9e7bd8aa109263fe85.tar.xz
core-355fafc70d0a8d98b1c73e9e7bd8aa109263fe85.zip
* added support for groups (add, change, list, remove and search)
This has not been tested yet, so beware! git-svn-id: http://svn.openslx.org/svn/openslx/trunk@1413 95ad53e4-c205-0410-b2fa-d234c58c8868
Diffstat (limited to 'config-db/slxconfig')
-rwxr-xr-xconfig-db/slxconfig417
1 files changed, 351 insertions, 66 deletions
diff --git a/config-db/slxconfig b/config-db/slxconfig
index 5c58ba82..46cb01b8 100755
--- a/config-db/slxconfig
+++ b/config-db/slxconfig
@@ -36,7 +36,6 @@ use lib "$FindBin::RealBin/../config-db";
use OpenSLX::Basics;
use OpenSLX::ConfigDB;
use OpenSLX::ConfigFolder;
-use OpenSLX::DBSchema;
use OpenSLX::Utils;
my ($helpReq, $manReq, $verbose, $versionReq,);
@@ -130,19 +129,24 @@ else {
vlog(0, _tr(unshiftHereDoc(<<' END-OF-HERE'), $0));
You need to specify exactly one of these actions:
add-client
+ add-group
add-system
change-client
change-export
+ change-group
change-system
change-vendor-os
list-client
list-export
+ list-group
list-system
list-vendor-os
remove-client
+ remove-group
remove-system
search-client
search-export
+ search-group
search-system
search-vendor-os
Try '%s --help' for more info.
@@ -171,6 +175,7 @@ sub parseKeyValueArgs
}
$dataHash{$key} = $value;
}
+
return \%dataHash;
}
@@ -197,7 +202,8 @@ sub dumpElements
else {
print join('', sort map { $nameClause->($_); } @_);
}
- return;
+
+ return 1;
}
sub listClients
@@ -226,7 +232,8 @@ sub listClients
sort { $a->{name} cmp $b->{name} }
$openslxDB->fetchClientByFilter(\%nameSpec)
);
- return;
+
+ return 1;
}
sub listGroups
@@ -244,17 +251,23 @@ sub listGroups
dumpElements(
'groups', undef,
map {
- my @sysIDs = $openslxDB->fetchSystemIDsOfGroup($_->{id});
+ my @systemIDs = $openslxDB->fetchSystemIDsOfGroup($_->{id});
$_->{systems}
= join "\n", map { $_->{name} }
sort { $a->{name} cmp $b->{name} }
- $openslxDB->fetchSystemByID(\@sysIDs, 'name');
+ $openslxDB->fetchSystemByID(\@systemIDs, 'name');
+ my @clientIDs = $openslxDB->fetchClientIDsOfGroup($_->{id});
+ $_->{clients}
+ = join "\n", map { $_->{name} }
+ sort { $a->{name} cmp $b->{name} }
+ $openslxDB->fetchClientByID(\@clientIDs, 'name');
$_;
}
sort { $a->{name} cmp $b->{name} }
$openslxDB->fetchGroupByFilter(\%nameSpec)
);
- return;
+
+ return 1;
}
sub listExports
@@ -287,7 +300,8 @@ sub listExports
sort { $a->{name} eq $b->{name} || $a->{type} cmp $b->{type} }
$openslxDB->fetchExportByFilter(\%nameSpec)
);
- return;
+
+ return 1;
}
sub listSystems
@@ -320,7 +334,8 @@ sub listSystems
sort { $a->{name} cmp $b->{name} }
$openslxDB->fetchSystemByFilter(\%nameSpec)
);
- return;
+
+ return 1;
}
sub listVendorOSes
@@ -338,14 +353,13 @@ sub listVendorOSes
dumpElements('vendor-OS', undef,
sort { $a->{name} cmp $b->{name} }
$openslxDB->fetchVendorOSByFilter(\%nameSpec));
- return;
+
+ return 1;
}
sub searchClients
{
- my @clientKeys =
- map { (/^(\w+)\W/) ? $1 : $_; } @{$DbSchema->{tables}->{client}};
-
+ my @clientKeys = $openslxDB->getColumnsForTable('client');
my $clientData = parseKeyValueArgs(\@clientKeys, 'client', @_);
# set verbose mode if any params have been passed in:
@@ -364,14 +378,43 @@ sub searchClients
sort { $a->{name} cmp $b->{name} }
$openslxDB->fetchClientByFilter($clientData)
);
- return;
+
+ return 1;
}
-sub searchExports
+sub searchGroups
{
- my @exportKeys =
- map { (/^(\w+)\W/) ? $1 : $_; } @{$DbSchema->{tables}->{export}};
+ my @groupKeys = $openslxDB->getColumnsForTable('groups');
+ my $groupData = parseKeyValueArgs(\@groupKeys, 'groups', @_);
+
+ # set verbose mode if any params have been passed in:
+ $verbose = 1 if %$groupData;
+ dumpElements(
+ 'group', undef,
+ map {
+ my @systemIDs = $openslxDB->fetchSystemIDsOfGroup($_->{id});
+ $_->{systems}
+ = join "\n", map { $_->{name} }
+ sort { $a->{name} cmp $b->{name} }
+ $openslxDB->fetchSystemByID(\@systemIDs, 'name');
+ my @clientIDs = $openslxDB->fetchClientIDsOfGroup($_->{id});
+ $_->{clients}
+ = join "\n", map { $_->{name} }
+ sort { $a->{name} cmp $b->{name} }
+ $openslxDB->fetchClientByID(\@clientIDs, 'name');
+ $_;
+ }
+ sort { $a->{name} cmp $b->{name} }
+ $openslxDB->fetchGroupByFilter($groupData)
+ );
+
+ return 1;
+}
+
+sub searchExports
+{
+ my @exportKeys = $openslxDB->getColumnsForTable('export');
my $exportData = parseKeyValueArgs(\@exportKeys, 'export', @_);
# set verbose mode if any params have been passed in:
@@ -395,14 +438,13 @@ sub searchExports
sort { $a->{name} eq $b->{name} || $a->{type} cmp $b->{type} }
$openslxDB->fetchExportByFilter($exportData)
);
- return;
+
+ return 1;
}
sub searchSystems
{
- my @systemKeys =
- map { (/^(\w+)\W/) ? $1 : $_; } @{$DbSchema->{tables}->{system}};
-
+ my @systemKeys = $openslxDB->getColumnsForTable('system');
my $systemData = parseKeyValueArgs(\@systemKeys, 'system', @_);
# set verbose mode if any params have been passed in:
@@ -424,14 +466,13 @@ sub searchSystems
sort { $a->{name} cmp $b->{name} }
$openslxDB->fetchSystemByFilter($systemData)
);
- return;
+
+ return 1;
}
sub searchVendorOSes
{
- my @vendorOSKeys =
- map { (/^(\w+)\W/) ? $1 : $_; } @{$DbSchema->{tables}->{vendor_os}};
-
+ my @vendorOSKeys = $openslxDB->getColumnsForTable('vendor_os');
my $vendorOSData = parseKeyValueArgs(\@vendorOSKeys, 'vendor_os', @_);
# set verbose mode if any params have been passed in:
@@ -440,7 +481,8 @@ sub searchVendorOSes
dumpElements('vendor-OS', undef,
sort { $a->{name} cmp $b->{name} }
$openslxDB->fetchVendorOSByFilter($vendorOSData));
- return;
+
+ return 1;
}
sub changeVendorOSInConfigDB
@@ -453,8 +495,7 @@ sub changeVendorOSInConfigDB
);
}
- my @keys =
- map { (/^(\w+)\W/) ? $1 : $_; } @{$DbSchema->{tables}->{vendor_os}};
+ my @keys = $openslxDB->getColumnsForTable('vendor_os');
my $vendorOSData = parseKeyValueArgs(\@keys, 'vendor_os', @_);
my $vendorOS = $openslxDB->fetchVendorOSByFilter({'name' => $vendorOSName});
@@ -468,7 +509,8 @@ sub changeVendorOSInConfigDB
if ($verbose) {
listVendorOSes("id=$vendorOS->{id}");
}
- return;
+
+ return 1;
}
sub changeExportInConfigDB
@@ -481,8 +523,7 @@ sub changeExportInConfigDB
);
}
- my @exportKeys =
- map { (/^(\w+)\W/) ? $1 : $_; } @{$DbSchema->{tables}->{export}};
+ my @exportKeys = $openslxDB->getColumnsForTable('export');
my $exportData = parseKeyValueArgs(\@exportKeys, 'export', @_);
my $export = $openslxDB->fetchExportByFilter({'name' => $exportName});
@@ -496,7 +537,8 @@ sub changeExportInConfigDB
if ($verbose) {
listExports("id=$export->{id}");
}
- return;
+
+ return 1;
}
sub addClientToConfigDB
@@ -507,8 +549,7 @@ sub addClientToConfigDB
die _tr("you have to specify the name for the new client\n");
}
- my @clientKeys =
- map { (/^(\w+)\W/) ? $1 : $_; } @{$DbSchema->{tables}->{client}};
+ my @clientKeys = $openslxDB->getColumnsForTable('client');
push @clientKeys, 'systems';
my $clientData = parseKeyValueArgs(\@clientKeys, 'client', @_);
$clientData->{name} = $clientName;
@@ -561,7 +602,76 @@ sub addClientToConfigDB
if ($verbose) {
listClients("id=$clientID");
}
- return;
+
+ return 1;
+}
+
+sub addGroupToConfigDB
+{
+ my $groupName = _cleanName(shift || '');
+
+ if (!length($groupName)) {
+ die _tr("you have to specify the name for the new group\n");
+ }
+
+ my @groupKeys = $openslxDB->getColumnsForTable('groups');
+ push @groupKeys, 'systems', 'clients';
+ my $groupData = parseKeyValueArgs(\@groupKeys, 'groups', @_);
+ $groupData->{name} = $groupName;
+
+ my @systemIDs;
+ if (exists $groupData->{systems}) {
+ @systemIDs = map {
+ my $system = $openslxDB->fetchSystemByFilter({'name' => $_});
+ if (!defined $system) {
+ die _tr("system '%s' doesn't exist!\n", $_);
+ }
+ $system->{id};
+ }
+ split '\s*,\s*', $groupData->{systems};
+ delete $groupData->{systems};
+ }
+ my @clientIDs;
+ if (exists $groupData->{clients}) {
+ @clientIDs = map {
+ my $client = $openslxDB->fetchClientByFilter({'name' => $_});
+ if (!defined $client) {
+ die _tr("client '%s' doesn't exist in DB, giving up!\n", $_);
+ }
+ $client->{id};
+ }
+ split '\s*,\s*', $groupData->{clients};
+ delete $groupData->{clients};
+ }
+
+ if (!defined $groupData->{priority} || !length($groupData->{priority})) {
+ $groupData->{priority} = 50;
+ vlog(0, _tr("priority of new group has been set to default (50)."));
+ }
+
+ if ($openslxDB->fetchGroupByFilter({'name' => $groupName})) {
+ die _tr("the group '%s' already exists in the DB, giving up!\n",
+ $groupName);
+ }
+ my $groupID = $openslxDB->addGroup([$groupData]);
+ vlog(
+ 0,
+ _tr(
+ "group '%s' has been successfully added to DB (ID=%s)\n",
+ $groupName, $groupID
+ )
+ );
+ if (@systemIDs) {
+ $openslxDB->addSystemIDsToGroup($groupID, \@systemIDs);
+ }
+ if (@clientIDs) {
+ $openslxDB->addClientIDsToGroup($groupID, \@clientIDs);
+ }
+ if ($verbose) {
+ listGroups("id=$groupID");
+ }
+
+ return 1;
}
sub addSystemToConfigDB
@@ -572,8 +682,7 @@ sub addSystemToConfigDB
die _tr("you have to specify the name of the new system!\n");
}
- my @systemKeys =
- map { (/^(\w+)\W/) ? $1 : $_; } @{$DbSchema->{tables}->{system}};
+ my @systemKeys = $openslxDB->getColumnsForTable('system');
push @systemKeys, 'clients', 'export';
my $systemData = parseKeyValueArgs(\@systemKeys, 'system', @_);
$systemData->{name} = $systemName;
@@ -657,7 +766,8 @@ sub addSystemToConfigDB
if ($verbose) {
listSystems("id=$systemID");
}
- return;
+
+ return 1;
}
sub changeClientInConfigDB
@@ -666,12 +776,11 @@ sub changeClientInConfigDB
if (!length($clientName)) {
die _tr(
- "you have to specify the name for the client you'd like to change!\n"
+ "you have to specify the name of the client you'd like to change!\n"
);
}
- my @clientKeys =
- map { (/^(\w+)\W/) ? $1 : $_; } @{$DbSchema->{tables}->{client}};
+ my @clientKeys = $openslxDB->getColumnsForTable('client');
push @clientKeys, 'systems', 'add-systems', 'remove-systems';
my $clientData = parseKeyValueArgs(\@clientKeys, 'client', @_);
@@ -689,8 +798,8 @@ sub changeClientInConfigDB
die _tr("system '%s' doesn't exist!\n", $_);
}
$system->{id};
- }
- split ",", $clientData->{systems};
+ }
+ split ",", $clientData->{systems};
delete $clientData->{systems};
}
if (exists $clientData->{'add-systems'}) {
@@ -701,8 +810,8 @@ sub changeClientInConfigDB
die _tr("system '%s' doesn't exist!\n", $_);
}
$system->{id};
- }
- split ",", $clientData->{'add-systems'};
+ }
+ split ",", $clientData->{'add-systems'};
delete $clientData->{'add-systems'};
}
if (exists $clientData->{'remove-systems'}) {
@@ -739,7 +848,121 @@ sub changeClientInConfigDB
if ($verbose) {
listClients("id=$client->{id}");
}
- return;
+
+ return 1;
+}
+
+sub changeGroupInConfigDB
+{
+ my $groupName = _cleanName(shift || '');
+
+ if (!length($groupName)) {
+ die _tr(
+ "you have to specify the name of the group you'd like to change!\n"
+ );
+ }
+
+ my @groupKeys = $openslxDB->getColumnsForTable('group');
+ push @groupKeys, qw(
+ systems add-systems remove-systems clients add-clients remove-clients
+ );
+ my $groupData = parseKeyValueArgs(\@groupKeys, 'group', @_);
+
+ my $group = $openslxDB->fetchGroupByFilter({'name' => $groupName});
+ if (!defined $group) {
+ die _tr("the group '%s' doesn't exists in the DB, giving up!\n",
+ $groupName);
+ }
+
+ my (@systemIDs, @clientIDs);
+ if (exists $groupData->{systems}) {
+ @systemIDs = map {
+ my $system = $openslxDB->fetchSystemByFilter({'name' => $_});
+ if (!defined $system) {
+ die _tr("system '%s' doesn't exist!\n", $_);
+ }
+ $system->{id};
+ }
+ split ",", $groupData->{systems};
+ delete $groupData->{systems};
+ }
+ if (exists $groupData->{'add-systems'}) {
+ @systemIDs = $openslxDB->fetchSystemIDsOfGroup($group->{id});
+ push @systemIDs, map {
+ my $system = $openslxDB->fetchSystemByFilter({'name' => $_});
+ if (!defined $system) {
+ die _tr("system '%s' doesn't exist!\n", $_);
+ }
+ $system->{id};
+ }
+ split ",", $groupData->{'add-systems'};
+ delete $groupData->{'add-systems'};
+ }
+ if (exists $groupData->{'remove-systems'}) {
+ @systemIDs = $openslxDB->fetchSystemIDsOfGroup($group->{id});
+ foreach my $sysName (split ',', $groupData->{'remove-systems'}) {
+ my $system = $openslxDB->fetchSystemByFilter({'name' => $sysName});
+ if (!defined $system) {
+ die _tr("system '%s' doesn't exist!\n", $sysName);
+ }
+ @systemIDs = grep { $_ != $system->{id} } @systemIDs;
+ }
+ delete $groupData->{'remove-systems'};
+ }
+ if (exists $groupData->{clients}) {
+ @clientIDs = map {
+ my $client = $openslxDB->fetchClientByFilter({'name' => $_});
+ if (!defined $client) {
+ die _tr("client '%s' doesn't exist in DB, giving up!\n", $_);
+ }
+ $client->{id};
+ }
+ split ",", $groupData->{clients};
+ delete $groupData->{clients};
+ }
+ if (exists $groupData->{'add-clients'}) {
+ @clientIDs = $openslxDB->fetchClientIDsOfGroup($group->{id});
+ push @clientIDs, map {
+ my $client = $openslxDB->fetchClientByFilter({'name' => $_});
+ if (!defined $client) {
+ die _tr("client '%s' doesn't exist!\n", $_);
+ }
+ $client->{id};
+ }
+ split ",", $groupData->{'add-clients'};
+ delete $groupData->{'add-clients'};
+ }
+ if (exists $groupData->{'remove-clients'}) {
+ @clientIDs = $openslxDB->fetchClientIDsOfGroup($group->{id});
+ foreach my $clientName (split ",", $groupData->{'remove-clients'}) {
+ my $client =
+ $openslxDB->fetchClientByFilter({'name' => $clientName});
+ if (!defined $client) {
+ die _tr("client '%s' doesn't exist!\n", $clientName);
+ }
+ @clientIDs = grep { $_ != $client->{id} } @clientIDs;
+ }
+ delete $groupData->{'remove-clients'};
+ }
+
+ if (defined $groupData->{priority} && $groupData->{priority} !~ m{^\d+$}) {
+ die _tr("unknown priority-format given, expected an integer!\n");
+ }
+
+ $openslxDB->changeGroup($group->{id}, [$groupData]);
+ vlog(0, _tr("group '%s' has been successfully changed\n", $groupName));
+ if (@systemIDs) {
+ $openslxDB->setSystemIDsOfGroup($group->{id}, \@systemIDs);
+ }
+ if (@clientIDs) {
+ $openslxDB->setClientIDsOfGroup($group->{id}, \@clientIDs);
+ }
+ if ($verbose) {
+ listGroups("id=$group->{id}");
+ }
+
+
+ return 1;
}
sub changeSystemInConfigDB
@@ -752,8 +975,7 @@ sub changeSystemInConfigDB
);
}
- my @systemKeys =
- map { (/^(\w+)\W/) ? $1 : $_; } @{$DbSchema->{tables}->{system}};
+ my @systemKeys = $openslxDB->getColumnsForTable('system');
push @systemKeys, 'clients', 'add-clients', 'remove-clients';
my $systemData = parseKeyValueArgs(\@systemKeys, 'system', @_);
@@ -771,8 +993,8 @@ sub changeSystemInConfigDB
die _tr("client '%s' doesn't exist in DB, giving up!\n", $_);
}
$client->{id};
- }
- split ",", $systemData->{clients};
+ }
+ split ",", $systemData->{clients};
delete $systemData->{clients};
}
if (exists $systemData->{'add-clients'}) {
@@ -783,8 +1005,8 @@ sub changeSystemInConfigDB
die _tr("client '%s' doesn't exist!\n", $_);
}
$client->{id};
- }
- split ",", $systemData->{'add-clients'};
+ }
+ split ",", $systemData->{'add-clients'};
delete $systemData->{'add-clients'};
}
if (exists $systemData->{'remove-clients'}) {
@@ -812,7 +1034,8 @@ sub changeSystemInConfigDB
if ($verbose) {
listSystems("id=$system->{id}");
}
- return;
+
+ return 1;
}
sub removeClientFromConfigDB
@@ -839,7 +1062,33 @@ sub removeClientFromConfigDB
vlog(0,
_tr("client '%s' has been successfully removed from DB\n", $clientName)
);
- return;
+
+ return 1;
+}
+
+sub removegroupFromConfigDB
+{
+ my $groupName = _cleanName(shift || '');
+
+ if (!length($groupName)) {
+ die _tr(
+ "you have to specify the name of the group you'd like to remove!\n"
+ );
+ }
+
+ my $groupData = parseKeyValueArgs(['name'], 'groups', @_);
+
+ my $group = $openslxDB->fetchGroupByFilter({'name' => $groupName});
+ if (!defined $group) {
+ die _tr("the group '%s' doesn't exists in the DB, giving up!\n",
+ $groupName);
+ }
+ $openslxDB->removeGroup($group->{id});
+ vlog(0,
+ _tr("group '%s' has been successfully removed from DB\n", $groupName)
+ );
+
+ return 1;
}
sub removeSystemFromConfigDB
@@ -866,7 +1115,8 @@ sub removeSystemFromConfigDB
vlog(0,
_tr("system '%s' has been successfully removed from DB\n", $systemName)
);
- return;
+
+ return 1;
}
sub _cleanName
@@ -879,6 +1129,7 @@ sub _cleanName
if ($name =~ m[^name=(.+)$]) {
return $1;
}
+
return $name;
}
@@ -911,6 +1162,10 @@ adds a new client to the config-DB
adds a new system to the config-DB
+=item B<< add-group <group-name> [priority=<Number>] [<key>=<value> ...] >>
+
+adds a new group to the config-DB
+
=item B<< change-vendor-os <vendor-os-name> [<key>=<value> ...] >>
changes the data of an existing vendor-OS in the config-DB
@@ -923,6 +1178,10 @@ changes the data of an existing export in the config-DB
changes the data of an existing client in the config-DB
+=item B<< change-group <group-name> [<key>=<value> ...] >>
+
+changes the data of an existing group in the config-DB
+
=item B<< change-system <system-name> [<key>=<value> ...] >>
changes the data of an existing system in the config-DB
@@ -935,6 +1194,10 @@ lists client with given name
lists export with given name
+=item B<< list-group [<group-name>] >>
+
+lists group with given name
+
=item B<< list-system [<system-name>] >>
lists system with given name
@@ -947,6 +1210,10 @@ lists vendor-OS with given name
removes a client from the config-DB
+=item B<< remove-group <group-name> >>
+
+removes a group from the config-DB
+
=item B<< remove-system <system-name> >>
removes a system from the config-DB
@@ -959,6 +1226,10 @@ shows all clients in config-DB (optionally matching given criteria)
shows all exports in config-DB (optionally matching given criteria)
+=item B<< search-group [<key>=<value> ...] >>
+
+shows all groups in config-DB (optionally matching given criteria)
+
=item B<< search-system [<key>=<value> ...] >>
shows all systems in config-DB (optionally matching given
@@ -1000,7 +1271,7 @@ Prints the version and exits.
=head1 EXAMPLES
-=head3 Listing existing Clients / Exports / Systems / Vendor-OSes
+=head3 Listing existing Clients / Exports / Groups / Systems / Vendor-OSes
=over 8
@@ -1008,20 +1279,14 @@ Prints the version and exits.
=item B<< slxconfig list-export >>
+=item B<< slxconfig list-group >>
+
=item B<< slxconfig list-system >>
=item B<< slxconfig list-vendor-os >>
lists all existing instances of the respective DB-objects.
-=item B<< slxconfig list-client id=3 >>
-
-lists the client with id=3
-
-=item B<< slxconfig list-export type=nfs >>
-
-lists the exports of type 'nfs'
-
=back
=head3 Adding a new System to an exported Vendor-OS
@@ -1115,15 +1380,35 @@ will remove the system 'Debian-4.0' from the client named
=back
-=head3 Removing a System / Client
+=head3 Removing a Client / Group / System
=over 8
+=item B<< slxconfig remove-client <client-name> >>
+
+=item B<< slxconfig remove-group <group-name> >>
+
=item B<< slxconfig remove-system <system-name> >>
-=item B<< slxconfig remove-client <client-name> >>
+removes the client/group/system with the given name.
+
+=back
+
+=head3 Searching for Clients / Exports / Groups / Systems / Vendor-OSes
+
+=over 8
+
+=item B<< slxconfig search-client mac='01:02:03:04:05:06' >>
+
+displays all clients with the MAC '01:02:03:04:05:06' (should be only one)
+
+=item B<< slxconfig search-export type=nfs >>
+
+displays the exports of type 'nfs'
+
+=item B<< slxconfig list-group priority=50 >>
-removes the system/client with the given name.
+displays the groups that have the default priority (50)
=back