View | Details | Raw Unified | Return to bug 167017 | Differences between
and this patch

Collapse All | Expand All

(-)p5-FusionInventory-Agent/Makefile (-22 / +58 lines)
Lines 2-12 Link Here
2
# Date created:		2011-08-18
2
# Date created:		2011-08-18
3
# Whom:			Gvozdikov Veniamin <g.veniamin@googlemail.com>
3
# Whom:			Gvozdikov Veniamin <g.veniamin@googlemail.com>
4
#
4
#
5
# $FreeBSD: ports/net-mgmt/p5-FusionInventory-Agent/Makefile,v 1.7 2012/08/15 06:46:08 rm Exp $
5
# $FreeBSD: ports/net-mgmt/p5-FusionInventory-Agent/Makefile,v 1.6 2012/06/01 05:23:16 dinoex Exp $
6
#
6
#
7
7
8
PORTNAME=	FusionInventory-Agent
8
PORTNAME=	FusionInventory-Agent
9
PORTVERSION=	2.2.4
9
PORTVERSION=	2.2.5
10
CATEGORIES=	net-mgmt
10
CATEGORIES=	net-mgmt
11
MASTER_SITES=	CPAN
11
MASTER_SITES=	CPAN
12
MASTER_SITE_SUBDIR=	CPAN:FUSINV
12
MASTER_SITE_SUBDIR=	CPAN:FUSINV
Lines 15-48 Link Here
15
MAINTAINER=	g.veniamin@googlemail.com
15
MAINTAINER=	g.veniamin@googlemail.com
16
COMMENT=	Agent for OCS Inventory server and FusionInventory for GLPI servers
16
COMMENT=	Agent for OCS Inventory server and FusionInventory for GLPI servers
17
17
18
OPTIONS=	CUPS "Enable CUPS" OFF \
19
		HTTP "Enable HTTP daemon mode" OFF \
20
		ZLIB "Enable Zlib compression" ON \
21
		SSL "Enable SSL" OFF \
22
		DMIDECODE "Enable dmidecode hardware information" ON \
23
		PCIUTILS "Enable pciutils hardware information" ON \
24
		NMAP "Enable NMAP network inventory" OFF
25
18
LICENSE=	GPLv2
26
LICENSE=	GPLv2
19
27
20
BUILD_DEPENDS=	p5-Crypt-SSLeay>=0:${PORTSDIR}/security/p5-Crypt-SSLeay \
28
USE_GMAKE=	yes
21
		p5-File-ShareDir>=0:${PORTSDIR}/devel/p5-File-ShareDir \
29
22
		p5-HTTP-Daemon>=0:${PORTSDIR}/www/p5-HTTP-Daemon \
30
BUILD_DEPENDS=	p5-Text-Template>=0:${PORTSDIR}/textproc/p5-Text-Template \
23
		p5-HTTP-Server-Simple>=0:${PORTSDIR}/www/p5-HTTP-Server-Simple \
31
		p5-ExtUtils-MakeMaker>=6.59:${PORTSDIR}/devel/p5-ExtUtils-MakeMaker \
24
		p5-HTTP-Server-Simple-Authen>=0:${PORTSDIR}/www/p5-HTTP-Server-Simple-Authen \
25
		p5-Net-CUPS>=0.6:${PORTSDIR}/print/p5-Net-CUPS \
26
		p5-Net-IP>=0:${PORTSDIR}/net-mgmt/p5-Net-IP \
27
		p5-Proc-Daemon>=0:${PORTSDIR}/devel/p5-Proc-Daemon \
28
		p5-Proc-PID-File>=0:${PORTSDIR}/devel/p5-Proc-PID-File \
29
		p5-UNIVERSAL-require>=0:${PORTSDIR}/devel/p5-UNIVERSAL-require \
32
		p5-UNIVERSAL-require>=0:${PORTSDIR}/devel/p5-UNIVERSAL-require \
30
		p5-XML-Simple>=0:${PORTSDIR}/textproc/p5-XML-Simple \
33
		p5-Net-IP>=0:${PORTSDIR}/net-mgmt/p5-Net-IP \
34
		p5-Digest-MD5>=0:${PORTSDIR}/security/p5-Digest-MD5 \
31
		p5-XML-TreePP>=0:${PORTSDIR}/textproc/p5-XML-TreePP \
35
		p5-XML-TreePP>=0:${PORTSDIR}/textproc/p5-XML-TreePP \
32
		p5-libwww>=0:${PORTSDIR}/www/p5-libwww
36
		p5-libwww>=0:${PORTSDIR}/www/p5-libwww \
37
		p5-File-Which>=0:${PORTSDIR}/sysutils/p5-File-Which
33
RUN_DEPENDS:=	${BUILD_DEPENDS}
38
RUN_DEPENDS:=	${BUILD_DEPENDS}
34
RUN_DEPENDS+=	dmidecode:${PORTSDIR}/sysutils/dmidecode \
35
		lspci:${PORTSDIR}/sysutils/pciutils \
36
		nmap:${PORTSDIR}/security/nmap
37
39
38
TEST_DEPENDS=	p5-Test-Exception>=0:${PORTSDIR}/devel/p5-Test-Exception
40
TEST_DEPENDS=	p5-Test-Exception>=0:${PORTSDIR}/devel/p5-Test-Exception \
41
		p5-Test-MockModule>=0:${PORTSDIR}/devel/p5-Test-MockModule \
42
		p5-HTTP-Server-Simple>=0:${PORTSDIR}/www/p5-HTTP-Server-Simple \
43
		p5-HTTP-Server-Simple-Authen>=0:${PORTSDIR}/www/p5-HTTP-Server-Simple-Authen \
44
		p5-HTTP-Proxy>=0:${PORTSDIR}/www/p5-HTTP-Proxy \
45
		p5-IPC-Run>=0:${PORTSDIR}/devel/p5-IPC-Run \
46
		p5-YAML>=0:${PORTSDIR}/textproc/p5-YAML \
47
		p5-IO-Capture>=0:${PORTSDIR}/devel/p5-IO-Capture \
39
48
40
PERL_CONFIGURE=	yes
49
PERL_CONFIGURE=	yes
41
MAN3PREFIX=	${PREFIX}
42
50
43
MAN1=		fusioninventory-agent.1 \
51
MAN1=		fusioninventory-agent.1 \
44
		fusioninventory-injector.1
52
		fusioninventory-injector.1
45
46
MAN3=		FusionInventory::Agent.3 \
53
MAN3=		FusionInventory::Agent.3 \
47
		FusionInventory::Agent::Config.3 \
54
		FusionInventory::Agent::Config.3 \
48
		FusionInventory::Agent::HTTP::Client.3 \
55
		FusionInventory::Agent::HTTP::Client.3 \
Lines 84-92 Link Here
84
91
85
.include <bsd.port.pre.mk>
92
.include <bsd.port.pre.mk>
86
93
87
.if ${PERL_LEVEL} < 501000
94
.if defined(WITH_CUPS)
88
BUILD_DEPENDS+=	p5-IO-Compress>=0:${PORTSDIR}/archivers/p5-IO-Compress
95
RUN_DEPENDS+=		p5-Net-CUPS>=0.6:${PORTSDIR}/print/p5-Net-CUPS
89
RUN_DEPENDS+=	p5-IO-Compress>=0:${PORTSDIR}/archivers/p5-IO-Compress
96
.endif
97
98
.if defined(WITH_HTTP)
99
RUN_DEPENDS+=		p5-HTTP-Daemon>=0:${PORTSDIR}/www/p5-HTTP-Daemon
90
.endif
100
.endif
91
101
102
.if defined(WITH_ZLIB)
103
RUN_DEPENDS+=		p5-Compress-Raw-Zlib>=0:${PORTSDIR}/archivers/p5-Compress-Raw-Zlib
104
.endif
105
106
.if defined(WITH_SSL)
107
RUN_DEPENDS+=		p5-Crypt-SSLeay>=0:${PORTSDIR}/security/p5-Crypt-SSLeay \
108
			p5-LWP-Protocol-https>=0:${PORTSDIR}/www/p5-LWP-Protocol-https
109
.endif
110
111
.if defined(WITH_DMIDECODE)
112
RUN_DEPENDS+=	dmidecode:${PORTSDIR}/sysutils/dmidecode
113
.endif
114
115
.if defined(WITH_PCIUTILS)
116
RUN_DEPENDS+=	lspci:${PORTSDIR}/sysutils/pciutils
117
.endif
118
119
.if defined(WITH_NMAP)
120
RUN_DEPENDS+=	nmap:${PORTSDIR}/security/nmap
121
.endif
122
123
post-patch-script:
124
	@${ECHO_MSG} -n ">> Removing unneeded patched files..."
125
	@${FIND} ${WRKSRC} -type f \( -name '*.orig' \) -delete
126
	@${ECHO_MSG} " [ DONE ]"
127
92
.include <bsd.port.post.mk>
128
.include <bsd.port.post.mk>
(-)p5-FusionInventory-Agent/distinfo (-2 / +2 lines)
Lines 1-2 Link Here
1
SHA256 (FusionInventory-Agent-2.2.4.tar.gz) = 4a3976d6db551eb33a15fa4609e9b0c3c83a536783ac6d3a23fe7f3400587cd6
1
SHA256 (FusionInventory-Agent-2.2.5.tar.gz) = f082e55f561c92e2ed4af0d7946f00c19984401723c0e2b3e233757320aa8804
2
SIZE (FusionInventory-Agent-2.2.4.tar.gz) = 1160610
2
SIZE (FusionInventory-Agent-2.2.5.tar.gz) = 1172852
(-)p5-FusionInventory-Agent/files/patch-Makefile.PL (-30 lines)
Lines 1-30 Link Here
1
--- Makefile.PL.orig	2012-07-23 01:47:59.000000000 +0400
2
+++ Makefile.PL	2012-08-13 11:36:04.404805799 +0400
3
@@ -105,12 +105,12 @@
4
         INSTALLLIB           => '$(DATADIR)/lib',
5
         INSTALLSITELIB       => '$(DATADIR)/lib',
6
         INSTALLVENDORLIB     => '$(DATADIR)/lib',
7
-        INSTALLMAN1DIR       => '$(PREFIX)/share/man/man1',
8
-        INSTALLSITEMAN1DIR   => '$(PREFIX)/share/man/man1',
9
-        INSTALLVENDORMAN1DIR => '$(PREFIX)/share/man/man1',
10
-        INSTALLMAN3DIR       => '$(PREFIX)/share/man/man3',
11
-        INSTALLSITEMAN3DIR   => '$(PREFIX)/share/man/man3',
12
-        INSTALLVENDORMAN3DIR => '$(PREFIX)/share/man/man3',
13
+        INSTALLMAN1DIR       => '$(PREFIX)/man/man1',
14
+        INSTALLSITEMAN1DIR   => '$(PREFIX)/man/man1',
15
+        INSTALLVENDORMAN1DIR => '$(PREFIX)/man/man1',
16
+        INSTALLMAN3DIR       => '$(PREFIX)/man/man3',
17
+        INSTALLSITEMAN3DIR   => '$(PREFIX)/man/man3',
18
+        INSTALLVENDORMAN3DIR => '$(PREFIX)/man/man3',
19
         SYSCONFDIR           => '$(PREFIX)/etc/fusioninventory',
20
         DATADIR              => '$(PREFIX)/share/fusioninventory',
21
         LOCALSTATEDIR        => '$(PREFIX)/var/fusioninventory',
22
@@ -201,7 +201,7 @@
23
     $manifypods =~ s/manifypods : pure_all/manifypods : pure_all fusioninventory-agent.1.html/;
24
     $manifypods .= <<'EOF';
25
 fusioninventory-agent.1.html: fusioninventory-agent
26
-	pod2html --infile=$< --outfile=$@
27
+	pod2html --infile=$? --outfile=$@
28
 
29
 EOF
30
     return $manifypods;
(-)p5-FusionInventory-Agent/files/patch-add_jails_support (+64 lines)
Line 0 Link Here
1
--- lib/FusionInventory/Agent/Task/Inventory/Input/Virtualization/Jails.pm	1970-01-01 01:00:00.000000000 +0100
2
+++ lib/FusionInventory/Agent/Task/Inventory/Input/Virtualization/Jails.pm	2012-05-29 09:35:00.000000000 +0100
3
@@ -0,0 +1,61 @@
4
+package FusionInventory::Agent::Task::Inventory::Input::Virtualization::Jails;
5
+
6
+use strict;
7
+use warnings;
8
+
9
+use FusionInventory::Agent::Tools;
10
+
11
+sub isEnabled {
12
+    return canRun('jls');
13
+}
14
+
15
+sub doInventory {
16
+    my (%params) = @_;
17
+
18
+    my $inventory = $params{inventory};
19
+    my $logger    = $params{inventory};
20
+
21
+    my $command = 'jls -n';
22
+    foreach my $machine (_getVirtualMachines(logger => $logger)) {
23
+        $inventory->addEntry(
24
+            section => 'VIRTUALMACHINES', entry => $machine
25
+        );
26
+    }
27
+}
28
+
29
+sub  _getVirtualMachines {
30
+    my (%params) = (
31
+        command => 'jls -n',
32
+        @_
33
+    );
34
+
35
+    my $handle = getFileHandle(%params);
36
+
37
+    return unless $handle;
38
+
39
+    my @machines;
40
+    while (my $line = <$handle>) {
41
+        my $info;
42
+        foreach my $item (split(' ', $line)) {
43
+            next unless $item =~ /(\S+)=(\S+)/;
44
+            my $key   = $1;
45
+            my $value = $2;
46
+            $info->{$1} = $2;
47
+        }
48
+
49
+        my $machine = {
50
+            VMTYPE    => 'jail',
51
+            NAME      => $info->{'host.hostname'},
52
+            VMID      => $info->{'jid'},
53
+            STATUS    => 'running'
54
+        };
55
+
56
+        push @machines, $machine;
57
+
58
+    }
59
+    close $handle;
60
+
61
+    return @machines;
62
+}
63
+
64
+1;
(-)p5-FusionInventory-Agent/files/patch-fix_install_paths (+26 lines)
Line 0 Link Here
1
--- Makefile.PL.orig	2012-04-05 10:25:15.000000000 +0200
2
+++ Makefile.PL	2012-04-17 12:20:45.000000000 +0200
3
@@ -95,22 +95,12 @@
4
 
5
     # for some reason, initialising variables from the global scope doesn't work
6
     %variables = (
7
-        PREFIX               => '/usr/local',
8
-        INSTALLSCRIPT        => '$(PREFIX)/bin',
9
-        INSTALLSITESCRIPT    => '$(PREFIX)/bin',
10
-        INSTALLVENDORSCRIPT  => '$(PREFIX)/bin',
11
         INSTALLLIB           => '$(DATADIR)/lib',
12
         INSTALLSITELIB       => '$(DATADIR)/lib',
13
         INSTALLVENDORLIB     => '$(DATADIR)/lib',
14
-        INSTALLMAN1DIR       => '$(PREFIX)/share/man/man1',
15
-        INSTALLSITEMAN1DIR   => '$(PREFIX)/share/man/man1',
16
-        INSTALLVENDORMAN1DIR => '$(PREFIX)/share/man/man1',
17
-        INSTALLMAN3DIR       => '$(PREFIX)/share/man/man3',
18
-        INSTALLSITEMAN3DIR   => '$(PREFIX)/share/man/man3',
19
-        INSTALLVENDORMAN3DIR => '$(PREFIX)/share/man/man3',
20
         SYSCONFDIR           => '$(PREFIX)/etc/fusioninventory',
21
         DATADIR              => '$(PREFIX)/share/fusioninventory',
22
-        LOCALSTATEDIR        => '$(PREFIX)/var/fusioninventory',
23
+        LOCALSTATEDIR        => '/var/run/fusioninventory',
24
     );
25
 
26
     # allow variables defined on command line to override defaults
(-)p5-FusionInventory-Agent/files/patch-more_raid_support (+442 lines)
Line 0 Link Here
1
--- lib/FusionInventory/Agent/Task/Inventory/Input/BSD/Storages/Megaraid.pm.orig	1970-01-01 01:00:00.000000000 +0100
2
+++ lib/FusionInventory/Agent/Task/Inventory/Input/BSD/Storages/Megaraid.pm	2012-08-24 11:02:56.000000000 +0200
3
@@ -0,0 +1,50 @@
4
+package FusionInventory::Agent::Task::Inventory::Input::BSD::Storages::Megaraid;
5
+
6
+# Authors: Egor Shornikov <se@wbr.su>, Egor Morozov <akrus@flygroup.st>
7
+# License: GPLv2+
8
+
9
+use strict;
10
+use warnings;
11
+
12
+use FusionInventory::Agent::Tools;
13
+use FusionInventory::Agent::Task::Inventory::Input::BSD::Storages;
14
+
15
+sub isEnabled {
16
+    return canRun('mfiutil');
17
+}
18
+
19
+sub doInventory {
20
+    my (%params) = @_;
21
+
22
+    my $inventory = $params{inventory};
23
+    my $logger    = $params{logger};
24
+
25
+    my $handle = getFileHandle(
26
+        logger => $logger,
27
+        command => 'mfiutil show drives'
28
+    );
29
+    return unless $handle;
30
+
31
+    while (my $line = <$handle>) {
32
+	unless ( $line =~ m/^[^(]*\(\s+(\d+\w+)\)\s+\S+\s+<(\S+)\s+(\S+)\s+\S+\s+serial=(\S+)>\s+(\S+)\s+.*$/ ) { next; }
33
+		my ( $size, $vendor, $model, $serial, $type ) = ( $1, $2, $3, $4, $5 );
34
+
35
+		if ( $size =~ /(\d+)G/ ){
36
+			$size = $1 * 1024;
37
+		} elsif( $size =~ /(\d+)T/ ){
38
+			$size = $1 * 1024 * 1024;
39
+		}
40
+
41
+		my $storage;
42
+		$storage->{NAME} = "$vendor $model";
43
+		$storage->{DESCRIPTION} = $type;
44
+		$storage->{TYPE} = 'disk';
45
+		$storage->{DISKSIZE} = $size;
46
+		$storage->{SERIALNUMBER} = $serial;
47
+		
48
+		$inventory->addEntry(section => 'STORAGES', entry => $storage);
49
+    }
50
+    close $handle;
51
+}
52
+
53
+1;
54
--- lib/FusionInventory/Agent/Task/Inventory/Input/Generic/Storages/3ware.pm.orig	1970-01-01 01:00:00.000000000 +0100
55
+++ lib/FusionInventory/Agent/Task/Inventory/Input/Generic/Storages/3ware.pm	2012-08-24 10:58:20.000000000 +0200
56
@@ -0,0 +1,178 @@
57
+package FusionInventory::Agent::Task::Inventory::Input::Generic::Storages::3ware;
58
+
59
+use strict;
60
+use warnings;
61
+
62
+use FusionInventory::Agent::Tools;
63
+use FusionInventory::Agent::Tools::Linux;
64
+
65
+use English qw(-no_match_vars);
66
+
67
+# Tested on 2.6.* kernels
68
+#
69
+# Cards tested :
70
+#
71
+# 8006-2LP
72
+# 9500S-4LP
73
+# 9550SXU-4LP
74
+# 9550SXU-8LP
75
+# 9650SE-2LP
76
+# 9650SE-4LPML
77
+# 9650SE-8LPML
78
+#
79
+# AMCC/3ware CLI (version 2.00.0X.XXX)
80
+
81
+sub isEnabled {
82
+    return canRun('tw_cli');
83
+}
84
+
85
+sub doInventory {
86
+    my (%params) = @_;
87
+
88
+    my $inventory = $params{inventory};
89
+    my $logger    = $params{logger};
90
+
91
+    my @devices;
92
+
93
+    foreach my $card (_getCards()) {
94
+        foreach my $unit (_getUnits($card)) {
95
+
96
+            # Try do get unit's serial in order to compare it to what was found
97
+            # in udev db.
98
+            # Works only on newer cards.
99
+            # Allow us to associate a node to a drive : sda -> WD-WMANS1648590
100
+            my $sn = getFirstMatch(
101
+                logger => $logger,
102
+                command => "tw_cli info $card->{id} $unit->{id} serial",
103
+                pattern => qr/serial number\s=\s(\w+)/
104
+            );
105
+
106
+            foreach my $port (_getPorts($card, $unit)) {
107
+                # Finally, getting drives' values.
108
+                my $storage = _getStorage($card, $port);
109
+
110
+                if ($OSNAME eq 'Linux') {
111
+
112
+                    @devices = getDevicesFromUdev(logger => $logger) unless @devices;
113
+
114
+                    foreach my $device (@devices) {
115
+# How does this work with multiple older cards
116
+# where serial for units is not implemented ?
117
+# Need to be tested on a system with multiple
118
+# 3ware cards.
119
+                        if (
120
+                                $device->{SERIALNUMBER} eq 'AMCC_' . $sn ||
121
+                                $device->{MODEL} eq 'Logical_Disk_' . $unit->{index}
122
+                           ) {
123
+                            $storage->{NAME} = $device->{NAME};
124
+                        }
125
+                    }
126
+                }
127
+
128
+                $inventory->addEntry(section => 'STORAGES', entry => $storage);
129
+            }
130
+        }
131
+    }
132
+}
133
+
134
+
135
+sub _getCards {
136
+    my ($file) = @_;
137
+
138
+    my $handle = getFileHandle(
139
+        file => $file,
140
+        command => "tw_cli info"
141
+    );
142
+    return unless $handle;
143
+
144
+    my @cards;
145
+    while (my $line = <$handle>) {
146
+        next unless $line =~ /^(c\d+)\s+([\w-]+)/;
147
+        push @cards, { id => $1, model => $2 };
148
+    }
149
+    close $handle;
150
+
151
+    return @cards;
152
+}
153
+
154
+sub _getUnits {
155
+    my ($card, $file) = @_;
156
+
157
+    my $handle = getFileHandle(
158
+        file => $file,
159
+        command => "tw_cli info $card->{id}"
160
+    );
161
+    return unless $handle;
162
+
163
+    my @units;
164
+    while (my $line = <$handle>) {
165
+        next unless $line =~ /^(u(\d+))/;
166
+        push @units, { id => $1, index => $2 };
167
+    }
168
+    close $handle;
169
+
170
+    return @units;
171
+}
172
+
173
+sub _getPorts {
174
+    my ($card, $unit, $file) = @_;
175
+
176
+    my $handle = getFileHandle(
177
+        file => $file,
178
+        command => "tw_cli info $card->{id} $unit->{id}"
179
+    );
180
+    return unless $handle;
181
+
182
+    my @ports;
183
+    while (my $line = <$handle>) {
184
+        next unless $line =~ /(p\d+)/;
185
+        push @ports, { id => $1 };
186
+    }
187
+    close $handle;
188
+
189
+    return @ports;
190
+}
191
+
192
+sub _getStorage {
193
+    my ($card, $port, $file) = @_;
194
+
195
+    my $handle = getFileHandle(
196
+        file => $file,
197
+        command =>
198
+            "tw_cli info $card->{id} $port->{id} model serial capacity firmware"
199
+    );
200
+    return unless $handle;
201
+
202
+    my $storage;
203
+    while (my $line = <$handle>) {
204
+        if ($line =~ /Model\s=\s(.*)/) {
205
+            $storage->{MODEL} = $1;
206
+        } elsif ($line =~ /Serial\s=\s(.*)/) {
207
+            $storage->{SERIALNUMBER} = $1;
208
+        } elsif ($line =~ /Capacity\s=\s(\S+)\sGB.*/) {
209
+            $storage->{DISKSIZE} = 1024 * $1;
210
+        } elsif ($line =~ /Firmware Version\s=\s(.*)/) {
211
+            $storage->{FIRMWARE} = $1
212
+        }
213
+    }
214
+    close $handle;
215
+
216
+    $storage->{MANUFACTURER} = getCanonicalManufacturer(
217
+        $storage->{MODEL}
218
+    );
219
+    $storage->{TYPE} = 'disk';
220
+
221
+    # Getting description from card model, very basic
222
+    # and unreliable
223
+    # Assuming only IDE drives can be plugged in
224
+    # 5xxx/6xxx cards and
225
+    # SATA drives only to 7xxx/8xxx/9xxxx cards
226
+    $storage->{DESCRIPTION} = 
227
+        $card->{model} =~ /^[56]/  ? 'IDE'  :
228
+        $card->{model} =~ /^[789]/ ? 'SATA' :
229
+        undef;
230
+
231
+    return $storage;
232
+}
233
+
234
+1;
235
--- lib/FusionInventory/Agent/Task/Inventory/Input/Linux/Storages/3ware.pm.orig	2012-08-24 10:57:58.000000000 +0200
236
+++ lib/FusionInventory/Agent/Task/Inventory/Input/Linux/Storages/3ware.pm	1970-01-01 01:00:00.000000000 +0100
237
@@ -1,171 +0,0 @@
238
-package FusionInventory::Agent::Task::Inventory::Input::Linux::Storages::3ware;
239
-
240
-use strict;
241
-use warnings;
242
-
243
-use FusionInventory::Agent::Tools;
244
-use FusionInventory::Agent::Tools::Linux;
245
-
246
-# Tested on 2.6.* kernels
247
-#
248
-# Cards tested :
249
-#
250
-# 8006-2LP
251
-# 9500S-4LP
252
-# 9550SXU-4LP
253
-# 9550SXU-8LP
254
-# 9650SE-2LP
255
-# 9650SE-4LPML
256
-# 9650SE-8LPML
257
-#
258
-# AMCC/3ware CLI (version 2.00.0X.XXX)
259
-
260
-sub isEnabled {
261
-    return canRun('tw_cli');
262
-}
263
-
264
-sub doInventory {
265
-    my (%params) = @_;
266
-
267
-    my $inventory = $params{inventory};
268
-    my $logger    = $params{logger};
269
-
270
-    my @devices = getDevicesFromUdev(logger => $logger);
271
-
272
-    foreach my $card (_getCards()) {
273
-        foreach my $unit (_getUnits($card)) {
274
-
275
-            # Try do get unit's serial in order to compare it to what was found
276
-            # in udev db.
277
-            # Works only on newer cards.
278
-            # Allow us to associate a node to a drive : sda -> WD-WMANS1648590
279
-            my $sn = getFirstMatch(
280
-                logger => $logger,
281
-                command => "tw_cli info $card->{id} $unit->{id} serial",
282
-                pattern => qr/serial number\s=\s(\w+)/
283
-            );
284
-
285
-            foreach my $port (_getPorts($card, $unit)) {
286
-                # Finally, getting drives' values.
287
-                my $storage = _getStorage($card, $port);
288
-
289
-                foreach my $device (@devices) {
290
-                    # How does this work with multiple older cards
291
-                    # where serial for units is not implemented ?
292
-                    # Need to be tested on a system with multiple
293
-                    # 3ware cards.
294
-                    if (
295
-                        $device->{SERIALNUMBER} eq 'AMCC_' . $sn ||
296
-                        $device->{MODEL} eq 'Logical_Disk_' . $unit->{index}
297
-                    ) {
298
-                        $storage->{NAME} = $device->{NAME};
299
-                    }
300
-                }
301
-
302
-                $inventory->addEntry(section => 'STORAGES', entry => $storage);
303
-            }
304
-        }
305
-    }
306
-}
307
-
308
-
309
-sub _getCards {
310
-    my ($file) = @_;
311
-
312
-    my $handle = getFileHandle(
313
-        file => $file,
314
-        command => "tw_cli info"
315
-    );
316
-    return unless $handle;
317
-
318
-    my @cards;
319
-    while (my $line = <$handle>) {
320
-        next unless $line =~ /^(c\d+)\s+([\w-]+)/;
321
-        push @cards, { id => $1, model => $2 };
322
-    }
323
-    close $handle;
324
-
325
-    return @cards;
326
-}
327
-
328
-sub _getUnits {
329
-    my ($card, $file) = @_;
330
-
331
-    my $handle = getFileHandle(
332
-        file => $file,
333
-        command => "tw_cli info $card->{id}"
334
-    );
335
-    return unless $handle;
336
-
337
-    my @units;
338
-    while (my $line = <$handle>) {
339
-        next unless $line =~ /^(u(\d+))/;
340
-        push @units, { id => $1, index => $2 };
341
-    }
342
-    close $handle;
343
-
344
-    return @units;
345
-}
346
-
347
-sub _getPorts {
348
-    my ($card, $unit, $file) = @_;
349
-
350
-    my $handle = getFileHandle(
351
-        file => $file,
352
-        command => "tw_cli info $card->{id} $unit->{id}"
353
-    );
354
-    return unless $handle;
355
-
356
-    my @ports;
357
-    while (my $line = <$handle>) {
358
-        next unless $line =~ /(p\d+)/;
359
-        push @ports, { id => $1 };
360
-    }
361
-    close $handle;
362
-
363
-    return @ports;
364
-}
365
-
366
-sub _getStorage {
367
-    my ($card, $port, $file) = @_;
368
-
369
-    my $handle = getFileHandle(
370
-        file => $file,
371
-        command =>
372
-            "tw_cli info $card->{id} $port->{id} model serial capacity firmware"
373
-    );
374
-    return unless $handle;
375
-
376
-    my $storage;
377
-    while (my $line = <$handle>) {
378
-        if ($line =~ /Model\s=\s(.*)/) {
379
-            $storage->{MODEL} = $1;
380
-        } elsif ($line =~ /Serial\s=\s(.*)/) {
381
-            $storage->{SERIALNUMBER} = $1;
382
-        } elsif ($line =~ /Capacity\s=\s(\S+)\sGB.*/) {
383
-            $storage->{DISKSIZE} = 1024 * $1;
384
-        } elsif ($line =~ /Firmware Version\s=\s(.*)/) {
385
-            $storage->{FIRMWARE} = $1
386
-        }
387
-    }
388
-    close $handle;
389
-
390
-    $storage->{MANUFACTURER} = getCanonicalManufacturer(
391
-        $storage->{MODEL}
392
-    );
393
-    $storage->{TYPE} = 'disk';
394
-
395
-    # Getting description from card model, very basic
396
-    # and unreliable
397
-    # Assuming only IDE drives can be plugged in
398
-    # 5xxx/6xxx cards and
399
-    # SATA drives only to 7xxx/8xxx/9xxxx cards
400
-    $storage->{DESCRIPTION} = 
401
-        $card->{model} =~ /^[56]/  ? 'IDE'  :
402
-        $card->{model} =~ /^[789]/ ? 'SATA' :
403
-        undef;
404
-
405
-    return $storage;
406
-}
407
-
408
-1;
409
--- MANIFEST.orig	2012-08-24 11:06:47.000000000 +0200
410
+++ MANIFEST	2012-08-24 11:07:32.000000000 +0200
411
@@ -67,6 +67,7 @@
412
 lib/FusionInventory/Agent/Task/Inventory/Input/BSD/Networks.pm
413
 lib/FusionInventory/Agent/Task/Inventory/Input/BSD/Softwares.pm
414
 lib/FusionInventory/Agent/Task/Inventory/Input/BSD/Storages.pm
415
+lib/FusionInventory/Agent/Task/Inventory/Input/BSD/Storages/Megaraid.pm
416
 lib/FusionInventory/Agent/Task/Inventory/Input/BSD/Uptime.pm
417
 lib/FusionInventory/Agent/Task/Inventory/Input/Generic.pm
418
 lib/FusionInventory/Agent/Task/Inventory/Input/Generic/Dmidecode.pm
419
@@ -94,6 +95,7 @@
420
 lib/FusionInventory/Agent/Task/Inventory/Input/Generic/Softwares/RPM.pm
421
 lib/FusionInventory/Agent/Task/Inventory/Input/Generic/Softwares/Slackware.pm
422
 lib/FusionInventory/Agent/Task/Inventory/Input/Generic/Storages.pm
423
+lib/FusionInventory/Agent/Task/Inventory/Input/Generic/Storages/3ware.pm
424
 lib/FusionInventory/Agent/Task/Inventory/Input/Generic/Storages/HP.pm
425
 lib/FusionInventory/Agent/Task/Inventory/Input/Generic/USB.pm
426
 lib/FusionInventory/Agent/Task/Inventory/Input/Generic/Users.pm
427
@@ -128,7 +130,6 @@
428
 lib/FusionInventory/Agent/Task/Inventory/Input/Linux/Memory.pm
429
 lib/FusionInventory/Agent/Task/Inventory/Input/Linux/Networks.pm
430
 lib/FusionInventory/Agent/Task/Inventory/Input/Linux/Storages.pm
431
-lib/FusionInventory/Agent/Task/Inventory/Input/Linux/Storages/3ware.pm
432
 lib/FusionInventory/Agent/Task/Inventory/Input/Linux/Storages/Adaptec.pm
433
 lib/FusionInventory/Agent/Task/Inventory/Input/Linux/Storages/Lsilogic.pm
434
 lib/FusionInventory/Agent/Task/Inventory/Input/Linux/Storages/ServeRaid.pm
435
@@ -160,6 +161,7 @@
436
 lib/FusionInventory/Agent/Task/Inventory/Input/Solaris/Storages.pm
437
 lib/FusionInventory/Agent/Task/Inventory/Input/Virtualization.pm
438
 lib/FusionInventory/Agent/Task/Inventory/Input/Virtualization/Hpvm.pm
439
+lib/FusionInventory/Agent/Task/Inventory/Input/Virtualization/Jails.pm
440
 lib/FusionInventory/Agent/Task/Inventory/Input/Virtualization/Libvirt.pm
441
 lib/FusionInventory/Agent/Task/Inventory/Input/Virtualization/Lxc.pm
442
 lib/FusionInventory/Agent/Task/Inventory/Input/Virtualization/Parallels.pm
(-)p5-FusionInventory-Agent/pkg-plist (-9 / +11 lines)
Lines 1-12 Link Here
1
bin/fusioninventory-agent
1
bin/fusioninventory-agent
2
bin/fusioninventory-injector
2
bin/fusioninventory-injector
3
etc/fusioninventory/agent.cfg
4
share/fusioninventory/html/favicon.ico
5
share/fusioninventory/html/index.tpl
6
share/fusioninventory/html/inventory.tpl
7
share/fusioninventory/html/logo.png
8
share/fusioninventory/html/now.tpl
9
share/fusioninventory/html/site.css
10
share/fusioninventory/lib/FusionInventory/Agent.pm
3
share/fusioninventory/lib/FusionInventory/Agent.pm
11
share/fusioninventory/lib/FusionInventory/Agent/Config.pm
4
share/fusioninventory/lib/FusionInventory/Agent/Config.pm
12
share/fusioninventory/lib/FusionInventory/Agent/HTTP/Client.pm
5
share/fusioninventory/lib/FusionInventory/Agent/HTTP/Client.pm
Lines 52-57 Link Here
52
share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input/BSD/Memory.pm
45
share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input/BSD/Memory.pm
53
share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input/BSD/Networks.pm
46
share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input/BSD/Networks.pm
54
share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input/BSD/Softwares.pm
47
share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input/BSD/Softwares.pm
48
share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input/BSD/Storages/Megaraid.pm
55
share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input/BSD/Storages.pm
49
share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input/BSD/Storages.pm
56
share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input/BSD/Uptime.pm
50
share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input/BSD/Uptime.pm
57
share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input/Generic.pm
51
share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input/Generic.pm
Lines 80-85 Link Here
80
share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input/Generic/Softwares/RPM.pm
74
share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input/Generic/Softwares/RPM.pm
81
share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input/Generic/Softwares/Slackware.pm
75
share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input/Generic/Softwares/Slackware.pm
82
share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input/Generic/Storages.pm
76
share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input/Generic/Storages.pm
77
share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input/Generic/Storages/3ware.pm
83
share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input/Generic/Storages/HP.pm
78
share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input/Generic/Storages/HP.pm
84
share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input/Generic/USB.pm
79
share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input/Generic/USB.pm
85
share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input/Generic/Users.pm
80
share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input/Generic/Users.pm
Lines 113-119 Link Here
113
share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input/Linux/Memory.pm
108
share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input/Linux/Memory.pm
114
share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input/Linux/Networks.pm
109
share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input/Linux/Networks.pm
115
share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input/Linux/Storages.pm
110
share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input/Linux/Storages.pm
116
share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input/Linux/Storages/3ware.pm
117
share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input/Linux/Storages/Adaptec.pm
111
share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input/Linux/Storages/Adaptec.pm
118
share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input/Linux/Storages/Lsilogic.pm
112
share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input/Linux/Storages/Lsilogic.pm
119
share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input/Linux/Storages/ServeRaid.pm
113
share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input/Linux/Storages/ServeRaid.pm
Lines 146-151 Link Here
146
share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input/Solaris/Storages.pm
140
share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input/Solaris/Storages.pm
147
share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input/Virtualization.pm
141
share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input/Virtualization.pm
148
share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input/Virtualization/Hpvm.pm
142
share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input/Virtualization/Hpvm.pm
143
share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input/Virtualization/Jails.pm
149
share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input/Virtualization/Libvirt.pm
144
share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input/Virtualization/Libvirt.pm
150
share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input/Virtualization/Lxc.pm
145
share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input/Virtualization/Lxc.pm
151
share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input/Virtualization/Parallels.pm
146
share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input/Virtualization/Parallels.pm
Lines 199-205 Link Here
199
share/fusioninventory/lib/FusionInventory/Agent/XML/Query/Inventory.pm
194
share/fusioninventory/lib/FusionInventory/Agent/XML/Query/Inventory.pm
200
share/fusioninventory/lib/FusionInventory/Agent/XML/Query/Prolog.pm
195
share/fusioninventory/lib/FusionInventory/Agent/XML/Query/Prolog.pm
201
share/fusioninventory/lib/FusionInventory/Agent/XML/Response.pm
196
share/fusioninventory/lib/FusionInventory/Agent/XML/Response.pm
197
share/fusioninventory/html/favicon.ico
198
share/fusioninventory/html/index.tpl
199
share/fusioninventory/html/inventory.tpl
200
share/fusioninventory/html/logo.png
201
share/fusioninventory/html/now.tpl
202
share/fusioninventory/html/site.css
202
share/fusioninventory/pci.ids
203
share/fusioninventory/pci.ids
204
@dirrm share/fusioninventory/html
203
@dirrm share/fusioninventory/lib/FusionInventory/Agent/XML/Query
205
@dirrm share/fusioninventory/lib/FusionInventory/Agent/XML/Query
204
@dirrm share/fusioninventory/lib/FusionInventory/Agent/XML
206
@dirrm share/fusioninventory/lib/FusionInventory/Agent/XML
205
@dirrm share/fusioninventory/lib/FusionInventory/Agent/Tools
207
@dirrm share/fusioninventory/lib/FusionInventory/Agent/Tools
Lines 218-223 Link Here
218
@dirrm share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input/Generic/Dmidecode
220
@dirrm share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input/Generic/Dmidecode
219
@dirrm share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input/Generic
221
@dirrm share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input/Generic
220
@dirrm share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input/BSD/Archs
222
@dirrm share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input/BSD/Archs
223
@dirrm share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input/BSD/Storages
221
@dirrm share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input/BSD
224
@dirrm share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input/BSD
222
@dirrm share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input/AIX
225
@dirrm share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input/AIX
223
@dirrm share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input
226
@dirrm share/fusioninventory/lib/FusionInventory/Agent/Task/Inventory/Input
Lines 231-236 Link Here
231
@dirrm share/fusioninventory/lib/FusionInventory/Agent
234
@dirrm share/fusioninventory/lib/FusionInventory/Agent
232
@dirrm share/fusioninventory/lib/FusionInventory
235
@dirrm share/fusioninventory/lib/FusionInventory
233
@dirrm share/fusioninventory/lib
236
@dirrm share/fusioninventory/lib
234
@dirrm share/fusioninventory/html
235
@dirrm share/fusioninventory
237
@dirrm share/fusioninventory
236
@dirrmtry etc/fusioninventory
238
@dirrmtry etc/fusioninventory

Return to bug 167017