class frrouting ( Boolean $manage_package = true, Boolean $manage_config = true, Boolean $manage_service = true, String $package_name = 'frr', String $service_name = 'frr', Hash $daemons = {}, Hash $ospfd_interfaces = {}, String $ospfd_router_id = $facts['networking']['ip'], Array[String] $ospfd_redistribute = [], Array[String] $ospfd_networks = [], Boolean $ospfd_default_originate_always = false, Boolean $mpls_te_enabled = false, Optional[String] $mpls_ldp_router_id = undef, Optional[String] $mpls_ldp_transport_addr = undef, Array[String] $mpls_ldp_interfaces = [], ) { $daemons_defaults = { 'bgpd' => false, 'ospfd' => true, 'ospf6d' => false, 'ldpd' => false, 'ripd' => false, 'ripngd' => false, 'isisd' => false, 'pimd' => false, 'pim6d' => false, 'nhrpd' => false, 'eigrpd' => false, 'sharpd' => false, 'pbrd' => false, 'bfdd' => false, 'fabricd' => false, 'vrrpd' => false, 'pathd' => false, 'staticd' => false, } $daemons_merged = merge($daemons_defaults, $daemons) if $manage_package { package { $package_name: ensure => installed, } } if $manage_config { file { '/etc/frr/frr.conf': ensure => file, content => template('frrouting/frr.conf.erb'), notify => Service[$service_name], } file { '/etc/frr/daemons': ensure => file, content => template('frrouting/daemons.erb'), notify => Service[$service_name], } } if $manage_service { service { $service_name: ensure => running, enable => true, hasstatus => true, hasrestart => true, } } if $mpls_ldp_router_id and $mpls_ldp_transport_addr and !empty($mpls_ldp_interfaces) { file { '/etc/modules-load.d/mpls_ldp_modules.conf': ensure => file, content => @(EOT/L), # Load MPLS Kernel Modules mpls_router mpls_iptunnel | EOT } ['mpls_router', 'mpls_iptunnel'].each |$mod| { exec { "load_${mod}": command => "/sbin/modprobe ${mod}", unless => "/sbin/lsmod | /bin/grep -q ^${mod}", path => ['/sbin', '/bin', '/usr/sbin', '/usr/bin'], } } } }