aboutsummaryrefslogtreecommitdiff
path: root/stand
diff options
context:
space:
mode:
authorKyle Evans <kevans@FreeBSD.org>2026-04-08 12:49:18 +0000
committerKyle Evans <kevans@FreeBSD.org>2026-04-08 12:49:58 +0000
commitbf0881060ecd75ce79683b82ebcd4809eadf7cf5 (patch)
tree5c3e7d721bebcc08cd13a07b516e93bb54ef0271 /stand
parent19ab46cc66045ea936475f1a1e08763eb2fd663e (diff)
Diffstat (limited to 'stand')
-rw-r--r--stand/lua/core.lua20
-rw-r--r--stand/lua/core.lua.813
2 files changed, 30 insertions, 3 deletions
diff --git a/stand/lua/core.lua b/stand/lua/core.lua
index 92cbd20b25a0..471e579619c7 100644
--- a/stand/lua/core.lua
+++ b/stand/lua/core.lua
@@ -305,6 +305,15 @@ function core.bootenvDefault()
return loader.getenv("zfs_be_active")
end
+function core.bootenvFilter(func)
+ local oldf = core.bootenv_filter
+
+ -- Filter contract: returns true if the BE should be kept, false if it
+ -- should be hidden.
+ core.bootenv_filter = func
+ return oldf
+end
+
function core.bootenvList()
local bootenv_count = tonumber(loader.getenv(bootenv_list .. "_count"))
local bootenvs = {}
@@ -332,11 +341,18 @@ function core.bootenvList()
for curenv_idx = 0, bootenv_count - 1 do
curenv = loader.getenv(bootenv_list .. "[" .. curenv_idx .. "]")
if curenv ~= nil and unique[curenv] == nil then
- envcount = envcount + 1
- bootenvs[envcount] = curenv
unique[curenv] = true
+
+ -- If we have a filter installed (by a local module), we
+ -- give it a chance to veto the BE.
+ if not core.bootenv_filter or
+ core.bootenv_filter(curenv) then
+ envcount = envcount + 1
+ bootenvs[envcount] = curenv
+ end
end
end
+
return bootenvs
end
diff --git a/stand/lua/core.lua.8 b/stand/lua/core.lua.8
index de43d3e2b220..325320b2fce8 100644
--- a/stand/lua/core.lua.8
+++ b/stand/lua/core.lua.8
@@ -24,7 +24,7 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.Dd March 29, 2025
+.Dd April 8, 2026
.Dt CORE.LUA 8
.Os
.Sh NAME
@@ -164,6 +164,17 @@ is set in
kernels will be autodetected from the current system.
.It Fn core.bootenvDefault
Returns the default boot environment, nil if unset.
+.It Fn core.bootenvFilter func
+Installs a filter
+.Fa func
+into
+.Fn core.bootenvList .
+If the
+.Fa func
+returns true, then the boot environment is retained in the list.
+Otherwise, the boot environment is hidden.
+The old filter, if any, is returned to allow the caller to compose a filter on
+top of another filter.
.It Fn core.bootenvList
Returns a table of boot environments, or an empty table.
These will be picked up using the