diff --git a/modules/crans/networking.nix b/modules/crans/networking.nix index a376fb2..97f7c4e 100644 --- a/modules/crans/networking.nix +++ b/modules/crans/networking.nix @@ -37,8 +37,8 @@ in interface = mkOption { type = types.str; - default = "ens18"; - example = "ens19"; + default = "ens19"; + example = "ens20"; description = "Nom de l'interface réseau sur laquelle est située le VLAN srv."; }; @@ -72,18 +72,29 @@ in }; config = mkIf cfg.enable { - networking = - { - useDHCP = false; - firewall.enable = lib.mkDefault false; - nameservers = [ "172.16.10.128" ]; - } - // - # Configuration du VLAN adm - ( - if cfg.adm.enable then - { - interfaces."${cfg.adm.interface}" = { + networking = { + useDHCP = false; + firewall.enable = lib.mkDefault false; + nameservers = [ "172.16.10.128" ]; + + # La configuration des interfaces se fait de la manière suivante : + # elle est écrite de manière générique pour toutes les machines, puis + # on filtre pour ne garder que les interfaces activées. nix fait de + # l'évaluation paresseuse donc ça fonctionne bien ! + interfaces = + # On change le nom des interfaces de "adm", "srv", ... pour leur vrai + # nom (on ne le met pas directement pour faire fonctionner le filter + # plus bas). + lib.attrsets.mapAttrs' + (interface: conf: { + name = cfg."${interface}".interface; + value = conf; + }) + ( + # On filtre sur les interfaces activées + lib.attrsets.filterAttrs (interface: _: cfg."${interface}".enable) { + # Configuration du VLAN adm + adm = { ipv4.addresses = [ { address = "172.16.10.1${cfg.id}"; @@ -98,18 +109,9 @@ in } ]; }; - } - else - { } - ) - // - # Configuration du VLAN srv - ( - if cfg.srv.enable then - { - firewall.enable = true; - interfaces."${cfg.srv.interface}" = { + # Configuration du VLAN srv + srv = { ipv4 = { addresses = [ { @@ -141,17 +143,9 @@ in ]; }; }; - } - else - { } - ) - // - # Configuration du VLAN srv-nat - ( - if cfg.srvNat.enable then - { - interfaces."${cfg.srvNat.interface}" = { + # Configuration du VLAN srv-nat + srvNat = { ipv4 = { addresses = [ { @@ -184,16 +178,9 @@ in ]; }; }; - } - else - { } - ) - // - # Configuration du VLAN san - ( - if cfg.san.enable then - { - interfaces."${cfg.san.interface}" = { + + # Configuration du VLAN san + san = { ipv4.addresses = [ { address = "172.16.4.1${cfg.id}"; @@ -209,8 +196,7 @@ in ]; }; } - else - { } - ); + ); + }; }; }