diff options
author | adisbladis <adisbladis@gmail.com> | 2020-04-20 09:46:45 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-04-20 09:46:45 +0200 |
commit | d79c2dd4d4772c26ee95c4980764b56a5e46e4aa (patch) | |
tree | b7e5300a4fb9afb779a937c4bbac35f0433face8 | |
parent | 636a5a6fee34a15bf0a5a9fa8911970ca51f5ea4 (diff) | |
parent | ab37d7e7ea6fa44bba109c30dd006037c93cbc52 (diff) |
Merge pull request #85570 from adisbladis/nixos-containers-pkgs
nixos-containers: Add support for custom nixpkgs argument
-rw-r--r-- | nixos/modules/virtualisation/containers.nix | 18 | ||||
-rw-r--r-- | nixos/tests/all-tests.nix | 1 | ||||
-rw-r--r-- | nixos/tests/containers-custom-pkgs.nix | 42 |
3 files changed, 59 insertions, 2 deletions
diff --git a/nixos/modules/virtualisation/containers.nix b/nixos/modules/virtualisation/containers.nix index dad211ef55bae..2db5c117aa7f3 100644 --- a/nixos/modules/virtualisation/containers.nix +++ b/nixos/modules/virtualisation/containers.nix @@ -463,10 +463,15 @@ in A specification of the desired configuration of this container, as a NixOS module. ''; - type = lib.mkOptionType { + type = let + confPkgs = if config.pkgs == null then pkgs else config.pkgs; + in lib.mkOptionType { name = "Toplevel NixOS config"; - merge = loc: defs: (import ../../lib/eval-config.nix { + merge = loc: defs: (import (confPkgs.path + "/nixos/lib/eval-config.nix") { inherit system; + pkgs = confPkgs; + baseModules = import (confPkgs.path + "/nixos/modules/module-list.nix"); + inherit (confPkgs) lib; modules = let extraConfig = { @@ -515,6 +520,15 @@ in ''; }; + pkgs = mkOption { + type = types.nullOr types.attrs; + default = null; + example = literalExample "pkgs"; + description = '' + Customise which nixpkgs to use for this container. + ''; + }; + ephemeral = mkOption { type = types.bool; default = false; diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix index b0c9c7bc2258d..30229a3a5b2f4 100644 --- a/nixos/tests/all-tests.nix +++ b/nixos/tests/all-tests.nix @@ -53,6 +53,7 @@ in consul = handleTest ./consul.nix {}; cockroachdb = handleTestOn ["x86_64-linux"] ./cockroachdb.nix {}; containers-bridge = handleTest ./containers-bridge.nix {}; + containers-custom-pkgs.nix = handleTest ./containers-custom-pkgs.nix {}; containers-ephemeral = handleTest ./containers-ephemeral.nix {}; containers-extra_veth = handleTest ./containers-extra_veth.nix {}; containers-hosts = handleTest ./containers-hosts.nix {}; diff --git a/nixos/tests/containers-custom-pkgs.nix b/nixos/tests/containers-custom-pkgs.nix new file mode 100644 index 0000000000000..397a4a905e6d9 --- /dev/null +++ b/nixos/tests/containers-custom-pkgs.nix @@ -0,0 +1,42 @@ +# Test for NixOS' container support. + +import ./make-test-python.nix ({ pkgs, lib, ...} : let + + customPkgs = pkgs // { + hello = pkgs.hello.overrideAttrs(old: { + name = "custom-hello"; + }); + }; + +in { + name = "containers-hosts"; + meta = with lib.maintainers; { + maintainers = [ adisbladis ]; + }; + + machine = + { ... }: + { + virtualisation.memorySize = 256; + virtualisation.vlans = []; + + containers.simple = { + autoStart = true; + pkgs = customPkgs; + config = {pkgs, config, ... }: { + environment.systemPackages = [ + pkgs.hello + ]; + }; + }; + + }; + + testScript = '' + start_all() + machine.wait_for_unit("default.target") + machine.succeed( + "test $(nixos-container run simple -- readlink -f /run/current-system/sw/bin/hello) = ${customPkgs.hello}/bin/hello" + ) + ''; +}) |