nixos-container: hostPort -> forwardPort and forwardPort is now a list of (protocol,hostPort,containerPort).

This commit is contained in:
Ian-Woo Kim 2016-12-03 20:57:24 -08:00 committed by Robin Gloster
parent 0bfc631de2
commit 4f0b663c2e

View File

@ -90,13 +90,13 @@ let
extraFlags+=" --network-bridge=$HOST_BRIDGE" extraFlags+=" --network-bridge=$HOST_BRIDGE"
fi fi
if [ -n "$HOST_PORT" ]; then if [ -n "$HOST_PORT" ]; then
OIFS=$IFS OIFS=$IFS
IFS="," IFS=","
for i in $HOST_PORT for i in $HOST_PORT
do do
extraFlags+=" --port=$i" extraFlags+=" --port=$i"
done done
IFS=$OIFS IFS=$OIFS
fi fi
fi fi
@ -325,12 +325,29 @@ let
''; '';
}; };
hostPort = mkOption { forwardPorts = mkOption {
type = types.listOf types.str; type = types.listOf (types.submodule {
default = null; options = {
example = [ "8080" ]; protocol = mkOption {
type = types.str;
default = "tcp";
description = "The protocol specifier for port forwarding between host and container";
};
hostPort = mkOption {
type = types.int;
description = "Source port of the external interface on host";
};
containerPort = mkOption {
type = types.nullOr types.int;
default = null;
description = "Target port of container";
};
};
});
default = [];
example = [ { protocol = "tcp"; hostPort = 8080; containerPort = 80; } ];
description = '' description = ''
List of forwarded ports from the host to the container. List of forwarded ports from host to container. Each forwarded port is specified by protocol, hostPort and containerPort. By default, protocol is tcp and hostPort and containerPort are assumed to be the same if containerPort is not explicitly given.
''; '';
}; };
@ -662,7 +679,9 @@ in
# Generate a configuration file in /etc/containers for each # Generate a configuration file in /etc/containers for each
# container so that container@.target can get the container # container so that container@.target can get the container
# configuration. # configuration.
environment.etc = mapAttrs' (name: cfg: nameValuePair "containers/${name}.conf" environment.etc =
let mkPortStr = p: p.protocol + ":" + (toString p.hostPort) + ":" + (if p.containerPort == null then toString p.hostPort else toString p.containerPort);
in mapAttrs' (name: cfg: nameValuePair "containers/${name}.conf"
{ text = { text =
'' ''
SYSTEM_PATH=${cfg.path} SYSTEM_PATH=${cfg.path}
@ -671,8 +690,8 @@ in
${optionalString (cfg.hostBridge != null) '' ${optionalString (cfg.hostBridge != null) ''
HOST_BRIDGE=${cfg.hostBridge} HOST_BRIDGE=${cfg.hostBridge}
''} ''}
${optionalString (length cfg.hostPort > 0) '' ${optionalString (length cfg.forwardPorts > 0) ''
HOST_PORT=${concatStringsSep "," cfg.hostPort} HOST_PORT=${concatStringsSep "," (map mkPortStr cfg.forwardPorts)}
''} ''}
${optionalString (cfg.hostAddress != null) '' ${optionalString (cfg.hostAddress != null) ''
HOST_ADDRESS=${cfg.hostAddress} HOST_ADDRESS=${cfg.hostAddress}