templates/default/zebra.conf.erb
!!! 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
!