Merge pull request #81 from Mirantis/bogdando/neutron

Bogdando/neutron
This commit is contained in:
Bogdan Dobrelya 2015-09-02 09:28:01 +02:00
commit b113ce2a7c
15 changed files with 348 additions and 216 deletions

View File

@ -162,7 +162,7 @@ def setup_resources():
# NEUTRON
# Deploy chain neutron -> (plugins) -> neutron_server -> ( agents )
neutron_puppet = vr.create('neutron_puppet', 'resources/neutron_puppet', {
'core_plugin': 'neutron.plugins.openvswitch.ovs_neutron_plugin.OVSNeutronPluginV2'
'core_plugin': 'neutron.plugins.ml2.plugin.Ml2Plugin'
})[0]
signals.connect(node1, neutron_puppet)
signals.connect(rabbitmq_service1, neutron_puppet, {
@ -237,23 +237,16 @@ def setup_resources():
'bind_port': ['admin_port', 'internal_port', 'public_port'],
})
# NEUTRON OVS PLUGIN & AGENT WITH GRE
neutron_plugins_ovs = vr.create('neutron_plugins_ovs', 'resources/neutron_plugins_ovs_puppet', {
'tenant_network_type': 'gre',
})[0]
signals.connect(node1, neutron_plugins_ovs)
signals.connect(neutron_db_user, neutron_plugins_ovs, {
'user_name':'db_user',
'db_name':'db_name',
'user_password':'db_password',
'db_host' : 'db_host'
})
neutron_agents_ovs = vr.create('neutron_agents_ovs', 'resources/neutron_agents_ovs_puppet', {
# NEUTRON ML2 PLUGIN & ML2-OVS AGENT WITH GRE
neutron_plugins_ml2 = vr.create('neutron_plugins_ml2', 'resources/neutron_plugins_ml2_puppet', {})[0]
signals.connect(node1, neutron_plugins_ml2)
neutron_agents_ml2 = vr.create('neutron_agents_ml2', 'resources/neutron_agents_ml2_ovs_puppet', {
# TODO(bogdando) these should come from the node network resource
'enable_tunneling': True,
'tunnel_types': ['gre'],
'local_ip': '10.1.0.13' # should be the IP addr of the br-mesh int.
})[0]
signals.connect(node1, neutron_agents_ovs)
signals.connect(node1, neutron_agents_ml2)
# NEUTRON DHCP, L3, metadata agents
neutron_agents_dhcp = vr.create('neutron_agents_dhcp', 'resources/neutron_agents_dhcp_puppet', {})[0]
@ -285,17 +278,15 @@ def setup_resources():
})
# NEUTRON OVS PLUGIN & AGENT WITH GRE FOR COMPUTE (node2)
neutron_plugins_ovs2 = vr.create('neutron_plugins_ovs2', 'resources/neutron_plugins_ovs_puppet', {})[0]
signals.connect(node2, neutron_plugins_ovs2)
signals.connect(neutron_plugins_ovs, neutron_plugins_ovs2, {
'db_host', 'db_name', 'db_password', 'db_user', 'tenant_network_type'
})
neutron_agents_ovs2 = vr.create('neutron_agents_ovs2', 'resources/neutron_agents_ovs_puppet', {
neutron_plugins_ml22 = vr.create('neutron_plugins_ml22', 'resources/neutron_plugins_ml2_puppet', {})[0]
signals.connect(node2, neutron_plugins_ml22)
neutron_agents_ml22 = vr.create('neutron_agents_ml22', 'resources/neutron_agents_ml2_ovs_puppet', {
# TODO(bogdando) these should come from the node network resource
'enable_tunneling': True,
'tunnel_types': ['gre'],
'local_ip': '10.1.0.14' # Should be the IP addr of the br-mesh int.
})[0]
signals.connect(node2, neutron_agents_ovs2)
signals.connect(node2, neutron_agents_ml22)
# CINDER
cinder_puppet = vr.create('cinder_puppet', 'resources/cinder_puppet', {})[0]
@ -614,9 +605,9 @@ resources_to_run = [
'neutron_keystone_role',
'neutron_puppet',
'neutron_keystone_service_endpoint',
'neutron_plugins_ovs',
'neutron_plugins_ml2',
'neutron_server_puppet',
'neutron_agents_ovs',
'neutron_agents_ml2',
'neutron_agents_dhcp',
'neutron_agents_l3',
'neutron_agents_metadata',
@ -655,8 +646,8 @@ resources_to_run = [
'nova_compute_puppet',
'neutron_puppet2',
'neutron_plugins_ovs2',
'neutron_agents_ovs2',
'neutron_plugins_ml22',
'neutron_agents_ml22',
]
@click.command()

View File

@ -0,0 +1,74 @@
# Neutron OVS agent with ML2 plugin puppet resource
Setups OVS neutron agent when using ML2 plugin
# === Parameters
source https://github.com/openstack/puppet-neutron/blob/5.1.0/manifests/agents/ml2/ovs.pp
``package_ensure``
(optional) The state of the package
Defaults to 'present'
``enabled``
(required) Whether or not to enable the OVS Agent
Defaults to true
``bridge_uplinks``
(optional) List of interfaces to connect to the bridge when doing
bridge mapping.
Defaults to empty list
``bridge_mapping``
(optional) List of <physical_network>:<bridge>
Defaults to empty list
``integration_bridge``
(optional) Integration bridge in OVS
Defaults to 'br-int'
``enable_tunneling``
(optional) Enable or not tunneling
Defaults to false
``tunnel_types``
(optional) List of types of tunnels to use when utilizing tunnels,
either 'gre' or 'vxlan'.
Defaults to false
``local_ip``
(optional) Local IP address of GRE tunnel endpoints.
Required when enabling tunneling
Defaults to false
``tunnel_bridge``
(optional) Bridge used to transport tunnels
Defaults to 'br-tun'
``vxlan_udp_port``
(optional) The UDP port to use for VXLAN tunnels.
Defaults to '4789'
``polling_interval``
(optional) The number of seconds the agent will wait between
polling for local device changes.
Defaults to '2"
``l2_population``
(optional) Extension to use alongside ml2 plugin's l2population
mechanism driver.
Defaults to false
``arp_responder``
(optional) Enable or not the ARP responder.
Recommanded when using l2 population mechanism driver.
Defaults to false
``firewall_driver``
(optional) Firewall driver for realizing neutron security group function.
Defaults to 'neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver'.
``enable_distributed_routing``
(optional) Set to True on L2 agents to enable support
for distributed virtual routing.
Defaults to false

View File

@ -1,4 +1,4 @@
class { 'neutron::agents::ovs':
class { 'neutron::agents::ml2::ovs':
package_ensure => 'absent',
enabled => false,
}

View File

@ -0,0 +1,45 @@
$resource = hiera($::resource_name)
$ip = $resource['input']['ip']['value']
$package_ensure = $resource['input']['package_ensure']['value']
$enabled = $resource['input']['enabled']['value']
$bridge_uplinks = $resource['input']['bridge_uplinks']['value']
$bridge_mappings = $resource['input']['bridge_mappings']['value']
$integration_bridge = $resource['input']['integration_bridge']['value']
$enable_tunneling = $resource['input']['enable_tunneling']['value']
$tunnel_types = $resource['input']['tunnel_types']['value']
$local_ip = $resource['input']['local_ip']['value']
$tunnel_bridge = $resource['input']['tunnel_bridge']['value']
$vxlan_udp_port = $resource['input']['vxlan_udp_port']['value']
$polling_interval = $resource['input']['polling_interval']['value']
$l2_population = $resource['input']['l2_population']['value']
$arp_responder = $resource['input']['arp_responder']['value']
$firewall_driver = $resource['input']['firewall_driver']['value']
$enable_distributed_routing = $resource['input']['enable_distributed_routing']['value']
class { 'neutron::agents::ml2::ovs':
enabled => true,
package_ensure => $package_ensure,
bridge_uplinks => $bridge_uplinks,
bridge_mappings => $bridge_mappings,
integration_bridge => $integration_bridge,
enable_tunneling => $enable_tunneling,
tunnel_types => $tunnel_types,
local_ip => $local_ip,
tunnel_bridge => $tunnel_bridge,
vxlan_udp_port => $vxlan_udp_port,
polling_interval => $polling_interval,
l2_population => $l2_population,
arp_responder => $arp_responder,
firewall_driver => $firewall_driver,
enable_distributed_routing => $enable_distributed_routing,
}
# Remove external class dependency and restore required ones
Service <| title == 'neutron-ovs-agent-service' |> {
require => undef
}
Neutron_plugin_ml2<||> ~> Service['neutron-ovs-agent-service']
File <| title == '/etc/neutron/plugins/openvswitch/ovs_neutron_plugin.ini' |> ~>
Service<| title == 'neutron-ovs-agent-service' |>

View File

@ -1,5 +1,5 @@
handler: puppet
id: 'neutron_agents_ovs_puppet'
id: 'neutron_agents_ml2_ovs_puppet'
input:
ip:
schema: str!
@ -14,6 +14,9 @@ input:
package_ensure:
schema: str
value: 'present'
enabled:
schema: bool
value: true
bridge_uplinks:
schema: [str]
value: []
@ -31,7 +34,7 @@ input:
value: []
local_ip:
schema: str
value:
value: ''
tunnel_bridge:
schema: str
value: 'br-tun'
@ -41,17 +44,23 @@ input:
polling_interval:
schema: int
value: 2
l2_population:
schema: bool
value: false
arp_responder:
schema: bool
value: false
firewall_driver:
schema: str
value: 'neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver'
veth_mtu:
schema: str
value:
enable_distributed_routing:
schema: bool
value: false
git:
schema: {repository: str!, branch: str!}
value: {repository: 'https://github.com/openstack/puppet-neutron', branch: '5.1.0'}
puppet_module: 'neutron'
tags: [resource/neutron, resource/neutron_agents_ovs]
tags: [resource/neutron, resource/neutron_agents_ml2_ovs]
version: 1.0.0

View File

@ -1,5 +0,0 @@
# Neutron OVS agent puppet resource
Setups OVS neutron agent
source https://github.com/openstack/puppet-neutron/blob/5.1.0/manifests/agents/ovs.pp

View File

@ -1,38 +0,0 @@
$resource = hiera($::resource_name)
$ip = $resource['input']['ip']['value']
$package_ensure = $resource['input']['package_ensure']['value']
$bridge_uplinks = $resource['input']['bridge_uplinks']['value']
$bridge_mappings = $resource['input']['bridge_mappings']['value']
$integration_bridge = $resource['input']['integration_bridge']['value']
$enable_tunneling = $resource['input']['enable_tunneling']['value']
$tunnel_types = $resource['input']['tunnel_types']['value']
$local_ip = $resource['input']['local_ip']['value']
$tunnel_bridge = $resource['input']['tunnel_bridge']['value']
$vxlan_udp_port = $resource['input']['vxlan_udp_port']['value']
$polling_interval = $resource['input']['polling_interval']['value']
$firewall_driver = $resource['input']['firewall_driver']['value']
$veth_mtu = $resource['input']['veth_mtu']['value']
class { 'neutron::agents::ovs':
enabled => true,
manage_service => true,
package_ensure => $package_ensure,
bridge_uplinks => $bridge_uplinks,
bridge_mappings => $bridge_mappings,
integration_bridge => $integration_bridge,
enable_tunneling => $enable_tunneling,
tunnel_types => $tunnel_types,
local_ip => $local_ip,
tunnel_bridge => $tunnel_bridge,
vxlan_udp_port => $vxlan_udp_port,
polling_interval => $polling_interval,
firewall_driver => $firewall_driver,
veth_mtu => $veth_mtu,
}
# Remove external class dependency
Service <| title == 'neutron-plugin-ovs-service' |> {
require => undef
}

View File

@ -0,0 +1,83 @@
# Neutron ML2 plugin puppet resource
# === Parameters
source https://github.com/openstack/puppet-neutron/blob/5.1.0/manifests/plugins/ml2.pp
``type_drivers``
(optional) List of network type driver entrypoints to be loaded
from the neutron.ml2.type_drivers namespace.
Could be an array that can have these elements:
local, flat, vlan, gre, vxlan
Defaults to ['local', 'flat', 'vlan', 'gre', 'vxlan'].
``tenant_network_types``
(optional) Ordered 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, flat, vlan, gre, vxlan
Defaults to ['local', 'flat', 'vlan', 'gre', 'vxlan'].
``mechanism_drivers``
(optional) An ordered list of networking mechanism driver
entrypoints to be loaded from the neutron.ml2.mechanism_drivers namespace.
Should be an array that can have these elements:
logger, test, linuxbridge, openvswitch, hyperv, ncs, arista, cisco_nexus,
l2population, sriovnicswitch
Default to ['openvswitch', 'linuxbridge'].
``flat_networks``
(optional) List of physical_network names with which flat networks
can be created. Use * to allow flat networks with arbitrary
physical_network names.
Should be an array.
Default to *.
``network_vlan_ranges``
(optional) List of <physical_network>:<vlan_min>:<vlan_max> or
<physical_network> specifying physical_network names
usable for VLAN provider and tenant networks, as
well as ranges of VLAN tags on each available for
allocation to tenant networks.
Should be an array with vlan_min = 1 & vlan_max = 4094 (IEEE 802.1Q)
Default to empty.
``tunnel_id_ranges``
(optional) Comma-separated list of <tun_min>:<tun_max> tuples
enumerating ranges of GRE tunnel IDs that are
available for tenant network allocation
Should be an array with tun_max +1 - tun_min > 1000000
Default to empty.
``vxlan_group``
(optional) Multicast group for VXLAN.
Multicast group for VXLAN. If unset, disables VXLAN enable sending allocate
broadcast traffic to this multicast group. When left unconfigured, will
disable multicast VXLAN mode
Should be an Multicast IP (v4 or v6) address.
Default to 'None'.
``vni_ranges``
(optional) Comma-separated list of <vni_min>:<vni_max> tuples
enumerating ranges of VXLAN VNI IDs that are
available for tenant network allocation.
Min value is 0 and Max value is 16777215.
Default to empty.
``enable_security_group``
(optional) Controls if neutron security group is enabled or not.
It should be false when you use nova security group.
Defaults to true.
``supported_pci_vendor_devs``
(optional) Supported PCI vendor devices, defined by
vendor_id:product_id according to the PCI ID
Repository. Should be an array of devices.
Defaults to ['15b3:1004', '8086:10ca'] (Intel & Mellanox SR-IOV capable NICs)
``sriov_agent_required``
(optional) SRIOV neutron agent is required for port binding.
Only set to true if SRIOV network adapters support VF link state setting
and if admin state management is desired.
Defaults to false.

View File

@ -0,0 +1,3 @@
class { 'neutron::plugins::ml2':
package_ensure => 'absent',
}

View File

@ -0,0 +1,54 @@
$resource = hiera($::resource_name)
$ip = $resource['input']['ip']['value']
$type_drivers = $resource['input']['type_drivers']['value']
$tenant_network_types = $resource['input']['tenant_network_types']['value']
$mechanism_drivers = $resource['input']['mechanism_drivers']['value']
$flat_networks = $resource['input']['flat_networks']['value']
$network_vlan_ranges = $resource['input']['network_vlan_ranges']['value']
$tunnel_id_ranges = $resource['input']['tunnel_id_ranges']['value']
$vxlan_group = $resource['input']['vxlan_group']['value']
$vni_ranges = $resource['input']['vni_ranges']['value']
$enable_security_group = $resource['input']['enable_security_group']['value']
$package_ensure = $resource['input']['package_ensure']['value']
$supported_pci_vendor_devs = $resource['input']['supported_pci_vendor_devs']['value']
$sriov_agent_required = $resource['input']['sriov_agent_required']['value']
# LP1490438
file {'/etc/default/neutron-server':
ensure => present,
owner => 'root',
group => 'root',
mode => 644
} ->
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 => $vni_ranges,
enable_security_group => $enable_security_group,
package_ensure => $package_ensure,
supported_pci_vendor_devs => $supported_pci_vendor_devs,
sriov_agent_required => $sriov_agent_required,
} ->
exec { 'neutron-db-sync':
provider => 'shell',
command => "${command} stamp head",
path => [ '/usr/bin', '/bin' ],
onlyif => "${command} current | grep -qE '^Current revision.*None$' "
}
include neutron::params
package { 'neutron':
ensure => $package_ensure,
name => $::neutron::params::package_name,
before => Exec['neutron-db-sync']
}

View File

@ -0,0 +1,57 @@
handler: puppet
id: 'neutron_plugins_ml2_puppet'
input:
ip:
schema: str!
value:
ssh_key:
schema: str!
value:
ssh_user:
schema: str!
value:
type_drivers:
schema: [str]
value: ['local', 'flat', 'vlan', 'gre', 'vxlan']
tenant_network_types:
schema: [str]
value: ['local', 'flat', 'vlan', 'gre', 'vxlan']
mechanism_drivers:
schema: [str]
value: ['openvswitch', 'linuxbridge']
flat_networks:
schema: [str]
value: ['*']
network_vlan_ranges:
schema: [str]
value: ['physnet1:1000:2999']
tunnel_id_ranges:
schema: [str]
value: ['20:100']
vxlan_group:
schema: str
value: '224.0.0.1'
vni_ranges:
schema: [str]
value: ['10:100']
enable_security_group:
schema: bool
value: true
package_ensure:
schema: str
value: 'present'
supported_pci_vendor_devs:
schema: [str]
value: ['15b3:1004', '8086:10ca']
sriov_agent_required:
schema: bool
value: false
git:
schema: {repository: str!, branch: str!}
value: {repository: 'https://github.com/openstack/puppet-neutron', branch: '5.1.0'}
puppet_module: 'neutron'
tags: [resource/neutron, resource/neutron_plugins_ml2]
version: 1.0.0

View File

@ -1,17 +0,0 @@
# Neutron OVS plugin puppet resource
Configure the neutron server to use the OVS plugin.
This configures the plugin for the API server, but does nothing
about configuring the agents that must also run and share a config
file with the OVS plugin if both are on the same machine.
Note, this plugin was deprecated, you may want to use the ML2 plugin instead.
NB: don't need tunnel ID range when using VLANs,
*but* you do need the network vlan range regardless of type,
because the list of networks there is still important
even if the ranges aren't specified
if type is vlan or flat, a default of physnet1:1000:2000 is used
otherwise this will not be set by default.
source https://github.com/openstack/puppet-neutron/blob/5.1.0/manifests/plugins/ovs.pp

View File

@ -1,15 +0,0 @@
class { 'neutron::plugins::ovs':
package_ensure => 'absent',
}
include neutron::params
package { 'neutron':
ensure => 'absent',
name => $::neutron::params::package_name,
}
# Remove external class dependency
Service <| title == 'neutron-plugin-ovs-service' |> {
require => undef
}

View File

@ -1,51 +0,0 @@
$resource = hiera($::resource_name)
$ip = $resource['input']['ip']['value']
$db_user = $resource['input']['db_user']['value']
$db_host = $resource['input']['db_host']['value']
$db_password = $resource['input']['db_password']['value']
$db_name = $resource['input']['db_name']['value']
$package_ensure = $resource['input']['package_ensure']['value']
$sql_max_retries = $resource['input']['sql_max_retries']['value']
$sql_idle_timeout = $resource['input']['sql_idle_timeout']['value']
$reconnect_interval = $resource['input']['reconnect_interval']['value']
$tenant_network_type = $resource['input']['tenant_network_type']['value']
$network_vlan_ranges = $resource['input']['network_vlan_ranges']['value']
$tunnel_id_ranges = $resource['input']['tunnel_id_ranges']['value']
$vxlan_udp_port = $resource['input']['vxlan_udp_port']['value']
# Stamp neutron head, if current version is None, or upgrade head would fail later
$command = '/usr/bin/neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugin.ini'
class { 'neutron::plugins::ovs':
package_ensure => $package_ensure,
sql_connection => "mysql://${db_user}:${db_password}@${db_host}/${db_name}",
sql_max_retries => $sql_max_retries,
sql_idle_timeout => $sql_idle_timeout,
reconnect_interval => $reconnect_interval,
tenant_network_type => $tenant_network_type,
network_vlan_ranges => $network_vlan_ranges,
tunnel_id_ranges => $tunnel_id_ranges,
vxlan_udp_port => $vxlan_udp_port,
} ->
exec { 'neutron-db-sync':
provider => 'shell',
command => "${command} stamp head",
path => [ '/usr/bin', '/bin' ],
onlyif => "${command} current | grep -qE '^Current revision.*None$' "
}
include neutron::params
package { 'neutron':
ensure => $package_ensure,
name => $::neutron::params::package_name,
before => Exec['neutron-db-sync']
}
# Remove external class dependency
Service <| title == 'neutron-plugin-ovs-service' |> {
require => undef
}

View File

@ -1,58 +0,0 @@
handler: puppet
id: 'neutron_plugins_ovs_puppet'
input:
ip:
schema: str!
value:
ssh_key:
schema: str!
value:
ssh_user:
schema: str!
value:
package_ensure:
schema: str
value: 'present'
sql_max_retries:
schema: str
value:
sql_idle_timeout:
schema: str
value:
reconnect_interval:
schema: str
value:
tenant_network_type:
schema: str
value: 'vlan'
network_vlan_ranges:
schema: str
value:
tunnel_id_ranges:
schema: str
value: '1:1000'
vxlan_udp_port:
schema: int
value: 4789
db_user:
schema: str!
value:
db_password:
schema: str!
value:
db_name:
schema: str!
value:
db_host:
schema: str!
value:
git:
schema: {repository: str!, branch: str!}
value: {repository: 'https://github.com/openstack/puppet-neutron', branch: '5.1.0'}
puppet_module: 'neutron'
tags: [resource/neutron, resource/neutron_plugins_ovs]
version: 1.0.0