nertwork/frr-cookbook

View on GitHub
templates/default/zebra.conf.erb

Summary

Maintainability
Test Coverage
!!! ZEBRA CONFIGURATION
!
<% unless node['quagga']['integrated_vtysh_config'] -%>
hostname zebra
password <%= node.quagga.password %>
enable password <%= node['frr']['enabled_password'] %>
log file /var/log/quagga/zebra.log
!
<% end -%>
<% @interfaces.each do |port, _options|-%>
interface <%= port %>
<% # Chef node[] fake-Hash is read-only
   # Use temp variables instead
   options = if _options.is_a?(Hash)
                 _options
             elsif _options.is_a?(Array)
                 # Old Chef is Ruby1.9 without Enumerable.to_h
                 Hash[_options.map { |v| [v, true] }]
             else
                 Chef::Application.fatal!("node['quagga']['interfaces']['#{port}'] must be Hash or Array!")
             end -%>
<% options.select { |_k, v| v }.each do |option, val| -%>
 <%= option %>
<% end -%>
<% unless options.include?('no ipv6 nd suppress-ra') && (options.is_a?(Array) || options['no ipv6 nd suppress-ra']) -%>
 ipv6 nd suppress-ra
<% end -%>
<% unless options.include?('no link-detect') && (options.is_a?(Array) || options['no link-detect']) -%>
 link-detect
<% end -%>
!
<% end -%>
!
<% @static_routes.each do |network,next_hop| -%>
  <% if network.include? ':' %>
ipv6 route <%= network %> <%= next_hop %>
  <% else %>
ip route <%= network %> <%= next_hop %>
  <% end %>
!
<% end -%>
<% @prefix_lists.each do |list,entries| -%>
  <% Array(entries).each do |entry,data| -%>
    <% next unless %w( permit deny ).include?(data['action']) -%>
    <% if !data['prefix'] %>
      <% rule = "ip prefix-list #{list} seq #{entry} #{data['action']} any" -%>
    <% elsif data['prefix'].include? ':' %>
      <% rule = "ipv6 prefix-list #{list} seq #{entry} #{data['action']} #{data['prefix'] }" -%>
    <% elsif data['prefix'] == 'any_v6' %>
      <% rule = "ipv6 prefix-list #{list} seq #{entry} #{data['action']} any" -%>
    <% else %>
      <% rule = "ip prefix-list #{list} seq #{entry} #{data['action']} #{data['prefix']}" -%>
    <% end %>
    <% rule << " ge #{data['ge']}" if data['ge'] -%>
    <% rule << " le #{data['le']}" if data['le'] -%>
 <%= rule %>
  <% end -%>
<% end -%>
<% @route_maps.each do |map,entries| -%>
  <% entries.each do |entry,data| -%>
    <% next unless %w( permit deny ).include?(data['action']) -%>
route-map <%= map%> <%= data['action']%> <%= entry%>
    <% if data['set'] -%>
      <% if data['set']['aggregator'] -%>
 set aggregator as <%= data['set']['aggregator']['as']%> <%= data['set']['aggregator']['ip']%>
      <% end -%>
      <% if data['set']['local_preference'] -%>
 set local-preference <%= data['set']['local_preference']%>
      <% end -%>
    <% end -%>
  <% end -%>
<% end -%>
!
ip forwarding
ipv6 forwarding
!
!
line vty
!