grafana-alloy: don't build the frontend twice
[NixPkgs.git] / nixos / modules / services / monitoring / goss.nix
blob00246752a7cd6281feb3e93905f59e3dcff89aa8
1 { config, lib, pkgs, ... }:
3 let
4   cfg = config.services.goss;
6   settingsFormat = pkgs.formats.yaml { };
7   configFile = settingsFormat.generate "goss.yaml" cfg.settings;
9 in {
10   meta = {
11     doc = ./goss.md;
12     maintainers = [ lib.maintainers.anthonyroussel ];
13   };
15   options = {
16     services.goss = {
17       enable = lib.mkEnableOption "Goss daemon";
19       package = lib.mkPackageOption pkgs "goss" { };
21       environment = lib.mkOption {
22         type = lib.types.attrsOf lib.types.str;
23         default = { };
24         example = {
25           GOSS_FMT = "json";
26           GOSS_LOGLEVEL = "FATAL";
27           GOSS_LISTEN = ":8080";
28         };
29         description = ''
30           Environment variables to set for the goss service.
32           See <https://github.com/goss-org/goss/blob/master/docs/manual.md>
33         '';
34       };
36       settings = lib.mkOption {
37         type = lib.types.submodule { freeformType = settingsFormat.type; };
38         default = { };
39         example = {
40           addr."tcp://localhost:8080" = {
41             reachable = true;
42             local-address = "127.0.0.1";
43           };
44           service.goss = {
45             enabled = true;
46             running = true;
47           };
48         };
49         description = ''
50           The global options in `config` file in yaml format.
52           Refer to <https://github.com/goss-org/goss/blob/master/docs/goss-json-schema.yaml> for schema.
53         '';
54       };
55     };
56   };
58   config = lib.mkIf cfg.enable {
59     environment.systemPackages = [ cfg.package ];
61     systemd.services.goss = {
62       description = "Goss - Quick and Easy server validation";
63       unitConfig.Documentation = "https://github.com/goss-org/goss/blob/master/docs/manual.md";
65       after = [ "network-online.target" ];
66       wantedBy = [ "multi-user.target" ];
67       wants = [ "network-online.target" ];
69       environment = {
70         GOSS_FILE = configFile;
71       } // cfg.environment;
73       reloadTriggers = [ configFile ];
75       serviceConfig = {
76         DynamicUser = true;
77         ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID";
78         ExecStart = "${cfg.package}/bin/goss serve";
79         Group = "goss";
80         Restart = "on-failure";
81         RestartSec = 5;
82         User = "goss";
83       };
84     };
85   };