From 2a8db433c2eb7fd96b27d6d3393b632dce9f44b0 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Tue, 29 Nov 2022 13:14:34 +0100 Subject: [PATCH] Allow outside world DNS configuration to be used --- example/example-service.hcl | 1 + nix2/driver.go | 16 ++++++++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/example/example-service.hcl b/example/example-service.hcl index 18dde44..03ba0d3 100644 --- a/example/example-service.hcl +++ b/example/example-service.hcl @@ -22,6 +22,7 @@ job "nix2-example-service" { "cacert", "strace", "gnugrep", + "findutils", "mount", ] command = "python3" diff --git a/nix2/driver.go b/nix2/driver.go index 610baab..17d00e8 100644 --- a/nix2/driver.go +++ b/nix2/driver.go @@ -16,6 +16,7 @@ import ( "github.com/hashicorp/nomad/client/lib/cgutil" "github.com/hashicorp/nomad/drivers/shared/capabilities" "github.com/hashicorp/nomad/drivers/shared/eventer" + "github.com/hashicorp/nomad/drivers/shared/resolvconf" "github.com/hashicorp/nomad/helper/pluginutils/hclutils" "github.com/hashicorp/nomad/helper/pluginutils/loader" "github.com/hashicorp/nomad/helper/pointer" @@ -537,10 +538,21 @@ func (d *Driver) StartTask(cfg *drivers.TaskConfig) (*drivers.TaskHandle, *drive // Some files are necessary and should be taken from outside if not present already etcpaths := []string{ - "/etc/nsswitch.conf", // Necessary for most things + "/etc/nsswitch.conf", // Necessary for many things "/etc/passwd", // Necessary for username/UID lookup - "/etc/resolv.conf", // Necessary for DNS resolution } + + if cfg.DNS != nil { + dnsMount, err := resolvconf.GenerateDNSMount(cfg.TaskDir().Dir, cfg.DNS) + if err != nil { + return nil, nil, fmt.Errorf("failed to build mount for resolv.conf: %v", err) + } + cfg.Mounts = append(cfg.Mounts, dnsMount) + } else { + // Inherit nameserver configuration from host + etcpaths = append(etcpaths, "/etc/resolv.conf") + } + for _, f := range etcpaths { if _, ok := systemMounts[f]; !ok { systemMounts[f] = f