summaryrefslogtreecommitdiffstats
path: root/installer
diff options
context:
space:
mode:
authorOliver Tappe2007-05-06 18:52:34 +0200
committerOliver Tappe2007-05-06 18:52:34 +0200
commit41755a8c5ae4f093e748d3adf28a78c2c4c41728 (patch)
treecf35d81b835c0f030288c0056dfb5332a0c34434 /installer
parent* added dhcp-client to default selection, as it is required by mkdxsinitrd cu... (diff)
downloadcore-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.pm44
-rw-r--r--installer/OpenSLX/OSExport/ExportType/Base.pm11
-rw-r--r--installer/OpenSLX/OSExport/ExportType/NBD_Squash.pm19
-rw-r--r--installer/OpenSLX/OSSetup/Engine.pm57
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
################################################################################