Add options below networks
This commit is contained in:
parent
c8944a2871
commit
ca785e548b
6 changed files with 332 additions and 0 deletions
|
@ -17,6 +17,7 @@ extra-source-files: CHANGELOG.md, README.asciidoc,
|
||||||
src/haskell/testdata/**/*.json
|
src/haskell/testdata/**/*.json
|
||||||
data-files: nix/*.nix
|
data-files: nix/*.nix
|
||||||
, nix/modules/composition/*.nix
|
, nix/modules/composition/*.nix
|
||||||
|
, nix/modules/networks/*.nix
|
||||||
, nix/modules/nixos/*.nix
|
, nix/modules/nixos/*.nix
|
||||||
, nix/modules/service/*.nix
|
, nix/modules/service/*.nix
|
||||||
, nix/modules/lib/*.nix
|
, nix/modules/lib/*.nix
|
||||||
|
|
|
@ -70,6 +70,169 @@ No Default:: {blank}
|
||||||
|
|
||||||
No Example:: {blank}
|
No Example:: {blank}
|
||||||
|
|
||||||
|
== networks
|
||||||
|
|
||||||
|
See link:https://docs.docker.com/compose/compose-file/#networks-top-level-element[Docker Compose#networks-top-level-element]
|
||||||
|
|
||||||
|
|
||||||
|
[discrete]
|
||||||
|
=== details
|
||||||
|
|
||||||
|
Type:: lazy attribute set of submodules
|
||||||
|
Default::
|
||||||
|
+
|
||||||
|
----
|
||||||
|
{}
|
||||||
|
----
|
||||||
|
|
||||||
|
|
||||||
|
No Example:: {blank}
|
||||||
|
|
||||||
|
== networks.<name>.attachable
|
||||||
|
|
||||||
|
See link:https://docs.docker.com/compose/compose-file/#attachable[Docker Compose#attachable]
|
||||||
|
|
||||||
|
|
||||||
|
[discrete]
|
||||||
|
=== details
|
||||||
|
|
||||||
|
Type:: boolean
|
||||||
|
No Default:: {blank}
|
||||||
|
|
||||||
|
Example::
|
||||||
|
+
|
||||||
|
----
|
||||||
|
true
|
||||||
|
----
|
||||||
|
|
||||||
|
|
||||||
|
== networks.<name>.driver
|
||||||
|
|
||||||
|
`"none"`, `"host"`, or a platform-specific value.
|
||||||
|
See link:https://docs.docker.com/compose/compose-file/#driver[Docker Compose#driver]
|
||||||
|
|
||||||
|
|
||||||
|
[discrete]
|
||||||
|
=== details
|
||||||
|
|
||||||
|
Type:: string
|
||||||
|
No Default:: {blank}
|
||||||
|
|
||||||
|
No Example:: {blank}
|
||||||
|
|
||||||
|
== networks.<name>.driver_opts
|
||||||
|
|
||||||
|
See link:https://docs.docker.com/compose/compose-file/#driver_opts[Docker Compose#driver_opts]
|
||||||
|
|
||||||
|
|
||||||
|
[discrete]
|
||||||
|
=== details
|
||||||
|
|
||||||
|
Type:: lazy attribute set of raw values
|
||||||
|
No Default:: {blank}
|
||||||
|
|
||||||
|
No Example:: {blank}
|
||||||
|
|
||||||
|
== networks.<name>.enable_ipv6
|
||||||
|
|
||||||
|
Whether we've entered the 21st century yet.
|
||||||
|
|
||||||
|
See link:https://docs.docker.com/compose/compose-file/#enable_ipv6[Docker Compose#enable_ipv6]
|
||||||
|
|
||||||
|
|
||||||
|
[discrete]
|
||||||
|
=== details
|
||||||
|
|
||||||
|
Type:: boolean
|
||||||
|
No Default:: {blank}
|
||||||
|
|
||||||
|
No Example:: {blank}
|
||||||
|
|
||||||
|
== networks.<name>.external
|
||||||
|
|
||||||
|
When `true`, don't create or destroy the network, but assume that it
|
||||||
|
exists.
|
||||||
|
|
||||||
|
See link:https://docs.docker.com/compose/compose-file/#external[Docker Compose#external]
|
||||||
|
|
||||||
|
|
||||||
|
[discrete]
|
||||||
|
=== details
|
||||||
|
|
||||||
|
Type:: boolean
|
||||||
|
No Default:: {blank}
|
||||||
|
|
||||||
|
No Example:: {blank}
|
||||||
|
|
||||||
|
== networks.<name>.internal
|
||||||
|
|
||||||
|
Achieves "external isolation".
|
||||||
|
|
||||||
|
See link:https://docs.docker.com/compose/compose-file/#internal[Docker Compose#internal]
|
||||||
|
|
||||||
|
|
||||||
|
[discrete]
|
||||||
|
=== details
|
||||||
|
|
||||||
|
Type:: boolean
|
||||||
|
Default::
|
||||||
|
+
|
||||||
|
----
|
||||||
|
false
|
||||||
|
----
|
||||||
|
|
||||||
|
|
||||||
|
No Example:: {blank}
|
||||||
|
|
||||||
|
== networks.<name>.ipam
|
||||||
|
|
||||||
|
Manage IP addresses.
|
||||||
|
|
||||||
|
See link:https://docs.docker.com/compose/compose-file/#ipam[Docker Compose#ipam]
|
||||||
|
|
||||||
|
|
||||||
|
[discrete]
|
||||||
|
=== details
|
||||||
|
|
||||||
|
Type:: raw value
|
||||||
|
No Default:: {blank}
|
||||||
|
|
||||||
|
No Example:: {blank}
|
||||||
|
|
||||||
|
== networks.<name>.labels
|
||||||
|
|
||||||
|
Metadata.
|
||||||
|
|
||||||
|
See link:https://docs.docker.com/compose/compose-file/#labels[Docker Compose#labels]
|
||||||
|
|
||||||
|
|
||||||
|
[discrete]
|
||||||
|
=== details
|
||||||
|
|
||||||
|
Type:: attribute set of strings
|
||||||
|
No Default:: {blank}
|
||||||
|
|
||||||
|
No Example:: {blank}
|
||||||
|
|
||||||
|
== networks.<name>.name
|
||||||
|
|
||||||
|
Set a custom name for the network.
|
||||||
|
|
||||||
|
It shares a namespace with other projects' networks. `name` is used as-is.
|
||||||
|
|
||||||
|
Note the `default` network's default `name` is set to `project.name` by Arion.
|
||||||
|
|
||||||
|
See link:https://docs.docker.com/compose/compose-file/#name[Docker Compose#name]
|
||||||
|
|
||||||
|
|
||||||
|
[discrete]
|
||||||
|
=== details
|
||||||
|
|
||||||
|
Type:: string
|
||||||
|
No Default:: {blank}
|
||||||
|
|
||||||
|
No Example:: {blank}
|
||||||
|
|
||||||
== out.dockerComposeYaml
|
== out.dockerComposeYaml
|
||||||
|
|
||||||
A derivation that produces a docker-compose.yaml file for this composition.
|
A derivation that produces a docker-compose.yaml file for this composition.
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
{
|
{
|
||||||
|
"networks": {},
|
||||||
"services": {
|
"services": {
|
||||||
"webserver": {
|
"webserver": {
|
||||||
"command": [
|
"command": [
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
./modules/composition/docker-compose.nix
|
./modules/composition/docker-compose.nix
|
||||||
./modules/composition/host-environment.nix
|
./modules/composition/host-environment.nix
|
||||||
./modules/composition/images.nix
|
./modules/composition/images.nix
|
||||||
|
./modules/composition/networks.nix
|
||||||
./modules/composition/service-info.nix
|
./modules/composition/service-info.nix
|
||||||
./modules/composition/composition.nix
|
./modules/composition/composition.nix
|
||||||
]
|
]
|
35
src/nix/modules/composition/networks.nix
Normal file
35
src/nix/modules/composition/networks.nix
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
{ config, lib, ... }:
|
||||||
|
|
||||||
|
let
|
||||||
|
inherit (lib)
|
||||||
|
mkOption
|
||||||
|
optionalAttrs
|
||||||
|
types
|
||||||
|
;
|
||||||
|
inherit (import ../../lib.nix { inherit lib; })
|
||||||
|
dockerComposeRef
|
||||||
|
;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options = {
|
||||||
|
networks = mkOption {
|
||||||
|
type = types.lazyAttrsOf (types.submoduleWith {
|
||||||
|
modules = [
|
||||||
|
../networks/network.nix
|
||||||
|
];
|
||||||
|
});
|
||||||
|
description = ''
|
||||||
|
${dockerComposeRef "networks-top-level-element"}
|
||||||
|
'';
|
||||||
|
default = {};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
config = {
|
||||||
|
|
||||||
|
docker-compose.raw.networks =
|
||||||
|
lib.mapAttrs (k: v: v.out) config.networks;
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
131
src/nix/modules/networks/network.nix
Normal file
131
src/nix/modules/networks/network.nix
Normal file
|
@ -0,0 +1,131 @@
|
||||||
|
{ config, lib, options, ... }:
|
||||||
|
|
||||||
|
let
|
||||||
|
inherit (lib)
|
||||||
|
mkOption
|
||||||
|
optionalAttrs
|
||||||
|
types
|
||||||
|
;
|
||||||
|
inherit (import ../../lib.nix { inherit lib; })
|
||||||
|
dockerComposeRef
|
||||||
|
;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options = {
|
||||||
|
driver = mkOption {
|
||||||
|
description = ''
|
||||||
|
`"none"`, `"host"`, or a platform-specific value.
|
||||||
|
${dockerComposeRef "driver"}
|
||||||
|
'';
|
||||||
|
type = types.str;
|
||||||
|
};
|
||||||
|
|
||||||
|
driver_opts = mkOption {
|
||||||
|
description = ''
|
||||||
|
${dockerComposeRef "driver_opts"}
|
||||||
|
'';
|
||||||
|
type = types.lazyAttrsOf types.raw or types.unspecified;
|
||||||
|
};
|
||||||
|
|
||||||
|
attachable = mkOption {
|
||||||
|
description = ''
|
||||||
|
${dockerComposeRef "attachable"}
|
||||||
|
'';
|
||||||
|
type = types.bool;
|
||||||
|
example = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
enable_ipv6 = mkOption {
|
||||||
|
description = ''
|
||||||
|
Whether we've entered the 21st century yet.
|
||||||
|
|
||||||
|
${dockerComposeRef "enable_ipv6"}
|
||||||
|
'';
|
||||||
|
type = types.bool;
|
||||||
|
};
|
||||||
|
|
||||||
|
ipam = mkOption {
|
||||||
|
# TODO model sub-options
|
||||||
|
description = ''
|
||||||
|
Manage IP addresses.
|
||||||
|
|
||||||
|
${dockerComposeRef "ipam"}
|
||||||
|
'';
|
||||||
|
type = types.raw or types.unspecified;
|
||||||
|
};
|
||||||
|
|
||||||
|
internal = mkOption {
|
||||||
|
description = ''
|
||||||
|
Achieves "external isolation".
|
||||||
|
|
||||||
|
${dockerComposeRef "internal"}
|
||||||
|
'';
|
||||||
|
defaultText = false;
|
||||||
|
type = types.bool;
|
||||||
|
};
|
||||||
|
|
||||||
|
labels = mkOption {
|
||||||
|
description = ''
|
||||||
|
Metadata.
|
||||||
|
|
||||||
|
${dockerComposeRef "labels"}
|
||||||
|
'';
|
||||||
|
# no list support, because less expressive wrt overriding
|
||||||
|
type = types.attrsOf types.str;
|
||||||
|
};
|
||||||
|
|
||||||
|
external = mkOption {
|
||||||
|
description = ''
|
||||||
|
When `true`, don't create or destroy the network, but assume that it
|
||||||
|
exists.
|
||||||
|
|
||||||
|
${dockerComposeRef "external"}
|
||||||
|
'';
|
||||||
|
type = types.bool;
|
||||||
|
};
|
||||||
|
|
||||||
|
name = mkOption {
|
||||||
|
description = ''
|
||||||
|
Set a custom name for the network.
|
||||||
|
|
||||||
|
It shares a namespace with other projects' networks. `name` is used as-is.
|
||||||
|
|
||||||
|
Note the `default` network's default `name` is set to `project.name` by Arion.
|
||||||
|
|
||||||
|
${dockerComposeRef "name"}
|
||||||
|
'';
|
||||||
|
type = types.str;
|
||||||
|
};
|
||||||
|
|
||||||
|
out = mkOption {
|
||||||
|
internal = true;
|
||||||
|
description = ''
|
||||||
|
This network's contribution to the docker compose yaml file
|
||||||
|
under the `networks.''${name}` key.
|
||||||
|
'';
|
||||||
|
type = lib.types.attrsOf lib.types.raw or lib.types.unspecified;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = {
|
||||||
|
out =
|
||||||
|
lib.mapAttrs
|
||||||
|
(k: opt: opt.value)
|
||||||
|
(lib.filterAttrs
|
||||||
|
(k: opt: builtins.trace k builtins.trace opt builtins.trace "" opt.isDefined)
|
||||||
|
{
|
||||||
|
inherit (options)
|
||||||
|
driver
|
||||||
|
driver_opts
|
||||||
|
attachable
|
||||||
|
enable_ipv6
|
||||||
|
ipam
|
||||||
|
internal
|
||||||
|
labels
|
||||||
|
external
|
||||||
|
name
|
||||||
|
;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
};
|
||||||
|
}
|
Loading…
Reference in a new issue