e928715eb60f7a13d10eb8ea16544ca5baa486e2
[mirror/dsa-puppet.git] / 3rdparty / modules / nova / manifests / network.pp
1 # == Class: nova::network
2 #
3 # Manages nova-network.
4 #
5 # An OpenStack deployment that includes compute and networking will use either
6 # nova-network or Neutron.  Neutron is newer and nova-network is the legacy
7 # networking support built directly into Nova.  However, nova-network is still
8 # fully supported, is not feature frozen, and is not yet officially deprecated.
9 #
10 # === Parameters:
11 #
12 # [*private_interface*]
13 #   (optional) Interface used by private network.
14 #   Defaults to undef
15 #
16 # [*fixed_range*]
17 #   (optional) Fixed private network range.
18 #   Defaults to '10.0.0.0/8'
19 #
20 # [*public_interface*]
21 #   (optional) Interface used to connect vms to public network.
22 #   Defaults to undef
23 #
24 # [*num_networks*]
25 #   (optional) Number of networks that fixed range network should be
26 #   split into.
27 #   Defaults to 1
28 #
29 # [*floating_range*]
30 #   (optional) Range of floating ip addresses to create.
31 #   Defaults to false
32 #
33 # [*enabled*]
34 #   (optional) Whether the network service should be enabled.
35 #   Defaults to false
36 #
37 # [*network_manager*]
38 #   (optional) The type of network manager to use.
39 #   Defaults to 'nova.network.manager.FlatDHCPManager'
40 #
41 # [*config_overrides*]
42 #   (optional) Additional parameters to pass to the network manager class
43 #   Defaults to {}
44 #
45 # [*create_networks*]
46 #   (optional) Whether actual nova networks should be created using
47 #   the fixed and floating ranges provided.
48 #   Defaults to true
49 #
50 # [*ensure_package*]
51 #   (optional) The state of the nova network package
52 #   Defaults to 'present'
53 #
54 # [*install_service*]
55 #   (optional) Whether to install and enable the service
56 #   Defaults to true
57 #
58 class nova::network(
59   $private_interface = undef,
60   $fixed_range       = '10.0.0.0/8',
61   $public_interface  = undef,
62   $num_networks      = 1,
63   $network_size      = 255,
64   $floating_range    = false,
65   $enabled           = false,
66   $network_manager   = 'nova.network.manager.FlatDHCPManager',
67   $config_overrides  = {},
68   $create_networks   = true,
69   $ensure_package    = 'present',
70   $install_service   = true
71 ) {
72
73   include nova::params
74
75   # forward all ipv4 traffic
76   # this is required for the vms to pass through the gateways
77   # public interface
78   Exec {
79     path => $::path
80   }
81
82   ensure_resource('sysctl::value', 'net.ipv4.ip_forward', { value => '1' })
83
84   if $floating_range {
85     nova_config { 'DEFAULT/floating_range':   value => $floating_range }
86   }
87
88   if has_key($config_overrides, 'vlan_start') {
89     $vlan_start = $config_overrides['vlan_start']
90   } else {
91     $vlan_start = undef
92   }
93
94   if $install_service {
95     nova::generic_service { 'network':
96       enabled        => $enabled,
97       package_name   => $::nova::params::network_package_name,
98       service_name   => $::nova::params::network_service_name,
99       ensure_package => $ensure_package,
100       before         => Exec['networking-refresh']
101     }
102   }
103
104   if $create_networks {
105     nova::manage::network { 'nova-vm-net':
106       network       => $fixed_range,
107       num_networks  => $num_networks,
108       network_size  => $network_size,
109       vlan_start    => $vlan_start,
110     }
111     if $floating_range {
112       nova::manage::floating { 'nova-vm-floating':
113         network => $floating_range,
114       }
115     }
116   }
117
118   case $network_manager {
119
120     'nova.network.manager.FlatDHCPManager': {
121       # I am not proud of this
122       $parameters = { fixed_range      => $fixed_range,
123                       public_interface => $public_interface,
124                       flat_interface   => $private_interface
125       }
126       $resource_parameters = merge($config_overrides, $parameters)
127       $flatdhcp_resource = {'nova::network::flatdhcp' => $resource_parameters }
128       create_resources('class', $flatdhcp_resource)
129     }
130     'nova.network.manager.FlatManager': {
131       $parameters = { fixed_range      => $fixed_range,
132                       public_interface => $public_interface,
133                       flat_interface   => $private_interface
134       }
135       $resource_parameters = merge($config_overrides, $parameters)
136       $flat_resource = {'nova::network::flat' => $resource_parameters }
137       create_resources('class', $flat_resource)
138     }
139     'nova.network.manager.VlanManager': {
140       $parameters = { fixed_range      => $fixed_range,
141                       public_interface => $public_interface,
142                       vlan_interface   => $private_interface
143       }
144       $resource_parameters = merge($config_overrides, $parameters)
145       $vlan_resource = { 'nova::network::vlan' => $resource_parameters }
146       create_resources('class', $vlan_resource)
147     }
148     default: {
149       fail("Unsupported network manager: ${nova::network_manager} The supported network managers are nova.network.manager.FlatManager, nova.network.FlatDHCPManager and nova.network.manager.VlanManager")
150     }
151   }
152
153 }