odhcp-script: delete stale dirs from previous runs

This requires adding LFS as a dependency because native Lua has
no way to iterate a directory, but it seems to be Not Huge and
hopefully we'll have other uses for it
This commit is contained in:
Daniel Barlow 2023-09-08 20:47:01 +01:00
parent 09fe21260e
commit 12e25722fa
3 changed files with 28 additions and 2 deletions

View file

@ -1,8 +1,25 @@
(local { : split : merge : mkdir } (require :anoia))
(local { : view } (require :fennel))
(local lfs (require :lfs))
(fn rmtree [pathname]
(case (lfs.symlinkattributes pathname)
nil true
{:mode "directory"}
(do
(each [f (lfs.dir pathname)]
(when (not (or (= f ".") (= f "..")))
(rmtree ( .. pathname "/" f)))
(lfs.rmdir pathname)))
{:mode "file"}
(os.remove pathname)
{:mode "link"}
(os.remove pathname)
unknown
(error (.. "can't remove " pathname " of kind \"" unknown.mode "\""))))
(local state-directory (assert (os.getenv "SERVICE_STATE")))
(mkdir state-directory)
(fn write-value [name value]
@ -13,7 +30,6 @@
(fn write-value-from-env [name]
(write-value name (os.getenv (string.upper name))))
(fn parse-address [str]
(fn parse-extra [s]
(let [out {}]
@ -39,6 +55,10 @@
;; a half-updated snapshot
(os.remove (.. state-directory "/state"))
;; remove parsed addresses/prefixes from any previous run
(rmtree (.. state-directory "/prefix"))
(rmtree (.. state-directory "/address"))
(let [wanted
[
:addresses