Merge "Remove deprecated use_namespaces option"

This commit is contained in:
Jenkins 2015-11-19 14:45:43 +00:00 committed by Gerrit Code Review
commit a93b889ae5
35 changed files with 109 additions and 287 deletions

View File

@ -30,12 +30,6 @@
# no additional setup of the DHCP server. # no additional setup of the DHCP server.
# dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq # dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
# Allow overlapping IP (Must have kernel build with CONFIG_NET_NS=y and
# iproute2 package that supports namespaces). This option is deprecated and
# will be removed in a future release, at which point the old behavior of
# use_namespaces = True will be enforced.
# use_namespaces = True
# In some cases the neutron router is not present to provide the metadata # In some cases the neutron router is not present to provide the metadata
# IP but the DHCP server can be used to provide this info. Setting this # IP but the DHCP server can be used to provide this info. Setting this
# value will force the DHCP server to append specific host routes to the # value will force the DHCP server to append specific host routes to the

View File

@ -18,15 +18,8 @@
# Example of interface_driver option for LinuxBridge # Example of interface_driver option for LinuxBridge
# interface_driver = linuxbridge # interface_driver = linuxbridge
# Allow overlapping IP (Must have kernel build with CONFIG_NET_NS=y and # If non-empty, the l3 agent can only configure a router that has the matching
# iproute2 package that supports namespaces). This option is deprecated and # router ID.
# will be removed in a future release, at which point the old behavior of
# use_namespaces = True will be enforced.
# use_namespaces = True
# If use_namespaces is set as False then the agent can only configure one router.
# This is done by setting the specific router_id.
# router_id = # router_id =
# When external_network_bridge is set, each L3 agent can be associated # When external_network_bridge is set, each L3 agent can be associated

View File

@ -14,7 +14,3 @@
# report_interval = 300 # report_interval = 300
# interface_driver = neutron.agent.linux.interface.OVSInterfaceDriver # interface_driver = neutron.agent.linux.interface.OVSInterfaceDriver
# This option is deprecated and will be removed in a future release,
# at which point the old behavior of use_namespaces = True will be enforced.
# use_namespaces = True

View File

@ -54,13 +54,6 @@ INTERFACE_DRIVER_OPTS = [
help=_("The driver used to manage the virtual interface.")), help=_("The driver used to manage the virtual interface.")),
] ]
USE_NAMESPACES_OPTS = [
cfg.BoolOpt('use_namespaces', default=True,
help=_("Allow overlapping IP. This option is deprecated and "
"will be removed in a future release."),
deprecated_for_removal=True),
]
IPTABLES_OPTS = [ IPTABLES_OPTS = [
cfg.BoolOpt('comment_iptables_rules', default=True, cfg.BoolOpt('comment_iptables_rules', default=True,
help=_("Add comments to iptables rules.")), help=_("Add comments to iptables rules.")),
@ -148,10 +141,6 @@ def register_interface_driver_opts_helper(conf):
conf.register_opts(INTERFACE_DRIVER_OPTS) conf.register_opts(INTERFACE_DRIVER_OPTS)
def register_use_namespaces_opts_helper(conf):
conf.register_opts(USE_NAMESPACES_OPTS)
def register_iptables_opts(conf): def register_iptables_opts(conf):
conf.register_opts(IPTABLES_OPTS, 'AGENT') conf.register_opts(IPTABLES_OPTS, 'AGENT')

View File

@ -58,9 +58,7 @@ class DhcpAgent(manager.Manager):
self.cache = NetworkCache() self.cache = NetworkCache()
self.dhcp_driver_cls = importutils.import_class(self.conf.dhcp_driver) self.dhcp_driver_cls = importutils.import_class(self.conf.dhcp_driver)
ctx = context.get_admin_context_without_session() ctx = context.get_admin_context_without_session()
self.plugin_rpc = DhcpPluginApi(topics.PLUGIN, self.plugin_rpc = DhcpPluginApi(topics.PLUGIN, ctx, self.conf.host)
ctx, self.conf.use_namespaces,
self.conf.host)
# create dhcp dir to store dhcp info # create dhcp dir to store dhcp info
dhcp_dir = os.path.dirname("/%s/dhcp/" % self.conf.state_path) dhcp_dir = os.path.dirname("/%s/dhcp/" % self.conf.state_path)
utils.ensure_dir(dhcp_dir) utils.ensure_dir(dhcp_dir)
@ -80,10 +78,7 @@ class DhcpAgent(manager.Manager):
self.conf self.conf
) )
for net_id in existing_networks: for net_id in existing_networks:
net = dhcp.NetModel(self.conf.use_namespaces, net = dhcp.NetModel({"id": net_id, "subnets": [], "ports": []})
{"id": net_id,
"subnets": [],
"ports": []})
self.cache.put(net) self.cache.put(net)
except NotImplementedError: except NotImplementedError:
# just go ahead with an empty networks cache # just go ahead with an empty networks cache
@ -250,8 +245,7 @@ class DhcpAgent(manager.Manager):
"""Disable DHCP for a network known to the agent.""" """Disable DHCP for a network known to the agent."""
network = self.cache.get_network_by_id(network_id) network = self.cache.get_network_by_id(network_id)
if network: if network:
if (self.conf.use_namespaces and if self.conf.enable_isolated_metadata:
self.conf.enable_isolated_metadata):
# NOTE(jschwarz): In the case where a network is deleted, all # NOTE(jschwarz): In the case where a network is deleted, all
# the subnets and ports are deleted before this function is # the subnets and ports are deleted before this function is
# called, so checking if 'should_enable_metadata' is True # called, so checking if 'should_enable_metadata' is True
@ -406,10 +400,9 @@ class DhcpPluginApi(object):
""" """
def __init__(self, topic, context, use_namespaces, host): def __init__(self, topic, context, host):
self.context = context self.context = context
self.host = host self.host = host
self.use_namespaces = use_namespaces
target = oslo_messaging.Target( target = oslo_messaging.Target(
topic=topic, topic=topic,
namespace=constants.RPC_NAMESPACE_DHCP_PLUGIN, namespace=constants.RPC_NAMESPACE_DHCP_PLUGIN,
@ -421,7 +414,7 @@ class DhcpPluginApi(object):
cctxt = self.client.prepare(version='1.1') cctxt = self.client.prepare(version='1.1')
networks = cctxt.call(self.context, 'get_active_networks_info', networks = cctxt.call(self.context, 'get_active_networks_info',
host=self.host) host=self.host)
return [dhcp.NetModel(self.use_namespaces, n) for n in networks] return [dhcp.NetModel(n) for n in networks]
def get_network_info(self, network_id): def get_network_info(self, network_id):
"""Make a remote process call to retrieve network info.""" """Make a remote process call to retrieve network info."""
@ -429,7 +422,7 @@ class DhcpPluginApi(object):
network = cctxt.call(self.context, 'get_network_info', network = cctxt.call(self.context, 'get_network_info',
network_id=network_id, host=self.host) network_id=network_id, host=self.host)
if network: if network:
return dhcp.NetModel(self.use_namespaces, network) return dhcp.NetModel(network)
def create_dhcp_port(self, port): def create_dhcp_port(self, port):
"""Make a remote process call to create the dhcp port.""" """Make a remote process call to create the dhcp port."""
@ -547,7 +540,6 @@ class DhcpAgentWithStateReport(DhcpAgent):
'topic': topics.DHCP_AGENT, 'topic': topics.DHCP_AGENT,
'configurations': { 'configurations': {
'dhcp_driver': self.conf.dhcp_driver, 'dhcp_driver': self.conf.dhcp_driver,
'use_namespaces': self.conf.use_namespaces,
'dhcp_lease_duration': self.conf.dhcp_lease_duration, 'dhcp_lease_duration': self.conf.dhcp_lease_duration,
'log_agent_heartbeats': self.conf.AGENT.log_agent_heartbeats}, 'log_agent_heartbeats': self.conf.AGENT.log_agent_heartbeats},
'start_flag': True, 'start_flag': True,

View File

@ -30,7 +30,6 @@ from neutron import service as neutron_service
def register_options(conf): def register_options(conf):
config.register_interface_driver_opts_helper(conf) config.register_interface_driver_opts_helper(conf)
config.register_use_namespaces_opts_helper(conf)
config.register_agent_state_opts_helper(conf) config.register_agent_state_opts_helper(conf)
config.register_availability_zone_opts_helper(conf) config.register_availability_zone_opts_helper(conf)
conf.register_opts(dhcp_config.DHCP_AGENT_OPTS) conf.register_opts(dhcp_config.DHCP_AGENT_OPTS)

View File

@ -226,7 +226,6 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback,
self.namespaces_manager = namespace_manager.NamespaceManager( self.namespaces_manager = namespace_manager.NamespaceManager(
self.conf, self.conf,
self.driver, self.driver,
self.conf.use_namespaces,
self.metadata_driver) self.metadata_driver)
self._queue = queue.RouterProcessingQueue() self._queue = queue.RouterProcessingQueue()
@ -252,11 +251,6 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback,
LOG.error(msg) LOG.error(msg)
raise SystemExit(1) raise SystemExit(1)
if not self.conf.use_namespaces and not self.conf.router_id:
msg = _LE('Router id is required if not using namespaces.')
LOG.error(msg)
raise SystemExit(1)
if self.conf.ipv6_gateway: if self.conf.ipv6_gateway:
# ipv6_gateway configured. Check for valid v6 link-local address. # ipv6_gateway configured. Check for valid v6 link-local address.
try: try:
@ -406,10 +400,7 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback,
self.conf.external_network_bridge) self.conf.external_network_bridge)
return return
# If namespaces are disabled, only process the router associated if self.conf.router_id and router['id'] != self.conf.router_id:
# with the configured agent id.
if (not self.conf.use_namespaces and
router['id'] != self.conf.router_id):
raise n_exc.RouterNotCompatibleWithAgent(router_id=router['id']) raise n_exc.RouterNotCompatibleWithAgent(router_id=router['id'])
# Either ex_net_id or handle_internal_only_routers must be set # Either ex_net_id or handle_internal_only_routers must be set
@ -539,12 +530,11 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback,
timestamp = timeutils.utcnow() timestamp = timeutils.utcnow()
try: try:
if self.conf.use_namespaces: if self.conf.router_id:
routers = self.plugin_rpc.get_routers(context)
else:
routers = self.plugin_rpc.get_routers(context, routers = self.plugin_rpc.get_routers(context,
[self.conf.router_id]) [self.conf.router_id])
else:
routers = self.plugin_rpc.get_routers(context)
except oslo_messaging.MessagingException: except oslo_messaging.MessagingException:
LOG.exception(_LE("Failed synchronizing routers due to RPC error")) LOG.exception(_LE("Failed synchronizing routers due to RPC error"))
raise n_exc.AbortSyncRouters() raise n_exc.AbortSyncRouters()
@ -607,7 +597,6 @@ class L3NATAgentWithStateReport(L3NATAgent):
'topic': topics.L3_AGENT, 'topic': topics.L3_AGENT,
'configurations': { 'configurations': {
'agent_mode': self.conf.agent_mode, 'agent_mode': self.conf.agent_mode,
'use_namespaces': self.conf.use_namespaces,
'router_id': self.conf.router_id, 'router_id': self.conf.router_id,
'handle_internal_only_routers': 'handle_internal_only_routers':
self.conf.handle_internal_only_routers, self.conf.handle_internal_only_routers,

View File

@ -49,8 +49,8 @@ OPTS = [
help=_("Send this many gratuitous ARPs for HA setup, if " help=_("Send this many gratuitous ARPs for HA setup, if "
"less than or equal to 0, the feature is disabled")), "less than or equal to 0, the feature is disabled")),
cfg.StrOpt('router_id', default='', cfg.StrOpt('router_id', default='',
help=_("If namespaces is disabled, the l3 agent can only " help=_("If non-empty, the l3 agent can only configure a router "
"configure a router that has the matching router ID.")), "that has the matching router ID.")),
cfg.BoolOpt('handle_internal_only_routers', cfg.BoolOpt('handle_internal_only_routers',
default=True, default=True,
help=_("Agent should implement routers with no gateway")), help=_("Agent should implement routers with no gateway")),

View File

@ -54,13 +54,7 @@ class DvrLocalRouter(dvr_router_base.DvrRouterBase):
return [i for i in floating_ips if i['host'] == self.host] return [i for i in floating_ips if i['host'] == self.host]
def _handle_fip_nat_rules(self, interface_name): def _handle_fip_nat_rules(self, interface_name):
"""Configures NAT rules for Floating IPs for DVR. """Configures NAT rules for Floating IPs for DVR."""
Remove all the rules. This is safe because if
use_namespaces is set as False then the agent can
only configure one router, otherwise each router's
NAT rules will be in their own namespace.
"""
self.iptables_manager.ipv4['nat'].empty_chain('POSTROUTING') self.iptables_manager.ipv4['nat'].empty_chain('POSTROUTING')
self.iptables_manager.ipv4['nat'].empty_chain('snat') self.iptables_manager.ipv4['nat'].empty_chain('snat')

View File

@ -49,17 +49,16 @@ class NamespaceManager(object):
dvr_fip_ns.FIP_NS_PREFIX: dvr_fip_ns.FipNamespace, dvr_fip_ns.FIP_NS_PREFIX: dvr_fip_ns.FipNamespace,
} }
def __init__(self, agent_conf, driver, clean_stale, metadata_driver=None): def __init__(self, agent_conf, driver, metadata_driver=None):
"""Initialize the NamespaceManager. """Initialize the NamespaceManager.
:param agent_conf: configuration from l3 agent :param agent_conf: configuration from l3 agent
:param driver: to perform operations on devices :param driver: to perform operations on devices
:param clean_stale: Whether to try to clean stale namespaces
:param metadata_driver: used to cleanup stale metadata proxy processes :param metadata_driver: used to cleanup stale metadata proxy processes
""" """
self.agent_conf = agent_conf self.agent_conf = agent_conf
self.driver = driver self.driver = driver
self._clean_stale = clean_stale self._clean_stale = True
self.metadata_driver = metadata_driver self.metadata_driver = metadata_driver
if metadata_driver: if metadata_driver:
self.process_monitor = external_process.ProcessMonitor( self.process_monitor = external_process.ProcessMonitor(

View File

@ -49,13 +49,10 @@ class RouterInfo(object):
# Invoke the setter for establishing initial SNAT action # Invoke the setter for establishing initial SNAT action
self.router = router self.router = router
self.use_ipv6 = use_ipv6 self.use_ipv6 = use_ipv6
self.ns_name = None ns = namespaces.RouterNamespace(
self.router_namespace = None router_id, agent_conf, interface_driver, use_ipv6)
if agent_conf.use_namespaces: self.router_namespace = ns
ns = namespaces.RouterNamespace( self.ns_name = ns.name
router_id, agent_conf, interface_driver, use_ipv6)
self.router_namespace = ns
self.ns_name = ns.name
self.iptables_manager = iptables_manager.IptablesManager( self.iptables_manager = iptables_manager.IptablesManager(
use_ipv6=use_ipv6, use_ipv6=use_ipv6,
namespace=self.ns_name) namespace=self.ns_name)
@ -81,8 +78,7 @@ class RouterInfo(object):
process_monitor, process_monitor,
self.get_internal_device_name) self.get_internal_device_name)
if self.router_namespace: self.router_namespace.create()
self.router_namespace.create()
@property @property
def router(self): def router(self):
@ -267,8 +263,7 @@ class RouterInfo(object):
self.router[l3_constants.FLOATINGIP_KEY] = [] self.router[l3_constants.FLOATINGIP_KEY] = []
self.process(agent) self.process(agent)
self.disable_radvd() self.disable_radvd()
if self.router_namespace: self.router_namespace.delete()
self.router_namespace.delete()
def _internal_network_updated(self, port, subnet_id, prefix, old_prefix, def _internal_network_updated(self, port, subnet_id, prefix, old_prefix,
updated_cidrs): updated_cidrs):

View File

@ -36,7 +36,6 @@ def register_opts(conf):
conf.register_opts(metadata_config.SHARED_OPTS) conf.register_opts(metadata_config.SHARED_OPTS)
conf.register_opts(ha.OPTS) conf.register_opts(ha.OPTS)
config.register_interface_driver_opts_helper(conf) config.register_interface_driver_opts_helper(conf)
config.register_use_namespaces_opts_helper(conf)
config.register_agent_state_opts_helper(conf) config.register_agent_state_opts_helper(conf)
conf.register_opts(interface.OPTS) conf.register_opts(interface.OPTS)
conf.register_opts(external_process.OPTS) conf.register_opts(external_process.OPTS)

View File

@ -103,11 +103,10 @@ class DictModel(dict):
class NetModel(DictModel): class NetModel(DictModel):
def __init__(self, use_namespaces, d): def __init__(self, d):
super(NetModel, self).__init__(d) super(NetModel, self).__init__(d)
self._ns_name = (use_namespaces and self._ns_name = "%s%s" % (NS_PREFIX, self.id)
"%s%s" % (NS_PREFIX, self.id) or None)
@property @property
def namespace(self): def namespace(self):
@ -232,13 +231,12 @@ class DhcpLocalProcess(DhcpBase):
LOG.warning(_LW('Failed trying to delete interface: %s'), LOG.warning(_LW('Failed trying to delete interface: %s'),
self.interface_name) self.interface_name)
if self.network.namespace: ns_ip = ip_lib.IPWrapper(namespace=self.network.namespace)
ns_ip = ip_lib.IPWrapper(namespace=self.network.namespace) try:
try: ns_ip.netns.delete(self.network.namespace)
ns_ip.netns.delete(self.network.namespace) except RuntimeError:
except RuntimeError: LOG.warning(_LW('Failed trying to delete namespace: %s'),
LOG.warning(_LW('Failed trying to delete namespace: %s'), self.network.namespace)
self.network.namespace)
def _get_value_from_conf_file(self, kind, converter=None): def _get_value_from_conf_file(self, kind, converter=None):
"""A helper function to read a value from one of the state files.""" """A helper function to read a value from one of the state files."""
@ -971,7 +969,7 @@ class Dnsmasq(DhcpLocalProcess):
for s in network.subnets): for s in network.subnets):
return True return True
if not conf.use_namespaces or not conf.enable_isolated_metadata: if not conf.enable_isolated_metadata:
return False return False
isolated_subnets = cls.get_isolated_subnets(network) isolated_subnets = cls.get_isolated_subnets(network)
@ -1222,34 +1220,25 @@ class DeviceManager(object):
net = netaddr.IPNetwork(subnet.cidr) net = netaddr.IPNetwork(subnet.cidr)
ip_cidrs.append('%s/%s' % (gateway, net.prefixlen)) ip_cidrs.append('%s/%s' % (gateway, net.prefixlen))
if (self.conf.enable_isolated_metadata and if self.conf.enable_isolated_metadata:
self.conf.use_namespaces):
ip_cidrs.append(METADATA_DEFAULT_CIDR) ip_cidrs.append(METADATA_DEFAULT_CIDR)
self.driver.init_l3(interface_name, ip_cidrs, self.driver.init_l3(interface_name, ip_cidrs,
namespace=network.namespace) namespace=network.namespace)
# ensure that the dhcp interface is first in the list self._set_default_route(network, interface_name)
if network.namespace is None: try:
device = ip_lib.IPDevice(interface_name) self._cleanup_stale_devices(network, port)
device.route.pullup_route(interface_name, except Exception:
ip_version=constants.IP_VERSION_4) # catch everything as we don't want to fail because of
# cleanup step
if self.conf.use_namespaces: LOG.error(_LE("Exception during stale dhcp device cleanup"))
self._set_default_route(network, interface_name)
try:
self._cleanup_stale_devices(network, port)
except Exception:
# catch everything as we don't want to fail because of
# cleanup step
LOG.error(_LE("Exception during stale dhcp device cleanup"))
return interface_name return interface_name
def update(self, network, device_name): def update(self, network, device_name):
"""Update device settings for the network's DHCP on this host.""" """Update device settings for the network's DHCP on this host."""
if self.conf.use_namespaces: self._set_default_route(network, device_name)
self._set_default_route(network, device_name)
def destroy(self, network, device_name): def destroy(self, network, device_name):
"""Destroy the device used for the network's DHCP on this host.""" """Destroy the device used for the network's DHCP on this host."""

View File

@ -13,6 +13,7 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
import debtcollector
import eventlet import eventlet
import netaddr import netaddr
import os import os
@ -722,6 +723,7 @@ class IpRouteCommand(IpDeviceCommandBase):
return retval return retval
@debtcollector.removals.remove(message="Will be removed in the N cycle.")
def pullup_route(self, interface_name, ip_version): def pullup_route(self, interface_name, ip_version):
"""Ensures that the route entry for the interface is before all """Ensures that the route entry for the interface is before all
others on the same subnet. others on the same subnet.

View File

@ -69,7 +69,6 @@ def setup_conf():
conf = cfg.CONF conf = cfg.CONF
conf.register_cli_opts(cli_opts) conf.register_cli_opts(cli_opts)
agent_config.register_interface_driver_opts_helper(conf) agent_config.register_interface_driver_opts_helper(conf)
agent_config.register_use_namespaces_opts_helper(conf)
conf.register_opts(dhcp_config.DHCP_AGENT_OPTS) conf.register_opts(dhcp_config.DHCP_AGENT_OPTS)
conf.register_opts(dhcp_config.DHCP_OPTS) conf.register_opts(dhcp_config.DHCP_OPTS)
conf.register_opts(dhcp_config.DNSMASQ_OPTS) conf.register_opts(dhcp_config.DNSMASQ_OPTS)
@ -90,7 +89,7 @@ def kill_dhcp(conf, namespace):
conf.dhcp_driver, conf.dhcp_driver,
conf=conf, conf=conf,
process_monitor=_get_dhcp_process_monitor(conf), process_monitor=_get_dhcp_process_monitor(conf),
network=dhcp.NetModel(conf.use_namespaces, {'id': network_id}), network=dhcp.NetModel({'id': network_id}),
plugin=FakeDhcpPlugin()) plugin=FakeDhcpPlugin())
if dhcp_driver.active: if dhcp_driver.active:

View File

@ -48,7 +48,6 @@ def setup_conf():
conf.register_opts(l3_config.OPTS) conf.register_opts(l3_config.OPTS)
conf.register_opts(interface.OPTS) conf.register_opts(interface.OPTS)
agent_config.register_interface_driver_opts_helper(conf) agent_config.register_interface_driver_opts_helper(conf)
agent_config.register_use_namespaces_opts_helper(conf)
return conf return conf

View File

@ -456,14 +456,13 @@ class L3AgentSchedulerDbMixin(l3agentscheduler.L3AgentSchedulerPluginBase,
continue continue
agent_conf = self.get_configuration_dict(l3_agent) agent_conf = self.get_configuration_dict(l3_agent)
router_id = agent_conf.get('router_id', None) router_id = agent_conf.get('router_id', None)
use_namespaces = agent_conf.get('use_namespaces', True)
handle_internal_only_routers = agent_conf.get( handle_internal_only_routers = agent_conf.get(
'handle_internal_only_routers', True) 'handle_internal_only_routers', True)
gateway_external_network_id = agent_conf.get( gateway_external_network_id = agent_conf.get(
'gateway_external_network_id', None) 'gateway_external_network_id', None)
agent_mode = agent_conf.get(constants.L3_AGENT_MODE, agent_mode = agent_conf.get(constants.L3_AGENT_MODE,
constants.L3_AGENT_MODE_LEGACY) constants.L3_AGENT_MODE_LEGACY)
if not use_namespaces and router_id != sync_router['id']: if router_id and router_id != sync_router['id']:
continue continue
ex_net_id = (sync_router['external_gateway_info'] or {}).get( ex_net_id = (sync_router['external_gateway_info'] or {}).get(
'network_id') 'network_id')

View File

@ -346,8 +346,7 @@ class L3_DVRsch_db_mixin(l3agent_sch_db.L3AgentSchedulerDbMixin):
continue continue
router_id = agent_conf.get('router_id', None) router_id = agent_conf.get('router_id', None)
use_namespaces = agent_conf.get('use_namespaces', True) if router_id and router_id != sync_router['id']:
if not use_namespaces and router_id != sync_router['id']:
continue continue
handle_internal_only_routers = agent_conf.get( handle_internal_only_routers = agent_conf.get(

View File

@ -22,7 +22,6 @@ from oslo_log import log as logging
from neutron.agent.linux import dhcp from neutron.agent.linux import dhcp
from neutron.agent.linux import ip_lib from neutron.agent.linux import ip_lib
from neutron.agent.linux import utils
from neutron.common import constants from neutron.common import constants
from neutron.i18n import _LW from neutron.i18n import _LW
@ -61,9 +60,7 @@ class NeutronDebugAgent(object):
port = self._create_port(network, device_owner) port = self._create_port(network, device_owner)
interface_name = self.driver.get_device_name(port) interface_name = self.driver.get_device_name(port)
namespace = None namespace = self._get_namespace(port)
if self.conf.use_namespaces:
namespace = self._get_namespace(port)
if ip_lib.device_exists(interface_name, namespace=namespace): if ip_lib.device_exists(interface_name, namespace=namespace):
LOG.debug('Reusing existing device: %s.', interface_name) LOG.debug('Reusing existing device: %s.', interface_name)
@ -114,7 +111,7 @@ class NeutronDebugAgent(object):
bridge = self.conf.external_network_bridge bridge = self.conf.external_network_bridge
ip = ip_lib.IPWrapper() ip = ip_lib.IPWrapper()
namespace = self._get_namespace(port) namespace = self._get_namespace(port)
if self.conf.use_namespaces and ip.netns.exists(namespace): if ip.netns.exists(namespace):
self.driver.unplug(self.driver.get_device_name(port), self.driver.unplug(self.driver.get_device_name(port),
bridge=bridge, bridge=bridge,
namespace=namespace) namespace=namespace)
@ -141,13 +138,10 @@ class NeutronDebugAgent(object):
port = dhcp.DictModel(self.client.show_port(port_id)['port']) port = dhcp.DictModel(self.client.show_port(port_id)['port'])
ip = ip_lib.IPWrapper() ip = ip_lib.IPWrapper()
namespace = self._get_namespace(port) namespace = self._get_namespace(port)
if self.conf.use_namespaces: if not command:
if not command: return "sudo ip netns exec %s" % self._get_namespace(port)
return "sudo ip netns exec %s" % self._get_namespace(port) namespace = ip.ensure_namespace(namespace)
namespace = ip.ensure_namespace(namespace) return namespace.netns.execute(shlex.split(command))
return namespace.netns.execute(shlex.split(command))
else:
return utils.execute(shlex.split(command))
def ensure_probe(self, network_id): def ensure_probe(self, network_id):
ports = self.client.list_ports(network_id=network_id, ports = self.client.list_ports(network_id=network_id,

View File

@ -73,7 +73,6 @@ class NeutronDebugShell(shell.NeutronShell):
cfg.CONF.register_opts(interface.OPTS) cfg.CONF.register_opts(interface.OPTS)
cfg.CONF.register_opts(debug_agent.NeutronDebugAgent.OPTS) cfg.CONF.register_opts(debug_agent.NeutronDebugAgent.OPTS)
config.register_interface_driver_opts_helper(cfg.CONF) config.register_interface_driver_opts_helper(cfg.CONF)
config.register_use_namespaces_opts_helper(cfg.CONF)
cfg.CONF(['--config-file', self.options.config_file]) cfg.CONF(['--config-file', self.options.config_file])
config.setup_logging() config.setup_logging()
driver = utils.load_interface_driver(cfg.CONF) driver = utils.load_interface_driver(cfg.CONF)

View File

@ -93,8 +93,7 @@ class FWaaSL3AgentRpcCallback(api.FWaaSAgentRpcCallbackMixin):
router['id'] router['id']
for router in routers for router in routers
if router['tenant_id'] == tenant_id] if router['tenant_id'] == tenant_id]
local_ns_list = (root_ip.get_namespaces() local_ns_list = root_ip.get_namespaces()
if self.conf.use_namespaces else [])
router_info_list = [] router_info_list = []
# Pick up namespaces for Tenant Routers # Pick up namespaces for Tenant Routers
@ -103,11 +102,8 @@ class FWaaSL3AgentRpcCallback(api.FWaaSAgentRpcCallbackMixin):
# the router - but this is not yet populated in router_info # the router - but this is not yet populated in router_info
if rid not in self.router_info: if rid not in self.router_info:
continue continue
if self.conf.use_namespaces: router_ns = self.router_info[rid].ns_name
router_ns = self.router_info[rid].ns_name if router_ns in local_ns_list:
if router_ns in local_ns_list:
router_info_list.append(self.router_info[rid])
else:
router_info_list.append(self.router_info[rid]) router_info_list.append(self.router_info[rid])
return router_info_list return router_info_list

View File

@ -36,7 +36,6 @@ RULE = '-r-'
LABEL = '-l-' LABEL = '-l-'
config.register_interface_driver_opts_helper(cfg.CONF) config.register_interface_driver_opts_helper(cfg.CONF)
config.register_use_namespaces_opts_helper(cfg.CONF)
cfg.CONF.register_opts(interface.OPTS) cfg.CONF.register_opts(interface.OPTS)
@ -69,7 +68,8 @@ class RouterWithMetering(object):
self.conf = conf self.conf = conf
self.id = router['id'] self.id = router['id']
self.router = router self.router = router
self.ns_name = NS_PREFIX + self.id if conf.use_namespaces else None # TODO(cbrandily): deduplicate ns_name generation in metering/l3
self.ns_name = NS_PREFIX + self.id
self.iptables_manager = iptables_manager.IptablesManager( self.iptables_manager = iptables_manager.IptablesManager(
namespace=self.ns_name, namespace=self.ns_name,
binary_name=WRAP_NAME, binary_name=WRAP_NAME,

View File

@ -60,8 +60,7 @@ def _get_l3_agent_dict(host, agent_mode, internal_only=True,
'handle_internal_only_routers': internal_only, 'handle_internal_only_routers': internal_only,
'external_network_bridge': ext_bridge, 'external_network_bridge': ext_bridge,
'gateway_external_network_id': ext_net_id, 'gateway_external_network_id': ext_net_id,
'router_id': router_id, 'router_id': router_id}}
'use_namespaces': router_id is None}}
def _register_agent(agent): def _register_agent(agent):
@ -88,7 +87,6 @@ def _get_dhcp_agent_dict(host, networks=0, az=DEFAULT_AZ):
'agent_type': constants.AGENT_TYPE_DHCP, 'agent_type': constants.AGENT_TYPE_DHCP,
'availability_zone': az, 'availability_zone': az,
'configurations': {'dhcp_driver': 'dhcp_driver', 'configurations': {'dhcp_driver': 'dhcp_driver',
'use_namespaces': True,
'networks': networks}} 'networks': networks}}
return agent return agent

View File

@ -32,7 +32,7 @@ class NamespaceManagerTestFramework(base.BaseSudoTestCase):
self.agent_conf = mock.MagicMock() self.agent_conf = mock.MagicMock()
self.metadata_driver_mock = mock.Mock() self.metadata_driver_mock = mock.Mock()
self.namespace_manager = namespace_manager.NamespaceManager( self.namespace_manager = namespace_manager.NamespaceManager(
self.agent_conf, driver=None, clean_stale=True, self.agent_conf, driver=None,
metadata_driver=self.metadata_driver_mock) metadata_driver=self.metadata_driver_mock)
def _create_namespace(self, router_id, ns_class): def _create_namespace(self, router_id, ns_class):

View File

@ -32,13 +32,11 @@ class TestDhcp(functional_base.BaseSudoTestCase):
super(TestDhcp, self).setUp() super(TestDhcp, self).setUp()
conf = cfg.ConfigOpts() conf = cfg.ConfigOpts()
conf.register_opts(config.INTERFACE_DRIVER_OPTS) conf.register_opts(config.INTERFACE_DRIVER_OPTS)
conf.register_opts(config.USE_NAMESPACES_OPTS)
conf.register_opts(interface.OPTS) conf.register_opts(interface.OPTS)
conf.register_opts(common_conf.core_opts) conf.register_opts(common_conf.core_opts)
conf.register_opts(dhcp_conf.DHCP_AGENT_OPTS) conf.register_opts(dhcp_conf.DHCP_AGENT_OPTS)
conf.set_override('interface_driver', 'openvswitch') conf.set_override('interface_driver', 'openvswitch')
conf.set_override('host', 'foo_host') conf.set_override('host', 'foo_host')
conf.set_override('use_namespaces', True)
self.conf = conf self.conf = conf
br_int = self.useFixture(net_helpers.OVSBridgeFixture()).bridge br_int = self.useFixture(net_helpers.OVSBridgeFixture()).bridge
self.conf.set_override('ovs_integration_bridge', br_int.br_name) self.conf.set_override('ovs_integration_bridge', br_int.br_name)

View File

@ -130,7 +130,7 @@ class DHCPAgentOVSTestFramework(base.BaseSudoTestCase):
def create_network_dict(self, net_id, subnets=None, ports=None): def create_network_dict(self, net_id, subnets=None, ports=None):
subnets = [] if not subnets else subnets subnets = [] if not subnets else subnets
ports = [] if not ports else ports ports = [] if not ports else ports
net_dict = dhcp.NetModel(use_namespaces=True, d={ net_dict = dhcp.NetModel(d={
"id": net_id, "id": net_id,
"subnets": subnets, "subnets": subnets,
"ports": ports, "ports": ports,

View File

@ -143,20 +143,20 @@ fake_dist_port = dhcp.DictModel(dict(id='12345678-1234-aaaa-1234567890ab',
FAKE_NETWORK_UUID = '12345678-1234-5678-1234567890ab' FAKE_NETWORK_UUID = '12345678-1234-5678-1234567890ab'
FAKE_NETWORK_DHCP_NS = "qdhcp-%s" % FAKE_NETWORK_UUID FAKE_NETWORK_DHCP_NS = "qdhcp-%s" % FAKE_NETWORK_UUID
fake_network = dhcp.NetModel(True, dict(id=FAKE_NETWORK_UUID, fake_network = dhcp.NetModel(dict(id=FAKE_NETWORK_UUID,
tenant_id='aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa', tenant_id='aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa',
admin_state_up=True, admin_state_up=True,
subnets=[fake_subnet1, fake_subnet2], subnets=[fake_subnet1, fake_subnet2],
ports=[fake_port1])) ports=[fake_port1]))
fake_network_ipv6 = dhcp.NetModel(True, dict( fake_network_ipv6 = dhcp.NetModel(dict(
id='12345678-1234-5678-1234567890ab', id='12345678-1234-5678-1234567890ab',
tenant_id='aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa', tenant_id='aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa',
admin_state_up=True, admin_state_up=True,
subnets=[fake_ipv6_subnet], subnets=[fake_ipv6_subnet],
ports=[fake_ipv6_port])) ports=[fake_ipv6_port]))
fake_network_ipv6_ipv4 = dhcp.NetModel(True, dict( fake_network_ipv6_ipv4 = dhcp.NetModel(dict(
id='12345678-1234-5678-1234567890ab', id='12345678-1234-5678-1234567890ab',
tenant_id='aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa', tenant_id='aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa',
admin_state_up=True, admin_state_up=True,
@ -164,7 +164,7 @@ fake_network_ipv6_ipv4 = dhcp.NetModel(True, dict(
ports=[fake_port1])) ports=[fake_port1]))
isolated_network = dhcp.NetModel( isolated_network = dhcp.NetModel(
True, dict( dict(
id='12345678-1234-5678-1234567890ab', id='12345678-1234-5678-1234567890ab',
tenant_id='aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa', tenant_id='aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa',
admin_state_up=True, admin_state_up=True,
@ -172,7 +172,7 @@ isolated_network = dhcp.NetModel(
ports=[fake_port1])) ports=[fake_port1]))
nonisolated_dist_network = dhcp.NetModel( nonisolated_dist_network = dhcp.NetModel(
True, dict( dict(
id='12345678-1234-5678-1234567890ab', id='12345678-1234-5678-1234567890ab',
tenant_id='aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa', tenant_id='aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa',
admin_state_up=True, admin_state_up=True,
@ -180,7 +180,7 @@ nonisolated_dist_network = dhcp.NetModel(
ports=[fake_port1, fake_port2])) ports=[fake_port1, fake_port2]))
empty_network = dhcp.NetModel( empty_network = dhcp.NetModel(
True, dict( dict(
id='12345678-1234-5678-1234567890ab', id='12345678-1234-5678-1234567890ab',
tenant_id='aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa', tenant_id='aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa',
admin_state_up=True, admin_state_up=True,
@ -188,28 +188,28 @@ empty_network = dhcp.NetModel(
ports=[])) ports=[]))
fake_meta_network = dhcp.NetModel( fake_meta_network = dhcp.NetModel(
True, dict(id='12345678-1234-5678-1234567890ab', dict(id='12345678-1234-5678-1234567890ab',
tenant_id='aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa', tenant_id='aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa',
admin_state_up=True, admin_state_up=True,
subnets=[fake_meta_subnet], subnets=[fake_meta_subnet],
ports=[fake_meta_port])) ports=[fake_meta_port]))
fake_meta_dvr_network = dhcp.NetModel(True, fake_meta_network.copy()) fake_meta_dvr_network = dhcp.NetModel(fake_meta_network.copy())
fake_meta_dvr_network.ports = [fake_meta_dvr_port] fake_meta_dvr_network.ports = [fake_meta_dvr_port]
fake_dist_network = dhcp.NetModel( fake_dist_network = dhcp.NetModel(
True, dict(id='12345678-1234-5678-1234567890ab', dict(id='12345678-1234-5678-1234567890ab',
tenant_id='aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa', tenant_id='aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa',
admin_state_up=True, admin_state_up=True,
subnets=[fake_meta_subnet], subnets=[fake_meta_subnet],
ports=[fake_meta_port, fake_dist_port])) ports=[fake_meta_port, fake_dist_port]))
fake_down_network = dhcp.NetModel( fake_down_network = dhcp.NetModel(
True, dict(id='12345678-dddd-dddd-1234567890ab', dict(id='12345678-dddd-dddd-1234567890ab',
tenant_id='aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa', tenant_id='aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa',
admin_state_up=False, admin_state_up=False,
subnets=[], subnets=[],
ports=[])) ports=[]))
class TestDhcpAgent(base.BaseTestCase): class TestDhcpAgent(base.BaseTestCase):
@ -856,7 +856,7 @@ class TestDhcpAgentEventHandler(base.BaseTestCase):
disable.assert_called_once_with(fake_network.id) disable.assert_called_once_with(fake_network.id)
def test_refresh_dhcp_helper_no_dhcp_enabled_networks(self): def test_refresh_dhcp_helper_no_dhcp_enabled_networks(self):
network = dhcp.NetModel(True, dict(id='net-id', network = dhcp.NetModel(dict(id='net-id',
tenant_id='aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa', tenant_id='aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa',
admin_state_up=True, admin_state_up=True,
subnets=[], subnets=[],
@ -873,7 +873,7 @@ class TestDhcpAgentEventHandler(base.BaseTestCase):
[mock.call.get_network_by_id('net-id')]) [mock.call.get_network_by_id('net-id')])
def test_refresh_dhcp_helper_exception_during_rpc(self): def test_refresh_dhcp_helper_exception_during_rpc(self):
network = dhcp.NetModel(True, dict(id='net-id', network = dhcp.NetModel(dict(id='net-id',
tenant_id='aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa', tenant_id='aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa',
admin_state_up=True, admin_state_up=True,
subnets=[], subnets=[],
@ -901,7 +901,7 @@ class TestDhcpAgentEventHandler(base.BaseTestCase):
fake_network) fake_network)
def test_subnet_update_end_restart(self): def test_subnet_update_end_restart(self):
new_state = dhcp.NetModel(True, dict(id=fake_network.id, new_state = dhcp.NetModel(dict(id=fake_network.id,
tenant_id=fake_network.tenant_id, tenant_id=fake_network.tenant_id,
admin_state_up=True, admin_state_up=True,
subnets=[fake_subnet1, fake_subnet3], subnets=[fake_subnet1, fake_subnet3],
@ -918,7 +918,7 @@ class TestDhcpAgentEventHandler(base.BaseTestCase):
new_state) new_state)
def test_subnet_update_end_delete_payload(self): def test_subnet_update_end_delete_payload(self):
prev_state = dhcp.NetModel(True, dict(id=fake_network.id, prev_state = dhcp.NetModel(dict(id=fake_network.id,
tenant_id=fake_network.tenant_id, tenant_id=fake_network.tenant_id,
admin_state_up=True, admin_state_up=True,
subnets=[fake_subnet1, fake_subnet3], subnets=[fake_subnet1, fake_subnet3],
@ -1012,7 +1012,7 @@ class TestDhcpAgentEventHandler(base.BaseTestCase):
class TestDhcpPluginApiProxy(base.BaseTestCase): class TestDhcpPluginApiProxy(base.BaseTestCase):
def _test_dhcp_api(self, method, **kwargs): def _test_dhcp_api(self, method, **kwargs):
ctxt = context.get_admin_context() ctxt = context.get_admin_context()
proxy = dhcp_agent.DhcpPluginApi('foo', ctxt, None, host='foo') proxy = dhcp_agent.DhcpPluginApi('foo', ctxt, host='foo')
with mock.patch.object(proxy.client, 'call') as rpc_mock,\ with mock.patch.object(proxy.client, 'call') as rpc_mock,\
mock.patch.object(proxy.client, 'prepare') as prepare_mock: mock.patch.object(proxy.client, 'prepare') as prepare_mock:
@ -1118,10 +1118,10 @@ class TestNetworkCache(base.BaseTestCase):
def test_put_port(self): def test_put_port(self):
fake_net = dhcp.NetModel( fake_net = dhcp.NetModel(
True, dict(id='12345678-1234-5678-1234567890ab', dict(id='12345678-1234-5678-1234567890ab',
tenant_id='aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa', tenant_id='aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa',
subnets=[fake_subnet1], subnets=[fake_subnet1],
ports=[fake_port1])) ports=[fake_port1]))
nc = dhcp_agent.NetworkCache() nc = dhcp_agent.NetworkCache()
nc.put(fake_net) nc.put(fake_net)
nc.put_port(fake_port2) nc.put_port(fake_port2)
@ -1130,10 +1130,10 @@ class TestNetworkCache(base.BaseTestCase):
def test_put_port_existing(self): def test_put_port_existing(self):
fake_net = dhcp.NetModel( fake_net = dhcp.NetModel(
True, dict(id='12345678-1234-5678-1234567890ab', dict(id='12345678-1234-5678-1234567890ab',
tenant_id='aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa', tenant_id='aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa',
subnets=[fake_subnet1], subnets=[fake_subnet1],
ports=[fake_port1, fake_port2])) ports=[fake_port1, fake_port2]))
nc = dhcp_agent.NetworkCache() nc = dhcp_agent.NetworkCache()
nc.put(fake_net) nc.put(fake_net)
nc.put_port(fake_port2) nc.put_port(fake_port2)
@ -1143,10 +1143,10 @@ class TestNetworkCache(base.BaseTestCase):
def test_remove_port_existing(self): def test_remove_port_existing(self):
fake_net = dhcp.NetModel( fake_net = dhcp.NetModel(
True, dict(id='12345678-1234-5678-1234567890ab', dict(id='12345678-1234-5678-1234567890ab',
tenant_id='aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa', tenant_id='aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa',
subnets=[fake_subnet1], subnets=[fake_subnet1],
ports=[fake_port1, fake_port2])) ports=[fake_port1, fake_port2]))
nc = dhcp_agent.NetworkCache() nc = dhcp_agent.NetworkCache()
nc.put(fake_net) nc.put(fake_net)
nc.remove_port(fake_port2) nc.remove_port(fake_port2)
@ -1203,11 +1203,9 @@ class TestDeviceManager(base.BaseTestCase):
def setUp(self): def setUp(self):
super(TestDeviceManager, self).setUp() super(TestDeviceManager, self).setUp()
config.register_interface_driver_opts_helper(cfg.CONF) config.register_interface_driver_opts_helper(cfg.CONF)
config.register_use_namespaces_opts_helper(cfg.CONF)
cfg.CONF.register_opts(dhcp_config.DHCP_AGENT_OPTS) cfg.CONF.register_opts(dhcp_config.DHCP_AGENT_OPTS)
cfg.CONF.set_override('interface_driver', cfg.CONF.set_override('interface_driver',
'neutron.agent.linux.interface.NullDriver') 'neutron.agent.linux.interface.NullDriver')
cfg.CONF.set_override('use_namespaces', True)
cfg.CONF.set_override('enable_isolated_metadata', True) cfg.CONF.set_override('enable_isolated_metadata', True)
self.ensure_device_is_ready_p = mock.patch( self.ensure_device_is_ready_p = mock.patch(
@ -1392,8 +1390,8 @@ class TestDeviceManager(base.BaseTestCase):
def test_destroy(self): def test_destroy(self):
fake_net = dhcp.NetModel( fake_net = dhcp.NetModel(
True, dict(id=FAKE_NETWORK_UUID, dict(id=FAKE_NETWORK_UUID,
tenant_id='aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa')) tenant_id='aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa'))
with mock.patch('neutron.agent.linux.interface.NullDriver') as dvr_cls: with mock.patch('neutron.agent.linux.interface.NullDriver') as dvr_cls:
mock_driver = mock.MagicMock() mock_driver = mock.MagicMock()
@ -1414,8 +1412,8 @@ class TestDeviceManager(base.BaseTestCase):
def test_destroy_with_none(self): def test_destroy_with_none(self):
fake_net = dhcp.NetModel( fake_net = dhcp.NetModel(
True, dict(id=FAKE_NETWORK_UUID, dict(id=FAKE_NETWORK_UUID,
tenant_id='aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa')) tenant_id='aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa'))
with mock.patch('neutron.agent.linux.interface.NullDriver') as dvr_cls: with mock.patch('neutron.agent.linux.interface.NullDriver') as dvr_cls:
mock_driver = mock.MagicMock() mock_driver = mock.MagicMock()
@ -1434,8 +1432,8 @@ class TestDeviceManager(base.BaseTestCase):
def test_get_interface_name(self): def test_get_interface_name(self):
fake_net = dhcp.NetModel( fake_net = dhcp.NetModel(
True, dict(id='12345678-1234-5678-1234567890ab', dict(id='12345678-1234-5678-1234567890ab',
tenant_id='aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa')) tenant_id='aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa'))
fake_port = dhcp.DictModel( fake_port = dhcp.DictModel(
dict(id='12345678-1234-aaaa-1234567890ab', dict(id='12345678-1234-aaaa-1234567890ab',
@ -1459,8 +1457,8 @@ class TestDeviceManager(base.BaseTestCase):
def test_get_device_id(self): def test_get_device_id(self):
fake_net = dhcp.NetModel( fake_net = dhcp.NetModel(
True, dict(id='12345678-1234-5678-1234567890ab', dict(id='12345678-1234-5678-1234567890ab',
tenant_id='aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa')) tenant_id='aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa'))
expected = ('dhcp1ae5f96c-c527-5079-82ea-371a01645457-12345678-1234-' expected = ('dhcp1ae5f96c-c527-5079-82ea-371a01645457-12345678-1234-'
'5678-1234567890ab') '5678-1234567890ab')
@ -1473,7 +1471,6 @@ class TestDeviceManager(base.BaseTestCase):
def test_update(self): def test_update(self):
# Try with namespaces and no metadata network # Try with namespaces and no metadata network
cfg.CONF.set_override('use_namespaces', True)
cfg.CONF.set_override('enable_metadata_network', False) cfg.CONF.set_override('enable_metadata_network', False)
dh = dhcp.DeviceManager(cfg.CONF, None) dh = dhcp.DeviceManager(cfg.CONF, None)
dh._set_default_route = mock.Mock() dh._set_default_route = mock.Mock()
@ -1484,18 +1481,7 @@ class TestDeviceManager(base.BaseTestCase):
dh._set_default_route.assert_called_once_with(network, dh._set_default_route.assert_called_once_with(network,
'ns-12345678-12') 'ns-12345678-12')
# No namespaces, shouldn't set default route.
cfg.CONF.set_override('use_namespaces', False)
cfg.CONF.set_override('enable_metadata_network', False)
dh = dhcp.DeviceManager(cfg.CONF, None)
dh._set_default_route = mock.Mock()
dh.update(FakeV4Network(), 'tap12345678-12')
self.assertFalse(dh._set_default_route.called)
# Meta data network enabled, don't interfere with its gateway. # Meta data network enabled, don't interfere with its gateway.
cfg.CONF.set_override('use_namespaces', True)
cfg.CONF.set_override('enable_metadata_network', True) cfg.CONF.set_override('enable_metadata_network', True)
dh = dhcp.DeviceManager(cfg.CONF, None) dh = dhcp.DeviceManager(cfg.CONF, None)
dh._set_default_route = mock.Mock() dh._set_default_route = mock.Mock()
@ -1504,16 +1490,6 @@ class TestDeviceManager(base.BaseTestCase):
self.assertTrue(dh._set_default_route.called) self.assertTrue(dh._set_default_route.called)
# For completeness
cfg.CONF.set_override('use_namespaces', False)
cfg.CONF.set_override('enable_metadata_network', True)
dh = dhcp.DeviceManager(cfg.CONF, None)
dh._set_default_route = mock.Mock()
dh.update(FakeV4Network(), 'ns-12345678-12')
self.assertFalse(dh._set_default_route.called)
def test_set_default_route(self): def test_set_default_route(self):
dh = dhcp.DeviceManager(cfg.CONF, None) dh = dhcp.DeviceManager(cfg.CONF, None)
with mock.patch.object(dhcp.ip_lib, 'IPDevice') as mock_IPDevice: with mock.patch.object(dhcp.ip_lib, 'IPDevice') as mock_IPDevice:
@ -1639,17 +1615,3 @@ class TestDictModel(base.BaseTestCase):
m = dhcp.DictModel(d) m = dhcp.DictModel(d)
self.assertEqual(m.a[0].b, 2) self.assertEqual(m.a[0].b, 2)
self.assertEqual(m.a[1].c, 3) self.assertEqual(m.a[1].c, 3)
class TestNetModel(base.BaseTestCase):
def test_ns_name(self):
network = dhcp.NetModel(True, {'id': 'foo'})
self.assertEqual(network.namespace, 'qdhcp-foo')
def test_ns_name_false_namespace(self):
network = dhcp.NetModel(False, {'id': 'foo'})
self.assertIsNone(network.namespace)
def test_ns_name_none_namespace(self):
network = dhcp.NetModel(None, {'id': 'foo'})
self.assertIsNone(network.namespace)

View File

@ -68,12 +68,10 @@ class BasicRouterOperationsFramework(base.BaseTestCase):
self.conf.register_opts(l3_config.OPTS) self.conf.register_opts(l3_config.OPTS)
self.conf.register_opts(ha.OPTS) self.conf.register_opts(ha.OPTS)
agent_config.register_interface_driver_opts_helper(self.conf) agent_config.register_interface_driver_opts_helper(self.conf)
agent_config.register_use_namespaces_opts_helper(self.conf)
agent_config.register_process_monitor_opts(self.conf) agent_config.register_process_monitor_opts(self.conf)
agent_config.register_availability_zone_opts_helper(self.conf) agent_config.register_availability_zone_opts_helper(self.conf)
self.conf.register_opts(interface.OPTS) self.conf.register_opts(interface.OPTS)
self.conf.register_opts(external_process.OPTS) self.conf.register_opts(external_process.OPTS)
self.conf.set_override('router_id', 'fake_id')
self.conf.set_override('interface_driver', self.conf.set_override('interface_driver',
'neutron.agent.linux.interface.NullDriver') 'neutron.agent.linux.interface.NullDriver')
self.conf.set_override('send_arp_for_ha', 1) self.conf.set_override('send_arp_for_ha', 1)
@ -1791,15 +1789,8 @@ class TestBasicRouterOperations(BasicRouterOperationsFramework):
self._configure_metadata_proxy(enableflag=False) self._configure_metadata_proxy(enableflag=False)
def test_router_id_specified_in_conf(self): def test_router_id_specified_in_conf(self):
self.conf.set_override('use_namespaces', False)
self.conf.set_override('router_id', '')
self.assertRaises(SystemExit, l3_agent.L3NATAgent,
HOSTNAME, self.conf)
self.conf.set_override('router_id', '1234') self.conf.set_override('router_id', '1234')
agent = l3_agent.L3NATAgent(HOSTNAME, self.conf) self._configure_metadata_proxy()
self.assertEqual('1234', agent.conf.router_id)
self.assertFalse(agent.namespaces_manager._clean_stale)
def test_process_routers_update_rpc_timeout_on_get_routers(self): def test_process_routers_update_rpc_timeout_on_get_routers(self):
agent = l3_agent.L3NATAgent(HOSTNAME, self.conf) agent = l3_agent.L3NATAgent(HOSTNAME, self.conf)

View File

@ -51,7 +51,6 @@ class TestDvrRouterOperations(base.BaseTestCase):
self.conf.register_opts(l3_config.OPTS) self.conf.register_opts(l3_config.OPTS)
self.conf.register_opts(ha.OPTS) self.conf.register_opts(ha.OPTS)
agent_config.register_interface_driver_opts_helper(self.conf) agent_config.register_interface_driver_opts_helper(self.conf)
agent_config.register_use_namespaces_opts_helper(self.conf)
agent_config.register_process_monitor_opts(self.conf) agent_config.register_process_monitor_opts(self.conf)
self.conf.register_opts(interface.OPTS) self.conf.register_opts(interface.OPTS)
self.conf.register_opts(external_process.OPTS) self.conf.register_opts(external_process.OPTS)

View File

@ -29,8 +29,6 @@ class TestBasicRouterOperations(base.BaseTestCase):
if not router: if not router:
router = mock.MagicMock() router = mock.MagicMock()
self.agent_conf = mock.Mock() self.agent_conf = mock.Mock()
# NOTE The use_namespaces config will soon be deprecated
self.agent_conf.use_namespaces = True
self.router_id = _uuid() self.router_id = _uuid()
return ha_router.HaRouter(mock.sentinel.enqueue_state, return ha_router.HaRouter(mock.sentinel.enqueue_state,
self.router_id, self.router_id,

View File

@ -31,8 +31,7 @@ class NamespaceManagerTestCaseFramework(base.BaseTestCase):
def _create_namespace_manager(self): def _create_namespace_manager(self):
self.agent_conf = mock.Mock() self.agent_conf = mock.Mock()
self.driver = mock.Mock() self.driver = mock.Mock()
return namespace_manager.NamespaceManager(self.agent_conf, return namespace_manager.NamespaceManager(self.agent_conf, self.driver)
self.driver, True)
class TestNamespaceManager(NamespaceManagerTestCaseFramework): class TestNamespaceManager(NamespaceManagerTestCaseFramework):

View File

@ -29,7 +29,6 @@ class TestRouterInfo(base.BaseTestCase):
super(TestRouterInfo, self).setUp() super(TestRouterInfo, self).setUp()
conf = agent_config.setup_conf() conf = agent_config.setup_conf()
conf.use_namespaces = True
self.ip_cls_p = mock.patch('neutron.agent.linux.ip_lib.IPWrapper') self.ip_cls_p = mock.patch('neutron.agent.linux.ip_lib.IPWrapper')
ip_cls = self.ip_cls_p.start() ip_cls = self.ip_cls_p.start()
@ -129,8 +128,6 @@ class BasicRouterTestCaseFramework(base.BaseTestCase):
if not router: if not router:
router = mock.MagicMock() router = mock.MagicMock()
self.agent_conf = mock.Mock() self.agent_conf = mock.Mock()
# NOTE The use_namespaces config will soon be deprecated
self.agent_conf.use_namespaces = True
self.router_id = _uuid() self.router_id = _uuid()
return router_info.RouterInfo(self.router_id, return router_info.RouterInfo(self.router_id,
router, router,

View File

@ -798,7 +798,6 @@ class TestConfBase(base.BaseTestCase):
self.conf.register_opts(dhcp_config.DNSMASQ_OPTS) self.conf.register_opts(dhcp_config.DNSMASQ_OPTS)
self.conf.register_opts(external_process.OPTS) self.conf.register_opts(external_process.OPTS)
config.register_interface_driver_opts_helper(self.conf) config.register_interface_driver_opts_helper(self.conf)
config.register_use_namespaces_opts_helper(self.conf)
class TestBase(TestConfBase): class TestBase(TestConfBase):
@ -1889,11 +1888,6 @@ class TestDnsmasq(TestBase):
self.safe.assert_has_calls([mock.call(exp_host_name, exp_host_data), self.safe.assert_has_calls([mock.call(exp_host_name, exp_host_data),
mock.call(exp_opt_name, exp_opt_data)]) mock.call(exp_opt_name, exp_opt_data)])
def test_should_enable_metadata_namespaces_disabled_returns_false(self):
self.conf.set_override('use_namespaces', False)
self.assertFalse(dhcp.Dnsmasq.should_enable_metadata(self.conf,
mock.ANY))
def test_should_enable_metadata_isolated_network_returns_true(self): def test_should_enable_metadata_isolated_network_returns_true(self):
self.assertTrue(dhcp.Dnsmasq.should_enable_metadata( self.assertTrue(dhcp.Dnsmasq.should_enable_metadata(
self.conf, FakeV4NetworkNoRouter())) self.conf, FakeV4NetworkNoRouter()))

View File

@ -69,7 +69,6 @@ class TestMetadataDriverProcess(base.BaseTestCase):
agent_config.register_interface_driver_opts_helper(cfg.CONF) agent_config.register_interface_driver_opts_helper(cfg.CONF)
cfg.CONF.set_override('interface_driver', cfg.CONF.set_override('interface_driver',
'neutron.agent.linux.interface.NullDriver') 'neutron.agent.linux.interface.NullDriver')
agent_config.register_use_namespaces_opts_helper(cfg.CONF)
mock.patch('neutron.agent.l3.agent.L3PluginApi').start() mock.patch('neutron.agent.l3.agent.L3PluginApi').start()
mock.patch('neutron.agent.l3.ha.AgentMixin' mock.patch('neutron.agent.l3.ha.AgentMixin'

View File

@ -38,8 +38,6 @@ class TestDebugCommands(base.BaseTestCase):
cfg.CONF.register_opts(debug_agent.NeutronDebugAgent.OPTS) cfg.CONF.register_opts(debug_agent.NeutronDebugAgent.OPTS)
common_config.init([]) common_config.init([])
config.register_interface_driver_opts_helper(cfg.CONF) config.register_interface_driver_opts_helper(cfg.CONF)
config.register_use_namespaces_opts_helper(cfg.CONF)
cfg.CONF.set_override('use_namespaces', True)
device_exists_p = mock.patch( device_exists_p = mock.patch(
'neutron.agent.linux.ip_lib.device_exists', return_value=False) 'neutron.agent.linux.ip_lib.device_exists', return_value=False)
@ -226,21 +224,6 @@ class TestDebugCommands(base.BaseTestCase):
namespace=namespace, namespace=namespace,
bridge='br-ex')]) bridge='br-ex')])
def test_delete_probe_without_namespace(self):
cfg.CONF.set_override('use_namespaces', False)
cmd = commands.DeleteProbe(self.app, None)
cmd_parser = cmd.get_parser('delete_probe')
args = ['fake_port']
parsed_args = cmd_parser.parse_args(args)
cmd.run(parsed_args)
self.client.assert_has_calls([mock.call.show_port('fake_port'),
mock.call.show_network('fake_net'),
mock.call.show_subnet('fake_subnet'),
mock.call.delete_port('fake_port')])
self.driver.assert_has_calls([mock.call.get_device_name(mock.ANY),
mock.call.unplug('tap12345678-12',
bridge=None)])
def test_list_probe(self): def test_list_probe(self):
cmd = commands.ListProbe(self.app, None) cmd = commands.ListProbe(self.app, None)
cmd_parser = cmd.get_parser('list_probe') cmd_parser = cmd.get_parser('list_probe')
@ -262,17 +245,6 @@ class TestDebugCommands(base.BaseTestCase):
ns.assert_has_calls([mock.call.execute(mock.ANY)]) ns.assert_has_calls([mock.call.execute(mock.ANY)])
self.client.assert_has_calls([mock.call.show_port('fake_port')]) self.client.assert_has_calls([mock.call.show_port('fake_port')])
def test_exec_command_without_namespace(self):
cfg.CONF.set_override('use_namespaces', False)
cmd = commands.ExecProbe(self.app, None)
cmd_parser = cmd.get_parser('exec_command')
args = ['fake_port', 'fake_command']
parsed_args = cmd_parser.parse_args(args)
with mock.patch('neutron.agent.linux.utils.execute') as exe:
cmd.run(parsed_args)
exe.assert_has_calls([mock.call.execute(mock.ANY)])
self.client.assert_has_calls([mock.call.show_port('fake_port')])
def test_clear_probe(self): def test_clear_probe(self):
cmd = commands.ClearProbe(self.app, None) cmd = commands.ClearProbe(self.app, None)
cmd_parser = cmd.get_parser('clear_probe') cmd_parser = cmd.get_parser('clear_probe')