134 lines
4.1 KiB
Nix
134 lines
4.1 KiB
Nix
{ config, lib, pkgs, ... }:
|
|
|
|
let
|
|
cfg = config.services.ocsinventory-agent;
|
|
|
|
settingsFormat = pkgs.formats.keyValue {
|
|
mkKeyValue = lib.generators.mkKeyValueDefault { } "=";
|
|
};
|
|
|
|
in
|
|
{
|
|
meta = {
|
|
doc = ./ocsinventory-agent.md;
|
|
maintainers = with lib.maintainers; [ anthonyroussel ];
|
|
};
|
|
|
|
options = {
|
|
services.ocsinventory-agent = {
|
|
enable = lib.mkEnableOption (lib.mdDoc "OCS Inventory Agent");
|
|
|
|
package = lib.mkPackageOption pkgs "ocsinventory-agent" { };
|
|
|
|
settings = lib.mkOption {
|
|
type = lib.types.submodule {
|
|
freeformType = settingsFormat.type.nestedTypes.elemType;
|
|
|
|
options = {
|
|
server = lib.mkOption {
|
|
type = lib.types.nullOr lib.types.str;
|
|
example = "https://ocsinventory.localhost:8080/ocsinventory";
|
|
default = null;
|
|
description = lib.mdDoc ''
|
|
The URI of the OCS Inventory server where to send the inventory file.
|
|
|
|
This option is ignored if {option}`services.ocsinventory-agent.settings.local` is set.
|
|
'';
|
|
};
|
|
|
|
local = lib.mkOption {
|
|
type = lib.types.nullOr lib.types.path;
|
|
example = "/var/lib/ocsinventory-agent/reports";
|
|
default = null;
|
|
description = lib.mdDoc ''
|
|
If specified, the OCS Inventory Agent will run in offline mode
|
|
and the resulting inventory file will be stored in the specified path.
|
|
'';
|
|
};
|
|
|
|
ca = lib.mkOption {
|
|
type = lib.types.path;
|
|
default = "/etc/ssl/certs/ca-certificates.crt";
|
|
description = lib.mdDoc ''
|
|
Path to CA certificates file in PEM format, for server
|
|
SSL certificate validation.
|
|
'';
|
|
};
|
|
|
|
tag = lib.mkOption {
|
|
type = lib.types.nullOr lib.types.str;
|
|
default = null;
|
|
example = "01234567890123";
|
|
description = lib.mdDoc "Tag for the generated inventory.";
|
|
};
|
|
|
|
debug = lib.mkEnableOption (lib.mdDoc "debug mode");
|
|
};
|
|
};
|
|
default = { };
|
|
example = {
|
|
ca = "/etc/ssl/certs/ca-certificates.crt";
|
|
debug = true;
|
|
server = "https://ocsinventory.localhost:8080/ocsinventory";
|
|
tag = "01234567890123";
|
|
};
|
|
description = lib.mdDoc ''
|
|
Configuration for /etc/ocsinventory-agent/ocsinventory-agent.cfg.
|
|
|
|
Refer to
|
|
{manpage}`ocsinventory-agent(1)` for available options.
|
|
'';
|
|
};
|
|
|
|
interval = lib.mkOption {
|
|
type = lib.types.str;
|
|
default = "daily";
|
|
example = "06:00";
|
|
description = lib.mdDoc ''
|
|
How often we run the ocsinventory-agent service. Runs by default every daily.
|
|
|
|
The format is described in
|
|
{manpage}`systemd.time(7)`.
|
|
'';
|
|
};
|
|
};
|
|
};
|
|
|
|
config =
|
|
let
|
|
configFile = settingsFormat.generate "ocsinventory-agent.cfg" cfg.settings;
|
|
|
|
in lib.mkIf cfg.enable {
|
|
# Path of the configuration file is hard-coded and cannot be changed
|
|
# https://github.com/OCSInventory-NG/UnixAgent/blob/v2.10.0/lib/Ocsinventory/Agent/Config.pm#L78
|
|
#
|
|
environment.etc."ocsinventory-agent/ocsinventory-agent.cfg".source = configFile;
|
|
|
|
systemd.services.ocsinventory-agent = {
|
|
description = "OCS Inventory Agent service";
|
|
wantedBy = [ "multi-user.target" ];
|
|
after = [ "network.target" ];
|
|
|
|
reloadTriggers = [ configFile ];
|
|
|
|
serviceConfig = {
|
|
ExecStart = lib.getExe cfg.package;
|
|
ConfigurationDirectory = "ocsinventory-agent";
|
|
StateDirectory = "ocsinventory-agent";
|
|
};
|
|
};
|
|
|
|
systemd.timers.ocsinventory-agent = {
|
|
description = "Launch OCS Inventory Agent regularly";
|
|
wantedBy = [ "timers.target" ];
|
|
|
|
timerConfig = {
|
|
OnCalendar = cfg.interval;
|
|
AccuracySec = "1h";
|
|
RandomizedDelaySec = 240;
|
|
Persistent = true;
|
|
Unit = "ocsinventory-agent.service";
|
|
};
|
|
};
|
|
};
|
|
}
|