forked from DGNum/infrastructure
50 lines
1 KiB
Nix
50 lines
1 KiB
Nix
|
{ config, lib, ... }:
|
||
|
|
||
|
let
|
||
|
inherit (lib)
|
||
|
mapAttrsToList
|
||
|
mkEnableOption
|
||
|
mkOption
|
||
|
optionalString
|
||
|
;
|
||
|
|
||
|
inherit (lib.types) attrsOf str submodule;
|
||
|
|
||
|
interface-module =
|
||
|
{ name, config, ... }:
|
||
|
{
|
||
|
options = {
|
||
|
enable = mkEnableOption "the PoE for this interface";
|
||
|
xml = mkOption {
|
||
|
type = str;
|
||
|
visible = false;
|
||
|
readOnly = true;
|
||
|
};
|
||
|
};
|
||
|
config.xml = ''
|
||
|
<interface><name>${name}</name>${optionalString (!config.enable) "<disable/>"}</interface>
|
||
|
'';
|
||
|
};
|
||
|
in
|
||
|
{
|
||
|
options = {
|
||
|
poe.interfaces = mkOption {
|
||
|
type = attrsOf (submodule interface-module);
|
||
|
default = { };
|
||
|
description = ''
|
||
|
PoE configuration of interfaces.
|
||
|
'';
|
||
|
};
|
||
|
netconf.xmls.poe = mkOption {
|
||
|
type = str;
|
||
|
visible = false;
|
||
|
readOnly = true;
|
||
|
};
|
||
|
};
|
||
|
config.netconf.xmls.poe = ''
|
||
|
<poe operation="replace">
|
||
|
${builtins.concatStringsSep "" (mapAttrsToList (_: intf: intf.xml) config.poe.interfaces)}
|
||
|
</poe>
|
||
|
'';
|
||
|
}
|