at 24.11-pre 2.5 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 "skydns service"; 11 12 etcd = { 13 machines = mkOption { 14 default = [ "http://127.0.0.1:2379" ]; 15 type = types.listOf types.str; 16 description = "Skydns list of etcd endpoints to connect to."; 17 }; 18 19 tlsKey = mkOption { 20 default = null; 21 type = types.nullOr types.path; 22 description = "Skydns path of TLS client certificate - private key."; 23 }; 24 25 tlsPem = mkOption { 26 default = null; 27 type = types.nullOr types.path; 28 description = "Skydns path of TLS client certificate - public key."; 29 }; 30 31 caCert = mkOption { 32 default = null; 33 type = types.nullOr types.path; 34 description = "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 = "Skydns address to bind to."; 42 }; 43 44 domain = mkOption { 45 default = "skydns.local."; 46 type = types.str; 47 description = "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 = "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 = mkPackageOption pkgs "skydns" { }; 59 60 extraConfig = mkOption { 61 default = {}; 62 type = types.attrsOf types.str; 63 description = "Skydns attribute set of extra config options passed as environment variables."; 64 }; 65 }; 66 67 config = mkIf (cfg.enable) { 68 systemd.services.skydns = { 69 wantedBy = [ "multi-user.target" ]; 70 after = [ "network.target" "etcd.service" ]; 71 description = "Skydns Service"; 72 environment = { 73 ETCD_MACHINES = concatStringsSep "," cfg.etcd.machines; 74 ETCD_TLSKEY = cfg.etcd.tlsKey; 75 ETCD_TLSPEM = cfg.etcd.tlsPem; 76 ETCD_CACERT = cfg.etcd.caCert; 77 SKYDNS_ADDR = cfg.address; 78 SKYDNS_DOMAIN = cfg.domain; 79 SKYDNS_NAMESERVERS = concatStringsSep "," cfg.nameservers; 80 }; 81 serviceConfig = { 82 ExecStart = "${cfg.package}/bin/skydns"; 83 }; 84 }; 85 86 environment.systemPackages = [ cfg.package ]; 87 }; 88}