summaryrefslogtreecommitdiffstats
path: root/krebs
diff options
context:
space:
mode:
Diffstat (limited to 'krebs')
-rw-r--r--krebs/3modules/nginx.nix8
-rw-r--r--krebs/4lib/default.nix5
-rw-r--r--krebs/4lib/maybe.nix10
-rw-r--r--krebs/5pkgs/push/default.nix6
-rw-r--r--krebs/default.nix263
5 files changed, 138 insertions, 154 deletions
diff --git a/krebs/3modules/nginx.nix b/krebs/3modules/nginx.nix
index c5f38c271..0530921a0 100644
--- a/krebs/3modules/nginx.nix
+++ b/krebs/3modules/nginx.nix
@@ -25,8 +25,12 @@ let
];
};
listen = mkOption {
- type = with types; str;
+ type = with types; either str (listOf str);
default = "80";
+ apply = x:
+ if typeOf x != "list"
+ then [x]
+ else x;
};
locations = mkOption {
type = with types; listOf (attrsOf str);
@@ -70,7 +74,7 @@ let
to-server = { server-names, listen, locations, extraConfig, ... }: ''
server {
- listen ${listen};
+ ${concatMapStringsSep "\n" (x: "listen ${x};") listen}
server_name ${toString server-names};
${extraConfig}
${indent (concatStrings (map to-location locations))}
diff --git a/krebs/4lib/default.nix b/krebs/4lib/default.nix
index f15514fe3..0a6101314 100644
--- a/krebs/4lib/default.nix
+++ b/krebs/4lib/default.nix
@@ -3,13 +3,8 @@
with builtins;
with lib;
-let
- maybe = import ./maybe.nix { inherit lib; };
-in
-
builtins //
lib //
-maybe //
rec {
eq = x: y: x == y;
diff --git a/krebs/4lib/maybe.nix b/krebs/4lib/maybe.nix
deleted file mode 100644
index 5189c99a1..000000000
--- a/krebs/4lib/maybe.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-{ ... }:
-
-rec {
- Just = x: { type = "maybe"; value = x; };
- Nothing = { type = "maybe"; };
- isMaybe = x: builtins.typeOf x == "set" && x.type or false == "maybe";
- isJust = x: isMaybe x && builtins.hasAttr "value" x;
- fromJust = x: assert isJust x; x.value;
- catMaybes = xs: map fromJust (builtins.filter isJust xs);
-}
diff --git a/krebs/5pkgs/push/default.nix b/krebs/5pkgs/push/default.nix
index ce496d9c3..410b43465 100644
--- a/krebs/5pkgs/push/default.nix
+++ b/krebs/5pkgs/push/default.nix
@@ -9,12 +9,12 @@
, ... }:
stdenv.mkDerivation {
- name = "push-1.0.0";
+ name = "push-1.1.0";
src = fetchgit {
url = http://cgit.cd.retiolum/push;
- rev = "513da89fe50b3bad3d758855f5622c4508977e4a";
- sha256 = "6124e1d4d4ef57455e2f06891e06fb01d3786846efaf9b79e3176d89988e1b4e";
+ rev = "c5f4bda5bd00bad7778bbd5a9af8d476de0de920";
+ sha256 = "d335b644b791214263cee5c6659538c8e45326531b0588e5e7eb3bd9ef969800";
};
phases = [
diff --git a/krebs/default.nix b/krebs/default.nix
index b98fad558..c23cf152a 100644
--- a/krebs/default.nix
+++ b/krebs/default.nix
@@ -1,21 +1,29 @@
{ current-date
, current-host-name
, current-user-name
-}@current: rec {
+, stockholm
+}:
+
+let out = {
+ inherit deploy;
+ inherit infest;
+ inherit init;
+ inherit lib;
+ };
deploy =
{ system ? current-host-name
, target ? system
}@args: let
- config = lib.get-config system;
+ config = get-config system;
in ''
#! /bin/sh
# ${current-date} ${current-user-name}@${current-host-name}
# krebs.deploy
set -efu
- (${lib.populate args})
- ${lib.rootssh target ''
- ${lib.install args}
+ (${populate args})
+ ${rootssh target ''
+ ${install args}
${config.krebs.build.profile}/bin/switch-to-configuration switch
''}
echo OK
@@ -66,17 +74,17 @@
)"
}
- # Location to insert lib.install
+ # Location to insert install
i=$(sed -n '/^echo "building the system configuration/=' "$src")
{
cat_src | sed -n "1,$i{p}"
- cat ${lib.doc (lib.install args)}
+ cat ${lib.doc (install args)}
cat_src | sed -n "$i,\''${$i!p}"
} > nixos-install
chmod +x nixos-install
- ## Wrap inserted lib.install into chroot.
+ ## Wrap inserted install into chroot.
#nix_env=$(cat_src | sed -n '
# s:.*\(/nix/store/[a-z0-9]*-nix-[0-9.]\+/bin/nix-env\).*:\1:p;T;q
#')
@@ -95,7 +103,7 @@
init =
{ system ? current-host-name
}@args: let
- config = lib.get-config system;
+ config = get-config system;
in ''
#! /bin/sh
# ${current-date} ${current-user-name}@${current-host-name}
@@ -128,137 +136,124 @@
'';
lib = import ./4lib { lib = import <nixpkgs/lib>; } // rec {
+ stockholm-path = ../.;
+ nspath = ns: p: stockholm-path + "/${ns}/${p}";
+ };
- stockholm = import ../. current;
+ doc = s:
+ let b = "EOF${builtins.hashString "sha256" s}"; in
+ ''
+ <<\${b}
+ ${s}
+ ${b}
+ '';
- get-config = system:
- stockholm.${current-user-name}.${system}.config
- or (abort "unknown system: ${system}");
+ get-config = system:
+ stockholm.users.${current-user-name}.${system}.config
+ or (abort "unknown system: ${system}, user: ${current-user-name}");
- doc = s:
- let b = "EOF${builtins.hashString "sha256" s}"; in
- ''
- <<\${b}
- ${s}
- ${b}
- '';
+ install =
+ { system ? current-host-name
+ , target ? system
+ }:
+ let
+ config = get-config system;
+
+ nix-path =
+ lib.concatStringsSep ":"
+ (lib.mapAttrsToList (name: _: "${name}=/root/${name}")
+ (config.krebs.build.source.dir //
+ config.krebs.build.source.git));
+ in ''
+ set -efu
+ NIX_PATH=${lib.shell.escape nix-path} \
+ nix-env \
+ --show-trace \
+ -f '<stockholm>' \
+ --argstr current-date ${lib.shell.escape current-date} \
+ --argstr current-host-name ${lib.shell.escape current-host-name} \
+ --argstr current-user-name ${lib.shell.escape current-user-name} \
+ --profile ${lib.shell.escape config.krebs.build.profile} \
+ --set \
+ -A ${lib.escapeShellArg (lib.concatStringsSep "." [
+ "users"
+ config.krebs.build.user.name
+ config.krebs.build.host.name
+ "system"
+ ])}
+ '';
- rootssh = target: script:
- "ssh root@${target} -T ${lib.doc ''
- set -efu
- ${script}
- ''}";
-
- install =
- { system ? current-host-name
- , target ? system
- }:
- let
- stockholm = import ../. {
- inherit current-date;
- inherit current-host-name;
- inherit current-user-name;
- };
-
- config = stockholm.${current-user-name}.${system}.config
- or (abort "unknown system: ${system}");
-
- nix-path =
- lib.concatStringsSep ":"
- (lib.mapAttrsToList (name: _: "${name}=/root/${name}")
- (config.krebs.build.source.dir //
- config.krebs.build.source.git));
- in ''
+ populate =
+ { system ? current-host-name
+ , target ? system
+ }@args:
+ let out = ''
+ #! /bin/sh
+ # ${current-date} ${current-user-name}@${current-host-name}
set -efu
- NIX_PATH=${lib.shell.escape nix-path} \
- nix-env \
- --show-trace \
- -f '<stockholm>' \
- -Q \
- --argstr current-date ${lib.shell.escape current-date} \
- --argstr current-host-name ${lib.shell.escape current-host-name} \
- --argstr current-user-name ${lib.shell.escape current-user-name} \
- --profile ${lib.shell.escape config.krebs.build.profile} \
- --set \
- -A ${lib.escapeShellArg (lib.concatStringsSep "." [
- config.krebs.build.user.name
- config.krebs.build.host.name
- "system"
- ])}
+ ${lib.concatStringsSep "\n"
+ (lib.concatMap
+ (type: lib.mapAttrsToList (_: methods.${type})
+ config.krebs.build.source.${type})
+ ["dir" "git"])}
'';
- populate =
- { system ? current-host-name
- , target ? system
- }@args:
- let out = ''
- #! /bin/sh
- # ${current-date} ${current-user-name}@${current-host-name}
- set -efu
- ${lib.concatStringsSep "\n"
- (lib.concatMap
- (type: lib.mapAttrsToList (_: methods.${type})
- config.krebs.build.source.${type})
- ["dir" "git"])}
+ config = get-config system;
+
+ current-host = config.krebs.hosts.${current-host-name};
+ current-user = config.krebs.users.${current-user-name};
+
+ target-host = config.krebs.hosts.${system};
+
+ methods.dir = config:
+ let
+ can-link = config.host.name == target-host.name;
+ can-push = config.host.name == current-host.name;
+ push-method = ''
+ rsync \
+ --exclude .git \
+ --exclude .graveyard \
+ --exclude old \
+ --exclude tmp \
+ --rsync-path='mkdir -p ${config.target-path} && rsync' \
+ --delete-excluded \
+ -vrLptgoD \
+ ${config.path}/ \
+ root@${target}:${config.target-path}
+ '';
+ url = "file://${config.host.name}${config.path}";
+ in
+ #if can-link then link-method else
+ if can-push then push-method else
+ throw "cannot source ${url}";
+
+ methods.git = config:
+ rootssh target ''
+ mkdir -p ${config.target-path}
+ cd ${config.target-path}
+ if ! test -e .git; then
+ git init
+ fi
+ if ! cur_url=$(git config remote.origin.url 2>/dev/null); then
+ git remote add origin ${config.url}
+ elif test "$cur_url" != ${config.url}; then
+ git remote set-url origin ${config.url}
+ fi
+ if test "$(git rev-parse --verify HEAD 2>/dev/null)" != ${config.rev}; then
+ git fetch origin
+ git checkout ${config.rev} -- .
+ git checkout -q ${config.rev}
+ git submodule init
+ git submodule update
+ fi
+ git clean -dxf
'';
+ in out;
- stockholm = import ../. {
- inherit current-date;
- inherit current-host-name;
- inherit current-user-name;
- };
-
- config = stockholm.${current-user-name}.${system}.config
- or (abort "unknown system: ${system}");
-
- current-host = config.krebs.hosts.${current-host-name};
- current-user = config.krebs.users.${current-user-name};
-
- target-host = config.krebs.hosts.${system};
-
- methods.dir = config:
- let
- can-link = config.host.name == target-host.name;
- can-push = config.host.name == current-host.name;
- push-method = ''
- rsync \
- --exclude .git \
- --exclude .graveyard \
- --exclude old \
- --exclude tmp \
- --rsync-path='mkdir -p ${config.target-path} && rsync' \
- --delete-excluded \
- -vrLptgoD \
- ${config.path}/ \
- root@${target}:${config.target-path}
- '';
- url = "file://${config.host.name}${config.path}";
- in
- #if can-link then link-method else
- if can-push then push-method else
- throw "cannot source ${url}";
-
- methods.git = config:
- lib.rootssh target ''
- mkdir -p ${config.target-path}
- cd ${config.target-path}
- if ! test -e .git; then
- git init
- fi
- if ! cur_url=$(git config remote.origin.url 2>/dev/null); then
- git remote add origin ${config.url}
- elif test "$cur_url" != ${config.url}; then
- git remote set-url origin ${config.url}
- fi
- if test "$(git rev-parse --verify HEAD 2>/dev/null)" != ${config.rev}; then
- git fetch origin
- git checkout ${config.rev} -- .
- git checkout -q ${config.rev}
- git submodule init
- git submodule update
- fi
- git clean -dxf
- '';
- in out;
- };
-}
+ rootssh = target: script:
+ "ssh root@${target} -T ${doc ''
+ set -efu
+ ${script}
+ ''}";
+
+in out