}
sub filesystem_path {
- my ($class, $scfg, $volname) = @_;
+ my ($class, $scfg, $volname, $snapname) = @_;
+
+ die "drbd snapshot is not implemented\n" if defined($snapname);
my ($vtype, $name, $vmid) = $class->parse_volname($volname);
};
sub path {
- my ($class, $scfg, $volname, $storeid) = @_;
+ my ($class, $scfg, $volname, $storeid, $snapname) = @_;
- my ($vtype, $name, $vmid) = $class->parse_volname($volname);
+ my ($vtype, $name, $vmid, undef, undef, $isBase, $format) =
+ $class->parse_volname($volname);
+
+ # Note: qcow2/qed has internal snapshot, so path is always
+ # the same (with or without snapshot => same file).
+ die "can't snapshot this image format\n"
+ if defined($snapname) && $format !~ m/^(qcow2|qed)$/;
my $path = undef;
if ($vtype eq 'images') {
}
sub path {
- my ($class, $scfg, $volname) = @_;
+ my ($class, $scfg, $volname, $storeid, $snapname) = @_;
+
+ die "volume snapshot is not possible on iscsi device"
+ if defined($snapname);
my ($vtype, $lun, $vmid) = $class->parse_volname($volname);
}
sub filesystem_path {
- my ($class, $scfg, $volname) = @_;
+ my ($class, $scfg, $volname, $snapname) = @_;
+
+ die "snapshot is not possible on iscsi storage\n" if defined($snapname);
my ($vtype, $name, $vmid) = $class->parse_volname($volname);
}
sub filesystem_path {
- my ($class, $scfg, $volname) = @_;
+ my ($class, $scfg, $volname, $snapname) = @_;
+
+ die "lvm snapshot is not implemented"if defined($snapname);
my ($vtype, $name, $vmid) = $class->parse_volname($volname);
}
sub filesystem_path {
- my ($class, $scfg, $volname, $storeid) = @_;
+ my ($class, $scfg, $volname, $snapname) = @_;
- my ($vtype, $name, $vmid) = $class->parse_volname($volname);
+ my ($vtype, $name, $vmid, undef, undef, $isBase, $format) =
+ $class->parse_volname($volname);
+
+ # Note: qcow2/qed has internal snapshot, so path is always
+ # the same (with or without snapshot => same file).
+ die "can't snapshot this image format\n"
+ if defined($snapname) && $format !~ m/^(qcow2|qed)$/;
my $dir = $class->get_subdir($scfg, $vtype);
}
sub path {
- my ($class, $scfg, $volname, $storeid) = @_;
+ my ($class, $scfg, $volname, $storeid, $snapname) = @_;
- return $class->filesystem_path($scfg, $volname, $storeid);
+ return $class->filesystem_path($scfg, $volname, $snapname);
}
sub create_base {
# Storage implementation
sub path {
- my ($class, $scfg, $volname) = @_;
+ my ($class, $scfg, $volname, $storeid, $snapname) = @_;
+
+ die "direct access to snapshots not implemented"
+ if defined($snapname);
my ($vtype, $name, $vmid) = $class->parse_volname($volname);
# virtual zfs methods (subclass can overwrite them)
sub path {
- my ($class, $scfg, $volname) = @_;
+ my ($class, $scfg, $volname, $storeid, $snapname) = @_;
my ($vtype, $name, $vmid) = $class->parse_volname($volname);
} else {
$path = "/dev/zvol/$scfg->{pool}/$volname";
}
+ $path .= "\@$snapname" if defined($snapname);
} else {
die "$vtype is not allowed in ZFSPool!";
}