Adds support for host config and cleanup
Changes Include: - Adds host config necessary per OVS to allow ODL to work with pseudo agent binding controller (for port binding) - Cleans up some execs and uses the real vswitch provider - Fixes parameter spacing Closes-Bug: 1704206 Change-Id: Icc41c9936cae773f23281d6852a3a5e9cf4b9f89 Signed-off-by: Tim Rozet <trozet@redhat.com>
This commit is contained in:
parent
48f230ef9a
commit
63a0004592
16
lib/puppet/parser/functions/convert_to_json_string.rb
Normal file
16
lib/puppet/parser/functions/convert_to_json_string.rb
Normal file
@ -0,0 +1,16 @@
|
||||
module Puppet::Parser::Functions
|
||||
newfunction(:convert_to_json_string, :type => :rvalue) do |args|
|
||||
require 'json'
|
||||
value = args[0]
|
||||
if (value.kind_of? Array) && value.all? {|x| x.include? ":"}
|
||||
h = {}
|
||||
value.each do |s|
|
||||
k,v = s.split(/:/)
|
||||
h[k] = v
|
||||
end
|
||||
return h.to_json
|
||||
else
|
||||
return value.to_json
|
||||
end
|
||||
end
|
||||
end
|
@ -4,8 +4,7 @@
|
||||
# === Parameters
|
||||
#
|
||||
# [*tunnel_ip*]
|
||||
# (required) The IP of the host to use for tunneling
|
||||
# tenant VXLAN/GRE over
|
||||
# (required) The IP of the host to use for tunneling tenant VXLAN/GRE over
|
||||
#
|
||||
# [*odl_username*]
|
||||
# (optional) The opendaylight controller username
|
||||
@ -39,6 +38,33 @@
|
||||
# (optional) The number of ODL availability checks to run before failing
|
||||
# Defaults to 20
|
||||
#
|
||||
# [*host_id*]
|
||||
# (optional) The desired hostname for this node
|
||||
# Defaults to FQDN hostname of the server
|
||||
#
|
||||
# [*allowed_network_types*]
|
||||
# (optional) 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, vlan, gre, vxlan
|
||||
# Defaults to ['local', 'vlan', 'gre', 'vxlan']
|
||||
#
|
||||
# [*enable_dpdk*]
|
||||
# (optional) Enables vhostuser VIF host configuration for OVS DPDK.
|
||||
# Defaults to false.
|
||||
#
|
||||
# [*vhostuser_socket_dir*]
|
||||
# (optional) Specify the directory to use for vhostuser sockets.
|
||||
# Defaults to "/var/run/openvswitch"
|
||||
#
|
||||
# [*vhostuser_mode*]
|
||||
# (optional) Specify the mode for OVS when creating vhostuser ports.
|
||||
# Valid values are 'client' or 'server'. In client mode, the hypervisor
|
||||
# will be responsible for creating the vhostuser socket. In server mode,
|
||||
# OVS will create the vhostuser socket.
|
||||
# Defaults to "client"
|
||||
#
|
||||
class neutron::plugins::ovs::opendaylight (
|
||||
$tunnel_ip,
|
||||
$odl_username,
|
||||
@ -49,6 +75,11 @@ class neutron::plugins::ovs::opendaylight (
|
||||
$provider_mappings = [],
|
||||
$retry_interval = 60,
|
||||
$retry_count = 20,
|
||||
$host_id = $fqdn,
|
||||
$allowed_network_types = ['local', 'vlan', 'vxlan', 'gre'],
|
||||
$enable_dpdk = false,
|
||||
$vhostuser_socket_dir = '/var/run/openvswitch',
|
||||
$vhostuser_mode = 'client'
|
||||
) {
|
||||
|
||||
include ::neutron::deps
|
||||
@ -68,20 +99,63 @@ class neutron::plugins::ovs::opendaylight (
|
||||
unless => "ovs-vsctl show | grep 'Manager \"${ovsdb_server_iface} ${odl_ovsdb_iface}\"'",
|
||||
path => '/usr/sbin:/usr/bin:/sbin:/bin',
|
||||
}
|
||||
|
||||
# local ip
|
||||
-> exec { 'Set local_ip Other Option':
|
||||
command => "ovs-vsctl set Open_vSwitch $(ovs-vsctl get Open_vSwitch . _uuid) other_config:local_ip=${tunnel_ip}",
|
||||
unless => "ovs-vsctl list Open_vSwitch | grep 'local_ip=\"${tunnel_ip}\"'",
|
||||
path => '/usr/sbin:/usr/bin:/sbin:/bin',
|
||||
vs_config {'other_config:local_ip':
|
||||
value => $tunnel_ip,
|
||||
}
|
||||
|
||||
# set mappings for VLAN or Flat provider networks
|
||||
if $provider_mappings and ! empty($provider_mappings) {
|
||||
$pr_map_str = join(any2array($provider_mappings), ',')
|
||||
exec { 'Set provider_mappings Other Option':
|
||||
command => "ovs-vsctl set Open_vSwitch $(ovs-vsctl get Open_vSwitch . _uuid) other_config:provider_mappings=${pr_map_str}",
|
||||
unless => "ovs-vsctl list Open_vSwitch | grep 'provider_mappings' | grep ${pr_map_str}",
|
||||
path => '/usr/sbin:/usr/bin:/sbin:/bin',
|
||||
vs_config {'other_config:provider_mappings':
|
||||
value => $pr_map_str
|
||||
}
|
||||
}
|
||||
|
||||
# host config for pseudo agent binding type
|
||||
vs_config {'external_ids:odl_os_hostconfig_hostid':
|
||||
value => $host_id,
|
||||
}
|
||||
|
||||
$json_network_types = convert_to_json_string($allowed_network_types)
|
||||
$json_bridge_mappings = convert_to_json_string($provider_mappings)
|
||||
|
||||
if $enable_dpdk {
|
||||
$host_config = @("END":json/$L)
|
||||
{\
|
||||
"supported_vnic_types": [{\
|
||||
"vnic_type": "normal",\
|
||||
"vif_type": "vhostuser",\
|
||||
"vif_details": {\
|
||||
"uuid": "${::ovs_uuid}",\
|
||||
"has_datapath_type_netdev": true,\
|
||||
"port_prefix": "vhu_",\
|
||||
"vhostuser_socket_dir": "${vhostuser_socket_dir}",\
|
||||
"vhostuser_ovs_plug": true,\
|
||||
"vhostuser_mode": "${vhostuser_mode}",\
|
||||
"vhostuser_socket": "${vhostuser_socket_dir}/vhu_\$PORT_ID"\
|
||||
}\
|
||||
}],\
|
||||
"allowed_network_types": ${json_network_types},\
|
||||
"bridge_mappings": ${json_bridge_mappings}\
|
||||
}
|
||||
|-END
|
||||
} else {
|
||||
$host_config = @("END":json/L)
|
||||
{\
|
||||
"supported_vnic_types": [{\
|
||||
"vnic_type": "normal",\
|
||||
"vif_type": "ovs",\
|
||||
"vif_details": {}\
|
||||
}],\
|
||||
"allowed_network_types": ${json_network_types},\
|
||||
"bridge_mappings": ${json_bridge_mappings}\
|
||||
}
|
||||
|-END
|
||||
}
|
||||
|
||||
vs_config {'external_ids:odl_os_hostconfig_config_odl_l2':
|
||||
value => $host_config
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,4 @@
|
||||
---
|
||||
features:
|
||||
- Adds support for host config for OVS when used with
|
||||
OpenDaylight pseudo-agent port binding.
|
@ -20,6 +20,11 @@ describe 'neutron::plugins::ovs::opendaylight' do
|
||||
:provider_mappings => [],
|
||||
:retry_interval => 60,
|
||||
:retry_count => 20,
|
||||
:host_id => "dummy_host",
|
||||
:allowed_network_types => ['local', 'vlan', 'vxlan', 'gre'],
|
||||
:enable_dpdk => false,
|
||||
:vhostuser_socket_dir => '/var/run/openvswitch',
|
||||
:vhostuser_mode => 'client'
|
||||
}
|
||||
end
|
||||
|
||||
@ -50,6 +55,13 @@ describe 'neutron::plugins::ovs::opendaylight' do
|
||||
end
|
||||
it_configures 'with provider mappings'
|
||||
end
|
||||
|
||||
context 'with DPDK enabled' do
|
||||
before do
|
||||
params.merge!({ :enable_dpdk => true })
|
||||
end
|
||||
it_configures 'with DPDK enabled'
|
||||
end
|
||||
it_configures 'with default parameters'
|
||||
end
|
||||
|
||||
@ -57,8 +69,10 @@ describe 'neutron::plugins::ovs::opendaylight' do
|
||||
it 'configures OVS for ODL' do
|
||||
is_expected.to contain_exec('Wait for NetVirt OVSDB to come up')
|
||||
is_expected.to contain_exec('Set OVS Manager to OpenDaylight')
|
||||
is_expected.to contain_exec('Set local_ip Other Option')
|
||||
is_expected.not_to contain_exec('Set provider_mappings Other Option')
|
||||
is_expected.to contain_vs_config('other_config:local_ip')
|
||||
is_expected.not_to contain_vs_config('other_config:provider_mappings')
|
||||
is_expected.to contain_vs_config('external_ids:odl_os_hostconfig_hostid')
|
||||
is_expected.to contain_vs_config('external_ids:odl_os_hostconfig_config_odl_l2')
|
||||
end
|
||||
end
|
||||
|
||||
@ -66,8 +80,25 @@ describe 'neutron::plugins::ovs::opendaylight' do
|
||||
it 'configures OVS for ODL' do
|
||||
is_expected.to contain_exec('Wait for NetVirt OVSDB to come up')
|
||||
is_expected.to contain_exec('Set OVS Manager to OpenDaylight')
|
||||
is_expected.to contain_exec('Set local_ip Other Option')
|
||||
is_expected.to contain_exec('Set provider_mappings Other Option')
|
||||
is_expected.to contain_vs_config('other_config:local_ip')
|
||||
is_expected.to contain_vs_config('other_config:provider_mappings')
|
||||
is_expected.to contain_vs_config('external_ids:odl_os_hostconfig_hostid')
|
||||
is_expected.to contain_vs_config('external_ids:odl_os_hostconfig_config_odl_l2').with(
|
||||
:value => /bridge_mappings\": {\"default\":\"br-ex\"}/
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
shared_examples_for 'with DPDK enabled' do
|
||||
it 'configures OVS for ODL' do
|
||||
is_expected.to contain_exec('Wait for NetVirt OVSDB to come up')
|
||||
is_expected.to contain_exec('Set OVS Manager to OpenDaylight')
|
||||
is_expected.to contain_vs_config('other_config:local_ip')
|
||||
is_expected.not_to contain_vs_config('other_config:provider_mappings')
|
||||
is_expected.to contain_vs_config('external_ids:odl_os_hostconfig_hostid')
|
||||
is_expected.to contain_vs_config('external_ids:odl_os_hostconfig_config_odl_l2').with(
|
||||
:value => /vhostuser/,
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user