Cisco-UCS
view release on metacpan or search on metacpan
lib/Cisco/UCS/Interconnect.pm view on Meta::CPAN
package Cisco::UCS::Interconnect;
use warnings;
use strict;
use Cisco::UCS::Common::SwitchCard;
use Cisco::UCS::Common::PSU;
use Cisco::UCS::Common::Fan;
use Cisco::UCS::Interconnect::Stats;
use Scalar::Util qw(weaken);
use Carp qw(croak);
our $VERSION = '0.51';
our @ATTRIBUTES = qw(dn id model operability serial vendor);
our %ATTRIBUTES = (
memory => 'totalMemory',
mgmt_ip => 'oobIfIp',
mgmt_gw => 'oobIfGw',
mgmt_net => 'oobIfMask',
);
my %MMAP = (
card => {
type => 'equipmentSwitchCard',
class => 'Cisco::UCS::Common::SwitchCard',
},
fan => {
type => 'equipmentFan',
class => 'Cisco::UCS::Common::Fan'
},
psu => {
type => 'equipmentPsu',
class => 'Cisco::UCS::Common::PSU'
},
);
sub new {
my ( $class, %args ) = @_;
my $self = {};
bless $self, $class;
defined $args{dn}
? $self->{dn} = $args{dn}
: croak 'dn not defined';
defined $args{ucs}
? weaken( $self->{ucs} = $args{ucs} )
: croak 'ucs not defined';
my %attr = %{ $self->{ucs}->resolve_dn(
dn => $self->{dn}
)->{outConfig}->{networkElement} };
while ( my( $k, $v ) = each %attr ) { $self->{$k} = $v }
my ($v) = $self->{ucs}->version =~ /\((.*)\)/;
$MMAP{fan}{type} = 'equipmentFanModule' if( $v =~ /^4/);
return $self;
}
{
no strict 'refs';
while ( my( $pseudo, $attribute ) = each %ATTRIBUTES ) {
*{ __PACKAGE__ .'::'. $pseudo } = sub { return $_[0]->{$attribute} }
}
foreach my $attribute ( @ATTRIBUTES ) {
*{ __PACKAGE__ .'::'. $attribute } = sub { return $_[0]->{$attribute} }
}
foreach my $m ( keys %MMAP ) { # i.e. object
my $gm = "get_$m"; # i.e. get_object
my $gms = "get_$m".'s'; # i.e. get_objects
*{ __PACKAGE__ .'::'. $m } = sub {
my( $self, $id ) = @_;
return (
defined $self->{$m}->{$id}
? $self->{$m}->{$id}
: $self->$gm( $id )
)
};
*{ __PACKAGE__ .'::'. $gm } = sub {
my( $self, $id ) = @_;
return ( $id ? $self->$gms( $id ) : undef )
};
*{ __PACKAGE__ .'::'. $gms } = sub {
my( $self, $id ) = @_;
return $self->{ucs}->_get_child_objects(
id => $id,
type => $MMAP{$m}{type},
class => $MMAP{$m}{class},
attr => $m,
self => $self,
eattrs => { interconnect_id => $self->{ id } }
)
};
}
}
( run in 0.835 second using v1.01-cache-2.11-cpan-75ffa21a3d4 )