VXLAN support

This patch adds support for VXLAN for Neutron monolithic OVS plugin.

Change-Id: Ib5163b770817a9c1530fcbb7b2b10a8e214ab815
Fixes: rhbz#1021778
(cherry picked from commit d725f04300)
This commit is contained in:
Martin Magr
2014-01-15 17:02:07 +01:00
parent 101c3e0e1d
commit d9b77e32da
3 changed files with 70 additions and 23 deletions

View File

@@ -152,7 +152,7 @@ def initConfig(controllerObject):
],
"NEUTRON_LB_PLUGIN" : [
{"CMD_OPTION" : "neutron-lb-tenant-network-type",
"USAGE" : "The type of network to allocate for tenant networks (eg. vlan, local, gre)",
"USAGE" : "The type of network to allocate for tenant networks (eg. vlan, local)",
"PROMPT" : "Enter the type of network to allocate for tenant networks",
"OPTION_LIST" : ["local", "vlan"],
"VALIDATORS" : [validators.validate_options],
@@ -192,9 +192,9 @@ def initConfig(controllerObject):
],
"NEUTRON_OVS_PLUGIN" : [
{"CMD_OPTION" : "neutron-ovs-tenant-network-type",
"USAGE" : "Type of network to allocate for tenant networks (eg. vlan, local, gre)",
"USAGE" : "Type of network to allocate for tenant networks (eg. vlan, local, gre, vxlan)",
"PROMPT" : "Enter the type of network to allocate for tenant networks",
"OPTION_LIST" : ["local", "vlan", "gre"],
"OPTION_LIST" : ["local", "vlan", "gre", "vxlan"],
"VALIDATORS" : [validators.validate_options],
"DEFAULT_VALUE" : "local",
"MASK_INPUT" : False,
@@ -242,7 +242,7 @@ def initConfig(controllerObject):
"NEED_CONFIRM" : False,
"CONDITION" : False },
],
"NEUTRON_OVS_PLUGIN_GRE" : [
"NEUTRON_OVS_PLUGIN_TUNNEL" : [
{"CMD_OPTION" : "neutron-ovs-tunnel-ranges",
"USAGE" : "A comma separated list of tunnel ranges for the Neutron openvswitch plugin (eg. 1:1000)",
"PROMPT" : "Enter a comma separated list of tunnel ranges for the Neutron openvswitch plugin",
@@ -256,16 +256,31 @@ def initConfig(controllerObject):
"NEED_CONFIRM" : False,
"CONDITION" : False },
],
"NEUTRON_OVS_PLUGIN_AND_AGENT_GRE" : [
"NEUTRON_OVS_PLUGIN_AND_AGENT_TUNNEL" : [
{"CMD_OPTION" : "neutron-ovs-tunnel-if",
"USAGE" : "The interface for the OVS tunnel. Packstack will override the IP address used for GRE tunnels on this hypervisor to the IP found on the specified interface. (eg. eth1) ",
"PROMPT" : "Enter interface with IP to override the default the GRE local_ip",
"USAGE" : "The interface for the OVS tunnel. Packstack will override the IP address used for tunnels on this hypervisor to the IP found on the specified interface. (eg. eth1) ",
"PROMPT" : "Enter interface with IP to override the default tunnel local_ip",
"OPTION_LIST" : [],
"VALIDATORS" : [],
"DEFAULT_VALUE" : "",
"MASK_INPUT" : False,
"LOOSE_VALIDATION": True,
"CONF_NAME" : "CONFIG_NEUTRON_OVS_TUNNEL_IF",
"USE_DEFAULT" : False,
"NEED_CONFIRM" : False,
"CONDITION" : False },
],
"NEUTRON_OVS_PLUGIN_AND_AGENT_VXLAN" : [
{"CMD_OPTION" : "neutron-ovs-vxlan-udp-port",
"CONF_NAME" : "CONFIG_NEUTRON_OVS_VXLAN_UDP_PORT",
"USAGE" : "VXLAN UDP port",
"PROMPT" : "Enter VXLAN UDP port number",
"OPTION_LIST" : [],
"VALIDATORS" : [validators.validate_port],
"DEFAULT_VALUE" : 4789,
"MASK_INPUT" : False,
"LOOSE_VALIDATION": True,
"USE_DEFAULT" : False,
"NEED_CONFIRM" : False,
"CONDITION" : False },
@@ -451,19 +466,24 @@ def initConfig(controllerObject):
config["CONFIG_NEUTRON_L2_AGENT"] = 'openvswitch'
return result
def use_openvswitch_plugin_gre(config):
def use_openvswitch_plugin_tunnel(config):
tun_types = ('gre', 'vxlan')
return (use_openvswitch_plugin(config) and
config['CONFIG_NEUTRON_OVS_TENANT_NETWORK_TYPE'] == 'gre')
config['CONFIG_NEUTRON_OVS_TENANT_NETWORK_TYPE'] in tun_types)
def use_ml2_with_ovs(config):
return (use_ml2_plugin(config) and
config["CONFIG_NEUTRON_L2_AGENT"] == 'openvswitch')
def use_openvswitch_agent(config):
ml2_used = (use_ml2_plugin(config) and
config["CONFIG_NEUTRON_L2_AGENT"] == 'openvswitch')
return use_openvswitch_plugin(config) or ml2_used
return use_openvswitch_plugin(config) or use_ml2_with_ovs(config)
def use_openvswitch_agent_gre(config):
ml2_used = (use_ml2_plugin(config) and
config["CONFIG_NEUTRON_L2_AGENT"] == 'openvswitch')
return use_openvswitch_plugin_gre(config) or ml2_used
def use_openvswitch_agent_tunnel(config):
return use_openvswitch_plugin_tunnel(config) or use_ml2_with_ovs(config)
def use_openvswitch_vxlan(config):
return (use_openvswitch_plugin_tunnel(config) and
config['CONFIG_NEUTRON_OVS_TENANT_NETWORK_TYPE'] == 'vxlan')
conf_groups = [
@@ -503,15 +523,21 @@ def initConfig(controllerObject):
"PRE_CONDITION_MATCH" : True,
"POST_CONDITION" : False,
"POST_CONDITION_MATCH" : True },
{ "GROUP_NAME" : "NEUTRON_OVS_PLUGIN_GRE",
"DESCRIPTION" : "Neutron OVS plugin config for GRE tunnels",
"PRE_CONDITION" : use_openvswitch_plugin_gre,
{ "GROUP_NAME" : "NEUTRON_OVS_PLUGIN_TUNNEL",
"DESCRIPTION" : "Neutron OVS plugin config for tunnels",
"PRE_CONDITION" : use_openvswitch_plugin_tunnel,
"PRE_CONDITION_MATCH" : True,
"POST_CONDITION" : False,
"POST_CONDITION_MATCH" : True },
{ "GROUP_NAME" : "NEUTRON_OVS_PLUGIN_AND_AGENT_GRE",
"DESCRIPTION" : "Neutron OVS agent config for GRE tunnels",
"PRE_CONDITION" : use_openvswitch_agent_gre,
{ "GROUP_NAME" : "NEUTRON_OVS_PLUGIN_AND_AGENT_TUNNEL",
"DESCRIPTION" : "Neutron OVS agent config for tunnels",
"PRE_CONDITION" : use_openvswitch_agent_tunnel,
"PRE_CONDITION_MATCH" : True,
"POST_CONDITION" : False,
"POST_CONDITION_MATCH" : True },
{ "GROUP_NAME" : "NEUTRON_OVS_PLUGIN_AND_AGENT_VXLAN",
"DESCRIPTION" : "Neutron OVS agent config for VXLAN",
"PRE_CONDITION" : use_openvswitch_vxlan,
"PRE_CONDITION_MATCH" : True,
"POST_CONDITION" : False,
"POST_CONDITION_MATCH" : True },
@@ -697,7 +723,7 @@ def get_agent_type(config):
"['local']").strip('[]')
tenant_types = [i.strip('"\'') for i in tenant_types.split(',')]
for i in ['gre', 'vlan']: # will add vxlan later
for i in ['gre', 'vxlan', 'vlan']:
if i in tenant_types:
return i
return tenant_types[0]

View File

@@ -0,0 +1,14 @@
if "%(CONFIG_NEUTRON_OVS_TUNNEL_IF)s" {
$localip = $ipaddress_%(CONFIG_NEUTRON_OVS_TUNNEL_IF)s
} else {
$localip = '%(CONFIG_NEUTRON_OVS_HOST)s'
}
class { 'neutron::agents::ovs':
bridge_mappings => %(CONFIG_NEUTRON_OVS_BRIDGE_MAPPINGS)s,
enable_tunneling => true,
tunnel_types => ['vxlan'],
local_ip => $localip,
vxlan_udp_port => %(CONFIG_NEUTRON_OVS_VXLAN_UDP_PORT)s,
}

View File

@@ -0,0 +1,7 @@
class { 'neutron::plugins::ovs':
tenant_network_type => '%(CONFIG_NEUTRON_OVS_TENANT_NETWORK_TYPE)s',
network_vlan_ranges => '%(CONFIG_NEUTRON_OVS_VLAN_RANGES)s',
tunnel_id_ranges => '%(CONFIG_NEUTRON_OVS_TUNNEL_RANGES)s',
vxlan_udp_port => %(CONFIG_NEUTRON_OVS_VXLAN_UDP_PORT)s,
}