From 7497a0da8b270b32a6f053305ab86d0c8b74e92d Mon Sep 17 00:00:00 2001 From: Oliver Tappe Date: Tue, 31 Jul 2007 20:05:12 +0000 Subject: * Fixed another bug reported by Bastian: Default-client & -system recognition was dependant on the ID 0, which is not really possible with mysql (I do not count changing the server-global variable autoincrement_offset as an option). Now, we simply use the name instead. * changed slxconfig to reflect the direct relations between systems and clients, not the aggregated ones, as I found it confusing this way (slxconfig is rather a low-level tool). * minor cleanup in ConfigDB.pm git-svn-id: http://svn.openslx.org/svn/openslx/trunk@1294 95ad53e4-c205-0410-b2fa-d234c58c8868 --- config-db/OpenSLX/ConfigDB.pm | 40 +-- config-db/slxconfig | 600 ++++++++++++++++++++++-------------------- config-db/slxconfig-demuxer | 12 +- 3 files changed, 347 insertions(+), 305 deletions(-) (limited to 'config-db') diff --git a/config-db/OpenSLX/ConfigDB.pm b/config-db/OpenSLX/ConfigDB.pm index 94ad9faf..402678e5 100644 --- a/config-db/OpenSLX/ConfigDB.pm +++ b/config-db/OpenSLX/ConfigDB.pm @@ -848,8 +848,8 @@ sub emptyDatabase ### data aggregation interface ################################################################################ sub mergeDefaultAttributesIntoSystem -{ # merge default system attributes into given system - # and push the default client attributes on top of that +{ # merge default system attributes into given system + # and push the default client attributes on top of that my $self = shift; my $system = shift; @@ -862,7 +862,7 @@ sub mergeDefaultAttributesIntoSystem } sub mergeDefaultAndGroupAttributesIntoClient -{ # merge default and group configurations into given client +{ # merge default and group configurations into given client my $self = shift; my $client = shift; @@ -887,8 +887,8 @@ sub mergeDefaultAndGroupAttributesIntoClient } sub aggregatedSystemIDsOfClient -{ # return aggregated list of system-IDs this client should offer - # (as indicated by itself, the default client and the client's groups) +{ # return aggregated list of system-IDs this client should offer + # (as indicated by itself, the default client and the client's groups) my $self = shift; my $client = shift; @@ -910,8 +910,8 @@ sub aggregatedSystemIDsOfClient } sub aggregatedClientIDsOfSystem -{ # return aggregated list of client-IDs this system is linked to - # (as indicated by itself, the default system and the system's groups). +{ # return aggregated list of client-IDs this system is linked to + # (as indicated by itself, the default system and the system's groups). my $self = shift; my $system = shift; @@ -941,8 +941,8 @@ sub aggregatedClientIDsOfSystem } sub aggregatedSystemFileInfoFor -{ # return aggregated information about the kernel and initialramfs - # this system is using +{ # return aggregated information about the kernel and initialramfs + # this system is using my $self = shift; my $system = shift; @@ -952,7 +952,7 @@ sub aggregatedSystemFileInfoFor if (!defined $export) { die _tr( "DB-problem: system '%s' references export with id=%s, but that doesn't exist!", - $system->{name}, $system->{export_id} + $system->{name}, $system->{export_id} || '' ); } $info->{'export'} = $export; @@ -961,7 +961,7 @@ sub aggregatedSystemFileInfoFor if (!defined $vendorOS) { die _tr( "DB-problem: export '%s' references vendor-OS with id=%s, but that doesn't exist!", - $export->{name}, $export->{vendor_os_id} + $export->{name}, $export->{vendor_os_id} || '' ); } $info->{'vendor-os'} = $vendorOS; @@ -1005,14 +1005,14 @@ sub aggregatedSystemFileInfoFor ### support interface ################################################################################ sub isAttribute -{ # returns whether or not the given key is an exportable attribute +{ # returns whether or not the given key is an exportable attribute my $key = shift; return $key =~ m[^attr_]; } sub mergeAttributes -{ # copies all attributes of source that are unset in target over +{ # copies all attributes of source that are unset in target over my $target = shift; my $source = shift; @@ -1028,7 +1028,7 @@ sub mergeAttributes } sub pushAttributes -{ # copies all attributes that are set in source into the target +{ # copies all attributes that are set in source into the target my $target = shift; my $source = shift; @@ -1043,8 +1043,8 @@ sub pushAttributes } sub externalIDForSystem -{ # returns given system's name as the external ID, worked into a - # state that is usable as a filename: +{ # returns given system's name as the external ID, worked into a + # state that is usable as a filename: my $system = shift; return "default" if $system->{id} == 0; @@ -1055,8 +1055,8 @@ sub externalIDForSystem } sub externalIDForClient -{ # returns given client's MAC as the external ID, worked into a - # state that is usable as a filename: +{ # returns given client's MAC as the external ID, worked into a + # state that is usable as a filename: my $client = shift; return "default" if $client->{id} == 0; @@ -1068,8 +1068,8 @@ sub externalIDForClient } sub externalConfigNameForClient -{ # returns given client's name as the external ID, worked into a - # state that is usable as a filename: +{ # returns given client's name as the external ID, worked into a + # state that is usable as a filename: my $client = shift; return "default" if $client->{id} == 0; diff --git a/config-db/slxconfig b/config-db/slxconfig index 2887d3fa..b5c85ee7 100755 --- a/config-db/slxconfig +++ b/config-db/slxconfig @@ -30,7 +30,8 @@ use lib "$FindBin::RealBin"; use lib "$FindBin::RealBin/../lib"; use lib "$FindBin::RealBin/../config-db"; - # development path to config-db + +# development path to config-db use OpenSLX::Basics; use OpenSLX::ConfigDB; @@ -38,25 +39,21 @@ use OpenSLX::ConfigFolder; use OpenSLX::DBSchema; use OpenSLX::Utils; -my ( - $helpReq, - $manReq, - $verbose, - $versionReq, -); +my ($helpReq, $manReq, $verbose, $versionReq,); GetOptions( - 'help|?' => \$helpReq, - 'man' => \$manReq, + 'help|?' => \$helpReq, + 'man' => \$manReq, 'verbose' => \$verbose, 'version' => \$versionReq, ) or pod2usage(2); pod2usage(-msg => $abstract, -verbose => 0, -exitval => 1) if $helpReq; if ($manReq) { $ENV{LANG} = 'en_EN'; - # avoid dubious problem with perldoc in combination with UTF-8 that - # leads to strange dashes and single-quotes being used - pod2usage(-verbose => 2) + + # avoid dubious problem with perldoc in combination with UTF-8 that + # leads to strange dashes and single-quotes being used + pod2usage(-verbose => 2); } if ($versionReq) { system('slxversion'); @@ -70,42 +67,56 @@ $openslxDB->connect(); my $action = shift @ARGV || ''; if ($action =~ m[^add-system$]i) { - addSystemToConfigDB(@ARGV); -} elsif ($action =~ m[^add-client$]i) { - addClientToConfigDB(@ARGV); -} elsif ($action =~ m[^change-system$]i) { - changeSystemInConfigDB(@ARGV); -} elsif ($action =~ m[^change-client$]i) { - changeClientInConfigDB(@ARGV); -} elsif ($action =~ m[^list-c]) { + addSystemToConfigDB(@ARGV); +} +elsif ($action =~ m[^add-client$]i) { + addClientToConfigDB(@ARGV); +} +elsif ($action =~ m[^change-system$]i) { + changeSystemInConfigDB(@ARGV); +} +elsif ($action =~ m[^change-client$]i) { + changeClientInConfigDB(@ARGV); +} +elsif ($action =~ m[^list-c]) { print _tr("List of clients:\n"); listClients(@ARGV); -} elsif ($action =~ m[^list-e]) { +} +elsif ($action =~ m[^list-e]) { print _tr("List of exports:\n"); listExports(@ARGV); -} elsif ($action =~ m[^list-s]) { +} +elsif ($action =~ m[^list-s]) { print _tr("List of systems:\n"); listSystems(@ARGV); -} elsif ($action =~ m[^list-v]) { +} +elsif ($action =~ m[^list-v]) { print _tr("List of vendor-OSes:\n"); listVendorOSes(@ARGV); -} elsif ($action =~ m[^search-c]) { +} +elsif ($action =~ m[^search-c]) { print _tr("Matching clients:\n"); searchClients(@ARGV); -} elsif ($action =~ m[^search-e]) { +} +elsif ($action =~ m[^search-e]) { print _tr("Matching exports:\n"); searchExports(@ARGV); -} elsif ($action =~ m[^search-s]) { +} +elsif ($action =~ m[^search-s]) { print _tr("Matching systems:\n"); searchSystems(@ARGV); -} elsif ($action =~ m[^search-v]) { +} +elsif ($action =~ m[^search-v]) { print _tr("Matching vendor-OSes:\n"); searchVendorOSes(@ARGV); -} elsif ($action =~ m[^remove-client$]i) { - removeClientFromConfigDB(@ARGV); -} elsif ($action =~ m[^remove-system$]i) { - removeSystemFromConfigDB(@ARGV); -} else { +} +elsif ($action =~ m[^remove-client$]i) { + removeClientFromConfigDB(@ARGV); +} +elsif ($action =~ m[^remove-system$]i) { + removeSystemFromConfigDB(@ARGV); +} +else { vlog(0, _tr(unshiftHereDoc(<<' END-OF-HERE'), $0)); You need to specify exactly one of these actions: add-client @@ -130,23 +141,25 @@ $openslxDB->disconnect(); sub parseKeyValueArgs { - my $allowedKeys = shift; - my $table = shift; - - my %dataHash; - while (my $param = shift) { - if ($param !~ m[^\s*([\w\-]+)\s*=(.+)$]) { - die _tr("value specification %s has unknown format, expected =\n", - $param); - } - my $key = lc($1); - my $value = $2; - if (!grep { $_ eq $key } @$allowedKeys) { - die _tr("unknown attribute '%s' specified for %s\n", $key, $table); - } - $dataHash{$key} = $value; - } - return \%dataHash; + my $allowedKeys = shift; + my $table = shift; + + my %dataHash; + while (my $param = shift) { + if ($param !~ m[^\s*([\w\-]+)\s*=(.+)$]) { + die _tr( + "value specification %s has unknown format, expected =\n", + $param + ); + } + my $key = lc($1); + my $value = $2; + if (!grep { $_ eq $key } @$allowedKeys) { + die _tr("unknown attribute '%s' specified for %s\n", $key, $table); + } + $dataHash{$key} = $value; + } + return \%dataHash; } sub dumpElements @@ -160,17 +173,16 @@ sub dumpElements print join( '', map { - my $spc = ' 'x25; + my $spc = ' ' x 25; my $val = $elem->{$_} || ''; $val =~ s[\n][\n\t$spc ]g; - "\t$_" - .substr($spc, length($_)) - ." = $val\n"; + "\t$_" . substr($spc, length($_)) . " = $val\n"; } sort keys %$elem ); } - } else { + } + else { print join('', sort map { $nameClause->($_); } @_); } return; @@ -181,25 +193,24 @@ sub listClients my $name = _cleanName(shift); my %nameSpec; - # set verbose mode if any params have been passed in: - if (defined $name) { - $verbose = 1; - $nameSpec{name} = $name; - } + + # set verbose mode if any params have been passed in: + if (defined $name) { + $verbose = 1; + $nameSpec{name} = $name; + } dumpElements( 'client', undef, map { - my @sysIDs = $openslxDB->aggregatedSystemIDsOfClient($_); - $_->{systems} - = join "\n", - map { $_->{name} } - sort { $a->{name} cmp $b->{name} } - $openslxDB->fetchSystemByID(\@sysIDs, 'name'); + my @sysIDs = $openslxDB->fetchSystemIDsOfClient($_->{id}); + $_->{systems} = join "\n", map { $_->{name} } + sort { $a->{name} cmp $b->{name} } + $openslxDB->fetchSystemByID(\@sysIDs, 'name'); $_; } - sort { $a->{name} cmp $b->{name} } - $openslxDB->fetchClientByFilter(\%nameSpec) + sort { $a->{name} cmp $b->{name} } + $openslxDB->fetchClientByFilter(\%nameSpec) ); return; } @@ -209,27 +220,30 @@ sub listExports my $name = _cleanName(shift); my %nameSpec; - # set verbose mode if any params have been passed in: - if (defined $name) { - $verbose = 1; - $nameSpec{name} = $name; - } + + # set verbose mode if any params have been passed in: + if (defined $name) { + $verbose = 1; + $nameSpec{name} = $name; + } dumpElements( 'export', sub { - "\t$_->{name}".substr(' ' x 30, length($_->{name}))."($_->{type})\n" + "\t$_->{name}" + . substr(' ' x 30, length($_->{name})) + . "($_->{type})\n"; }, map { - my $vendorOS - = $openslxDB->fetchVendorOSByID($_->{vendor_os_id}, 'name'); + my $vendorOS = + $openslxDB->fetchVendorOSByID($_->{vendor_os_id}, 'name'); if (defined $vendorOS) { $_->{vendor_os_id} .= " ($vendorOS->{name})"; } $_; - } - sort { $a->{name} eq $b->{name} || $a->{type} cmp $b->{type} } - $openslxDB->fetchExportByFilter(\%nameSpec) + } + sort { $a->{name} eq $b->{name} || $a->{type} cmp $b->{type} } + $openslxDB->fetchExportByFilter(\%nameSpec) ); return; } @@ -239,29 +253,28 @@ sub listSystems my $name = _cleanName(shift); my %nameSpec; - # set verbose mode if any params have been passed in: - if (defined $name) { - $verbose = 1; - $nameSpec{name} = $name; - } + + # set verbose mode if any params have been passed in: + if (defined $name) { + $verbose = 1; + $nameSpec{name} = $name; + } dumpElements( 'system', undef, map { - my @clientIDs = $openslxDB->aggregatedClientIDsOfSystem($_); - $_->{clients} - = join "\n", - map { $_->{name} } - sort { $a->{name} cmp $b->{name} } - $openslxDB->fetchClientByID(\@clientIDs, 'name'); + my @clientIDs = $openslxDB->fetchClientIDsOfSystem($_->{id}); + $_->{clients} = join "\n", map { $_->{name} } + sort { $a->{name} cmp $b->{name} } + $openslxDB->fetchClientByID(\@clientIDs, 'name'); my $export = $openslxDB->fetchExportByID($_->{export_id}); if (defined $export) { $_->{export_id} = "$export->{name} ($export->{type})"; } $_; - } - sort { $a->{name} cmp $b->{name} } - $openslxDB->fetchSystemByFilter(\%nameSpec) + } + sort { $a->{name} cmp $b->{name} } + $openslxDB->fetchSystemByFilter(\%nameSpec) ); return; } @@ -271,120 +284,117 @@ sub listVendorOSes my $name = _cleanName(shift); my %nameSpec; - # set verbose mode if any params have been passed in: - if (defined $name) { - $verbose = 1; - $nameSpec{name} = $name; - } - dumpElements( - 'vendor-OS', undef, - sort { $a->{name} cmp $b->{name} } - $openslxDB->fetchVendorOSByFilter(\%nameSpec) - ); + # set verbose mode if any params have been passed in: + if (defined $name) { + $verbose = 1; + $nameSpec{name} = $name; + } + + dumpElements('vendor-OS', undef, + sort { $a->{name} cmp $b->{name} } + $openslxDB->fetchVendorOSByFilter(\%nameSpec)); return; } sub searchClients { - my @clientKeys - = map { (/^(\w+)\W/) ? $1 : $_; } - @{$DbSchema->{tables}->{client}}; + my @clientKeys = + map { (/^(\w+)\W/) ? $1 : $_; } @{$DbSchema->{tables}->{client}}; + + my $clientData = parseKeyValueArgs(\@clientKeys, 'client', @_); - my $clientData = parseKeyValueArgs(\@clientKeys, 'client', @_); - # set verbose mode if any params have been passed in: - $verbose = 1 if %$clientData; + # set verbose mode if any params have been passed in: + $verbose = 1 if %$clientData; dumpElements( 'client', undef, map { - my @sysIDs = $openslxDB->aggregatedSystemIDsOfClient($_); - $_->{systems} - = join "\n", - map { $_->{name} } - sort { $a->{name} cmp $b->{name} } - $openslxDB->fetchSystemByID(\@sysIDs, 'name'); + my @sysIDs = $openslxDB->fetchSystemIDsOfClient($_->{id}); + $_->{systems} = join "\n", map { $_->{name} } + sort { $a->{name} cmp $b->{name} } + $openslxDB->fetchSystemByID(\@sysIDs, 'name'); $_; - } - sort { $a->{name} cmp $b->{name} } - $openslxDB->fetchClientByFilter($clientData) + } + sort { $a->{name} cmp $b->{name} } + $openslxDB->fetchClientByFilter($clientData) ); return; } sub searchExports { - my @exportKeys - = map { (/^(\w+)\W/) ? $1 : $_; } - @{$DbSchema->{tables}->{export}}; + my @exportKeys = + map { (/^(\w+)\W/) ? $1 : $_; } @{$DbSchema->{tables}->{export}}; - my $exportData = parseKeyValueArgs(\@exportKeys, 'export', @_); - # set verbose mode if any params have been passed in: - $verbose = 1 if %$exportData; + my $exportData = parseKeyValueArgs(\@exportKeys, 'export', @_); + + # set verbose mode if any params have been passed in: + $verbose = 1 if %$exportData; dumpElements( 'export', sub { - "\t$_->{name}".substr(' ' x 30, length($_->{name}))."($_->{type})\n" + "\t$_->{name}" + . substr(' ' x 30, length($_->{name})) + . "($_->{type})\n"; }, map { - my $vendorOS - = $openslxDB->fetchVendorOSByID($_->{vendor_os_id}, 'name'); + my $vendorOS = + $openslxDB->fetchVendorOSByID($_->{vendor_os_id}, 'name'); if (defined $vendorOS) { $_->{vendor_os_id} .= " ($vendorOS->{name})"; } $_; - } - sort { $a->{name} eq $b->{name} || $a->{type} cmp $b->{type} } - $openslxDB->fetchExportByFilter($exportData) + } + sort { $a->{name} eq $b->{name} || $a->{type} cmp $b->{type} } + $openslxDB->fetchExportByFilter($exportData) ); return; } sub searchSystems { - my @systemKeys - = map { (/^(\w+)\W/) ? $1 : $_; } - @{$DbSchema->{tables}->{system}}; + my @systemKeys = + map { (/^(\w+)\W/) ? $1 : $_; } @{$DbSchema->{tables}->{system}}; + + my $systemData = parseKeyValueArgs(\@systemKeys, 'system', @_); - my $systemData = parseKeyValueArgs(\@systemKeys, 'system', @_); - # set verbose mode if any params have been passed in: - $verbose = 1 if %$systemData; + # set verbose mode if any params have been passed in: + $verbose = 1 if %$systemData; dumpElements( 'system', undef, map { - my @clientIDs = $openslxDB->aggregatedClientIDsOfSystem($_); - $_->{clients} - = join "\n", - map { $_->{name} } - sort { $a->{name} cmp $b->{name} } - $openslxDB->fetchClientByID(\@clientIDs, 'name'); + my @clientIDs = $openslxDB->fetchClientIDsOfSystem($_->{id}); + $_->{clients} = join "\n", map { $_->{name} } + sort { $a->{name} cmp $b->{name} } + $openslxDB->fetchClientByID(\@clientIDs, 'name'); my $export = $openslxDB->fetchExportByID($_->{export_id}); if (defined $export) { $_->{export_id} = "$export->{name} ($export->{type})"; } $_; - } - sort { $a->{name} cmp $b->{name} } - $openslxDB->fetchSystemByFilter($systemData) + } + sort { $a->{name} cmp $b->{name} } + $openslxDB->fetchSystemByFilter($systemData) ); return; } sub searchVendorOSes { - my @vendorOSKeys - = map { (/^(\w+)\W/) ? $1 : $_; } - @{$DbSchema->{tables}->{vendor_os}}; + my @vendorOSKeys = + map { (/^(\w+)\W/) ? $1 : $_; } @{$DbSchema->{tables}->{vendor_os}}; + + my $vendorOSData = parseKeyValueArgs(\@vendorOSKeys, 'vendor_os', @_); - my $vendorOSData = parseKeyValueArgs(\@vendorOSKeys, 'vendor_os', @_); - # set verbose mode if any params have been passed in: - $verbose = 1 if %$vendorOSData; + # set verbose mode if any params have been passed in: + $verbose = 1 if %$vendorOSData; dumpElements('vendor-OS', undef, - sort { $a->{name} cmp $b->{name} } - $openslxDB->fetchVendorOSByFilter($vendorOSData)); + sort { $a->{name} cmp $b->{name} } + $openslxDB->fetchVendorOSByFilter($vendorOSData)); return; } @@ -396,46 +406,54 @@ 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 = + map { (/^(\w+)\W/) ? $1 : $_; } @{$DbSchema->{tables}->{client}}; push @clientKeys, 'systems'; - my $clientData = parseKeyValueArgs(\@clientKeys, 'client', @_); + my $clientData = parseKeyValueArgs(\@clientKeys, 'client', @_); $clientData->{name} = $clientName; my @systemIDs; if (exists $clientData->{systems}) { - @systemIDs - = map { - my $system - = $openslxDB->fetchSystemByFilter({ 'name' => $_ }); - if (!defined $system) { - die _tr("system '%s' doesn't exist!\n", $_); - } - $system->{id}; - } - split '\s*,\s*', $clientData->{systems}; + @systemIDs = map { + my $system = $openslxDB->fetchSystemByFilter({'name' => $_}); + if (!defined $system) { + die _tr("system '%s' doesn't exist!\n", $_); + } + $system->{id}; + } + split '\s*,\s*', $clientData->{systems}; delete $clientData->{systems}; } if (!$clientData->{mac}) { die _tr("you have to specify the MAC for the new client\n"); } - if ($clientData->{mac} !~ m[^(?:[[:xdigit:]][[:xdigit:]]:){5}?[[:xdigit:]][[:xdigit:]]$]) { - die _tr("unknown MAC-format given, expected something like '01:02:03:04:05:06'!\n"); + if ($clientData->{mac} !~ + m[^(?:[[:xdigit:]][[:xdigit:]]:){5}?[[:xdigit:]][[:xdigit:]]$]) + { + die _tr( + "unknown MAC-format given, expected something like '01:02:03:04:05:06'!\n" + ); } - if ($openslxDB->fetchClientByFilter({ 'name' => $clientName })) { + if ($openslxDB->fetchClientByFilter({'name' => $clientName})) { die _tr("the client '%s' already exists in the DB, giving up!\n", - $clientName); + $clientName); } - if ($openslxDB->fetchClientByFilter({ 'mac' => $clientData->{mac} })) { - die _tr("a client with the MAC '%s' already exists in the DB, giving up!\n", - $clientData->{mac}); + if ($openslxDB->fetchClientByFilter({'mac' => $clientData->{mac}})) { + die _tr( + "a client with the MAC '%s' already exists in the DB, giving up!\n", + $clientData->{mac} + ); } my $clientID = $openslxDB->addClient([$clientData]); - vlog(0, _tr("client '%s' has been successfully added to DB (ID=%s)\n", - $clientName, $clientID)); + vlog( + 0, + _tr( + "client '%s' has been successfully added to DB (ID=%s)\n", + $clientName, $clientID + ) + ); if (@systemIDs) { $openslxDB->addSystemIDsToClient($clientID, \@systemIDs); } @@ -450,55 +468,57 @@ sub addSystemToConfigDB my $systemName = _cleanName(shift || ''); if (!length($systemName)) { - die _tr("you have to specify the name of the new system!\n"); + die _tr("you have to specify the name of the new system!\n"); } - my @systemKeys - = map { (/^(\w+)\W/) ? $1 : $_; } - @{$DbSchema->{tables}->{system}}; + my @systemKeys = + map { (/^(\w+)\W/) ? $1 : $_; } @{$DbSchema->{tables}->{system}}; push @systemKeys, 'clients', 'export'; - my $systemData = parseKeyValueArgs(\@systemKeys, 'system', @_); + my $systemData = parseKeyValueArgs(\@systemKeys, 'system', @_); $systemData->{name} = $systemName; my $exportName = $systemData->{export} || ''; delete $systemData->{export}; if (!length($exportName)) { $exportName = $systemName; - # try falling back to given system name + + # try falling back to given system name } - my $export - = $openslxDB->fetchExportByFilter({ 'name' => $exportName }); + my $export = $openslxDB->fetchExportByFilter({'name' => $exportName}); if (!defined $export) { - die _tr("export '%s' could not be found in DB, giving up!\n", $exportName); + die _tr("export '%s' could not be found in DB, giving up!\n", + $exportName); } $systemData->{export_id} = $export->{id}; my @clientIDs; if (exists $systemData->{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*', $systemData->{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*', $systemData->{clients}; delete $systemData->{clients}; - } else { + } + else { # no clients given, so we add this system to the default client, # which will make this system bootable by *all* clients (unless # they are configured otherwise). - push @clientIDs, 0; + my $defaultClient = + $openslxDB->fetchClientByFilter({'name' => '<<>>'}); + push @clientIDs, $defaultClient->{id}; } - if ($openslxDB->fetchSystemByFilter({ 'name' => $systemName })) { + if ($openslxDB->fetchSystemByFilter({'name' => $systemName})) { die _tr("the system '%s' already exists in the DB, giving up!\n", - $systemName); + $systemName); } if ($systemName =~ m[\bkde\b]) { + # activate kdm and X if system is based on kde: $systemData->{attr_start_xdmcp} = 'kdm' unless exists $systemData->{attr_start_xdmcp}; @@ -506,6 +526,7 @@ sub addSystemToConfigDB unless exists $systemData->{attr_start_x}; } if ($systemName =~ m[\bgnome\b]) { + # activate gdm and X if system is based on GNOME: $systemData->{attr_start_xdmcp} = 'gdm' unless exists $systemData->{attr_start_xdmcp}; @@ -513,18 +534,24 @@ sub addSystemToConfigDB unless exists $systemData->{attr_start_x}; } - my $systemConfigPath - = "$openslxConfig{'private-path'}/config/$systemName/default"; + my $systemConfigPath = + "$openslxConfig{'private-path'}/config/$systemName/default"; if (!-e $systemConfigPath) { + # create the default (empty) config folders for this system: createConfigFolderForSystem($systemName); } my $systemID = $openslxDB->addSystem([$systemData]); - vlog(0, _tr("system '%s' has been successfully added to DB (ID=%s)\n", - $systemName, $systemID)); + vlog( + 0, + _tr( + "system '%s' has been successfully added to DB (ID=%s)\n", + $systemName, $systemID + ) + ); if (@clientIDs) { - $openslxDB->addClientIDsToSystem($systemID, \@clientIDs); + $openslxDB->addClientIDsToSystem($systemID, \@clientIDs); } if ($verbose) { listSystems("id=$systemID"); @@ -537,54 +564,50 @@ sub changeClientInConfigDB my $clientName = _cleanName(shift || ''); if (!length($clientName)) { - die _tr("you have to specify the name for the client you'd like to change!\n"); + die _tr( + "you have to specify the name for the client you'd like to change!\n" + ); } - my @clientKeys - = map { (/^(\w+)\W/) ? $1 : $_; } - @{$DbSchema->{tables}->{client}}; + my @clientKeys = + map { (/^(\w+)\W/) ? $1 : $_; } @{$DbSchema->{tables}->{client}}; push @clientKeys, 'systems', 'add-systems', 'remove-systems'; - my $clientData = parseKeyValueArgs(\@clientKeys, 'client', @_); + my $clientData = parseKeyValueArgs(\@clientKeys, 'client', @_); my $client = $openslxDB->fetchClientByFilter({'name' => $clientName}); if (!defined $client) { die _tr("the client '%s' doesn't exists in the DB, giving up!\n", - $clientName); + $clientName); } my @systemIDs; if (exists $clientData->{systems}) { - @systemIDs - = map { - my $system - = $openslxDB->fetchSystemByFilter({ 'name' => $_ }); - if (!defined $system) { - die _tr("system '%s' doesn't exist!\n", $_); - } - $system->{id}; - } - split ",", $clientData->{systems}; + @systemIDs = map { + my $system = $openslxDB->fetchSystemByFilter({'name' => $_}); + if (!defined $system) { + die _tr("system '%s' doesn't exist!\n", $_); + } + $system->{id}; + } + split ",", $clientData->{systems}; delete $clientData->{systems}; } if (exists $clientData->{'add-systems'}) { @systemIDs = $openslxDB->fetchSystemIDsOfClient($client->{id}); - push @systemIDs, - map { - my $system - = $openslxDB->fetchSystemByFilter({ 'name' => $_ }); - if (!defined $system) { - die _tr("system '%s' doesn't exist!\n", $_); - } - $system->{id}; + push @systemIDs, map { + my $system = $openslxDB->fetchSystemByFilter({'name' => $_}); + if (!defined $system) { + die _tr("system '%s' doesn't exist!\n", $_); + } + $system->{id}; } split ",", $clientData->{'add-systems'}; delete $clientData->{'add-systems'}; } if (exists $clientData->{'remove-systems'}) { @systemIDs = $openslxDB->fetchSystemIDsOfClient($client->{id}); - foreach my $sysName (split ",", $clientData->{'remove-systems'}) { - my $system - = $openslxDB->fetchSystemByFilter({ 'name' => $sysName }); + foreach my $sysName (split ",", $clientData->{'remove-systems'}) { + my $system = $openslxDB->fetchSystemByFilter({'name' => $sysName}); if (!defined $system) { die _tr("system '%s' doesn't exist!\n", $sysName); } @@ -593,9 +616,18 @@ sub changeClientInConfigDB delete $clientData->{'remove-systems'}; } - if ($clientData->{mac} - && $clientData->{mac} !~ m[^(?:[[:xdigit:]][[:xdigit:]]:){5}?[[:xdigit:]][[:xdigit:]]$]) { - die _tr("unknown MAC-format given, expected something like '01:02:03:04:05:06'!\n"); + if ($clientData->{name} && $client->{name} eq '<<>>') { + die _tr( + "you can't rename the default client - no changes were made!\n"); + } + + if ( $clientData->{mac} + && $clientData->{mac} !~ + m[^(?:[[:xdigit:]][[:xdigit:]]:){5}?[[:xdigit:]][[:xdigit:]]$]) + { + die _tr( + "unknown MAC-format given, expected something like '01:02:03:04:05:06'!\n" + ); } $openslxDB->changeClient($client->{id}, [$clientData]); @@ -614,54 +646,51 @@ sub changeSystemInConfigDB my $systemName = _cleanName(shift || ''); if (!length($systemName)) { - die _tr("you have to specify the name of the system you'd like to change!\n"); + die _tr( + "you have to specify the name of the system you'd like to change!\n" + ); } - my @systemKeys - = map { (/^(\w+)\W/) ? $1 : $_; } - @{$DbSchema->{tables}->{system}}; + my @systemKeys = + map { (/^(\w+)\W/) ? $1 : $_; } @{$DbSchema->{tables}->{system}}; push @systemKeys, 'clients', 'add-clients', 'remove-clients'; - my $systemData = parseKeyValueArgs(\@systemKeys, 'system', @_); + my $systemData = parseKeyValueArgs(\@systemKeys, 'system', @_); my $system = $openslxDB->fetchSystemByFilter({'name' => $systemName}); if (!defined $system) { die _tr("the system '%s' doesn't exists in the DB, giving up!\n", - $systemName); + $systemName); } my @clientIDs; if (exists $systemData->{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 ",", $systemData->{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 ",", $systemData->{clients}; delete $systemData->{clients}; } if (exists $systemData->{'add-clients'}) { @clientIDs = $openslxDB->fetchClientIDsOfSystem($system->{id}); - push @clientIDs, - map { - my $client - = $openslxDB->fetchClientByFilter({ 'name' => $_ }); - if (!defined $client) { - die _tr("client '%s' doesn't exist!\n", $_); - } - $client->{id}; + push @clientIDs, map { + my $client = $openslxDB->fetchClientByFilter({'name' => $_}); + if (!defined $client) { + die _tr("client '%s' doesn't exist!\n", $_); + } + $client->{id}; } split ",", $systemData->{'add-clients'}; delete $systemData->{'add-clients'}; } if (exists $systemData->{'remove-clients'}) { @clientIDs = $openslxDB->fetchClientIDsOfSystem($system->{id}); - foreach my $clientName (split ",", $systemData->{'remove-clients'}) { - my $client - = $openslxDB->fetchClientByFilter({ 'name' => $clientName }); + foreach my $clientName (split ",", $systemData->{'remove-clients'}) { + my $client = + $openslxDB->fetchClientByFilter({'name' => $clientName}); if (!defined $client) { die _tr("client '%s' doesn't exist!\n", $clientName); } @@ -669,10 +698,15 @@ sub changeSystemInConfigDB } delete $systemData->{'remove-clients'}; } + if ($systemData->{name} && $system->{name} eq '<<>>') { + die _tr( + "you can't rename the default system - no changes were made!\n"); + } + $openslxDB->changeSystem($system->{id}, [$systemData]); vlog(0, _tr("system '%s' has been successfully changed\n", $systemName)); if (@clientIDs) { - $openslxDB->setClientIDsOfSystem($system->{id}, \@clientIDs); + $openslxDB->setClientIDsOfSystem($system->{id}, \@clientIDs); } if ($verbose) { listSystems("id=$system->{id}"); @@ -685,22 +719,25 @@ sub removeClientFromConfigDB my $clientName = _cleanName(shift || ''); if (!length($clientName)) { - die _tr("you have to specify the name of the client you'd like to remove!\n"); + die _tr( + "you have to specify the name of the client you'd like to remove!\n" + ); } - my $clientData = parseKeyValueArgs(['name'], 'client', @_); + my $clientData = parseKeyValueArgs(['name'], 'client', @_); my $client = $openslxDB->fetchClientByFilter({'name' => $clientName}); if (!defined $client) { die _tr("the client '%s' doesn't exists in the DB, giving up!\n", - $clientName); + $clientName); } - if ($client->{id} == 0) { - die _tr("you can't remove the default-client!\n"); + if ($client->{name} eq '<<>>') { + die _tr("you can't remove the default client!\n"); } $openslxDB->removeClient($client->{id}); - vlog(0, _tr("client '%s' has been successfully removed from DB\n", - $clientName)); + vlog(0, + _tr("client '%s' has been successfully removed from DB\n", $clientName) + ); return; } @@ -709,32 +746,35 @@ sub removeSystemFromConfigDB my $systemName = _cleanName(shift || ''); if (!length($systemName)) { - die _tr("you have to specify the name of the system you'd like to remove!\n"); + die _tr( + "you have to specify the name of the system you'd like to remove!\n" + ); } - my $systemData = parseKeyValueArgs(['name'], 'system', @_); + my $systemData = parseKeyValueArgs(['name'], 'system', @_); my $system = $openslxDB->fetchSystemByFilter({'name' => $systemName}); if (!defined $system) { die _tr("the system '%s' doesn't exists in the DB, giving up!\n", - $systemName); + $systemName); } - if ($system->{id} == 0) { - die _tr("you can't remove the default-client!\n"); + if ($system->{name} eq '<<>>') { + die _tr("you can't remove the default system!\n"); } $openslxDB->removeSystem($system->{id}); - vlog(0, _tr("system '%s' has been successfully removed from DB\n", - $systemName)); + vlog(0, + _tr("system '%s' has been successfully removed from DB\n", $systemName) + ); return; } -sub _cleanName -{ # removes 'name=""' constructs from the name, as it is rather tempting - # for the user to type that ... (and we'd like to play along with DWIM) +sub _cleanName +{ # removes 'name=""' constructs from the name, as it is rather tempting + # for the user to type that ... (and we'd like to play along with DWIM) my $name = shift; - + return unless defined $name; - + if ($name =~ m[^name=(.+)$]) { return $1; } diff --git a/config-db/slxconfig-demuxer b/config-db/slxconfig-demuxer index bff7436e..c3220ec8 100755 --- a/config-db/slxconfig-demuxer +++ b/config-db/slxconfig-demuxer @@ -520,8 +520,9 @@ sub writeClientConfigurationsForSystem my @clientIDs = $openslxDB->aggregatedClientIDsOfSystem($info); my @clients = $openslxDB->fetchClientByID(\@clientIDs); foreach my $client (@clients) { - next if $client->{id} == 0; - # skip default client, as it doesn't need any config-tgz + next if $client->{name} eq '<<>>'; + # skip default client, as it doesn't need any config-tgz + my $externalSystemID = externalIDForSystem($info); my $externalClientName = externalConfigNameForClient($client); my $clientConfigPath = @@ -667,10 +668,11 @@ sub writeConfigurations my @systems = $openslxDB->fetchSystemByFilter(); my @infos; foreach my $system (@systems) { - next unless $system->{id} > 0; + next if $system->{name} eq '<<>>'; - vlog(0, - _tr('exporting system %d : %s', $system->{id}, $system->{name})); + vlog( + 0, _tr('exporting system %d : %s', $system->{id}, $system->{name}) + ); $systemConfCount++; my $info = $openslxDB->aggregatedSystemFileInfoFor($system); -- cgit v1.2.3-55-g7522