vuls: init at 0.27.0
[NixPkgs.git] / nixos / modules / services / misc / confd.nix
blob7744cee32049973245afccfbddaea07f1aa09c1b
1 { config, pkgs, lib, ... }:
2 let
3   cfg = config.services.confd;
5   confdConfig = ''
6     backend = "${cfg.backend}"
7     confdir = "${cfg.confDir}"
8     interval = ${toString cfg.interval}
9     nodes = [ ${lib.concatMapStringsSep "," (s: ''"${s}"'') cfg.nodes}, ]
10     prefix = "${cfg.prefix}"
11     log-level = "${cfg.logLevel}"
12     watch = ${lib.boolToString cfg.watch}
13   '';
15 in {
16   options.services.confd = {
17     enable = lib.mkEnableOption "confd, a service to manage local application configuration files using templates and data from etcd/consul/redis/zookeeper";
19     backend = lib.mkOption {
20       description = "Confd config storage backend to use.";
21       default = "etcd";
22       type = lib.types.enum ["etcd" "consul" "redis" "zookeeper"];
23     };
25     interval = lib.mkOption {
26       description = "Confd check interval.";
27       default = 10;
28       type = lib.types.int;
29     };
31     nodes = lib.mkOption {
32       description = "Confd list of nodes to connect to.";
33       default = [ "http://127.0.0.1:2379" ];
34       type = lib.types.listOf lib.types.str;
35     };
37     watch = lib.mkOption {
38       description = "Confd, whether to watch etcd config for changes.";
39       default = true;
40       type = lib.types.bool;
41     };
43     prefix = lib.mkOption {
44       description = "The string to prefix to keys.";
45       default = "/";
46       type = lib.types.path;
47     };
49     logLevel = lib.mkOption {
50       description = "Confd log level.";
51       default = "info";
52       type = lib.types.enum ["info" "debug"];
53     };
55     confDir = lib.mkOption {
56       description = "The path to the confd configs.";
57       default = "/etc/confd";
58       type = lib.types.path;
59     };
61     package = lib.mkPackageOption pkgs "confd" { };
62   };
64   config = lib.mkIf cfg.enable {
65     systemd.services.confd = {
66       description = "Confd Service.";
67       wantedBy = [ "multi-user.target" ];
68       after = [ "network.target" ];
69       serviceConfig = {
70         ExecStart = "${cfg.package}/bin/confd";
71       };
72     };
74     environment.etc = {
75       "confd/confd.toml".text = confdConfig;
76     };
78     environment.systemPackages = [ cfg.package ];
80     services.etcd.enable = lib.mkIf (cfg.backend == "etcd") (lib.mkDefault true);
81   };