File Coverage

blib/lib/FusionInventory/Agent/Task/Inventory/Linux/LVM.pm
Criterion Covered Total %
statement 42 54 77.7
branch 4 10 40.0
condition 8 13 61.5
subroutine 7 9 77.7
pod 0 2 0.0
total 61 88 69.3


line stmt bran cond sub pod time code
1             package FusionInventory::Agent::Task::Inventory::Linux::LVM;
2              
3 2     2   42514166 use strict;
  2         3  
  2         59  
4 2     2   7 use warnings;
  2         9  
  2         78  
5              
6 2     2   12 use English qw(-no_match_vars);
  2         37  
  2         21  
7              
8 2     2   1243 use FusionInventory::Agent::Tools;
  2         3  
  2         982  
9              
10             sub isEnabled {
11 0     0 0 0 my (%params) = @_;
12 0 0       0 return 0 if $params{no_category}->{lvm};
13 0         0 return canRun('lvs');
14             }
15              
16             sub doInventory {
17 0     0 0 0 my (%params) = @_;
18              
19 0         0 my $inventory = $params{inventory};
20 0         0 my $logger = $params{logger};
21              
22 0         0 foreach my $volume (_getLogicalVolumes(logger => $logger)) {
23 0         0 $inventory->addEntry(section => 'LOGICAL_VOLUMES', entry => $volume);
24             }
25              
26 0         0 foreach my $volume (_getPhysicalVolumes(logger => $logger)) {
27 0         0 $inventory->addEntry(section => 'PHYSICAL_VOLUMES', entry => $volume);
28             }
29              
30 0         0 foreach my $group (_getVolumeGroups(logger => $logger)) {
31 0         0 $inventory->addEntry(section => 'VOLUME_GROUPS', entry => $group);
32             }
33             }
34              
35             sub _getLogicalVolumes {
36 1     1   209 my (%params) = (
37             command => 'lvs -a --noheading --nosuffix --units M -o lv_name,vg_uuid,lv_attr,lv_size,lv_uuid,seg_count',
38             @_
39             );
40              
41 1         5 my $handle = getFileHandle(%params);
42 1 50       3 return unless $handle;
43              
44 1         2 my @volumes;
45 1         10 while (my $line = <$handle>) {
46 8         31 my @infos = split(/\s+/, $line);
47              
48 8   50     43 push @volumes, {
49             LV_NAME => $infos[1],
50             VG_UUID => $infos[2],
51             ATTR => $infos[3],
52             SIZE => int($infos[4]||0),
53             LV_UUID => $infos[5],
54             SEG_COUNT => $infos[6],
55             }
56              
57             }
58 1         6 close $handle;
59              
60 1         5 return @volumes;
61             }
62              
63             sub _getPhysicalVolumes {
64 3     3   391 my (%params) = (
65             command => 'pvs --noheading --nosuffix --units M -o pv_name,pv_fmt,pv_attr,pv_size,pv_free,pv_uuid,pv_pe_count,vg_uuid',
66             @_
67             );
68              
69 3         11 my $handle = getFileHandle(%params);
70 3 50       7 return unless $handle;
71              
72 3         4 my @volumes;
73 3         26 while (my $line = <$handle>) {
74 9         48 my @infos = split(/\s+/, $line);
75              
76 9         7 my $pe_size;
77 9 50 33     35 if ($infos[7] && $infos[7]>0) {
78 9         16 $pe_size = int($infos[4] / $infos[7]);
79             }
80              
81 9   50     77 push @volumes, {
      100        
82             DEVICE => $infos[1],
83             FORMAT => $infos[2],
84             ATTR => $infos[3],
85             SIZE => int($infos[4]||0),
86             FREE => int($infos[5]||0),
87             PV_UUID => $infos[6],
88             PV_PE_COUNT => $infos[7],
89             PE_SIZE => $pe_size,
90             VG_UUID => $infos[8]
91             };
92             }
93 3         15 close $handle;
94              
95 3         13 return @volumes;
96             }
97              
98             sub _getVolumeGroups {
99 3     3   546 my (%params) = (
100             command => 'vgs --noheading --nosuffix --units M -o vg_name,pv_count,lv_count,vg_attr,vg_size,vg_free,vg_uuid,vg_extent_size',
101             @_
102             );
103              
104 3         11 my $handle = getFileHandle(%params);
105 3 50       8 return unless $handle;
106              
107 3         3 my @groups;
108 3         22 while (my $line = <$handle>) {
109 5         29 my @infos = split(/\s+/, $line);
110              
111 5   50     52 push @groups, {
      100        
112             VG_NAME => $infos[1],
113             PV_COUNT => $infos[2],
114             LV_COUNT => $infos[3],
115             ATTR => $infos[4],
116             SIZE => int($infos[5]||0),
117             FREE => int($infos[6]||0),
118             VG_UUID => $infos[7],
119             VG_EXTENT_SIZE => $infos[8],
120             };
121             }
122 3         17 close $handle;
123              
124 3         11 return @groups;
125             }
126              
127             1;