Skip to content
Snippets Groups Projects
router.pp 2.5 KiB
Newer Older
class iaas::profile::neutron::router (
  $admin_ipaddress = hiera('iaas::admin_ipaddress', undef),

  $data_ipaddress = undef,
  $external_device = undef,
  $external_network = hiera('iaas::profile::neutron::external_network', undef),

  $ipaddress = hiera('iaas::profile::base::ipaddress'),
  $netmask = hiera('iaas::profile::base::netmask'),
  $gateway = hiera('iaas::profile::base::gateway'),

  $neutron_password = hiera('iaas::profile::neutron::password', undef),
  $neutron_secret = hiera('iaas::profile::neutron::secret', undef),

  $region = hiera('iaas::region', undef),
  $endpoint = hiera('iaas::role::endpoint::main_address', undef),
) {
  sysctl { 'net.ipv4.ip_forward': value => '1' }

  include iaas::profile::neutron::common

  class { '::neutron::agents::ml2::ovs':
    enable_tunneling => true,
    local_ip => $data_ipaddress,
    enabled => true,
    tunnel_types => ['gre'],
    bridge_mappings => ['external:br-ex'],
  }

  class { '::neutron::agents::l3':
    external_network_bridge => 'br-ex',
    use_namespaces => true,
    router_delete_namespaces => true,
    enabled => true,
  }

  class { '::neutron::agents::dhcp':
    enabled => true,
    dhcp_delete_namespaces => true,
  }

  class { '::neutron::agents::lbaas':
    enabled => true,
  }

  class { '::neutron::agents::vpnaas':
    enabled => true,
  }

  class { '::neutron::agents::metering':
    enabled => true,
  }

  class { '::neutron::services::fwaas':
    enabled => true,
  }

  class { '::neutron::agents::metadata':
    auth_password => $neutron_password,
    shared_secret => $neutron_secret,
    auth_url => "http://${endpoint}:35357/v2.0",
    auth_region => $region,
    metadata_ip => $admin_ipaddress,
    enabled => true,
  }

  $_external_device = device_for_network($external_network)
  if $_external_device != 'br-ex' {
    network_config { $external_device:
      ensure  => 'present',
      family  => 'inet',
      method  => 'manual',
      options => {
        'up' => "ifconfig ${external_device} promisc up",
        'down' => "ifconfig ${external_device} promisc down",
      },
    } ->
    network_config { 'br-ex':
      ensure  => 'present',
      family  => 'inet',
      method  => 'static',
      ipaddress => $ipaddress,
      netmask => $netmask,
    } ->
    network_route { 'route_default':
      ensure => 'present',
      gateway => $gateway,
      interface => 'br-ex',
      netmask => '0.0.0.0',
      network => 'default'
    } ->
    vs_port { $external_device:
      ensure => present,
      bridge => 'br-ex',
    }
  }
}