+++ /dev/null
-#
-# 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' |>
-
-}