[pve-devel] [PATCH pve-container] Make volume create and mount code independent of storage plugin types
Dmitry Petuhov
mityapetuhov at gmail.com
Sun Sep 11 08:07:36 CEST 2016
Instead, rely on plugin-defined supported formats to decide if it
supports subvols.
Still workaround 'rbd' plugin, that cannot be used for LXC without
krbd. Maybe better way is to pass $scfg into plugin's plugindata()
in storage code? So plugin could show instance's capabilities
instead of whole plugin's capabilities, that may or may not be available
in instance.
Signed-off-by: Dmitry Petuhov <mityapetuhov at gmail.com>
---
src/PVE/LXC.pm | 45 +++++++++++++++------------------------------
1 file changed, 15 insertions(+), 30 deletions(-)
diff --git a/src/PVE/LXC.pm b/src/PVE/LXC.pm
index 35ce796..70d13e4 100644
--- a/src/PVE/LXC.pm
+++ b/src/PVE/LXC.pm
@@ -1238,12 +1238,8 @@ sub mountpoint_mount {
if ($scfg->{path}) {
$mounted_dev = run_with_loopdev($domount, $path);
$use_loopdev = 1;
- } elsif ($scfg->{type} eq 'drbd' || $scfg->{type} eq 'lvm' ||
- $scfg->{type} eq 'rbd' || $scfg->{type} eq 'lvmthin') {
- $mounted_dev = $path;
- &$domount($path);
} else {
- die "unsupported storage type '$scfg->{type}'\n";
+ &$domount($path);
}
return wantarray ? ($path, $use_loopdev, $mounted_dev) : $path;
} else {
@@ -1330,37 +1326,26 @@ sub create_disks {
my $size_kb = int(${size_gb}*1024) * 1024;
- my $scfg = PVE::Storage::storage_config($storecfg, $storage);
# fixme: use better naming ct-$vmid-disk-X.raw?
- if ($scfg->{type} eq 'dir' || $scfg->{type} eq 'nfs') {
- if ($size_kb > 0) {
- $volid = PVE::Storage::vdisk_alloc($storecfg, $storage, $vmid, 'raw',
- undef, $size_kb);
- format_disk($storecfg, $volid, $rootuid, $rootgid);
- } else {
+ if ($size_kb > 0) {
+ my $scfg = PVE::Storage::storage_config($storecfg, $storage);
+ die "krbd option must be enabled on storage type 'rbd'\n" if ($scfg->{type} eq 'rbd') && !$scfg->{krbd};
+
+ $volid = PVE::Storage::vdisk_alloc($storecfg, $storage, $vmid, 'raw',
+ undef, $size_kb);
+ format_disk($storecfg, $volid, $rootuid, $rootgid);
+ } else {
+ my ($defFormat, $validFormats) = PVE::Storage::storage_default_format($storecfg, $storage);
+ if (grep { $_ eq 'subvol' } @$validFormats) {
$volid = PVE::Storage::vdisk_alloc($storecfg, $storage, $vmid, 'subvol',
undef, 0);
push @$chown_vollist, $volid;
- }
- } elsif ($scfg->{type} eq 'zfspool') {
+ } else {
+ die "Selected storage does not support subvols. Please, specify image size or select another storage";
+ }
+ }
- $volid = PVE::Storage::vdisk_alloc($storecfg, $storage, $vmid, 'subvol',
- undef, $size_kb);
- push @$chown_vollist, $volid;
- } elsif ($scfg->{type} eq 'drbd' || $scfg->{type} eq 'lvm' || $scfg->{type} eq 'lvmthin') {
-
- $volid = PVE::Storage::vdisk_alloc($storecfg, $storage, $vmid, 'raw', undef, $size_kb);
- format_disk($storecfg, $volid, $rootuid, $rootgid);
-
- } elsif ($scfg->{type} eq 'rbd') {
-
- die "krbd option must be enabled on storage type '$scfg->{type}'\n" if !$scfg->{krbd};
- $volid = PVE::Storage::vdisk_alloc($storecfg, $storage, $vmid, 'raw', undef, $size_kb);
- format_disk($storecfg, $volid, $rootuid, $rootgid);
- } else {
- die "unable to create containers on storage type '$scfg->{type}'\n";
- }
push @$vollist, $volid;
$mountpoint->{volume} = $volid;
$mountpoint->{size} = $size_kb * 1024;
--
2.1.4
More information about the pve-devel
mailing list