--- /dev/null
+# == Class: nova::network
+#
+# Manages nova-network.
+#
+# An OpenStack deployment that includes compute and networking will use either
+# nova-network or Neutron. Neutron is newer and nova-network is the legacy
+# networking support built directly into Nova. However, nova-network is still
+# fully supported, is not feature frozen, and is not yet officially deprecated.
+#
+# === Parameters:
+#
+# [*private_interface*]
+# (optional) Interface used by private network.
+# Defaults to undef
+#
+# [*fixed_range*]
+# (optional) Fixed private network range.
+# Defaults to '10.0.0.0/8'
+#
+# [*public_interface*]
+# (optional) Interface used to connect vms to public network.
+# Defaults to undef
+#
+# [*num_networks*]
+# (optional) Number of networks that fixed range network should be
+# split into.
+# Defaults to 1
+#
+# [*floating_range*]
+# (optional) Range of floating ip addresses to create.
+# Defaults to false
+#
+# [*enabled*]
+# (optional) Whether the network service should be enabled.
+# Defaults to false
+#
+# [*network_manager*]
+# (optional) The type of network manager to use.
+# Defaults to 'nova.network.manager.FlatDHCPManager'
+#
+# [*config_overrides*]
+# (optional) Additional parameters to pass to the network manager class
+# Defaults to {}
+#
+# [*create_networks*]
+# (optional) Whether actual nova networks should be created using
+# the fixed and floating ranges provided.
+# Defaults to true
+#
+# [*ensure_package*]
+# (optional) The state of the nova network package
+# Defaults to 'present'
+#
+# [*install_service*]
+# (optional) Whether to install and enable the service
+# Defaults to true
+#
+class nova::network(
+ $private_interface = undef,
+ $fixed_range = '10.0.0.0/8',
+ $public_interface = undef,
+ $num_networks = 1,
+ $network_size = 255,
+ $floating_range = false,
+ $enabled = false,
+ $network_manager = 'nova.network.manager.FlatDHCPManager',
+ $config_overrides = {},
+ $create_networks = true,
+ $ensure_package = 'present',
+ $install_service = true
+) {
+
+ include nova::params
+
+ # forward all ipv4 traffic
+ # this is required for the vms to pass through the gateways
+ # public interface
+ Exec {
+ path => $::path
+ }
+
+ ensure_resource('sysctl::value', 'net.ipv4.ip_forward', { value => '1' })
+
+ if $floating_range {
+ nova_config { 'DEFAULT/floating_range': value => $floating_range }
+ }
+
+ if has_key($config_overrides, 'vlan_start') {
+ $vlan_start = $config_overrides['vlan_start']
+ } else {
+ $vlan_start = undef
+ }
+
+ if $install_service {
+ nova::generic_service { 'network':
+ enabled => $enabled,
+ package_name => $::nova::params::network_package_name,
+ service_name => $::nova::params::network_service_name,
+ ensure_package => $ensure_package,
+ before => Exec['networking-refresh']
+ }
+ }
+
+ if $create_networks {
+ nova::manage::network { 'nova-vm-net':
+ network => $fixed_range,
+ num_networks => $num_networks,
+ network_size => $network_size,
+ vlan_start => $vlan_start,
+ }
+ if $floating_range {
+ nova::manage::floating { 'nova-vm-floating':
+ network => $floating_range,
+ }
+ }
+ }
+
+ case $network_manager {
+
+ 'nova.network.manager.FlatDHCPManager': {
+ # I am not proud of this
+ $parameters = { fixed_range => $fixed_range,
+ public_interface => $public_interface,
+ flat_interface => $private_interface
+ }
+ $resource_parameters = merge($config_overrides, $parameters)
+ $flatdhcp_resource = {'nova::network::flatdhcp' => $resource_parameters }
+ create_resources('class', $flatdhcp_resource)
+ }
+ 'nova.network.manager.FlatManager': {
+ $parameters = { fixed_range => $fixed_range,
+ public_interface => $public_interface,
+ flat_interface => $private_interface
+ }
+ $resource_parameters = merge($config_overrides, $parameters)
+ $flat_resource = {'nova::network::flat' => $resource_parameters }
+ create_resources('class', $flat_resource)
+ }
+ 'nova.network.manager.VlanManager': {
+ $parameters = { fixed_range => $fixed_range,
+ public_interface => $public_interface,
+ vlan_interface => $private_interface
+ }
+ $resource_parameters = merge($config_overrides, $parameters)
+ $vlan_resource = { 'nova::network::vlan' => $resource_parameters }
+ create_resources('class', $vlan_resource)
+ }
+ default: {
+ fail("Unsupported network manager: ${nova::network_manager} The supported network managers are nova.network.manager.FlatManager, nova.network.FlatDHCPManager and nova.network.manager.VlanManager")
+ }
+ }
+
+}