Support MOS 8.0.

- Support MOS 8.0.
 - Move ODL installation and configuration
   to main phase of deployment.
 - L3 traffic managed by ODL possible when vxlan
   tunneling is used.
 - Include snapshot of OpenDaylight Beryllium,
   stable version not available at this moment.
 - Get rid of hardcoded configuration related to specific ODL version.
   Now plugin is more elastic and should support a broader
   number of ODL versions.
 - odl_network_scheme function overrided standard network scheme
   so custom network templates are not required.
 - ODL is no longer patched to use br-floating bridge

Change-Id: I8d1391817ff3a012697aac487ce9eaea489d8df6
This commit is contained in:
Michal Skalski 2016-01-13 15:10:34 +01:00
parent 9e1e823d2e
commit 5d11066250
40 changed files with 911 additions and 824 deletions

3
.gitignore vendored Normal file
View File

@ -0,0 +1,3 @@
*.rpm
*.deb
.build/

View File

@ -1,3 +1,20 @@
## 0.8.0
- Support MOS 8.0.
- Move ODL installation and configuration
to main phase of deployment.
- L3 traffic managed by ODL possible when vxlan
tunneling is used.
- Include snapshot of OpenDaylight Beryllium,
stable version not available at this moment.
- Get rid of hardcoded configurations related to specific ODL versions.
Now plugin is more elastic and should support a broader
number of ODL versions.
- odl_network_scheme function overrided standard network scheme
so custom network templates are not required.
- ODL is no longer patched to use br-floating bridge.
## 0.7.0
- Support for MOS 7.0

26
LICENSE
View File

@ -174,29 +174,3 @@ Apache License
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "{}"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright {yyyy} {name of copyright owner}
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.

View File

@ -17,19 +17,12 @@ Requirements
| Requirement | Version/Comment |
|----------------------------------|-----------------|
| Mirantis OpenStack compatibility | 7.0 |
Recommendations
---------------
None.
| Mirantis OpenStack compatibility | 8.0 |
Limitations
-----------
* Supports only environments with Neutron.
* HA for ovsdb feature is not implemented yet.
* L3 traffic managed by neutron agent.
* HA for ODL controller is not implemented yet.
Installation Guide
==================
@ -82,7 +75,7 @@ OpenDaylight plugin configuration
1. Create a new environment with the Fuel UI wizard.
2. Click on the Settings tab of the Fuel web UI.
3. Select "OpenDaylight Lithium plugin" section.
3. Select "OpenDaylight plugin" section.
4. Tick the checkbox and click "Save Settings" button.
5. Assign role OPENDAYLIGHT to one of the node.
@ -92,29 +85,16 @@ Build options
It is possible to modify process of building plugin by setting environment variables. Look into [pre_build_hook file](pre_build_hook) for more details.
Dependencies
------------
OpenDaylight controller require Java Runtime Environment.
If you plan to use plugin in environment without internet access or/and CentOS environment modify build command:
INCLUDE_DEPENDENCIES=true fpb --build fuel-plugin-opendaylight/
Pre build script will try download required dependencies so it become part of the compiled plugin.
Note: List of packages for [ubuntu](odl_package/ubuntu/dependencies.txt) and [centos](odl_package/centos/dependencies.txt) may need to be modified if packages in centos or ubuntu repositories will change.
Testing
-------
Use the same IP address as for OpenStack Horizon panel and port 8181 to reach dlux web ui and apidoc explorer:
* DLUX: http://horizon_ip:8181/index.html
* APIDOC: http://horizon_ip:8181/apidoc/explorer/index.html
OpenDaylight files are stored on primary controller inside */opt/opendaylight* directory.
OpenDaylight files are stored on node with 'OpenDaylight' role assigned inside */opt/opendaylight* directory.
To log in to OpenDayligt shell run */opt/opendaylight/bin/client*
To log in to OpenDayligt shell run */opt/opendaylight/bin/client -u karaf*
Known issues
------------

View File

@ -1,11 +0,0 @@
#!/bin/bash
source /root/openrc
router_id=`neutron router-list | grep "network_id" | awk '{print $2}'`
neutron router-gateway-clear $router_id
subnet_id=`neutron router-port-list $router_id | grep "subnet_id" | awk '{print $8}' | awk -F '\"' '{print $2}'`
neutron router-interface-delete $router_id $subnet_id
neutron router-delete $router_id
neutron subnet-delete $subnet_id
neutron net-delete net04
neutron net-delete net04_ext

View File

@ -1,14 +0,0 @@
$java_package = $operatingsystem ? {
'CentOS' => 'java-1.7.0-openjdk',
'Ubuntu' => 'openjdk-7-jre-headless',
}
package { 'java-jre':
ensure => installed,
name => $java_package,
}
package { 'opendaylight':
ensure => installed,
require => Package['java-jre'],
}

View File

@ -1,26 +0,0 @@
$nodes_hash = hiera('nodes', {})
$roles = node_roles($nodes_hash, hiera('uid'))
$odl = hiera('opendaylight')
$ovs_agent_name = $operatingsystem ? {
'CentOS' => 'neutron-openvswitch-agent',
'Ubuntu' => 'neutron-plugin-openvswitch-agent',
}
if member($roles, 'primary-controller') {
cs_resource { "p_${ovs_agent_name}":
ensure => absent,
}
if $odl['enable_l3_odl'] {
cs_resource { 'p_neutron-l3-agent':
ensure => absent,
}
}
} else {
service {$ovs_agent_name:
ensure => stopped,
enable => false,
}
}

View File

@ -0,0 +1,2 @@
include opendaylight
class { '::opendaylight::hiera_override': }

View File

@ -1,10 +0,0 @@
include opendaylight
$address = hiera('management_vip')
$port = $opendaylight::rest_api_port
neutron_plugin_ml2 {
'ml2/mechanism_drivers': value => 'opendaylight';
'ml2_odl/password': value => 'admin';
'ml2_odl/username': value => 'admin';
'ml2_odl/url': value => "http://${address}:${port}/controller/nb/v2/neutron";
}

View File

@ -0,0 +1,188 @@
notice('MODULAR: neutron-configuration.pp')
include opendaylight
$use_neutron = hiera('use_neutron', false)
$address = hiera('management_vip')
$port = $opendaylight::rest_api_port
$odl = hiera('opendaylight')
$nodes_hash = hiera('nodes', {})
$roles = node_roles($nodes_hash, hiera('uid'))
if $use_neutron {
package {'python-networking-odl':
ensure => installed,
}
neutron_plugin_ml2 {
'ml2/mechanism_drivers': value => 'opendaylight';
'ml2_odl/password': value => 'admin';
'ml2_odl/username': value => 'admin';
'ml2_odl/url': value => "http://${address}:${port}/controller/nb/v2/neutron";
}
exec { 'ovs-set-manager':
command => "ovs-vsctl set-manager tcp:${opendaylight::manager_ip_address}:6640",
path => '/usr/bin'
}
if $odl['enable_l3_odl'] or member($roles, 'primary-controller') or member($roles, 'controller') {
$patch_jacks_names = get_pair_of_jack_names(['br-ex', 'br-ex-lnx'])
$ext_interface = $patch_jacks_names[0]
}
$openstack_network_hash = hiera_hash('openstack_network', { })
$neutron_config = hiera_hash('neutron_config')
$core_plugin = 'neutron.plugins.ml2.plugin.Ml2Plugin'
if $odl['enable_l3_odl'] {
$service_plugins = [
'networking_odl.l3.l3_odl.OpenDaylightL3RouterPlugin',
'neutron.services.metering.metering_plugin.MeteringPlugin',
]
} else {
$service_plugins = [
'neutron.services.l3_router.l3_router_plugin.L3RouterPlugin',
'neutron.services.metering.metering_plugin.MeteringPlugin',
]
}
$rabbit_hash = hiera_hash('rabbit_hash', { })
$ceilometer_hash = hiera_hash('ceilometer', { })
$network_scheme = hiera('network_scheme')
$verbose = pick($openstack_network_hash['verbose'], hiera('verbose', true))
$debug = pick($openstack_network_hash['debug'], hiera('debug', true))
$use_syslog = hiera('use_syslog', true)
$use_stderr = hiera('use_stderr', false)
$log_facility = hiera('syslog_log_facility_neutron', 'LOG_LOCAL4')
prepare_network_config($network_scheme)
$bind_host = get_network_role_property('neutron/api', 'ipaddr')
$base_mac = $neutron_config['L2']['base_mac']
$use_ceilometer = $ceilometer_hash['enabled']
$amqp_hosts = split(hiera('amqp_hosts', ''), ',')
$amqp_user = $rabbit_hash['user']
$amqp_password = $rabbit_hash['password']
$segmentation_type = try_get_value($neutron_config, 'L2/segmentation_type')
$nets = $neutron_config['predefined_networks']
if $segmentation_type == 'vlan' {
$net_role_property = 'neutron/private'
$iface = get_network_role_property($net_role_property, 'phys_dev')
$mtu_for_virt_network = pick(get_transformation_property('mtu', $iface[0]), '1500')
$overlay_net_mtu = $mtu_for_virt_network
if $ext_interface {
exec { 'ovs-set-provider-mapping':
command => "ovs-vsctl set Open_vSwitch $(ovs-vsctl show | head -n 1) other_config:provider_mappings=br-ex:${ext_interface},physnet2:br-aux",
path => '/usr/bin',
require => Exec['ovs-set-manager'],
}
} else {
exec { 'ovs-set-provider-mapping':
command => "ovs-vsctl set Open_vSwitch $(ovs-vsctl show | head -n 1) other_config:provider_mappings=physnet2:br-aux",
path => '/usr/bin',
require => Exec['ovs-set-manager'],
}
}
} else {
$net_role_property = 'neutron/mesh'
$iface = get_network_role_property($net_role_property, 'phys_dev')
$tunneling_ip = get_network_role_property($net_role_property, 'ipaddr')
if $ext_interface {
exec { 'ovs-set-provider-mapping':
command => "ovs-vsctl set Open_vSwitch $(ovs-vsctl show | head -n 1) other_config:provider_mappings=br-ex:${ext_interface}",
path => '/usr/bin',
require => Exec['ovs-set-manager'],
}
}
exec { 'ovs-set-tunnel-endpoint':
command => "ovs-vsctl set Open_vSwitch $(ovs-vsctl show | head -n 1) other_config:local_ip=${tunneling_ip}",
path => '/usr/bin',
require => Exec['ovs-set-manager'],
}
$physical_net_mtu = pick(get_transformation_property('mtu', $iface[0]), '1500')
if $segmentation_type == 'gre' {
$mtu_offset = '42'
} else {
# vxlan is the default segmentation type for non-vlan cases
$mtu_offset = '50'
}
if $physical_net_mtu {
$overlay_net_mtu = $physical_net_mtu - $mtu_offset
} else {
$overlay_net_mtu = '1500' - $mtu_offset
}
}
$default_log_levels = hiera_hash('default_log_levels')
class { 'neutron' :
verbose => $verbose,
debug => $debug,
use_syslog => $use_syslog,
use_stderr => $use_stderr,
log_facility => $log_facility,
bind_host => $bind_host,
base_mac => $base_mac,
core_plugin => $core_plugin,
service_plugins => $service_plugins,
allow_overlapping_ips => true,
mac_generation_retries => '32',
dhcp_lease_duration => '600',
dhcp_agents_per_network => '2',
report_interval => '10',
rabbit_user => $amqp_user,
rabbit_hosts => $amqp_hosts,
rabbit_password => $amqp_password,
kombu_reconnect_delay => '5.0',
network_device_mtu => $overlay_net_mtu,
advertise_mtu => true,
}
if $default_log_levels {
neutron_config {
'DEFAULT/default_log_levels' :
value => join(sort(join_keys_to_values($default_log_levels, '=')), ',');
}
} else {
neutron_config { 'DEFAULT/default_log_levels' : ensure => absent; }
}
if $use_syslog {
neutron_config { 'DEFAULT/use_syslog_rfc_format': value => true; }
}
if $use_ceilometer {
neutron_config { 'DEFAULT/notification_driver': value => 'messaging' }
}
}
### SYSCTL ###
# All nodes with network functions should have net forwarding.
# Its a requirement for network namespaces to function.
sysctl::value { 'net.ipv4.ip_forward': value => '1' }
# All nodes with network functions should have these thresholds
# to avoid "Neighbour table overflow" problem
sysctl::value { 'net.ipv4.neigh.default.gc_thresh1': value => '4096' }
sysctl::value { 'net.ipv4.neigh.default.gc_thresh2': value => '8192' }
sysctl::value { 'net.ipv4.neigh.default.gc_thresh3': value => '16384' }
Sysctl::Value <| |> -> Package['python-networking-odl'] -> Nova_config <||>
Sysctl::Value <| |> -> Package['python-networking-odl'] -> Neutron_config <||>

View File

@ -0,0 +1,7 @@
include opendaylight
include firewall
class { 'opendaylight::install':
rest_port => $opendaylight::rest_api_port,
bind_address => $opendaylight::node_internal_address
}

View File

@ -0,0 +1,174 @@
notice('MODULAR: odl-ml2.pp')
$use_neutron = hiera('use_neutron', false)
class neutron {}
class { 'neutron' :}
if $use_neutron {
include ::neutron::params
$node_name = hiera('node_name')
$primary_controller = roles_include(['primary-controller'])
$neutron_config = hiera_hash('neutron_config')
$neutron_server_enable = pick($neutron_config['neutron_server_enable'], true)
$neutron_nodes = hiera_hash('neutron_nodes')
$management_vip = hiera('management_vip')
$service_endpoint = hiera('service_endpoint', $management_vip)
$auth_api_version = 'v2.0'
$identity_uri = "http://${service_endpoint}:5000"
$auth_url = "${identity_uri}/${auth_api_version}"
$auth_password = $neutron_config['keystone']['admin_password']
$auth_user = pick($neutron_config['keystone']['admin_user'], 'neutron')
$auth_tenant = pick($neutron_config['keystone']['admin_tenant'], 'services')
$auth_region = hiera('region', 'RegionOne')
$auth_endpoint_type = 'internalURL'
$network_scheme = hiera_hash('network_scheme')
prepare_network_config($network_scheme)
$neutron_advanced_config = hiera_hash('neutron_advanced_configuration', { })
$l2_population = try_get_value($neutron_advanced_config, 'neutron_l2_pop', false)
$dvr = try_get_value($neutron_advanced_config, 'neutron_dvr', false)
$segmentation_type = try_get_value($neutron_config, 'L2/segmentation_type')
$extension_drivers = ['port_security']
if $compute and ! $dvr {
$do_floating = false
} else {
$do_floating = true
}
$network_vlan_ranges = generate_physnet_vlan_ranges($neutron_config, $network_scheme, {
'do_floating' => $do_floating,
'do_tenant' => true,
'do_provider' => false
})
if $segmentation_type == 'vlan' {
$net_role_property = 'neutron/private'
$iface = get_network_role_property($net_role_property, 'phys_dev')
$overlay_net_mtu = pick(get_transformation_property('mtu', $iface[0]), '1500')
$enable_tunneling = false
$physical_network_mtus = generate_physnet_mtus($neutron_config, $network_scheme, {
'do_floating' => $do_floating,
'do_tenant' => true,
'do_provider' => false
})
$tunnel_id_ranges = []
$network_type = 'vlan'
$tunnel_types = []
} else {
$net_role_property = 'neutron/mesh'
$tunneling_ip = get_network_role_property($net_role_property, 'ipaddr')
$iface = get_network_role_property($net_role_property, 'phys_dev')
$physical_net_mtu = pick(get_transformation_property('mtu', $iface[0]), '1500')
$tunnel_id_ranges = [try_get_value($neutron_config, 'L2/tunnel_id_ranges')]
$physical_network_mtus = generate_physnet_mtus($neutron_config, $network_scheme, {
'do_floating' => $do_floating,
'do_tenant' => false,
'do_provider' => false
})
if $segmentation_type == 'gre' {
$mtu_offset = '42'
$network_type = 'gre'
} else {
# vxlan is the default segmentation type for non-vlan cases
$mtu_offset = '50'
$network_type = 'vxlan'
}
$tunnel_types = [$network_type]
if $physical_net_mtu {
$overlay_net_mtu = $physical_net_mtu - $mtu_offset
} else {
$overlay_net_mtu = '1500' - $mtu_offset
}
$enable_tunneling = true
}
$type_drivers = ['local', 'flat', 'vlan', 'gre', 'vxlan']
$tenant_network_types = ['flat', $network_type]
$default_mechanism_drivers = $l2_population ? { true => 'openvswitch,l2population', default => 'openvswitch'}
$mechanism_drivers = split(try_get_value($neutron_config, 'L2/mechanism_drivers', $default_mechanism_drivers), ',')
$flat_networks = ['*']
$vxlan_group = '224.0.0.1'
class { 'neutron::plugins::ml2':
type_drivers => $type_drivers,
tenant_network_types => $tenant_network_types,
mechanism_drivers => $mechanism_drivers,
flat_networks => $flat_networks,
network_vlan_ranges => $network_vlan_ranges,
tunnel_id_ranges => $tunnel_id_ranges,
vxlan_group => $vxlan_group,
vni_ranges => $tunnel_id_ranges,
physical_network_mtus => $physical_network_mtus,
path_mtu => $overlay_net_mtu,
extension_drivers => $extension_drivers,
}
# Synchronize database after plugin was configured
if $primary_controller {
include ::neutron::db::sync
}
if $node_name in keys($neutron_nodes) {
if $neutron_server_enable {
$service_ensure = 'running'
} else {
$service_ensure = 'stopped'
}
service { 'neutron-server':
name => $::neutron::params::server_service,
enable => $neutron_server_enable,
ensure => $service_ensure,
hasstatus => true,
hasrestart => true,
tag => 'neutron-service',
} ->
exec { 'waiting-for-neutron-api':
environment => [
"OS_TENANT_NAME=${auth_tenant}",
"OS_USERNAME=${auth_user}",
"OS_PASSWORD=${auth_password}",
"OS_AUTH_URL=${auth_url}",
"OS_REGION_NAME=${auth_region}",
"OS_ENDPOINT_TYPE=${auth_endpoint_type}",
],
path => '/usr/sbin:/usr/bin:/sbin:/bin',
tries => '30',
try_sleep => '4',
command => 'neutron net-list --http-timeout=4 2>&1 > /dev/null',
provider => 'shell'
}
$ha_agent = try_get_value($neutron_advanced_config, 'l2_agent_ha', true)
if $ha_agent {
#Exec<| title == 'waiting-for-neutron-api' |> ->
class { 'cluster::neutron::ovs' :
primary => $primary_controller,
}
}
}
# Stub for upstream neutron manifests
package { 'neutron':
name => 'binutils',
ensure => 'installed',
}
# override neutron options
$override_configuration = hiera_hash('configuration', {})
override_resources { 'neutron_plugin_ml2':
data => $override_configuration['neutron_plugin_ml2']
}
override_resources { 'neutron_agent_ovs':
data => $override_configuration['neutron_agent_ovs']
}
}

View File

@ -0,0 +1,114 @@
notice('MODULAR: odl-netconfig.pp')
$nodes_hash = hiera('nodes', {})
$roles = node_roles($nodes_hash, hiera('uid'))
$network_scheme = odl_network_scheme($roles)
if ( $::l23_os =~ /(?i:centos6)/ and $::kernelmajversion == '3.10' ) {
$ovs_datapath_package_name = 'kmod-openvswitch-lt'
}
class { 'l23network' :
use_ovs => hiera('use_ovs', false),
use_ovs_dkms_datapath_module => $::l23_os ? {
/(?i:redhat7|centos7)/ => false,
default => true
},
ovs_datapath_package_name => $ovs_datapath_package_name,
}
prepare_network_config($network_scheme)
$sdn = generate_network_config()
notify {'SDN': message => $sdn }
#Set arp_accept to 1 by default #lp1456272
sysctl::value { 'net.ipv4.conf.all.arp_accept': value => '1' }
sysctl::value { 'net.ipv4.conf.default.arp_accept': value => '1' }
#Disable rp_filter
sysctl::value { 'net.ipv4.conf.all.rp_filter': value => '0' }
sysctl::value { 'net.ipv4.conf.default.rp_filter': value => '0' }
# setting kernel reserved ports
# defaults are 49000,49001,35357,41055,41056,58882
class { 'openstack::reserved_ports': }
### TCP connections keepalives and failover related parameters ###
# configure TCP keepalive for host OS.
# Send 3 probes each 8 seconds, if the connection was idle
# for a 30 seconds. Consider it dead, if there was no responces
# during the check time frame, i.e. 30+3*8=54 seconds overall.
# (note: overall check time frame should be lower then
# nova_report_interval).
class { 'openstack::keepalive' :
tcpka_time => '30',
tcpka_probes => '8',
tcpka_intvl => '3',
tcp_retries2 => '5',
}
# increase network backlog for performance on fast networks
sysctl::value { 'net.core.netdev_max_backlog': value => '261144' }
L2_port<||> -> Sysfs_config_value<||>
L3_ifconfig<||> -> Sysfs_config_value<||>
L3_route<||> -> Sysfs_config_value<||>
class { 'sysfs' :}
if hiera('set_rps', true) {
sysfs_config_value { 'rps_cpus' :
ensure => 'present',
name => '/etc/sysfs.d/rps_cpus.conf',
value => cpu_affinity_hex($::processorcount),
sysfs => '/sys/class/net/*/queues/rx-*/rps_cpus',
exclude => '/sys/class/net/lo/*',
}
}
if hiera('set_xps', true) {
sysfs_config_value { 'xps_cpus' :
ensure => 'present',
name => '/etc/sysfs.d/xps_cpus.conf',
value => cpu_affinity_hex($::processorcount),
sysfs => '/sys/class/net/*/queues/tx-*/xps_cpus',
exclude => '/sys/class/net/lo/*',
}
}
if !defined(Package['irqbalance']) {
package { 'irqbalance':
ensure => installed,
}
}
if !defined(Service['irqbalance']) {
service { 'irqbalance':
ensure => running,
require => Package['irqbalance'],
}
}
# We need to wait at least 30 seconds for the bridges and other interfaces to
# come up after being created. This should allow for all interfaces to be up
# and ready for traffic before proceeding with further deploy steps. LP#1458954
exec { 'wait-for-interfaces':
path => '/usr/bin:/bin',
command => 'sleep 32',
}
# check that network was configured successfully
# and the default gateway is online
$default_gateway = hiera('default_gateway')
ping_host { $default_gateway :
ensure => 'up',
}
L2_port<||> -> Ping_host[$default_gateway]
L2_bond<||> -> Ping_host[$default_gateway]
L3_ifconfig<||> -> Ping_host[$default_gateway]
L3_route<||> -> Ping_host[$default_gateway]
Class['l23network'] ->
Exec['wait-for-interfaces']

View File

@ -0,0 +1,31 @@
notice('MODULAR: configure_default_route.pp')
$nodes_hash = hiera('nodes', {})
$roles = node_roles($nodes_hash, hiera('uid'))
$network_scheme = odl_network_scheme($roles)
$management_vrouter_vip = hiera('management_vrouter_vip')
$management_role = 'management'
$fw_admin_role = 'fw-admin'
if ( $::l23_os =~ /(?i:centos6)/ and $::kernelmajversion == '3.10' ) {
$ovs_datapath_package_name = 'kmod-openvswitch-lt'
}
class { 'l23network' :
use_ovs => hiera('use_ovs', false),
use_ovs_dkms_datapath_module => $::l23_os ? {
/(?i:redhat7|centos7)/ => false,
default => true
},
ovs_datapath_package_name => $ovs_datapath_package_name,
}
$new_network_scheme = configure_default_route($network_scheme, $management_vrouter_vip, $fw_admin_role, $management_role )
notice ($new_network_scheme)
if !empty($new_network_scheme) {
prepare_network_config($new_network_scheme)
$sdn = generate_network_config()
notify {'SDN': message => $sdn }
}

View File

@ -1,7 +1 @@
include opendaylight
include firewall
class { 'opendaylight::service':
rest_port => $opendaylight::rest_api_port,
bind_address => $opendaylight::node_internal_address
}
class { 'opendaylight::service':}

View File

@ -1,3 +0,0 @@
package {'opnfv-quagga':
ensure => installed,
}

View File

@ -1,21 +0,0 @@
exec { 'drop_neutron_db':
command => "mysql -e 'drop database if exists neutron;'",
path => '/usr/bin',
}
exec { 'create_neutron_db':
command => "mysql -e 'create database neutron character set utf8;'",
path => '/usr/bin',
}
exec { 'grant_neutron_db':
command => "mysql -e \"grant all on neutron.* to 'neutron'@'%';\"",
path => '/usr/bin',
}
exec { 'neutron_db_sync':
command => 'neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugin.ini upgrade head',
path => '/usr/bin',
}
Exec['drop_neutron_db'] -> Exec['create_neutron_db'] -> Exec['grant_neutron_db'] -> Exec['neutron_db_sync']

View File

@ -1,65 +0,0 @@
include opendaylight
$network_scheme = hiera('network_scheme', {})
$neutron_config = hiera_hash('quantum_settings')
prepare_network_config($network_scheme)
$ovs_service_name = $operatingsystem ? {
'CentOS' => 'openvswitch',
'Ubuntu' => 'openvswitch-switch',
}
exec { 'stop-ovs-service':
command => "service ${ovs_service_name} stop",
path => '/bin:/usr/sbin:/usr/bin:/sbin',
logoutput => true,
}
exec { 'remove-ovs-logs':
command => 'rm -f /var/log/openvswitch/*',
path => '/bin:/usr/sbin:/usr/bin',
}
exec { 'remove-ovs-db':
command => 'rm -f /etc/openvswitch/*; rm -f /etc/openvswitch/.conf.db.~lock~',
path => '/bin:/usr/sbin:/usr/bin',
}
exec { 'ovs-set-manager':
command => "ovs-vsctl set-manager tcp:${opendaylight::manager_ip_address}:6640",
path => '/usr/bin'
}
if $neutron_config['L2']['segmentation_type'] != 'vlan' {
$net_role_property = 'neutron/mesh'
$tunneling_ip = get_network_role_property($net_role_property, 'ipaddr')
exec { 'ovs-set-tunnel-endpoint':
command => "ovs-vsctl set Open_vSwitch $(ovs-vsctl show | head -n 1) other_config={'local_ip'='${tunneling_ip}'}",
path => '/usr/bin',
require => Exec['ovs-set-manager']
}
} else {
$net_role_property = 'neutron/private'
$iface = get_network_role_property($net_role_property, 'phys_dev')
exec { 'ovs-br-int-to-phy':
command => "ovs-vsctl --may-exist add-port br-int ${iface} -- set Interface ${iface} type=internal",
path => '/usr/bin',
tries => 30,
try_sleep => 5,
require => Exec['ovs-set-manager']
}
exec { 'ovs-set-provider-mapping':
command => "ovs-vsctl set Open_vSwitch $(ovs-vsctl show | head -n 1) other_config:provider_mappings=physnet2:${iface}",
path => '/usr/bin',
require => Exec['ovs-br-int-to-phy']
}
}
service { $ovs_service_name:
ensure => running,
}
Exec['stop-ovs-service'] ->
Exec['remove-ovs-logs'] ->
Exec['remove-ovs-db'] ->
Service[$ovs_service_name] ->
Exec['ovs-set-manager']

View File

@ -1,17 +0,0 @@
$bridges = ['br-floating', 'br-ex']
$patch_jacks_names = get_pair_of_jack_names($bridges)
exec { 'add-br-floating':
command => 'ovs-vsctl add-br br-floating',
unless => 'ovs-vsctl br-exists br-floating',
path => '/usr/bin',
} ->
exec { 'set-br-floating-id':
command => 'ovs-vsctl br-set-external-id br-floating bridge-id br-floating',
path => '/usr/bin',
} ->
exec { 'add-floating-patch':
command => "ovs-vsctl --may-exist add-port br-floating ${patch_jacks_names[0]} -- set Interface ${patch_jacks_names[0]} type=internal",
path => '/usr/bin',
}

View File

@ -1,71 +0,0 @@
include opendaylight
$access_hash = hiera('access', {})
$keystone_admin_tenant = $access_hash[tenant]
$neutron_config = hiera_hash('quantum_settings')
$segmentation_type = $neutron_config['L2']['segmentation_type']
$nets = $neutron_config['predefined_networks']
$odl = hiera('opendaylight')
$nodes_hash = hiera('nodes', {})
$roles = node_roles($nodes_hash, hiera('uid'))
if $segmentation_type != 'vlan' {
if $segmentation_type =='gre' {
$network_type = 'gre'
} else {
$network_type = 'vxlan'
}
} else {
$network_type = 'vlan'
}
service { 'neutron-server':
ensure => running,
}
if member($roles, 'primary-controller') {
exec {'refresh-dhcp-agent':
command => 'crm resource restart p_neutron-dhcp-agent',
path => '/usr/bin:/usr/sbin',
tries => 3,
try_sleep => 10,
} ->
exec {'refresh-metadata-agent':
command => 'crm resource restart p_neutron-metadata-agent',
path => '/usr/bin:/usr/sbin',
tries => 3,
try_sleep => 10,
}
unless $odl['enable_l3_odl'] {
exec {'refresh-l3-agent':
command => 'crm resource restart p_neutron-l3-agent',
path => '/usr/bin:/usr/sbin',
tries => 3,
try_sleep => 10,
}
}
if $nets and !empty($nets) {
Service<| title == 'neutron-server' |> ->
Openstack::Network::Create_network <||>
Service<| title == 'neutron-server' |> ->
Openstack::Network::Create_router <||>
openstack::network::create_network{'net04':
netdata => $nets['net04'],
segmentation_type => $network_type,
} ->
openstack::network::create_network{'net04_ext':
netdata => $nets['net04_ext'],
segmentation_type => 'local',
} ->
openstack::network::create_router{'router04':
internal_network => 'net04',
external_network => 'net04_ext',
tenant_name => $keystone_admin_tenant
}
}
}

View File

@ -1,13 +0,0 @@
$odl = hiera('opendaylight')
service { 'neutron-server':
ensure => stopped,
}
package {'python-networking-odl':
ensure => installed,
}
if $odl['enable_l3_odl'] {
neutron_config { 'DEFAULT/service_plugins': value => 'networking_odl.l3.l3_odl.OpenDaylightL3RouterPlugin,neutron.services.metering.metering_plugin.MeteringPlugin'; }
}

View File

@ -0,0 +1,42 @@
require 'yaml'
module Puppet::Parser::Functions
newfunction(:odl_hiera_overrides) do |args|
filename = args[0]
node_roles = args[1]
hiera_overrides = {}
# When L3 forward is disabled in ODL set external_network_bridge option
# to use neutron L3 agent to create qg port on selected bridge
# Without this floating IPs doesn't work.
# This option will be no longer used in Mitaka release.
# Must be changed before that!
l3_agent = {'neutron_l3_agent_config' =>
{'DEFAULT/external_network_bridge' =>
{'value' => 'br-ex'}
}
}
hiera_overrides['configuration'] = l3_agent
# override neutron_config/quantum_settings
neutron_config = function_hiera(['neutron_config'])
neutron_config['L2']['mechanism_drivers'] = 'opendaylight'
neutron_config['L2']['phys_nets']['physnet1']['bridge'] = 'br-ex'
hiera_overrides['neutron_config'] = neutron_config
hiera_overrides['quantum_settings'] = neutron_config
# override neutron_advanced_configuration
neutron_advanced_configuration = function_hiera(['neutron_advanced_configuration'])
neutron_advanced_configuration['neutron_dvr'] = false
neutron_advanced_configuration['neutron_l2_pop'] = false
neutron_advanced_configuration['l2_agent_ha'] = false
hiera_overrides['neutron_advanced_configuration'] = neutron_advanced_configuration
# override network scheme
network_scheme = function_odl_network_scheme( [node_roles] )
hiera_overrides['network_scheme'] = network_scheme
# write to hiera override yaml file
File.open(filename, 'w') { |file| file.write(hiera_overrides.to_yaml) }
end
end

View File

@ -0,0 +1,16 @@
module Puppet::Parser::Functions
newfunction(:odl_karaf_features, :type => :rvalue) do |args|
odl_settings = function_hiera(['opendaylight'])
bgpvpn = function_hiera(['bgpvpn', false])
features_set = odl_settings['metadata']['odl_features']
enabled_features = []
enabled_features << features_set['default']
enabled_features << features_set['ovs']
enabled_features << features_set['sfc'] if odl_settings['enable_sfc']
enabled_features << features_set['gbp'] if odl_settings['enable_gbp']
enabled_features << features_set['vpn'] if bgpvpn
enabled_features.join(',')
end
end

View File

@ -0,0 +1,61 @@
#
# Modify default network schema.
# ODL use only br-int and br-ex bridges and both of them
# should be created on OVS.
# Override hiera hierarchy is not enough because of default hash deep merge policy.
#
module Puppet::Parser::Functions
newfunction(:odl_network_scheme, :type => :rvalue) do |args|
node_roles = args[0]
# override network_scheme
odl = function_hiera(['opendaylight'])
network_scheme = function_hiera(['network_scheme'])
management_vrouter_vip = function_hiera(['management_vrouter_vip'])
delete_bridges = ['br-prv']
debug "ODL network before transformation: #{network_scheme}"
endpoints = network_scheme['endpoints']
transformations = network_scheme['transformations']
transformations.delete_if { |action| action['action'] == 'add-br' and delete_bridges.include?(action['name']) }
transformations.delete_if { |action| action['action'] == 'add-patch' and not (action['bridges'] & delete_bridges).empty? }
transformations.delete_if { |action| action['action'] == 'add-port' and delete_bridges.include?(action['bridge']) }
# Modify only once
if not endpoints.has_key? 'br-ex-lnx'
transformations.each { |action| action['name'] = 'br-ex-lnx' if (action['action'] == 'add-br' and action['name'] == 'br-ex') }
transformations.each { |action| action['bridge'] = 'br-ex-lnx' if (action['action'] == 'add-port' and action['bridge'] == 'br-ex') }
end
transformations.each { |action| action['name'] = 'br-ex' if (action['action'] == 'add-br' and action['name'] == 'br-floating') }
transformations.each { |action| action['bridge'] = 'br-ex' if (action['action'] == 'add-port' and action['bridge'] == 'br-floating') }
transformations.each { |action| action['bridges'] = ['br-ex', 'br-ex-lnx'] if (action['action'] == 'add-patch' and action['bridges'] == ['br-floating', 'br-ex']) }
roles = network_scheme['roles']
roles.each { |role,bridge| roles[role] = 'br-ex-lnx' if bridge == 'br-ex' }
roles['neutron/private'] = 'br-aux' if roles.has_key?('neutron/private')
roles['neutron/floating'] = 'br-ex' if roles.has_key?('neutron/floating')
if endpoints.has_key? 'br-ex' and not endpoints.has_key? 'br-ex-lnx'
endpoints['br-ex-lnx'] = endpoints.delete 'br-ex'
end
if endpoints.has_key? 'br-floating'
endpoints['br-ex'] = endpoints.delete 'br-floating'
end
if endpoints.has_key? 'br-prv'
endpoints['br-aux'] = endpoints.delete 'br-prv'
end
if node_roles.include?('compute') and odl['enable_l3_odl']
if endpoints.has_key? 'br-ex-lnx'
debug 'ODL: not use br-ex-lnx as gateway on compute node'
endpoints['br-ex-lnx'].delete('gateway')
endpoints['br-ex-lnx']['IP'] = 'none'
endpoints['br-mgmt']['gateway'] = management_vrouter_vip
end
end
debug "ODL network after transformation: #{network_scheme}"
network_scheme
end
end

View File

@ -18,6 +18,8 @@ class opendaylight::ha::haproxy {
$public_vip = hiera('public_vip')
$management_vip = hiera('management_vip')
$nodes_hash = hiera('nodes')
$odl = hiera('opendaylight')
$api_port = $odl['rest_api_port']
$primary_controller_nodes = filter_nodes($nodes_hash,'role','primary-controller')
$odl_controllers = filter_nodes($nodes_hash,'role','opendaylight')
@ -44,11 +46,11 @@ class opendaylight::ha::haproxy {
balancermember_options => 'check inter 2000 fall 3',
}
openstack::ha::haproxy_service { 'odl-tomcat':
openstack::ha::haproxy_service { 'odl-neutron-endpoint':
order => '215',
listen_port => $opendaylight::rest_api_port,
listen_port => $api_port,
haproxy_config_options => {
'option' => ['httpchk /apidoc/explorer', 'httplog'],
'option' => ['httpchk /index', 'httplog'],
'timeout client' => '3h',
'timeout server' => '3h',
'balance' => 'source',

View File

@ -1,78 +0,0 @@
#
# Copyright 2015 Mirantis, Inc.
#
# 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.
#
# Register a service with HAProxy
define opendaylight::ha::haproxy_service (
$order,
$server_names,
$ipaddresses,
$listen_port,
$public_virtual_ip,
$internal_virtual_ip,
$mode = undef,
$haproxy_config_options = { 'option' => ['httplog'], 'balance' => 'roundrobin' },
$balancermember_options = 'check',
$balancermember_port = $listen_port,
$define_cookies = false,
# use active-passive failover, mark all backends except the first one
# as backups
$define_backups = false,
# by default, listen only on internal VIP
$public = false,
$internal = true,
# if defined, restart this service before registering it with HAProxy
$require_service = undef,
# if true, configure this service before starting the haproxy service;
# HAProxy will refuse to start with no listening services defined
$before_start = false,
) {
if $public and $internal {
$virtual_ips = [$public_virtual_ip, $internal_virtual_ip]
} elsif $internal {
$virtual_ips = [$internal_virtual_ip]
} elsif $public {
$virtual_ips = [$public_virtual_ip]
}
haproxy::listen { $name:
order => $order,
ipaddress => $virtual_ips,
ports => $listen_port,
options => $haproxy_config_options,
mode => $mode,
}
haproxy::balancermember { $name:
order => $order,
listening_service => $name,
server_names => $server_names,
ipaddresses => $ipaddresses,
ports => $balancermember_port,
options => $balancermember_options,
define_cookies => $define_cookies,
define_backups => $define_backups,
}
if $require_service {
Service[$require_service] -> Haproxy::Listen[$name]
Service[$require_service] -> Haproxy::Balancermember[$name]
}
}

View File

@ -0,0 +1,12 @@
class opendaylight::hiera_override {
$override_file = '/etc/hiera/override/opendaylight.yaml'
$nodes_hash = hiera('nodes', {})
$roles = node_roles($nodes_hash, hiera('uid'))
odl_hiera_overrides($override_file, $roles)
file_line {'opendaylight_hiera_override':
path => '/etc/hiera.yaml',
line => ' - override/opendaylight',
after => ' - "override/module/%{calling_module}"',
}
}

View File

@ -0,0 +1,89 @@
class opendaylight::install (
$rest_port = $opendaylight::rest_api_port,
$bind_address = undef,
) {
$nodes_hash = hiera('nodes', {})
$roles = node_roles($nodes_hash, hiera('uid'))
$management_vip = hiera('management_vip')
$odl = hiera('opendaylight')
$conf_dir = '/opt/opendaylight/etc'
if $odl['enable_l3_odl'] {
$manage_l3_traffic = 'yes'
} else {
$manage_l3_traffic = 'no'
}
$java_package = $operatingsystem ? {
'CentOS' => 'java-1.7.0-openjdk',
'Ubuntu' => 'openjdk-7-jre-headless',
}
package { 'java-jre':
ensure => installed,
name => $java_package,
}
package { 'opendaylight':
ensure => installed,
require => Package['java-jre'],
}
package {'opnfv-quagga':
ensure => installed,
}
firewall {'215 odl':
port => [ $opendaylight::rest_api_port, 6633, 6640, 6653, 8181, 8101],
proto => 'tcp',
action => 'accept',
}
service { 'opendaylight' :
ensure => running,
enable => true,
}
debug("Set odl rest api port to ${rest_port}")
file { "${conf_dir}/jetty.xml":
ensure => file,
owner => 'odl',
content => template('opendaylight/jetty.xml.erb')
}
$karaf_custom_properties_file = {
'path' => "${conf_dir}/custom.properties",
'ensure' => 'present',
'key_val_separator' => '=',
}
$karaf_custom_properties = {
'' => {
'of.address' => $bind_address,
'of.listenPort' => '6653',
'ovsdb.of.version' => '1.3',
'ovsdb.l3.fwd.enabled' => $manage_l3_traffic,
}
}
create_ini_settings($karaf_custom_properties, $karaf_custom_properties_file)
$enabled_features = odl_karaf_features()
ini_setting {'karaf_features':
ensure => present,
section => '',
key_val_separator => '=',
path => "${conf_dir}/org.apache.karaf.features.cfg",
setting => 'featuresBoot',
value => $enabled_features,
}
Package['opendaylight'] ->
Ini_setting <||> ->
Firewall <||> ->
File <||> ->
Service['opendaylight']
}

View File

@ -1,77 +1,19 @@
class opendaylight::service (
$rest_port = $opendaylight::rest_api_port,
$bind_address = undef,
) {
class opendaylight::service {
$nodes_hash = hiera('nodes', {})
$roles = node_roles($nodes_hash, hiera('uid'))
$management_vip = hiera('management_vip')
$odl = hiera('opendaylight')
$features = $odl['metadata']['odl_features']
$enable = {}
$enable_l3_odl = $odl['enable_l3_odl']
$rest_port = $odl['rest_api_port']
if member($roles, 'opendaylight') {
firewall {'215 odl':
port => [ $opendaylight::rest_api_port, 6633, 6640, 6653, 8181, 8101],
proto => 'tcp',
action => 'accept',
before => Service['opendaylight'],
}
service { 'opendaylight' :
ensure => running,
enable => true,
require => File[
'/opt/opendaylight/etc/jetty.xml',
'/opt/opendaylight/etc/custom.properties',
'/opt/opendaylight/etc/org.apache.karaf.features.cfg'],
}
debug("Set odl rest api port to ${rest_port}")
file { '/opt/opendaylight/etc/jetty.xml':
ensure => file,
owner => 'odl',
content => template('opendaylight/jetty.xml.erb')
}
file { '/opt/opendaylight/etc/custom.properties':
ensure => file,
owner => 'odl',
content => template('opendaylight/custom.properties.erb'),
}
$enable['default'] = $features['default']
$enable['ovs'] = $features['ovs']
if $odl['enable_sfc'] {
$enable['sfc'] = $features['sfc']
}
if $odl['enable_gbp'] {
$enable['gbp'] = $features['gbp']
}
if hiera('bgpvpn', false) {
$enable['vpn'] = $features['vpn']
}
file { '/opt/opendaylight/etc/org.apache.karaf.features.cfg':
ensure => file,
owner => 'odl',
content => template('opendaylight/org.apache.karaf.features.cfg.erb'),
}
include opendaylight::ha::haproxy
if member($roles, 'primary-controller') {
exec { 'wait-until-odl-ready':
command => "curl -o /dev/null --fail --silent --head -u admin:admin http://${management_vip}:${rest_port}/restconf/operational/network-topology:network-topology/topology/netvirt:1",
path => '/bin:/usr/bin',
tries => 60,
try_sleep => 20,
require => Service['opendaylight'],
require => Class['opendaylight::ha::haproxy'],
}
}
if member($roles, 'controller') or member($roles, 'primary-controller') {
include opendaylight::ha::haproxy
}
}

View File

@ -1,132 +0,0 @@
# Extra packages to import from the boot class loader
org.osgi.framework.system.packages.extra=org.apache.karaf.branding,sun.reflect,sun.reflect.misc,sun.misc,sun.nio.ch
# https://bugs.eclipse.org/bugs/show_bug.cgi?id=325578
# Extend the framework to avoid the resources to be presented with
# a URL of type bundleresource: but to be presented as file:
osgi.hook.configurators.include=org.eclipse.virgo.kernel.equinox.extensions.hooks.ExtensionsHookConfigurator
# Embedded Tomcat configuration File
org.eclipse.gemini.web.tomcat.config.path=configuration/tomcat-server.xml
org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true
# Use Equinox as default OSGi Framework Implementation
karaf.framework=equinox
# Netconf startup configuration
netconf.tcp.address=127.0.0.1
netconf.tcp.port=8383
netconf.tcp.client.address=127.0.0.1
netconf.tcp.client.port=8383
netconf.ssh.address=0.0.0.0
netconf.ssh.port=1830
# Use Linux style path
netconf.ssh.pk.path = ./configuration/RSA.pk
# Set security provider to BouncyCastle
org.apache.karaf.security.providers = org.bouncycastle.jce.provider.BouncyCastleProvider
netconf.config.persister.active=1
netconf.config.persister.1.storageAdapterClass=org.opendaylight.controller.config.persist.storage.file.xml.XmlFileStorageAdapter
netconf.config.persister.1.properties.fileStorage=etc/opendaylight/current/controller.currentconfig.xml
netconf.config.persister.1.properties.numberOfBackups=1
# logback configuration
logback.configurationFile=configuration/logback.xml
# Container configuration
container.profile = Container
# Connection manager configuration
connection.scheme = ANY_CONTROLLER_ONE_MASTER
# Open Flow related system parameters
# TCP port on which the controller is listening (default 6633)
of.listenPort=6653
# IP address of the controller (default: wild card)
of.address = <%= @bind_address %>
# The time (in milliseconds) the controller will wait for a response after sending a Barrier Request or a Statistic Request message (default 2000 msec)
# of.messageResponseTimer=2000
# The switch liveness timeout value (default 60500 msec)
# of.switchLivenessTimeout=60500
# The size of the queue holding pending statistics requests (default 64). For large networks of n switches, it is recommended to set the queue size to n
# of.statsQueueSize = 64
# The flow statistics polling interval in second (default 10 sec)
# of.flowStatsPollInterval=10
# The port statistics polling interval in second (default 5 sec)
# of.portStatsPollInterval=5
# The description statistics polling interval in second (default 60 sec)
# of.descStatsPollInterval=60
# The table statistics polling interval in second (default 10 sec)
# of.tableStatsPollInterval=10
# The maximum number of asynchronous messages can be sent before sending a Barrier Request (default 100)
# of.barrierMessagePriorCount=100
# The interval which determines how often the discovery packets should be sent (default 300 sec)
# of.discoveryInterval=300
# The timeout multiple of discovery interval
# of.discoveryTimeoutMultiple=2
# For newly added ports, allow one more retry if the elapsed time exceeds this threshold (default 30 sec)
# of.discoveryThreshold=30
# The maximum number of ports handled in one discovery batch (default 512)
# of.discoveryBatchMaxPorts=512
# OVSDB configuration
# ovsdb plugin supports both active and passive connections. It listens on port 6640 by default for Active connections.
ovsdb.listenPort=6640
# ovsdb creates Openflow nodes/bridges. This configuration configures the bridge's Openflow version.
# default Openflow version = 1.0, we also support 1.3.
ovsdb.of.version=1.3
# ovsdb can be configured with ml2 to perform l3 forwarding. The config below enables that functionality, which is
# disabled by default.
# ovsdb.l3.fwd.enabled=false
<% if @enable_l3_odl %>ovsdb.l3.fwd.enabled=yes<% end %>
# ovsdb can be configured with ml2 to perform l3 forwarding. When used in that scenario, the mac address of the default
# gateway --on the external subnet-- is expected to be resolved from its inet address. The config below overrides that
# specific arp/neighDiscovery lookup.
# ovsdb.l3gateway.mac=
# TLS configuration
# To enable TLS, set secureChannelEnabled=true and specify the location of controller Java KeyStore and TrustStore files.
# The Java KeyStore contains controller's private key and certificate. The Java TrustStore contains the trusted certificate
# entries, including switches' Certification Authority (CA) certificates. For example,
# secureChannelEnabled=true
# controllerKeyStore=./configuration/ctlKeyStore
# controllerKeyStorePassword=xxxxxxxx (this password should match the password used for KeyStore generation and at least 6 characters)
# controllerTrustStore=./configuration/ctlTrustStore
# controllerTrustStorePassword=xxxxxxxx (this password should match the password used for TrustStore generation and at least 6 characters)
secureChannelEnabled=false
controllerKeyStore=
controllerKeyStorePassword=
controllerTrustStore=
controllerTrustStorePassword=
# User Manager configurations
enableStrongPasswordCheck = false
#Jolokia configurations
#org.jolokia.listenForHttpService=false
# Logging configuration for Tomcat-JUL logging
java.util.logging.config.file=configuration/tomcat-logging.properties
#Hosttracker hostsdb key scheme setting
hosttracker.keyscheme=IP
# LISP Flow Mapping configuration
# Map-Register messages overwrite existing RLOC sets in EID-to-RLOC mappings (default: true)
lisp.mappingOverwrite = true
# Enable the Solicit-Map-Request (SMR) mechanism (default: true)
lisp.smr = true
# Choose policy for Explicit Locator Path (ELP) handling
# There are three options:
# default: don't add or remove locator records, return mapping as-is
# both: keep the ELP, but add the next hop as a standalone non-LCAF locator with a lower priority
# replace: remove the ELP, add the next hop as a standalone non-LCAF locator
lisp.elpPolicy = default

View File

@ -1,49 +0,0 @@
################################################################################
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You 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.
#
################################################################################
#
# Defines if the startlvl should be respected during feature startup. The default value is true. The default
# behavior for 2.x is false (!) for this property
#
# Be aware that this property is deprecated and will be removed in Karaf 4.0. So, if you need to
# set this to false, please use this only as a temporary solution!
#
#respectStartLvlDuringFeatureStartup=true
#
# Defines if the startlvl should be respected during feature uninstall. The default value is true.
# If true, means stop bundles respecting the descend order of start level in a certain feature.
#
#respectStartLvlDuringFeatureUninstall=true
#
# Comma separated list of features repositories to register by default
#
featuresRepositories = mvn:org.apache.karaf.features/standard/3.0.3/xml/features,mvn:org.apache.karaf.features/enterprise/3.0.3/xml/features,mvn:org.ops4j.pax.web/pax-web-features/3.1.4/xml/features,mvn:org.apache.karaf.features/spring/3.0.3/xml/features,mvn:org.opendaylight.integration/features-integration-index/0.3.2-Lithium-SR2/xml/features
#
# Comma separated list of features to install at startup
#
featuresBoot=<%= @enable.map{|k,v| "#{v.join(',')}"}.join(',') %>
#
# Defines if the boot features are started in asynchronous mode (in a dedicated thread)
#
featuresBootAsynchronous=false

View File

@ -3,7 +3,7 @@
role: [opendaylight]
requires: [deploy_start]
required_for: [deploy_end, primary-controller, controller]
tasks: [fuel_pkgs, hiera, globals, tools, logging, netconfig,
tasks: [fuel_pkgs, hiera, globals, tools, logging, odl-netconfig,
hosts, firewall, deploy_start, odl_install]
parameters:
strategy:
@ -12,99 +12,156 @@
type: puppet
groups: [opendaylight]
requires: [deploy_start]
required_for: [deploy_end]
required_for: [openstack-network-start, odl_configure]
requires: [hosts, firewall, globals]
required_for: [deploy_end, openstack-network]
parameters:
puppet_manifest: puppet/manifests/controller-pre.pp
puppet_manifest: puppet/manifests/odl-install.pp
puppet_modules: puppet/modules:/etc/puppet/modules
timeout: 720
- id: quagga_install
role: [opendaylight]
- id: netconfig
type: skipped
- id: odl-netconfig
type: puppet
requires: [deploy_start]
required_for: [deploy_end, primary-controller, controller]
groups: [primary-controller, controller, cinder, cinder-vmware, compute, ceph-osd, primary-mongo, mongo, virt, ironic]
required_for: [firewall, hosts, connectivity_tests, openstack-network-start, generate_vms, primary-controller, controller, cinder, cinder-vmware, compute, ceph-osd, primary-mongo, mongo, virt, ironic, compute-vmware, opendaylight, deploy_end]
requires: [tools, hiera-override]
reexecute_on: [deploy_changes]
parameters:
puppet_manifest: puppet/manifests/quagga_extension.pp
puppet_manifest: puppet/manifests/odl-netconfig.pp
puppet_modules: puppet/modules:/etc/puppet/modules
timeout: 3600
- id: hiera-override
type: puppet
groups: ['primary-controller','controller','compute', 'opendaylight']
required_for: [odl-netconfig]
requires: [globals]
parameters:
puppet_manifest: puppet/manifests/hiera-override.pp
puppet_modules: puppet/modules:/etc/puppet/modules
timeout: 120
- id: odl_configure
role: ['primary-controller', 'controller', 'compute', 'opendaylight']
requires: [post_deployment_start]
required_for: [post_deployment_end]
groups: ['primary-controller', 'controller']
requires: [deploy_start, cluster-haproxy]
required_for: [neutron-configuration, openstack-haproxy, openstack-network-end]
type: puppet
parameters:
puppet_manifest: puppet/manifests/odl-service.pp
puppet_modules: puppet/modules:/etc/puppet/modules
timeout: 1400
- id: odl_delete_predefined_net
role: ['primary-controller']
requires: [odl_configure]
required_for: [post_deployment_end]
type: shell
parameters:
cmd: ./clean-neutron.sh
timeout: 120
- id: odl_disable_ovs_agent
role: ['primary-controller', 'compute']
requires: [odl_delete_predefined_net]
required_for: [post_deployment_end]
- id: openstack-network-common-config
type: skipped
- id: neutron-configuration
type: puppet
groups: [primary-controller,controller,compute]
required_for: [openstack-network-end, openstack-network-server-config]
requires: [openstack-network-start]
parameters:
puppet_manifest: puppet/manifests/disable-ovs-agent.pp
puppet_manifest: puppet/manifests/neutron-configuration.pp
puppet_modules: puppet/modules:/etc/puppet/modules
timeout: 120
- id: odl_stop_neutron
role: ['primary-controller', 'controller']
requires: [odl_disable_ovs_agent]
required_for: [post_deployment_end]
timeout: 1800
- id: primary-openstack-network-plugins-l2
type: skipped
- id: openstack-network-plugins-l2
type: skipped
- id: odl-network-plugins-l2
type: puppet
version: 2.0.0
groups: [primary-controller]
required_for: [openstack-network-end]
requires: [neutron-configuration, openstack-network-server-config]
refresh_on: [neutron_plugin_ml2, neutron_config, neutron_api_config]
parameters:
puppet_manifest: puppet/manifests/stop-neutron.pp
puppet_manifest: puppet/manifests/odl-ml2-configuration.pp
puppet_modules: puppet/modules:/etc/puppet/modules
timeout: 120
- id: odl_recreate_ovs
role: ['primary-controller', 'controller', 'compute']
requires: [odl_stop_neutron]
required_for: [post_deployment_end]
timeout: 1800
# We have two tracks here.
# If user wants to use ODL to control L3 traffic
# then we skip tasks which spawn neutron L3 agents
# and move networks and router creation on the end.
# In other case standard path is preserved, but additional
# condition is added to tasks
- id: openstack-network-networks
type: skipped
- id: odl-openstack-network-networks
type: puppet
parameters:
puppet_manifest: puppet/manifests/recreate-ovs.pp
puppet_modules: puppet/modules:/etc/puppet/modules
timeout: 120
- id: odl_ml2_configuration
role: ['primary-controller', 'controller', 'compute']
requires: [odl_recreate_ovs]
version: 2.0.0
role: [primary-controller]
required_for: [post_deployment_end]
type: puppet
requires: [post_deployment_start]
parameters:
puppet_manifest: puppet/manifests/ml2-configuration.pp
puppet_modules: puppet/modules:/etc/puppet/modules
timeout: 120
- id: odl_recreate_neutron_db
role: ['primary-controller']
requires: [odl_ml2_configuration]
puppet_manifest: /etc/puppet/modules/osnailyfacter/modular/openstack-network/networks.pp
puppet_modules: /etc/puppet/modules
timeout: 1800
- id: openstack-network-routers
type: skipped
- id: odl-openstack-network-routers
type: puppet
version: 2.0.0
role: [primary-controller]
required_for: [post_deployment_end]
type: puppet
requires: [post_deployment_start, odl-openstack-network-networks]
parameters:
puppet_manifest: puppet/manifests/recreate-neutron-db.pp
puppet_modules: puppet/modules:/etc/puppet/modules
timeout: 180
- id: odl_setup_floating
role: ['primary-controller', 'controller', 'compute']
requires: [odl_recreate_neutron_db]
puppet_manifest: /etc/puppet/modules/osnailyfacter/modular/openstack-network/routers.pp
puppet_modules: /etc/puppet/modules
timeout: 1800
# Additional task for routers when L3 HA is enabled
# HA routers must be created on post-deployment step when all L3 agents are available
- id: openstack-network-routers-ha
type: skipped
- id: odl-openstack-network-routers-ha
type: puppet
version: 2.0.0
role: [primary-controller]
condition: "settings:neutron_advanced_configuration.neutron_l3_ha.value == true and settings:opendaylight.enable_l3_odl.value == false"
required_for: [post_deployment_end]
type: puppet
requires: [post_deployment_start]
parameters:
puppet_manifest: puppet/manifests/setup-floating.pp
puppet_modules: puppet/modules:/etc/puppet/modules
timeout: 120
- id: odl_start_neutron
role: ['primary-controller', 'controller']
requires: [odl_setup_floating]
puppet_manifest: /etc/puppet/modules/osnailyfacter/modular/openstack-network/routers.pp
puppet_modules: /etc/puppet/modules
timeout: 1800
cwd: /
- id: primary-openstack-network-agents-l3
type: skipped
- id: odl-nol3-primary-openstack-network-agents-l3
type: puppet
version: 2.0.0
groups: [primary-controller]
condition: "settings:opendaylight.enable_l3_odl.value == false"
required_for: [openstack-network-end]
requires: [odl-network-plugins-l2]
refresh_on: [neutron_l3_agent_config]
parameters:
puppet_manifest: /etc/puppet/modules/osnailyfacter/modular/openstack-network/agents/l3.pp
puppet_modules: /etc/puppet/modules
timeout: 1800
- id: openstack-network-agents-l3
type: skipped
- id: odl-nol3-openstack-network-agents-l3
type: puppet
version: 2.0.0
groups: [controller,compute]
condition: "settings:opendaylight.enable_l3_odl.value == false"
required_for: [primary-openstack-network-agents-dhcp, openstack-network-agents-dhcp, primary-openstack-network-agents-metadata, openstack-network-agents-metadata, openstack-network-end]
requires: [odl-network-plugins-l2]
refresh_on: [neutron_l3_agent_config]
cross-depends:
- name: /(primary-)?openstack-network-plugins-l2/
- name: odl-primary-openstack-network-agents-l3
parameters:
puppet_manifest: /etc/puppet/modules/osnailyfacter/modular/openstack-network/agents/l3.pp
puppet_modules: /etc/puppet/modules
timeout: 1800
- id: configure_default_route
type: skipped
- id: odl-nol3-configure_default_route
type: puppet
version: 2.0.0
role: [primary-mongo, mongo, compute, ceph-osd, cinder]
condition: "settings:opendaylight.enable_l3_odl.value == false"
requires: [post_deployment_start]
required_for: [post_deployment_end]
type: puppet
parameters:
puppet_manifest: puppet/manifests/start-neutron.pp
puppet_manifest: puppet/manifests/odl-nol3-configure_default_route.pp
puppet_modules: puppet/modules:/etc/puppet/modules
timeout: 210
timeout: 3600

View File

@ -8,7 +8,10 @@ attributes:
weight: 12
type: "checkbox"
value: false
label: "EXPERIMENTAL: Use ODL to manage L3 traffic"
label: "Use ODL to manage L3 traffic"
restrictions:
- networking_parameters:segmentation_type == 'vlan': Use tunneling segmentation type.
- settings:public_network_assignment.assign_to_all_nodes.value == false: Assign public network to all nodes
enable_sfc:
weight: 13
type: "checkbox"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 89 KiB

View File

@ -1,16 +1,15 @@
# Plugin name
name: opendaylight
# Human-readable name for your plugin
title: OpenDaylight Lithium plugin
title: OpenDaylight plugin
# Plugin version
version: '0.7.0'
version: '0.8.0'
# Description
description: 'This plugin provides OpenDaylight as a backend for neutron.
Use the same IP address as for OpenStack Horizon and port 8181 to reach dlux web ui and apidoc explorer.
DLUX: http://horizon_ip:8181/index.html,
APIDOC: http://horizon_ip:8181/apidoc/explorer/index.html'
Use the same IP address as for OpenStack Horizon and port 8181 to reach dlux web ui.
DLUX: http://<HORIZON_IP>:8181/index.html'
# Required fuel version
fuel_version: ['7.0']
fuel_version: ['8.0']
# Specify license of your plugin
licenses: ['Apache License Version 2.0']
# Specify author or company name
@ -24,8 +23,8 @@ groups: ['network']
# The plugin is compatible with releases in the list
releases:
- os: ubuntu
version: 2015.1.0-7.0
mode: ['ha', 'multinode']
version: liberty-8.0
mode: ['ha']
deployment_scripts_path: deployment_scripts/
repository_path: repositories/ubuntu

View File

@ -1,70 +0,0 @@
Eclipse Public License - v 1.0
THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
1. DEFINITIONS
"Contribution" means:
a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and
b) in the case of each subsequent Contributor:
i) changes to the Program, and
ii) additions to the Program;
where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program.
"Contributor" means any person or entity that distributes the Program.
"Licensed Patents" mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.
"Program" means the Contributions distributed in accordance with this Agreement.
"Recipient" means anyone who receives the Program under this Agreement, including all Contributors.
2. GRANT OF RIGHTS
a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form.
b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.
c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program.
d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement.
3. REQUIREMENTS
A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:
a) it complies with the terms and conditions of this Agreement; and
b) its license agreement:
i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;
ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;
iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and
iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange.
When the Program is made available in source code form:
a) it must be made available under this Agreement; and
b) a copy of this Agreement must be included with each copy of the Program.
Contributors may not remove or alter any copyright notices contained within the Program.
Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution.
4. COMMERCIAL DISTRIBUTION
Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense.
For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages.
5. NO WARRANTY
EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.
6. DISCLAIMER OF LIABILITY
EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
7. GENERAL
If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed.
All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive.
Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved.
This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation.

View File

@ -1,5 +0,0 @@
This directory contains compiled code which is a part of
ovsdb opendaylight project which source code can be found
here https://github.com/opendaylight/ovsdb/tree/release/lithium
Changes against orginal code are described inside fuel.patch file.

View File

@ -1,24 +0,0 @@
From 26cce1d21550c621a4ccd6bcfd31688a9b1c1a6e Mon Sep 17 00:00:00 2001
From: Michal Skalski <mskalski@mirantis.com>
Date: Wed, 16 Sep 2015 10:01:02 +0200
Subject: [PATCH] Fuel patch
---
.../java/org/opendaylight/ovsdb/openstack/netvirt/api/Constants.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/api/Constants.java b/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/api/Constants.java
index 05a9a07..3669ef0 100644
--- a/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/api/Constants.java
+++ b/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/api/Constants.java
@@ -28,7 +28,7 @@ public final class Constants {
public static final String TUNNEL_ENDPOINT_KEY = "local_ip";
public static final String INTEGRATION_BRIDGE = "br-int";
public static final String NETWORK_BRIDGE = "br-net";
- public static final String EXTERNAL_BRIDGE = "br-ex";
+ public static final String EXTERNAL_BRIDGE = "br-floating";
public static final String PATCH_PORT_TO_INTEGRATION_BRIDGE_NAME = "patch-int";
public static final String PATCH_PORT_TO_NETWORK_BRIDGE_NAME = "patch-net";
public static final String PATCH_PORT_TO_EXTERNAL_BRIDGE_NAME = "patch-ext";
--
2.1.4

View File

@ -7,16 +7,16 @@ set -eux
# Where we can find odl karaf distribution tarball
# can be http(s) url or absolute path
ODL_TARBALL_LOCATION=${ODL_TARBALL_LOCATION:-https://nexus.opendaylight.org/content/repositories/opendaylight.release/org/opendaylight/integration/distribution-karaf/0.3.2-Lithium-SR2/distribution-karaf-0.3.2-Lithium-SR2.tar.gz}
ODL_TARBALL_LOCATION=${ODL_TARBALL_LOCATION:-https://nexus.opendaylight.org/content/repositories/opendaylight.snapshot/org/opendaylight/integration/distribution-karaf/0.4.0-SNAPSHOT/distribution-karaf-0.4.0-20160118.091622-3555.tar.gz}
#Verion number used in deb/rpm package
ODL_VERSION_NUMBER=${ODL_VERSION_NUMBER:-0.3.2}
ODL_VERSION_NUMBER=${ODL_VERSION_NUMBER:-0.4.0}
ODL_DESCRIPTION="OpenDaylight SDN Controller"
TMP_NAME="karaf-odl.tar.gz"
#Networking odl
NETWORKING_ODL_REPO=${NETWORKING_ODL_REPO:-https://github.com/openstack/networking-odl.git}
NETWORKING_ODL_BRANCH=${NETWORKING_ODL_BRANCH:-stable/kilo}
NETWORKING_ODL_BRANCH=${NETWORKING_ODL_BRANCH:-stable/liberty}
#Opnfv-quagga-packaging
OPNFV_QUAGGE_PACKAGING_REPO=${OPNFV_QUAGGE_PACKAGING_REPO:-https://github.com/nikolas-hermanns/opnfv-quagga-packaging}
@ -33,9 +33,6 @@ MODULES="${DIR}/deployment_scripts/puppet/modules"
# Useful for offline deployments.
INCLUDE_DEPENDENCIES=${INCLUDE_DEPENDENCIES:-false}
# Patch ODL to use br-floating as external bridge
USE_FUEL_PATCH=${USE_FUEL_PATCH:-true}
function cleanup {
rm -rf "${TMP_DIR}"
}
@ -64,9 +61,6 @@ function add_opnfv_quagga {
popd
}
function patch_odl {
cp "${DIR}/odl_package/odl_lithium_patch/openstack.net-virt-1.1.2-Lithium-SR2.jar" "${TMP_DIR}/opendaylight_src/system/org/opendaylight/ovsdb/openstack.net-virt/1.1.2-Lithium-SR2/openstack.net-virt-1.1.2-Lithium-SR2.jar"
}
# Download packages required by ODL.
# List generated with commands:
@ -90,7 +84,7 @@ function build_pkg {
ubuntu)
pushd "${DIR}/repositories/${1}/"
fpm --force -s dir -t deb -m 'mskalski@mirantis.com' --version "${ODL_VERSION_NUMBER}" --description "${ODL_DESCRIPTION}" --prefix /opt/opendaylight --deb-upstart "${DIR}/odl_package/${1}/opendaylight" --after-install "${DIR}/odl_package/${1}/opendaylight-post" --name opendaylight -d "openjdk-7-jre-headless" -C "${TMP_DIR}/opendaylight_src"
fpm --force -s python -t deb -m 'mskalski@mirantis.com' --no-python-dependencies -d python-pbr -d python-babel -d python-neutron ${TMP_DIR}/networking_odl/setup.py
fpm --force -s python -t deb -m 'mskalski@mirantis.com' --python-install-lib /usr/lib/python2.7/dist-packages ${TMP_DIR}/networking_odl/setup.py
download_dependencies ${1}
popd
add_opnfv_quagga "${DIR}/repositories/${1}/"
@ -115,11 +109,6 @@ else
unpack $ODL_TARBALL_LOCATION 'opendaylight_src'
fi
if [ "$USE_FUEL_PATCH" = true ]
then
patch_odl
fi
git clone $NETWORKING_ODL_REPO networking_odl
pushd networking_odl
git checkout $NETWORKING_ODL_BRANCH