new: output-template interpolates output values into config file

This commit is contained in:
Daniel Barlow 2024-08-10 23:06:47 +01:00 committed by Raito Bezarius
parent 6b36215d61
commit 7b5b930984
15 changed files with 73 additions and 0 deletions

View file

@ -91,6 +91,7 @@ in {
odhcp-script = callPackage ./odhcp-script {}; odhcp-script = callPackage ./odhcp-script {};
odhcp6c = callPackage ./odhcp6c {}; odhcp6c = callPackage ./odhcp6c {};
openwrt = callPackage ./openwrt {}; openwrt = callPackage ./openwrt {};
output-template = callPackage ./output-template { };
ppp = callPackage ./ppp {}; ppp = callPackage ./ppp {};
pppoe = callPackage ./pppoe {}; pppoe = callPackage ./pppoe {};
preinit = callPackage ./preinit {}; preinit = callPackage ./preinit {};

View file

@ -0,0 +1,3 @@
check:
./output-template ./example-output/ '{{' '}}' < example.ini > output
diff -u output example.ini.expected

View file

@ -0,0 +1,34 @@
{
fetchurl,
writeFennel,
fennel,
runCommand,
lua,
anoia,
linotify,
lualinux,
stdenv
}:
let name = "output-template";
in stdenv.mkDerivation {
inherit name;
src = ./.;
buildInputs = [lua];
doCheck = true;
buildPhase = ''
cp -p ${writeFennel name {
packages = [
anoia
lualinux
linotify
] ;
mainFunction = "run";
} ./output-template.fnl } ${name}
'';
checkPhase = "make check";
installPhase = ''
install -D ${name} $out/bin/${name}
'';
}

View file

@ -0,0 +1 @@
a11

View file

@ -0,0 +1 @@
a33

View file

@ -0,0 +1 @@
a55

View file

@ -0,0 +1 @@
a66

View file

@ -0,0 +1 @@
000000

View file

@ -0,0 +1 @@
0000ff

View file

@ -0,0 +1 @@
00ff00

View file

@ -0,0 +1 @@
ff0000

View file

@ -0,0 +1 @@
eth1

View file

@ -0,0 +1,2 @@
wpa_passphrase={{ secret "colours/black" }}
think = {{ string.format("%q", secret("colours/blue")) }}

View file

@ -0,0 +1,2 @@
wpa_passphrase=000000
think = "0000ff"

View file

@ -0,0 +1,22 @@
(local svc (require :anoia.svc))
(fn substitute [text service opening closing]
(let [delim (.. opening "(.-)" closing)
myenv {
: string
:secret (fn [x] (service:output x))
:lua_quote #(string.format "%q" %1)
}]
(string.gsub text delim
(fn [x]
(assert ((load (.. "return " x) x :t myenv))
(string.format "missing value for %q" x))))))
(fn run []
(let [[service-dir opening closing] arg
service (assert (svc.open service-dir))
out (substitute (: (io.input) :read "*a") service opening closing)]
(io.write out)))
{ : run }