diff options
author | Eric Merritt <eric@merritt.tech> | 2016-06-24 07:02:26 -0700 |
---|---|---|
committer | Eric Merritt <eric@merritt.tech> | 2016-08-04 07:08:56 -0700 |
commit | a2feaf6d79ad286925f51c08772f2d6f4d3db71b (patch) | |
tree | 9c925dae0d23711936455011e0a1e123b2b2d7ce /pkgs/tools/virtualization/nixos-container | |
parent | fe8f0dbd53fb2497a44be21a177188d5c52e36e7 (diff) |
nixos-container: feature add 'config-file' option
This adds a config file option to nixos-container.pl that makes it quite
a bit easier to use.
Diffstat (limited to 'pkgs/tools/virtualization/nixos-container')
-rwxr-xr-x | pkgs/tools/virtualization/nixos-container/nixos-container.pl | 34 |
1 files changed, 27 insertions, 7 deletions
diff --git a/pkgs/tools/virtualization/nixos-container/nixos-container.pl b/pkgs/tools/virtualization/nixos-container/nixos-container.pl index 6d28c2a4d615..ec2e05c387a5 100755 --- a/pkgs/tools/virtualization/nixos-container/nixos-container.pl +++ b/pkgs/tools/virtualization/nixos-container/nixos-container.pl @@ -6,6 +6,7 @@ use File::Path; use File::Slurp; use Fcntl ':flock'; use Getopt::Long qw(:config gnu_getopt); +use Cwd 'abs_path'; my $nsenter = "@utillinux@/bin/nsenter"; my $su = "@su@"; @@ -18,13 +19,13 @@ umask 0022; sub showHelp { print <<EOF; Usage: nixos-container list - nixos-container create <container-name> [--nixos-path <path>] [--system-path <path>] [--config <string>] [--ensure-unique-name] [--auto-start] + nixos-container create <container-name> [--nixos-path <path>] [--system-path <path>] [--config-file <path>] [--config <string>] [--ensure-unique-name] [--auto-start] nixos-container destroy <container-name> nixos-container start <container-name> nixos-container stop <container-name> nixos-container kill <container-name> [--signal <signal-specifier>] nixos-container status <container-name> - nixos-container update <container-name> [--config <string>] [--nixos-path <path>] + nixos-container update <container-name> [--config <string>] [--config-file <path>] nixos-container login <container-name> nixos-container root-login <container-name> nixos-container run <container-name> -- args... @@ -40,6 +41,7 @@ my $ensureUniqueName = 0; my $autoStart = 0; my $extraConfig; my $signal; +my $configFile; GetOptions( "help" => sub { showHelp() }, @@ -48,11 +50,16 @@ GetOptions( "system-path=s" => \$systemPath, "signal=s" => \$signal "nixos-path=s" => \$nixosPath, - "config=s" => \$extraConfig + "config=s" => \$extraConfig, + "config-file=s" => \$configFile ) or exit 1; my $action = $ARGV[0] or die "$0: no action specified\n"; +if (defined $configFile and defined $extraConfig) { + die "--config and --config-file are mutually incompatible. " . + "Please define on or the other, but not both"; +} # Execute the selected action. @@ -73,6 +80,17 @@ $containerName =~ /^[a-zA-Z0-9\-]+$/ or die "$0: invalid container name\n"; sub writeNixOSConfig { my ($nixosConfigFile) = @_; + my $localExtraConfig = ""; + + + + if ($extraConfig) { + $localExtraConfig = $extraConfig + } elsif ($configFile) { + my $resolvedFile = abs_path($configFile); + $localExtraConfig = "imports = [ $resolvedFile ];" + } + my $nixosConfig = <<EOF; { config, lib, pkgs, ... }: @@ -81,7 +99,7 @@ with lib; { boot.isContainer = true; networking.hostName = mkDefault "$containerName"; networking.useDHCP = false; - $extraConfig + $localExtraConfig } EOF @@ -273,11 +291,13 @@ elsif ($action eq "update") { # FIXME: may want to be more careful about clobbering the existing # configuration.nix. - writeNixOSConfig $nixosConfigFile if (defined $extraConfig && $extraConfig ne ""); + if ((defined $extraConfig && $extraConfig ne "") || + (defined $configFile && $configFile ne "")) { + writeNixOSConfig $nixosConfigFile; + } - my $nixenvF = $nixosPath // "<nixpkgs/nixos>"; system("nix-env", "-p", "$profileDir/system", - "-I", "nixos-config=$nixosConfigFile", "-f", "$nixenvF", + "-I", "nixos-config=$nixosConfigFile", "-f", "<nixpkgs/nixos>", "--set", "-A", "system") == 0 or die "$0: failed to build container configuration\n"; |