80 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
{ config, lib, pkgs, ... }:
 | 
						|
 | 
						|
with lib;
 | 
						|
let
 | 
						|
  pkg = pkgs.nixops-dns;
 | 
						|
  cfg = config.services.nixops-dns;
 | 
						|
in
 | 
						|
 | 
						|
{
 | 
						|
  options = {
 | 
						|
    services.nixops-dns = {
 | 
						|
      enable = mkOption {
 | 
						|
        type = types.bool;
 | 
						|
        default = false;
 | 
						|
        description = ''
 | 
						|
          Whether to enable the nixops-dns resolution
 | 
						|
          of NixOps virtual machines via dnsmasq and fake domain name.
 | 
						|
        '';
 | 
						|
      };
 | 
						|
 | 
						|
      user = mkOption {
 | 
						|
        type = types.str;
 | 
						|
        description = ''
 | 
						|
          The user the nixops-dns daemon should run as.
 | 
						|
          This should be the user, which is also used for nixops and
 | 
						|
          have the .nixops directory in its home.
 | 
						|
        '';
 | 
						|
      };
 | 
						|
 | 
						|
      domain = mkOption {
 | 
						|
        type = types.str;
 | 
						|
        description = ''
 | 
						|
          Fake domain name to resolve to NixOps virtual machines.
 | 
						|
 | 
						|
          For example "ops" will resolve "vm.ops".
 | 
						|
        '';
 | 
						|
        example = "ops";
 | 
						|
        default = "ops";
 | 
						|
      };
 | 
						|
 | 
						|
      dnsmasq = mkOption {
 | 
						|
        type = types.bool;
 | 
						|
        default = true;
 | 
						|
        description = ''
 | 
						|
          Enable dnsmasq forwarding to nixops-dns. This allows to use
 | 
						|
          nixops-dns for `services.nixops-dns.domain` resolution
 | 
						|
          while forwarding the rest of the queries to original resolvers.
 | 
						|
        '';
 | 
						|
      };
 | 
						|
 | 
						|
    };
 | 
						|
  };
 | 
						|
 | 
						|
  config = mkIf cfg.enable {
 | 
						|
    systemd.services.nixops-dns = {
 | 
						|
      description = "nixops-dns: DNS server for resolving NixOps machines";
 | 
						|
      wantedBy = [ "multi-user.target" ];
 | 
						|
 | 
						|
      serviceConfig = {
 | 
						|
        Type = "simple";
 | 
						|
        User = cfg.user;
 | 
						|
        ExecStart="${pkg}/bin/nixops-dns --domain=.${cfg.domain}";
 | 
						|
      };
 | 
						|
    };
 | 
						|
 | 
						|
    services.dnsmasq = mkIf cfg.dnsmasq {
 | 
						|
      enable = true;
 | 
						|
      resolveLocalQueries = true;
 | 
						|
      servers = [
 | 
						|
        "/${cfg.domain}/127.0.0.1#5300"
 | 
						|
      ];
 | 
						|
      extraConfig = ''
 | 
						|
        bind-interfaces
 | 
						|
        listen-address=127.0.0.1
 | 
						|
      '';
 | 
						|
    };
 | 
						|
 | 
						|
  };
 | 
						|
}
 |