diff options
author | Oliver Tappe | 2007-05-06 18:52:34 +0200 |
---|---|---|
committer | Oliver Tappe | 2007-05-06 18:52:34 +0200 |
commit | 41755a8c5ae4f093e748d3adf28a78c2c4c41728 (patch) | |
tree | cf35d81b835c0f030288c0056dfb5332a0c34434 /installer | |
parent | * added dhcp-client to default selection, as it is required by mkdxsinitrd cu... (diff) | |
download | core-41755a8c5ae4f093e748d3adf28a78c2c4c41728.tar.gz core-41755a8c5ae4f093e748d3adf28a78c2c4c41728.tar.xz core-41755a8c5ae4f093e748d3adf28a78c2c4c41728.zip |
* added support to NBD_Squash-exporter for selecting the next free server-port
automatically
* added missing code to clean dependent data if removing an export (systems)
or a vendor-OS (exports and systems)
git-svn-id: http://svn.openslx.org/svn/openslx/trunk@1013 95ad53e4-c205-0410-b2fa-d234c58c8868
Diffstat (limited to 'installer')
-rw-r--r-- | installer/OpenSLX/OSExport/Engine.pm | 44 | ||||
-rw-r--r-- | installer/OpenSLX/OSExport/ExportType/Base.pm | 11 | ||||
-rw-r--r-- | installer/OpenSLX/OSExport/ExportType/NBD_Squash.pm | 19 | ||||
-rw-r--r-- | installer/OpenSLX/OSSetup/Engine.pm | 57 |
4 files changed, 88 insertions, 43 deletions
diff --git a/installer/OpenSLX/OSExport/Engine.pm b/installer/OpenSLX/OSExport/Engine.pm index e656c755..690a56c7 100644 --- a/installer/OpenSLX/OSExport/Engine.pm +++ b/installer/OpenSLX/OSExport/Engine.pm @@ -105,7 +105,7 @@ sub initializeForNew } my $exportCounter - = $openslxDB->getNextExportCounterForVendorOS($vendorOS->{id}); + = $openslxDB->incrementExportCounterForVendorOS($vendorOS->{id}); my $exportName = sprintf "$vendorOSName-%c", 64+$exportCounter; $openslxDB->disconnect(); @@ -151,10 +151,10 @@ sub purgeExport { my $self = shift; - if ($self->{'exporter'}->purgeExport($self->{'export-path'})) { - vlog 0, _tr("export '%s' successfully removed!", - $self->{'export-path'}); - } + if ($self->{'exporter'}->purgeExport($self->{'export-path'})) { + vlog 0, _tr("export '%s' successfully removed!", + $self->{'export-path'}); + } $self->removeExportFromConfigDB(); } @@ -226,13 +226,13 @@ sub addExportToConfigDB my $openslxDB = instantiateClass("OpenSLX::ConfigDB"); $openslxDB->connect(); - my $id = $openslxDB->addExport( - { - 'vendor_os_id' => $self->{'vendor-os-id'}, - 'name' => $self->{'export-name'}, - 'type' => $self->{'export-type'}, - } - ); + my $export = { + 'vendor_os_id' => $self->{'vendor-os-id'}, + 'name' => $self->{'export-name'}, + 'type' => $self->{'export-type'}, + }; + + my $id = $self->{exporter}->addExportToConfigDB($export, $openslxDB); vlog 0, _tr("Export '%s' has been added to DB (ID=%s)...\n", $self->{'export-name'}, $id); # now create a default system for that export, using the standard kernel: @@ -250,15 +250,25 @@ sub removeExportFromConfigDB # remove export from DB: my $exportName = $self->{'export-name'}; - my $export - = $openslxDB->fetchExportByFilter({ - 'name' => $exportName, - 'type' => $self->{'export-type'}, - }); + my $export + = $openslxDB->fetchExportByFilter({ + 'name' => $exportName, + 'type' => $self->{'export-type'}, + }); if (!defined $export) { vlog 0, _tr("Export '%s' doesn't exist in OpenSLX-database.\n", $exportName); } else { + # remove all systems using this export and then remove the + # export itself: + my @systemIDs + = map { $_->{id} } + $openslxDB->fetchSystemByFilter( + { 'export_id' => $export->{id} }, 'id' + ); + vlog 1, _tr("removing systems '%s' from DB, since they belong to the export being deleted.\n", + join ',', @systemIDs); + $openslxDB->removeSystem(\@systemIDs); $openslxDB->removeExport($export->{id}); vlog 0, _tr("Export '%s' has been removed from DB.\n", $exportName); } diff --git a/installer/OpenSLX/OSExport/ExportType/Base.pm b/installer/OpenSLX/OSExport/ExportType/Base.pm index 06b6d0da..3954bfa9 100644 --- a/installer/OpenSLX/OSExport/ExportType/Base.pm +++ b/installer/OpenSLX/OSExport/ExportType/Base.pm @@ -48,7 +48,16 @@ sub purgeExport sub checkRequirements { - 1; + return 1; +} + +sub addExportToConfigDB +{ + my $self = shift; + my $export = shift; + my $openslxDB = shift; + + return $openslxDB->addExport($export); } ################################################################################ diff --git a/installer/OpenSLX/OSExport/ExportType/NBD_Squash.pm b/installer/OpenSLX/OSExport/ExportType/NBD_Squash.pm index 3d2d10fa..52395b65 100644 --- a/installer/OpenSLX/OSExport/ExportType/NBD_Squash.pm +++ b/installer/OpenSLX/OSExport/ExportType/NBD_Squash.pm @@ -48,7 +48,6 @@ sub exportVendorOS = mapRsyncFilter2Regex($source, $includeExcludeList); vlog 1, _tr("using include-exclude-filter:\n%s\n", $includeExcludeList); $self->createSquashFS($source, $target, $includeExcludeList); - $self->showNbdParams($target); } sub purgeExport @@ -98,6 +97,20 @@ sub checkRequirements 1; } +sub addExportToConfigDB +{ + my $self = shift; + my $export = shift; + my $openslxDB = shift; + + $export->{port} + = $openslxDB->incrementGlobalCounter('next-nbd-server-port'); + + my $res = $openslxDB->addExport($export); + $self->showNbdParams($export) if $res; + return $res; +} + ################################################################################ ### implementation methods ################################################################################ @@ -145,11 +158,11 @@ sub createSquashFS sub showNbdParams { my $self = shift; - my $target = shift; + my $export = shift; print (('#' x 80)."\n"); print _tr("Please make sure you start a corresponding nbd-server:\n\t%s\n", - "nbd-server port $self->{engine}->{'export-path'} -r"); + "nbd-server $export->{port} $self->{engine}->{'export-path'} -r"); print (('#' x 80)."\n"); } diff --git a/installer/OpenSLX/OSSetup/Engine.pm b/installer/OpenSLX/OSSetup/Engine.pm index a9376132..f5ebb20b 100644 --- a/installer/OpenSLX/OSSetup/Engine.pm +++ b/installer/OpenSLX/OSSetup/Engine.pm @@ -322,6 +322,41 @@ sub addInstalledVendorOSToConfigDB $openslxDB->disconnect(); } +sub removeVendorOSFromConfigDB +{ + my $self = shift; + + my $openslxDB = instantiateClass("OpenSLX::ConfigDB"); + $openslxDB->connect(); + + my $vendorOSName = $self->{'vendor-os-name'}; + my $vendorOS + = $openslxDB->fetchVendorOSByFilter({ 'name' => $vendorOSName }); + if (!defined $vendorOS) { + vlog 0, _tr("Vendor-OS '%s' didn't exist in OpenSLX-database.\n", + $vendorOSName); + } else { + # remove all exports (and systems) using this vendor-OS and then + # remove the vendor-OS itself: + my @exports = $openslxDB->fetchExportByFilter( + { 'vendor_os_id' => $vendorOS->{id} } + ); + foreach my $export (@exports) { + my $osExportEngine = instantiateClass("OpenSLX::OSExport::Engine"); + $osExportEngine->initializeFromExisting($export->{name}); + vlog 0, _tr("purging export '%s', since it belongs to the vendor-OS being deleted...", + $export->{name}); + $osExportEngine->purgeExport(); + } + + $openslxDB->removeVendorOS($vendorOS->{id}); + vlog 0, _tr("Vendor-OS '%s' has been removed from DB!\n", + $vendorOSName); + } + + $openslxDB->disconnect(); +} + ################################################################################ ### implementation methods ################################################################################ @@ -867,28 +902,6 @@ sub clone_determineIncludeExcludeList return $includeExcludeList; } -sub removeVendorOSFromConfigDB -{ - my $self = shift; - - my $openslxDB = instantiateClass("OpenSLX::ConfigDB"); - $openslxDB->connect(); - - my $vendorOSName = $self->{'vendor-os-name'}; - my $vendorOS - = $openslxDB->fetchVendorOSByFilter({ 'name' => $vendorOSName }); - if (!defined $vendorOS) { - vlog 0, _tr("Vendor-OS '%s' didn't exist in OpenSLX-database.\n", - $vendorOSName); - } else { - $openslxDB->removeVendorOS($vendorOS->{id}); - vlog 0, _tr("Vendor-OS '%s' has been removed from DB!\n", - $vendorOSName); - } - - $openslxDB->disconnect(); -} - ################################################################################ ### utility methods ################################################################################ |