/usr/local/CPAN/Ocsinventory-Agent/Ocsinventory/Agent/AccountInfo.pm
package Ocsinventory::Agent::AccountInfo;
use strict;
use warnings;
sub new {
my (undef,$params) = @_;
my $self = {};
bless $self;
$self->{config} = $params->{config};
$self->{logger} = $params->{logger};
my $logger = $self->{logger} = $params->{logger};
if ($self->{config}->{accountinfofile}) {
$logger->debug ('Accountinfo file: '. $self->{config}->{accountinfofile});
if (! -f $self->{config}->{accountinfofile}) {
$logger->info ("Accountinfo file doesn't exist. I create an empty one.");
$self->write();
} else {
my $xmladm;
eval {
$xmladm = XML::Simple::XMLin(
$self->{config}->{accountinfofile},
ForceArray => [ 'ACCOUNTINFO' ]
);
};
if ($xmladm && exists($xmladm->{ACCOUNTINFO})) {
# Store the XML content in a local HASH
for(@{$xmladm->{ACCOUNTINFO}}){
if (!$_->{KEYNAME}) {
$logger->debug ("Incorrect KEYNAME in ACCOUNTINFO");
}
$self->{accountinfo}{ $_->{KEYNAME} } = $_->{KEYVALUE};
}
}
}
} else { $logger->debug("No accountinfo file defined") }
$self;
}
sub get {
my ($self, $keyname) = @_;
return $self->{accountinfo}{$keyname} if $keyname;
}
sub getAll {
my ($self, $name) = @_;
return $self->{accountinfo};
}
sub set {
my ($self, $name, $value) = @_;
return unless defined ($name) && defined ($value);
return unless $name && $value;
$self->{accountinfo}->{$name} = $value;
$self->write();
}
sub reSetAll {
my ($self, $ref) = @_;
my $logger = $self->{logger};
undef $self->{accountinfo};
if (ref ($ref) =~ /^ARRAY$/) {
foreach (@$ref) {
$self->set($_->{KEYNAME}, $_->{KEYVALUE});
}
} elsif (ref ($ref) =~ /^HASH$/) {
$self->set($ref->{'KEYNAME'}, $ref->{'KEYVALUE'});
} else {
$logger->debug ("reSetAll, invalid parameter");
}
}
# Add accountinfo stuff to an inventary
sub setAccountInfo {
my $self = shift;
my $inventary = shift;
my $ai = $self->getAll();
$self->{h}{'CONTENT'}{ACCOUNTINFO} = [];
return unless $ai;
foreach (keys %$ai) {
push @{$inventary->{h}{'CONTENT'}{ACCOUNTINFO}}, {
KEYNAME => [$_],
KEYVALUE => [$ai->{$_}],
};
}
}
sub write {
my ($self, $args) = @_;
my $logger = $self->{logger};
my $tmp;
$tmp->{ACCOUNTINFO} = [];
foreach (keys %{$self->{accountinfo}}) {
push @{$tmp->{ACCOUNTINFO}}, {KEYNAME => [$_], KEYVALUE =>
[$self->{accountinfo}{$_}]};
}
my $xml=XML::Simple::XMLout( $tmp, RootName => 'ADM' );
my $fault;
if (!open ADM, ">".$self->{config}->{accountinfofile}) {
$fault = 1;
} else {
print ADM $xml;
$fault = 1 unless close ADM;
}
if (!$fault) {
$logger->debug ("Account info updated successfully");
} else {
$logger->error ("Can't save account info in `".
$self->{config}->{accountinfofile});
}
}
1;