summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Hensing <robert@roberthensing.nl>2021-05-27 16:22:28 +0200
committerRobert Hensing <robert@roberthensing.nl>2021-06-02 10:20:11 +0200
commitc758b6937516cbd761a53ba90deb60b16d9cd568 (patch)
treebb092c65c42430aa3fe477c644b91e6b75de99a5
parentnixos/podman: Add defaultNetwork.extraPlugins (diff)
downloadnixpkgs-c758b6937516cbd761a53ba90deb60b16d9cd568.tar.gz
nixos/podman-dnsname: init
(cherry picked from commit 54f2f1e5f1c7fd34e564a84443e8490477e26eb7)
-rw-r--r--nixos/modules/virtualisation/podman-dnsname.nix36
-rw-r--r--nixos/modules/virtualisation/podman.nix1
-rw-r--r--nixos/tests/all-tests.nix1
-rw-r--r--nixos/tests/podman-dnsname.nix42
-rw-r--r--pkgs/applications/networking/cluster/dnsname-cni/default.nix4
5 files changed, 84 insertions, 0 deletions
diff --git a/nixos/modules/virtualisation/podman-dnsname.nix b/nixos/modules/virtualisation/podman-dnsname.nix
new file mode 100644
index 000000000000..beef19755079
--- /dev/null
+++ b/nixos/modules/virtualisation/podman-dnsname.nix
@@ -0,0 +1,36 @@
+{ config, lib, pkgs, ... }:
+let
+ inherit (lib)
+ mkOption
+ mkIf
+ types
+ ;
+
+ cfg = config.virtualisation.podman;
+
+in
+{
+ options = {
+ virtualisation.podman = {
+
+ defaultNetwork.dnsname.enable = mkOption {
+ type = types.bool;
+ default = false;
+ description = ''
+ Enable DNS resolution in the default podman network.
+ '';
+ };
+
+ };
+ };
+
+ config = {
+ virtualisation.containers.containersConf.cniPlugins = mkIf cfg.defaultNetwork.dnsname.enable [ pkgs.dnsname-cni ];
+ virtualisation.podman.defaultNetwork.extraPlugins =
+ lib.optional cfg.defaultNetwork.dnsname.enable {
+ type = "dnsname";
+ domainName = "dns.podman";
+ capabilities.aliases = true;
+ };
+ };
+}
diff --git a/nixos/modules/virtualisation/podman.nix b/nixos/modules/virtualisation/podman.nix
index ee9565abc24b..e245004e04a6 100644
--- a/nixos/modules/virtualisation/podman.nix
+++ b/nixos/modules/virtualisation/podman.nix
@@ -39,6 +39,7 @@ let
in
{
imports = [
+ ./podman-dnsname.nix
./podman-network-socket.nix
(lib.mkRenamedOptionModule [ "virtualisation" "podman" "libpod" ] [ "virtualisation" "containers" "containersConf" ])
];
diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix
index 7f0a987f89c6..917d2f54efe1 100644
--- a/nixos/tests/all-tests.nix
+++ b/nixos/tests/all-tests.nix
@@ -334,6 +334,7 @@ in
plotinus = handleTest ./plotinus.nix {};
podgrab = handleTest ./podgrab.nix {};
podman = handleTestOn ["x86_64-linux"] ./podman.nix {};
+ podman-dnsname = handleTestOn ["x86_64-linux"] ./podman-dnsname.nix {};
podman-tls-ghostunnel = handleTestOn ["x86_64-linux"] ./podman-tls-ghostunnel.nix {};
pomerium = handleTestOn ["x86_64-linux"] ./pomerium.nix {};
postfix = handleTest ./postfix.nix {};
diff --git a/nixos/tests/podman-dnsname.nix b/nixos/tests/podman-dnsname.nix
new file mode 100644
index 000000000000..dd352f754dcf
--- /dev/null
+++ b/nixos/tests/podman-dnsname.nix
@@ -0,0 +1,42 @@
+import ./make-test-python.nix (
+ { pkgs, lib, ... }:
+ let
+ inherit (pkgs) writeTextDir python3 curl;
+ webroot = writeTextDir "index.html" "<h1>Hi</h1>";
+ in
+ {
+ name = "podman-dnsname";
+ meta = {
+ maintainers = with lib.maintainers; [ roberth ] ++ lib.teams.podman.members;
+ };
+
+ nodes = {
+ podman = { pkgs, ... }: {
+ virtualisation.podman.enable = true;
+ virtualisation.podman.defaultNetwork.dnsname.enable = true;
+ };
+ };
+
+ testScript = ''
+ podman.wait_for_unit("sockets.target")
+
+ with subtest("DNS works"): # also tests inter-container tcp routing
+ podman.succeed("tar cv --files-from /dev/null | podman import - scratchimg")
+ podman.succeed(
+ "podman run -d --name=webserver -v /nix/store:/nix/store -v /run/current-system/sw/bin:/bin -w ${webroot} scratchimg ${python3}/bin/python -m http.server 8000"
+ )
+ podman.succeed("podman ps | grep webserver")
+ podman.succeed("""
+ for i in `seq 0 120`; do
+ podman run --rm --name=client -v /nix/store:/nix/store -v /run/current-system/sw/bin:/bin scratchimg ${curl}/bin/curl http://webserver:8000 >/dev/console \
+ && exit 0
+ sleep 0.5
+ done
+ exit 1
+ """)
+ podman.succeed("podman stop webserver")
+ podman.succeed("podman rm webserver")
+
+ '';
+ }
+)
diff --git a/pkgs/applications/networking/cluster/dnsname-cni/default.nix b/pkgs/applications/networking/cluster/dnsname-cni/default.nix
index 2770617db7e5..27b37fdee0c4 100644
--- a/pkgs/applications/networking/cluster/dnsname-cni/default.nix
+++ b/pkgs/applications/networking/cluster/dnsname-cni/default.nix
@@ -28,6 +28,10 @@ buildGoModule rec {
doCheck = false; # NOTE: requires root privileges
+ passthru.tests = {
+ inherit (nixosTests) podman-dnsname;
+ };
+
meta = with lib; {
description = "DNS name resolution for containers";
homepage = "https://github.com/containers/dnsname";