--- lib/PXElator/amt.pm 2009/08/10 12:28:03 191 +++ lib/PXElator/amt.pm 2009/08/30 15:33:30 377 @@ -10,28 +10,70 @@ use Regexp::Common qw/net/; use html; - -sub info { - my $amt = shift; - my ( $passwd, $ip ) = split(/\s+/, $amt); +use ping; +use CouchDB; +use Carp qw/confess/; + +sub ip { + my $client_ip = shift || confess "no ip"; + my ( $passwd, $ip ) = split(/\s+/, client::conf( $client_ip => 'amt' )); ( $ip, $passwd ) = ( $passwd, $ip ) if $passwd =~ m/$RE{net}{IPv4}/; + $ip ||= $client_ip; + + if ( ! ping::host( $ip ) ) { + warn "W: ping $ip unreachable\n"; + } + warn "amt $ip ", '*' x length($passwd), "\n"; - $ENV{AMT_HOST} = $ip; $ENV{AMT_PASSWORD} = $passwd; + $ENV{AMT_HOST} = $ip; + +} + +sub power_on { + ip @_; + ( power_state() & 0x0f ) == 0; +} + +sub power_state { + my $state = eval { Intel::AMT::RemoteControl::SystemPowerState }; + CouchDB::audit('SystemPowerState', { ip => $ENV{AMT_HOST}, SystemPowerState => $state }); + return $state; +} + +sub info { + ip @_; + + my $amt; + eval { + $amt = Intel::AMT::NetworkAdministration::network_settings; + $amt->{power_state} = Intel::AMT::RemoteControl::SystemPowerState; + CouchDB::audit('network', $amt ); + }; + warn "ERROR amt $@" if $@; my $out; + my $ip = $ENV{AMT_HOST}; - $out = qq|power: S| . Intel::AMT::RemoteControl::SystemPowerState - . qq|
| - . qq| amt| + $out = + qq| amt| . qq| ip| . qq|
| - . html::pre_dump( Intel::AMT::NetworkAdministration::network_settings ) + . html::pre_dump( $amt ) ; return $out; } + +sub RemoteControl { + ip shift; + my $command = shift; + eval { Intel::AMT::RemoteControl::run( $command ) }; + CouchDB::audit( $command, { ip => $ENV{AMT_HOST}, error => $@ } ); + warn "ERROR $@" if $@; +} + 1;