summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--installer/OpenSLX/OSExport/Engine.pm77
-rw-r--r--installer/OpenSLX/OSSetup/Engine.pm79
-rw-r--r--lib/OpenSLX/Utils.pm28
3 files changed, 48 insertions, 136 deletions
diff --git a/installer/OpenSLX/OSExport/Engine.pm b/installer/OpenSLX/OSExport/Engine.pm
index 6329f245..a54042c5 100644
--- a/installer/OpenSLX/OSExport/Engine.pm
+++ b/installer/OpenSLX/OSExport/Engine.pm
@@ -26,7 +26,9 @@ use Exporter;
use strict;
use Carp;
use File::Basename;
+
use OpenSLX::Basics;
+use OpenSLX::Utils;
use vars qw(%supportedExportTypes %supportedDistros);
@@ -97,12 +99,16 @@ sub initialize
}
}
}
- my $distro = accessDistro($distroName);
+ my $distroModuleName = $supportedDistros{lc($distroName)}->{module};
+ my $distro
+ = instantiateClass("OpenSLX::OSExport::Distro::$distroModuleName");
$distro->initialize($self);
$self->{distro} = $distro;
# load module for the requested export type:
- my $exporter = accessExporter($exportType);
+ my $typeModuleName = $supportedExportTypes{lc($exportType)}->{module};
+ my $exporter
+ = instantiateClass("OpenSLX::OSExport::ExportType::$typeModuleName");
$exporter->initialize($self);
$self->{'exporter'} = $exporter;
@@ -142,74 +148,11 @@ sub purgeExport
################################################################################
### implementation methods
################################################################################
-sub accessDistro
-{
- my $distroName = shift;
-
- my $distroModule
- = "OpenSLX::OSExport::Distro::"
- .$supportedDistros{lc($distroName)}->{module};
- unless (eval "require $distroModule") {
- if ($! == 2) {
- die _tr("Distro-module <%s> not found!\n", $distroModule);
- } else {
- die _tr("Unable to load distro-module <%s> (%s)\n", $distroModule, $@);
- }
- }
- my $modVersion = $distroModule->VERSION;
- if ($modVersion < 1.01) {
- die _tr('Could not load module <%s> (Version <%s> required, but <%s> found)',
- $distroModule, 1.01, $modVersion);
- }
- return $distroModule->new;
-}
-
-sub accessExporter
-{
- my $exportType = shift;
-
- my $exportTypeModule
- = "OpenSLX::OSExport::ExportType::"
- .$supportedExportTypes{lc($exportType)}->{module};
- unless (eval "require $exportTypeModule") {
- if ($! == 2) {
- die _tr("Export-type-module <%s> not found!\n", $exportTypeModule);
- } else {
- die _tr("Unable to load export-type-module <%s> (%s)\n", $exportTypeModule, $@);
- }
- }
- my $modVersion = $exportTypeModule->VERSION;
- if ($modVersion < 1.01) {
- die _tr('Could not load module <%s> (Version <%s> required, but <%s> found)',
- $exportTypeModule, 1.01, $modVersion);
- }
- return $exportTypeModule->new;
-}
-
-sub accessConfigDB
-{
- my $configDBModule = "OpenSLX::ConfigDB";
- unless (eval "require $configDBModule") {
- if ($! == 2) {
- vlog 1, _tr("ConfigDB-module not found, unable to access OpenSLX-database.\n");
- } else {
- die _tr("Unable to load ConfigDB-module <%s> (%s)\n", $configDBModule, $@);
- }
- } else {
- my $modVersion = $configDBModule->VERSION;
- if ($modVersion < 1.01) {
- die _tr('Could not load module <%s> (Version <%s> required, but <%s> found)',
- $configDBModule, 1.01, $modVersion);
- }
- }
- return $configDBModule->new();
-}
-
sub addExportToConfigDB
{
my $self = shift;
- my $openslxDB = accessConfigDB();
+ my $openslxDB = instantiateClass("OpenSLX::ConfigDB");
$openslxDB->connect();
# insert new export if it doesn't already exist in DB:
@@ -250,7 +193,7 @@ sub removeExportFromConfigDB
{
my $self = shift;
- my $openslxDB = accessConfigDB();
+ my $openslxDB = instantiateClass("OpenSLX::ConfigDB");
$openslxDB->connect();
# remove export from DB:
diff --git a/installer/OpenSLX/OSSetup/Engine.pm b/installer/OpenSLX/OSSetup/Engine.pm
index 98077a27..16d8a801 100644
--- a/installer/OpenSLX/OSSetup/Engine.pm
+++ b/installer/OpenSLX/OSSetup/Engine.pm
@@ -108,28 +108,16 @@ sub initialize
}
# load module for the requested distro:
- my $distroModule
- = "OpenSLX::OSSetup::Distro::"
- .$supportedDistros{lc($distroName)}->{module};
+ my $distroClass;
if ($actionType eq 'clone') {
- # fallback to generic clone module, such that we can clone
+ # force generic clone module, such that we can clone
# distro's for which there is no specific distro-module yet
# (like for example for Gentoo):
- $distroModule = "OpenSLX::OSSetup::Distro::Any_Clone";
- }
- unless (eval "require $distroModule") {
- if ($! == 2) {
- die _tr("Distro-module '%s' not found!\n", $distroModule);
- } else {
- die _tr("Unable to load distro-module '%s' (%s)\n", $distroModule, $@);
- }
- }
- my $modVersion = $distroModule->VERSION;
- if ($modVersion < 1.01) {
- die _tr("Could not load module '%s' (Version '%s' required, but '%s' found)\n",
- $distroModule, 1.01, $modVersion);
+ $distroClass = "Any_Clone";
+ } else {
+ $distroClass = $supportedDistros{lc($distroName)}->{module};
}
- my $distro = $distroModule->new;
+ my $distro = instantiateClass("OpenSLX::OSSetup::Distro::$distroClass");
$distro->initialize($self);
$self->{distro} = $distro;
@@ -291,7 +279,7 @@ sub addInstalledVendorOSToConfigDB
die _tr("can't import vendor-OS '%s', since it doesn't exist!\n",
$self->{'vendor-os-path'});
}
- my $openslxDB = accessConfigDB();
+ my $openslxDB = instantiateClass("OpenSLX::ConfigDB");
$openslxDB->connect();
# insert new vendor-os if it doesn't already exist in DB:
my $vendorOSName = $self->{'vendor-os-name'};
@@ -394,21 +382,9 @@ sub createPackager
{
my $self = shift;
- my $packagerModule
+ my $packagerClass
= "OpenSLX::OSSetup::Packager::$self->{distro}->{'packager-type'}";
- unless (eval "require $packagerModule") {
- if ($! == 2) {
- die _tr("Packager-module '%s' not found!\n", $packagerModule);
- } else {
- die _tr("Unable to load packager-module '%s' (%s)\n", $packagerModule, $@);
- }
- }
- my $modVersion = $packagerModule->VERSION;
- if ($modVersion < 1.01) {
- die _tr("Could not load module '%s' (Version '%s' required, but '%s' found)\n",
- $packagerModule, 1.01, $modVersion);
- }
- my $packager = $packagerModule->new;
+ my $packager = instantiateClass($packagerClass);
$packager->initialize($self);
$self->{'packager'} = $packager;
}
@@ -417,21 +393,9 @@ sub createMetaPackager
{
my $self = shift;
- my $metaPackagerModule
+ my $metaPackagerClass
= "OpenSLX::OSSetup::MetaPackager::$self->{distro}->{'meta-packager-type'}";
- unless (eval "require $metaPackagerModule") {
- if ($! == 2) {
- die _tr("Meta-packager-module '%s' not found!\n", $metaPackagerModule);
- } else {
- die _tr("Unable to load meta-packager-module '%s' (%s)\n", $metaPackagerModule, $@);
- }
- }
- my $modVersion = $metaPackagerModule->VERSION;
- if ($modVersion < 1.01) {
- die _tr("Could not load module '%s' (Version '%s' required, but '%s' found)\n",
- $metaPackagerModule, 1.01, $modVersion);
- }
- my $metaPackager = $metaPackagerModule->new;
+ my $metaPackager =instantiateClass($metaPackagerClass);
$metaPackager->initialize($self);
$self->{'meta-packager'} = $metaPackager;
}
@@ -800,30 +764,11 @@ sub clone_determineIncludeExcludeList
return $includeExcludeList;
}
-sub accessConfigDB
-{
- my $configDBModule = "OpenSLX::ConfigDB";
- unless (eval "require $configDBModule") {
- if ($! == 2) {
- vlog 1, _tr("ConfigDB-module not found, unable to access OpenSLX-database.\n");
- } else {
- die _tr("Unable to load ConfigDB-module '%s' (%s)\n", $configDBModule, $@);
- }
- } else {
- my $modVersion = $configDBModule->VERSION;
- if ($modVersion < 1.01) {
- die _tr("Could not load module '%s' (Version '%s' required, but '%s' found)",
- $configDBModule, 1.01, $modVersion);
- }
- }
- return $configDBModule->new();
-}
-
sub removeVendorOSFromConfigDB
{
my $self = shift;
- my $openslxDB = accessConfigDB();
+ my $openslxDB = instantiateClass("OpenSLX::ConfigDB");
$openslxDB->connect();
my $vendorOSName = $self->{'vendor-os-name'};
diff --git a/lib/OpenSLX/Utils.pm b/lib/OpenSLX/Utils.pm
index 611d6eb8..1c78f802 100644
--- a/lib/OpenSLX/Utils.pm
+++ b/lib/OpenSLX/Utils.pm
@@ -21,16 +21,17 @@ $VERSION = 1.01;
@ISA = qw(Exporter);
@EXPORT = qw(
- &copyFile &fakeFile &linkFile &slurpFile
+ &copyFile &fakeFile &linkFile &slurpFile &instantiateClass
);
################################################################################
### Module implementation
################################################################################
use Carp;
-use OpenSLX::Basics;
use File::Basename;
+use OpenSLX::Basics;
+
sub copyFile
{
my $fileName = shift;
@@ -86,4 +87,27 @@ sub slurpFile
close(F);
return $text;
}
+
+sub instantiateClass
+{
+ my $class = shift;
+ my $requestedVersion = shift;
+
+ unless (eval "require $class") {
+ if ($! == 2) {
+ die _tr("Class <%s> not found!\n", $class);
+ } else {
+ die _tr("Unable to load class <%s> (%s)\n", $class, $@);
+ }
+ }
+ if (defined $requestedVersion) {
+ my $classVersion = $class->VERSION;
+ if ($classVersion < $requestedVersion) {
+ die _tr('Could not load class <%s> (Version <%s> required, but <%s> found)',
+ $class, $requestedVersion, $classVersion);
+ }
+ }
+ return $class->new;
+}
+
1; \ No newline at end of file