summaryrefslogtreecommitdiffstats
path: root/4lib/krebs
diff options
context:
space:
mode:
authortv <tv@shackspace.de>2015-07-24 12:23:52 +0200
committertv <tv@shackspace.de>2015-07-24 12:23:52 +0200
commitee52522cc139670c3eeaeeb462dff98ea870d2e4 (patch)
tree7022fa4da765ee34acd2a8f4e17abfe704fad8a7 /4lib/krebs
parente3b72bb66e7c6bf410c8db81ff04e355a7b22116 (diff)
4: {tv -> krebs}.types
Diffstat (limited to '4lib/krebs')
-rw-r--r--4lib/krebs/default.nix7
-rw-r--r--4lib/krebs/types.nix81
2 files changed, 88 insertions, 0 deletions
diff --git a/4lib/krebs/default.nix b/4lib/krebs/default.nix
new file mode 100644
index 000000000..38c2a97d6
--- /dev/null
+++ b/4lib/krebs/default.nix
@@ -0,0 +1,7 @@
+{ lib, ... }:
+
+builtins // lib // {
+
+ types = import ./types.nix { inherit lib; };
+
+}
diff --git a/4lib/krebs/types.nix b/4lib/krebs/types.nix
new file mode 100644
index 000000000..38ed8a916
--- /dev/null
+++ b/4lib/krebs/types.nix
@@ -0,0 +1,81 @@
+{ lib, ... }:
+
+with lib;
+with types;
+
+types // rec {
+
+ host = submodule {
+ options = {
+ name = mkOption {
+ type = label;
+ };
+ dc = mkOption {
+ type = label;
+ };
+ cores = mkOption {
+ type = positive;
+ };
+ nets = mkOption {
+ type = attrsOf net;
+ apply = x: assert hasAttr "retiolum" x; x;
+ };
+ };
+ };
+
+ net = submodule ({ config, ... }: {
+ options = {
+ via = mkOption {
+ type = nullOr net;
+ default = null;
+ };
+ addrs = mkOption {
+ type = listOf addr;
+ apply = _: config.addrs4 ++ config.addrs6;
+ };
+ addrs4 = mkOption {
+ type = listOf addr4;
+ default = [];
+ };
+ addrs6 = mkOption {
+ type = listOf addr6;
+ default = [];
+ };
+ aliases = mkOption {
+ # TODO nonEmptyListOf hostname
+ type = listOf hostname;
+ };
+ tinc = mkOption {
+ type = let net-config = config; in submodule ({ config, ... }: {
+ options = {
+ config = mkOption {
+ type = str;
+ apply = _: ''
+ ${optionalString (net-config.via != null)
+ (concatMapStringsSep "\n" (a: "Address = ${a}") net-config.via.addrs)}
+ ${concatMapStringsSep "\n" (a: "Subnet = ${a}") net-config.addrs}
+ ${config.pubkey}
+ '';
+ };
+ pubkey = mkOption {
+ type = str;
+ };
+ };
+ });
+ };
+ };
+ });
+
+ positive = mkOptionType {
+ name = "positive integer";
+ check = x: isInt x && x > 0;
+ merge = mergeOneOption;
+ };
+
+ # TODO
+ addr = str;
+ addr4 = str;
+ addr6 = str;
+ hostname = str;
+ label = str;
+}