]> git.donarmstrong.com Git - dsa-puppet.git/blobdiff - 3rdparty/modules/neutron/manifests/plugins/ml2.pp
try again, with puppetforge modules, correctly included now
[dsa-puppet.git] / 3rdparty / modules / neutron / manifests / plugins / ml2.pp
diff --git a/3rdparty/modules/neutron/manifests/plugins/ml2.pp b/3rdparty/modules/neutron/manifests/plugins/ml2.pp
new file mode 100644 (file)
index 0000000..3c81794
--- /dev/null
@@ -0,0 +1,182 @@
+#
+# Copyright (C) 2013 eNovance SAS <licensing@enovance.com>
+#
+# Author: Emilien Macchi <emilien.macchi@enovance.com>
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+# Configure the neutron server to use the ML2 plugin.
+# This configures the plugin for the API server, but does nothing
+# about configuring the agents that must also run and share a config
+# file with the OVS plugin if both are on the same machine.
+#
+# === Parameters
+#
+# [*type_drivers*]
+#   (optional) List of network type driver entrypoints to be loaded
+#   from the neutron.ml2.type_drivers namespace.
+#   Could be an array that can have these elements:
+#   local, flat, vlan, gre, vxlan
+#   Defaults to ['local', 'flat', 'vlan', 'gre', 'vxlan'].
+#
+# [*tenant_network_types*]
+#   (optional) Ordered list of network_types to allocate as tenant networks.
+#   The value 'local' is only useful for single-box testing
+#   but provides no connectivity between hosts.
+#   Should be an array that can have these elements:
+#   local, flat, vlan, gre, vxlan
+#   Defaults to ['local', 'flat', 'vlan', 'gre', 'vxlan'].
+#
+# [*mechanism_drivers*]
+#   (optional) An ordered list of networking mechanism driver
+#   entrypoints to be loaded from the neutron.ml2.mechanism_drivers namespace.
+#   Should be an array that can have these elements:
+#   logger, test, linuxbridge, openvswitch, hyperv, ncs, arista, cisco_nexus,
+#   l2population, sriovnicswitch
+#   Default to ['openvswitch', 'linuxbridge'].
+#
+# [*flat_networks*]
+#   (optional) List of physical_network names with which flat networks
+#   can be created. Use * to allow flat networks with arbitrary
+#   physical_network names.
+#   Should be an array.
+#   Default to *.
+#
+# [*network_vlan_ranges*]
+#   (optional) List of <physical_network>:<vlan_min>:<vlan_max> or
+#   <physical_network> specifying physical_network names
+#   usable for VLAN provider and tenant networks, as
+#   well as ranges of VLAN tags on each available for
+#   allocation to tenant networks.
+#   Should be an array with vlan_min = 1 & vlan_max = 4094 (IEEE 802.1Q)
+#   Default to empty.
+#
+# [*tunnel_id_ranges*]
+#   (optional) Comma-separated list of <tun_min>:<tun_max> tuples
+#   enumerating ranges of GRE tunnel IDs that are
+#   available for tenant network allocation
+#   Should be an array with tun_max +1 - tun_min > 1000000
+#   Default to empty.
+#
+# [*vxlan_group*]
+#   (optional) Multicast group for VXLAN.
+#   Multicast group for VXLAN. If unset, disables VXLAN enable sending allocate
+#   broadcast traffic to this multicast group. When left unconfigured, will
+#   disable multicast VXLAN mode
+#   Should be an Multicast IP (v4 or v6) address.
+#   Default to 'None'.
+#
+# [*vni_ranges*]
+#   (optional) Comma-separated list of <vni_min>:<vni_max> tuples
+#   enumerating ranges of VXLAN VNI IDs that are
+#   available for tenant network allocation.
+#   Min value is 0 and Max value is 16777215.
+#   Default to empty.
+#
+# [*enable_security_group*]
+#   (optional) Controls if neutron security group is enabled or not.
+#   It should be false when you use nova security group.
+#   Defaults to true.
+#
+# [*supported_pci_vendor_devs*]
+#   (optional) Supported PCI vendor devices, defined by
+#   vendor_id:product_id according to the PCI ID
+#   Repository. Should be an array of devices.
+#   Defaults to ['15b3:1004', '8086:10ca'] (Intel & Mellanox SR-IOV capable NICs)
+#
+# [*sriov_agent_required*]
+#   (optional) SRIOV neutron agent is required for port binding.
+#   Only set to true if SRIOV network adapters support VF link state setting
+#   and if admin state management is desired.
+#   Defaults to false.
+#
+
+class neutron::plugins::ml2 (
+  $type_drivers              = ['local', 'flat', 'vlan', 'gre', 'vxlan'],
+  $tenant_network_types      = ['local', 'flat', 'vlan', 'gre', 'vxlan'],
+  $mechanism_drivers         = ['openvswitch', 'linuxbridge'],
+  $flat_networks             = ['*'],
+  $network_vlan_ranges       = ['physnet1:1000:2999'],
+  $tunnel_id_ranges          = ['20:100'],
+  $vxlan_group               = '224.0.0.1',
+  $vni_ranges                = ['10:100'],
+  $enable_security_group     = true,
+  $package_ensure            = 'present',
+  $supported_pci_vendor_devs = ['15b3:1004', '8086:10ca'],
+  $sriov_agent_required      = false,
+) {
+
+  include neutron::params
+
+  Neutron_plugin_ml2<||> ~> Service<| title == 'neutron-server' |>
+
+  validate_array($mechanism_drivers)
+  if ! $mechanism_drivers {
+    warning('Without networking mechanism driver, ml2 will not communicate with L2 agents')
+  }
+
+  if $::operatingsystem == 'Ubuntu' {
+    file_line { '/etc/default/neutron-server:NEUTRON_PLUGIN_CONFIG':
+      path    => '/etc/default/neutron-server',
+      match   => '^NEUTRON_PLUGIN_CONFIG=(.*)$',
+      line    => 'NEUTRON_PLUGIN_CONFIG=/etc/neutron/plugin.ini',
+      require => File['/etc/neutron/plugin.ini'],
+    }
+    Package<| title == 'neutron-server' |>
+    -> File_line['/etc/default/neutron-server:NEUTRON_PLUGIN_CONFIG']
+    ~> Service<| title == 'neutron-server' |>
+  }
+
+  # In RH, the link is used to start Neutron process but in Debian, it's used only
+  # to manage database synchronization.
+  file {'/etc/neutron/plugin.ini':
+    ensure  => link,
+    target  => '/etc/neutron/plugins/ml2/ml2_conf.ini'
+  }
+
+  # Some platforms do not have a dedicated ml2 plugin package
+  if $::neutron::params::ml2_server_package {
+    package { 'neutron-plugin-ml2':
+      ensure => $package_ensure,
+      name   => $::neutron::params::ml2_server_package,
+    }
+    Package['neutron-plugin-ml2'] -> Neutron_plugin_ml2<||>
+    Package['neutron-plugin-ml2'] -> File['/etc/neutron/plugin.ini']
+  } else {
+    Package <| title == 'neutron-server' |> -> Neutron_plugin_ml2<||>
+    Package['neutron'] -> File['/etc/neutron/plugin.ini']
+  }
+
+  neutron::plugins::ml2::type_driver { $type_drivers:
+    flat_networks       => $flat_networks,
+    tunnel_id_ranges    => $tunnel_id_ranges,
+    network_vlan_ranges => $network_vlan_ranges,
+    vni_ranges          => $vni_ranges,
+    vxlan_group         => $vxlan_group,
+  }
+
+  neutron::plugins::ml2::mech_driver { $mechanism_drivers:
+    supported_pci_vendor_devs => $supported_pci_vendor_devs,
+    sriov_agent_required      => $sriov_agent_required,
+  }
+
+  neutron_plugin_ml2 {
+    'ml2/type_drivers':                     value => join($type_drivers, ',');
+    'ml2/tenant_network_types':             value => join($tenant_network_types, ',');
+    'ml2/mechanism_drivers':                value => join($mechanism_drivers, ',');
+    'securitygroup/enable_security_group':  value => $enable_security_group;
+  }
+
+  Neutron_plugin_ml2<||> ~> Exec<| title == 'neutron-db-sync' |>
+
+}