build_config

in cookbooks/fb_network_scripts/resources/default.rb [21:121]


  def build_config
    configs = {}
    bridging = false
    
    
    primary_int = node['fb_network_scripts']['primary_interface']
    unless node['fb_network_scripts']['interfaces'][primary_int]
      node.default['fb_network_scripts']['interfaces'][primary_int] = {}
    end
    
    if primary_int != 'eth0' &&
       node['fb_network_scripts']['interfaces']['eth0'] &&
       node['fb_network_scripts']['interfaces']['eth0'].empty?
      node.rm(:fb_network_scripts, :interfaces, :eth0)
    end

    interface_configs = node['fb_network_scripts']['interfaces'].to_hash
    interface_configs.each do |interface, config|
      
      config['name'] = interface
      unless config['onboot']
        config['onboot'] = 'yes'
      end
      unless config['bootproto']
        config['bootproto'] = 'static'
      end
      unless config['v6router']
        config['v6router'] = 'no'
      end
      unless config['ipv6_autoconf']
        config['ipv6_autoconf'] = 'yes'
      end
      
      if [false, 'no', 'n', 'N', 'NO'].include?(config['onboot'])
        config['onboot'] = 'no'
      else
        config['onboot'] = 'yes'
      end
      if [true, 'yes', 'y', 'Y', 'YES'].include?(config['v6router'])
        config['v6router'] = 'yes'
      else
        config['v6router'] = 'no'
      end
      Chef::Log.debug("NETCONF: #{interface} #{config}")

      have_v4_config = (config.key?('ip') && config.key?('netmask')) ||
        config.key?('my_inner_ipaddr')
      have_v6_config = config.key?('ipv6')
      want_auto = (config['bootproto'] == 'static' &&
                   !have_v4_config && !have_v6_config)
      if config['range']
        
        
        config['ip'] = '127.0.0.2'
        config['netmask'] = '255.255.255.0'
      elsif want_auto
        if interface == primary_int
          unless config['ip'] || config['ipv6']
            fail "fb_network_scripts: #{interface} has neither IPv4 nor " +
                 'IPv6 address, aborting'
          end
        
        elsif config['bridge'] || config['ovs_bridge']
          config.delete('bootproto')
          bridging = true
        else
          
          Chef::Log.error(
            "fb_network_scripts: you requested that #{interface} be " +
            "configured, but didn't provide configuration data, (and _also_" +
            "it's not the primary interface [#{primary_int}], so it cannot " +
            'be configured!',
          )
          fail 'fb_network_scripts: not enough data to configure ' +
               "#{interface}, cowardly refusing to continue."
        end
      end
      
      
      
      if config['v6range']
        
        
        
        unless config['v6secondaries']
          config['v6secondaries'] = []
        end
        config['v6secondaries'] += FB::NetworkScripts.v6range2list(
          config['v6range']['start'], config['v6range']['end']
        )
        unless config['ipv6']
          config['ipv6'] = config['v6secondaries'].shift
        end
      end

      configs[interface] = config
    end

    configs.values
  end