From 086ccfc2d34e8401486b97eb05ace116a14fe353 Mon Sep 17 00:00:00 2001 From: Oliver Tappe Date: Mon, 2 Apr 2007 13:36:40 +0000 Subject: * added support for removing an export (from disk and config-DB) git-svn-id: http://svn.openslx.org/svn/openslx/trunk@855 95ad53e4-c205-0410-b2fa-d234c58c8868 --- installer/OpenSLX/OSExport/Engine.pm | 177 +++++++++++++++++++++++------------ 1 file changed, 117 insertions(+), 60 deletions(-) (limited to 'installer/OpenSLX/OSExport/Engine.pm') diff --git a/installer/OpenSLX/OSExport/Engine.pm b/installer/OpenSLX/OSExport/Engine.pm index a6ab6640..03c4c224 100644 --- a/installer/OpenSLX/OSExport/Engine.pm +++ b/installer/OpenSLX/OSExport/Engine.pm @@ -97,6 +97,55 @@ sub initialize } } } + my $distro = accessDistro($distroName); + $distro->initialize($self); + $self->{distro} = $distro; + + # load module for the requested export type: + my $exporter = accessExporter($exportType); + $exporter->initialize($self); + $self->{'exporter'} = $exporter; + + # setup source and target paths: + $self->{'vendor-os-path'} + = "$openslxConfig{'stage1-path'}/$vendorOSName"; + $self->{'export-path'} + = "$openslxConfig{'export-path'}/$exportType/$vendorOSName"; + vlog 1, _tr("vendor-OS from '%s' will be exported to '%s'", + $self->{'vendor-os-path'}, $self->{'export-path'}); +} + +sub exportVendorOS +{ + my $self = shift; + + $self->{'exporter'}->exportVendorOS( + $self->{'vendor-os-path'}, + $self->{'export-path'} + ); + vlog 0, _tr("vendor-OS '%s' successfully exported to '%s'!", + $self->{'vendor-os-path'}, $self->{'export-path'}); + $self->addExportToConfigDB(); +} + +sub purgeExport +{ + my $self = shift; + + if ($self->{'exporter'}->purgeExport($self->{'export-path'})) { + vlog 0, _tr("export '%s' successfully removed!", + $self->{'export-path'}); + } + $self->removeExportFromConfigDB(); +} + +################################################################################ +### implementation methods +################################################################################ +sub accessDistro +{ + my $distroName = shift; + my $distroModule = "OpenSLX::OSExport::Distro::" .$supportedDistros{lc($distroName)}->{module}; @@ -112,11 +161,13 @@ sub initialize die _tr('Could not load module <%s> (Version <%s> required, but <%s> found)', $distroModule, 1.01, $modVersion); } - my $distro = $distroModule->new; - $distro->initialize($self); - $self->{distro} = $distro; + return $distroModule->new; +} + +sub accessExporter +{ + my $exportType = shift; - # load module for the requested export type: my $exportTypeModule = "OpenSLX::OSExport::ExportType::" .$supportedExportTypes{lc($exportType)}->{module}; @@ -132,37 +183,11 @@ sub initialize die _tr('Could not load module <%s> (Version <%s> required, but <%s> found)', $exportTypeModule, 1.01, $modVersion); } - my $exporter = $exportTypeModule->new; - $exporter->initialize($self); - $self->{'exporter'} = $exporter; - - # setup source and target paths: - $self->{'vendor-os-path'} - = "$openslxConfig{'stage1-path'}/$vendorOSName"; - $self->{'export-path'} - = "$openslxConfig{'export-path'}/$exportType/$vendorOSName"; - vlog 1, _tr("vendor-OS from '%s' will be exported to '%s'", - $self->{'vendor-os-path'}, $self->{'export-path'}); + return $exportTypeModule->new; } -sub exportVendorOS -{ - my $self = shift; - - $self->{'exporter'}->exportVendorOS( - $self->{'vendor-os-path'}, - $self->{'export-path'} - ); - $self->addExportToConfigDB(); -} - -################################################################################ -### implementation methods -################################################################################ -sub addExportToConfigDB +sub accessConfigDB { - my $self = shift; - my $configDBModule = "OpenSLX::ConfigDB"; unless (eval "require $configDBModule") { if ($! == 2) { @@ -176,40 +201,72 @@ sub addExportToConfigDB die _tr('Could not load module <%s> (Version <%s> required, but <%s> found)', $configDBModule, 1.01, $modVersion); } - my $openslxDB = $configDBModule->new(); - $openslxDB->connect(); + } + return $configDBModule->new(); +} + +sub addExportToConfigDB +{ + my $self = shift; - # insert new export if it doesn't already exist in DB: - my $exportName = $self->{'vendor-os-name'}; - my $export - = $openslxDB->fetchExportByFilter({ + my $openslxDB = accessConfigDB(); + $openslxDB->connect(); + + # insert new export if it doesn't already exist in DB: + my $exportName = $self->{'vendor-os-name'}; + my $export + = $openslxDB->fetchExportByFilter({ + 'name' => $exportName, + 'type' => $self->{'export-type'}, + }); + if (defined $export) { + vlog 0, _tr("No need to change export '%s' in OpenSLX-database.\n", + $exportName); + } else { + my $vendorOSName = $self->{'vendor-os-name'}; + my $vendorOS + = $openslxDB->fetchVendorOSByFilter({'name' => $vendorOSName}); + if (!defined $vendorOS) { + die _tr("vendor-OS '%s' could not be found in OpenSLX-database, giving up!\n", + $vendorOSName); + } + my $id = $openslxDB->addExport( + { + 'vendor_os_id' => $vendorOS->{id}, 'name' => $exportName, 'type' => $self->{'export-type'}, - }); - if (defined $export) { - vlog 0, _tr("No need to change export '%s' in OpenSLX-database.\n", - $exportName); - } else { - my $vendorOSName = $self->{'vendor-os-name'}; - my $vendorOS - = $openslxDB->fetchVendorOSByFilter({'name' => $vendorOSName}); - if (!defined $vendorOS) { - die _tr("vendor-OS '%s' could not be found in OpenSLX-database, giving up!\n", - $vendorOSName); } - my $id = $openslxDB->addExport( - { - 'vendor_os_id' => $vendorOS->{id}, - 'name' => $exportName, - 'type' => $self->{'export-type'}, - } - ); - vlog 0, _tr("Export <%s> has been added to DB (ID=%s).\n", - $exportName, $id); - } + ); + vlog 0, _tr("Export '%s' has been added to DB (ID=%s).\n", + $exportName, $id); + } - $openslxDB->disconnect(); + $openslxDB->disconnect(); +} + +sub removeExportFromConfigDB +{ + my $self = shift; + + my $openslxDB = accessConfigDB(); + $openslxDB->connect(); + + # remove export from DB: + my $exportName = $self->{'vendor-os-name'}; + my $export + = $openslxDB->fetchExportByFilter({ + 'name' => $exportName, + 'type' => $self->{'export-type'}, + }); + if (!defined $export) { + vlog 0, _tr("Export '%s' didn't exist in OpenSLX-database.\n", + $exportName); + } else { + $openslxDB->removeExport($export->{id}); + vlog 0, _tr("Export '%s' has been removed from DB.\n", $exportName); } + + $openslxDB->disconnect(); } 1; -- cgit v1.2.3-55-g7522