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