]> git.proxmox.com Git - pve-container.git/commitdiff
use dynamically created plugin objects for LXSetup
authorDietmar Maurer <dietmar@proxmox.com>
Thu, 23 Apr 2015 08:49:25 +0000 (10:49 +0200)
committerDietmar Maurer <dietmar@proxmox.com>
Thu, 23 Apr 2015 08:49:25 +0000 (10:49 +0200)
So that we can add additional information like the OS version.

src/PVE/LXCSetup.pm
src/PVE/LXCSetup/Base.pm
src/PVE/LXCSetup/Debian.pm

index 0ebb47b7e7f589623e98f73ba53181388f6c62ef..626324354e471549aa94929d5e9571bc8cc44265 100644 (file)
@@ -14,7 +14,6 @@ my $autodetect_type = sub {
     
     my $rootfs = $conf->{'lxc.rootfs'};
     if (-f "$rootfs/etc/debian_version") {
-
        return "debian";
     }
     die "unable to detect OS disribution\n";
@@ -33,9 +32,11 @@ sub new {
        $type = &$autodetect_type($conf);
     }
     
-    $self->{plugin} = $plugins->{$type} ||
+    my $plugin_class = $plugins->{$type} ||
        "no such OS type '$type'\n";
 
+    $self->{plugin} = $plugin_class->new($conf);
+    
     return $self;
 }
 
index 8fd86b512ab10018bd42b4e82fe16a15ccdbcb78..751cf86a16bbc1d2bb0acda99cc336ff0cd9a6cf 100644 (file)
@@ -11,6 +11,11 @@ use Encode;
 use PVE::INotify;
 use PVE::Tools;
 
+sub new {
+    my ($class, $conf) = @_;
+
+    return bless { conf => $conf }, $class;
+}
 
 my $lookup_dns_conf = sub {
     my ($conf) = @_;
@@ -120,7 +125,7 @@ my $update_etc_hosts = sub {
 };
 
 sub set_dns {
-    my ($class, $conf) = @_;
+    my ($self, $conf) = @_;
 
     my ($searchdomains, $nameserver) = &$lookup_dns_conf($conf);
     
@@ -141,7 +146,7 @@ sub set_dns {
 }
 
 sub set_hostname {
-    my ($class, $conf) = @_;
+    my ($self, $conf) = @_;
     
     my $hostname = $conf->{'lxc.utsname'} || 'localhost';
 
@@ -173,13 +178,13 @@ sub set_hostname {
 }
 
 sub setup_network {
-    my ($class, $conf) = @_;
+    my ($self, $conf) = @_;
 
     die "please implement this inside subclass"
 }
 
 sub setup_init {
-    my ($class, $conf) = @_;
+    my ($self, $conf) = @_;
 
     die "please implement this inside subclass"
 }
@@ -220,7 +225,7 @@ my $replacepw  = sub {
 };
 
 sub set_user_password {
-    my ($class, $conf, $user, $opt_password) = @_;
+    my ($self, $conf, $user, $opt_password) = @_;
 
     my $rootfs = $conf->{'lxc.rootfs'};
 
@@ -248,24 +253,24 @@ sub set_user_password {
 }
 
 sub pre_start_hook {
-    my ($class, $conf) = @_;
+    my ($self, $conf) = @_;
 
-    $class->setup_init($conf);
-    $class->setup_network($conf);
-    $class->set_hostname($conf);
-    $class->set_dns($conf);
+    $self->setup_init($conf);
+    $self->setup_network($conf);
+    $self->set_hostname($conf);
+    $self->set_dns($conf);
 
     # fixme: what else ?
 }
 
 sub post_create_hook {
-    my ($class, $conf, $root_password) = @_;
+    my ($self, $conf, $root_password) = @_;
 
-    $class->set_user_password($conf, 'root', $root_password);
-    $class->setup_init($conf);
-    $class->setup_network($conf);
-    $class->set_hostname($conf);
-    $class->set_dns($conf);
+    $self->set_user_password($conf, 'root', $root_password);
+    $self->setup_init($conf);
+    $self->setup_network($conf);
+    $self->set_hostname($conf);
+    $self->set_dns($conf);
     
     # fixme: what else ?
 }
index ef5c8c5aa5be33fb53ccb271a7ac76cb4971e32a..192f254dd38fbcc433e315d78fb5df15aa6af8fa 100644 (file)
@@ -11,6 +11,22 @@ use PVE::LXCSetup::Base;
 
 use base qw(PVE::LXCSetup::Base);
 
+sub new {
+    my ($class, $conf) = @_;
+
+    my $rootfs = $conf->{'lxc.rootfs'};
+    
+    my $version = PVE::Tools::file_read_firstline("$rootfs/etc/debian_version");
+
+    die "unable to read version info\n" if !defined($version);
+  
+    die "unsupported debian version '$version'\n" if $version < 6;
+
+    my $self = { conf => $conf, version => $version };
+
+    return bless $self, $class;
+}
+
 my $default_inittab = <<__EOD__;
 
 # The default runlevel.
@@ -55,7 +71,7 @@ p0::powerfail:/sbin/init 0
 __EOD__
 
 sub setup_init {
-    my ($class, $conf) = @_;
+    my ($self, $conf) = @_;
 
     my $rootfs = $conf->{'lxc.rootfs'};
 
@@ -76,7 +92,7 @@ sub setup_init {
 }
 
 sub setup_network {
-    my ($class, $conf) = @_;
+    my ($self, $conf) = @_;
 
     my $rootfs = $conf->{'lxc.rootfs'};