IBM-StorageSystem
view release on metacpan or search on metacpan
lib/IBM/StorageSystem/Drive.pm view on Meta::CPAN
package IBM::StorageSystem::Drive;
use strict;
use warnings;
use Carp qw(croak);
our $VERSION = '0.01';
our @ATTR = qw(id status error_sequence_number use UID tech_type capacity block_size
vendor_id product_id FRU_part_number FRU_identity RPM firmware_level FPGA_level
mdisk_id mdisk_name member_id enclosure_id slot_id node_id node_name quorum_id
port_1_status port_2_status);
foreach my $attr ( @ATTR ) {
{
no strict 'refs';
*{ __PACKAGE__ .'::'. $attr } = sub {
my( $self, $val ) = @_;
$self->{$attr} = $val if $val;
return $self->{$attr}
}
}
}
sub new {
my( $class, $ibm, %args ) = @_;
my $self = bless {}, $class;
defined $args{id} or croak 'Constructor failed: mandatory id argument not supplied';
foreach my $attr ( @ATTR ) { $self->{$attr} = $args{$attr} }
return $self
}
1;
__END__
=pod
=head1 NAME
IBM::StorageSystem::Drive - Class for operations with a IBM StorageSystem drive
=head1 VERSION
Version 0.01
=head1 SYNOPSIS
IBM::StorageSystem::Drive is a utility class for operations with a IBM StorageSystem drive.
use IBM::StorageSystem;
my $ibm = IBM::StorageSystem->new( user => 'admin',
host => 'my-v7000',
key_path => '/path/to/my/.ssh/private_key'
) or die "Couldn't create object! $!\n";
# Get drive ID 2 as an IBM::StorageSystem::Drive object - note that drive ID 2
# is not necessarily the physical disk in slot ID 2 - see notes below.
my $drive = $ibm->drive( 2 );
# Print the drive capacity in bytes
print $drive->capacity;
# Print the drive vendor and product IDs
print "Vendor ID: ", $drive->vendor_id, " - Product ID: ", $drive->product_id, "\n";
# Print the SAS port status and drive status for all drives in a nicely formatted list
printf("%-20s%-20s%-20s%-20s\n", 'Drive', 'SAS Port 1 Status', 'SAS Port 2 Status', 'Status');
printf("%-20s%-20s%-20s%-20s\n", '-'x18, '-'x18, '-'x18, '-'x18);
map { printf( "%-20s%-20s%-20s%-20s\n", $_->id, $_->port_1_status, $_->port_2_status, $_->status) } $ibm->get_drives;
# e.g.
# Drive SAS Port 1 Status SAS Port 2 Status Status
# ------------------ ------------------ ------------------ ------------------
# 0 online online online
# 1 online online online
# 2 online online online
# 3 online online online
# ...
# Print the drive ID, slot ID, MDisk name and member ID of all drives
foreach my $drive ( $ibm->get_drives ) {
print '-'x50, "\n";
print "Drive ID : " . $drive->id . "\n";
print "Slot ID : " . $drive->slot_id . "\n";
print "MDisk ID : " . $drive->mdisk_name . "\n";
print "Member ID : " . $drive->member_id . "\n";
}
# e.g.
# --------------------------------------------------
# Drive ID : 0
# Slot ID : 17
# MDisk ID : host-9
# Member ID : 3
# --------------------------------------------------
# Drive ID : 1
# Slot ID : 19
# MDisk ID : host-2
# Member ID : 11
# --------------------------------------------------
# Drive ID : 2
# Slot ID : 19
# MDisk ID : host-1
# Member ID : 8
# --------------------------------------------------
# ... etc.
=head1 METHODS
=head3 FPGA_level
Returns the Field Programmable Gate Array (FPGA) level of the drive.
( run in 0.508 second using v1.01-cache-2.11-cpan-39bf76dae61 )