at 23.11-pre 2.8 kB view raw
1{ config, pkgs, lib, ... }: 2 3with lib; 4 5let 6 cfg = config.services.skydns; 7 8in { 9 options.services.skydns = { 10 enable = mkEnableOption (lib.mdDoc "skydns service"); 11 12 etcd = { 13 machines = mkOption { 14 default = [ "http://127.0.0.1:2379" ]; 15 type = types.listOf types.str; 16 description = lib.mdDoc "Skydns list of etcd endpoints to connect to."; 17 }; 18 19 tlsKey = mkOption { 20 default = null; 21 type = types.nullOr types.path; 22 description = lib.mdDoc "Skydns path of TLS client certificate - private key."; 23 }; 24 25 tlsPem = mkOption { 26 default = null; 27 type = types.nullOr types.path; 28 description = lib.mdDoc "Skydns path of TLS client certificate - public key."; 29 }; 30 31 caCert = mkOption { 32 default = null; 33 type = types.nullOr types.path; 34 description = lib.mdDoc "Skydns path of TLS certificate authority public key."; 35 }; 36 }; 37 38 address = mkOption { 39 default = "0.0.0.0:53"; 40 type = types.str; 41 description = lib.mdDoc "Skydns address to bind to."; 42 }; 43 44 domain = mkOption { 45 default = "skydns.local."; 46 type = types.str; 47 description = lib.mdDoc "Skydns default domain if not specified by etcd config."; 48 }; 49 50 nameservers = mkOption { 51 default = map (n: n + ":53") config.networking.nameservers; 52 defaultText = literalExpression ''map (n: n + ":53") config.networking.nameservers''; 53 type = types.listOf types.str; 54 description = lib.mdDoc "Skydns list of nameservers to forward DNS requests to when not authoritative for a domain."; 55 example = ["8.8.8.8:53" "8.8.4.4:53"]; 56 }; 57 58 package = mkOption { 59 default = pkgs.skydns; 60 defaultText = literalExpression "pkgs.skydns"; 61 type = types.package; 62 description = lib.mdDoc "Skydns package to use."; 63 }; 64 65 extraConfig = mkOption { 66 default = {}; 67 type = types.attrsOf types.str; 68 description = lib.mdDoc "Skydns attribute set of extra config options passed as environment variables."; 69 }; 70 }; 71 72 config = mkIf (cfg.enable) { 73 systemd.services.skydns = { 74 wantedBy = [ "multi-user.target" ]; 75 after = [ "network.target" "etcd.service" ]; 76 description = "Skydns Service"; 77 environment = { 78 ETCD_MACHINES = concatStringsSep "," cfg.etcd.machines; 79 ETCD_TLSKEY = cfg.etcd.tlsKey; 80 ETCD_TLSPEM = cfg.etcd.tlsPem; 81 ETCD_CACERT = cfg.etcd.caCert; 82 SKYDNS_ADDR = cfg.address; 83 SKYDNS_DOMAIN = cfg.domain; 84 SKYDNS_NAMESERVERS = concatStringsSep "," cfg.nameservers; 85 }; 86 serviceConfig = { 87 ExecStart = "${cfg.package}/bin/skydns"; 88 }; 89 }; 90 91 environment.systemPackages = [ cfg.package ]; 92 }; 93}