add dummy for DRBD9
This commit is contained in:
@ -29,6 +29,7 @@ use PVE::Storage::ISCSIDirectPlugin;
|
|||||||
use PVE::Storage::GlusterfsPlugin;
|
use PVE::Storage::GlusterfsPlugin;
|
||||||
use PVE::Storage::ZFSPoolPlugin;
|
use PVE::Storage::ZFSPoolPlugin;
|
||||||
use PVE::Storage::ZFSPlugin;
|
use PVE::Storage::ZFSPlugin;
|
||||||
|
use PVE::Storage::DRBDPlugin;
|
||||||
|
|
||||||
# load and initialize all plugins
|
# load and initialize all plugins
|
||||||
PVE::Storage::DirPlugin->register();
|
PVE::Storage::DirPlugin->register();
|
||||||
@ -41,6 +42,7 @@ PVE::Storage::ISCSIDirectPlugin->register();
|
|||||||
PVE::Storage::GlusterfsPlugin->register();
|
PVE::Storage::GlusterfsPlugin->register();
|
||||||
PVE::Storage::ZFSPoolPlugin->register();
|
PVE::Storage::ZFSPoolPlugin->register();
|
||||||
PVE::Storage::ZFSPlugin->register();
|
PVE::Storage::ZFSPlugin->register();
|
||||||
|
PVE::Storage::DRBDPlugin->register();
|
||||||
PVE::Storage::Plugin->init();
|
PVE::Storage::Plugin->init();
|
||||||
|
|
||||||
my $UDEVADM = '/sbin/udevadm';
|
my $UDEVADM = '/sbin/udevadm';
|
||||||
|
|||||||
229
PVE/Storage/DRBDPlugin.pm
Normal file
229
PVE/Storage/DRBDPlugin.pm
Normal file
@ -0,0 +1,229 @@
|
|||||||
|
package PVE::Storage::DRBDPlugin;
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use IO::File;
|
||||||
|
use PVE::Tools qw(run_command trim);
|
||||||
|
use PVE::Storage::Plugin;
|
||||||
|
use PVE::JSONSchema qw(get_standard_option);
|
||||||
|
|
||||||
|
use base qw(PVE::Storage::Plugin);
|
||||||
|
|
||||||
|
# Configuration
|
||||||
|
|
||||||
|
sub type {
|
||||||
|
return 'drbd';
|
||||||
|
}
|
||||||
|
|
||||||
|
sub plugindata {
|
||||||
|
return {
|
||||||
|
content => [ {images => 1}, { images => 1 }],
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
sub properties {
|
||||||
|
return {
|
||||||
|
redundancy => {
|
||||||
|
description => "The redundancy count specifies the number of nodes to which the resource should be deployed. It must be at least 1 and at most the number of nodes in the cluster.",
|
||||||
|
type => 'integer',
|
||||||
|
minimum => 1,
|
||||||
|
maximum => 16,
|
||||||
|
default => 2,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
sub options {
|
||||||
|
return {
|
||||||
|
redundancy => { optional => 1 },
|
||||||
|
nodes => { optional => 1 },
|
||||||
|
disable => { optional => 1 },
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
# Storage implementation
|
||||||
|
|
||||||
|
sub parse_volname {
|
||||||
|
my ($class, $volname) = @_;
|
||||||
|
|
||||||
|
if ($volname =~ m/^(vm-(\d+)-[a-z][a-z0-9\-\_\.]*[a-z0-9]+)$/) {
|
||||||
|
return ('images', $1, $2);
|
||||||
|
}
|
||||||
|
|
||||||
|
die "unable to parse lvm volume name '$volname'\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
sub filesystem_path {
|
||||||
|
my ($class, $scfg, $volname) = @_;
|
||||||
|
|
||||||
|
my ($vtype, $name, $vmid) = $class->parse_volname($volname);
|
||||||
|
|
||||||
|
die "fixme";
|
||||||
|
|
||||||
|
my $vg = $scfg->{vgname};
|
||||||
|
|
||||||
|
my $path = "/dev/$vg/$name";
|
||||||
|
|
||||||
|
return wantarray ? ($path, $vmid, $vtype) : $path;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub create_base {
|
||||||
|
my ($class, $storeid, $scfg, $volname) = @_;
|
||||||
|
|
||||||
|
die "can't create base images in drbd storage\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
sub clone_image {
|
||||||
|
my ($class, $scfg, $storeid, $volname, $vmid, $snap) = @_;
|
||||||
|
|
||||||
|
die "can't clone images in drbd storage\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
sub alloc_image {
|
||||||
|
my ($class, $storeid, $scfg, $vmid, $fmt, $name, $size) = @_;
|
||||||
|
|
||||||
|
die "unsupported format '$fmt'" if $fmt ne 'raw';
|
||||||
|
|
||||||
|
die "illegal name '$name' - sould be 'vm-$vmid-*'\n"
|
||||||
|
if $name && $name !~ m/^vm-$vmid-/;
|
||||||
|
|
||||||
|
|
||||||
|
if (!$name) {
|
||||||
|
die "fixme";
|
||||||
|
|
||||||
|
my $lvs = {};
|
||||||
|
|
||||||
|
for (my $i = 1; $i < 100; $i++) {
|
||||||
|
my $tn = "vm-$vmid-disk-$i";
|
||||||
|
if (!defined ($lvs->{fixme})) {
|
||||||
|
$name = $tn;
|
||||||
|
last;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
die "unable to allocate an image name for VM $vmid in storage '$storeid'\n"
|
||||||
|
if !$name;
|
||||||
|
|
||||||
|
my $cmd = ['drbdmanage', 'new-volume', $name];
|
||||||
|
|
||||||
|
# fixme: deploy
|
||||||
|
|
||||||
|
run_command($cmd, errmsg => "drbdmanage new-volume error");
|
||||||
|
|
||||||
|
return $name;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub free_image {
|
||||||
|
my ($class, $storeid, $scfg, $volname, $isBase) = @_;
|
||||||
|
|
||||||
|
my $cmd = ['drbdmanage', 'remove-volume', $volname];
|
||||||
|
|
||||||
|
# fixme: undeploy
|
||||||
|
|
||||||
|
run_command($cmd, errmsg => "drbdmanage remove-volume error");
|
||||||
|
|
||||||
|
return undef;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub list_images {
|
||||||
|
my ($class, $storeid, $scfg, $vmid, $vollist, $cache) = @_;
|
||||||
|
|
||||||
|
my $vgname = $scfg->{vgname};
|
||||||
|
|
||||||
|
#$cache->{lvs} = lvm_lvs() if !$cache->{lvs};
|
||||||
|
|
||||||
|
my $res = [];
|
||||||
|
|
||||||
|
die "fixme";
|
||||||
|
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub status {
|
||||||
|
my ($class, $storeid, $scfg, $cache) = @_;
|
||||||
|
|
||||||
|
die "fixme";
|
||||||
|
|
||||||
|
return undef;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub activate_storage {
|
||||||
|
my ($class, $storeid, $scfg, $cache) = @_;
|
||||||
|
|
||||||
|
return undef;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub deactivate_storage {
|
||||||
|
my ($class, $storeid, $scfg, $cache) = @_;
|
||||||
|
|
||||||
|
return undef;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub activate_volume {
|
||||||
|
my ($class, $storeid, $scfg, $volname, $exclusive, $cache) = @_;
|
||||||
|
|
||||||
|
return undef;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub deactivate_volume {
|
||||||
|
my ($class, $storeid, $scfg, $volname, $cache) = @_;
|
||||||
|
|
||||||
|
return undef;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub volume_resize {
|
||||||
|
my ($class, $scfg, $storeid, $volname, $size, $running) = @_;
|
||||||
|
|
||||||
|
$size = ($size/1024/1024) . "M";
|
||||||
|
|
||||||
|
my $path = $class->path($scfg, $volname);
|
||||||
|
|
||||||
|
die "fixme";
|
||||||
|
|
||||||
|
#my $cmd = ['/sbin/lvextend', '-L', $size, $path];
|
||||||
|
#run_command($cmd, errmsg => "error resizing volume '$path'");
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub volume_snapshot {
|
||||||
|
my ($class, $scfg, $storeid, $volname, $snap, $running) = @_;
|
||||||
|
|
||||||
|
die "drbd snapshot is not implemented";
|
||||||
|
}
|
||||||
|
|
||||||
|
sub volume_snapshot_rollback {
|
||||||
|
my ($class, $scfg, $storeid, $volname, $snap) = @_;
|
||||||
|
|
||||||
|
die "drbd snapshot rollback is not implemented";
|
||||||
|
}
|
||||||
|
|
||||||
|
sub volume_snapshot_delete {
|
||||||
|
my ($class, $scfg, $storeid, $volname, $snap) = @_;
|
||||||
|
|
||||||
|
die "drbd snapshot delete is not implemented";
|
||||||
|
}
|
||||||
|
|
||||||
|
sub volume_has_feature {
|
||||||
|
my ($class, $scfg, $feature, $storeid, $volname, $snapname, $running) = @_;
|
||||||
|
|
||||||
|
my $features = {
|
||||||
|
copy => { base => 1, current => 1},
|
||||||
|
};
|
||||||
|
|
||||||
|
my ($vtype, $name, $vmid, $basename, $basevmid, $isBase) =
|
||||||
|
$class->parse_volname($volname);
|
||||||
|
|
||||||
|
my $key = undef;
|
||||||
|
if($snapname){
|
||||||
|
$key = 'snap';
|
||||||
|
}else{
|
||||||
|
$key = $isBase ? 'base' : 'current';
|
||||||
|
}
|
||||||
|
return 1 if $features->{$feature}->{$key};
|
||||||
|
|
||||||
|
return undef;
|
||||||
|
}
|
||||||
|
|
||||||
|
1;
|
||||||
@ -1,4 +1,4 @@
|
|||||||
SOURCES=Plugin.pm DirPlugin.pm LVMPlugin.pm NFSPlugin.pm ISCSIPlugin.pm RBDPlugin.pm SheepdogPlugin.pm ISCSIDirectPlugin.pm GlusterfsPlugin.pm ZFSPoolPlugin.pm ZFSPlugin.pm
|
SOURCES=Plugin.pm DirPlugin.pm LVMPlugin.pm NFSPlugin.pm ISCSIPlugin.pm RBDPlugin.pm SheepdogPlugin.pm ISCSIDirectPlugin.pm GlusterfsPlugin.pm ZFSPoolPlugin.pm ZFSPlugin.pm DRBDPlugin.pm
|
||||||
|
|
||||||
.PHONY: install
|
.PHONY: install
|
||||||
install:
|
install:
|
||||||
|
|||||||
Reference in New Issue
Block a user