grafana-alloy: don't build the frontend twice
[NixPkgs.git] / nixos / modules / services / monitoring / ocsinventory-agent.nix
blob591738ed4ef78918fa81208445769f869a03986d
1 { config, lib, pkgs, ... }:
3 let
4   cfg = config.services.ocsinventory-agent;
6   settingsFormat = pkgs.formats.keyValue {
7     mkKeyValue = lib.generators.mkKeyValueDefault { } "=";
8   };
12   meta = {
13     doc = ./ocsinventory-agent.md;
14     maintainers = with lib.maintainers; [ anthonyroussel ];
15   };
17   options = {
18     services.ocsinventory-agent = {
19       enable = lib.mkEnableOption "OCS Inventory Agent";
21       package = lib.mkPackageOption pkgs "ocsinventory-agent" { };
23       settings = lib.mkOption {
24         type = lib.types.submodule {
25           freeformType = settingsFormat.type.nestedTypes.elemType;
27           options = {
28             server = lib.mkOption {
29               type = lib.types.nullOr lib.types.str;
30               example = "https://ocsinventory.localhost:8080/ocsinventory";
31               default = null;
32               description = ''
33                 The URI of the OCS Inventory server where to send the inventory file.
35                 This option is ignored if {option}`services.ocsinventory-agent.settings.local` is set.
36               '';
37             };
39             local = lib.mkOption {
40               type = lib.types.nullOr lib.types.path;
41               example = "/var/lib/ocsinventory-agent/reports";
42               default = null;
43               description = ''
44                 If specified, the OCS Inventory Agent will run in offline mode
45                 and the resulting inventory file will be stored in the specified path.
46               '';
47             };
49             ca = lib.mkOption {
50               type = lib.types.path;
51               default = "/etc/ssl/certs/ca-certificates.crt";
52               description = ''
53                 Path to CA certificates file in PEM format, for server
54                 SSL certificate validation.
55               '';
56             };
58             tag = lib.mkOption {
59               type = lib.types.nullOr lib.types.str;
60               default = null;
61               example = "01234567890123";
62               description = "Tag for the generated inventory.";
63             };
65             debug = lib.mkEnableOption "debug mode";
66           };
67         };
68         default = { };
69         example = {
70           ca = "/etc/ssl/certs/ca-certificates.crt";
71           debug = true;
72           server = "https://ocsinventory.localhost:8080/ocsinventory";
73           tag = "01234567890123";
74         };
75         description = ''
76           Configuration for /etc/ocsinventory-agent/ocsinventory-agent.cfg.
78           Refer to
79           {manpage}`ocsinventory-agent(1)` for available options.
80         '';
81       };
83       interval = lib.mkOption {
84         type = lib.types.str;
85         default = "daily";
86         example = "06:00";
87         description = ''
88           How often we run the ocsinventory-agent service. Runs by default every daily.
90           The format is described in
91           {manpage}`systemd.time(7)`.
92         '';
93       };
94     };
95   };
97   config =
98     let
99       configFile = settingsFormat.generate "ocsinventory-agent.cfg" cfg.settings;
101     in lib.mkIf cfg.enable {
102       # Path of the configuration file is hard-coded and cannot be changed
103       # https://github.com/OCSInventory-NG/UnixAgent/blob/v2.10.0/lib/Ocsinventory/Agent/Config.pm#L78
104       #
105       environment.etc."ocsinventory-agent/ocsinventory-agent.cfg".source = configFile;
107       systemd.services.ocsinventory-agent = {
108         description = "OCS Inventory Agent service";
109         wantedBy = [ "multi-user.target" ];
110         after = [ "network.target" ];
112         reloadTriggers = [ configFile ];
114         serviceConfig = {
115           ExecStart = lib.getExe cfg.package;
116           ConfigurationDirectory = "ocsinventory-agent";
117           StateDirectory = "ocsinventory-agent";
118         };
119       };
121       systemd.timers.ocsinventory-agent = {
122         description = "Launch OCS Inventory Agent regularly";
123         wantedBy = [ "timers.target" ];
125         timerConfig = {
126           OnCalendar = cfg.interval;
127           AccuracySec = "1h";
128           RandomizedDelaySec = 240;
129           Persistent = true;
130           Unit = "ocsinventory-agent.service";
131         };
132       };
133     };