]> git.donarmstrong.com Git - dsa-puppet.git/blobdiff - 3rdparty/modules/neutron/manifests/agents/ml2/linuxbridge.pp
try again, with puppetforge modules, correctly included now
[dsa-puppet.git] / 3rdparty / modules / neutron / manifests / agents / ml2 / linuxbridge.pp
diff --git a/3rdparty/modules/neutron/manifests/agents/ml2/linuxbridge.pp b/3rdparty/modules/neutron/manifests/agents/ml2/linuxbridge.pp
new file mode 100644 (file)
index 0000000..62e1378
--- /dev/null
@@ -0,0 +1,156 @@
+# == Class: neutron::agents::ml2::linuxbridge
+#
+# Setups Linuxbridge Neutron agent for ML2 plugin.
+#
+# === Parameters
+#
+# [*package_ensure*]
+#   (optional) Package ensure state.
+#   Defaults to 'present'.
+#
+# [*enabled*]
+#   (required) Whether or not to enable the agent.
+#   Defaults to true.
+#
+# [*tunnel_types*]
+#   (optional) List of types of tunnels to use when utilizing tunnels.
+#   Supported tunnel types are: vxlan.
+#   Defaults to an empty list.
+#
+# [*local_ip*]
+#   (optional) Local IP address to use for VXLAN endpoints.
+#   Required when enabling tunneling.
+#   Defaults to false.
+#
+# [*vxlan_group*]
+#   (optional) Multicast group for vxlan interface. If unset, disables VXLAN
+#   multicast mode. Should be an Multicast IP (v4 or v6) address.
+#   Default to '224.0.0.1'.
+#
+# [*vxlan_ttl*]
+#   (optional) TTL for vxlan interface protocol packets..
+#   Default to undef.
+#
+# [*vxlan_tos*]
+#   (optional) TOS for vxlan interface protocol packets..
+#   Defaults to undef.
+#
+# [*polling_interval*]
+#   (optional) The number of seconds the agent will wait between
+#   polling for local device changes.
+#   Defaults to 2.
+#
+# [*l2_population*]
+#   (optional) Extension to use alongside ml2 plugin's l2population
+#   mechanism driver. It enables the plugin to populate VXLAN forwarding table.
+#   Defaults to false.
+#
+# [*physical_interface_mappings*]
+#   (optional) List of <physical_network>:<physical_interface>
+#   tuples mapping physical network names to agent's node-specific physical
+#   network interfaces. Defaults to empty list.
+#
+# [*firewall_driver*]
+#   (optional) Firewall driver for realizing neutron security group function.
+#   Defaults to 'neutron.agent.linux.iptables_firewall.IptablesFirewallDriver'.
+#
+class neutron::agents::ml2::linuxbridge (
+  $package_ensure   = 'present',
+  $enabled          = true,
+  $tunnel_types     = [],
+  $local_ip         = false,
+  $vxlan_group      = '224.0.0.1',
+  $vxlan_ttl        = false,
+  $vxlan_tos        = false,
+  $polling_interval = 2,
+  $l2_population    = false,
+  $physical_interface_mappings = [],
+  $firewall_driver  = 'neutron.agent.linux.iptables_firewall.IptablesFirewallDriver'
+) {
+
+  validate_array($tunnel_types)
+  validate_array($physical_interface_mappings)
+
+  include neutron::params
+
+  Package['neutron-plugin-linuxbridge-agent'] -> Neutron_plugin_linuxbridge<||>
+  Neutron_plugin_linuxbridge<||> ~> Service['neutron-plugin-linuxbridge-agent']
+
+  if ('vxlan' in $tunnel_types) {
+
+    if ! $local_ip {
+      fail('The local_ip parameter is required when vxlan tunneling is enabled')
+    }
+
+    if $vxlan_group {
+      neutron_plugin_linuxbridge { 'vxlan/vxlan_group': value => $vxlan_group }
+    } else {
+      neutron_plugin_linuxbridge { 'vxlan/vxlan_group': ensure => absent }
+    }
+
+    if $vxlan_ttl {
+      neutron_plugin_linuxbridge { 'vxlan/vxlan_ttl': value => $vxlan_ttl }
+    } else {
+      neutron_plugin_linuxbridge { 'vxlan/vxlan_ttl': ensure => absent }
+    }
+
+    if $vxlan_tos {
+      neutron_plugin_linuxbridge { 'vxlan/vxlan_tos': value => $vxlan_tos }
+    } else {
+      neutron_plugin_linuxbridge { 'vxlan/vxlan_tos': ensure => absent }
+    }
+
+    neutron_plugin_linuxbridge {
+      'vxlan/enable_vxlan':  value => true;
+      'vxlan/local_ip':      value => $local_ip;
+      'vxlan/l2_population': value => $l2_population;
+    }
+  } else {
+    neutron_plugin_linuxbridge {
+      'vxlan/enable_vxlan':  value  => false;
+      'vxlan/local_ip':      ensure => absent;
+      'vxlan/vxlan_group':   ensure => absent;
+      'vxlan/l2_population': ensure => absent;
+    }
+  }
+
+  neutron_plugin_linuxbridge {
+    'agent/polling_interval':                   value => $polling_interval;
+    'linux_bridge/physical_interface_mappings': value => join($physical_interface_mappings, ',');
+  }
+
+  if $firewall_driver {
+    neutron_plugin_linuxbridge { 'securitygroup/firewall_driver': value => $firewall_driver }
+  } else {
+    neutron_plugin_linuxbridge { 'securitygroup/firewall_driver': ensure => absent }
+  }
+
+  if $::neutron::params::linuxbridge_agent_package {
+    package { 'neutron-plugin-linuxbridge-agent':
+      ensure  => $package_ensure,
+      name    => $::neutron::params::linuxbridge_agent_package,
+    }
+  } else {
+    # Some platforms (RedHat) do not provide a separate
+    # neutron plugin linuxbridge agent package.
+    if ! defined(Package['neutron-plugin-linuxbridge-agent']) {
+      package { 'neutron-plugin-linuxbridge-agent':
+        ensure  => $package_ensure,
+        name    => $::neutron::params::linuxbridge_server_package,
+      }
+    }
+  }
+
+  if $enabled {
+    $service_ensure = 'running'
+  } else {
+    $service_ensure = 'stopped'
+  }
+
+  service { 'neutron-plugin-linuxbridge-agent':
+    ensure  => $service_ensure,
+    name    => $::neutron::params::linuxbridge_agent_service,
+    enable  => $enabled,
+    require => Class['neutron']
+  }
+}