1 From 72afc22fbba73fdb474bd6e5c1c47ab31219a9b9 Mon Sep 17 00:00:00 2001
2 From: Feng Pan <fpan@redhat.com>
3 Date: Tue, 28 Feb 2017 18:07:53 -0500
4 Subject: [PATCH] Add support for networking-vpp ML2 driver
6 Change-Id: Ib45681b1e414001c42070a32e8f81778b4e9f15f
8 .../provider/neutron_agent_vpp/ini_settings.rb | 15 ++++
9 lib/puppet/type/neutron_agent_vpp.rb | 28 +++++++
10 manifests/agents/ml2/vpp.pp | 91 ++++++++++++++++++++++
11 manifests/deps.pp | 1 +
12 manifests/params.pp | 3 +
13 manifests/plugins/ml2/vpp.pp | 38 +++++++++
14 6 files changed, 176 insertions(+)
15 create mode 100644 lib/puppet/provider/neutron_agent_vpp/ini_settings.rb
16 create mode 100644 lib/puppet/type/neutron_agent_vpp.rb
17 create mode 100644 manifests/agents/ml2/vpp.pp
18 create mode 100644 manifests/plugins/ml2/vpp.pp
20 diff --git a/lib/puppet/provider/neutron_agent_vpp/ini_settings.rb b/lib/puppet/provider/neutron_agent_vpp/ini_settings.rb
22 index 0000000..d8da7ab
24 +++ b/lib/puppet/provider/neutron_agent_vpp/ini_settings.rb
26 +Puppet::Type.type(:neutron_agent_vpp).provide(
28 + :parent => Puppet::Type.type(:openstack_config).provider(:ini_setting)
32 + '/etc/neutron/plugins/ml2/vpp_agent.ini'
35 + # added for backwards compatibility with older versions of inifile
37 + self.class.file_path
41 diff --git a/lib/puppet/type/neutron_agent_vpp.rb b/lib/puppet/type/neutron_agent_vpp.rb
43 index 0000000..0718db8
45 +++ b/lib/puppet/type/neutron_agent_vpp.rb
47 +Puppet::Type.newtype(:neutron_agent_vpp) do
51 + newparam(:name, :namevar => true) do
52 + desc 'Section/setting name to manage from vpp agent config.'
53 + newvalues(/\S+\/\S+/)
56 + newproperty(:value) do
57 + desc 'The value of the setting to be defined.'
59 + value = value.to_s.strip
60 + value.capitalize! if value =~ /^(true|false)$/i
65 + newparam(:ensure_absent_val) do
66 + desc 'A value that is specified as the value property will behave as if ensure => absent was specified'
67 + defaultto('<SERVICE DEFAULT>')
70 + autorequire(:package) do
75 diff --git a/manifests/agents/ml2/vpp.pp b/manifests/agents/ml2/vpp.pp
77 index 0000000..faae279
79 +++ b/manifests/agents/ml2/vpp.pp
81 +# == Class: neutron::agents::ml2::vpp
83 +# Configure networking-vpp Neutron agent for ML2 plugin.
88 +# (optional) Package ensure state.
89 +# Defaults to 'present'.
92 +# (required) Whether or not to enable the agent.
96 +# (optional) Whether to start/stop the service
100 +# (optional) Comma-separated list of <physical_network>:<physical_interface>
101 +# tuples mapping physical network names to agent's node-specific physical
102 +# network interfaces. Defaults to $::os_service_default.
105 +# (optional) etcd server host name/ip
106 +# Defaults to $::os_service_default.
109 +# (optional) etcd server listening port.
110 +# Defaults to $::os_service_default.
113 +# (optional) User name for etcd authentication
114 +# Defaults to $::os_service_default.
117 +# (optional) Password for etcd authentication
118 +# Defaults to $::os_service_default.
121 +# (optional) Whether to set only the specified config options
122 +# in the vpp config.
123 +# Defaults to false.
125 +class neutron::agents::ml2::vpp (
126 + $package_ensure = 'present',
128 + $manage_service = true,
129 + $physnets = $::os_service_default,
130 + $etcd_host = $::os_service_default,
131 + $etcd_port = $::os_service_default,
132 + $etcd_user = $::os_service_default,
133 + $etcd_pass = $::os_service_default,
134 + $purge_config = false,
136 + include ::neutron::deps
137 + include ::neutron::params
139 + resources { 'neutron_agent_vpp':
140 + purge => $purge_config,
143 + neutron_agent_vpp {
144 + 'ml2_vpp/physnets': value => $physnets;
145 + 'ml2_vpp/etcd_host': value => $etcd_host;
146 + 'ml2_vpp/etcd_port': value => $etcd_port;
147 + 'ml2_vpp/etcd_user': value => $etcd_user;
148 + 'ml2_vpp/etcd_pass': value => $etcd_pass;
151 + package { 'neutron-vpp-agent':
152 + ensure => $package_ensure,
153 + name => $::neutron::params::vpp_plugin_package,
154 + tag => ['openstack', 'neutron-package'],
157 + if $manage_service {
159 + $service_ensure = 'running'
161 + $service_ensure = 'stopped'
165 + service { 'neutron-vpp-agent-service':
166 + ensure => $service_ensure,
167 + name => $::neutron::params::vpp_agent_service,
168 + enable => $enabled,
169 + tag => ['neutron-service'],
172 diff --git a/manifests/deps.pp b/manifests/deps.pp
173 index 94b6f78..835e906 100644
174 --- a/manifests/deps.pp
175 +++ b/manifests/deps.pp
176 @@ -35,6 +35,7 @@ class neutron::deps {
177 # All other inifile providers need to be processed in the config block
178 Anchor['neutron::config::begin'] -> Neutron_agent_linuxbridge<||> ~> Anchor['neutron::config::end']
179 Anchor['neutron::config::begin'] -> Neutron_agent_ovs<||> ~> Anchor['neutron::config::end']
180 + Anchor['neutron::config::begin'] -> Neutron_agent_vpp<||> ~> Anchor['neutron::config::end']
181 Anchor['neutron::config::begin'] -> Neutron_api_config<||> ~> Anchor['neutron::config::end']
182 Anchor['neutron::config::begin'] -> Neutron_api_paste_ini<||> ~> Anchor['neutron::config::end']
183 Anchor['neutron::config::begin'] -> Neutron_config<||> ~> Anchor['neutron::config::end']
184 diff --git a/manifests/params.pp b/manifests/params.pp
185 index 05ef627..02b9be1 100644
186 --- a/manifests/params.pp
187 +++ b/manifests/params.pp
188 @@ -86,6 +86,9 @@ class neutron::params {
190 $kernel_headers = "linux-headers-${::kernelrelease}"
192 + $vpp_plugin_package = 'python-networking-vpp'
193 + $vpp_agent_service = 'neutron-vpp-agent'
195 } elsif($::osfamily == 'Debian') {
197 $nobody_user_group = 'nogroup'
198 diff --git a/manifests/plugins/ml2/vpp.pp b/manifests/plugins/ml2/vpp.pp
200 index 0000000..837a614
202 +++ b/manifests/plugins/ml2/vpp.pp
205 +# Install the networking-vpp ML2 mechanism driver and generate config file
206 +# from parameters in the other classes.
211 +# (optional) etcd server host name or IP.
212 +# Defaults to $::os_service_default
215 +# (optional) etcd server listening port.
216 +# Defaults to $::os_service_default.
219 +# (optional) User name for etcd authentication
220 +# Defaults to $::os_service_default.
223 +# (optional) Password for etcd authentication
224 +# Defaults to $::os_service_default.
226 +class neutron::plugins::ml2::vpp (
227 + $etcd_host = $::os_service_default,
228 + $etcd_port = $::os_service_default,
229 + $etcd_user = $::os_service_default,
230 + $etcd_pass = $::os_service_default,
232 + include ::neutron::deps
233 + require ::neutron::plugins::ml2
235 + neutron_plugin_ml2 {
236 + 'ml2_vpp/etcd_host': value => $etcd_host;
237 + 'ml2_vpp/etcd_port': value => $etcd_port;
238 + 'ml2_vpp/etcd_user': value => $etcd_user;
239 + 'ml2_vpp/etcd_pass': value => $etcd_pass;