From b9df84cd4f6b70bdfa395a91dbf3d712adc7e18d Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Thu, 22 Sep 2016 12:58:39 +0200 Subject: nixos-container: Syntax fixes Get rid of the "or null" stuff. Also change 'cfg . "foo"' to 'cfg.foo'. Also fixed what appears to be an actual bug: in postStartScript, cfg.attribute (where attribute is a function argument) should be cfg.${attribute}. --- nixos/modules/virtualisation/containers.nix | 99 +++++++++++++++-------------- 1 file changed, 50 insertions(+), 49 deletions(-) (limited to 'nixos/modules/virtualisation') diff --git a/nixos/modules/virtualisation/containers.nix b/nixos/modules/virtualisation/containers.nix index 413aa94339f1..eaa4d828afb6 100644 --- a/nixos/modules/virtualisation/containers.nix +++ b/nixos/modules/virtualisation/containers.nix @@ -12,21 +12,21 @@ let '' echo "Bringing ${name} up" ip link set dev ${name} up - ${optionalString (cfg . "localAddress" or null != null) '' + ${optionalString (cfg.localAddress != null) '' echo "Setting ip for ${name}" - ip addr add ${cfg . "localAddress"} dev ${name} + ip addr add ${cfg.localAddress} dev ${name} ''} - ${optionalString (cfg . "localAddress6" or null != null) '' + ${optionalString (cfg.localAddress6 != null) '' echo "Setting ip6 for ${name}" - ip -6 addr add ${cfg . "localAddress6"} dev ${name} + ip -6 addr add ${cfg.localAddress6} dev ${name} ''} - ${optionalString (cfg . "hostAddress" or null != null) '' + ${optionalString (cfg.hostAddress != null) '' echo "Setting route to host for ${name}" - ip route add ${cfg . "hostAddress"} dev ${name} + ip route add ${cfg.hostAddress} dev ${name} ''} - ${optionalString (cfg . "hostAddress6" or null != null) '' + ${optionalString (cfg.hostAddress6 != null) '' echo "Setting route6 to host for ${name}" - ip -6 route add ${cfg . "hostAddress6"} dev ${name} + ip -6 route add ${cfg.hostAddress6} dev ${name} ''} '' ); @@ -56,9 +56,7 @@ let ip -6 route add default via $HOST_ADDRESS6 fi - ${concatStringsSep "\n" (mapAttrsToList renderExtraVeth cfg . "extraVeths" or {})} - ip a - ip r + ${concatStringsSep "\n" (mapAttrsToList renderExtraVeth cfg.extraVeths)} fi # Start the regular stage 1 script. @@ -67,7 +65,8 @@ let ); nspawnExtraVethArgs = (name: cfg: "--network-veth-extra=${name}"); - startScript = (cfg: + + startScript = cfg: '' mkdir -p -m 0755 "$root/etc" "$root/var/lib" mkdir -p -m 0700 "$root/var/lib/private" "$root/root" /run/containers @@ -92,11 +91,7 @@ let fi fi - ${if cfg . "extraVeths" or null != null then - ''extraFlags+=" ${concatStringsSep " " (mapAttrsToList nspawnExtraVethArgs cfg . "extraVeths" or {})}"'' - else - ''# No extra veth pairs to create'' - } + extraFlags+=" ${concatStringsSep " " (mapAttrsToList nspawnExtraVethArgs cfg.extraVeths)}" for iface in $INTERFACES; do extraFlags+=" --network-interface=$iface" @@ -135,10 +130,9 @@ let --setenv LOCAL_ADDRESS6="$LOCAL_ADDRESS6" \ --setenv PATH="$PATH" \ ${containerInit cfg} "''${SYSTEM_PATH:-/nix/var/nix/profiles/system}/init" - '' - ); + ''; - preStartScript = (cfg: + preStartScript = cfg: '' # Clean up existing machined registration and interfaces. machinectl terminate "$INSTANCE" 2> /dev/null || true @@ -151,45 +145,43 @@ let ${concatStringsSep "\n" ( mapAttrsToList (name: cfg: ''ip link del dev ${name} 2> /dev/null || true '' - ) cfg . "extraVeths" or {} + ) cfg.extraVeths )} - '' - ); + ''; + postStartScript = (cfg: let - ipcall = (cfg: ipcmd: variable: attribute: - if cfg . attribute or null == null then + ipcall = cfg: ipcmd: variable: attribute: + if cfg.${attribute} == null then '' if [ -n "${variable}" ]; then ${ipcmd} add ${variable} dev $ifaceHost fi '' else - ''${ipcmd} add ${cfg . attribute} dev $ifaceHost'' - ); - renderExtraVeth = (name: cfg: - if cfg . "hostBridge" or null != null then + ''${ipcmd} add ${cfg.attribute} dev $ifaceHost''; + renderExtraVeth = name: cfg: + if cfg.hostBridge != null then '' # Add ${name} to bridge ${cfg.hostBridge} ip link set dev ${name} master ${cfg.hostBridge} up '' else '' - # Set IPs and routes for ${name} - ${optionalString (cfg . "hostAddress" or null != null) '' - ip addr add ${cfg . "hostAddress"} dev ${name} - ''} - ${optionalString (cfg . "hostAddress6" or null != null) '' - ip -6 addr add ${cfg . "hostAddress6"} dev ${name} - ''} - ${optionalString (cfg . "localAddress" or null != null) '' - ip route add ${cfg . "localAddress"} dev ${name} - ''} - ${optionalString (cfg . "localAddress6" or null != null) '' - ip -6 route add ${cfg . "localAddress6"} dev ${name} - ''} - '' - ); + # Set IPs and routes for ${name} + ${optionalString (cfg.hostAddress != null) '' + ip addr add ${cfg.hostAddress} dev ${name} + ''} + ${optionalString (cfg.hostAddress6 != null) '' + ip -6 addr add ${cfg.hostAddress6} dev ${name} + ''} + ${optionalString (cfg.localAddress != null) '' + ip route add ${cfg.localAddress} dev ${name} + ''} + ${optionalString (cfg.localAddress6 != null) '' + ip -6 route add ${cfg.localAddress6} dev ${name} + ''} + ''; in '' if [ "$PRIVATE_NETWORK" = 1 ]; then @@ -202,7 +194,7 @@ let ${ipcall cfg "ip route" "$LOCAL_ADDRESS" "localAddress"} ${ipcall cfg "ip -6 route" "$LOCAL_ADDRESS6" "localAddress6"} fi - ${concatStringsSep "\n" (mapAttrsToList renderExtraVeth cfg . "extraVeths" or {})} + ${concatStringsSep "\n" (mapAttrsToList renderExtraVeth cfg.extraVeths)} fi # Get the leader PID so that we can signal it in @@ -307,6 +299,15 @@ let }; + dummyConfig = + { + extraVeths = {}; + hostAddress = null; + hostAddress6 = null; + localAddress = null; + localAddress6 = null; + }; + in { @@ -451,7 +452,7 @@ in containers. Each container appears as a service container-name on the host system, allowing it to be started and stopped via - systemctl . + systemctl. ''; }; @@ -470,11 +471,11 @@ in environment.INSTANCE = "%i"; environment.root = "/var/lib/containers/%i"; - preStart = preStartScript {}; + preStart = preStartScript dummyConfig; - script = startScript {}; + script = startScript dummyConfig; - postStart = postStartScript {}; + postStart = postStartScript dummyConfig; preStop = '' -- cgit 1.4.1