start poc, config switch

config_switch
Lzebulon 2026-01-24 23:08:02 +01:00
parent 94dfc8c6a4
commit 314a76cbcc
No known key found for this signature in database
GPG Key ID: D6CDAB8050CBBE7D
2 changed files with 90 additions and 0 deletions

View File

@ -9,6 +9,7 @@ rec {
vr = {id = 27;}; vr = {id = 27;};
aurore = {id = 28;}; aurore = {id = 28;};
imprimante = {id = 2756;}; imprimante = {id = 2756;};
vlan-mlag = {id = 4094;};
}; };
reseaux = { reseaux = {

View File

@ -0,0 +1,89 @@
{lib, ...}:
let
generate_config = switch_name: user_switch: host:
let
server = host.physiques;
in
''
! File generated by the NixOS configuration
hostname ${switch_name}
ip domain-name adm.crans.org
!
spanning-tree mode mstp
no spanning-tree vlan ${toString host.vlans.vlan-mlag.id}
''
+
# On définie un user pour pouvoir s'y conncter en ssh
''
no aaa root
username ${user_switch.name} role network-admin secret 5 ${user_switch.hashedPassword}
username ${user_switch.name} sshkey ${user_switch.ssh_key}
''
+
# On définie les vlans
map host.vlans (name: value:
''
vlan ${toString value.id}
name ${name}
''
)
+
# On définie les port et le mlag si le machine est connecte sur les deux switch
lib.mapAttrs host.physiques (name: value:
if value.switch.${switch_name} then
let
port_channel = value.switch.${switch_name};
in
# FIX: certains n'ont pas de Port-Channel car sur un seul switch & port switch
# peut etre different donc il faut un autre truc pour determiner le numero du
# Port Channel
''
interface Ethernet${toString value.switch.${switch_name}}
mtu 9000
channel-group ${toString port_channel} mode active
interface Port-Channel${toString port_channel}
mtu 9000
switchport trunk allowed vlan ${lib.concatStringsSep "," (host.physiques.vlans.map (vlan: toString vlan.id)) }
switchport mode trunk
mlag ${toString port_channel}
''
else ''''
)
+
# On définie un port channel supplémentaire pour le mlag
''
interface Port-Channel2000
switchport mode trunk
switchport trunk group mlag
''
+
# On attribue une ip statique de management au switch
''
interface Management1
ip address 172.16.10.${toString host.physiques.${switch_name}.id}/24
''
+
# Je sais pas, c'etait dans la conf sur les switchs
''
no ip routing
''
+
# On configure le mlag
''
mlag configuration
domain-id mlag-01
heartbeat-interval 10000
local-interface Vlan${toString host.vlans.vlan-mlag.id}
peer-address 10.0.0.${if switch_name == "arceus" then "2" else "1"}
peer-link Port-Channel2000
reload-delay 150
''
+
''
end
''
;
in
{
}