feat(netconf): toplevel rpc drv

This commit is contained in:
catvayor 2024-12-15 20:40:51 +01:00 committed by Tom Hubrecht
parent 9601caba4f
commit e8cdd06706
Signed by: thubrecht
SSH key fingerprint: SHA256:CYNvFo44Ar9qCNnWNnvJVhs0QXO9AZjOLlPeWcSij3Q
2 changed files with 74 additions and 39 deletions

View file

@ -126,11 +126,14 @@ in
}; };
netconf = { netconf = {
evalConfig = (import nixpkgs.nixos.unstable.path { }).lib.evalModules; evalConfig = nixpkgs.nixos.unstable.lib.evalModules;
defaults = defaults =
{ nodeMeta, nodePath, ... }: { nodeMeta, nodePath, ... }:
{ {
_module.args = {
pkgs = nixpkgs.nixos.unstable;
};
# Import the default modules # Import the default modules
imports = [ imports = [
# Import the base configuration for each node # Import the base configuration for each node

View file

@ -1,4 +1,10 @@
{ config, lib, ... }: {
config,
lib,
pkgs,
name,
...
}:
let let
inherit (lib) mapAttrs mkOption; inherit (lib) mapAttrs mkOption;
@ -9,6 +15,7 @@ let
str str
any any
submodule submodule
package
; ;
mandatory.options = { mandatory.options = {
@ -36,14 +43,15 @@ in
type = attrsOf any; type = attrsOf any;
default = { }; default = { };
}; };
netconf.xmls.configuration = mkOption { netconf = {
xmls.configuration = mkOption {
type = str; type = str;
readOnly = true; readOnly = true;
description = '' description = ''
The full configuration to send to a JunOS. The full configuration to send to a JunOS.
''; '';
}; };
netconf.mandatoryInterfaces = mkOption { mandatoryInterfaces = mkOption {
type = attrsOf (submodule mandatory); type = attrsOf (submodule mandatory);
example = { example = {
"ge-0/0/0" = { "ge-0/0/0" = {
@ -62,13 +70,20 @@ in
with some information about it (only if it supports PoE for now). with some information about it (only if it supports PoE for now).
''; '';
}; };
rpc = mkOption {
type = package;
readOnly = true;
}; };
config.interfaces = };
};
config = {
interfaces =
let let
mkIntf = _: _: { }; mkIntf = _: _: { };
in in
mapAttrs mkIntf config.netconf.mandatoryInterfaces; mapAttrs mkIntf config.netconf.mandatoryInterfaces;
config.netconf.xmls.configuration = with config.netconf.xmls; '' netconf = {
xmls.configuration = with config.netconf.xmls; ''
<configuration> <configuration>
${system} ${system}
${interfaces} ${interfaces}
@ -77,4 +92,21 @@ in
${poe} ${poe}
</configuration> </configuration>
''; '';
rpc = pkgs.writeText "${name}.rpc" ''
<rpc>
<edit-config>
<config>
${config.netconf.xmls.configuration}
</config>
<target>
<candidate/>
</target>
</edit-config>
</rpc>
<rpc>
<commit/>
</rpc>
'';
};
};
} }