LIO: Prefix backstores with the pool name

So it won't clash with another backstore in another pool

Signed-off-by: Daniel Berteaud <daniel@firewall-services.com>
This commit is contained in:
Daniel Berteaud
2019-09-26 17:27:01 +02:00
committed by Thomas Lamprecht
parent 609f8ec6cf
commit eb89269f2e

View File

@ -168,6 +168,14 @@ my $parser = sub {
}
};
# Get prefix for backstores
my $get_backstore_prefix = sub {
my ($scfg) = @_;
my $pool = $scfg->{pool};
$pool =~ s/\//-/g;
return $pool . '-';
};
# removes the given lu_name from the local list of luns
my $free_lu_name = sub {
my ($scfg, $lu_name) = @_;
@ -206,6 +214,16 @@ my $extract_volname = sub {
my $base = get_base;
if ($lunpath =~ /^$base\/$scfg->{pool}\/([\w\-]+)$/) {
$volname = $1;
my $prefix = $get_backstore_prefix->($scfg);
my $target = $get_target_settings->($scfg);
foreach my $lun (@{$target->{luns}}) {
# If we have a lun with the pool prefix matching this vol, then return this one
# like pool-pve-vm-100-disk-0
# Else, just fallback to the old name scheme which is vm-100-disk-0
if ($lun->{storage_object} =~ /^$BACKSTORE\/($prefix$volname)$/) {
return $1;
}
}
}
return $volname;
@ -259,6 +277,9 @@ my $create_lun = sub {
my $device = $params[0];
my $volname = $extract_volname->($scfg, $device);
# Here we create a new device, so we didn't get the volname prefixed with the pool name
# as extract_volname couldn't find a matching vol yet
$volname = $get_backstore_prefix->($scfg) . $volname;
my $tpg = $scfg->{lio_tpg} || die "Target Portal Group not set, aborting!\n";
# step 1: create backstore for device