Cisco-UCS

 view release on metacpan or  search on metacpan

lib/Cisco/UCS/Blade.pm  view on Meta::CPAN

package Cisco::UCS::Blade;

use warnings;
use strict;

use Carp 		qw(croak);
use Scalar::Util 	qw(weaken);
use Cisco::UCS::Blade::Adaptor;
use Cisco::UCS::Blade::CPU;
use Cisco::UCS::Blade::PowerBudget;
use Cisco::UCS::Common::PowerStats;

our $VERSION = '0.51';

our @ATTRIBUTES	= qw(association availability discovery dn model name 
operability presence revision serial uuid vendor);

our %ATTRIBUTES = (
	admin_state		=> 'adminState',
	assignment		=> 'assignedToDn',
	conn_path		=> 'connPath',
	conn_status		=> 'connStatus',
	cores_enabled		=> 'numOfCoresEnabled',
	chassis			=> 'chassisId',
	checkpoint		=> 'checkPoint',
	description		=> 'descr',
	id			=> 'slotId',
	managing_instance	=> 'managingInst',
	memory_speed		=> 'memorySpeed',
	memory_available	=> 'availableMemory',
	memory_total		=> 'totalMemory',
	num_adaptors		=> 'numOfAdaptors',
	num_cores		=> 'numOfCores',
	num_cpus		=> 'numOfCpus',
	num_eth_ifs		=> 'numOfEthHostIfs',
	num_fc_ifs		=> 'numOfFcHostIfs',
	num_threads		=> 'numOfThreads',
	oper_power		=> 'operPower',
	oper_state		=> 'operState',
	server_id		=> 'serverId',
	slot_id			=> 'slotId',
	user_label		=> 'usrLbl',
	uuid_original		=> 'originalUuid'
);

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 'dn not defined';

	my %attr = %{ $self->{ucs}->resolve_dn( 
				dn => $self->{dn})->{outConfig}->{computeBlade}
		};
	
	while ( my ($k, $v) = each %attr ) { $self->{$k} = $v }

	return $self
}

{
        no strict 'refs';

        while ( my ( $pseudo, $attribute ) = each %ATTRIBUTES ) { 
                *{ __PACKAGE__ . '::' . $pseudo } = sub {
                        my $self = shift;
                        return $self->{$attribute}
                }   
        }   

        foreach my $attribute ( @ATTRIBUTES ) {
                *{ __PACKAGE__ . '::' . $attribute } = sub {
                        my $self = shift;
                        return $self->{$attribute}
                }   
        }   
}

sub led {
	my ( $self, $state ) = @_;

	$state = lc $state;
	$state eq 'on' || $state eq 'off' or return;
	my $req = <<XML;
<configConfMos cookie="$self->{ucs}->{cookie}" inHierarchical="false">
  <inConfigs>
    <pair key="sys/chassis-$self->{chassisId}/blade-$self->{slotId}/locator-led">
      <equipmentLocatorLed adminState="$state" 
        dn="sys/chassis-$self->{chassisId}/blade-$self->{slotId}/locator-led" 
        id="1" name="" >
      </equipmentLocatorLed>
    </pair>
  </inConfigs>
</configConfMos>
XML

	my $xml = $self->{ucs}->_ucsm_request( $req );
	
	if ( defined $xml->{'errorCode'} ) {
		my $self->{error} = 
			( defined $xml->{'errorDescr'} 
				? $xml->{'errorDescr'} 
				: "Unspecified error"
			);

		print "got error: $self->{error}\n";
		return
	}
	



( run in 1.564 second using v1.01-cache-2.11-cpan-600a1bdf6e4 )