diff options
author | Brendan Taylor <bct@diffeq.com> | 2023-09-22 14:08:33 -0600 |
---|---|---|
committer | Bjørn Forsman <bjorn.forsman@gmail.com> | 2023-09-27 23:35:47 +0200 |
commit | 95e66809debf42dbe1e4935fd31c8c275914d2eb (patch) | |
tree | a9c37125d00035cf4f32a7f816057d4e1ac58060 /pkgs/servers/dns | |
parent | 5266b96d2ea595b56d9fb18f272ced93ceaac313 (diff) | |
download | nixlib-95e66809debf42dbe1e4935fd31c8c275914d2eb.tar nixlib-95e66809debf42dbe1e4935fd31c8c275914d2eb.tar.gz nixlib-95e66809debf42dbe1e4935fd31c8c275914d2eb.tar.bz2 nixlib-95e66809debf42dbe1e4935fd31c8c275914d2eb.tar.lz nixlib-95e66809debf42dbe1e4935fd31c8c275914d2eb.tar.xz nixlib-95e66809debf42dbe1e4935fd31c8c275914d2eb.tar.zst nixlib-95e66809debf42dbe1e4935fd31c8c275914d2eb.zip |
coredns: allow adding external plugins
Solves https://github.com/NixOS/nixpkgs/issues/146603 CoreDNS has support for plugins that are added at compile time. This exposes an argument `externalPlugins` that will build coredns with the specified plugins. Example: ``` coredns-fanout = pkgs.coredns.override { externalPlugins = [ {name = "fanout"; repo = "github.com/networkservicemesh/fanout"; version = "v1.9.1";} ]; vendorHash = "<SRI hash>"; }; ```
Diffstat (limited to 'pkgs/servers/dns')
-rw-r--r-- | pkgs/servers/dns/coredns/default.nix | 36 |
1 files changed, 34 insertions, 2 deletions
diff --git a/pkgs/servers/dns/coredns/default.nix b/pkgs/servers/dns/coredns/default.nix index 8c340e444737..2dcfc538be45 100644 --- a/pkgs/servers/dns/coredns/default.nix +++ b/pkgs/servers/dns/coredns/default.nix @@ -3,9 +3,16 @@ , buildGoModule , fetchFromGitHub , installShellFiles +, externalPlugins ? [] +, vendorHash ? "sha256-TvIswNQ7DL/MtYmMSxXf+VqKHcmzZVZwohOCvRWxBkY=" }: -buildGoModule rec { +let + attrsToPlugins = attrs: + builtins.map ({name, repo, version}: "${name}:${repo}") attrs; + attrsToSources = attrs: + builtins.map ({name, repo, version}: "${repo}@${version}") attrs; +in buildGoModule rec { pname = "coredns"; version = "1.11.0"; @@ -16,12 +23,32 @@ buildGoModule rec { sha256 = "sha256-Mn8hOsODTlnl6PJaevMcyIKkIx/1Lk2HGA7fSSizR20="; }; - vendorHash = "sha256-9LFwrG6RxZaCLxrNabdnq++U5Aw+d2w90Zqt/wszNTY="; + inherit vendorHash; nativeBuildInputs = [ installShellFiles ]; outputs = [ "out" "man" ]; + # Override the go-modules fetcher derivation to fetch plugins + modBuildPhase = '' + for plugin in ${builtins.toString (attrsToPlugins externalPlugins)}; do echo $plugin >> plugin.cfg; done + for src in ${builtins.toString (attrsToSources externalPlugins)}; do go get $src; done + go generate + go mod vendor + ''; + + modInstallPhase = '' + mv -t vendor go.mod go.sum plugin.cfg + cp -r --reflink=auto vendor "$out" + ''; + + preBuild = '' + chmod -R u+w vendor + mv -t . vendor/go.{mod,sum} vendor/plugin.cfg + + go generate + ''; + postPatch = '' substituteInPlace test/file_cname_proxy_test.go \ --replace "TestZoneExternalCNAMELookupWithProxy" \ @@ -29,6 +56,11 @@ buildGoModule rec { substituteInPlace test/readme_test.go \ --replace "TestReadme" "SkipReadme" + + # this test fails if any external plugins were imported. + # it's a lint rather than a test of functionality, so it's safe to disable. + substituteInPlace test/presubmit_test.go \ + --replace "TestImportOrdering" "SkipImportOrdering" '' + lib.optionalString stdenv.isDarwin '' # loopback interface is lo0 on macos sed -E -i 's/\blo\b/lo0/' plugin/bind/setup_test.go |