[pve-devel] [PATCH 5/5] make create_rootfs sub generic

Dietmar Maurer dietmar at proxmox.com
Wed Aug 26 16:28:55 CEST 2015



On 08/21/2015 05:10 PM, Alexandre Derumier wrote:
> Signed-off-by: Alexandre Derumier <aderumier at odiso.com>
> ---
>   src/PVE/LXC/Create.pm | 131 +++++++++++---------------------------------------
>   1 file changed, 29 insertions(+), 102 deletions(-)
>
>
> @@ -279,30 +199,37 @@ sub create_rootfs {
>   	PVE::LXC::create_config($vmid, $conf);
>       }
>   
> -    my ($vtype, undef, undef, undef, undef, $isBase, $format) =
> -	PVE::Storage::parse_volname($storage_cfg, $volid);
> -	
> -    die "got strange vtype '$vtype'\n" if $vtype ne 'images';
> -
> -    die "unable to install into base volume" if $isBase;
> -
> -    if ($format eq 'subvol') {
> -	create_rootfs_subvol($storage_cfg, $storage, $volid, $vmid, $conf, $archive, $password, $restore);
> -    } elsif ($format eq 'raw') {
> -	my $scfg = PVE::Storage::storage_config($storage_cfg, $storage);
> -	PVE::Storage::activate_storage($storage_cfg, $storage);
> -	PVE::Storage::activate_volumes($storage_cfg, [$volid]);
> -	if ($scfg->{path}) {
> -	    create_rootfs_dir_loop($storage_cfg, $storage, $volid, $vmid, $conf, $archive, $password, $restore);
> -	} elsif ($scfg->{type} eq 'drbd' || $scfg->{type} eq 'rbd') {
> -	    create_rootfs_dev($storage_cfg, $storage, $volid, $vmid, $conf, $archive, $password, $restore);
> -	} else {
> -	    die "unable to create containers on storage type '$scfg->{type}'\n";
> +    my $image_path = PVE::Storage::path($storage_cfg, $volid);
> +    my $mountpoint_path = "/var/lib/lxc/$vmid/rootfs";
> +    my $mountpoint = { volume => $volid, mp => "/" };
> +    my $ms = "rootfs";
> +
> +    eval {
> +        PVE::Storage::activate_volumes($storage_cfg, [$volid]);
> +        my $loopdevs = PVE::LXC::attach_loops($storage_cfg, [$volid]);
> +
> +	if (!-d $image_path) {
> +	    my $cmd = ['mkfs.ext4', $image_path];
> +	    PVE::Tools::run_command($cmd);
>   	}
> -	PVE::Storage::deactivate_volumes($storage_cfg, [$volid]);
> -    } else {
> -	die "unsupported image format '$format'\n";
> +
> +        PVE::LXC::mountpoint_mount($ms, $mountpoint, $mountpoint_path, $storage_cfg, $loopdevs);
> +
> +        restore_and_configure($vmid, $archive, $mountpoint_path, $conf, $password, $restore);
> +    };
> +    if (my $err = $@) {
> +	eval {
> +            PVE::LXC::dettach_loops($storage_cfg, [$volid]);
> +            PVE::Storage::deactivate_volumes($storage_cfg, [$volid]);
> +	};
> +	warn $@ if $@;
> +        die $err;
>       }
> +
> +    PVE::Tools::run_command(['umount', '-l', '-d', $mountpoint_path]);
>
I wonder if that unmount everything (mountpoints below /)?




More information about the pve-devel mailing list