Add support for bridge mappings
When OVN virtual networks wants to access the provider networks it does so with the help of a special port type 'localnet'. For the localnet ports to be present in the agent side, the agent has to carry some details in the vswitch DB as well a bridge has to be setup for the same. This patch help to setup up the bridge for provider network mapping and to add appropriate interfaces to the bridge Change-Id: Ia6d66fa954571328c0ac3542af17303def382c1a
This commit is contained in:
parent
4652a2554d
commit
c3e5717561
@ -6,7 +6,8 @@
|
|||||||
# === Parameters:
|
# === Parameters:
|
||||||
#
|
#
|
||||||
# [*ovn_remote*]
|
# [*ovn_remote*]
|
||||||
# (Required) URL of the remote ovsdb-server that manages ovn-nb and ovn-sb dbs
|
# (Required) URL of the remote ovn southbound db.
|
||||||
|
# Example: 'tcp:127.0.0.1:6642'
|
||||||
#
|
#
|
||||||
# [*ovn_encap_type*]
|
# [*ovn_encap_type*]
|
||||||
# (Optional) The encapsulation type to be used
|
# (Optional) The encapsulation type to be used
|
||||||
@ -16,50 +17,67 @@
|
|||||||
# (Required) IP address of the hypervisor(in which this module is installed) to which
|
# (Required) IP address of the hypervisor(in which this module is installed) to which
|
||||||
# the other controllers would use to create a tunnel to this controller
|
# the other controllers would use to create a tunnel to this controller
|
||||||
#
|
#
|
||||||
|
# [*ovn_bridge_mappings*]
|
||||||
|
# (optional) List of <ovn-network-name>:<bridge-name>
|
||||||
|
# Defaults to empty list
|
||||||
|
#
|
||||||
|
# [*bridge_interface_mappings*]
|
||||||
|
# (optional) List of <bridge-name>:<interface-name> when doing bridge mapping
|
||||||
|
# Defaults to empty list
|
||||||
|
#
|
||||||
class ovn::controller(
|
class ovn::controller(
|
||||||
$ovn_remote,
|
$ovn_remote,
|
||||||
$ovn_encap_ip,
|
$ovn_encap_ip,
|
||||||
$ovn_encap_type = 'geneve',
|
$ovn_encap_type = 'geneve',
|
||||||
|
$ovn_bridge_mappings = [],
|
||||||
|
$bridge_interface_mappings = []
|
||||||
) {
|
) {
|
||||||
include ::ovn::params
|
include ::ovn::params
|
||||||
include ::vswitch::ovs
|
include ::vswitch::ovs
|
||||||
include ::stdlib
|
include ::stdlib
|
||||||
|
|
||||||
validate_string($ovn_remote)
|
validate_string($ovn_remote)
|
||||||
validate_string($ovn_encap_ip)
|
validate_string($ovn_encap_ip)
|
||||||
|
|
||||||
service { 'controller':
|
service { 'controller':
|
||||||
ensure => true,
|
ensure => true,
|
||||||
name => $::ovn::params::ovn_controller_service_name,
|
name => $::ovn::params::ovn_controller_service_name,
|
||||||
hasstatus => $::ovn::params::ovn_controller_service_status,
|
hasstatus => $::ovn::params::ovn_controller_service_status,
|
||||||
pattern => $::ovn::params::ovn_controller_service_pattern,
|
pattern => $::ovn::params::ovn_controller_service_pattern,
|
||||||
enable => true,
|
enable => true,
|
||||||
require => [Vs_config['external_ids:ovn-remote'],
|
subscribe => Vs_config['external_ids:ovn-remote']
|
||||||
Vs_config['external_ids:ovn-encap-type'],
|
}
|
||||||
Vs_config['external_ids:ovn-encap-ip']]
|
|
||||||
|
package { $::ovn::params::ovn_controller_package_name:
|
||||||
|
ensure => present,
|
||||||
|
name => $::ovn::params::ovn_controller_package_name,
|
||||||
|
before => Service['controller']
|
||||||
|
}
|
||||||
|
|
||||||
|
$config_items = {
|
||||||
|
'external_ids:ovn-remote' => { 'value' => $ovn_remote },
|
||||||
|
'external_ids:ovn-encap-type' => { 'value' => $ovn_encap_type },
|
||||||
|
'external_ids:ovn-encap-ip' => { 'value' => $ovn_encap_ip },
|
||||||
|
'external_ids:hostname' => { 'value' => $::fqdn },
|
||||||
|
}
|
||||||
|
|
||||||
|
if !empty($ovn_bridge_mappings) {
|
||||||
|
$bridge_items = {
|
||||||
|
'external_ids:ovn-bridge-mappings' => { 'value' => join(any2array($ovn_bridge_mappings), ',') }
|
||||||
}
|
}
|
||||||
|
|
||||||
package { $::ovn::params::ovn_controller_package_name:
|
ovn::controller::bridge { $ovn_bridge_mappings:
|
||||||
ensure => present,
|
before => Service['controller'],
|
||||||
name => $::ovn::params::ovn_controller_package_name,
|
require => Service['openvswitch']
|
||||||
before => Service['controller']
|
|
||||||
}
|
}
|
||||||
|
ovn::controller::port { $bridge_interface_mappings:
|
||||||
|
before => Service['controller'],
|
||||||
|
require => Service['openvswitch']
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$bridge_items = {}
|
||||||
|
}
|
||||||
|
|
||||||
vs_config { 'external_ids:ovn-remote':
|
create_resources('vs_config', merge($config_items, $bridge_items))
|
||||||
ensure => present,
|
Service['openvswitch'] -> Vs_config<||> -> Service['controller']
|
||||||
value => $ovn_remote,
|
|
||||||
require => Service['openvswitch'],
|
|
||||||
}
|
|
||||||
|
|
||||||
vs_config { 'external_ids:ovn-encap-type':
|
|
||||||
ensure => present,
|
|
||||||
value => $ovn_encap_type,
|
|
||||||
require => Service['openvswitch'],
|
|
||||||
}
|
|
||||||
|
|
||||||
vs_config { 'external_ids:ovn-encap-ip':
|
|
||||||
ensure => present,
|
|
||||||
value => $ovn_encap_ip,
|
|
||||||
require => Service['openvswitch'],
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
14
manifests/controller/bridge.pp
Normal file
14
manifests/controller/bridge.pp
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
# ovn controller bridge settings
|
||||||
|
# == Define: ovn::controller::bridge
|
||||||
|
#
|
||||||
|
# Bridge settings for ovn controller bridge mappings
|
||||||
|
# $name is OVN bridge mapping in the format network-name:bridge-name
|
||||||
|
#
|
||||||
|
define ovn::controller::bridge {
|
||||||
|
$map_split = split($name, ':')
|
||||||
|
$bridge = $map_split[1]
|
||||||
|
vs_bridge { $bridge:
|
||||||
|
ensure => present,
|
||||||
|
external_ids => "bridge-id=${bridge}"
|
||||||
|
}
|
||||||
|
}
|
15
manifests/controller/port.pp
Normal file
15
manifests/controller/port.pp
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
# ovn controller bridge-port settings
|
||||||
|
# == Define: ovn::controller::port
|
||||||
|
#
|
||||||
|
# Bridge-interface setting for ovn bridge mapping
|
||||||
|
# $name should be the mapping in the format <bridge-name>:<interface-name>
|
||||||
|
#
|
||||||
|
define ovn::controller::port {
|
||||||
|
$map_split = split($name, ':')
|
||||||
|
$bridge = $map_split[0]
|
||||||
|
$iface = $map_split[1]
|
||||||
|
vs_port { $iface:
|
||||||
|
ensure => present,
|
||||||
|
bridge => $bridge
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
features:
|
||||||
|
- Setup up the bridge for provider network mapping and to add appropriate interfaces to the bridge.
|
||||||
|
issues:
|
||||||
|
- Documentation for ovn_remote has been update to reflect what values are expected to be passed into it.
|
@ -3,9 +3,11 @@ require 'spec_helper'
|
|||||||
describe 'ovn::controller' do
|
describe 'ovn::controller' do
|
||||||
|
|
||||||
let :params do
|
let :params do
|
||||||
{ :ovn_remote => 'tcp:x.x.x.x:5000',
|
{ :ovn_remote => 'tcp:x.x.x.x:5000',
|
||||||
:ovn_encap_type => 'geneve',
|
:ovn_encap_type => 'geneve',
|
||||||
:ovn_encap_ip => '1.2.3.4'
|
:ovn_encap_ip => '1.2.3.4',
|
||||||
|
:ovn_bridge_mappings => ['physnet-1:br-1'],
|
||||||
|
:bridge_interface_mappings => ['br-1:eth1']
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -38,20 +40,34 @@ describe 'ovn::controller' do
|
|||||||
|
|
||||||
it 'configures ovsdb' do
|
it 'configures ovsdb' do
|
||||||
is_expected.to contain_vs_config('external_ids:ovn-remote').with(
|
is_expected.to contain_vs_config('external_ids:ovn-remote').with(
|
||||||
:ensure => 'present',
|
|
||||||
:value => params[:ovn_remote],
|
:value => params[:ovn_remote],
|
||||||
:require => 'Service[openvswitch]'
|
|
||||||
)
|
)
|
||||||
|
|
||||||
is_expected.to contain_vs_config('external_ids:ovn-encap-type').with(
|
is_expected.to contain_vs_config('external_ids:ovn-encap-type').with(
|
||||||
:ensure => 'present',
|
|
||||||
:value => params[:ovn_encap_type],
|
:value => params[:ovn_encap_type],
|
||||||
:require => 'Service[openvswitch]'
|
|
||||||
)
|
)
|
||||||
|
|
||||||
is_expected.to contain_vs_config('external_ids:ovn-encap-ip').with(
|
is_expected.to contain_vs_config('external_ids:ovn-encap-ip').with(
|
||||||
:ensure => 'present',
|
|
||||||
:value => params[:ovn_encap_ip],
|
:value => params[:ovn_encap_ip],
|
||||||
|
)
|
||||||
|
|
||||||
|
is_expected.to contain_vs_config('external_ids:hostname').with(
|
||||||
|
:value => 'foo.example.com',
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'configures bridge mappings' do
|
||||||
|
is_expected.to contain_vs_config('external_ids:ovn-bridge-mappings').with(
|
||||||
|
:value => 'physnet-1:br-1',
|
||||||
|
)
|
||||||
|
|
||||||
|
is_expected.to contain_ovn__controller__bridge(params[:ovn_bridge_mappings].join(',')).with(
|
||||||
|
:before => 'Service[controller]',
|
||||||
|
:require => 'Service[openvswitch]'
|
||||||
|
)
|
||||||
|
|
||||||
|
is_expected.to contain_ovn__controller__port(params[:bridge_interface_mappings].join(',')).with(
|
||||||
|
:before => 'Service[controller]',
|
||||||
:require => 'Service[openvswitch]'
|
:require => 'Service[openvswitch]'
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user