core/lib/tests/modules/doRename-condition.nix

59 lines
1.3 KiB
Nix
Raw Normal View History

2024-05-01 22:14:04 +00:00
/**
Simulate a migration from a single-instance `services.foo` to a multi instance
`services.foos.<name>` module, where `name = ""` serves as the legacy /
compatibility instance.
- No instances must exist, unless one is defined in the multi-instance module,
or if the legacy enable option is set to true.
- The legacy instance options must be renamed to the new instance, if it exists.
The relevant scenarios are tested in separate files:
- ./doRename-condition-enable.nix
- ./doRename-condition-no-enable.nix
*/
{ config, lib, ... }:
let
2024-06-30 08:16:52 +00:00
inherit (lib)
mkOption
mkEnableOption
types
doRename
;
2024-05-01 22:14:04 +00:00
in
{
options = {
services.foo.enable = mkEnableOption "foo";
services.foos = mkOption {
2024-06-30 08:16:52 +00:00
type = types.attrsOf (
types.submodule {
options = {
bar = mkOption { type = types.str; };
};
}
);
2024-05-01 22:14:04 +00:00
default = { };
};
2024-06-30 08:16:52 +00:00
result = mkOption { };
2024-05-01 22:14:04 +00:00
};
imports = [
(doRename {
2024-06-30 08:16:52 +00:00
from = [
"services"
"foo"
"bar"
];
to = [
"services"
"foos"
""
"bar"
];
2024-05-01 22:14:04 +00:00
visible = true;
warn = false;
use = x: x;
withPriority = true;
condition = config.services.foo.enable;
})
];
}