--- 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;