summaryrefslogtreecommitdiffstats
path: root/krebs/3modules
diff options
context:
space:
mode:
authortv <tv@krebsco.de>2016-02-06 15:11:30 +0100
committertv <tv@krebsco.de>2016-02-06 15:11:30 +0100
commit23c7c10f5a5ed83dca001d7382e5b89981277f8c (patch)
tree274a199ba7748892a7dfd4cd5f31b0f83985b206 /krebs/3modules
parentb2303e081fb1ccc9a0b88f538736045fb2fba14f (diff)
krebs.retiolum.hosts: change type to attrsOf host
Diffstat (limited to 'krebs/3modules')
-rw-r--r--krebs/3modules/retiolum.nix46
1 files changed, 23 insertions, 23 deletions
diff --git a/krebs/3modules/retiolum.nix b/krebs/3modules/retiolum.nix
index e0e2692a8..08ac96461 100644
--- a/krebs/3modules/retiolum.nix
+++ b/krebs/3modules/retiolum.nix
@@ -1,6 +1,4 @@
{ config, pkgs, lib, ... }:
-
-with builtins;
with lib;
let
cfg = config.krebs.retiolum;
@@ -40,7 +38,7 @@ let
'';
};
- network = mkOption {
+ netname = mkOption {
type = types.str;
default = "retiolum";
description = ''
@@ -65,10 +63,13 @@ let
};
hosts = mkOption {
- type = with types; either package path;
- default = ../Zhosts;
+ type = with types; attrsOf host;
+ default =
+ filterAttrs (_: h: hasAttr cfg.netname h.nets) config.krebs.hosts;
description = ''
- If a path is given, then it will be used to generate an ad-hoc package.
+ Hosts which should be part of the tinc configuration.
+ Note that these hosts must have a correspondingly named network
+ configured, see <literal>config.krebs.retiolum.netname</literal>.
'';
};
@@ -104,7 +105,7 @@ let
};
imp = {
- environment.systemPackages = [ tinc hosts iproute ];
+ environment.systemPackages = [ tinc iproute ];
networking.extraHosts = retiolumExtraHosts;
@@ -140,17 +141,16 @@ let
tinc = cfg.tincPackage;
- hosts = getAttr (typeOf cfg.hosts) {
- package = cfg.hosts;
- path = pkgs.stdenv.mkDerivation {
- name = "custom-retiolum-hosts";
- src = cfg.hosts;
- installPhase = ''
- mkdir $out
- find . -name .git -prune -o -type f -print0 \
- | xargs -0 cp --target-directory $out
- '';
- };
+ tinc-hosts = pkgs.stdenv.mkDerivation {
+ name = "${cfg.netname}-tinc-hosts";
+ phases = [ "installPhase" ];
+ installPhase = ''
+ mkdir $out
+ ${concatStrings (mapAttrsToList (_: host: ''
+ echo ${shell.escape host.nets.${cfg.netname}.tinc.config} \
+ > $out/${shell.escape host.name}
+ '') cfg.hosts)}
+ '';
};
iproute = cfg.iproutePackage;
@@ -159,7 +159,7 @@ let
{ }
''
generate() {
- (cd ${hosts}
+ (cd ${tinc-hosts}
printf \'\'
for i in `ls`; do
names=$(hostnames $i)
@@ -180,11 +180,11 @@ let
generate
;;
long)
- hostnames() { echo "$1.${cfg.network}"; }
+ hostnames() { echo "$1.${cfg.netname}"; }
generate
;;
both)
- hostnames() { echo "$1.${cfg.network} $1"; }
+ hostnames() { echo "$1.${cfg.netname} $1"; }
generate
;;
*)
@@ -203,12 +203,12 @@ let
mkdir -p $out
- ln -s ${hosts} $out/hosts
+ ln -s ${tinc-hosts} $out/hosts
cat > $out/tinc.conf <<EOF
Name = ${cfg.name}
Device = /dev/net/tun
- Interface = ${cfg.network}
+ Interface = ${cfg.netname}
${concatStrings (map (c : "ConnectTo = " + c + "\n") cfg.connectTo)}
PrivateKeyFile = /tmp/retiolum-rsa_key.priv
${cfg.extraConfig}