top-level default.nix provides stockholm

Collaterally, define krebs/default.nix's output in a concise way.
This commit is contained in:
tv 2015-10-20 03:31:38 +02:00
parent a2b455c786
commit 433479bc51
2 changed files with 136 additions and 144 deletions

View File

@ -47,7 +47,7 @@ let out = {
inherit (eval {}) pkgs; inherit (eval {}) pkgs;
}; };
krebs = import ./krebs current; krebs = import ./krebs (current // { stockholm = out; });
inherit (krebs) lib; inherit (krebs) lib;
# Path resolvers for common and individual files. # Path resolvers for common and individual files.

View File

@ -1,21 +1,29 @@
{ current-date { current-date
, current-host-name , current-host-name
, current-user-name , current-user-name
}@current: rec { , stockholm
}:
let out = {
inherit deploy;
inherit infest;
inherit init;
inherit lib;
};
deploy = deploy =
{ system ? current-host-name { system ? current-host-name
, target ? system , target ? system
}@args: let }@args: let
config = lib.get-config system; config = get-config system;
in '' in ''
#! /bin/sh #! /bin/sh
# ${current-date} ${current-user-name}@${current-host-name} # ${current-date} ${current-user-name}@${current-host-name}
# krebs.deploy # krebs.deploy
set -efu set -efu
(${lib.populate args}) (${populate args})
${lib.rootssh target '' ${rootssh target ''
${lib.install args} ${install args}
${config.krebs.build.profile}/bin/switch-to-configuration switch ${config.krebs.build.profile}/bin/switch-to-configuration switch
''} ''}
echo OK echo OK
@ -66,17 +74,17 @@
)" )"
} }
# Location to insert lib.install # Location to insert install
i=$(sed -n '/^echo "building the system configuration/=' "$src") i=$(sed -n '/^echo "building the system configuration/=' "$src")
{ {
cat_src | sed -n "1,$i{p}" 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}" cat_src | sed -n "$i,\''${$i!p}"
} > nixos-install } > nixos-install
chmod +x nixos-install chmod +x nixos-install
## Wrap inserted lib.install into chroot. ## Wrap inserted install into chroot.
#nix_env=$(cat_src | sed -n ' #nix_env=$(cat_src | sed -n '
# s:.*\(/nix/store/[a-z0-9]*-nix-[0-9.]\+/bin/nix-env\).*:\1:p;T;q # s:.*\(/nix/store/[a-z0-9]*-nix-[0-9.]\+/bin/nix-env\).*:\1:p;T;q
#') #')
@ -95,7 +103,7 @@
init = init =
{ system ? current-host-name { system ? current-host-name
}@args: let }@args: let
config = lib.get-config system; config = get-config system;
in '' in ''
#! /bin/sh #! /bin/sh
# ${current-date} ${current-user-name}@${current-host-name} # ${current-date} ${current-user-name}@${current-host-name}
@ -128,16 +136,9 @@
''; '';
lib = import ./4lib { lib = import <nixpkgs/lib>; } // rec { lib = import ./4lib { lib = import <nixpkgs/lib>; } // rec {
stockholm-path = ../.; stockholm-path = ../.;
stockholm = import stockholm-path current;
nspath = ns: p: stockholm-path + "/${ns}/${p}"; nspath = ns: p: stockholm-path + "/${ns}/${p}";
};
get-config = system:
stockholm.users.${current-user-name}.${system}.config
or (abort "unknown system: ${system}, user: ${current-user-name}");
doc = s: doc = s:
let b = "EOF${builtins.hashString "sha256" s}"; in let b = "EOF${builtins.hashString "sha256" s}"; in
@ -147,23 +148,15 @@
${b} ${b}
''; '';
rootssh = target: script: get-config = system:
"ssh root@${target} -T ${lib.doc '' stockholm.users.${current-user-name}.${system}.config
set -efu or (abort "unknown system: ${system}, user: ${current-user-name}");
${script}
''}";
install = install =
{ system ? current-host-name { system ? current-host-name
, target ? system , target ? system
}: }:
let let
stockholm = import ../. {
inherit current-date;
inherit current-host-name;
inherit current-user-name;
};
config = get-config system; config = get-config system;
nix-path = nix-path =
@ -177,7 +170,6 @@
nix-env \ nix-env \
--show-trace \ --show-trace \
-f '<stockholm>' \ -f '<stockholm>' \
-Q \
--argstr current-date ${lib.shell.escape current-date} \ --argstr current-date ${lib.shell.escape current-date} \
--argstr current-host-name ${lib.shell.escape current-host-name} \ --argstr current-host-name ${lib.shell.escape current-host-name} \
--argstr current-user-name ${lib.shell.escape current-user-name} \ --argstr current-user-name ${lib.shell.escape current-user-name} \
@ -206,12 +198,6 @@
["dir" "git"])} ["dir" "git"])}
''; '';
stockholm = import ../. {
inherit current-date;
inherit current-host-name;
inherit current-user-name;
};
config = get-config system; config = get-config system;
current-host = config.krebs.hosts.${current-host-name}; current-host = config.krebs.hosts.${current-host-name};
@ -242,7 +228,7 @@
throw "cannot source ${url}"; throw "cannot source ${url}";
methods.git = config: methods.git = config:
lib.rootssh target '' rootssh target ''
mkdir -p ${config.target-path} mkdir -p ${config.target-path}
cd ${config.target-path} cd ${config.target-path}
if ! test -e .git; then if ! test -e .git; then
@ -263,5 +249,11 @@
git clean -dxf git clean -dxf
''; '';
in out; in out;
};
} rootssh = target: script:
"ssh root@${target} -T ${doc ''
set -efu
${script}
''}";
in out