File Coverage

blib/lib/FusionInventory/Agent/Task/Inventory/Virtualization/Qemu.pm
Criterion Covered Total %
statement 28 40 70.0
branch 14 26 53.8
condition 0 3 0.0
subroutine 5 7 71.4
pod 0 2 0.0
total 47 78 60.2


line stmt bran cond sub pod time code
1             package FusionInventory::Agent::Task::Inventory::Virtualization::Qemu;
2             # With Qemu 0.10.X, some option will be added to get more and easly information (UUID, memory, ...)
3              
4 2     2   51166807 use strict;
  2         11  
  2         86  
5 2     2   24 use warnings;
  2         4  
  2         100  
6              
7 2     2   1379 use FusionInventory::Agent::Tools;
  2         8  
  2         398  
8 2     2   1376 use FusionInventory::Agent::Tools::Unix;
  2         7  
  2         1339  
9              
10             sub isEnabled {
11             # Avoid duplicated entry with libvirt
12 0 0   0 0 0 return if canRun('virsh');
13              
14             return
15 0   0     0 canRun('qemu') ||
16             canRun('kvm') ||
17             canRun('qemu-kvm');
18             }
19              
20             sub _parseProcessList {
21 3     3   14541 my ($process) = @_;
22              
23              
24 3         7 my $values = {};
25              
26 3         24 my @options = split (/ -/, $process->{CMD});
27              
28 3         10 foreach my $option (@options) {
29 23 100       116 if ($option =~ m/^(?:[fhsv]d[a-d]|cdrom) (\S+)/) {
    100          
    100          
    100          
30 2 50       12 $values->{name} = $1 if !$values->{name};
31             } elsif ($option =~ m/^name (\S+)/) {
32 2         8 $values->{name} = $1;
33             } elsif ($option =~ m/^m (\S+)/) {
34 3         11 $values->{mem} = $1;
35             } elsif ($option =~ m/^uuid (\S+)/) {
36 1         3 $values->{uuid} = $1;
37             }
38              
39 23 100       60 if ($option =~ /smbios/) {
40 1 50       11 if ($option =~ m/smbios.*uuid=([a-zA-Z0-9-]+)/) {
41 1         5 $values->{uuid} = $1;
42             }
43 1 50       8 if ($option =~ m/smbios.*serial=([a-zA-Z0-9-]+)/) {
44 1         3 $values->{serial} = $1;
45             }
46             }
47             }
48              
49 3 50       12 if ($values->{mem} == 0 ) {
50             # Default value
51 0         0 $values->{mem} = 128;
52             }
53              
54 3         11 return $values;
55             }
56              
57             sub doInventory {
58 0     0 0   my (%params) = @_;
59              
60 0           my $inventory = $params{inventory};
61 0           my $logger = $params{logger};
62              
63 0           foreach my $process (getProcesses(logger => $logger)) {
64             # match only if an qemu instance
65 0 0         next if $process->{CMD} =~ /^\[/;
66 0 0         next if $process->{CMD} !~ /(qemu|kvm|qemu-kvm|qemu-system\S+) .*\S/x;
67              
68 0           my $values = _parseProcessList($process);
69 0 0         next unless $values;
70              
71             $inventory->addEntry(
72             section => 'VIRTUALMACHINES',
73             entry => {
74             NAME => $values->{name},
75             UUID => $values->{uuid},
76             VCPU => 1,
77             MEMORY => $values->{mem},
78             STATUS => "running",
79             SUBSYSTEM => $values->{vmtype},
80             VMTYPE => $values->{vmtype},
81             SERIAL => $values->{serial},
82             }
83 0           );
84             }
85             }
86              
87             1;