--- /dev/null
+#
+# Copyright (C) 2014 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.
+#
+# == Class: neutron::agents::ml2::sriov
+#
+# Setups SR-IOV neutron agent when using ML2 plugin
+#
+# === Parameters
+#
+# [*package_ensure*]
+# (optional) The state of the package
+# Defaults to 'present'
+#
+# [*enabled*]
+# (required) Whether or not to enable the OVS Agent
+# Defaults to true
+#
+# [*physical_device_mappings*]
+# (optional) List of <physical_network>:<physical device>
+# All physical networks listed in network_vlan_ranges
+# on the server should have mappings to appropriate
+# interfaces on each agent.
+# Defaults to empty list
+#
+# [*polling_interval*]
+# (optional) The number of seconds the agent will wait between
+# polling for local device changes.
+# Defaults to '2"
+#
+# [*exclude_devices*]
+# (optional) List of <network_device>:<excluded_devices> mapping
+# network_device to the agent's node-specific list of virtual functions
+# that should not be used for virtual networking. excluded_devices is a
+# semicolon separated list of virtual functions to exclude from network_device.
+# The network_device in the mapping should appear in the physical_device_mappings list.
+class neutron::agents::ml2::sriov (
+ $package_ensure = 'present',
+ $enabled = true,
+ $physical_device_mappings = [],
+ $polling_interval = 2,
+ $exclude_devices = [],
+) {
+
+ include neutron::params
+
+ Neutron_plugin_ml2<||> ~> Service['neutron-sriov-nic-agent-service']
+
+ neutron_plugin_ml2 {
+ 'sriov_nic/polling_interval': value => $polling_interval;
+ 'sriov_nic/exclude_devices': value => join($exclude_devices, ',');
+ 'sriov_nic/physical_device_mappings': value => join($physical_device_mappings, ',');
+ }
+
+
+ Package['neutron-sriov-nic-agent'] -> Neutron_plugin_ml2<||>
+ package { 'neutron-sriov-nic-agent':
+ ensure => $package_ensure,
+ name => $::neutron::params::sriov_nic_agent_package,
+ }
+
+ if $enabled {
+ $service_ensure = 'running'
+ } else {
+ $service_ensure = 'stopped'
+ }
+
+ service { 'neutron-sriov-nic-agent-service':
+ ensure => $service_ensure,
+ name => $::neutron::params::sriov_nic_agent_service,
+ enable => $enabled,
+ require => Class['neutron'],
+ }
+
+}