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
 | |
|       '';
 | |
|     };
 | |
| 
 | |
|   };
 | |
| }
 | 
