From 10404b2a580be87ed7fbd5dbb25d0f71bedb56cd Mon Sep 17 00:00:00 2001 From: Maarten Vanraes Date: Sat, 6 Aug 2016 14:33:08 +0200 Subject: Mountable: allow to get mountsource in order to match later --- lib/ManaTools/Shared/disk_backend/Mountable.pm | 33 +++++++++++++++++++++++ lib/ManaTools/Shared/disk_backend/Plugin/Btrfs.pm | 15 +++++++++++ lib/ManaTools/Shared/disk_backend/Plugin/Extfs.pm | 11 ++++++++ lib/ManaTools/Shared/disk_backend/Plugin/Mount.pm | 11 ++++++++ 4 files changed, 70 insertions(+) diff --git a/lib/ManaTools/Shared/disk_backend/Mountable.pm b/lib/ManaTools/Shared/disk_backend/Mountable.pm index 33cb1463..441333e2 100644 --- a/lib/ManaTools/Shared/disk_backend/Mountable.pm +++ b/lib/ManaTools/Shared/disk_backend/Mountable.pm @@ -61,6 +61,39 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. use Moose::Role; +requires '_get_mount_source'; + +has 'mountsource' => ( + is => 'ro', + isa => 'Maybe[Str]', +); + +around 'mountsource' => sub { + my $orig = shift; + my $self = shift; + + return $self->_get_mount_source(); +}; + +has 'mountsourcepath' => ( + is => 'ro', + isa => 'Str', + default => '/', +); + +sub mountsourcedevice { + my $self = shift; + my $mountsource = $self->mountsource(); + my @s = stat($mountsource); + # check if found and blockdevice + return $mountsource if (scalar(@s) < 7 || ($s[2] >> 12) != 6); + + # get the major and minor + my $minor = $s[6] % 256; + my $major = int (($s[6] - $minor) / 256); + return $major .':'. $minor; +} + #============================================================= =head2 find_path diff --git a/lib/ManaTools/Shared/disk_backend/Plugin/Btrfs.pm b/lib/ManaTools/Shared/disk_backend/Plugin/Btrfs.pm index 508a298d..9ee2a06e 100644 --- a/lib/ManaTools/Shared/disk_backend/Plugin/Btrfs.pm +++ b/lib/ManaTools/Shared/disk_backend/Plugin/Btrfs.pm @@ -228,6 +228,21 @@ extends 'ManaTools::Shared::disk_backend::Part'; use MooseX::ClassAttribute; +with 'ManaTools::Shared::disk_backend::Mountable'; + +sub _get_mount_source { + my $self = shift; + my $fs = $self->fs(); + + # TODO: multiple parents + # get parent partlink (which should be a blockdevice anyway) + my $parent = $fs->find_part(undef, 'parent'); + return undef if (!defined $parent); + + # return parent's devicepath + return $parent->devicepath(); +} + class_has '+type' => ( default => 'BtrfsVol' ); diff --git a/lib/ManaTools/Shared/disk_backend/Plugin/Extfs.pm b/lib/ManaTools/Shared/disk_backend/Plugin/Extfs.pm index 4dc6de27..84f8aca4 100644 --- a/lib/ManaTools/Shared/disk_backend/Plugin/Extfs.pm +++ b/lib/ManaTools/Shared/disk_backend/Plugin/Extfs.pm @@ -181,6 +181,17 @@ use MooseX::ClassAttribute; with 'ManaTools::Shared::disk_backend::Mountable'; +sub _get_mount_source { + my $self = shift; + + # get parent partlink (which should be a blockdevice anyway) + my $parent = $self->find_part(undef, 'parent'); + return undef if (!defined $parent); + + # return parent's devicepath + return $parent->devicepath(); +} + class_has '+type' => ( default => 'Extfs' ); diff --git a/lib/ManaTools/Shared/disk_backend/Plugin/Mount.pm b/lib/ManaTools/Shared/disk_backend/Plugin/Mount.pm index f93c4e6d..96aa6227 100644 --- a/lib/ManaTools/Shared/disk_backend/Plugin/Mount.pm +++ b/lib/ManaTools/Shared/disk_backend/Plugin/Mount.pm @@ -567,6 +567,7 @@ extends 'ManaTools::Shared::disk_backend::Part'; use MooseX::ClassAttribute; with 'ManaTools::Shared::disk_backend::FileSystem'; +with 'ManaTools::Shared::disk_backend::Mountable'; class_has '+type' => ( default => 'UnknownFS' @@ -589,5 +590,15 @@ class_has '+restrictions' => ( } ); +sub _get_mount_source { + my $self = shift; + + # get parent partlink (which should be a blockdevice anyway) + my $parent = $self->find_part(undef, 'parent'); + return undef if (!defined $parent); + + # return parent's devicepath + return $parent->devicepath(); +} 1; -- cgit v1.2.1