[pve-devel] [PATCH rebased pve-container] add -ignore-unpack-errors
Wolfgang Bumiller
w.bumiller at proxmox.com
Fri Nov 20 16:37:24 CET 2015
In some cases the user may genuinly want to ignore unpacking
errors. (Like permission denied errors on mknod commands in
some templates where the user might choose to work around
the problem manually in the running container.)
---
src/PVE/API2/LXC.pm | 9 ++++++++-
src/PVE/LXC/Create.pm | 9 +++++----
2 files changed, 13 insertions(+), 5 deletions(-)
diff --git a/src/PVE/API2/LXC.pm b/src/PVE/API2/LXC.pm
index 165e327..0a80dfc 100644
--- a/src/PVE/API2/LXC.pm
+++ b/src/PVE/API2/LXC.pm
@@ -142,6 +142,11 @@ __PACKAGE__->register_method({
type => 'string', format => 'pve-poolid',
description => "Add the VM to the specified pool.",
},
+ 'ignore-unpack-errors' => {
+ optional => 1,
+ type => 'boolean',
+ description => "Ignore errors when extracting the template.",
+ },
}),
},
returns => {
@@ -158,6 +163,8 @@ __PACKAGE__->register_method({
my $vmid = extract_param($param, 'vmid');
+ my $ignore_unpack_errors = extract_param($param, 'ignore-unpack-errors');
+
my $basecfg_fn = PVE::LXC::config_file($vmid);
my $same_container_exists = -f $basecfg_fn;
@@ -298,7 +305,7 @@ __PACKAGE__->register_method({
$vollist = PVE::LXC::create_disks($storage_cfg, $vmid, $param, $conf);
- PVE::LXC::Create::create_rootfs($storage_cfg, $vmid, $conf, $archive, $password, $restore);
+ PVE::LXC::Create::create_rootfs($storage_cfg, $vmid, $conf, $archive, $password, $restore, $ignore_unpack_errors);
# set some defaults
$conf->{hostname} ||= "CT$vmid";
$conf->{memory} ||= 512;
diff --git a/src/PVE/LXC/Create.pm b/src/PVE/LXC/Create.pm
index 014eaa0..d8f2083 100644
--- a/src/PVE/LXC/Create.pm
+++ b/src/PVE/LXC/Create.pm
@@ -132,9 +132,10 @@ sub recover_config {
}
sub restore_and_configure {
- my ($vmid, $archive, $rootdir, $conf, $password, $restore) = @_;
+ my ($vmid, $archive, $rootdir, $conf, $password, $restore, $no_unpack_error) = @_;
- restore_archive($archive, $rootdir, $conf);
+ eval { restore_archive($archive, $rootdir, $conf) };
+ die $@ if $@ && !$no_unpack_error;
if (!$restore) {
my $lxc_setup = PVE::LXC::Setup->new($conf, $rootdir); # detect OS
@@ -180,7 +181,7 @@ sub restore_and_configure {
}
sub create_rootfs {
- my ($storage_cfg, $vmid, $conf, $archive, $password, $restore) = @_;
+ my ($storage_cfg, $vmid, $conf, $archive, $password, $restore, $no_unpack_error) = @_;
my $config_fn = PVE::LXC::config_file($vmid);
if (-f $config_fn) {
@@ -210,7 +211,7 @@ sub create_rootfs {
eval {
my $rootdir = PVE::LXC::mount_all($vmid, $storage_cfg, $conf);
- restore_and_configure($vmid, $archive, $rootdir, $conf, $password, $restore);
+ restore_and_configure($vmid, $archive, $rootdir, $conf, $password, $restore, $no_unpack_error);
};
my $err = $@;
PVE::LXC::umount_all($vmid, $storage_cfg, $conf, $err ? 1 : 0);
--
2.1.4
More information about the pve-devel
mailing list