Skip to content

Commit

Permalink
Fixes #403: Extend Rudder specific inventory with client side data
Browse files Browse the repository at this point in the history
  • Loading branch information
ncharles committed Nov 15, 2017
1 parent a533aec commit 1e18741
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 1 deletion.
2 changes: 1 addition & 1 deletion lib/FusionInventory/Agent/Inventory.pm
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ my %fields = (
CMD/ ],
REGISTRY => [ qw/NAME REGVALUE HIVE/ ],
REMOTE_MGMT => [ qw/ID TYPE/ ],
RUDDER => [ qw/AGENT UUID HOSTNAME SERVER_ROLES AGENT_CAPABILITIES/ ],
RUDDER => [ qw/AGENT UUID HOSTNAME SERVER_ROLES AGENT_CAPABILITIES CUSTOM_PROPERTIES/ ],
SLOTS => [ qw/DESCRIPTION DESIGNATION NAME STATUS/ ],
SOFTWARES => [ qw/COMMENTS FILESIZE FOLDER FROM HELPLINK INSTALLDATE
NAME NO_REMOVE RELEASE_TYPE PUBLISHER
Expand Down
48 changes: 48 additions & 0 deletions lib/FusionInventory/Agent/Task/Inventory/Generic/Rudder.pm
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ use English qw(-no_match_vars);

use FusionInventory::Agent::Tools;

use JSON::PP;

sub isEnabled {
return -r getUuidFile();
}
Expand Down Expand Up @@ -42,19 +44,65 @@ sub doInventory {
# Get agent capabilities
my @agentCapabilities = _listAgentCapabilities();

my $customProperties = _getCustomProperties(logger => $logger);

my $rudder = {
HOSTNAME => $hostname,
UUID => $Uuid,
AGENT => \@agents,
SERVER_ROLES => { SERVER_ROLE => \@serverRoles },
AGENT_CAPABILITIES => { AGENT_CAPABILITY => \@agentCapabilities },
CUSTOM_PROPERTIES => $customProperties,
};

$inventory->addEntry(
section => 'RUDDER', entry => $rudder
);
}

sub _getCustomProperties {
my (%params) = @_;
my $logger = $params{logger};

my $custom_properties_dir = ($OSNAME eq 'MSWin32') ? 'C:\Program Files\Rudder\local\hooks.d' : '/var/rudder/local/hooks.d';
my $custom_properties;
if (-d "$custom_properties_dir") {
my @custom_propertes_list = ();
opendir(DIR, $custom_properties_dir); # or die $!;
# List each file in the custom_properties directory, each files being a script
my @ordered_script_list = sort readdir(DIR);
while (my $file = shift @ordered_script_list) {
my $script_file = $custom_properties_dir . "/" . $file;
if (-f $script_file) {
next if ($file =~ m/^\./);
# Ignore non-executable file, or folders
next unless -x $script_file;
my $properties = qx($script_file);
my $exit_code = $? >> 8;
if ($exit_code > 0) {
$logger->error("Script $script_file failed to run properly, with exit code $exit_code");
next;
}

# check that it is valid JSON
eval {
my $coder = JSON::PP->new;
my $propertiesData = $coder->decode($properties);
push @custom_propertes_list, $coder->encode($propertiesData);
};
if ($@) {
$logger->error("Script $script_file didn't return valid JSON entry, error is:$@");
}
}

}
closedir(DIR);
$custom_properties = "[". join(",", @custom_propertes_list) . "]";
}
return $custom_properties;
}


sub _listServerRoles {
my $server_roles_dir = ($OSNAME eq 'MSWin32') ? 'C:\Program Files\Rudder\etc\server-roles.d' : '/opt/rudder/etc/server-roles.d';
my @server_roles;
Expand Down

0 comments on commit 1e18741

Please sign in to comment.