From 903e2a8cd1dd9169048d1ad9dd8a566b2ae52395 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Ollivier?= Date: Thu, 21 Aug 2014 20:26:10 +0200 Subject: [PATCH 001/128] Add unit tests covering single operations to ODL This commit adds the remaining test cases (create and update operations) to fully cover sync_single_resource. It also defines the filter_* methods as static or class methods and removes their duplicate arguments. Change-Id: I6b6153ea577bd685576690559b1c389490ee525d Closes-Bug: #1325184 --- neutron/plugins/ml2/drivers/mechanism_odl.py | 103 +++++----- neutron/tests/unit/ml2/test_mechanism_odl.py | 192 +++++++++++++++++-- 2 files changed, 231 insertions(+), 64 deletions(-) diff --git a/neutron/plugins/ml2/drivers/mechanism_odl.py b/neutron/plugins/ml2/drivers/mechanism_odl.py index 771839a3151..dfe0c12c950 100644 --- a/neutron/plugins/ml2/drivers/mechanism_odl.py +++ b/neutron/plugins/ml2/drivers/mechanism_odl.py @@ -32,11 +32,8 @@ from neutron.plugins.ml2 import driver_api as api LOG = log.getLogger(__name__) -ODL_NETWORK = 'network' ODL_NETWORKS = 'networks' -ODL_SUBNET = 'subnet' ODL_SUBNETS = 'subnets' -ODL_PORT = 'port' ODL_PORTS = 'ports' odl_opts = [ @@ -99,11 +96,10 @@ class JsessionId(requests.auth.AuthBase): r = requests.get(self.url, auth=(self.username, self.password)) r.raise_for_status() except requests.exceptions.HTTPError as e: - raise OpendaylightAuthError(msg=_("Failed to authenticate with " - "OpenDaylight: %s") % e) + raise OpendaylightAuthError(msg="Failed to authenticate with " + "OpenDaylight: %s" % e) except requests.exceptions.Timeout as e: - raise OpendaylightAuthError(msg=_("Authentication Timed" - " Out: %s") % e) + raise OpendaylightAuthError(msg="Authentication Timed Out: %s" % e) jsessionid = r.cookies.get('JSESSIONID') jsessionidsso = r.cookies.get('JSESSIONIDSSO') @@ -181,24 +177,26 @@ class OpenDaylightMechanismDriver(api.MechanismDriver): else: self.sync_single_resource(operation, object_type, context) - def filter_create_network_attributes(self, network, context, dbcontext): + @staticmethod + def filter_create_network_attributes(network, context): """Filter out network attributes not required for a create.""" try_del(network, ['status', 'subnets']) - def filter_create_subnet_attributes(self, subnet, context, dbcontext): + @staticmethod + def filter_create_subnet_attributes(subnet, context): """Filter out subnet attributes not required for a create.""" pass - def filter_create_port_attributes(self, port, context, dbcontext): + @classmethod + def filter_create_port_attributes(cls, port, context): """Filter out port attributes not required for a create.""" - self.add_security_groups(context, dbcontext, port) + cls.add_security_groups(port, context) # TODO(kmestery): Converting to uppercase due to ODL bug # https://bugs.opendaylight.org/show_bug.cgi?id=477 port['mac_address'] = port['mac_address'].upper() try_del(port, ['status']) - def sync_resources(self, resource_name, collection_name, resources, - context, dbcontext, attr_filter): + def sync_resources(self, collection_name, context): """Sync objects from Neutron over to OpenDaylight. This will handle syncing networks, subnets, and ports from Neutron to @@ -206,6 +204,9 @@ class OpenDaylightMechanismDriver(api.MechanismDriver): valid for create API operations. """ to_be_synced = [] + dbcontext = context._plugin_context + obj_getter = getattr(context._plugin, 'get_%s' % collection_name) + resources = obj_getter(dbcontext) for resource in resources: try: urlpath = collection_name + '/' + resource['id'] @@ -213,11 +214,12 @@ class OpenDaylightMechanismDriver(api.MechanismDriver): except requests.exceptions.HTTPError as e: with excutils.save_and_reraise_exception() as ctx: if e.response.status_code == requests.codes.not_found: - attr_filter(resource, context, dbcontext) + attr_filter = self.create_object_map[collection_name] + attr_filter(resource, context) to_be_synced.append(resource) ctx.reraise = False - - key = resource_name if len(to_be_synced) == 1 else collection_name + key = collection_name[:-1] if len(to_be_synced) == 1 else ( + collection_name) # 400 errors are returned if an object exists, which we ignore. self.sendjson('post', collection_name, {key: to_be_synced}, @@ -232,45 +234,28 @@ class OpenDaylightMechanismDriver(api.MechanismDriver): """ if not self.out_of_sync: return - dbcontext = context._plugin_context - networks = context._plugin.get_networks(dbcontext) - subnets = context._plugin.get_subnets(dbcontext) - ports = context._plugin.get_ports(dbcontext) - - self.sync_resources(ODL_NETWORK, ODL_NETWORKS, networks, - context, dbcontext, - self.filter_create_network_attributes) - self.sync_resources(ODL_SUBNET, ODL_SUBNETS, subnets, - context, dbcontext, - self.filter_create_subnet_attributes) - self.sync_resources(ODL_PORT, ODL_PORTS, ports, - context, dbcontext, - self.filter_create_port_attributes) + for collection_name in [ODL_NETWORKS, ODL_SUBNETS, ODL_PORTS]: + self.sync_resources(collection_name, context) self.out_of_sync = False - def filter_update_network_attributes(self, network, context, dbcontext): + @staticmethod + def filter_update_network_attributes(network, context): """Filter out network attributes for an update operation.""" try_del(network, ['id', 'status', 'subnets', 'tenant_id']) - def filter_update_subnet_attributes(self, subnet, context, dbcontext): + @staticmethod + def filter_update_subnet_attributes(subnet, context): """Filter out subnet attributes for an update operation.""" try_del(subnet, ['id', 'network_id', 'ip_version', 'cidr', 'allocation_pools', 'tenant_id']) - def filter_update_port_attributes(self, port, context, dbcontext): + @classmethod + def filter_update_port_attributes(cls, port, context): """Filter out port attributes for an update operation.""" - self.add_security_groups(context, dbcontext, port) + cls.add_security_groups(port, context) try_del(port, ['network_id', 'id', 'status', 'mac_address', 'tenant_id', 'fixed_ips']) - create_object_map = {ODL_NETWORKS: filter_create_network_attributes, - ODL_SUBNETS: filter_create_subnet_attributes, - ODL_PORTS: filter_create_port_attributes} - - update_object_map = {ODL_NETWORKS: filter_update_network_attributes, - ODL_SUBNETS: filter_update_subnet_attributes, - ODL_PORTS: filter_update_port_attributes} - def sync_single_resource(self, operation, object_type, context): """Sync over a single resource from Neutron to OpenDaylight. @@ -292,7 +277,7 @@ class OpenDaylightMechanismDriver(api.MechanismDriver): method = 'put' attr_filter = self.update_object_map[object_type] resource = context.current.copy() - attr_filter(self, resource, context, context._plugin_context) + attr_filter(resource, context) # 400 errors are returned if an object exists, which we ignore. self.sendjson(method, urlpath, {object_type[:-1]: resource}, [requests.codes.bad_request]) @@ -300,20 +285,21 @@ class OpenDaylightMechanismDriver(api.MechanismDriver): with excutils.save_and_reraise_exception(): self.out_of_sync = True - def add_security_groups(self, context, dbcontext, port): + @staticmethod + def add_security_groups(port, context): """Populate the 'security_groups' field with entire records.""" + dbcontext = context._plugin_context groups = [context._plugin.get_security_group(dbcontext, sg) for sg in port['security_groups']] port['security_groups'] = groups def sendjson(self, method, urlpath, obj, ignorecodes=[]): """Send json to the OpenDaylight controller.""" - headers = {'Content-Type': 'application/json'} data = jsonutils.dumps(obj, indent=2) if obj else None url = '/'.join([self.url, urlpath]) - LOG.debug(_('ODL-----> sending URL (%s) <-----ODL') % url) - LOG.debug(_('ODL-----> sending JSON (%s) <-----ODL') % obj) + LOG.debug("Sending METHOD (%(method)s) URL (%(url)s) JSON (%(obj)s)", + {'method': method, 'url': url, 'obj': obj}) r = requests.request(method, url=url, headers=headers, data=data, auth=self.auth, timeout=self.timeout) @@ -324,8 +310,8 @@ class OpenDaylightMechanismDriver(api.MechanismDriver): r.raise_for_status() def bind_port(self, context): - LOG.debug(_("Attempting to bind port %(port)s on " - "network %(network)s"), + LOG.debug("Attempting to bind port %(port)s on " + "network %(network)s", {'port': context.current['id'], 'network': context.network.current['id']}) for segment in context.network.network_segments: @@ -334,12 +320,12 @@ class OpenDaylightMechanismDriver(api.MechanismDriver): self.vif_type, self.vif_details, status=n_const.PORT_STATUS_ACTIVE) - LOG.debug(_("Bound using segment: %s"), segment) + LOG.debug("Bound using segment: %s", segment) return else: - LOG.debug(_("Refusing to bind port for segment ID %(id)s, " - "segment %(seg)s, phys net %(physnet)s, and " - "network type %(nettype)s"), + LOG.debug("Refusing to bind port for segment ID %(id)s, " + "segment %(seg)s, phys net %(physnet)s, and " + "network type %(nettype)s", {'id': segment[api.ID], 'seg': segment[api.SEGMENTATION_ID], 'physnet': segment[api.PHYSICAL_NETWORK], @@ -354,3 +340,14 @@ class OpenDaylightMechanismDriver(api.MechanismDriver): network_type = segment[api.NETWORK_TYPE] return network_type in [constants.TYPE_LOCAL, constants.TYPE_GRE, constants.TYPE_VXLAN, constants.TYPE_VLAN] + + +OpenDaylightMechanismDriver.create_object_map = { + ODL_NETWORKS: OpenDaylightMechanismDriver.filter_create_network_attributes, + ODL_SUBNETS: OpenDaylightMechanismDriver.filter_create_subnet_attributes, + ODL_PORTS: OpenDaylightMechanismDriver.filter_create_port_attributes} + +OpenDaylightMechanismDriver.update_object_map = { + ODL_NETWORKS: OpenDaylightMechanismDriver.filter_update_network_attributes, + ODL_SUBNETS: OpenDaylightMechanismDriver.filter_update_subnet_attributes, + ODL_PORTS: OpenDaylightMechanismDriver.filter_update_port_attributes} diff --git a/neutron/tests/unit/ml2/test_mechanism_odl.py b/neutron/tests/unit/ml2/test_mechanism_odl.py index e743c345793..ff813778ef0 100644 --- a/neutron/tests/unit/ml2/test_mechanism_odl.py +++ b/neutron/tests/unit/ml2/test_mechanism_odl.py @@ -17,6 +17,7 @@ import mock import requests +from neutron.openstack.common import jsonutils from neutron.plugins.common import constants from neutron.plugins.ml2 import config as config from neutron.plugins.ml2 import driver_api as api @@ -122,11 +123,27 @@ class OpenDaylightMechanismTestPortsV2(test_plugin.TestPortsV2, class AuthMatcher(object): + def __eq__(self, obj): return (obj.username == config.cfg.CONF.ml2_odl.username and obj.password == config.cfg.CONF.ml2_odl.password) +class DataMatcher(object): + + def __init__(self, operation, object_type, context): + self._data = context.current.copy() + self._object_type = object_type + filter_map = getattr(mechanism_odl.OpenDaylightMechanismDriver, + '%s_object_map' % operation) + attr_filter = filter_map["%ss" % object_type] + attr_filter(self._data, context) + + def __eq__(self, s): + data = jsonutils.loads(s) + return self._data == data[self._object_type] + + class OpenDaylightMechanismDriverTestCase(base.BaseTestCase): def setUp(self): @@ -140,18 +157,80 @@ class OpenDaylightMechanismDriverTestCase(base.BaseTestCase): self.mech.initialize() @staticmethod - def _get_mock_delete_resource_context(): - current = {'id': '00000000-1111-2222-3333-444444444444'} + def _get_mock_network_operation_context(): + current = {'status': 'ACTIVE', + 'subnets': [], + 'name': 'net1', + 'provider:physical_network': None, + 'admin_state_up': True, + 'tenant_id': 'test-tenant', + 'provider:network_type': 'local', + 'router:external': False, + 'shared': False, + 'id': 'd897e21a-dfd6-4331-a5dd-7524fa421c3e', + 'provider:segmentation_id': None} context = mock.Mock(current=current) return context + @staticmethod + def _get_mock_subnet_operation_context(): + current = {'ipv6_ra_mode': None, + 'allocation_pools': [{'start': '10.0.0.2', + 'end': '10.0.1.254'}], + 'host_routes': [], + 'ipv6_address_mode': None, + 'cidr': '10.0.0.0/23', + 'id': '72c56c48-e9b8-4dcf-b3a7-0813bb3bd839', + 'name': '', + 'enable_dhcp': True, + 'network_id': 'd897e21a-dfd6-4331-a5dd-7524fa421c3e', + 'tenant_id': 'test-tenant', + 'dns_nameservers': [], + 'gateway_ip': '10.0.0.1', + 'ip_version': 4, + 'shared': False} + context = mock.Mock(current=current) + return context + + @staticmethod + def _get_mock_port_operation_context(): + current = {'status': 'DOWN', + 'binding:host_id': '', + 'allowed_address_pairs': [], + 'device_owner': 'fake_owner', + 'binding:profile': {}, + 'fixed_ips': [], + 'id': '72c56c48-e9b8-4dcf-b3a7-0813bb3bd839', + 'security_groups': ['2f9244b4-9bee-4e81-bc4a-3f3c2045b3d7'], + 'device_id': 'fake_device', + 'name': '', + 'admin_state_up': True, + 'network_id': 'c13bba05-eb07-45ba-ace2-765706b2d701', + 'tenant_id': 'bad_tenant_id', + 'binding:vif_details': {}, + 'binding:vnic_type': 'normal', + 'binding:vif_type': 'unbound', + 'mac_address': '12:34:56:78:21:b6'} + context = mock.Mock(current=current) + context._plugin.get_security_group = mock.Mock(return_value={}) + return context + + @classmethod + def _get_mock_operation_context(cls, object_type): + getter = getattr(cls, '_get_mock_%s_operation_context' % object_type) + return getter() + _status_code_msgs = { + 200: '', + 201: '', 204: '', + 400: '400 Client Error: Bad Request', 401: '401 Client Error: Unauthorized', 403: '403 Client Error: Forbidden', 404: '404 Client Error: Not Found', 409: '409 Client Error: Conflict', - 501: '501 Server Error: Not Implemented' + 501: '501 Server Error: Not Implemented', + 503: '503 Server Error: Service Unavailable', } @classmethod @@ -162,11 +241,9 @@ class OpenDaylightMechanismDriverTestCase(base.BaseTestCase): cls._status_code_msgs[status_code]))) return response - def _test_delete_resource_postcommit(self, object_type, status_code, - exc_class=None): + def _test_single_operation(self, method, context, status_code, + exc_class=None, *args, **kwargs): self.mech.out_of_sync = False - method = getattr(self.mech, 'delete_%s_postcommit' % object_type) - context = self._get_mock_delete_resource_context() request_response = self._get_mock_request_response(status_code) with mock.patch('requests.request', return_value=request_response) as mock_method: @@ -174,12 +251,105 @@ class OpenDaylightMechanismDriverTestCase(base.BaseTestCase): self.assertRaises(exc_class, method, context) else: method(context) + mock_method.assert_called_once_with( + headers={'Content-Type': 'application/json'}, auth=AuthMatcher(), + timeout=config.cfg.CONF.ml2_odl.timeout, *args, **kwargs) + + def _test_create_resource_postcommit(self, object_type, status_code, + exc_class=None): + method = getattr(self.mech, 'create_%s_postcommit' % object_type) + context = self._get_mock_operation_context(object_type) + url = '%s/%ss' % (config.cfg.CONF.ml2_odl.url, object_type) + kwargs = {'url': url, + 'data': DataMatcher('create', object_type, context)} + self._test_single_operation(method, context, status_code, exc_class, + 'post', **kwargs) + + def _test_update_resource_postcommit(self, object_type, status_code, + exc_class=None): + method = getattr(self.mech, 'update_%s_postcommit' % object_type) + context = self._get_mock_operation_context(object_type) url = '%s/%ss/%s' % (config.cfg.CONF.ml2_odl.url, object_type, context.current['id']) - mock_method.assert_called_once_with( - 'delete', url=url, headers={'Content-Type': 'application/json'}, - data=None, auth=AuthMatcher(), - timeout=config.cfg.CONF.ml2_odl.timeout) + kwargs = {'url': url, + 'data': DataMatcher('update', object_type, context)} + self._test_single_operation(method, context, status_code, exc_class, + 'put', **kwargs) + + def _test_delete_resource_postcommit(self, object_type, status_code, + exc_class=None): + method = getattr(self.mech, 'delete_%s_postcommit' % object_type) + context = self._get_mock_operation_context(object_type) + url = '%s/%ss/%s' % (config.cfg.CONF.ml2_odl.url, object_type, + context.current['id']) + kwargs = {'url': url, 'data': None} + self._test_single_operation(method, context, status_code, exc_class, + 'delete', **kwargs) + + def test_create_network_postcommit(self): + for status_code in (requests.codes.created, + requests.codes.bad_request): + self._test_create_resource_postcommit('network', status_code) + self._test_create_resource_postcommit( + 'network', requests.codes.unauthorized, + requests.exceptions.HTTPError) + + def test_create_subnet_postcommit(self): + for status_code in (requests.codes.created, + requests.codes.bad_request): + self._test_create_resource_postcommit('subnet', status_code) + for status_code in (requests.codes.unauthorized, + requests.codes.forbidden, + requests.codes.not_found, + requests.codes.conflict, + requests.codes.not_implemented): + self._test_create_resource_postcommit( + 'subnet', status_code, requests.exceptions.HTTPError) + + def test_create_port_postcommit(self): + for status_code in (requests.codes.created, + requests.codes.bad_request): + self._test_create_resource_postcommit('port', status_code) + for status_code in (requests.codes.unauthorized, + requests.codes.forbidden, + requests.codes.not_found, + requests.codes.conflict, + requests.codes.not_implemented, + requests.codes.service_unavailable): + self._test_create_resource_postcommit( + 'port', status_code, requests.exceptions.HTTPError) + + def test_update_network_postcommit(self): + for status_code in (requests.codes.ok, + requests.codes.bad_request): + self._test_update_resource_postcommit('network', status_code) + for status_code in (requests.codes.forbidden, + requests.codes.not_found): + self._test_update_resource_postcommit( + 'network', status_code, requests.exceptions.HTTPError) + + def test_update_subnet_postcommit(self): + for status_code in (requests.codes.ok, + requests.codes.bad_request): + self._test_update_resource_postcommit('subnet', status_code) + for status_code in (requests.codes.unauthorized, + requests.codes.forbidden, + requests.codes.not_found, + requests.codes.not_implemented): + self._test_update_resource_postcommit( + 'subnet', status_code, requests.exceptions.HTTPError) + + def test_update_port_postcommit(self): + for status_code in (requests.codes.ok, + requests.codes.bad_request): + self._test_update_resource_postcommit('port', status_code) + for status_code in (requests.codes.unauthorized, + requests.codes.forbidden, + requests.codes.not_found, + requests.codes.conflict, + requests.codes.not_implemented): + self._test_update_resource_postcommit( + 'port', status_code, requests.exceptions.HTTPError) def test_delete_network_postcommit(self): self._test_delete_resource_postcommit('network', From fbec4d6784100214856b7500ccfb2925d8f6e6dc Mon Sep 17 00:00:00 2001 From: Jeremy Stanley Date: Wed, 3 Sep 2014 19:04:06 +0000 Subject: [PATCH 002/128] Work toward Python 3.4 support and testing Change-Id: Ieae7819e0489ae19b7fcfb63497e06527c918b5c --- tox.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tox.ini b/tox.ini index d8c6bbe15be..e3802cd9760 100644 --- a/tox.ini +++ b/tox.ini @@ -1,5 +1,5 @@ [tox] -envlist = py26,py27,py33,pep8 +envlist = py26,py27,py33,py34,pep8 minversion = 1.6 skipsdist = True From b4bf668ec40ee6a329740b587fa4a651a6e0dca2 Mon Sep 17 00:00:00 2001 From: Hareesh Puthalath Date: Tue, 2 Sep 2014 06:05:37 +0200 Subject: [PATCH 003/128] Supply missing cisco_cfg_agent.ini file cisco_cfg_agent.ini file was missed in the initial commit and caused neutron startup issues. This patch supplies the proper ini file and adds it back to neutron setup.cfg. Also the introduced config options are put in a specific group instead of default as was in the initial commit. Change-Id: I74b3b77fe6e196524809580f522f91f3b62f5ba7 Closes-bug: #1351466 --- etc/neutron/plugins/cisco/cisco_cfg_agent.ini | 15 +++++++++++++++ neutron/plugins/cisco/cfg_agent/cfg_agent.py | 8 ++++---- .../csr1kv/csr1kv_routing_driver.py | 2 +- neutron/plugins/cisco/cfg_agent/device_status.py | 9 +++++---- .../tests/unit/cisco/cfg_agent/test_cfg_agent.py | 2 +- setup.cfg | 1 + 6 files changed, 27 insertions(+), 10 deletions(-) create mode 100644 etc/neutron/plugins/cisco/cisco_cfg_agent.ini diff --git a/etc/neutron/plugins/cisco/cisco_cfg_agent.ini b/etc/neutron/plugins/cisco/cisco_cfg_agent.ini new file mode 100644 index 00000000000..d99e8382785 --- /dev/null +++ b/etc/neutron/plugins/cisco/cisco_cfg_agent.ini @@ -0,0 +1,15 @@ +[cfg_agent] +# (IntOpt) Interval in seconds for processing of service updates. +# That is when the config agent's process_services() loop executes +# and it lets each service helper to process its service resources. +# rpc_loop_interval = 10 + +# (StrOpt) Period-separated module path to the routing service helper class. +# routing_svc_helper_class = neutron.plugins.cisco.cfg_agent.service_helpers.routing_svc_helper.RoutingServiceHelper + +# (IntOpt) Timeout value in seconds for connecting to a hosting device. +# device_connection_timeout = 30 + +# (IntOpt) The time in seconds until a backlogged hosting device is +# presumed dead or booted to an error state. +# hosting_device_dead_timeout = 300 diff --git a/neutron/plugins/cisco/cfg_agent/cfg_agent.py b/neutron/plugins/cisco/cfg_agent/cfg_agent.py index a1ae4d8db53..a661872d48b 100644 --- a/neutron/plugins/cisco/cfg_agent/cfg_agent.py +++ b/neutron/plugins/cisco/cfg_agent/cfg_agent.py @@ -129,20 +129,20 @@ class CiscoCfgAgent(manager.Manager): self.devmgr_rpc = CiscoDeviceManagementApi(topics.L3PLUGIN, host) def _initialize_service_helpers(self, host): - svc_helper_class = self.conf.routing_svc_helper_class + svc_helper_class = self.conf.cfg_agent.routing_svc_helper_class try: self.routing_service_helper = importutils.import_object( svc_helper_class, host, self.conf, self) except ImportError as e: LOG.warn(_("Error in loading routing service helper. Class " "specified is %(class)s. Reason:%(reason)s"), - {'class': self.conf.routing_svc_helper_class, + {'class': self.conf.cfg_agent.routing_svc_helper_class, 'reason': e}) self.routing_service_helper = None def _start_periodic_tasks(self): self.loop = loopingcall.FixedIntervalLoopingCall(self.process_services) - self.loop.start(interval=self.conf.rpc_loop_interval) + self.loop.start(interval=self.conf.cfg_agent.rpc_loop_interval) def after_start(self): LOG.info(_("Cisco cfg agent started")) @@ -336,7 +336,7 @@ class CiscoCfgAgentWithStateReport(CiscoCfgAgent): def main(manager='neutron.plugins.cisco.cfg_agent.' 'cfg_agent.CiscoCfgAgentWithStateReport'): conf = cfg.CONF - conf.register_opts(CiscoCfgAgent.OPTS) + conf.register_opts(CiscoCfgAgent.OPTS, "cfg_agent") config.register_agent_state_opts_helper(conf) config.register_root_helper(conf) conf.register_opts(interface.OPTS) diff --git a/neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py b/neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py index 68f8fac77d0..f3e6cef1fea 100644 --- a/neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py +++ b/neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py @@ -57,7 +57,7 @@ class CSR1kvRoutingDriver(devicedriver_api.RoutingDriverBase): if credentials: self._csr_user = credentials['username'] self._csr_password = credentials['password'] - self._timeout = cfg.CONF.device_connection_timeout + self._timeout = cfg.CONF.cfg_agent.device_connection_timeout self._csr_conn = None self._intfs_enabled = False except KeyError as e: diff --git a/neutron/plugins/cisco/cfg_agent/device_status.py b/neutron/plugins/cisco/cfg_agent/device_status.py index b5c50074740..03d7b411c7e 100644 --- a/neutron/plugins/cisco/cfg_agent/device_status.py +++ b/neutron/plugins/cisco/cfg_agent/device_status.py @@ -35,7 +35,7 @@ STATUS_OPTS = [ "or high load when the device may not be responding.")), ] -cfg.CONF.register_opts(STATUS_OPTS) +cfg.CONF.register_opts(STATUS_OPTS, "cfg_agent") def _is_pingable(ip): @@ -78,7 +78,7 @@ class DeviceStatus(object): def get_backlogged_hosting_devices_info(self): wait_time = datetime.timedelta( - seconds=cfg.CONF.hosting_device_dead_timeout) + seconds=cfg.CONF.cfg_agent.hosting_device_dead_timeout) resp = [] for hd_id in self.backlog_hosting_devices: hd = self.backlog_hosting_devices[hd_id]['hd'] @@ -160,13 +160,14 @@ class DeviceStatus(object): 'ip': hd['management_ip_address']}) if timeutils.is_older_than( hd['backlog_insertion_ts'], - cfg.CONF.hosting_device_dead_timeout): + cfg.CONF.cfg_agent.hosting_device_dead_timeout): LOG.debug("Hosting device: %(hd_id)s @ %(ip)s hasn't " "been reachable for the last %(time)d seconds. " "Marking it dead.", {'hd_id': hd_id, 'ip': hd['management_ip_address'], - 'time': cfg.CONF.hosting_device_dead_timeout}) + 'time': cfg.CONF.cfg_agent. + hosting_device_dead_timeout}) response_dict['dead'].append(hd_id) hd.pop('backlog_insertion_ts', None) del self.backlog_hosting_devices[hd_id] diff --git a/neutron/tests/unit/cisco/cfg_agent/test_cfg_agent.py b/neutron/tests/unit/cisco/cfg_agent/test_cfg_agent.py index 740a7308148..2d9b63f157b 100644 --- a/neutron/tests/unit/cisco/cfg_agent/test_cfg_agent.py +++ b/neutron/tests/unit/cisco/cfg_agent/test_cfg_agent.py @@ -73,7 +73,7 @@ class TestCiscoCfgAgentWIthStateReporting(base.BaseTestCase): self.conf = cfg.ConfigOpts() config.register_agent_state_opts_helper(cfg.CONF) self.conf.register_opts(base_config.core_opts) - self.conf.register_opts(cfg_agent.CiscoCfgAgent.OPTS) + self.conf.register_opts(cfg_agent.CiscoCfgAgent.OPTS, "cfg_agent") cfg.CONF.set_override('report_interval', 0, 'AGENT') super(TestCiscoCfgAgentWIthStateReporting, self).setUp() self.devmgr_plugin_api_cls_p = mock.patch( diff --git a/setup.cfg b/setup.cfg index d3aa4329dce..d5c9018f312 100644 --- a/setup.cfg +++ b/setup.cfg @@ -54,6 +54,7 @@ data_files = etc/neutron/plugins/bigswitch/ssl/host_certs/README etc/neutron/plugins/brocade = etc/neutron/plugins/brocade/brocade.ini etc/neutron/plugins/cisco = + etc/neutron/plugins/cisco/cisco_cfg_agent.ini etc/neutron/plugins/cisco/cisco_plugins.ini etc/neutron/plugins/cisco/cisco_router_plugin.ini etc/neutron/plugins/cisco/cisco_vpn_agent.ini From 424c7faa75d96950d80f49f20f5414d1a297af72 Mon Sep 17 00:00:00 2001 From: Ihar Hrachyshka Date: Thu, 7 Aug 2014 22:27:23 +0200 Subject: [PATCH 004/128] Removed kombu from requirements Since we've replaced oslo-incubator RPC layer with oslo.messaging, we don't ship any code that uses kombu. Change-Id: Ia8a74f1326ecd98c47cbe447f04d475bf61e19d3 --- requirements.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index ad2e2a29164..effa29f80dd 100644 --- a/requirements.txt +++ b/requirements.txt @@ -14,7 +14,6 @@ iso8601>=0.1.9 jsonrpclib Jinja2 keystonemiddleware>=1.0.0 -kombu>=2.4.8 netaddr>=0.7.12 python-neutronclient>=2.3.6,<3 SQLAlchemy>=0.8.4,<=0.8.99,>=0.9.7,<=0.9.99 From f8e10b5f6a8b5a4d4dac845c316db23d6f67c347 Mon Sep 17 00:00:00 2001 From: Assaf Muller Date: Tue, 1 Jul 2014 16:18:35 +0300 Subject: [PATCH 005/128] Pythonified sanity_check.all_tests_passed Change-Id: I48986344b7af507e2526d4e8bd1b03277f974972 --- neutron/cmd/sanity_check.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/neutron/cmd/sanity_check.py b/neutron/cmd/sanity_check.py index 1cc7088dc0e..b615c59314a 100644 --- a/neutron/cmd/sanity_check.py +++ b/neutron/cmd/sanity_check.py @@ -89,11 +89,7 @@ def enable_tests_from_config(): def all_tests_passed(): - res = True - for opt in OPTS: - if cfg.CONF.get(opt.name): - res &= opt.callback() - return res + return all(opt.callback() for opt in OPTS if cfg.CONF.get(opt.name)) def main(): From 5e4c14e850e2757bf74a806aaaab4c053bab741d Mon Sep 17 00:00:00 2001 From: Sam Betts Date: Tue, 26 Aug 2014 18:35:36 +0100 Subject: [PATCH 006/128] Added TAP_DEVICE_PREFIX info to common/constants Change-Id: Ia84629732490585164237ca4f7d1db90bde9fbf2 Closes-Bug: 1361573 --- neutron/agent/linux/interface.py | 22 ++++++++++--------- neutron/agent/linux/iptables_firewall.py | 2 +- neutron/common/constants.py | 3 +++ neutron/plugins/bigswitch/plugin.py | 2 +- neutron/plugins/brocade/NeutronPlugin.py | 6 ++--- .../agent/linuxbridge_neutron_agent.py | 7 +++--- .../plugins/linuxbridge/lb_neutron_plugin.py | 6 ++--- neutron/plugins/ml2/plugin.py | 7 ++---- neutron/plugins/mlnx/mlnx_plugin.py | 6 ++--- neutron/plugins/ofagent/agent/ports.py | 8 ++++--- .../unit/linuxbridge/test_lb_neutron_agent.py | 4 ++-- neutron/tests/unit/ofagent/test_ofa_ports.py | 3 ++- 12 files changed, 38 insertions(+), 38 deletions(-) diff --git a/neutron/agent/linux/interface.py b/neutron/agent/linux/interface.py index c6677c1141b..3a99c1a2e47 100644 --- a/neutron/agent/linux/interface.py +++ b/neutron/agent/linux/interface.py @@ -23,6 +23,7 @@ from neutron.agent.common import config from neutron.agent.linux import ip_lib from neutron.agent.linux import ovs_lib from neutron.agent.linux import utils +from neutron.common import constants as n_const from neutron.common import exceptions from neutron.extensions import flavor from neutron.openstack.common import importutils @@ -63,7 +64,7 @@ class LinuxInterfaceDriver(object): # from linux IF_NAMESIZE DEV_NAME_LEN = 14 - DEV_NAME_PREFIX = 'tap' + DEV_NAME_PREFIX = n_const.TAP_DEVICE_PREFIX def __init__(self, conf): self.conf = conf @@ -142,7 +143,7 @@ class NullDriver(LinuxInterfaceDriver): class OVSInterfaceDriver(LinuxInterfaceDriver): """Driver for creating an internal interface on an OVS bridge.""" - DEV_NAME_PREFIX = 'tap' + DEV_NAME_PREFIX = n_const.TAP_DEVICE_PREFIX def __init__(self, conf): super(OVSInterfaceDriver, self).__init__(conf) @@ -151,7 +152,8 @@ class OVSInterfaceDriver(LinuxInterfaceDriver): def _get_tap_name(self, dev_name, prefix=None): if self.conf.ovs_use_veth: - dev_name = dev_name.replace(prefix or self.DEV_NAME_PREFIX, 'tap') + dev_name = dev_name.replace(prefix or self.DEV_NAME_PREFIX, + n_const.TAP_DEVICE_PREFIX) return dev_name def _ovs_add_port(self, bridge, device_name, port_id, mac_address, @@ -246,7 +248,8 @@ class MidonetInterfaceDriver(LinuxInterfaceDriver): self.root_helper, namespace=namespace): ip = ip_lib.IPWrapper(self.root_helper) - tap_name = device_name.replace(prefix or 'tap', 'tap') + tap_name = device_name.replace(prefix or n_const.TAP_DEVICE_PREFIX, + n_const.TAP_DEVICE_PREFIX) # Create ns_dev in a namespace if one is configured. root_dev, ns_dev = ip.add_veth(tap_name, device_name, @@ -285,14 +288,15 @@ class MidonetInterfaceDriver(LinuxInterfaceDriver): class IVSInterfaceDriver(LinuxInterfaceDriver): """Driver for creating an internal interface on an IVS bridge.""" - DEV_NAME_PREFIX = 'tap' + DEV_NAME_PREFIX = n_const.TAP_DEVICE_PREFIX def __init__(self, conf): super(IVSInterfaceDriver, self).__init__(conf) self.DEV_NAME_PREFIX = 'ns-' def _get_tap_name(self, dev_name, prefix=None): - dev_name = dev_name.replace(prefix or self.DEV_NAME_PREFIX, 'tap') + dev_name = dev_name.replace(prefix or self.DEV_NAME_PREFIX, + n_const.TAP_DEVICE_PREFIX) return dev_name def _ivs_add_port(self, device_name, port_id, mac_address): @@ -359,10 +363,8 @@ class BridgeInterfaceDriver(LinuxInterfaceDriver): ip = ip_lib.IPWrapper(self.root_helper) # Enable agent to define the prefix - if prefix: - tap_name = device_name.replace(prefix, 'tap') - else: - tap_name = device_name.replace(self.DEV_NAME_PREFIX, 'tap') + tap_name = device_name.replace(prefix or self.DEV_NAME_PREFIX, + n_const.TAP_DEVICE_PREFIX) # Create ns_veth in a namespace if one is configured. root_veth, ns_veth = ip.add_veth(tap_name, device_name, namespace2=namespace) diff --git a/neutron/agent/linux/iptables_firewall.py b/neutron/agent/linux/iptables_firewall.py index ec37306a559..c7cafc0d063 100644 --- a/neutron/agent/linux/iptables_firewall.py +++ b/neutron/agent/linux/iptables_firewall.py @@ -439,7 +439,7 @@ class IptablesFirewallDriver(firewall.FirewallDriver): class OVSHybridIptablesFirewallDriver(IptablesFirewallDriver): - OVS_HYBRID_TAP_PREFIX = 'tap' + OVS_HYBRID_TAP_PREFIX = constants.TAP_DEVICE_PREFIX def _port_chain_name(self, port, direction): return iptables_manager.get_chain_name( diff --git a/neutron/common/constants.py b/neutron/common/constants.py index f1c15c535b6..1d85e0f86fc 100644 --- a/neutron/common/constants.py +++ b/neutron/common/constants.py @@ -130,3 +130,6 @@ IPV6_LLA_PREFIX = 'fe80::/64' # Linux interface max length DEVICE_NAME_MAX_LEN = 15 + +# Device names start with "tap" +TAP_DEVICE_PREFIX = 'tap' diff --git a/neutron/plugins/bigswitch/plugin.py b/neutron/plugins/bigswitch/plugin.py index 728a5dd0cdc..9ecc0140e9c 100644 --- a/neutron/plugins/bigswitch/plugin.py +++ b/neutron/plugins/bigswitch/plugin.py @@ -115,7 +115,7 @@ class AgentNotifierApi(n_rpc.RpcProxy, class SecurityGroupServerRpcMixin(sg_db_rpc.SecurityGroupServerRpcMixin): def get_port_from_device(self, device): - port_id = re.sub(r"^tap", "", device) + port_id = re.sub(r"^%s" % const.TAP_DEVICE_PREFIX, "", device) port = self.get_port_and_sgs(port_id) if port: port['device'] = device diff --git a/neutron/plugins/brocade/NeutronPlugin.py b/neutron/plugins/brocade/NeutronPlugin.py index 7b46e04bcee..5d9e431e460 100644 --- a/neutron/plugins/brocade/NeutronPlugin.py +++ b/neutron/plugins/brocade/NeutronPlugin.py @@ -58,7 +58,6 @@ LOG = logging.getLogger(__name__) PLUGIN_VERSION = 0.88 AGENT_OWNER_PREFIX = "network:" NOS_DRIVER = 'neutron.plugins.brocade.nos.nosdriver.NOSdriver' -TAP_PREFIX_LEN = 3 SWITCH_OPTS = [cfg.StrOpt('address', default='', help=_('The address of the host to SSH to')), @@ -95,7 +94,8 @@ class BridgeRpcCallbacks(n_rpc.RpcCallback): device = kwargs.get('device') LOG.debug(_("Device %(device)s details requested from %(agent_id)s"), {'device': device, 'agent_id': agent_id}) - port = brocade_db.get_port(rpc_context, device[TAP_PREFIX_LEN:]) + port = brocade_db.get_port(rpc_context, + device[len(q_const.TAP_DEVICE_PREFIX):]) if port: entry = {'device': device, 'vlan_id': port.vlan_id, @@ -155,7 +155,7 @@ class SecurityGroupServerRpcMixin(sg_db_rpc.SecurityGroupServerRpcMixin): # Doing what other plugins are doing session = db.get_session() port = brocade_db.get_port_from_device( - session, device[TAP_PREFIX_LEN:]) + session, device[len(q_const.TAP_DEVICE_PREFIX):]) # TODO(shiv): need to extend the db model to include device owners # make it appears that the device owner is of type network diff --git a/neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py b/neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py index 7d608c3e6ee..8663b4c76f0 100755 --- a/neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py +++ b/neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py @@ -51,7 +51,6 @@ from neutron.plugins.linuxbridge.common import constants as lconst LOG = logging.getLogger(__name__) BRIDGE_NAME_PREFIX = "brq" -TAP_INTERFACE_PREFIX = "tap" BRIDGE_FS = "/sys/devices/virtual/net/" BRIDGE_NAME_PLACEHOLDER = "bridge_name" BRIDGE_INTERFACES_FS = BRIDGE_FS + BRIDGE_NAME_PLACEHOLDER + "/brif/" @@ -110,7 +109,7 @@ class LinuxBridgeManager: if not interface_id: LOG.warning(_("Invalid Interface ID, will lead to incorrect " "tap device name")) - tap_device_name = TAP_INTERFACE_PREFIX + interface_id[0:11] + tap_device_name = constants.TAP_DEVICE_PREFIX + interface_id[0:11] return tap_device_name def get_vxlan_device_name(self, segmentation_id): @@ -142,7 +141,7 @@ class LinuxBridgeManager: try: if_list = os.listdir(bridge_interface_path) return len([interface for interface in if_list if - interface.startswith(TAP_INTERFACE_PREFIX)]) + interface.startswith(constants.TAP_DEVICE_PREFIX)]) except OSError: return 0 @@ -510,7 +509,7 @@ class LinuxBridgeManager: def get_tap_devices(self): devices = set() for device in os.listdir(BRIDGE_FS): - if device.startswith(TAP_INTERFACE_PREFIX): + if device.startswith(constants.TAP_DEVICE_PREFIX): devices.add(device) return devices diff --git a/neutron/plugins/linuxbridge/lb_neutron_plugin.py b/neutron/plugins/linuxbridge/lb_neutron_plugin.py index 2319f8da960..a692bbcfb96 100644 --- a/neutron/plugins/linuxbridge/lb_neutron_plugin.py +++ b/neutron/plugins/linuxbridge/lb_neutron_plugin.py @@ -53,12 +53,10 @@ from neutron.plugins.linuxbridge.db import l2network_db_v2 as db LOG = logging.getLogger(__name__) -# Device names start with "tap" -TAP_PREFIX_LEN = 3 - class LinuxBridgeRpcCallbacks(n_rpc.RpcCallback): + # Device names start with "tap" # history # 1.1 Support Security Group RPC # 1.2 Support get_devices_details_list @@ -540,7 +538,7 @@ class LinuxBridgePluginV2(db_base_plugin_v2.NeutronDbPluginV2, @classmethod def get_port_from_device(cls, device): - port = db.get_port_from_device(device[TAP_PREFIX_LEN:]) + port = db.get_port_from_device(device[len(q_const.TAP_DEVICE_PREFIX):]) if port: port['device'] = device return port diff --git a/neutron/plugins/ml2/plugin.py b/neutron/plugins/ml2/plugin.py index 0de4e26d2a9..46913beaf3b 100644 --- a/neutron/plugins/ml2/plugin.py +++ b/neutron/plugins/ml2/plugin.py @@ -72,9 +72,6 @@ MAX_BIND_TRIES = 10 # providernet.py? TYPE_MULTI_SEGMENT = 'multi-segment' -TAP_DEVICE_PREFIX = 'tap' -TAP_DEVICE_PREFIX_LENGTH = 3 - class Ml2Plugin(db_base_plugin_v2.NeutronDbPluginV2, dvr_mac_db.DVRDbMixin, @@ -1144,8 +1141,8 @@ class Ml2Plugin(db_base_plugin_v2.NeutronDbPluginV2, # REVISIT(rkukura): Consider calling into MechanismDrivers to # process device names, or having MechanismDrivers supply list # of device prefixes to strip. - if device.startswith(TAP_DEVICE_PREFIX): - return device[TAP_DEVICE_PREFIX_LENGTH:] + if device.startswith(const.TAP_DEVICE_PREFIX): + return device[len(const.TAP_DEVICE_PREFIX):] else: # REVISIT(irenab): Consider calling into bound MD to # handle the get_device_details RPC, then remove the 'else' clause diff --git a/neutron/plugins/mlnx/mlnx_plugin.py b/neutron/plugins/mlnx/mlnx_plugin.py index 0a8ed5b7612..155b85d972d 100644 --- a/neutron/plugins/mlnx/mlnx_plugin.py +++ b/neutron/plugins/mlnx/mlnx_plugin.py @@ -52,9 +52,6 @@ from neutron.plugins.mlnx import rpc_callbacks LOG = logging.getLogger(__name__) -#to be compatible with Linux Bridge Agent on Network Node -TAP_PREFIX_LEN = 3 - class MellanoxEswitchPlugin(db_base_plugin_v2.NeutronDbPluginV2, external_net_db.External_net_db_mixin, @@ -529,7 +526,8 @@ class MellanoxEswitchPlugin(db_base_plugin_v2.NeutronDbPluginV2, services get device either by linux bridge plugin device name convention or by mac address """ - port = db.get_port_from_device(device[TAP_PREFIX_LEN:]) + port = db.get_port_from_device( + device[len(q_const.TAP_DEVICE_PREFIX):]) if port: port['device'] = device else: diff --git a/neutron/plugins/ofagent/agent/ports.py b/neutron/plugins/ofagent/agent/ports.py index 4389b795742..218dc5eceed 100644 --- a/neutron/plugins/ofagent/agent/ports.py +++ b/neutron/plugins/ofagent/agent/ports.py @@ -14,6 +14,8 @@ # License for the specific language governing permissions and limitations # under the License. +from neutron.common import constants as n_const + class OFPort(object): def __init__(self, port_name, ofport): @@ -28,7 +30,7 @@ class OFPort(object): PORT_NAME_LEN = 14 PORT_NAME_PREFIXES = [ - "tap", # common cases, including ovs_use_veth=True + n_const.TAP_DEVICE_PREFIX, # common cases, including ovs_use_veth=True "qvo", # nova hybrid interface driver "qr-", # l3-agent INTERNAL_DEV_PREFIX (ovs_use_veth=False) "qg-", # l3-agent EXTERNAL_DEV_PREFIX (ovs_use_veth=False) @@ -61,7 +63,7 @@ def get_normalized_port_name(interface_id): use "tap" prefix throughout the agent and plugin for simplicity. Some care should be taken when talking to the switch. """ - return ("tap" + interface_id)[0:PORT_NAME_LEN] + return (n_const.TAP_DEVICE_PREFIX + interface_id)[0:PORT_NAME_LEN] def _normalize_port_name(name): @@ -71,7 +73,7 @@ def _normalize_port_name(name): """ for pref in PORT_NAME_PREFIXES: if name.startswith(pref): - return "tap" + name[len(pref):] + return n_const.TAP_DEVICE_PREFIX + name[len(pref):] return name diff --git a/neutron/tests/unit/linuxbridge/test_lb_neutron_agent.py b/neutron/tests/unit/linuxbridge/test_lb_neutron_agent.py index adc3822db39..1a2bbc4d2e4 100644 --- a/neutron/tests/unit/linuxbridge/test_lb_neutron_agent.py +++ b/neutron/tests/unit/linuxbridge/test_lb_neutron_agent.py @@ -377,10 +377,10 @@ class TestLinuxBridgeManager(base.BaseTestCase): def test_get_tap_device_name(self): if_id = "123456789101112" self.assertEqual(self.lbm.get_tap_device_name(if_id), - "tap" + if_id[0:11]) + constants.TAP_DEVICE_PREFIX + if_id[0:11]) if_id = "" self.assertEqual(self.lbm.get_tap_device_name(if_id), - "tap") + constants.TAP_DEVICE_PREFIX) def test_get_vxlan_device_name(self): vn_id = constants.MAX_VXLAN_VNI diff --git a/neutron/tests/unit/ofagent/test_ofa_ports.py b/neutron/tests/unit/ofagent/test_ofa_ports.py index 6e36da74923..5216e1db0f1 100644 --- a/neutron/tests/unit/ofagent/test_ofa_ports.py +++ b/neutron/tests/unit/ofagent/test_ofa_ports.py @@ -18,6 +18,7 @@ import mock +from neutron.common import constants as n_const from neutron.plugins.ofagent.agent import ports from neutron.tests import base @@ -35,7 +36,7 @@ class TestOFAgentPorts(base.BaseTestCase): self.assertFalse(p2.is_neutron_port()) def test_neutron_port(self): - for pref in ['qvo', 'qr-', 'qg-', 'tap']: + for pref in ['qvo', 'qr-', 'qg-', n_const.TAP_DEVICE_PREFIX]: name = pref + '03b9a237-0b' p1 = ports.Port(port_name=name, ofport=999) ryu_ofp_port = mock.Mock(port_no=999) From c5ae5ad2637a561ccbc7484045e99d8140822b8d Mon Sep 17 00:00:00 2001 From: Eugene Nikanorov Date: Fri, 12 Sep 2014 09:05:39 +0400 Subject: [PATCH 007/128] Properly handle empty before/after notifications in l2pop code Change-Id: I8644bb7cc2afb3b181397a478f96927990c0a4ca Closes-Bug: #1367881 --- neutron/agent/l2population_rpc.py | 4 ++-- neutron/tests/unit/agent/test_l2population_rpc.py | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/neutron/agent/l2population_rpc.py b/neutron/agent/l2population_rpc.py index 93f6395dd9f..4a485c4ce10 100644 --- a/neutron/agent/l2population_rpc.py +++ b/neutron/agent/l2population_rpc.py @@ -246,12 +246,12 @@ class L2populationRpcCallBackTunnelMixin(L2populationRpcCallBackMixin): if agent_ip == local_ip: continue - after = state.get('after') + after = state.get('after', []) for mac, ip in after: self.setup_entry_for_arp_reply(br, 'add', lvm.vlan, mac, ip) - before = state.get('before') + before = state.get('before', []) for mac, ip in before: self.setup_entry_for_arp_reply(br, 'remove', lvm.vlan, mac, ip) diff --git a/neutron/tests/unit/agent/test_l2population_rpc.py b/neutron/tests/unit/agent/test_l2population_rpc.py index 7b1e0534497..563c53b19db 100644 --- a/neutron/tests/unit/agent/test_l2population_rpc.py +++ b/neutron/tests/unit/agent/test_l2population_rpc.py @@ -234,3 +234,17 @@ class TestL2populationRpcCallBackTunnelMixin( upd_fdb_entry_val, self.local_ip, self.local_vlan_map1) self.assertFalse(m_setup_entry_for_arp_reply.call_count) + + def test_fdb_chg_ip_tun_empty_before_after(self): + upd_fdb_entry_val = { + self.lvms[0].net: { + self.local_ip: {}, + }, + } + m_setup_entry_for_arp_reply = mock.Mock() + self.fakeagent.setup_entry_for_arp_reply = m_setup_entry_for_arp_reply + # passing non-local ip + self.fakeagent.fdb_chg_ip_tun('context', self.fakebr, + upd_fdb_entry_val, "8.8.8.8", + self.local_vlan_map1) + self.assertFalse(m_setup_entry_for_arp_reply.call_count) From da4433e1af75a7ad0a03b3e48e7b12af9a4d0e55 Mon Sep 17 00:00:00 2001 From: YAMAMOTO Takashi Date: Thu, 4 Sep 2014 13:06:21 +0900 Subject: [PATCH 008/128] ofagent: Fix a possible crash in arp responder Be careful for exceptions when feeding packet-in data, which is generated by tenant VMs and thus can not be trusted, to Ryu packet library. Closes-Bug: #1365255 Change-Id: Ia8bacfb55def563a1b23a47709ae72bd4fce0fce --- neutron/plugins/ofagent/agent/arp_lib.py | 8 +++++++- neutron/tests/unit/ofagent/test_arp_lib.py | 5 +++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/neutron/plugins/ofagent/agent/arp_lib.py b/neutron/plugins/ofagent/agent/arp_lib.py index c83e9435287..e97394dc2a3 100644 --- a/neutron/plugins/ofagent/agent/arp_lib.py +++ b/neutron/plugins/ofagent/agent/arp_lib.py @@ -143,7 +143,13 @@ class ArpLib(object): ofp = datapath.ofproto port = msg.match['in_port'] metadata = msg.match.get('metadata') - pkt = packet.Packet(msg.data) + # NOTE(yamamoto): Ryu packet library can raise various exceptions + # on a corrupted packet. + try: + pkt = packet.Packet(msg.data) + except Exception as e: + LOG.info(_LI("Unparsable packet: got exception %s"), e) + return LOG.info(_LI("packet-in dpid %(dpid)s in_port %(port)s pkt %(pkt)s"), {'dpid': dpid_lib.dpid_to_str(datapath.id), 'port': port, 'pkt': pkt}) diff --git a/neutron/tests/unit/ofagent/test_arp_lib.py b/neutron/tests/unit/ofagent/test_arp_lib.py index a0b0dcdafc3..27dc8b28b95 100644 --- a/neutron/tests/unit/ofagent/test_arp_lib.py +++ b/neutron/tests/unit/ofagent/test_arp_lib.py @@ -289,6 +289,11 @@ class TestArpLib(OFAAgentTestCase): self._fake_get_protocol_arp = False self._test_packet_in_handler_drop() + def test_packet_in_handler_corrupted(self): + mock.patch('ryu.lib.packet.packet.Packet', + side_effect=ValueError).start() + self._test_packet_in_handler_drop() + def test_packet_in_handler_unknown_network(self): self.arplib._arp_tbl = { self.nets[0].net: {self.nets[0].ip: self.nets[0].mac}} From 4e1c4cbcd71833095534bea9ff7617c582c300d2 Mon Sep 17 00:00:00 2001 From: Abhishek Raut Date: Fri, 12 Sep 2014 19:56:40 -0700 Subject: [PATCH 009/128] Cisco N1kv: Remove vmnetwork delete REST call on last port delete Remove the vm network delete call to the VSM on final port call and ensure that vm network is deleted from the database when the port count becomes 0. Change-Id: I6c08a099adfce2fdba8eefec6aadeb68a780ac37 Closes-Bug: 1373547 --- .../plugins/cisco/n1kv/n1kv_neutron_plugin.py | 2 -- .../tests/unit/cisco/n1kv/test_n1kv_plugin.py | 18 ++++++++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py b/neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py index 236822d2173..16c53660f59 100644 --- a/neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py +++ b/neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py @@ -847,8 +847,6 @@ class N1kvNeutronPluginV2(db_base_plugin_v2.NeutronDbPluginV2, LOG.debug(_('_send_delete_port_request: %s'), port['id']) n1kvclient = n1kv_client.Client() n1kvclient.delete_n1kv_port(vm_network['name'], port['id']) - if vm_network['port_count'] == 0: - n1kvclient.delete_vm_network(vm_network['name']) def _get_segmentation_id(self, context, id): """ diff --git a/neutron/tests/unit/cisco/n1kv/test_n1kv_plugin.py b/neutron/tests/unit/cisco/n1kv/test_n1kv_plugin.py index e412dfc7e68..0a64ba10909 100644 --- a/neutron/tests/unit/cisco/n1kv/test_n1kv_plugin.py +++ b/neutron/tests/unit/cisco/n1kv/test_n1kv_plugin.py @@ -793,6 +793,24 @@ class TestN1kvPorts(test_plugin.TestPortsV2, # for network object clean up to succeed. client_patch.stop() + def test_delete_last_port_vmnetwork_cleanup(self): + """Test whether VMNetwork is cleaned up from db on last port delete.""" + db_session = db.get_session() + with self.port() as port: + pt = port['port'] + self.assertIsNotNone(n1kv_db_v2. + get_vm_network(db_session, + pt['n1kv:profile_id'], + pt['network_id'])) + req = self.new_delete_request('ports', port['port']['id']) + req.get_response(self.api) + # Verify VMNetwork is cleaned up from the database on port delete. + self.assertRaises(c_exc.VMNetworkNotFound, + n1kv_db_v2.get_vm_network, + db_session, + pt['n1kv:profile_id'], + pt['network_id']) + class TestN1kvPolicyProfiles(N1kvPluginTestCase): def setUp(self): From 0e4141644df45f25c229c65e66c57132a93b446c Mon Sep 17 00:00:00 2001 From: Carl Baldwin Date: Tue, 11 Feb 2014 00:58:42 +0000 Subject: [PATCH 010/128] Rename workers to api_workers and simplify code Refactor a few ugly aspects of the multiple API worker patch to make way for multiple rpc workers. This came up as I was trying to add multiple RPC workers using similar patterns and remembering that some things were left in a rather awkward state. Change-Id: I549db67af4af6a2df80e12cf233109dda5213c47 --- neutron/agent/metadata/agent.py | 13 ++------- neutron/service.py | 2 +- neutron/tests/unit/test_metadata_agent.py | 26 +++--------------- neutron/tests/unit/test_wsgi.py | 6 ++--- neutron/wsgi.py | 32 +++++++++++------------ 5 files changed, 23 insertions(+), 56 deletions(-) diff --git a/neutron/agent/metadata/agent.py b/neutron/agent/metadata/agent.py index 569a99171a2..a678edab71a 100644 --- a/neutron/agent/metadata/agent.py +++ b/neutron/agent/metadata/agent.py @@ -40,7 +40,6 @@ from neutron.openstack.common.cache import cache from neutron.openstack.common import excutils from neutron.openstack.common import log as logging from neutron.openstack.common import loopingcall -from neutron.openstack.common import service from neutron import wsgi LOG = logging.getLogger(__name__) @@ -280,16 +279,8 @@ class UnixDomainWSGIServer(wsgi.Server): self._socket = eventlet.listen(file_socket, family=socket.AF_UNIX, backlog=backlog) - if workers < 1: - # For the case where only one process is required. - self._server = self.pool.spawn_n(self._run, application, - self._socket) - else: - # Minimize the cost of checking for child exit by extending the - # wait interval past the default of 0.01s. - self._launcher = service.ProcessLauncher(wait_interval=1.0) - self._server = WorkerService(self, application) - self._launcher.launch_service(self._server, workers=workers) + + self._launch(application, workers=workers) def _run(self, application, socket): """Start a WSGI service in a new green thread.""" diff --git a/neutron/service.py b/neutron/service.py index 820364f7c10..eb48687cb37 100644 --- a/neutron/service.py +++ b/neutron/service.py @@ -40,7 +40,7 @@ service_opts = [ help=_('Seconds between running periodic tasks')), cfg.IntOpt('api_workers', default=0, - help=_('Number of separate worker processes for service')), + help=_('Number of separate API worker processes for service')), cfg.IntOpt('rpc_workers', default=0, help=_('Number of RPC worker processes for service')), diff --git a/neutron/tests/unit/test_metadata_agent.py b/neutron/tests/unit/test_metadata_agent.py index dbb3e123062..dff72cf0289 100644 --- a/neutron/tests/unit/test_metadata_agent.py +++ b/neutron/tests/unit/test_metadata_agent.py @@ -495,8 +495,8 @@ class TestUnixDomainWSGIServer(base.BaseTestCase): def test_start(self): mock_app = mock.Mock() - with mock.patch.object(self.server, 'pool') as pool: - self.server.start(mock_app, '/the/path', workers=0, backlog=128) + with mock.patch.object(self.server, '_launch') as launcher: + self.server.start(mock_app, '/the/path', workers=5, backlog=128) self.eventlet.assert_has_calls([ mock.call.listen( '/the/path', @@ -504,27 +504,7 @@ class TestUnixDomainWSGIServer(base.BaseTestCase): backlog=128 )] ) - pool.spawn_n.assert_called_once_with( - self.server._run, - mock_app, - self.eventlet.listen.return_value - ) - - @mock.patch('neutron.openstack.common.service.ProcessLauncher') - def test_start_multiple_workers(self, process_launcher): - launcher = process_launcher.return_value - - mock_app = mock.Mock() - self.server.start(mock_app, '/the/path', workers=2, backlog=128) - launcher.running = True - launcher.launch_service.assert_called_once_with(self.server._server, - workers=2) - - self.server.stop() - self.assertFalse(launcher.running) - - self.server.wait() - launcher.wait.assert_called_once_with() + launcher.assert_called_once_with(mock_app, workers=5) def test_run(self): with mock.patch.object(agent, 'logging') as logging: diff --git a/neutron/tests/unit/test_wsgi.py b/neutron/tests/unit/test_wsgi.py index d1229139886..789b27ce62a 100644 --- a/neutron/tests/unit/test_wsgi.py +++ b/neutron/tests/unit/test_wsgi.py @@ -56,12 +56,10 @@ class TestWSGIServer(base.BaseTestCase): server = wsgi.Server("test_multiple_processes") server.start(None, 0, host="127.0.0.1", workers=2) - launcher.running = True - launcher.launch_service.assert_called_once_with(server._server, - workers=2) + launcher.launch_service.assert_called_once_with(mock.ANY, workers=2) server.stop() - self.assertFalse(launcher.running) + launcher.stop.assert_called_once_with() server.wait() launcher.wait.assert_called_once_with() diff --git a/neutron/wsgi.py b/neutron/wsgi.py index a98e2226375..137dcb96e5e 100644 --- a/neutron/wsgi.py +++ b/neutron/wsgi.py @@ -97,7 +97,8 @@ class WorkerService(object): self._service._socket) def wait(self): - self._service.pool.waitall() + if isinstance(self._server, eventlet.greenthread.GreenThread): + self._server.wait() def stop(self): if isinstance(self._server, eventlet.greenthread.GreenThread): @@ -113,7 +114,6 @@ class Server(object): eventlet.wsgi.MAX_HEADER_LINE = CONF.max_header_line self.pool = eventlet.GreenPool(threads) self.name = name - self._launcher = None self._server = None def _get_socket(self, host, port, backlog): @@ -205,17 +205,22 @@ class Server(object): self._socket = self._get_socket(self._host, self._port, backlog=backlog) + + self._launch(application, workers) + + def _launch(self, application, workers=0): + service = WorkerService(self, application) if workers < 1: - # For the case where only one process is required. - self._server = self.pool.spawn(self._run, application, - self._socket) + # The API service should run in the current process. + self._server = service + service.start() systemd.notify_once() else: + # The API service runs in a number of child processes. # Minimize the cost of checking for child exit by extending the # wait interval past the default of 0.01s. - self._launcher = common_service.ProcessLauncher(wait_interval=1.0) - self._server = WorkerService(self, application) - self._launcher.launch_service(self._server, workers=workers) + self._server = common_service.ProcessLauncher(wait_interval=1.0) + self._server.launch_service(service, workers=workers) @property def host(self): @@ -226,19 +231,12 @@ class Server(object): return self._socket.getsockname()[1] if self._socket else self._port def stop(self): - if self._launcher: - # The process launcher does not support stop or kill. - self._launcher.running = False - else: - self._server.kill() + self._server.stop() def wait(self): """Wait until all servers have completed running.""" try: - if self._launcher: - self._launcher.wait() - else: - self.pool.waitall() + self._server.wait() except KeyboardInterrupt: pass From dd5c73450da908d95724e20eb3be09bc936cb551 Mon Sep 17 00:00:00 2001 From: YAMAMOTO Takashi Date: Fri, 15 Aug 2014 14:20:00 +0900 Subject: [PATCH 011/128] ofagent: Ignore unknown l2pop entry removals l2pop can send us entry removal without the corresponding addition. Gracefully ignore it instead of crashing. Closes-Bug: #1357198 Change-Id: I5a0cc44ba62faf15d6fe3730a9532a3826647820 --- neutron/plugins/ofagent/agent/arp_lib.py | 7 ++++++- neutron/tests/unit/ofagent/test_arp_lib.py | 17 +++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/neutron/plugins/ofagent/agent/arp_lib.py b/neutron/plugins/ofagent/agent/arp_lib.py index c83e9435287..aeae8f3588b 100644 --- a/neutron/plugins/ofagent/agent/arp_lib.py +++ b/neutron/plugins/ofagent/agent/arp_lib.py @@ -120,7 +120,12 @@ class ArpLib(object): @log.log def del_arp_table_entry(self, network, ip): - del self._arp_tbl[network][ip] + if network not in self._arp_tbl: + LOG.debug("removal of unknown network %s", network) + return + if self._arp_tbl[network].pop(ip, None) is None: + LOG.debug("removal of unknown ip %s", ip) + return if not self._arp_tbl[network]: del self._arp_tbl[network] diff --git a/neutron/tests/unit/ofagent/test_arp_lib.py b/neutron/tests/unit/ofagent/test_arp_lib.py index a0b0dcdafc3..45c1193628d 100644 --- a/neutron/tests/unit/ofagent/test_arp_lib.py +++ b/neutron/tests/unit/ofagent/test_arp_lib.py @@ -16,6 +16,7 @@ import collections import contextlib +import copy import mock @@ -203,6 +204,22 @@ class TestArpLib(OFAAgentTestCase): self.arplib.del_arp_table_entry(self.nets[0].net, self.nets[0].ip) self.assertEqual(self.arplib._arp_tbl, {}) + def test_del_arp_table_entry_unknown_network(self): + self.arplib._arp_tbl = { + 100: {"192.0.2.1": "fa:16:3e:e2:37:37"}, + } + orig = copy.deepcopy(self.arplib._arp_tbl) + self.arplib.del_arp_table_entry(200, "192.0.2.1") + self.assertEqual(orig, self.arplib._arp_tbl) + + def test_del_arp_table_entry_unknown_ip(self): + self.arplib._arp_tbl = { + 100: {"192.0.2.1": "fa:16:3e:e2:37:37"}, + } + orig = copy.deepcopy(self.arplib._arp_tbl) + self.arplib.del_arp_table_entry(100, "192.0.2.9") + self.assertEqual(orig, self.arplib._arp_tbl) + def test_del_arp_table_entry_multiple_net(self): self.arplib._arp_tbl = { self.nets[0].net: {self.nets[0].ip: self.nets[0].mac}, From 34cf04a0ea84f4e5b32aa8d45108bd2a38bcff58 Mon Sep 17 00:00:00 2001 From: Kevin Benton Date: Tue, 16 Sep 2014 17:29:51 -0700 Subject: [PATCH 012/128] Delete DB records instead of tables to speedup UT Now that the schema is fixed for all of the plugins, there isn't a need to delete and recreate the entire schema for every unit test. This patch clears the tables at the end of each test instead of deleting them. This eliminated overhead seems to save 10%+ execution time of the entire set of unit tests. Example of performance gain from tox -epy27 tests.unit.ml2: Before: Ran 2495 tests in 284.186s After: Ran 2495 tests in 223.299s Change-Id: Ic5bcbb0cf941e0745890abc776d719e58bb42e35 --- neutron/tests/unit/testlib_api.py | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/neutron/tests/unit/testlib_api.py b/neutron/tests/unit/testlib_api.py index a8c7a7e6edb..564e0b501f3 100644 --- a/neutron/tests/unit/testlib_api.py +++ b/neutron/tests/unit/testlib_api.py @@ -55,17 +55,24 @@ def create_request(path, body, content_type, method='GET', class SqlTestCase(base.BaseTestCase): + # flag to indicate that the models have been loaded + _TABLES_ESTABLISHED = False + def setUp(self): super(SqlTestCase, self).setUp() # Register all data models engine = db_api.get_engine() - model_base.BASEV2.metadata.create_all(engine) + if not SqlTestCase._TABLES_ESTABLISHED: + model_base.BASEV2.metadata.create_all(engine) + SqlTestCase._TABLES_ESTABLISHED = True - def unregister_models(): - """Unregister all data models.""" - model_base.BASEV2.metadata.drop_all(engine) + def clear_tables(): + with engine.begin() as conn: + for table in reversed( + model_base.BASEV2.metadata.sorted_tables): + conn.execute(table.delete()) - self.addCleanup(unregister_models) + self.addCleanup(clear_tables) class WebTestCase(SqlTestCase): From 1d4e13574574472e299296892d7c9e8f706aea67 Mon Sep 17 00:00:00 2001 From: Chirag Shahani Date: Wed, 10 Sep 2014 15:47:48 -0700 Subject: [PATCH 013/128] Fix to delete user and group association in Nuage Plugin After a router delete operation, the attached zone to that router is also deleted. Got rid of code that tried to do a get operation on the nuage_zone after router delete operation. Closes-Bug: #1367864 Change-Id: I01753a472200a961cdcecee703616fd3239abd3c --- neutron/plugins/nuage/plugin.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/neutron/plugins/nuage/plugin.py b/neutron/plugins/nuage/plugin.py index f0041e18ee9..f520c7ce257 100644 --- a/neutron/plugins/nuage/plugin.py +++ b/neutron/plugins/nuage/plugin.py @@ -990,8 +990,7 @@ class NuagePlugin(db_base_plugin_v2.NeutronDbPluginV2, super(NuagePlugin, self).delete_router(context, id) - nuage_zone = self.nuageclient.get_zone_by_routerid(id) - if nuage_zone and not self._check_router_subnet_for_tenant( + if not self._check_router_subnet_for_tenant( context, neutron_router['tenant_id']): user_id, group_id = self.nuageclient.get_usergroup( neutron_router['tenant_id'], From 2286d220ddb2677c957837381e1827bdfe3b0c8e Mon Sep 17 00:00:00 2001 From: Paul Michali Date: Tue, 16 Sep 2014 11:22:17 -0400 Subject: [PATCH 014/128] Rework and enable VPNaaS UT for Cisco CSR REST The Cisco CSR REST client library unit tests were developed in Icehouse, using the httmock library. However, the community did not want to add this library to global requirements, as there was a similar httpretty library available (albeit with some short- comings). As a result, the test module was renamed with a "no" prefix, to prevent inclusion in automated tests. Since then, a new library, requests-mock, has been added to global requirements, to replace httpretty, and is being used on several other projects. This commit reworks the unit test to use requests-mock, instead of httmock. The functionality is the same, but the mechanism (a fixture with URI registration vs context manager) is different. This commit provides coverage for the REST client code, by using a mock for the Cisco CSR VM. The unit test module can be subclassed, and used with a real CSR VM, for 3rd party CI testing, in the future. Change-Id: I55c8a253eb32985bc2016ae748b1ded58d021e1a Closes-Bug: 1358470 --- .../vpn/device_drivers/cisco_csr_mock.py | 577 ------ .../device_drivers/notest_cisco_csr_rest.py | 1358 -------------- .../vpn/device_drivers/test_cisco_csr_rest.py | 1626 +++++++++++++++++ 3 files changed, 1626 insertions(+), 1935 deletions(-) delete mode 100644 neutron/tests/unit/services/vpn/device_drivers/cisco_csr_mock.py delete mode 100644 neutron/tests/unit/services/vpn/device_drivers/notest_cisco_csr_rest.py create mode 100644 neutron/tests/unit/services/vpn/device_drivers/test_cisco_csr_rest.py diff --git a/neutron/tests/unit/services/vpn/device_drivers/cisco_csr_mock.py b/neutron/tests/unit/services/vpn/device_drivers/cisco_csr_mock.py deleted file mode 100644 index 93a126bfdac..00000000000 --- a/neutron/tests/unit/services/vpn/device_drivers/cisco_csr_mock.py +++ /dev/null @@ -1,577 +0,0 @@ -# Copyright 2014 Cisco Systems, Inc. All rights reserved. -# -# 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. - -"""Mock REST requests to Cisco Cloud Services Router.""" - -import re - -import functools -# TODO(pcm): Remove when switch to requests-mock package. Comment out, if use -# local copy of httmock.py source. Needed for PEP8. -import httmock -import requests -from requests import exceptions as r_exc - -from neutron.openstack.common import log as logging -# TODO(pcm) Remove once httmock package is added to test-requirements. For -# now, uncomment and include httmock source to unit test. -# from neutron.tests.unit.services.vpn.device_drivers import httmock - -LOG = logging.getLogger(__name__) - - -def repeat(n): - """Decorator to limit the number of times a handler is called. - - Will allow the wrapped function (handler) to be called 'n' times. - After that, this will return None for any additional calls, - allowing other handlers, if any, to be invoked. - """ - - class static: - retries = n - - def decorator(func): - @functools.wraps(func) - def wrapped(*args, **kwargs): - if static.retries == 0: - return None - static.retries -= 1 - return func(*args, **kwargs) - return wrapped - return decorator - - -def filter_request(methods, resource): - """Decorator to invoke handler once for a specific resource. - - This will call the handler only for a specific resource using - a specific method(s). Any other resource request or method will - return None, allowing other handlers, if any, to be invoked. - """ - - class static: - target_methods = [m.upper() for m in methods] - target_resource = resource - - def decorator(func): - @functools.wraps(func) - def wrapped(*args, **kwargs): - if (args[1].method in static.target_methods and - static.target_resource in args[0].path): - return func(*args, **kwargs) - else: - return None # Not for this resource - return wrapped - return decorator - - -@httmock.urlmatch(netloc=r'localhost') -def token(url, request): - if 'auth/token-services' in url.path: - return {'status_code': requests.codes.OK, - 'content': {'token-id': 'dummy-token'}} - - -@httmock.urlmatch(netloc=r'localhost') -def token_unauthorized(url, request): - if 'auth/token-services' in url.path: - return {'status_code': requests.codes.UNAUTHORIZED} - - -@httmock.urlmatch(netloc=r'wrong-host') -def token_wrong_host(url, request): - raise r_exc.ConnectionError() - - -@httmock.all_requests -def token_timeout(url, request): - raise r_exc.Timeout() - - -@filter_request(['get'], 'global/host-name') -@httmock.all_requests -def timeout(url, request): - """Simulated timeout of a normal request.""" - - if not request.headers.get('X-auth-token', None): - return {'status_code': requests.codes.UNAUTHORIZED} - raise r_exc.Timeout() - - -@httmock.urlmatch(netloc=r'localhost') -def no_such_resource(url, request): - """Indicate not found error, when invalid resource requested.""" - return {'status_code': requests.codes.NOT_FOUND} - - -@filter_request(['get'], 'global/host-name') -@repeat(1) -@httmock.urlmatch(netloc=r'localhost') -def expired_request(url, request): - """Simulate access denied failure on first request for this resource. - - Intent here is to simulate that the token has expired, by failing - the first request to the resource. Because of the repeat=1, this - will only be called once, and subsequent calls will not be handled - by this function, but instead will access the normal handler and - will pass. Currently configured for a GET request, but will work - with POST and PUT as well. For DELETE, would need to filter_request on a - different resource (e.g. 'global/local-users') - """ - - return {'status_code': requests.codes.UNAUTHORIZED} - - -@httmock.urlmatch(netloc=r'localhost') -def normal_get(url, request): - if request.method != 'GET': - return - LOG.debug("GET mock for %s", url) - if not request.headers.get('X-auth-token', None): - return {'status_code': requests.codes.UNAUTHORIZED} - if 'global/host-name' in url.path: - content = {u'kind': u'object#host-name', - u'host-name': u'Router'} - return httmock.response(requests.codes.OK, content=content) - if 'global/local-users' in url.path: - content = {u'kind': u'collection#local-user', - u'users': ['peter', 'paul', 'mary']} - return httmock.response(requests.codes.OK, content=content) - if 'interfaces/GigabitEthernet' in url.path: - actual_interface = url.path.split('/')[-1] - ip = actual_interface[-1] - content = {u'kind': u'object#interface', - u'description': u'Changed description', - u'if-name': actual_interface, - u'proxy-arp': True, - u'subnet-mask': u'255.255.255.0', - u'icmp-unreachable': True, - u'nat-direction': u'', - u'icmp-redirects': True, - u'ip-address': u'192.168.200.%s' % ip, - u'verify-unicast-source': False, - u'type': u'ethernet'} - return httmock.response(requests.codes.OK, content=content) - if 'vpn-svc/ike/policies/2' in url.path: - content = {u'kind': u'object#ike-policy', - u'priority-id': u'2', - u'version': u'v1', - u'local-auth-method': u'pre-share', - u'encryption': u'aes256', - u'hash': u'sha', - u'dhGroup': 5, - u'lifetime': 3600} - return httmock.response(requests.codes.OK, content=content) - if 'vpn-svc/ike/keyrings' in url.path: - content = {u'kind': u'object#ike-keyring', - u'keyring-name': u'5', - u'pre-shared-key-list': [ - {u'key': u'super-secret', - u'encrypted': False, - u'peer-address': u'10.10.10.20 255.255.255.0'} - ]} - return httmock.response(requests.codes.OK, content=content) - if 'vpn-svc/ipsec/policies/' in url.path: - ipsec_policy_id = url.path.split('/')[-1] - content = {u'kind': u'object#ipsec-policy', - u'mode': u'tunnel', - u'policy-id': u'%s' % ipsec_policy_id, - u'protection-suite': { - u'esp-encryption': u'esp-256-aes', - u'esp-authentication': u'esp-sha-hmac', - u'ah': u'ah-sha-hmac', - }, - u'anti-replay-window-size': u'Disable', - u'lifetime-sec': 120, - u'pfs': u'group5', - u'lifetime-kb': 4608000, - u'idle-time': None} - return httmock.response(requests.codes.OK, content=content) - if 'vpn-svc/site-to-site/Tunnel' in url.path: - tunnel = url.path.split('/')[-1] - # Use same number, to allow mock to generate IPSec policy ID - ipsec_policy_id = tunnel[6:] - content = {u'kind': u'object#vpn-site-to-site', - u'vpn-interface-name': u'%s' % tunnel, - u'ip-version': u'ipv4', - u'vpn-type': u'site-to-site', - u'ipsec-policy-id': u'%s' % ipsec_policy_id, - u'ike-profile-id': None, - u'mtu': 1500, - u'local-device': { - u'ip-address': '10.3.0.1/24', - u'tunnel-ip-address': '10.10.10.10' - }, - u'remote-device': { - u'tunnel-ip-address': '10.10.10.20' - }} - return httmock.response(requests.codes.OK, content=content) - if 'vpn-svc/ike/keepalive' in url.path: - content = {u'interval': 60, - u'retry': 4, - u'periodic': True} - return httmock.response(requests.codes.OK, content=content) - if 'routing-svc/static-routes' in url.path: - content = {u'destination-network': u'10.1.0.0/24', - u'kind': u'object#static-route', - u'next-hop-router': None, - u'outgoing-interface': u'GigabitEthernet1', - u'admin-distance': 1} - return httmock.response(requests.codes.OK, content=content) - if 'vpn-svc/site-to-site/active/sessions' in url.path: - # Only including needed fields for mock - content = {u'kind': u'collection#vpn-active-sessions', - u'items': [{u'status': u'DOWN-NEGOTIATING', - u'vpn-interface-name': u'Tunnel123'}, ]} - return httmock.response(requests.codes.OK, content=content) - - -@filter_request(['get'], 'vpn-svc/ike/keyrings') -@httmock.urlmatch(netloc=r'localhost') -def get_fqdn(url, request): - LOG.debug("GET FQDN mock for %s", url) - if not request.headers.get('X-auth-token', None): - return {'status_code': requests.codes.UNAUTHORIZED} - content = {u'kind': u'object#ike-keyring', - u'keyring-name': u'5', - u'pre-shared-key-list': [ - {u'key': u'super-secret', - u'encrypted': False, - u'peer-address': u'cisco.com'} - ]} - return httmock.response(requests.codes.OK, content=content) - - -@filter_request(['get'], 'vpn-svc/ipsec/policies/') -@httmock.urlmatch(netloc=r'localhost') -def get_no_ah(url, request): - LOG.debug("GET No AH mock for %s", url) - if not request.headers.get('X-auth-token', None): - return {'status_code': requests.codes.UNAUTHORIZED} - ipsec_policy_id = url.path.split('/')[-1] - content = {u'kind': u'object#ipsec-policy', - u'mode': u'tunnel', - u'anti-replay-window-size': u'128', - u'policy-id': u'%s' % ipsec_policy_id, - u'protection-suite': { - u'esp-encryption': u'esp-aes', - u'esp-authentication': u'esp-sha-hmac', - }, - u'lifetime-sec': 120, - u'pfs': u'group5', - u'lifetime-kb': 4608000, - u'idle-time': None} - return httmock.response(requests.codes.OK, content=content) - - -@httmock.urlmatch(netloc=r'localhost') -def get_defaults(url, request): - if request.method != 'GET': - return - LOG.debug("GET mock for %s", url) - if not request.headers.get('X-auth-token', None): - return {'status_code': requests.codes.UNAUTHORIZED} - if 'vpn-svc/ike/policies/2' in url.path: - content = {u'kind': u'object#ike-policy', - u'priority-id': u'2', - u'version': u'v1', - u'local-auth-method': u'pre-share', - u'encryption': u'des', - u'hash': u'sha', - u'dhGroup': 1, - u'lifetime': 86400} - return httmock.response(requests.codes.OK, content=content) - if 'vpn-svc/ipsec/policies/' in url.path: - ipsec_policy_id = url.path.split('/')[-1] - content = {u'kind': u'object#ipsec-policy', - u'mode': u'tunnel', - u'policy-id': u'%s' % ipsec_policy_id, - u'protection-suite': {}, - u'lifetime-sec': 3600, - u'pfs': u'Disable', - u'anti-replay-window-size': u'None', - u'lifetime-kb': 4608000, - u'idle-time': None} - return httmock.response(requests.codes.OK, content=content) - - -@filter_request(['get'], 'vpn-svc/site-to-site') -@httmock.urlmatch(netloc=r'localhost') -def get_unnumbered(url, request): - if not request.headers.get('X-auth-token', None): - return {'status_code': requests.codes.UNAUTHORIZED} - tunnel = url.path.split('/')[-1] - ipsec_policy_id = tunnel[6:] - content = {u'kind': u'object#vpn-site-to-site', - u'vpn-interface-name': u'%s' % tunnel, - u'ip-version': u'ipv4', - u'vpn-type': u'site-to-site', - u'ipsec-policy-id': u'%s' % ipsec_policy_id, - u'ike-profile-id': None, - u'mtu': 1500, - u'local-device': { - u'ip-address': u'GigabitEthernet3', - u'tunnel-ip-address': u'10.10.10.10' - }, - u'remote-device': { - u'tunnel-ip-address': u'10.10.10.20' - }} - return httmock.response(requests.codes.OK, content=content) - - -@filter_request(['get'], 'vpn-svc/site-to-site/Tunnel') -@httmock.urlmatch(netloc=r'localhost') -def get_admin_down(url, request): - if not request.headers.get('X-auth-token', None): - return {'status_code': requests.codes.UNAUTHORIZED} - # URI has .../Tunnel#/state, so get number from 2nd to last element - tunnel = url.path.split('/')[-2] - content = {u'kind': u'object#vpn-site-to-site-state', - u'vpn-interface-name': u'%s' % tunnel, - u'line-protocol-state': u'down', - u'enabled': False} - return httmock.response(requests.codes.OK, content=content) - - -@filter_request(['get'], 'vpn-svc/site-to-site/Tunnel') -@httmock.urlmatch(netloc=r'localhost') -def get_admin_up(url, request): - if not request.headers.get('X-auth-token', None): - return {'status_code': requests.codes.UNAUTHORIZED} - # URI has .../Tunnel#/state, so get number from 2nd to last element - tunnel = url.path.split('/')[-2] - content = {u'kind': u'object#vpn-site-to-site-state', - u'vpn-interface-name': u'%s' % tunnel, - u'line-protocol-state': u'down', - u'enabled': True} - return httmock.response(requests.codes.OK, content=content) - - -@filter_request(['get'], 'vpn-svc/site-to-site') -@httmock.urlmatch(netloc=r'localhost') -def get_mtu(url, request): - if not request.headers.get('X-auth-token', None): - return {'status_code': requests.codes.UNAUTHORIZED} - tunnel = url.path.split('/')[-1] - ipsec_policy_id = tunnel[6:] - content = {u'kind': u'object#vpn-site-to-site', - u'vpn-interface-name': u'%s' % tunnel, - u'ip-version': u'ipv4', - u'vpn-type': u'site-to-site', - u'ipsec-policy-id': u'%s' % ipsec_policy_id, - u'ike-profile-id': None, - u'mtu': 9192, - u'local-device': { - u'ip-address': u'10.3.0.1/24', - u'tunnel-ip-address': u'10.10.10.10' - }, - u'remote-device': { - u'tunnel-ip-address': u'10.10.10.20' - }} - return httmock.response(requests.codes.OK, content=content) - - -@filter_request(['get'], 'vpn-svc/ike/keepalive') -@httmock.urlmatch(netloc=r'localhost') -def get_not_configured(url, request): - if not request.headers.get('X-auth-token', None): - return {'status_code': requests.codes.UNAUTHORIZED} - return {'status_code': requests.codes.NOT_FOUND} - - -@filter_request(['get'], 'vpn-svc/site-to-site/active/sessions') -@httmock.urlmatch(netloc=r'localhost') -def get_none(url, request): - if not request.headers.get('X-auth-token', None): - return {'status_code': requests.codes.UNAUTHORIZED} - content = {u'kind': u'collection#vpn-active-sessions', - u'items': []} - return httmock.response(requests.codes.OK, content=content) - - -@filter_request(['get'], 'interfaces/GigabitEthernet3') -@httmock.urlmatch(netloc=r'localhost') -def get_local_ip(url, request): - if not request.headers.get('X-auth-token', None): - return {'status_code': requests.codes.UNAUTHORIZED} - content = {u'kind': u'object#interface', - u'subnet-mask': u'255.255.255.0', - u'ip-address': u'10.5.0.2'} - return httmock.response(requests.codes.OK, content=content) - - -@httmock.urlmatch(netloc=r'localhost') -def post(url, request): - if request.method != 'POST': - return - LOG.debug("POST mock for %s", url) - if not request.headers.get('X-auth-token', None): - return {'status_code': requests.codes.UNAUTHORIZED} - if 'interfaces/GigabitEthernet' in url.path: - return {'status_code': requests.codes.NO_CONTENT} - if 'global/local-users' in url.path: - if 'username' not in request.body: - return {'status_code': requests.codes.BAD_REQUEST} - if '"privilege": 20' in request.body: - return {'status_code': requests.codes.BAD_REQUEST} - headers = {'location': '%s/test-user' % url.geturl()} - return httmock.response(requests.codes.CREATED, headers=headers) - if 'vpn-svc/ike/policies' in url.path: - headers = {'location': "%s/2" % url.geturl()} - return httmock.response(requests.codes.CREATED, headers=headers) - if 'vpn-svc/ipsec/policies' in url.path: - m = re.search(r'"policy-id": "(\S+)"', request.body) - if m: - headers = {'location': "%s/%s" % (url.geturl(), m.group(1))} - return httmock.response(requests.codes.CREATED, headers=headers) - return {'status_code': requests.codes.BAD_REQUEST} - if 'vpn-svc/ike/keyrings' in url.path: - headers = {'location': "%s/5" % url.geturl()} - return httmock.response(requests.codes.CREATED, headers=headers) - if 'vpn-svc/site-to-site' in url.path: - m = re.search(r'"vpn-interface-name": "(\S+)"', request.body) - if m: - headers = {'location': "%s/%s" % (url.geturl(), m.group(1))} - return httmock.response(requests.codes.CREATED, headers=headers) - return {'status_code': requests.codes.BAD_REQUEST} - if 'routing-svc/static-routes' in url.path: - headers = {'location': - "%s/10.1.0.0_24_GigabitEthernet1" % url.geturl()} - return httmock.response(requests.codes.CREATED, headers=headers) - - -@filter_request(['post'], 'global/local-users') -@httmock.urlmatch(netloc=r'localhost') -def post_change_attempt(url, request): - LOG.debug("POST change value mock for %s", url) - if not request.headers.get('X-auth-token', None): - return {'status_code': requests.codes.UNAUTHORIZED} - return {'status_code': requests.codes.NOT_FOUND, - 'content': { - u'error-code': -1, - u'error-message': u'user test-user already exists'}} - - -@httmock.urlmatch(netloc=r'localhost') -def post_duplicate(url, request): - LOG.debug("POST duplicate mock for %s", url) - if not request.headers.get('X-auth-token', None): - return {'status_code': requests.codes.UNAUTHORIZED} - return {'status_code': requests.codes.BAD_REQUEST, - 'content': { - u'error-code': -1, - u'error-message': u'policy 2 exist, not allow to ' - u'update policy using POST method'}} - - -@filter_request(['post'], 'vpn-svc/site-to-site') -@httmock.urlmatch(netloc=r'localhost') -def post_missing_ipsec_policy(url, request): - LOG.debug("POST missing ipsec policy mock for %s", url) - if not request.headers.get('X-auth-token', None): - return {'status_code': requests.codes.UNAUTHORIZED} - return {'status_code': requests.codes.BAD_REQUEST} - - -@filter_request(['post'], 'vpn-svc/site-to-site') -@httmock.urlmatch(netloc=r'localhost') -def post_missing_ike_policy(url, request): - LOG.debug("POST missing ike policy mock for %s", url) - if not request.headers.get('X-auth-token', None): - return {'status_code': requests.codes.UNAUTHORIZED} - return {'status_code': requests.codes.BAD_REQUEST} - - -@filter_request(['post'], 'vpn-svc/site-to-site') -@httmock.urlmatch(netloc=r'localhost') -def post_bad_ip(url, request): - LOG.debug("POST bad IP mock for %s", url) - if not request.headers.get('X-auth-token', None): - return {'status_code': requests.codes.UNAUTHORIZED} - return {'status_code': requests.codes.BAD_REQUEST} - - -@filter_request(['post'], 'vpn-svc/site-to-site') -@httmock.urlmatch(netloc=r'localhost') -def post_bad_mtu(url, request): - LOG.debug("POST bad mtu mock for %s", url) - if not request.headers.get('X-auth-token', None): - return {'status_code': requests.codes.UNAUTHORIZED} - return {'status_code': requests.codes.BAD_REQUEST} - - -@filter_request(['post'], 'vpn-svc/ipsec/policies') -@httmock.urlmatch(netloc=r'localhost') -def post_bad_lifetime(url, request): - LOG.debug("POST bad lifetime mock for %s", url) - if not request.headers.get('X-auth-token', None): - return {'status_code': requests.codes.UNAUTHORIZED} - return {'status_code': requests.codes.BAD_REQUEST} - - -@filter_request(['post'], 'vpn-svc/ipsec/policies') -@httmock.urlmatch(netloc=r'localhost') -def post_bad_name(url, request): - LOG.debug("POST bad IPSec policy name for %s", url) - if not request.headers.get('X-auth-token', None): - return {'status_code': requests.codes.UNAUTHORIZED} - return {'status_code': requests.codes.BAD_REQUEST} - - -@httmock.urlmatch(netloc=r'localhost') -def put(url, request): - if request.method != 'PUT': - return - LOG.debug("PUT mock for %s", url) - if not request.headers.get('X-auth-token', None): - return {'status_code': requests.codes.UNAUTHORIZED} - # Any resource - return {'status_code': requests.codes.NO_CONTENT} - - -@httmock.urlmatch(netloc=r'localhost') -def delete(url, request): - if request.method != 'DELETE': - return - LOG.debug("DELETE mock for %s", url) - if not request.headers.get('X-auth-token', None): - return {'status_code': requests.codes.UNAUTHORIZED} - # Any resource - return {'status_code': requests.codes.NO_CONTENT} - - -@httmock.urlmatch(netloc=r'localhost') -def delete_unknown(url, request): - if request.method != 'DELETE': - return - LOG.debug("DELETE unknown mock for %s", url) - if not request.headers.get('X-auth-token', None): - return {'status_code': requests.codes.UNAUTHORIZED} - # Any resource - return {'status_code': requests.codes.NOT_FOUND, - 'content': { - u'error-code': -1, - u'error-message': 'user unknown not found'}} - - -@httmock.urlmatch(netloc=r'localhost') -def delete_not_allowed(url, request): - if request.method != 'DELETE': - return - LOG.debug("DELETE not allowed mock for %s", url) - if not request.headers.get('X-auth-token', None): - return {'status_code': requests.codes.UNAUTHORIZED} - # Any resource - return {'status_code': requests.codes.METHOD_NOT_ALLOWED} diff --git a/neutron/tests/unit/services/vpn/device_drivers/notest_cisco_csr_rest.py b/neutron/tests/unit/services/vpn/device_drivers/notest_cisco_csr_rest.py deleted file mode 100644 index a89abe9445c..00000000000 --- a/neutron/tests/unit/services/vpn/device_drivers/notest_cisco_csr_rest.py +++ /dev/null @@ -1,1358 +0,0 @@ -# Copyright 2014 Cisco Systems, Inc. All rights reserved. -# -# 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. - -#TODO(pcm): Rename this file to remove the "no" prefix, once httmock is -# approved and added to requirements.txt - -import random - -# TODO(pcm): Remove when update to requests-mock package. Comment out, if use -# local copy of httmock.py source. Needed for PEP8. -import httmock -import requests - -from neutron.openstack.common import log as logging -from neutron.services.vpn.device_drivers import ( - cisco_csr_rest_client as csr_client) -from neutron.tests import base -from neutron.tests.unit.services.vpn.device_drivers import ( - cisco_csr_mock as csr_request) -# TODO(pcm) Uncomment to run w/local copy of httmock.py source. Remove when -# update to requests-mock package. -# from neutron.tests.unit.services.vpn.device_drivers import httmock - - -LOG = logging.getLogger(__name__) -# Enables debug logging to console -if True: - logging.CONF.set_override('debug', True) - logging.setup('neutron') - -dummy_policy_id = 'dummy-ipsec-policy-id-name' - - -# Note: Helper functions to test reuse of IDs. -def generate_pre_shared_key_id(): - return random.randint(100, 200) - - -def generate_ike_policy_id(): - return random.randint(200, 300) - - -def generate_ipsec_policy_id(): - return random.randint(300, 400) - - -class TestCsrLoginRestApi(base.BaseTestCase): - - """Test logging into CSR to obtain token-id.""" - - def setUp(self, host='localhost', tunnel_ip='10.10.10.10', timeout=None): - super(TestCsrLoginRestApi, self).setUp() - info = {'rest_mgmt_ip': host, 'tunnel_ip': tunnel_ip, - 'username': 'stack', 'password': 'cisco', 'timeout': timeout} - self.csr = csr_client.CsrRestClient(info) - - def test_get_token(self): - """Obtain the token and its expiration time.""" - with httmock.HTTMock(csr_request.token): - self.assertTrue(self.csr.authenticate()) - self.assertEqual(requests.codes.OK, self.csr.status) - self.assertIsNotNone(self.csr.token) - - def test_unauthorized_token_request(self): - """Negative test of invalid user/password.""" - self.csr.auth = ('stack', 'bogus') - with httmock.HTTMock(csr_request.token_unauthorized): - self.assertIsNone(self.csr.authenticate()) - self.assertEqual(requests.codes.UNAUTHORIZED, self.csr.status) - - def test_non_existent_host(self): - """Negative test of request to non-existent host.""" - self.csr.host = 'wrong-host' - self.csr.token = 'Set by some previously successful access' - with httmock.HTTMock(csr_request.token_wrong_host): - self.assertIsNone(self.csr.authenticate()) - self.assertEqual(requests.codes.NOT_FOUND, self.csr.status) - self.assertIsNone(self.csr.token) - - def test_timeout_on_token_access(self): - """Negative test of a timeout on a request.""" - with httmock.HTTMock(csr_request.token_timeout): - self.assertIsNone(self.csr.authenticate()) - self.assertEqual(requests.codes.REQUEST_TIMEOUT, self.csr.status) - self.assertIsNone(self.csr.token) - - -class TestCsrGetRestApi(base.BaseTestCase): - - """Test CSR GET REST API.""" - - def setUp(self, host='localhost', tunnel_ip='10.10.10.10', timeout=None): - super(TestCsrGetRestApi, self).setUp() - info = {'rest_mgmt_ip': host, 'tunnel_ip': tunnel_ip, - 'username': 'stack', 'password': 'cisco', 'timeout': timeout} - self.csr = csr_client.CsrRestClient(info) - - def test_valid_rest_gets(self): - """Simple GET requests. - - First request will do a post to get token (login). Assumes - that there are two interfaces on the CSR. - """ - - with httmock.HTTMock(csr_request.token, - csr_request.normal_get): - content = self.csr.get_request('global/host-name') - self.assertEqual(requests.codes.OK, self.csr.status) - self.assertIn('host-name', content) - self.assertNotEqual(None, content['host-name']) - - content = self.csr.get_request('global/local-users') - self.assertEqual(requests.codes.OK, self.csr.status) - self.assertIn('users', content) - - -class TestCsrPostRestApi(base.BaseTestCase): - - """Test CSR POST REST API.""" - - def setUp(self, host='localhost', tunnel_ip='10.10.10.10', timeout=None): - super(TestCsrPostRestApi, self).setUp() - info = {'rest_mgmt_ip': host, 'tunnel_ip': tunnel_ip, - 'username': 'stack', 'password': 'cisco', 'timeout': timeout} - self.csr = csr_client.CsrRestClient(info) - - def test_post_requests(self): - """Simple POST requests (repeatable). - - First request will do a post to get token (login). Assumes - that there are two interfaces (Ge1 and Ge2) on the CSR. - """ - - with httmock.HTTMock(csr_request.token, - csr_request.post): - content = self.csr.post_request( - 'interfaces/GigabitEthernet1/statistics', - payload={'action': 'clear'}) - self.assertEqual(requests.codes.NO_CONTENT, self.csr.status) - self.assertIsNone(content) - content = self.csr.post_request( - 'interfaces/GigabitEthernet2/statistics', - payload={'action': 'clear'}) - self.assertEqual(requests.codes.NO_CONTENT, self.csr.status) - self.assertIsNone(content) - - def test_post_with_location(self): - """Create a user and verify that location returned.""" - with httmock.HTTMock(csr_request.token, - csr_request.post): - location = self.csr.post_request( - 'global/local-users', - payload={'username': 'test-user', - 'password': 'pass12345', - 'privilege': 15}) - self.assertEqual(requests.codes.CREATED, self.csr.status) - self.assertIn('global/local-users/test-user', location) - - def test_post_missing_required_attribute(self): - """Negative test of POST with missing mandatory info.""" - with httmock.HTTMock(csr_request.token, - csr_request.post): - self.csr.post_request('global/local-users', - payload={'password': 'pass12345', - 'privilege': 15}) - self.assertEqual(requests.codes.BAD_REQUEST, self.csr.status) - - def test_post_invalid_attribute(self): - """Negative test of POST with invalid info.""" - with httmock.HTTMock(csr_request.token, - csr_request.post): - self.csr.post_request('global/local-users', - payload={'username': 'test-user', - 'password': 'pass12345', - 'privilege': 20}) - self.assertEqual(requests.codes.BAD_REQUEST, self.csr.status) - - def test_post_already_exists(self): - """Negative test of a duplicate POST. - - Uses the lower level _do_request() API to just perform the POST and - obtain the response, without any error processing. - """ - with httmock.HTTMock(csr_request.token, - csr_request.post): - location = self.csr._do_request( - 'POST', - 'global/local-users', - payload={'username': 'test-user', - 'password': 'pass12345', - 'privilege': 15}, - more_headers=csr_client.HEADER_CONTENT_TYPE_JSON) - self.assertEqual(requests.codes.CREATED, self.csr.status) - self.assertIn('global/local-users/test-user', location) - with httmock.HTTMock(csr_request.token, - csr_request.post_change_attempt): - self.csr._do_request( - 'POST', - 'global/local-users', - payload={'username': 'test-user', - 'password': 'pass12345', - 'privilege': 15}, - more_headers=csr_client.HEADER_CONTENT_TYPE_JSON) - # Note: For local-user, a 404 error is returned. For - # site-to-site connection a 400 is returned. - self.assertEqual(requests.codes.NOT_FOUND, self.csr.status) - - def test_post_changing_value(self): - """Negative test of a POST trying to change a value.""" - with httmock.HTTMock(csr_request.token, - csr_request.post): - location = self.csr.post_request( - 'global/local-users', - payload={'username': 'test-user', - 'password': 'pass12345', - 'privilege': 15}) - self.assertEqual(requests.codes.CREATED, self.csr.status) - self.assertIn('global/local-users/test-user', location) - with httmock.HTTMock(csr_request.token, - csr_request.post_change_attempt): - content = self.csr.post_request('global/local-users', - payload={'username': 'test-user', - 'password': 'changed', - 'privilege': 15}) - self.assertEqual(requests.codes.NOT_FOUND, self.csr.status) - expected = {u'error-code': -1, - u'error-message': u'user test-user already exists'} - self.assertDictContainsSubset(expected, content) - - -class TestCsrPutRestApi(base.BaseTestCase): - - """Test CSR PUT REST API.""" - - def _save_resources(self): - with httmock.HTTMock(csr_request.token, - csr_request.normal_get): - details = self.csr.get_request('global/host-name') - if self.csr.status != requests.codes.OK: - self.fail("Unable to save original host name") - self.original_host = details['host-name'] - details = self.csr.get_request('interfaces/GigabitEthernet1') - if self.csr.status != requests.codes.OK: - self.fail("Unable to save interface Ge1 description") - self.original_if = details - if details.get('description', ''): - self.original_if['description'] = '' - self.csr.token = None - - def _restore_resources(self, user, password): - """Restore the host name and itnerface description. - - Must restore the user and password, so that authentication - token can be obtained (as some tests corrupt auth info). - Will also clear token, so that it gets a fresh token. - """ - - self.csr.auth = (user, password) - self.csr.token = None - with httmock.HTTMock(csr_request.token, - csr_request.put): - payload = {'host-name': self.original_host} - self.csr.put_request('global/host-name', payload=payload) - if self.csr.status != requests.codes.NO_CONTENT: - self.fail("Unable to restore host name after test") - payload = {'description': self.original_if['description'], - 'if-name': self.original_if['if-name'], - 'ip-address': self.original_if['ip-address'], - 'subnet-mask': self.original_if['subnet-mask'], - 'type': self.original_if['type']} - self.csr.put_request('interfaces/GigabitEthernet1', - payload=payload) - if self.csr.status != requests.codes.NO_CONTENT: - self.fail("Unable to restore I/F Ge1 description after test") - - def setUp(self, host='localhost', tunnel_ip='10.10.10.10', timeout=None): - """Prepare for PUT API tests.""" - super(TestCsrPutRestApi, self).setUp() - info = {'rest_mgmt_ip': host, 'tunnel_ip': tunnel_ip, - 'username': 'stack', 'password': 'cisco', 'timeout': timeout} - self.csr = csr_client.CsrRestClient(info) - - self._save_resources() - self.addCleanup(self._restore_resources, 'stack', 'cisco') - - def test_put_requests(self): - """Simple PUT requests (repeatable). - - First request will do a post to get token (login). Assumes - that there are two interfaces on the CSR (Ge1 and Ge2). - """ - - with httmock.HTTMock(csr_request.token, - csr_request.put, - csr_request.normal_get): - payload = {'host-name': 'TestHost'} - content = self.csr.put_request('global/host-name', - payload=payload) - self.assertEqual(requests.codes.NO_CONTENT, self.csr.status) - self.assertIsNone(content) - - payload = {'host-name': 'TestHost2'} - content = self.csr.put_request('global/host-name', - payload=payload) - self.assertEqual(requests.codes.NO_CONTENT, self.csr.status) - self.assertIsNone(content) - - def test_change_interface_description(self): - """Test that interface description can be changed. - - This was a problem with an earlier version of the CSR image and is - here to prevent regression. - """ - with httmock.HTTMock(csr_request.token, - csr_request.put, - csr_request.normal_get): - payload = {'description': u'Changed description', - 'if-name': self.original_if['if-name'], - 'ip-address': self.original_if['ip-address'], - 'subnet-mask': self.original_if['subnet-mask'], - 'type': self.original_if['type']} - content = self.csr.put_request( - 'interfaces/GigabitEthernet1', payload=payload) - self.assertEqual(requests.codes.NO_CONTENT, self.csr.status) - self.assertIsNone(content) - content = self.csr.get_request('interfaces/GigabitEthernet1') - self.assertEqual(requests.codes.OK, self.csr.status) - self.assertIn('description', content) - self.assertEqual(u'Changed description', - content['description']) - - def ignore_test_change_to_empty_interface_description(self): - """Test that interface description can be changed to empty string. - - This is a problem in the current version of the CSR image, which - rejects the change with a 400 error. This test is here to prevent - a regression (once it is fixed) Note that there is code in the - test setup to change the description to a non-empty string to - avoid failures in other tests. - """ - with httmock.HTTMock(csr_request.token, - csr_request.put, - csr_request.normal_get): - payload = {'description': '', - 'if-name': self.original_if['if-name'], - 'ip-address': self.original_if['ip-address'], - 'subnet-mask': self.original_if['subnet-mask'], - 'type': self.original_if['type']} - content = self.csr.put_request( - 'interfaces/GigabitEthernet1', payload=payload) - self.assertEqual(requests.codes.NO_CONTENT, self.csr.status) - self.assertIsNone(content) - content = self.csr.get_request('interfaces/GigabitEthernet1') - self.assertEqual(requests.codes.OK, self.csr.status) - self.assertIn('description', content) - self.assertEqual('', content['description']) - - -class TestCsrDeleteRestApi(base.BaseTestCase): - - """Test CSR DELETE REST API.""" - - def setUp(self, host='localhost', tunnel_ip='10.10.10.10', timeout=None): - super(TestCsrDeleteRestApi, self).setUp() - info = {'rest_mgmt_ip': host, 'tunnel_ip': tunnel_ip, - 'username': 'stack', 'password': 'cisco', 'timeout': timeout} - self.csr = csr_client.CsrRestClient(info) - - def _make_dummy_user(self): - """Create a user that will be later deleted.""" - self.csr.post_request('global/local-users', - payload={'username': 'dummy', - 'password': 'dummy', - 'privilege': 15}) - self.assertEqual(requests.codes.CREATED, self.csr.status) - - def test_delete_requests(self): - """Simple DELETE requests (creating entry first).""" - with httmock.HTTMock(csr_request.token, - csr_request.post, - csr_request.delete): - self._make_dummy_user() - self.csr.token = None # Force login - self.csr.delete_request('global/local-users/dummy') - self.assertEqual(requests.codes.NO_CONTENT, self.csr.status) - # Delete again, but without logging in this time - self._make_dummy_user() - self.csr.delete_request('global/local-users/dummy') - self.assertEqual(requests.codes.NO_CONTENT, self.csr.status) - - def test_delete_non_existent_entry(self): - """Negative test of trying to delete a non-existent user.""" - with httmock.HTTMock(csr_request.token, - csr_request.delete_unknown): - content = self.csr.delete_request('global/local-users/unknown') - self.assertEqual(requests.codes.NOT_FOUND, self.csr.status) - expected = {u'error-code': -1, - u'error-message': u'user unknown not found'} - self.assertDictContainsSubset(expected, content) - - def test_delete_not_allowed(self): - """Negative test of trying to delete the host-name.""" - with httmock.HTTMock(csr_request.token, - csr_request.delete_not_allowed): - self.csr.delete_request('global/host-name') - self.assertEqual(requests.codes.METHOD_NOT_ALLOWED, - self.csr.status) - - -class TestCsrRestApiFailures(base.BaseTestCase): - - """Test failure cases common for all REST APIs. - - Uses the lower level _do_request() to just perform the operation and get - the result, without any error handling. - """ - - def setUp(self, host='localhost', tunnel_ip='10.10.10.10', timeout=0.1): - super(TestCsrRestApiFailures, self).setUp() - info = {'rest_mgmt_ip': host, 'tunnel_ip': tunnel_ip, - 'username': 'stack', 'password': 'cisco', 'timeout': timeout} - self.csr = csr_client.CsrRestClient(info) - - def test_request_for_non_existent_resource(self): - """Negative test of non-existent resource on REST request.""" - with httmock.HTTMock(csr_request.token, - csr_request.no_such_resource): - self.csr.post_request('no/such/request') - self.assertEqual(requests.codes.NOT_FOUND, self.csr.status) - # The result is HTTP 404 message, so no error content to check - - def test_timeout_during_request(self): - """Negative test of timeout during REST request.""" - with httmock.HTTMock(csr_request.token, - csr_request.timeout): - self.csr._do_request('GET', 'global/host-name') - self.assertEqual(requests.codes.REQUEST_TIMEOUT, self.csr.status) - - def test_token_expired_on_request(self): - """Token expired before trying a REST request. - - The mock is configured to return a 401 error on the first - attempt to reference the host name. Simulate expiration of - token by changing it. - """ - - with httmock.HTTMock(csr_request.token, - csr_request.expired_request, - csr_request.normal_get): - self.csr.token = '123' # These are 44 characters, so won't match - content = self.csr._do_request('GET', 'global/host-name') - self.assertEqual(requests.codes.OK, self.csr.status) - self.assertIn('host-name', content) - self.assertNotEqual(None, content['host-name']) - - def test_failed_to_obtain_token_for_request(self): - """Negative test of unauthorized user for REST request.""" - self.csr.auth = ('stack', 'bogus') - with httmock.HTTMock(csr_request.token_unauthorized): - self.csr._do_request('GET', 'global/host-name') - self.assertEqual(requests.codes.UNAUTHORIZED, self.csr.status) - - -class TestCsrRestIkePolicyCreate(base.BaseTestCase): - - """Test IKE policy create REST requests.""" - - def setUp(self, host='localhost', tunnel_ip='10.10.10.10', timeout=None): - super(TestCsrRestIkePolicyCreate, self).setUp() - info = {'rest_mgmt_ip': host, 'tunnel_ip': tunnel_ip, - 'username': 'stack', 'password': 'cisco', 'timeout': timeout} - self.csr = csr_client.CsrRestClient(info) - - def test_create_delete_ike_policy(self): - """Create and then delete IKE policy.""" - with httmock.HTTMock(csr_request.token, - csr_request.post, - csr_request.normal_get): - policy_id = '2' - policy_info = {u'priority-id': u'%s' % policy_id, - u'encryption': u'aes256', - u'hash': u'sha', - u'dhGroup': 5, - u'lifetime': 3600} - location = self.csr.create_ike_policy(policy_info) - self.assertEqual(requests.codes.CREATED, self.csr.status) - self.assertIn('vpn-svc/ike/policies/%s' % policy_id, location) - # Check the hard-coded items that get set as well... - content = self.csr.get_request(location, full_url=True) - self.assertEqual(requests.codes.OK, self.csr.status) - expected_policy = {u'kind': u'object#ike-policy', - u'version': u'v1', - u'local-auth-method': u'pre-share'} - expected_policy.update(policy_info) - self.assertEqual(expected_policy, content) - # Now delete and verify the IKE policy is gone - with httmock.HTTMock(csr_request.token, - csr_request.delete, - csr_request.no_such_resource): - self.csr.delete_ike_policy(policy_id) - self.assertEqual(requests.codes.NO_CONTENT, self.csr.status) - content = self.csr.get_request(location, full_url=True) - self.assertEqual(requests.codes.NOT_FOUND, self.csr.status) - - def test_create_ike_policy_with_defaults(self): - """Create IKE policy using defaults for all optional values.""" - with httmock.HTTMock(csr_request.token, - csr_request.post, - csr_request.get_defaults): - policy_id = '2' - policy_info = {u'priority-id': u'%s' % policy_id} - location = self.csr.create_ike_policy(policy_info) - self.assertEqual(requests.codes.CREATED, self.csr.status) - self.assertIn('vpn-svc/ike/policies/%s' % policy_id, location) - # Check the hard-coded items that get set as well... - content = self.csr.get_request(location, full_url=True) - self.assertEqual(requests.codes.OK, self.csr.status) - expected_policy = {u'kind': u'object#ike-policy', - u'version': u'v1', - u'encryption': u'des', - u'hash': u'sha', - u'dhGroup': 1, - u'lifetime': 86400, - # Lower level sets this, but it is the default - u'local-auth-method': u'pre-share'} - expected_policy.update(policy_info) - self.assertEqual(expected_policy, content) - - def test_create_duplicate_ike_policy(self): - """Negative test of trying to create a duplicate IKE policy.""" - with httmock.HTTMock(csr_request.token, - csr_request.post, - csr_request.normal_get): - policy_id = '2' - policy_info = {u'priority-id': u'%s' % policy_id, - u'encryption': u'aes', - u'hash': u'sha', - u'dhGroup': 5, - u'lifetime': 3600} - location = self.csr.create_ike_policy(policy_info) - self.assertEqual(requests.codes.CREATED, self.csr.status) - self.assertIn('vpn-svc/ike/policies/%s' % policy_id, location) - with httmock.HTTMock(csr_request.token, - csr_request.post_duplicate): - location = self.csr.create_ike_policy(policy_info) - self.assertEqual(requests.codes.BAD_REQUEST, self.csr.status) - expected = {u'error-code': -1, - u'error-message': u'policy 2 exist, not allow to ' - u'update policy using POST method'} - self.assertDictContainsSubset(expected, location) - - -class TestCsrRestIPSecPolicyCreate(base.BaseTestCase): - - """Test IPSec policy create REST requests.""" - - def setUp(self, host='localhost', tunnel_ip='10.10.10.10', timeout=None): - super(TestCsrRestIPSecPolicyCreate, self).setUp() - info = {'rest_mgmt_ip': host, 'tunnel_ip': tunnel_ip, - 'username': 'stack', 'password': 'cisco', 'timeout': timeout} - self.csr = csr_client.CsrRestClient(info) - - def test_create_delete_ipsec_policy(self): - """Create and then delete IPSec policy.""" - with httmock.HTTMock(csr_request.token, - csr_request.post, - csr_request.normal_get): - policy_id = '123' - policy_info = { - u'policy-id': u'%s' % policy_id, - u'protection-suite': { - u'esp-encryption': u'esp-256-aes', - u'esp-authentication': u'esp-sha-hmac', - u'ah': u'ah-sha-hmac', - }, - u'lifetime-sec': 120, - u'pfs': u'group5', - u'anti-replay-window-size': u'disable' - } - location = self.csr.create_ipsec_policy(policy_info) - self.assertEqual(requests.codes.CREATED, self.csr.status) - self.assertIn('vpn-svc/ipsec/policies/%s' % policy_id, location) - # Check the hard-coded items that get set as well... - content = self.csr.get_request(location, full_url=True) - self.assertEqual(requests.codes.OK, self.csr.status) - expected_policy = {u'kind': u'object#ipsec-policy', - u'mode': u'tunnel', - u'lifetime-kb': 4608000, - u'idle-time': None} - expected_policy.update(policy_info) - # CSR will respond with capitalized value - expected_policy[u'anti-replay-window-size'] = u'Disable' - self.assertEqual(expected_policy, content) - # Now delete and verify the IPSec policy is gone - with httmock.HTTMock(csr_request.token, - csr_request.delete, - csr_request.no_such_resource): - self.csr.delete_ipsec_policy(policy_id) - self.assertEqual(requests.codes.NO_CONTENT, self.csr.status) - content = self.csr.get_request(location, full_url=True) - self.assertEqual(requests.codes.NOT_FOUND, self.csr.status) - - def test_create_ipsec_policy_with_defaults(self): - """Create IPSec policy with default for all optional values.""" - with httmock.HTTMock(csr_request.token, - csr_request.post, - csr_request.get_defaults): - policy_id = '123' - policy_info = { - u'policy-id': u'%s' % policy_id, - } - location = self.csr.create_ipsec_policy(policy_info) - self.assertEqual(requests.codes.CREATED, self.csr.status) - self.assertIn('vpn-svc/ipsec/policies/%s' % policy_id, location) - # Check the hard-coded items that get set as well... - content = self.csr.get_request(location, full_url=True) - self.assertEqual(requests.codes.OK, self.csr.status) - expected_policy = {u'kind': u'object#ipsec-policy', - u'mode': u'tunnel', - u'protection-suite': {}, - u'lifetime-sec': 3600, - u'pfs': u'Disable', - u'anti-replay-window-size': u'None', - u'lifetime-kb': 4608000, - u'idle-time': None} - expected_policy.update(policy_info) - self.assertEqual(expected_policy, content) - - def test_create_ipsec_policy_with_uuid(self): - """Create IPSec policy using UUID for id.""" - with httmock.HTTMock(csr_request.token, - csr_request.post, - csr_request.normal_get): - policy_info = { - u'policy-id': u'%s' % dummy_policy_id, - u'protection-suite': { - u'esp-encryption': u'esp-256-aes', - u'esp-authentication': u'esp-sha-hmac', - u'ah': u'ah-sha-hmac', - }, - u'lifetime-sec': 120, - u'pfs': u'group5', - u'anti-replay-window-size': u'disable' - } - location = self.csr.create_ipsec_policy(policy_info) - self.assertEqual(requests.codes.CREATED, self.csr.status) - self.assertIn('vpn-svc/ipsec/policies/%s' % dummy_policy_id, - location) - # Check the hard-coded items that get set as well... - content = self.csr.get_request(location, full_url=True) - self.assertEqual(requests.codes.OK, self.csr.status) - expected_policy = {u'kind': u'object#ipsec-policy', - u'mode': u'tunnel', - u'lifetime-kb': 4608000, - u'idle-time': None} - expected_policy.update(policy_info) - # CSR will respond with capitalized value - expected_policy[u'anti-replay-window-size'] = u'Disable' - self.assertEqual(expected_policy, content) - - def test_create_ipsec_policy_without_ah(self): - """Create IPSec policy.""" - with httmock.HTTMock(csr_request.token, - csr_request.post, - csr_request.get_no_ah): - policy_id = '10' - policy_info = { - u'policy-id': u'%s' % policy_id, - u'protection-suite': { - u'esp-encryption': u'esp-aes', - u'esp-authentication': u'esp-sha-hmac', - }, - u'lifetime-sec': 120, - u'pfs': u'group5', - u'anti-replay-window-size': u'128' - } - location = self.csr.create_ipsec_policy(policy_info) - self.assertEqual(requests.codes.CREATED, self.csr.status) - self.assertIn('vpn-svc/ipsec/policies/%s' % policy_id, location) - # Check the hard-coded items that get set as well... - content = self.csr.get_request(location, full_url=True) - self.assertEqual(requests.codes.OK, self.csr.status) - expected_policy = {u'kind': u'object#ipsec-policy', - u'mode': u'tunnel', - u'lifetime-kb': 4608000, - u'idle-time': None} - expected_policy.update(policy_info) - self.assertEqual(expected_policy, content) - - def test_invalid_ipsec_policy_lifetime(self): - """Failure test of IPSec policy with unsupported lifetime.""" - with httmock.HTTMock(csr_request.token, - csr_request.post_bad_lifetime): - policy_id = '123' - policy_info = { - u'policy-id': u'%s' % policy_id, - u'protection-suite': { - u'esp-encryption': u'esp-aes', - u'esp-authentication': u'esp-sha-hmac', - u'ah': u'ah-sha-hmac', - }, - u'lifetime-sec': 119, - u'pfs': u'group5', - u'anti-replay-window-size': u'128' - } - self.csr.create_ipsec_policy(policy_info) - self.assertEqual(requests.codes.BAD_REQUEST, self.csr.status) - - def test_create_ipsec_policy_with_invalid_name(self): - """Failure test of creating IPSec policy with name too long.""" - with httmock.HTTMock(csr_request.token, - csr_request.post_bad_name, - csr_request.get_defaults): - policy_id = 'policy-name-is-too-long-32-chars' - policy_info = { - u'policy-id': u'%s' % policy_id, - } - self.csr.create_ipsec_policy(policy_info) - self.assertEqual(requests.codes.BAD_REQUEST, self.csr.status) - - -class TestCsrRestPreSharedKeyCreate(base.BaseTestCase): - - """Test Pre-shared key (PSK) create REST requests.""" - - def setUp(self, host='localhost', tunnel_ip='10.10.10.10', timeout=None): - super(TestCsrRestPreSharedKeyCreate, self).setUp() - info = {'rest_mgmt_ip': host, 'tunnel_ip': tunnel_ip, - 'username': 'stack', 'password': 'cisco', 'timeout': timeout} - self.csr = csr_client.CsrRestClient(info) - - def test_create_delete_pre_shared_key(self): - """Create and then delete a keyring entry for pre-shared key.""" - with httmock.HTTMock(csr_request.token, - csr_request.post, - csr_request.normal_get): - psk_id = '5' - psk_info = {u'keyring-name': u'%s' % psk_id, - u'pre-shared-key-list': [ - {u'key': u'super-secret', - u'encrypted': False, - u'peer-address': u'10.10.10.20/24'} - ]} - location = self.csr.create_pre_shared_key(psk_info) - self.assertEqual(requests.codes.CREATED, self.csr.status) - self.assertIn('vpn-svc/ike/keyrings/%s' % psk_id, location) - # Check the hard-coded items that get set as well... - content = self.csr.get_request(location, full_url=True) - self.assertEqual(requests.codes.OK, self.csr.status) - expected_policy = {u'kind': u'object#ike-keyring'} - expected_policy.update(psk_info) - # Note: the peer CIDR is returned as an IP and mask - expected_policy[u'pre-shared-key-list'][0][u'peer-address'] = ( - u'10.10.10.20 255.255.255.0') - self.assertEqual(expected_policy, content) - # Now delete and verify pre-shared key is gone - with httmock.HTTMock(csr_request.token, - csr_request.delete, - csr_request.no_such_resource): - self.csr.delete_pre_shared_key(psk_id) - self.assertEqual(requests.codes.NO_CONTENT, self.csr.status) - content = self.csr.get_request(location, full_url=True) - self.assertEqual(requests.codes.NOT_FOUND, self.csr.status) - - def test_create_pre_shared_key_with_fqdn_peer(self): - """Create pre-shared key using FQDN for peer address.""" - with httmock.HTTMock(csr_request.token, - csr_request.post, - csr_request.get_fqdn): - psk_id = '5' - psk_info = {u'keyring-name': u'%s' % psk_id, - u'pre-shared-key-list': [ - {u'key': u'super-secret', - u'encrypted': False, - u'peer-address': u'cisco.com'} - ]} - location = self.csr.create_pre_shared_key(psk_info) - self.assertEqual(requests.codes.CREATED, self.csr.status) - self.assertIn('vpn-svc/ike/keyrings/%s' % psk_id, location) - # Check the hard-coded items that get set as well... - content = self.csr.get_request(location, full_url=True) - self.assertEqual(requests.codes.OK, self.csr.status) - expected_policy = {u'kind': u'object#ike-keyring'} - expected_policy.update(psk_info) - self.assertEqual(expected_policy, content) - - def test_create_pre_shared_key_with_duplicate_peer_address(self): - """Negative test of creating a second pre-shared key with same peer.""" - with httmock.HTTMock(csr_request.token, - csr_request.post, - csr_request.normal_get): - psk_id = '5' - psk_info = {u'keyring-name': u'%s' % psk_id, - u'pre-shared-key-list': [ - {u'key': u'super-secret', - u'encrypted': False, - u'peer-address': u'10.10.10.20/24'} - ]} - location = self.csr.create_pre_shared_key(psk_info) - self.assertEqual(requests.codes.CREATED, self.csr.status) - self.assertIn('vpn-svc/ike/keyrings/%s' % psk_id, location) - with httmock.HTTMock(csr_request.token, - csr_request.post_duplicate): - psk_id = u'6' - another_psk_info = {u'keyring-name': psk_id, - u'pre-shared-key-list': [ - {u'key': u'abc123def', - u'encrypted': False, - u'peer-address': u'10.10.10.20/24'} - ]} - self.csr.create_ike_policy(another_psk_info) - self.assertEqual(requests.codes.BAD_REQUEST, self.csr.status) - - -class TestCsrRestIPSecConnectionCreate(base.BaseTestCase): - - """Test IPSec site-to-site connection REST requests. - - This requires us to have first created an IKE policy, IPSec policy, - and pre-shared key, so it's more of an itegration test, when used - with a real CSR (as we can't mock out these pre-conditions. - """ - - def setUp(self, host='localhost', tunnel_ip='10.10.10.10', timeout=None): - super(TestCsrRestIPSecConnectionCreate, self).setUp() - info = {'rest_mgmt_ip': host, 'tunnel_ip': tunnel_ip, - 'username': 'stack', 'password': 'cisco', 'timeout': timeout} - self.csr = csr_client.CsrRestClient(info) - - def _make_psk_for_test(self): - psk_id = generate_pre_shared_key_id() - self._remove_resource_for_test(self.csr.delete_pre_shared_key, - psk_id) - with httmock.HTTMock(csr_request.token, - csr_request.post): - psk_info = {u'keyring-name': u'%d' % psk_id, - u'pre-shared-key-list': [ - {u'key': u'super-secret', - u'encrypted': False, - u'peer-address': u'10.10.10.20/24'} - ]} - self.csr.create_pre_shared_key(psk_info) - if self.csr.status != requests.codes.CREATED: - self.fail("Unable to create PSK for test case") - self.addCleanup(self._remove_resource_for_test, - self.csr.delete_pre_shared_key, psk_id) - return psk_id - - def _make_ike_policy_for_test(self): - policy_id = generate_ike_policy_id() - self._remove_resource_for_test(self.csr.delete_ike_policy, - policy_id) - with httmock.HTTMock(csr_request.token, - csr_request.post): - policy_info = {u'priority-id': u'%d' % policy_id, - u'encryption': u'aes', - u'hash': u'sha', - u'dhGroup': 5, - u'lifetime': 3600} - self.csr.create_ike_policy(policy_info) - if self.csr.status != requests.codes.CREATED: - self.fail("Unable to create IKE policy for test case") - self.addCleanup(self._remove_resource_for_test, - self.csr.delete_ike_policy, policy_id) - return policy_id - - def _make_ipsec_policy_for_test(self): - policy_id = generate_ipsec_policy_id() - self._remove_resource_for_test(self.csr.delete_ipsec_policy, - policy_id) - with httmock.HTTMock(csr_request.token, - csr_request.post): - policy_info = { - u'policy-id': u'%d' % policy_id, - u'protection-suite': { - u'esp-encryption': u'esp-aes', - u'esp-authentication': u'esp-sha-hmac', - u'ah': u'ah-sha-hmac', - }, - u'lifetime-sec': 120, - u'pfs': u'group5', - u'anti-replay-window-size': u'disable' - } - self.csr.create_ipsec_policy(policy_info) - if self.csr.status != requests.codes.CREATED: - self.fail("Unable to create IPSec policy for test case") - self.addCleanup(self._remove_resource_for_test, - self.csr.delete_ipsec_policy, policy_id) - return policy_id - - def _remove_resource_for_test(self, delete_resource, resource_id): - with httmock.HTTMock(csr_request.token, - csr_request.delete): - delete_resource(resource_id) - - def _prepare_for_site_conn_create(self, skip_psk=False, skip_ike=False, - skip_ipsec=False): - """Create the policies and PSK so can then create site conn.""" - if not skip_psk: - self._make_psk_for_test() - if not skip_ike: - self._make_ike_policy_for_test() - if not skip_ipsec: - ipsec_policy_id = self._make_ipsec_policy_for_test() - else: - ipsec_policy_id = generate_ipsec_policy_id() - # Note: Use same ID number for tunnel and IPSec policy, so that when - # GET tunnel info, the mocks can infer the IPSec policy ID from the - # tunnel number. - return (ipsec_policy_id, ipsec_policy_id) - - def test_create_delete_ipsec_connection(self): - """Create and then delete an IPSec connection.""" - tunnel_id, ipsec_policy_id = self._prepare_for_site_conn_create() - with httmock.HTTMock(csr_request.token, - csr_request.post, - csr_request.normal_get): - connection_info = { - u'vpn-interface-name': u'Tunnel%d' % tunnel_id, - u'ipsec-policy-id': u'%d' % ipsec_policy_id, - u'mtu': 1500, - u'local-device': {u'ip-address': u'10.3.0.1/24', - u'tunnel-ip-address': u'10.10.10.10'}, - u'remote-device': {u'tunnel-ip-address': u'10.10.10.20'} - } - location = self.csr.create_ipsec_connection(connection_info) - self.addCleanup(self._remove_resource_for_test, - self.csr.delete_ipsec_connection, - 'Tunnel%d' % tunnel_id) - self.assertEqual(requests.codes.CREATED, self.csr.status) - self.assertIn('vpn-svc/site-to-site/Tunnel%d' % tunnel_id, - location) - # Check the hard-coded items that get set as well... - content = self.csr.get_request(location, full_url=True) - self.assertEqual(requests.codes.OK, self.csr.status) - expected_connection = {u'kind': u'object#vpn-site-to-site', - u'ike-profile-id': None, - u'mtu': 1500, - u'ip-version': u'ipv4'} - expected_connection.update(connection_info) - self.assertEqual(expected_connection, content) - # Now delete and verify that site-to-site connection is gone - with httmock.HTTMock(csr_request.token, - csr_request.delete, - csr_request.no_such_resource): - # Only delete connection. Cleanup will take care of prerequisites - self.csr.delete_ipsec_connection('Tunnel%d' % tunnel_id) - self.assertEqual(requests.codes.NO_CONTENT, self.csr.status) - content = self.csr.get_request(location, full_url=True) - self.assertEqual(requests.codes.NOT_FOUND, self.csr.status) - - def test_create_ipsec_connection_with_no_tunnel_subnet(self): - """Create an IPSec connection without an IP address on tunnel.""" - tunnel_id, ipsec_policy_id = self._prepare_for_site_conn_create() - with httmock.HTTMock(csr_request.token, - csr_request.post, - csr_request.get_unnumbered): - connection_info = { - u'vpn-interface-name': u'Tunnel%d' % tunnel_id, - u'ipsec-policy-id': u'%d' % ipsec_policy_id, - u'local-device': {u'ip-address': u'GigabitEthernet3', - u'tunnel-ip-address': u'10.10.10.10'}, - u'remote-device': {u'tunnel-ip-address': u'10.10.10.20'} - } - location = self.csr.create_ipsec_connection(connection_info) - self.addCleanup(self._remove_resource_for_test, - self.csr.delete_ipsec_connection, - 'Tunnel%d' % tunnel_id) - self.assertEqual(requests.codes.CREATED, self.csr.status) - self.assertIn('vpn-svc/site-to-site/Tunnel%d' % tunnel_id, - location) - # Check the hard-coded items that get set as well... - content = self.csr.get_request(location, full_url=True) - self.assertEqual(requests.codes.OK, self.csr.status) - expected_connection = {u'kind': u'object#vpn-site-to-site', - u'ike-profile-id': None, - u'mtu': 1500, - u'ip-version': u'ipv4'} - expected_connection.update(connection_info) - self.assertEqual(expected_connection, content) - - def test_create_ipsec_connection_no_pre_shared_key(self): - """Test of connection create without associated pre-shared key. - - The CSR will create the connection, but will not be able to pass - traffic without the pre-shared key. - """ - - tunnel_id, ipsec_policy_id = self._prepare_for_site_conn_create( - skip_psk=True) - with httmock.HTTMock(csr_request.token, - csr_request.post, - csr_request.normal_get): - connection_info = { - u'vpn-interface-name': u'Tunnel%d' % tunnel_id, - u'ipsec-policy-id': u'%d' % ipsec_policy_id, - u'mtu': 1500, - u'local-device': {u'ip-address': u'10.3.0.1/24', - u'tunnel-ip-address': u'10.10.10.10'}, - u'remote-device': {u'tunnel-ip-address': u'10.10.10.20'} - } - location = self.csr.create_ipsec_connection(connection_info) - self.addCleanup(self._remove_resource_for_test, - self.csr.delete_ipsec_connection, - 'Tunnel%d' % tunnel_id) - self.assertEqual(requests.codes.CREATED, self.csr.status) - self.assertIn('vpn-svc/site-to-site/Tunnel%d' % tunnel_id, - location) - # Check the hard-coded items that get set as well... - content = self.csr.get_request(location, full_url=True) - self.assertEqual(requests.codes.OK, self.csr.status) - expected_connection = {u'kind': u'object#vpn-site-to-site', - u'ike-profile-id': None, - u'mtu': 1500, - u'ip-version': u'ipv4'} - expected_connection.update(connection_info) - self.assertEqual(expected_connection, content) - - def test_create_ipsec_connection_with_default_ike_policy(self): - """Test of connection create without IKE policy (uses default). - - Without an IKE policy, the CSR will use a built-in default IKE - policy setting for the connection. - """ - - tunnel_id, ipsec_policy_id = self._prepare_for_site_conn_create( - skip_ike=True) - with httmock.HTTMock(csr_request.token, - csr_request.post, - csr_request.normal_get): - connection_info = { - u'vpn-interface-name': u'Tunnel%d' % tunnel_id, - u'ipsec-policy-id': u'%d' % ipsec_policy_id, - u'mtu': 1500, - u'local-device': {u'ip-address': u'10.3.0.1/24', - u'tunnel-ip-address': u'10.10.10.10'}, - u'remote-device': {u'tunnel-ip-address': u'10.10.10.20'} - } - location = self.csr.create_ipsec_connection(connection_info) - self.addCleanup(self._remove_resource_for_test, - self.csr.delete_ipsec_connection, - 'Tunnel%d' % tunnel_id) - self.assertEqual(requests.codes.CREATED, self.csr.status) - self.assertIn('vpn-svc/site-to-site/Tunnel%d' % tunnel_id, - location) - # Check the hard-coded items that get set as well... - content = self.csr.get_request(location, full_url=True) - self.assertEqual(requests.codes.OK, self.csr.status) - expected_connection = {u'kind': u'object#vpn-site-to-site', - u'ike-profile-id': None, - u'mtu': 1500, - u'ip-version': u'ipv4'} - expected_connection.update(connection_info) - self.assertEqual(expected_connection, content) - - def test_set_ipsec_connection_admin_state_changes(self): - """Create IPSec connection in admin down state.""" - tunnel_id, ipsec_policy_id = self._prepare_for_site_conn_create() - tunnel = u'Tunnel%d' % tunnel_id - with httmock.HTTMock(csr_request.token, - csr_request.post): - connection_info = { - u'vpn-interface-name': tunnel, - u'ipsec-policy-id': u'%d' % ipsec_policy_id, - u'mtu': 1500, - u'local-device': {u'ip-address': u'10.3.0.1/24', - u'tunnel-ip-address': u'10.10.10.10'}, - u'remote-device': {u'tunnel-ip-address': u'10.10.10.20'} - } - location = self.csr.create_ipsec_connection(connection_info) - self.addCleanup(self._remove_resource_for_test, - self.csr.delete_ipsec_connection, - tunnel) - self.assertEqual(requests.codes.CREATED, self.csr.status) - self.assertIn('vpn-svc/site-to-site/%s' % tunnel, location) - state_uri = location + "/state" - # Note: When created, the tunnel will be in admin 'up' state - # Note: Line protocol state will be down, unless have an active conn. - expected_state = {u'kind': u'object#vpn-site-to-site-state', - u'vpn-interface-name': tunnel, - u'line-protocol-state': u'down', - u'enabled': False} - with httmock.HTTMock(csr_request.put, - csr_request.get_admin_down): - self.csr.set_ipsec_connection_state(tunnel, admin_up=False) - self.assertEqual(requests.codes.NO_CONTENT, self.csr.status) - content = self.csr.get_request(state_uri, full_url=True) - self.assertEqual(requests.codes.OK, self.csr.status) - self.assertEqual(expected_state, content) - - with httmock.HTTMock(csr_request.put, - csr_request.get_admin_up): - self.csr.set_ipsec_connection_state(tunnel, admin_up=True) - self.assertEqual(requests.codes.NO_CONTENT, self.csr.status) - content = self.csr.get_request(state_uri, full_url=True) - self.assertEqual(requests.codes.OK, self.csr.status) - expected_state[u'enabled'] = True - self.assertEqual(expected_state, content) - - def test_create_ipsec_connection_missing_ipsec_policy(self): - """Negative test of connection create without IPSec policy.""" - tunnel_id, ipsec_policy_id = self._prepare_for_site_conn_create( - skip_ipsec=True) - with httmock.HTTMock( - csr_request.token, - csr_request.post_missing_ipsec_policy): - connection_info = { - u'vpn-interface-name': u'Tunnel%d' % tunnel_id, - u'ipsec-policy-id': u'%d' % ipsec_policy_id, - u'local-device': {u'ip-address': u'10.3.0.1/24', - u'tunnel-ip-address': u'10.10.10.10'}, - u'remote-device': {u'tunnel-ip-address': u'10.10.10.20'} - } - self.csr.create_ipsec_connection(connection_info) - self.addCleanup(self._remove_resource_for_test, - self.csr.delete_ipsec_connection, - 'Tunnel%d' % tunnel_id) - self.assertEqual(requests.codes.BAD_REQUEST, self.csr.status) - - def _determine_conflicting_ip(self): - with httmock.HTTMock(csr_request.token, - csr_request.get_local_ip): - details = self.csr.get_request('interfaces/GigabitEthernet3') - if self.csr.status != requests.codes.OK: - self.fail("Unable to obtain interface GigabitEthernet3's IP") - if_ip = details.get('ip-address') - if not if_ip: - self.fail("No IP address for GigabitEthernet3 interface") - return '.'.join(if_ip.split('.')[:3]) + '.10' - - def test_create_ipsec_connection_conficting_tunnel_ip(self): - """Negative test of connection create with conflicting tunnel IP. - - Find out the IP of a local interface (GigabitEthernet3) and create an - IP that is on the same subnet. Note: this interface needs to be up. - """ - - conflicting_ip = self._determine_conflicting_ip() - tunnel_id, ipsec_policy_id = self._prepare_for_site_conn_create() - with httmock.HTTMock(csr_request.token, - csr_request.post_bad_ip): - connection_info = { - u'vpn-interface-name': u'Tunnel%d' % tunnel_id, - u'ipsec-policy-id': u'%d' % ipsec_policy_id, - u'local-device': {u'ip-address': u'%s/24' % conflicting_ip, - u'tunnel-ip-address': u'10.10.10.10'}, - u'remote-device': {u'tunnel-ip-address': u'10.10.10.20'} - } - self.csr.create_ipsec_connection(connection_info) - self.addCleanup(self._remove_resource_for_test, - self.csr.delete_ipsec_connection, - 'Tunnel%d' % tunnel_id) - self.assertEqual(requests.codes.BAD_REQUEST, self.csr.status) - - def test_create_ipsec_connection_with_max_mtu(self): - """Create an IPSec connection with max MTU value.""" - tunnel_id, ipsec_policy_id = self._prepare_for_site_conn_create() - with httmock.HTTMock(csr_request.token, - csr_request.post, - csr_request.get_mtu): - connection_info = { - u'vpn-interface-name': u'Tunnel%d' % tunnel_id, - u'ipsec-policy-id': u'%d' % ipsec_policy_id, - u'mtu': 9192, - u'local-device': {u'ip-address': u'10.3.0.1/24', - u'tunnel-ip-address': u'10.10.10.10'}, - u'remote-device': {u'tunnel-ip-address': u'10.10.10.20'} - } - location = self.csr.create_ipsec_connection(connection_info) - self.addCleanup(self._remove_resource_for_test, - self.csr.delete_ipsec_connection, - 'Tunnel%d' % tunnel_id) - self.assertEqual(requests.codes.CREATED, self.csr.status) - self.assertIn('vpn-svc/site-to-site/Tunnel%d' % tunnel_id, - location) - # Check the hard-coded items that get set as well... - content = self.csr.get_request(location, full_url=True) - self.assertEqual(requests.codes.OK, self.csr.status) - expected_connection = {u'kind': u'object#vpn-site-to-site', - u'ike-profile-id': None, - u'ip-version': u'ipv4'} - expected_connection.update(connection_info) - self.assertEqual(expected_connection, content) - - def test_create_ipsec_connection_with_bad_mtu(self): - """Negative test of connection create with unsupported MTU value.""" - tunnel_id, ipsec_policy_id = self._prepare_for_site_conn_create() - with httmock.HTTMock(csr_request.token, - csr_request.post_bad_mtu): - connection_info = { - u'vpn-interface-name': u'Tunnel%d' % tunnel_id, - u'ipsec-policy-id': u'%d' % ipsec_policy_id, - u'mtu': 9193, - u'local-device': {u'ip-address': u'10.3.0.1/24', - u'tunnel-ip-address': u'10.10.10.10'}, - u'remote-device': {u'tunnel-ip-address': u'10.10.10.20'} - } - self.csr.create_ipsec_connection(connection_info) - self.addCleanup(self._remove_resource_for_test, - self.csr.delete_ipsec_connection, - 'Tunnel%d' % tunnel_id) - self.assertEqual(requests.codes.BAD_REQUEST, self.csr.status) - - def test_status_when_no_tunnels_exist(self): - """Get status, when there are no tunnels.""" - with httmock.HTTMock(csr_request.token, - csr_request.get_none): - tunnels = self.csr.read_tunnel_statuses() - self.assertEqual(requests.codes.OK, self.csr.status) - self.assertEqual([], tunnels) - - def test_status_for_one_tunnel(self): - """Get status of one tunnel.""" - # Create the IPsec site-to-site connection first - tunnel_id, ipsec_policy_id = self._prepare_for_site_conn_create() - tunnel_id = 123 # Must hard code to work with mock - with httmock.HTTMock(csr_request.token, - csr_request.post, - csr_request.normal_get): - connection_info = { - u'vpn-interface-name': u'Tunnel123', - u'ipsec-policy-id': u'%d' % ipsec_policy_id, - u'local-device': {u'ip-address': u'10.3.0.1/24', - u'tunnel-ip-address': u'10.10.10.10'}, - u'remote-device': {u'tunnel-ip-address': u'10.10.10.20'} - } - location = self.csr.create_ipsec_connection(connection_info) - self.addCleanup(self._remove_resource_for_test, - self.csr.delete_ipsec_connection, - u'Tunnel123') - self.assertEqual(requests.codes.CREATED, self.csr.status) - self.assertIn('vpn-svc/site-to-site/Tunnel%d' % tunnel_id, - location) - with httmock.HTTMock(csr_request.token, - csr_request.normal_get): - tunnels = self.csr.read_tunnel_statuses() - self.assertEqual(requests.codes.OK, self.csr.status) - self.assertEqual([(u'Tunnel123', u'DOWN-NEGOTIATING'), ], tunnels) - - -class TestCsrRestIkeKeepaliveCreate(base.BaseTestCase): - - """Test IKE keepalive REST requests. - - Note: On the Cisco CSR, the IKE keepalive for v1 is a global configuration - that applies to all VPN tunnels to specify Dead Peer Detection information. - As a result, this REST API is not used in the OpenStack device driver, and - the keepalive will default to zero (disabled). - """ - - def _save_dpd_info(self): - with httmock.HTTMock(csr_request.token, - csr_request.normal_get): - details = self.csr.get_request('vpn-svc/ike/keepalive') - if self.csr.status == requests.codes.OK: - self.dpd = details - self.addCleanup(self._restore_dpd_info) - elif self.csr.status != requests.codes.NOT_FOUND: - self.fail("Unable to save original DPD info") - - def _restore_dpd_info(self): - with httmock.HTTMock(csr_request.token, - csr_request.put): - payload = {'interval': self.dpd['interval'], - 'retry': self.dpd['retry']} - self.csr.put_request('vpn-svc/ike/keepalive', payload=payload) - if self.csr.status != requests.codes.NO_CONTENT: - self.fail("Unable to restore DPD info after test") - - def setUp(self, host='localhost', tunnel_ip='10.10.10.10', timeout=None): - super(TestCsrRestIkeKeepaliveCreate, self).setUp() - info = {'rest_mgmt_ip': host, 'tunnel_ip': tunnel_ip, - 'username': 'stack', 'password': 'cisco', 'timeout': timeout} - self.csr = csr_client.CsrRestClient(info) - self._save_dpd_info() - self.csr.token = None - - def test_configure_ike_keepalive(self): - """Set IKE keep-alive (aka Dead Peer Detection) for the CSR.""" - with httmock.HTTMock(csr_request.token, - csr_request.put, - csr_request.normal_get): - keepalive_info = {'interval': 60, 'retry': 4} - self.csr.configure_ike_keepalive(keepalive_info) - self.assertEqual(requests.codes.NO_CONTENT, self.csr.status) - content = self.csr.get_request('vpn-svc/ike/keepalive') - self.assertEqual(requests.codes.OK, self.csr.status) - expected = {'periodic': False} - expected.update(keepalive_info) - self.assertDictContainsSubset(expected, content) - - def test_disable_ike_keepalive(self): - """Disable IKE keep-alive (aka Dead Peer Detection) for the CSR.""" - with httmock.HTTMock(csr_request.token, - csr_request.delete, - csr_request.put, - csr_request.get_not_configured): - keepalive_info = {'interval': 0, 'retry': 4} - self.csr.configure_ike_keepalive(keepalive_info) - self.assertEqual(requests.codes.NO_CONTENT, self.csr.status) - - -class TestCsrRestStaticRoute(base.BaseTestCase): - - """Test static route REST requests. - - A static route is added for the peer's private network. Would create - a route for each of the peer CIDRs specified for the VPN connection. - """ - - def setUp(self, host='localhost', tunnel_ip='10.10.10.10', timeout=None): - super(TestCsrRestStaticRoute, self).setUp() - info = {'rest_mgmt_ip': host, 'tunnel_ip': tunnel_ip, - 'username': 'stack', 'password': 'cisco', 'timeout': timeout} - self.csr = csr_client.CsrRestClient(info) - - def test_create_delete_static_route(self): - """Create and then delete a static route for the tunnel.""" - cidr = u'10.1.0.0/24' - interface = u'GigabitEthernet1' - expected_id = '10.1.0.0_24_GigabitEthernet1' - with httmock.HTTMock(csr_request.token, - csr_request.post, - csr_request.normal_get): - route_info = {u'destination-network': cidr, - u'outgoing-interface': interface} - location = self.csr.create_static_route(route_info) - self.assertEqual(requests.codes.CREATED, self.csr.status) - self.assertIn('routing-svc/static-routes/%s' % expected_id, - location) - # Check the hard-coded items that get set as well... - content = self.csr.get_request(location, full_url=True) - self.assertEqual(requests.codes.OK, self.csr.status) - expected_route = {u'kind': u'object#static-route', - u'next-hop-router': None, - u'admin-distance': 1} - expected_route.update(route_info) - self.assertEqual(expected_route, content) - # Now delete and verify that static route is gone - with httmock.HTTMock(csr_request.token, - csr_request.delete, - csr_request.no_such_resource): - route_id = csr_client.make_route_id(cidr, interface) - self.csr.delete_static_route(route_id) - self.assertEqual(requests.codes.NO_CONTENT, self.csr.status) - content = self.csr.get_request(location, full_url=True) - self.assertEqual(requests.codes.NOT_FOUND, self.csr.status) diff --git a/neutron/tests/unit/services/vpn/device_drivers/test_cisco_csr_rest.py b/neutron/tests/unit/services/vpn/device_drivers/test_cisco_csr_rest.py new file mode 100644 index 00000000000..b7092af4570 --- /dev/null +++ b/neutron/tests/unit/services/vpn/device_drivers/test_cisco_csr_rest.py @@ -0,0 +1,1626 @@ +# Copyright 2014 Cisco Systems, Inc. All rights reserved. +# +# 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. +# + +import random +import re + +import requests +from requests import exceptions as r_exc +from requests_mock.contrib import fixture as mock_fixture + +from neutron.services.vpn.device_drivers import ( + cisco_csr_rest_client as csr_client) +from neutron.tests import base + + +dummy_policy_id = 'dummy-ipsec-policy-id-name' +BASE_URL = 'https://%s:55443/api/v1/' +LOCAL_URL = 'https://localhost:55443/api/v1/' + +URI_HOSTNAME = 'global/host-name' +URI_USERS = 'global/local-users' +URI_AUTH = 'auth/token-services' +URI_INTERFACE_GE1 = 'interfaces/GigabitEthernet1' +URI_PSK = 'vpn-svc/ike/keyrings' +URI_PSK_ID = URI_PSK + '/%s' +URI_IKE_POLICY = 'vpn-svc/ike/policies' +URI_IKE_POLICY_ID = URI_IKE_POLICY + '/%s' +URI_IPSEC_POLICY = 'vpn-svc/ipsec/policies' +URI_IPSEC_POLICY_ID = URI_IPSEC_POLICY + '/%s' +URI_IPSEC_CONN = 'vpn-svc/site-to-site' +URI_IPSEC_CONN_ID = URI_IPSEC_CONN + '/%s' +URI_KEEPALIVE = 'vpn-svc/ike/keepalive' +URI_ROUTES = 'routing-svc/static-routes' +URI_ROUTES_ID = URI_ROUTES + '/%s' +URI_SESSIONS = 'vpn-svc/site-to-site/active/sessions' + + +# Note: Helper functions to test reuse of IDs. +def generate_pre_shared_key_id(): + return random.randint(100, 200) + + +def generate_ike_policy_id(): + return random.randint(200, 300) + + +def generate_ipsec_policy_id(): + return random.randint(300, 400) + + +class CiscoCsrBaseTestCase(base.BaseTestCase): + + """Helper methods to register mock intercepts - used by child classes.""" + + def setUp(self, host='localhost', tunnel_ip='10.10.10.10', timeout=None): + super(CiscoCsrBaseTestCase, self).setUp() + self.base_url = BASE_URL % host + self.requests = self.useFixture(mock_fixture.Fixture()) + info = {'rest_mgmt_ip': host, 'tunnel_ip': tunnel_ip, + 'username': 'stack', 'password': 'cisco', 'timeout': timeout} + self.csr = csr_client.CsrRestClient(info) + + def _register_local_get(self, uri, json=None, + result_code=requests.codes.OK): + self.requests.register_uri( + 'GET', + LOCAL_URL + uri, + status_code=result_code, + json=json) + + def _register_local_post(self, uri, resource_id, + result_code=requests.codes.CREATED): + self.requests.register_uri( + 'POST', + LOCAL_URL + uri, + status_code=result_code, + headers={'location': LOCAL_URL + uri + '/' + str(resource_id)}) + + def _register_local_delete(self, uri, resource_id, json=None, + result_code=requests.codes.NO_CONTENT): + self.requests.register_uri( + 'DELETE', + LOCAL_URL + uri + '/' + str(resource_id), + status_code=result_code, + json=json) + + def _register_local_delete_by_id(self, resource_id, + result_code=requests.codes.NO_CONTENT): + local_resource_re = re.compile(LOCAL_URL + '.+%s$' % resource_id) + self.requests.register_uri( + 'DELETE', + local_resource_re, + status_code=result_code) + + def _register_local_put(self, uri, resource_id, + result_code=requests.codes.NO_CONTENT): + self.requests.register_uri('PUT', + LOCAL_URL + uri + '/' + resource_id, + status_code=result_code) + + def _register_local_get_not_found(self, uri, resource_id, + result_code=requests.codes.NOT_FOUND): + self.requests.register_uri( + 'GET', + LOCAL_URL + uri + '/' + str(resource_id), + status_code=result_code) + + def _helper_register_auth_request(self): + self.requests.register_uri('POST', + LOCAL_URL + URI_AUTH, + status_code=requests.codes.OK, + json={'token-id': 'dummy-token'}) + + def _helper_register_psk_post(self, psk_id): + self._register_local_post(URI_PSK, psk_id) + + def _helper_register_ike_policy_post(self, policy_id): + self._register_local_post(URI_IKE_POLICY, policy_id) + + def _helper_register_ipsec_policy_post(self, policy_id): + self._register_local_post(URI_IPSEC_POLICY, policy_id) + + def _helper_register_tunnel_post(self, tunnel): + self._register_local_post(URI_IPSEC_CONN, tunnel) + + +class TestCsrLoginRestApi(CiscoCsrBaseTestCase): + + """Test logging into CSR to obtain token-id.""" + + def test_get_token(self): + """Obtain the token and its expiration time.""" + self._helper_register_auth_request() + self.assertTrue(self.csr.authenticate()) + self.assertEqual(requests.codes.OK, self.csr.status) + self.assertIsNotNone(self.csr.token) + + def test_unauthorized_token_request(self): + """Negative test of invalid user/password.""" + self.requests.register_uri('POST', + LOCAL_URL + URI_AUTH, + status_code=requests.codes.UNAUTHORIZED) + self.csr.auth = ('stack', 'bogus') + self.assertIsNone(self.csr.authenticate()) + self.assertEqual(requests.codes.UNAUTHORIZED, self.csr.status) + + def _simulate_wrong_host(self, request): + if 'wrong-host' in request.url: + raise r_exc.ConnectionError() + + def test_non_existent_host(self): + """Negative test of request to non-existent host.""" + self.requests.add_matcher(self._simulate_wrong_host) + self.csr.host = 'wrong-host' + self.csr.token = 'Set by some previously successful access' + self.assertIsNone(self.csr.authenticate()) + self.assertEqual(requests.codes.NOT_FOUND, self.csr.status) + self.assertIsNone(self.csr.token) + + def _simulate_token_timeout(self, request): + raise r_exc.Timeout() + + def test_timeout_on_token_access(self): + """Negative test of a timeout on a request.""" + self.requests.add_matcher(self._simulate_token_timeout) + self.assertIsNone(self.csr.authenticate()) + self.assertEqual(requests.codes.REQUEST_TIMEOUT, self.csr.status) + self.assertIsNone(self.csr.token) + + +class TestCsrGetRestApi(CiscoCsrBaseTestCase): + + """Test CSR GET REST API.""" + + def test_valid_rest_gets(self): + """Simple GET requests. + + First request will do a post to get token (login). Assumes + that there are two interfaces on the CSR. + """ + + self._helper_register_auth_request() + self._register_local_get(URI_HOSTNAME, + json={u'kind': u'object#host-name', + u'host-name': u'Router'}) + self._register_local_get(URI_USERS, + json={u'kind': u'collection#local-user', + u'users': ['peter', 'paul', 'mary']}) + + actual = self.csr.get_request(URI_HOSTNAME) + self.assertEqual(requests.codes.OK, self.csr.status) + self.assertIn('host-name', actual) + self.assertIsNotNone(actual['host-name']) + + actual = self.csr.get_request(URI_USERS) + self.assertEqual(requests.codes.OK, self.csr.status) + self.assertIn('users', actual) + + +class TestCsrPostRestApi(CiscoCsrBaseTestCase): + + """Test CSR POST REST API.""" + + def setUp(self, host='localhost', tunnel_ip='10.10.10.10', timeout=None): + """Setup for each test in this suite. + + Each test case will have a normal authentication mock response + registered here, although they may replace it, as needed. + """ + super(TestCsrPostRestApi, self).setUp(host, tunnel_ip, timeout) + self._helper_register_auth_request() + + def test_post_requests(self): + """Simple POST requests (repeatable). + + First request will do a post to get token (login). Assumes + that there are two interfaces (Ge1 and Ge2) on the CSR. + """ + + interface_re = re.compile('https://localhost:55443/.*/interfaces/' + 'GigabitEthernet\d/statistics') + self.requests.register_uri('POST', + interface_re, + status_code=requests.codes.NO_CONTENT) + + actual = self.csr.post_request( + 'interfaces/GigabitEthernet1/statistics', + payload={'action': 'clear'}) + self.assertEqual(requests.codes.NO_CONTENT, self.csr.status) + self.assertIsNone(actual) + actual = self.csr.post_request( + 'interfaces/GigabitEthernet2/statistics', + payload={'action': 'clear'}) + self.assertEqual(requests.codes.NO_CONTENT, self.csr.status) + self.assertIsNone(actual) + + def test_post_with_location(self): + """Create a user and verify that location returned.""" + self.requests.register_uri( + 'POST', + LOCAL_URL + URI_USERS, + status_code=requests.codes.CREATED, + headers={'location': LOCAL_URL + URI_USERS + '/test-user'}) + location = self.csr.post_request( + URI_USERS, + payload={'username': 'test-user', + 'password': 'pass12345', + 'privilege': 15}) + self.assertEqual(requests.codes.CREATED, self.csr.status) + self.assertIn(URI_USERS + '/test-user', location) + + def test_post_missing_required_attribute(self): + """Negative test of POST with missing mandatory info.""" + self.requests.register_uri('POST', + LOCAL_URL + URI_USERS, + status_code=requests.codes.BAD_REQUEST) + self.csr.post_request(URI_USERS, + payload={'password': 'pass12345', + 'privilege': 15}) + self.assertEqual(requests.codes.BAD_REQUEST, self.csr.status) + + def test_post_invalid_attribute(self): + """Negative test of POST with invalid info.""" + self.requests.register_uri('POST', + LOCAL_URL + URI_USERS, + status_code=requests.codes.BAD_REQUEST) + self.csr.post_request(URI_USERS, + payload={'username': 'test-user', + 'password': 'pass12345', + 'privilege': 20}) + self.assertEqual(requests.codes.BAD_REQUEST, self.csr.status) + + def test_post_already_exists(self): + """Negative test of a duplicate POST. + + Uses the lower level _do_request() API to just perform the POST and + obtain the response, without any error processing. + """ + + self.requests.register_uri( + 'POST', + LOCAL_URL + URI_USERS, + status_code=requests.codes.CREATED, + headers={'location': LOCAL_URL + URI_USERS + '/test-user'}) + + location = self.csr._do_request( + 'POST', + URI_USERS, + payload={'username': 'test-user', + 'password': 'pass12345', + 'privilege': 15}, + more_headers=csr_client.HEADER_CONTENT_TYPE_JSON) + self.assertEqual(requests.codes.CREATED, self.csr.status) + self.assertIn(URI_USERS + '/test-user', location) + self.csr.post_request(URI_USERS, + payload={'username': 'test-user', + 'password': 'pass12345', + 'privilege': 20}) + + self.requests.register_uri( + 'POST', + LOCAL_URL + URI_USERS, + status_code=requests.codes.NOT_FOUND, + json={u'error-code': -1, + u'error-message': u'user test-user already exists'}) + + self.csr._do_request( + 'POST', + URI_USERS, + payload={'username': 'test-user', + 'password': 'pass12345', + 'privilege': 15}, + more_headers=csr_client.HEADER_CONTENT_TYPE_JSON) + # Note: For local-user, a 404 error is returned. For + # site-to-site connection a 400 is returned. + self.assertEqual(requests.codes.NOT_FOUND, self.csr.status) + + def test_post_changing_value(self): + """Negative test of a POST trying to change a value.""" + self.requests.register_uri( + 'POST', + LOCAL_URL + URI_USERS, + status_code=requests.codes.CREATED, + headers={'location': LOCAL_URL + URI_USERS + '/test-user'}) + + location = self.csr.post_request( + URI_USERS, + payload={'username': 'test-user', + 'password': 'pass12345', + 'privilege': 15}) + self.assertEqual(requests.codes.CREATED, self.csr.status) + self.assertIn(URI_USERS + '/test-user', location) + + self.requests.register_uri( + 'POST', + LOCAL_URL + URI_USERS, + status_code=requests.codes.NOT_FOUND, + json={u'error-code': -1, + u'error-message': u'user test-user already exists'}) + + actual = self.csr.post_request(URI_USERS, + payload={'username': 'test-user', + 'password': 'changed', + 'privilege': 15}) + self.assertEqual(requests.codes.NOT_FOUND, self.csr.status) + expected = {u'error-code': -1, + u'error-message': u'user test-user already exists'} + self.assertDictSupersetOf(expected, actual) + + +class TestCsrPutRestApi(CiscoCsrBaseTestCase): + + """Test CSR PUT REST API.""" + + def _save_resources(self): + self._register_local_get(URI_HOSTNAME, + json={u'kind': u'object#host-name', + u'host-name': u'Router'}) + interface_info = {u'kind': u'object#interface', + u'description': u'Changed description', + u'if-name': 'interfaces/GigabitEthernet1', + u'proxy-arp': True, + u'subnet-mask': u'255.255.255.0', + u'icmp-unreachable': True, + u'nat-direction': u'', + u'icmp-redirects': True, + u'ip-address': u'192.168.200.1', + u'verify-unicast-source': False, + u'type': u'ethernet'} + self._register_local_get(URI_INTERFACE_GE1, + json=interface_info) + details = self.csr.get_request(URI_HOSTNAME) + if self.csr.status != requests.codes.OK: + self.fail("Unable to save original host name") + self.original_host = details['host-name'] + details = self.csr.get_request(URI_INTERFACE_GE1) + if self.csr.status != requests.codes.OK: + self.fail("Unable to save interface Ge1 description") + self.original_if = details + self.csr.token = None + + def _restore_resources(self, user, password): + """Restore the host name and interface description. + + Must restore the user and password, so that authentication + token can be obtained (as some tests corrupt auth info). + Will also clear token, so that it gets a fresh token. + """ + + self._register_local_put('global', 'host-name') + self._register_local_put('interfaces', 'GigabitEthernet1') + + self.csr.auth = (user, password) + self.csr.token = None + payload = {'host-name': self.original_host} + self.csr.put_request(URI_HOSTNAME, payload=payload) + if self.csr.status != requests.codes.NO_CONTENT: + self.fail("Unable to restore host name after test") + payload = {'description': self.original_if['description'], + 'if-name': self.original_if['if-name'], + 'ip-address': self.original_if['ip-address'], + 'subnet-mask': self.original_if['subnet-mask'], + 'type': self.original_if['type']} + self.csr.put_request(URI_INTERFACE_GE1, + payload=payload) + if self.csr.status != requests.codes.NO_CONTENT: + self.fail("Unable to restore I/F Ge1 description after test") + + def setUp(self, host='localhost', tunnel_ip='10.10.10.10', timeout=None): + """Setup for each test in this suite. + + Each test case will have a normal authentication mock response + registered here, although they may replace it, as needed. In + addition, resources are saved, before each test is run, and + restored, after each test completes. + """ + super(TestCsrPutRestApi, self).setUp(host, tunnel_ip, timeout) + self._helper_register_auth_request() + self._save_resources() + self.addCleanup(self._restore_resources, 'stack', 'cisco') + + def test_put_requests(self): + """Simple PUT requests (repeatable). + + First request will do a post to get token (login). Assumes + that there are two interfaces on the CSR (Ge1 and Ge2). + """ + + self._register_local_put('interfaces', 'GigabitEthernet1') + self._register_local_put('global', 'host-name') + + actual = self.csr.put_request(URI_HOSTNAME, + payload={'host-name': 'TestHost'}) + self.assertEqual(requests.codes.NO_CONTENT, self.csr.status) + self.assertIsNone(actual) + + actual = self.csr.put_request(URI_HOSTNAME, + payload={'host-name': 'TestHost2'}) + self.assertEqual(requests.codes.NO_CONTENT, self.csr.status) + self.assertIsNone(actual) + + def test_change_interface_description(self): + """Test that interface description can be changed. + + This was a problem with an earlier version of the CSR image and is + here to prevent regression. + """ + self._register_local_put('interfaces', 'GigabitEthernet1') + payload = {'description': u'Changed description', + 'if-name': self.original_if['if-name'], + 'ip-address': self.original_if['ip-address'], + 'subnet-mask': self.original_if['subnet-mask'], + 'type': self.original_if['type']} + actual = self.csr.put_request(URI_INTERFACE_GE1, payload=payload) + self.assertEqual(requests.codes.NO_CONTENT, self.csr.status) + self.assertIsNone(actual) + actual = self.csr.get_request(URI_INTERFACE_GE1) + self.assertEqual(requests.codes.OK, self.csr.status) + self.assertIn('description', actual) + self.assertEqual(u'Changed description', + actual['description']) + + def ignore_test_change_to_empty_interface_description(self): + """Test that interface description can be changed to empty string. + + This is here to prevent regression, where the CSR was rejecting + an attempt to set the description to an empty string. + """ + self._register_local_put('interfaces', 'GigabitEthernet1') + payload = {'description': '', + 'if-name': self.original_if['if-name'], + 'ip-address': self.original_if['ip-address'], + 'subnet-mask': self.original_if['subnet-mask'], + 'type': self.original_if['type']} + actual = self.csr.put_request(URI_INTERFACE_GE1, payload=payload) + self.assertEqual(requests.codes.NO_CONTENT, self.csr.status) + self.assertIsNone(actual) + actual = self.csr.get_request(URI_INTERFACE_GE1) + self.assertEqual(requests.codes.OK, self.csr.status) + self.assertIn('description', actual) + self.assertEqual('', actual['description']) + + +class TestCsrDeleteRestApi(CiscoCsrBaseTestCase): + + """Test CSR DELETE REST API.""" + + def setUp(self, host='localhost', tunnel_ip='10.10.10.10', timeout=None): + """Setup for each test in this suite. + + Each test case will have a normal authentication mock response + registered here, although they may replace it, as needed. + """ + super(TestCsrDeleteRestApi, self).setUp(host, tunnel_ip, timeout) + self._helper_register_auth_request() + + def _make_dummy_user(self): + """Create a user that will be later deleted.""" + self.requests.register_uri( + 'POST', + LOCAL_URL + URI_USERS, + status_code=requests.codes.CREATED, + headers={'location': LOCAL_URL + URI_USERS + '/dummy'}) + self.csr.post_request(URI_USERS, + payload={'username': 'dummy', + 'password': 'dummy', + 'privilege': 15}) + self.assertEqual(requests.codes.CREATED, self.csr.status) + + def test_delete_requests(self): + """Simple DELETE requests (creating entry first).""" + self._register_local_delete(URI_USERS, 'dummy') + self._make_dummy_user() + self.csr.token = None # Force login + self.csr.delete_request(URI_USERS + '/dummy') + self.assertEqual(requests.codes.NO_CONTENT, self.csr.status) + # Delete again, but without logging in this time + self._make_dummy_user() + self.csr.delete_request(URI_USERS + '/dummy') + self.assertEqual(requests.codes.NO_CONTENT, self.csr.status) + + def test_delete_non_existent_entry(self): + """Negative test of trying to delete a non-existent user.""" + expected = {u'error-code': -1, + u'error-message': u'user unknown not found'} + self._register_local_delete(URI_USERS, 'unknown', + result_code=requests.codes.NOT_FOUND, + json=expected) + actual = self.csr.delete_request(URI_USERS + '/unknown') + self.assertEqual(requests.codes.NOT_FOUND, self.csr.status) + self.assertDictSupersetOf(expected, actual) + + def test_delete_not_allowed(self): + """Negative test of trying to delete the host-name.""" + self._register_local_delete( + 'global', 'host-name', + result_code=requests.codes.METHOD_NOT_ALLOWED) + self.csr.delete_request(URI_HOSTNAME) + self.assertEqual(requests.codes.METHOD_NOT_ALLOWED, + self.csr.status) + + +class TestCsrRestApiFailures(CiscoCsrBaseTestCase): + + """Test failure cases common for all REST APIs. + + Uses the lower level _do_request() to just perform the operation and get + the result, without any error handling. + """ + + def setUp(self, host='localhost', tunnel_ip='10.10.10.10', timeout=0.1): + """Setup for each test in this suite. + + Each test case will have a normal authentication mock response + registered here, although they may replace it, as needed. + """ + super(TestCsrRestApiFailures, self).setUp(host, tunnel_ip, timeout) + self._helper_register_auth_request() + + def _simulate_timeout(self, request): + if URI_HOSTNAME in request.path_uri: + raise r_exc.Timeout() + + def test_request_for_non_existent_resource(self): + """Negative test of non-existent resource on REST request.""" + self.requests.register_uri('POST', + LOCAL_URL + 'no/such/request', + status_code=requests.codes.NOT_FOUND) + self.csr.post_request('no/such/request') + self.assertEqual(requests.codes.NOT_FOUND, self.csr.status) + # The result is HTTP 404 message, so no error content to check + + def _simulate_get_timeout(self, request): + """Will raise exception for any host request to this resource.""" + if URI_HOSTNAME in request.path_url: + raise r_exc.Timeout() + + def test_timeout_during_request(self): + """Negative test of timeout during REST request.""" + self.requests.add_matcher(self._simulate_get_timeout) + self.csr._do_request('GET', URI_HOSTNAME) + self.assertEqual(requests.codes.REQUEST_TIMEOUT, self.csr.status) + + def _simulate_auth_failure(self, request): + """First time auth POST is done, re-report unauthorized.""" + if URI_AUTH in request.path_url and not self.called_once: + self.called_once = True + resp = requests.Response() + resp.status_code = requests.codes.UNAUTHORIZED + return resp + + def test_token_expired_on_request(self): + """Token expired before trying a REST request. + + First, the token is set to a bogus value, to force it to + try to authenticate on the GET request. Second, a mock that + runs once, will simulate an auth failure. Third, the normal + auth mock will simulate success. + """ + + self._register_local_get(URI_HOSTNAME, + json={u'kind': u'object#host-name', + u'host-name': u'Router'}) + self.called_once = False + self.requests.add_matcher(self._simulate_auth_failure) + self.csr.token = '123' # These are 44 characters, so won't match + actual = self.csr._do_request('GET', URI_HOSTNAME) + self.assertEqual(requests.codes.OK, self.csr.status) + self.assertIn('host-name', actual) + self.assertIsNotNone(actual['host-name']) + + def test_failed_to_obtain_token_for_request(self): + """Negative test of unauthorized user for REST request.""" + self.csr.auth = ('stack', 'bogus') + self._register_local_get(URI_HOSTNAME, + result_code=requests.codes.UNAUTHORIZED) + self.csr._do_request('GET', URI_HOSTNAME) + self.assertEqual(requests.codes.UNAUTHORIZED, self.csr.status) + + +class TestCsrRestIkePolicyCreate(CiscoCsrBaseTestCase): + + """Test IKE policy create REST requests.""" + + def setUp(self, host='localhost', tunnel_ip='10.10.10.10', timeout=None): + """Setup for each test in this suite. + + Each test case will have a normal authentication and post mock + response registered, although the test may replace them, if needed. + """ + super(TestCsrRestIkePolicyCreate, self).setUp(host, tunnel_ip, timeout) + self._helper_register_auth_request() + self._helper_register_ike_policy_post(2) + + def _helper_register_ike_policy_get(self): + content = {u'kind': u'object#ike-policy', + u'priority-id': u'2', + u'version': u'v1', + u'local-auth-method': u'pre-share', + u'encryption': u'aes256', + u'hash': u'sha', + u'dhGroup': 5, + u'lifetime': 3600} + self._register_local_get(URI_IKE_POLICY_ID % '2', json=content) + + def test_create_delete_ike_policy(self): + """Create and then delete IKE policy.""" + self._helper_register_ike_policy_get() + policy_info = {u'priority-id': u'2', + u'encryption': u'aes256', + u'hash': u'sha', + u'dhGroup': 5, + u'lifetime': 3600} + location = self.csr.create_ike_policy(policy_info) + self.assertEqual(requests.codes.CREATED, self.csr.status) + self.assertIn(URI_IKE_POLICY_ID % '2', location) + # Check the hard-coded items that get set as well... + actual = self.csr.get_request(location, full_url=True) + self.assertEqual(requests.codes.OK, self.csr.status) + expected_policy = {u'kind': u'object#ike-policy', + u'version': u'v1', + u'local-auth-method': u'pre-share'} + expected_policy.update(policy_info) + self.assertEqual(expected_policy, actual) + + # Now delete and verify the IKE policy is gone + self._register_local_delete(URI_IKE_POLICY, 2) + self._register_local_get_not_found(URI_IKE_POLICY, 2) + + self.csr.delete_ike_policy(2) + self.assertEqual(requests.codes.NO_CONTENT, self.csr.status) + actual = self.csr.get_request(location, full_url=True) + self.assertEqual(requests.codes.NOT_FOUND, self.csr.status) + + def test_create_ike_policy_with_defaults(self): + """Create IKE policy using defaults for all optional values.""" + policy = {u'kind': u'object#ike-policy', + u'priority-id': u'2', + u'version': u'v1', + u'local-auth-method': u'pre-share', + u'encryption': u'des', + u'hash': u'sha', + u'dhGroup': 1, + u'lifetime': 86400} + self._register_local_get(URI_IKE_POLICY_ID % '2', json=policy) + policy_info = {u'priority-id': u'2'} + location = self.csr.create_ike_policy(policy_info) + self.assertEqual(requests.codes.CREATED, self.csr.status) + self.assertIn(URI_IKE_POLICY_ID % '2', location) + + # Check the hard-coded items that get set as well... + actual = self.csr.get_request(location, full_url=True) + self.assertEqual(requests.codes.OK, self.csr.status) + expected_policy = {u'kind': u'object#ike-policy', + u'version': u'v1', + u'encryption': u'des', + u'hash': u'sha', + u'dhGroup': 1, + u'lifetime': 86400, + # Lower level sets this, but it is the default + u'local-auth-method': u'pre-share'} + expected_policy.update(policy_info) + self.assertEqual(expected_policy, actual) + + def test_create_duplicate_ike_policy(self): + """Negative test of trying to create a duplicate IKE policy.""" + self._helper_register_ike_policy_get() + policy_info = {u'priority-id': u'2', + u'encryption': u'aes', + u'hash': u'sha', + u'dhGroup': 5, + u'lifetime': 3600} + location = self.csr.create_ike_policy(policy_info) + self.assertEqual(requests.codes.CREATED, self.csr.status) + self.assertIn(URI_IKE_POLICY_ID % '2', location) + self.requests.register_uri( + 'POST', + LOCAL_URL + URI_IKE_POLICY, + status_code=requests.codes.BAD_REQUEST, + json={u'error-code': -1, + u'error-message': u'policy 2 exist, not allow to ' + u'update policy using POST method'}) + location = self.csr.create_ike_policy(policy_info) + self.assertEqual(requests.codes.BAD_REQUEST, self.csr.status) + expected = {u'error-code': -1, + u'error-message': u'policy 2 exist, not allow to ' + u'update policy using POST method'} + self.assertDictSupersetOf(expected, location) + + +class TestCsrRestIPSecPolicyCreate(CiscoCsrBaseTestCase): + + """Test IPSec policy create REST requests.""" + + def setUp(self, host='localhost', tunnel_ip='10.10.10.10', timeout=None): + """Set up for each test in this suite. + + Each test case will have a normal authentication and post mock + response registered, although the test may replace them, if needed. + """ + super(TestCsrRestIPSecPolicyCreate, self).setUp(host, + tunnel_ip, + timeout) + self._helper_register_auth_request() + self._helper_register_ipsec_policy_post(123) + + def _helper_register_ipsec_policy_get(self, override=None): + content = {u'kind': u'object#ipsec-policy', + u'mode': u'tunnel', + u'policy-id': u'123', + u'protection-suite': { + u'esp-encryption': u'esp-256-aes', + u'esp-authentication': u'esp-sha-hmac', + u'ah': u'ah-sha-hmac', + }, + u'anti-replay-window-size': u'Disable', + u'lifetime-sec': 120, + u'pfs': u'group5', + u'lifetime-kb': 4608000, + u'idle-time': None} + if override: + content.update(override) + self._register_local_get(URI_IPSEC_POLICY + '/123', json=content) + + def test_create_delete_ipsec_policy(self): + """Create and then delete IPSec policy.""" + policy_info = { + u'policy-id': u'123', + u'protection-suite': { + u'esp-encryption': u'esp-256-aes', + u'esp-authentication': u'esp-sha-hmac', + u'ah': u'ah-sha-hmac', + }, + u'lifetime-sec': 120, + u'pfs': u'group5', + u'anti-replay-window-size': u'disable' + } + location = self.csr.create_ipsec_policy(policy_info) + self.assertEqual(requests.codes.CREATED, self.csr.status) + self.assertIn(URI_IPSEC_POLICY + '/123', location) + + # Check the hard-coded items that get set as well... + self._helper_register_ipsec_policy_get() + actual = self.csr.get_request(location, full_url=True) + self.assertEqual(requests.codes.OK, self.csr.status) + expected_policy = {u'kind': u'object#ipsec-policy', + u'mode': u'tunnel', + u'lifetime-kb': 4608000, + u'idle-time': None} + expected_policy.update(policy_info) + # CSR will respond with capitalized value + expected_policy[u'anti-replay-window-size'] = u'Disable' + self.assertEqual(expected_policy, actual) + + # Now delete and verify the IPSec policy is gone + self._register_local_delete(URI_IPSEC_POLICY, 123) + self._register_local_get_not_found(URI_IPSEC_POLICY, 123) + + self.csr.delete_ipsec_policy('123') + self.assertEqual(requests.codes.NO_CONTENT, self.csr.status) + actual = self.csr.get_request(location, full_url=True) + self.assertEqual(requests.codes.NOT_FOUND, self.csr.status) + + def test_create_ipsec_policy_with_defaults(self): + """Create IPSec policy with default for all optional values.""" + policy_info = {u'policy-id': u'123'} + location = self.csr.create_ipsec_policy(policy_info) + self.assertEqual(requests.codes.CREATED, self.csr.status) + self.assertIn(URI_IPSEC_POLICY + '/123', location) + + # Check the hard-coded items that get set as well... + expected_policy = {u'kind': u'object#ipsec-policy', + u'mode': u'tunnel', + u'policy-id': u'123', + u'protection-suite': {}, + u'lifetime-sec': 3600, + u'pfs': u'Disable', + u'anti-replay-window-size': u'None', + u'lifetime-kb': 4608000, + u'idle-time': None} + self._register_local_get(URI_IPSEC_POLICY + '/123', + json=expected_policy) + + actual = self.csr.get_request(location, full_url=True) + self.assertEqual(requests.codes.OK, self.csr.status) + self.assertEqual(expected_policy, actual) + + def test_create_ipsec_policy_with_uuid(self): + """Create IPSec policy using UUID for id.""" + # Override normal POST response w/one that has a different policy ID + self._helper_register_ipsec_policy_post(dummy_policy_id) + policy_info = { + u'policy-id': u'%s' % dummy_policy_id, + u'protection-suite': { + u'esp-encryption': u'esp-256-aes', + u'esp-authentication': u'esp-sha-hmac', + u'ah': u'ah-sha-hmac', + }, + u'lifetime-sec': 120, + u'pfs': u'group5', + u'anti-replay-window-size': u'disable' + } + location = self.csr.create_ipsec_policy(policy_info) + self.assertEqual(requests.codes.CREATED, self.csr.status) + self.assertIn(URI_IPSEC_POLICY_ID % dummy_policy_id, location) + + # Check the hard-coded items that get set as well... + expected_policy = {u'kind': u'object#ipsec-policy', + u'mode': u'tunnel', + u'lifetime-kb': 4608000, + u'idle-time': None} + expected_policy.update(policy_info) + # CSR will respond with capitalized value + expected_policy[u'anti-replay-window-size'] = u'Disable' + self._register_local_get(URI_IPSEC_POLICY_ID % dummy_policy_id, + json=expected_policy) + actual = self.csr.get_request(location, full_url=True) + self.assertEqual(requests.codes.OK, self.csr.status) + self.assertEqual(expected_policy, actual) + + def test_create_ipsec_policy_without_ah(self): + """Create IPSec policy.""" + policy_info = { + u'policy-id': u'123', + u'protection-suite': { + u'esp-encryption': u'esp-aes', + u'esp-authentication': u'esp-sha-hmac', + }, + u'lifetime-sec': 120, + u'pfs': u'group5', + u'anti-replay-window-size': u'128' + } + location = self.csr.create_ipsec_policy(policy_info) + self.assertEqual(requests.codes.CREATED, self.csr.status) + self.assertIn(URI_IPSEC_POLICY_ID % '123', location) + + # Check the hard-coded items that get set as well... + self._helper_register_ipsec_policy_get( + override={u'anti-replay-window-size': u'128', + u'protection-suite': { + u'esp-encryption': u'esp-aes', + u'esp-authentication': u'esp-sha-hmac'}}) + + actual = self.csr.get_request(location, full_url=True) + self.assertEqual(requests.codes.OK, self.csr.status) + expected_policy = {u'kind': u'object#ipsec-policy', + u'mode': u'tunnel', + u'lifetime-kb': 4608000, + u'idle-time': None} + expected_policy.update(policy_info) + self.assertEqual(expected_policy, actual) + + def test_invalid_ipsec_policy_lifetime(self): + """Failure test of IPSec policy with unsupported lifetime.""" + # Override normal POST response with one that indicates bad request + self.requests.register_uri('POST', + LOCAL_URL + URI_IPSEC_POLICY, + status_code=requests.codes.BAD_REQUEST) + policy_info = { + u'policy-id': u'123', + u'protection-suite': { + u'esp-encryption': u'esp-aes', + u'esp-authentication': u'esp-sha-hmac', + u'ah': u'ah-sha-hmac', + }, + u'lifetime-sec': 119, + u'pfs': u'group5', + u'anti-replay-window-size': u'128' + } + self.csr.create_ipsec_policy(policy_info) + self.assertEqual(requests.codes.BAD_REQUEST, self.csr.status) + + def test_create_ipsec_policy_with_invalid_name(self): + """Failure test of creating IPSec policy with name too long.""" + # Override normal POST response with one that indicates bad request + self.requests.register_uri('POST', + LOCAL_URL + URI_IPSEC_POLICY, + status_code=requests.codes.BAD_REQUEST) + policy_info = {u'policy-id': u'policy-name-is-too-long-32-chars'} + self.csr.create_ipsec_policy(policy_info) + self.assertEqual(requests.codes.BAD_REQUEST, self.csr.status) + + +class TestCsrRestPreSharedKeyCreate(CiscoCsrBaseTestCase): + + """Test Pre-shared key (PSK) create REST requests.""" + + def setUp(self, host='localhost', tunnel_ip='10.10.10.10', timeout=None): + """Set up for each test in this suite. + + Each test case will have a normal authentication and post mock + response registered, although the test may replace them, if needed. + """ + super(TestCsrRestPreSharedKeyCreate, self).setUp(host, + tunnel_ip, + timeout) + self._helper_register_auth_request() + self._helper_register_psk_post(5) + + def _helper_register_psk_get(self, override=None): + content = {u'kind': u'object#ike-keyring', + u'keyring-name': u'5', + u'pre-shared-key-list': [ + {u'key': u'super-secret', + u'encrypted': False, + u'peer-address': u'10.10.10.20 255.255.255.0'} + ]} + if override: + content.update(override) + self._register_local_get(URI_PSK_ID % '5', json=content) + + def test_create_delete_pre_shared_key(self): + """Create and then delete a keyring entry for pre-shared key.""" + psk_info = {u'keyring-name': u'5', + u'pre-shared-key-list': [ + {u'key': u'super-secret', + u'encrypted': False, + u'peer-address': u'10.10.10.20/24'} + ]} + location = self.csr.create_pre_shared_key(psk_info) + self.assertEqual(requests.codes.CREATED, self.csr.status) + self.assertIn(URI_PSK_ID % '5', location) + + # Check the hard-coded items that get set as well... + self._helper_register_psk_get() + content = self.csr.get_request(location, full_url=True) + self.assertEqual(requests.codes.OK, self.csr.status) + expected_policy = {u'kind': u'object#ike-keyring'} + expected_policy.update(psk_info) + # Note: the peer CIDR is returned as an IP and mask + expected_policy[u'pre-shared-key-list'][0][u'peer-address'] = ( + u'10.10.10.20 255.255.255.0') + self.assertEqual(expected_policy, content) + + # Now delete and verify pre-shared key is gone + self._register_local_delete(URI_PSK, 5) + self._register_local_get_not_found(URI_PSK, 5) + + self.csr.delete_pre_shared_key('5') + self.assertEqual(requests.codes.NO_CONTENT, self.csr.status) + content = self.csr.get_request(location, full_url=True) + self.assertEqual(requests.codes.NOT_FOUND, self.csr.status) + + def test_create_pre_shared_key_with_fqdn_peer(self): + """Create pre-shared key using FQDN for peer address.""" + psk_info = {u'keyring-name': u'5', + u'pre-shared-key-list': [ + {u'key': u'super-secret', + u'encrypted': False, + u'peer-address': u'cisco.com'} + ]} + location = self.csr.create_pre_shared_key(psk_info) + self.assertEqual(requests.codes.CREATED, self.csr.status) + self.assertIn(URI_PSK_ID % '5', location) + + # Check the hard-coded items that get set as well... + self._helper_register_psk_get( + override={u'pre-shared-key-list': [ + {u'key': u'super-secret', + u'encrypted': False, + u'peer-address': u'cisco.com'} + ]} + ) + content = self.csr.get_request(location, full_url=True) + self.assertEqual(requests.codes.OK, self.csr.status) + expected_policy = {u'kind': u'object#ike-keyring'} + expected_policy.update(psk_info) + self.assertEqual(expected_policy, content) + + +class TestCsrRestIPSecConnectionCreate(CiscoCsrBaseTestCase): + + """Test IPSec site-to-site connection REST requests. + + This requires us to have first created an IKE policy, IPSec policy, + and pre-shared key, so it's more of an itegration test, when used + with a real CSR (as we can't mock out these pre-conditions). + """ + + def setUp(self, host='localhost', tunnel_ip='10.10.10.10', timeout=None): + """Setup for each test in this suite. + + Each test case will have a normal authentication mock response + registered here, although they may replace it, as needed. + """ + super(TestCsrRestIPSecConnectionCreate, self).setUp(host, + tunnel_ip, + timeout) + self._helper_register_auth_request() + self.route_id = '10.1.0.0_24_GigabitEthernet1' + + def _make_psk_for_test(self): + psk_id = generate_pre_shared_key_id() + self._remove_resource_for_test(self.csr.delete_pre_shared_key, + psk_id) + self._helper_register_psk_post(psk_id) + psk_info = {u'keyring-name': u'%d' % psk_id, + u'pre-shared-key-list': [ + {u'key': u'super-secret', + u'encrypted': False, + u'peer-address': u'10.10.10.20/24'} + ]} + self.csr.create_pre_shared_key(psk_info) + if self.csr.status != requests.codes.CREATED: + self.fail("Unable to create PSK for test case") + self.addCleanup(self._remove_resource_for_test, + self.csr.delete_pre_shared_key, psk_id) + return psk_id + + def _make_ike_policy_for_test(self): + policy_id = generate_ike_policy_id() + self._remove_resource_for_test(self.csr.delete_ike_policy, + policy_id) + self._helper_register_ike_policy_post(policy_id) + policy_info = {u'priority-id': u'%d' % policy_id, + u'encryption': u'aes', + u'hash': u'sha', + u'dhGroup': 5, + u'lifetime': 3600} + self.csr.create_ike_policy(policy_info) + if self.csr.status != requests.codes.CREATED: + self.fail("Unable to create IKE policy for test case") + self.addCleanup(self._remove_resource_for_test, + self.csr.delete_ike_policy, policy_id) + return policy_id + + def _make_ipsec_policy_for_test(self): + policy_id = generate_ipsec_policy_id() + self._remove_resource_for_test(self.csr.delete_ipsec_policy, + policy_id) + self._helper_register_ipsec_policy_post(policy_id) + policy_info = { + u'policy-id': u'%d' % policy_id, + u'protection-suite': { + u'esp-encryption': u'esp-aes', + u'esp-authentication': u'esp-sha-hmac', + u'ah': u'ah-sha-hmac', + }, + u'lifetime-sec': 120, + u'pfs': u'group5', + u'anti-replay-window-size': u'disable' + } + self.csr.create_ipsec_policy(policy_info) + if self.csr.status != requests.codes.CREATED: + self.fail("Unable to create IPSec policy for test case") + self.addCleanup(self._remove_resource_for_test, + self.csr.delete_ipsec_policy, policy_id) + return policy_id + + def _remove_resource_for_test(self, delete_resource, resource_id): + self._register_local_delete_by_id(resource_id) + delete_resource(resource_id) + + def _prepare_for_site_conn_create(self, skip_psk=False, skip_ike=False, + skip_ipsec=False): + """Create the policies and PSK so can then create site conn.""" + if not skip_psk: + ike_policy_id = self._make_psk_for_test() + else: + ike_policy_id = generate_ike_policy_id() + if not skip_ike: + self._make_ike_policy_for_test() + if not skip_ipsec: + ipsec_policy_id = self._make_ipsec_policy_for_test() + else: + ipsec_policy_id = generate_ipsec_policy_id() + # Note: Use same ID number for tunnel and IPSec policy, so that when + # GET tunnel info, the mocks can infer the IPSec policy ID from the + # tunnel number. + return (ike_policy_id, ipsec_policy_id, ipsec_policy_id) + + def _helper_register_ipsec_conn_get(self, tunnel, override=None): + # Use same number, to allow mock to generate IPSec policy ID + ipsec_policy_id = tunnel[6:] + content = {u'kind': u'object#vpn-site-to-site', + u'vpn-interface-name': u'%s' % tunnel, + u'ip-version': u'ipv4', + u'vpn-type': u'site-to-site', + u'ipsec-policy-id': u'%s' % ipsec_policy_id, + u'ike-profile-id': None, + u'mtu': 1500, + u'local-device': { + u'ip-address': '10.3.0.1/24', + u'tunnel-ip-address': '10.10.10.10' + }, + u'remote-device': { + u'tunnel-ip-address': '10.10.10.20' + }} + if override: + content.update(override) + self._register_local_get(URI_IPSEC_CONN_ID % tunnel, json=content) + + def test_create_delete_ipsec_connection(self): + """Create and then delete an IPSec connection.""" + ike_policy_id, ipsec_policy_id, tunnel_id = ( + self._prepare_for_site_conn_create()) + tunnel_name = u'Tunnel%s' % tunnel_id + self._helper_register_tunnel_post(tunnel_name) + self._register_local_post(URI_ROUTES, self.route_id) + connection_info = { + u'vpn-interface-name': tunnel_name, + u'ipsec-policy-id': u'%d' % ipsec_policy_id, + u'mtu': 1500, + u'local-device': {u'ip-address': u'10.3.0.1/24', + u'tunnel-ip-address': u'10.10.10.10'}, + u'remote-device': {u'tunnel-ip-address': u'10.10.10.20'} + } + expected_connection = {u'kind': u'object#vpn-site-to-site', + u'ike-profile-id': None, + u'vpn-type': u'site-to-site', + u'mtu': 1500, + u'ip-version': u'ipv4'} + expected_connection.update(connection_info) + location = self.csr.create_ipsec_connection(connection_info) + self.addCleanup(self._remove_resource_for_test, + self.csr.delete_ipsec_connection, + tunnel_name) + self.assertEqual(requests.codes.CREATED, self.csr.status) + self.assertIn(URI_IPSEC_CONN_ID % tunnel_name, location) + + # Check the hard-coded items that get set as well... + self._helper_register_ipsec_conn_get(tunnel_name) + content = self.csr.get_request(location, full_url=True) + self.assertEqual(requests.codes.OK, self.csr.status) + self.assertEqual(expected_connection, content) + + # Now delete and verify that site-to-site connection is gone + self._register_local_delete_by_id(tunnel_name) + self._register_local_delete_by_id(ipsec_policy_id) + self._register_local_delete_by_id(ike_policy_id) + self._register_local_get_not_found(URI_IPSEC_CONN, + tunnel_name) + # Only delete connection. Cleanup will take care of prerequisites + self.csr.delete_ipsec_connection(tunnel_name) + self.assertEqual(requests.codes.NO_CONTENT, self.csr.status) + content = self.csr.get_request(location, full_url=True) + self.assertEqual(requests.codes.NOT_FOUND, self.csr.status) + + def test_create_ipsec_connection_with_no_tunnel_subnet(self): + """Create an IPSec connection without an IP address on tunnel.""" + _, ipsec_policy_id, tunnel_id = ( + self._prepare_for_site_conn_create()) + tunnel_name = u'Tunnel%s' % tunnel_id + self._helper_register_tunnel_post(tunnel_name) + self._register_local_post(URI_ROUTES, self.route_id) + connection_info = { + u'vpn-interface-name': tunnel_name, + u'ipsec-policy-id': u'%d' % ipsec_policy_id, + u'local-device': {u'ip-address': u'GigabitEthernet3', + u'tunnel-ip-address': u'10.10.10.10'}, + u'remote-device': {u'tunnel-ip-address': u'10.10.10.20'} + } + expected_connection = {u'kind': u'object#vpn-site-to-site', + u'ike-profile-id': None, + u'vpn-type': u'site-to-site', + u'mtu': 1500, + u'ip-version': u'ipv4'} + expected_connection.update(connection_info) + location = self.csr.create_ipsec_connection(connection_info) + self.addCleanup(self._remove_resource_for_test, + self.csr.delete_ipsec_connection, + tunnel_name) + self.assertEqual(requests.codes.CREATED, self.csr.status) + self.assertIn('vpn-svc/site-to-site/' + tunnel_name, location) + + # Check the hard-coded items that get set as well... + self._helper_register_ipsec_conn_get(tunnel_name, override={ + u'local-device': { + u'ip-address': u'GigabitEthernet3', + u'tunnel-ip-address': u'10.10.10.10' + }}) + content = self.csr.get_request(location, full_url=True) + self.assertEqual(requests.codes.OK, self.csr.status) + self.assertEqual(expected_connection, content) + + def test_create_ipsec_connection_no_pre_shared_key(self): + """Test of connection create without associated pre-shared key. + + The CSR will create the connection, but will not be able to pass + traffic without the pre-shared key. + """ + + _, ipsec_policy_id, tunnel_id = ( + self._prepare_for_site_conn_create(skip_psk=True)) + tunnel_name = u'Tunnel%s' % tunnel_id + self._helper_register_tunnel_post(tunnel_name) + self._register_local_post(URI_ROUTES, self.route_id) + connection_info = { + u'vpn-interface-name': tunnel_name, + u'ipsec-policy-id': u'%d' % ipsec_policy_id, + u'mtu': 1500, + u'local-device': {u'ip-address': u'10.3.0.1/24', + u'tunnel-ip-address': u'10.10.10.10'}, + u'remote-device': {u'tunnel-ip-address': u'10.10.10.20'} + } + expected_connection = {u'kind': u'object#vpn-site-to-site', + u'ike-profile-id': None, + u'vpn-type': u'site-to-site', + u'ip-version': u'ipv4'} + expected_connection.update(connection_info) + location = self.csr.create_ipsec_connection(connection_info) + self.addCleanup(self._remove_resource_for_test, + self.csr.delete_ipsec_connection, + tunnel_name) + self.assertEqual(requests.codes.CREATED, self.csr.status) + self.assertIn(URI_IPSEC_CONN_ID % tunnel_name, location) + + # Check the hard-coded items that get set as well... + self._helper_register_ipsec_conn_get(tunnel_name) + content = self.csr.get_request(location, full_url=True) + self.assertEqual(requests.codes.OK, self.csr.status) + self.assertEqual(expected_connection, content) + + def test_create_ipsec_connection_with_default_ike_policy(self): + """Test of connection create without IKE policy (uses default). + + Without an IKE policy, the CSR will use a built-in default IKE + policy setting for the connection. + """ + + _, ipsec_policy_id, tunnel_id = ( + self._prepare_for_site_conn_create(skip_ike=True)) + tunnel_name = u'Tunnel%s' % tunnel_id + self._helper_register_tunnel_post(tunnel_name) + self._register_local_post(URI_ROUTES, self.route_id) + connection_info = { + u'vpn-interface-name': tunnel_name, + u'ipsec-policy-id': u'%d' % ipsec_policy_id, + u'mtu': 1500, + u'local-device': {u'ip-address': u'10.3.0.1/24', + u'tunnel-ip-address': u'10.10.10.10'}, + u'remote-device': {u'tunnel-ip-address': u'10.10.10.20'} + } + expected_connection = {u'kind': u'object#vpn-site-to-site', + u'ike-profile-id': None, + u'vpn-type': u'site-to-site', + u'ip-version': u'ipv4'} + expected_connection.update(connection_info) + location = self.csr.create_ipsec_connection(connection_info) + self.addCleanup(self._remove_resource_for_test, + self.csr.delete_ipsec_connection, + tunnel_name) + self.assertEqual(requests.codes.CREATED, self.csr.status) + self.assertIn(URI_IPSEC_CONN_ID % tunnel_name, location) + + # Check the hard-coded items that get set as well... + self._helper_register_ipsec_conn_get(tunnel_name) + content = self.csr.get_request(location, full_url=True) + self.assertEqual(requests.codes.OK, self.csr.status) + self.assertEqual(expected_connection, content) + + def test_set_ipsec_connection_admin_state_changes(self): + """Create IPSec connection in admin down state.""" + _, ipsec_policy_id, tunnel_id = ( + self._prepare_for_site_conn_create()) + tunnel_name = u'Tunnel%s' % tunnel_id + self._helper_register_tunnel_post(tunnel_name) + self._register_local_post(URI_ROUTES, self.route_id) + connection_info = { + u'vpn-interface-name': tunnel_name, + u'ipsec-policy-id': u'%d' % ipsec_policy_id, + u'mtu': 1500, + u'local-device': {u'ip-address': u'10.3.0.1/24', + u'tunnel-ip-address': u'10.10.10.10'}, + u'remote-device': {u'tunnel-ip-address': u'10.10.10.20'} + } + location = self.csr.create_ipsec_connection(connection_info) + self.addCleanup(self._remove_resource_for_test, + self.csr.delete_ipsec_connection, + tunnel_name) + self.assertEqual(requests.codes.CREATED, self.csr.status) + self.assertIn(URI_IPSEC_CONN_ID % tunnel_name, location) + + state_url = location + "/state" + state_uri = URI_IPSEC_CONN_ID % tunnel_name + '/state' + # Note: When created, the tunnel will be in admin 'up' state + # Note: Line protocol state will be down, unless have an active conn. + expected_state = {u'kind': u'object#vpn-site-to-site-state', + u'vpn-interface-name': tunnel_name, + u'line-protocol-state': u'down', + u'enabled': False} + self._register_local_put(URI_IPSEC_CONN_ID % tunnel_name, 'state') + self.csr.set_ipsec_connection_state(tunnel_name, admin_up=False) + self.assertEqual(requests.codes.NO_CONTENT, self.csr.status) + + self._register_local_get(state_uri, json=expected_state) + content = self.csr.get_request(state_url, full_url=True) + self.assertEqual(requests.codes.OK, self.csr.status) + self.assertEqual(expected_state, content) + + self.csr.set_ipsec_connection_state(tunnel_name, admin_up=True) + self.assertEqual(requests.codes.NO_CONTENT, self.csr.status) + expected_state = {u'kind': u'object#vpn-site-to-site-state', + u'vpn-interface-name': tunnel_name, + u'line-protocol-state': u'down', + u'enabled': True} + self._register_local_get(state_uri, json=expected_state) + content = self.csr.get_request(state_url, full_url=True) + self.assertEqual(requests.codes.OK, self.csr.status) + self.assertEqual(expected_state, content) + + def test_create_ipsec_connection_missing_ipsec_policy(self): + """Negative test of connection create without IPSec policy.""" + _, ipsec_policy_id, tunnel_id = ( + self._prepare_for_site_conn_create(skip_ipsec=True)) + tunnel_name = u'Tunnel%s' % tunnel_id + self._register_local_post(URI_IPSEC_CONN, tunnel_name, + result_code=requests.codes.BAD_REQUEST) + connection_info = { + u'vpn-interface-name': tunnel_name, + u'ipsec-policy-id': u'%d' % ipsec_policy_id, + u'local-device': {u'ip-address': u'10.3.0.1/24', + u'tunnel-ip-address': u'10.10.10.10'}, + u'remote-device': {u'tunnel-ip-address': u'10.10.10.20'} + } + self.csr.create_ipsec_connection(connection_info) + self.addCleanup(self._remove_resource_for_test, + self.csr.delete_ipsec_connection, + 'Tunnel%d' % tunnel_id) + self.assertEqual(requests.codes.BAD_REQUEST, self.csr.status) + + def _determine_conflicting_ip(self): + content = {u'kind': u'object#interface', + u'subnet-mask': u'255.255.255.0', + u'ip-address': u'10.5.0.2'} + self._register_local_get('interfaces/GigabitEthernet3', json=content) + details = self.csr.get_request('interfaces/GigabitEthernet3') + if self.csr.status != requests.codes.OK: + self.fail("Unable to obtain interface GigabitEthernet3's IP") + if_ip = details.get('ip-address') + if not if_ip: + self.fail("No IP address for GigabitEthernet3 interface") + return '.'.join(if_ip.split('.')[:3]) + '.10' + + def test_create_ipsec_connection_conficting_tunnel_ip(self): + """Negative test of connection create with conflicting tunnel IP. + + Find out the IP of a local interface (GigabitEthernet3) and create an + IP that is on the same subnet. Note: this interface needs to be up. + """ + + conflicting_ip = self._determine_conflicting_ip() + _, ipsec_policy_id, tunnel_id = ( + self._prepare_for_site_conn_create()) + tunnel_name = u'Tunnel%s' % tunnel_id + self._register_local_post(URI_IPSEC_CONN, tunnel_name, + result_code=requests.codes.BAD_REQUEST) + connection_info = { + u'vpn-interface-name': tunnel_name, + u'ipsec-policy-id': u'%d' % ipsec_policy_id, + u'local-device': {u'ip-address': u'%s/24' % conflicting_ip, + u'tunnel-ip-address': u'10.10.10.10'}, + u'remote-device': {u'tunnel-ip-address': u'10.10.10.20'} + } + self.csr.create_ipsec_connection(connection_info) + self.addCleanup(self._remove_resource_for_test, + self.csr.delete_ipsec_connection, + tunnel_name) + self.assertEqual(requests.codes.BAD_REQUEST, self.csr.status) + + def test_create_ipsec_connection_with_max_mtu(self): + """Create an IPSec connection with max MTU value.""" + _, ipsec_policy_id, tunnel_id = ( + self._prepare_for_site_conn_create()) + tunnel_name = u'Tunnel%s' % tunnel_id + self._helper_register_tunnel_post(tunnel_name) + self._register_local_post(URI_ROUTES, self.route_id) + connection_info = { + u'vpn-interface-name': tunnel_name, + u'ipsec-policy-id': u'%d' % ipsec_policy_id, + u'mtu': 9192, + u'local-device': {u'ip-address': u'10.3.0.1/24', + u'tunnel-ip-address': u'10.10.10.10'}, + u'remote-device': {u'tunnel-ip-address': u'10.10.10.20'} + } + expected_connection = {u'kind': u'object#vpn-site-to-site', + u'ike-profile-id': None, + u'vpn-type': u'site-to-site', + u'ip-version': u'ipv4'} + expected_connection.update(connection_info) + location = self.csr.create_ipsec_connection(connection_info) + self.addCleanup(self._remove_resource_for_test, + self.csr.delete_ipsec_connection, + tunnel_name) + self.assertEqual(requests.codes.CREATED, self.csr.status) + self.assertIn(URI_IPSEC_CONN_ID % tunnel_name, location) + + # Check the hard-coded items that get set as well... + self._helper_register_ipsec_conn_get(tunnel_name, override={ + u'mtu': 9192}) + content = self.csr.get_request(location, full_url=True) + self.assertEqual(requests.codes.OK, self.csr.status) + self.assertEqual(expected_connection, content) + + def test_create_ipsec_connection_with_bad_mtu(self): + """Negative test of connection create with unsupported MTU value.""" + _, ipsec_policy_id, tunnel_id = ( + self._prepare_for_site_conn_create()) + tunnel_name = u'Tunnel%s' % tunnel_id + self._register_local_post(URI_IPSEC_CONN, tunnel_name, + result_code=requests.codes.BAD_REQUEST) + connection_info = { + u'vpn-interface-name': tunnel_name, + u'ipsec-policy-id': u'%d' % ipsec_policy_id, + u'mtu': 9193, + u'local-device': {u'ip-address': u'10.3.0.1/24', + u'tunnel-ip-address': u'10.10.10.10'}, + u'remote-device': {u'tunnel-ip-address': u'10.10.10.20'} + } + self.csr.create_ipsec_connection(connection_info) + self.addCleanup(self._remove_resource_for_test, + self.csr.delete_ipsec_connection, + tunnel_name) + self.assertEqual(requests.codes.BAD_REQUEST, self.csr.status) + + def test_status_when_no_tunnels_exist(self): + """Get status, when there are no tunnels.""" + content = {u'kind': u'collection#vpn-active-sessions', + u'items': []} + self._register_local_get(URI_SESSIONS, json=content) + tunnels = self.csr.read_tunnel_statuses() + self.assertEqual(requests.codes.OK, self.csr.status) + self.assertEqual([], tunnels) + + def test_status_for_one_tunnel(self): + """Get status of one tunnel.""" + # Create the IPsec site-to-site connection first + _, ipsec_policy_id, tunnel_id = ( + self._prepare_for_site_conn_create()) + tunnel_name = u'Tunnel%s' % tunnel_id + self._helper_register_tunnel_post(tunnel_name) + self._register_local_post(URI_ROUTES, self.route_id) + connection_info = { + u'vpn-interface-name': tunnel_name, + u'ipsec-policy-id': u'%d' % ipsec_policy_id, + u'local-device': {u'ip-address': u'10.3.0.1/24', + u'tunnel-ip-address': u'10.10.10.10'}, + u'remote-device': {u'tunnel-ip-address': u'10.10.10.20'} + } + location = self.csr.create_ipsec_connection(connection_info) + self.addCleanup(self._remove_resource_for_test, + self.csr.delete_ipsec_connection, + tunnel_name) + self.assertEqual(requests.codes.CREATED, self.csr.status) + self.assertIn(URI_IPSEC_CONN_ID % tunnel_name, location) + + # Now, check the status + content = {u'kind': u'collection#vpn-active-sessions', + u'items': [{u'status': u'DOWN-NEGOTIATING', + u'vpn-interface-name': tunnel_name}, ]} + self._register_local_get(URI_SESSIONS, json=content) + self._helper_register_ipsec_conn_get(tunnel_name) + tunnels = self.csr.read_tunnel_statuses() + self.assertEqual(requests.codes.OK, self.csr.status) + self.assertEqual([(tunnel_name, u'DOWN-NEGOTIATING'), ], tunnels) + + +class TestCsrRestIkeKeepaliveCreate(CiscoCsrBaseTestCase): + + """Test IKE keepalive REST requests. + + Note: On the Cisco CSR, the IKE keepalive for v1 is a global configuration + that applies to all VPN tunnels to specify Dead Peer Detection information. + As a result, this REST API is not used in the OpenStack device driver, and + the keepalive will default to zero (disabled). + """ + + def _save_dpd_info(self): + details = self.csr.get_request(URI_KEEPALIVE) + if self.csr.status == requests.codes.OK: + self.dpd = details + self.addCleanup(self._restore_dpd_info) + elif self.csr.status != requests.codes.NOT_FOUND: + self.fail("Unable to save original DPD info") + + def _restore_dpd_info(self): + payload = {'interval': self.dpd['interval'], + 'retry': self.dpd['retry']} + self.csr.put_request(URI_KEEPALIVE, payload=payload) + if self.csr.status != requests.codes.NO_CONTENT: + self.fail("Unable to restore DPD info after test") + + def setUp(self, host='localhost', tunnel_ip='10.10.10.10', timeout=None): + """Set up for each test in this suite. + + Each test case will have a normal authentication, get, and put mock + responses registered, although the test may replace them, if needed. + Dead Peer Detection settions will be saved for each test, and + restored afterwards. + """ + super(TestCsrRestIkeKeepaliveCreate, self).setUp(host, + tunnel_ip, + timeout) + self._helper_register_auth_request() + self._helper_register_keepalive_get() + self._register_local_put('vpn-svc/ike', 'keepalive') + self._save_dpd_info() + self.csr.token = None + + def _helper_register_keepalive_get(self, override=None): + content = {u'interval': 60, + u'retry': 4, + u'periodic': True} + if override: + content.update(override) + self._register_local_get(URI_KEEPALIVE, json=content) + + def test_configure_ike_keepalive(self): + """Set IKE keep-alive (aka Dead Peer Detection) for the CSR.""" + keepalive_info = {'interval': 60, 'retry': 4} + self.csr.configure_ike_keepalive(keepalive_info) + self.assertEqual(requests.codes.NO_CONTENT, self.csr.status) + content = self.csr.get_request(URI_KEEPALIVE) + self.assertEqual(requests.codes.OK, self.csr.status) + expected = {'periodic': False} + expected.update(keepalive_info) + self.assertDictSupersetOf(expected, content) + + def test_disable_ike_keepalive(self): + """Disable IKE keep-alive (aka Dead Peer Detection) for the CSR.""" + keepalive_info = {'interval': 0, 'retry': 4} + self.csr.configure_ike_keepalive(keepalive_info) + self.assertEqual(requests.codes.NO_CONTENT, self.csr.status) + + +class TestCsrRestStaticRoute(CiscoCsrBaseTestCase): + + """Test static route REST requests. + + A static route is added for the peer's private network. Would create + a route for each of the peer CIDRs specified for the VPN connection. + """ + + def setUp(self, host='localhost', tunnel_ip='10.10.10.10', timeout=None): + """Set up for each test in this suite. + + Each test case will have a normal authentication mock response + registered, although the test may replace it, if needed. + """ + super(TestCsrRestStaticRoute, self).setUp(host, tunnel_ip, timeout) + self._helper_register_auth_request() + + def test_create_delete_static_route(self): + """Create and then delete a static route for the tunnel.""" + expected_id = '10.1.0.0_24_GigabitEthernet1' + self._register_local_post(URI_ROUTES, resource_id=expected_id) + cidr = u'10.1.0.0/24' + interface = u'GigabitEthernet1' + route_info = {u'destination-network': cidr, + u'outgoing-interface': interface} + location = self.csr.create_static_route(route_info) + self.assertEqual(requests.codes.CREATED, self.csr.status) + self.assertIn(URI_ROUTES_ID % expected_id, location) + + # Check the hard-coded items that get set as well... + expected_route = {u'destination-network': u'10.1.0.0/24', + u'kind': u'object#static-route', + u'next-hop-router': None, + u'outgoing-interface': u'GigabitEthernet1', + u'admin-distance': 1} + self._register_local_get(URI_ROUTES_ID % expected_id, + json=expected_route) + content = self.csr.get_request(location, full_url=True) + self.assertEqual(requests.codes.OK, self.csr.status) + self.assertEqual(expected_route, content) + + # Now delete and verify that static route is gone + self._register_local_delete(URI_ROUTES, expected_id) + self._register_local_get_not_found(URI_ROUTES, expected_id) + route_id = csr_client.make_route_id(cidr, interface) + self.csr.delete_static_route(route_id) + self.assertEqual(requests.codes.NO_CONTENT, self.csr.status) + content = self.csr.get_request(location, full_url=True) + self.assertEqual(requests.codes.NOT_FOUND, self.csr.status) From f92d1300e1aca68b39b927282af038acc68c5013 Mon Sep 17 00:00:00 2001 From: armando-migliaccio Date: Thu, 18 Sep 2014 11:00:12 -0700 Subject: [PATCH 015/128] Fix 500 error on retrieving metadata by invalid URI An invalid URI should return a BadRequest error rather than making the metadata proxy bomb out. Closes-bug: #1371160 Change-Id: Ifb495f9e8929062a0c24d090c3e702109a38803a --- neutron/agent/metadata/agent.py | 2 + neutron/agent/metadata/namespace_proxy.py | 2 + neutron/tests/unit/test_metadata_agent.py | 4 ++ .../unit/test_metadata_namespace_proxy.py | 46 ++++++------------- 4 files changed, 23 insertions(+), 31 deletions(-) diff --git a/neutron/agent/metadata/agent.py b/neutron/agent/metadata/agent.py index 5a943fd1356..fc2bfb268f4 100644 --- a/neutron/agent/metadata/agent.py +++ b/neutron/agent/metadata/agent.py @@ -232,6 +232,8 @@ class MetadataProxyHandler(object): ) LOG.warn(msg) return webob.exc.HTTPForbidden() + elif resp.status == 400: + return webob.exc.HTTPBadRequest() elif resp.status == 404: return webob.exc.HTTPNotFound() elif resp.status == 409: diff --git a/neutron/agent/metadata/namespace_proxy.py b/neutron/agent/metadata/namespace_proxy.py index 1c2f9cb0f0f..cfac4c4c3fb 100644 --- a/neutron/agent/metadata/namespace_proxy.py +++ b/neutron/agent/metadata/namespace_proxy.py @@ -110,6 +110,8 @@ class NetworkMetadataProxyHandler(object): response.headers['Content-Type'] = resp['content-type'] response.body = content return response + elif resp.status == 400: + return webob.exc.HTTPBadRequest() elif resp.status == 404: return webob.exc.HTTPNotFound() elif resp.status == 409: diff --git a/neutron/tests/unit/test_metadata_agent.py b/neutron/tests/unit/test_metadata_agent.py index f5446e933ca..e48e770f5bc 100644 --- a/neutron/tests/unit/test_metadata_agent.py +++ b/neutron/tests/unit/test_metadata_agent.py @@ -433,6 +433,10 @@ class TestMetadataProxyHandlerCache(base.BaseTestCase): self.assertEqual(response.content_type, "text/plain") self.assertEqual(response.body, 'content') + def test_proxy_request_400(self): + self.assertIsInstance(self._proxy_request_test_helper(400), + webob.exc.HTTPBadRequest) + def test_proxy_request_403(self): self.assertIsInstance(self._proxy_request_test_helper(403), webob.exc.HTTPForbidden) diff --git a/neutron/tests/unit/test_metadata_namespace_proxy.py b/neutron/tests/unit/test_metadata_namespace_proxy.py index 6f90d335f22..3ffbd9921fa 100644 --- a/neutron/tests/unit/test_metadata_namespace_proxy.py +++ b/neutron/tests/unit/test_metadata_namespace_proxy.py @@ -148,15 +148,15 @@ class TestNetworkMetadataProxyHandler(base.BaseTestCase): 'application/json') self.assertEqual(retval.body, '{}') - def test_proxy_request_network_404(self): + def _test_proxy_request_network_4xx(self, status, method, expected): self.handler.network_id = 'network_id' - resp = mock.Mock(status=404) + resp = mock.Mock(status=status) with mock.patch('httplib2.Http') as mock_http: mock_http.return_value.request.return_value = (resp, '') retval = self.handler._proxy_request('192.168.1.1', - 'GET', + method, '/latest/meta-data', '', '') @@ -164,7 +164,7 @@ class TestNetworkMetadataProxyHandler(base.BaseTestCase): mock_http.assert_has_calls([ mock.call().request( 'http://169.254.169.254/latest/meta-data', - method='GET', + method=method, headers={ 'X-Forwarded-For': '192.168.1.1', 'X-Neutron-Network-ID': 'network_id' @@ -174,35 +174,19 @@ class TestNetworkMetadataProxyHandler(base.BaseTestCase): )] ) - self.assertIsInstance(retval, webob.exc.HTTPNotFound) + self.assertIsInstance(retval, expected) + + def test_proxy_request_network_400(self): + self._test_proxy_request_network_4xx( + 400, 'GET', webob.exc.HTTPBadRequest) + + def test_proxy_request_network_404(self): + self._test_proxy_request_network_4xx( + 404, 'GET', webob.exc.HTTPNotFound) def test_proxy_request_network_409(self): - self.handler.network_id = 'network_id' - - resp = mock.Mock(status=409) - with mock.patch('httplib2.Http') as mock_http: - mock_http.return_value.request.return_value = (resp, '') - - retval = self.handler._proxy_request('192.168.1.1', - 'POST', - '/latest/meta-data', - '', - '') - - mock_http.assert_has_calls([ - mock.call().request( - 'http://169.254.169.254/latest/meta-data', - method='POST', - headers={ - 'X-Forwarded-For': '192.168.1.1', - 'X-Neutron-Network-ID': 'network_id' - }, - connection_type=ns_proxy.UnixDomainHTTPConnection, - body='' - )] - ) - - self.assertIsInstance(retval, webob.exc.HTTPConflict) + self._test_proxy_request_network_4xx( + 409, 'POST', webob.exc.HTTPConflict) def test_proxy_request_network_500(self): self.handler.network_id = 'network_id' From 9cd96fe116ac1d990410cb1135473bd15c1f7dce Mon Sep 17 00:00:00 2001 From: Vivekanandan Narasimhan Date: Wed, 3 Sep 2014 01:48:39 -0700 Subject: [PATCH 016/128] DVR to delete router namespaces for service ports Earlier merge that enabled LBaaS in DVR with review #114141 had not covered the removal of DVR router namespace on VIP Port deletion in ml2 plugin. Here we fix the ml2 plugin to attempt namespace removal for all dvr serviced ports. Change-Id: Ie7930ebedb12212886d45294132fefff7296e104 Closes-Bug: #1364839 --- neutron/db/l3_dvrscheduler_db.py | 14 +++--- neutron/plugins/ml2/plugin.py | 9 ++-- neutron/tests/unit/ml2/test_ml2_plugin.py | 53 ++++++++++------------- neutron/tests/unit/test_l3_schedulers.py | 6 +-- 4 files changed, 37 insertions(+), 45 deletions(-) diff --git a/neutron/db/l3_dvrscheduler_db.py b/neutron/db/l3_dvrscheduler_db.py index 2797c73a8c9..a8c9dae945d 100644 --- a/neutron/db/l3_dvrscheduler_db.py +++ b/neutron/db/l3_dvrscheduler_db.py @@ -110,7 +110,7 @@ class L3_DVRsch_db_mixin(l3agent_sch_db.L3AgentSchedulerDbMixin): break LOG.debug('DVR: dvr_update_router_addvm %s ', router_id) - def get_dvr_routers_by_vmportid(self, context, port_id): + def get_dvr_routers_by_portid(self, context, port_id): """Gets the dvr routers on vmport subnets.""" router_ids = set() port_dict = self._core_plugin.get_port(context, port_id) @@ -153,9 +153,9 @@ class L3_DVRsch_db_mixin(l3agent_sch_db.L3AgentSchedulerDbMixin): return True return False - def dvr_deletens_if_no_vm(self, context, port_id): - """Delete the DVR namespace if no VM exists.""" - router_ids = self.get_dvr_routers_by_vmportid(context, port_id) + def dvr_deletens_if_no_port(self, context, port_id): + """Delete the DVR namespace if no dvr serviced port exists.""" + router_ids = self.get_dvr_routers_by_portid(context, port_id) port_host = ml2_db.get_port_binding_host(port_id) if not router_ids: LOG.debug('No namespaces available for this DVR port %(port)s ' @@ -165,16 +165,16 @@ class L3_DVRsch_db_mixin(l3agent_sch_db.L3AgentSchedulerDbMixin): removed_router_info = [] for router_id in router_ids: subnet_ids = self.get_subnet_ids_on_router(context, router_id) - vm_exists_on_subnet = False + port_exists_on_subnet = False for subnet in subnet_ids: if self.check_ports_active_on_host_and_subnet(context, port_host, port_id, subnet): - vm_exists_on_subnet = True + port_exists_on_subnet = True break - if vm_exists_on_subnet: + if port_exists_on_subnet: continue filter_rtr = {'device_id': [router_id], 'device_owner': diff --git a/neutron/plugins/ml2/plugin.py b/neutron/plugins/ml2/plugin.py index e6a8d9040ca..80cae035ed0 100644 --- a/neutron/plugins/ml2/plugin.py +++ b/neutron/plugins/ml2/plugin.py @@ -964,7 +964,8 @@ class Ml2Plugin(db_base_plugin_v2.NeutronDbPluginV2, network = self.get_network(context, port['network_id']) mech_context = None - if port['device_owner'] == const.DEVICE_OWNER_DVR_INTERFACE: + device_owner = port['device_owner'] + if device_owner == const.DEVICE_OWNER_DVR_INTERFACE: bindings = db.get_dvr_port_bindings(context.session, id) for bind in bindings: mech_context = driver_context.DvrPortContext( @@ -973,8 +974,8 @@ class Ml2Plugin(db_base_plugin_v2.NeutronDbPluginV2, else: mech_context = driver_context.PortContext(self, context, port, network, binding) - if "compute:" in port['device_owner'] and is_dvr_enabled: - router_info = l3plugin.dvr_deletens_if_no_vm(context, id) + if is_dvr_enabled and utils.is_dvr_serviced(device_owner): + router_info = l3plugin.dvr_deletens_if_no_port(context, id) removed_routers += router_info self.mechanism_manager.delete_port_precommit(mech_context) self._delete_port_security_group_bindings(context, id) @@ -985,7 +986,7 @@ class Ml2Plugin(db_base_plugin_v2.NeutronDbPluginV2, l3plugin.dvr_vmarp_table_update(context, id, "del") LOG.debug("Calling delete_port for %(port_id)s owned by %(owner)s" - % {"port_id": id, "owner": port['device_owner']}) + % {"port_id": id, "owner": device_owner}) super(Ml2Plugin, self).delete_port(context, id) # now that we've left db transaction, we are safe to notify diff --git a/neutron/tests/unit/ml2/test_ml2_plugin.py b/neutron/tests/unit/ml2/test_ml2_plugin.py index ca0a061f946..61c00926f2a 100644 --- a/neutron/tests/unit/ml2/test_ml2_plugin.py +++ b/neutron/tests/unit/ml2/test_ml2_plugin.py @@ -177,6 +177,9 @@ class TestMl2PortsV2(test_plugin.TestPortsV2, Ml2PluginV2TestCase): self.assertTrue(utils.is_dvr_serviced( constants.DEVICE_OWNER_LOADBALANCER)) + def test_check_if_dhcp_port_serviced_by_dvr(self): + self.assertTrue(utils.is_dvr_serviced(constants.DEVICE_OWNER_DHCP)) + def test_check_if_port_not_serviced_by_dvr(self): self.assertFalse(utils.is_dvr_serviced( constants.DEVICE_OWNER_ROUTER_INTF)) @@ -205,61 +208,49 @@ class TestMl2DvrPortsV2(TestMl2PortsV2): mock.PropertyMock(return_value=extensions)) self.service_plugins = {'L3_ROUTER_NAT': self.l3plugin} - def test_delete_last_vm_port(self): - fip_set = set() - ns_to_delete = {'host': 'vmhost', 'agent_id': 'vm_l3_agent', + def _test_delete_dvr_serviced_port(self, device_owner, floating_ip=False): + ns_to_delete = {'host': 'myhost', 'agent_id': 'vm_l3_agent', 'router_id': 'my_router'} + fip_set = set() + if floating_ip: + fip_set.add(ns_to_delete['router_id']) with contextlib.nested( mock.patch.object(manager.NeutronManager, 'get_service_plugins', return_value=self.service_plugins), - self.port(do_delete=False, device_owner='compute:None'), + self.port(do_delete=False, + device_owner=device_owner), mock.patch.object(self.l3plugin, 'notify_routers_updated'), mock.patch.object(self.l3plugin, 'disassociate_floatingips', return_value=fip_set), - mock.patch.object(self.l3plugin, 'dvr_deletens_if_no_vm', + mock.patch.object(self.l3plugin, 'dvr_deletens_if_no_port', return_value=[ns_to_delete]), mock.patch.object(self.l3plugin, 'remove_router_from_l3_agent') ) as (get_service_plugin, port, notify, disassociate_floatingips, - ddinv, remove_router_from_l3_agent): + dvr_delns_ifno_port, remove_router_from_l3_agent): port_id = port['port']['id'] self.plugin.delete_port(self.context, port_id) notify.assert_has_calls([mock.call(self.context, fip_set)]) + dvr_delns_ifno_port.assert_called_once_with(self.context, + port['port']['id']) remove_router_from_l3_agent.assert_has_calls([ mock.call(self.context, ns_to_delete['agent_id'], ns_to_delete['router_id']) ]) + def test_delete_last_vm_port(self): + self._test_delete_dvr_serviced_port(device_owner='compute:None') + def test_delete_last_vm_port_with_floatingip(self): - ns_to_delete = {'host': 'vmhost', 'agent_id': 'vm_l3_agent', - 'router_id': 'my_router'} - fip_set = set([ns_to_delete['router_id']]) + self._test_delete_dvr_serviced_port(device_owner='compute:None', + floating_ip=True) - with contextlib.nested( - mock.patch.object(manager.NeutronManager, - 'get_service_plugins', - return_value=self.service_plugins), - self.port(do_delete=False, device_owner='compute:None'), - mock.patch.object(self.l3plugin, 'notify_routers_updated'), - mock.patch.object(self.l3plugin, 'disassociate_floatingips', - return_value=fip_set), - mock.patch.object(self.l3plugin, 'dvr_deletens_if_no_vm', - return_value=[ns_to_delete]), - mock.patch.object(self.l3plugin, 'remove_router_from_l3_agent') - ) as (get_service_plugins, port, notify, disassociate_floatingips, - ddinv, remove_router_from_l3_agent): - - port_id = port['port']['id'] - self.plugin.delete_port(self.context, port_id) - - notify.assert_has_calls([mock.call(self.context, fip_set)]) - remove_router_from_l3_agent.assert_has_calls([ - mock.call(self.context, ns_to_delete['agent_id'], - ns_to_delete['router_id']) - ]) + def test_delete_lbaas_vip_port(self): + self._test_delete_dvr_serviced_port( + device_owner=constants.DEVICE_OWNER_LOADBALANCER) class TestMl2PortBinding(Ml2PluginV2TestCase, diff --git a/neutron/tests/unit/test_l3_schedulers.py b/neutron/tests/unit/test_l3_schedulers.py index fdf823213b3..b3eb4485911 100644 --- a/neutron/tests/unit/test_l3_schedulers.py +++ b/neutron/tests/unit/test_l3_schedulers.py @@ -822,7 +822,7 @@ class L3DvrSchedulerTestCase(testlib_api.SqlTestCase, '.L3AgentNotifyAPI')): self.dut.dvr_update_router_addvm(self.adminContext, port) - def test_get_dvr_routers_by_vmportid(self): + def test_get_dvr_routers_by_portid(self): dvr_port = { 'id': 'dvr_port1', 'device_id': 'r1', @@ -844,8 +844,8 @@ class L3DvrSchedulerTestCase(testlib_api.SqlTestCase, '.get_port', return_value=dvr_port), mock.patch('neutron.db.db_base_plugin_v2.NeutronDbPluginV2' '.get_ports', return_value=[dvr_port])): - router_id = self.dut.get_dvr_routers_by_vmportid(self.adminContext, - dvr_port['id']) + router_id = self.dut.get_dvr_routers_by_portid(self.adminContext, + dvr_port['id']) self.assertEqual(router_id.pop(), r1['id']) def test_get_subnet_ids_on_router(self): From 271a280d0e8f86b96d24970f588184b1cfc34ef8 Mon Sep 17 00:00:00 2001 From: Divya ChanneGowda Date: Wed, 3 Sep 2014 14:59:34 -0700 Subject: [PATCH 017/128] Use dict_extend_functions to populate provider network attributes Use dict_extend_functions mechanism to handle populating additional provider network attributes into Network model in Nuage plugin. Change-Id: I72e5afe3d03ae223fcd8e75f1f4f07624c3a7daf Closes-Bug: #1362308 --- neutron/plugins/nuage/nuage_models.py | 6 +++ neutron/plugins/nuage/nuagedb.py | 1 + neutron/plugins/nuage/plugin.py | 31 ++++------- neutron/tests/unit/nuage/test_nuage_plugin.py | 53 +++++++++++++++++-- 4 files changed, 65 insertions(+), 26 deletions(-) diff --git a/neutron/plugins/nuage/nuage_models.py b/neutron/plugins/nuage/nuage_models.py index 5d30dbcb06c..59c773951ff 100644 --- a/neutron/plugins/nuage/nuage_models.py +++ b/neutron/plugins/nuage/nuage_models.py @@ -14,6 +14,7 @@ # under the License. import sqlalchemy as sa +from sqlalchemy import orm from neutron.db import model_base from neutron.db import models_v2 @@ -49,6 +50,11 @@ class ProviderNetBinding(model_base.BASEV2): physical_network = sa.Column(sa.String(64), nullable=False) vlan_id = sa.Column(sa.Integer, nullable=False) + network = orm.relationship( + models_v2.Network, + backref=orm.backref("pnetbinding", lazy='joined', + uselist=False, cascade='delete')) + class SubnetL2Domain(model_base.BASEV2): __tablename__ = 'nuage_subnet_l2dom_mapping' diff --git a/neutron/plugins/nuage/nuagedb.py b/neutron/plugins/nuage/nuagedb.py index 1fc261371db..1a3210bc237 100644 --- a/neutron/plugins/nuage/nuagedb.py +++ b/neutron/plugins/nuage/nuagedb.py @@ -203,6 +203,7 @@ def add_network_binding(session, network_id, network_type, physical_network, physical_network=physical_network, vlan_id=vlan_id) session.add(binding) + return binding def get_network_binding(session, network_id): diff --git a/neutron/plugins/nuage/plugin.py b/neutron/plugins/nuage/plugin.py index cd8c9e2d25b..c03e7725f2e 100644 --- a/neutron/plugins/nuage/plugin.py +++ b/neutron/plugins/nuage/plugin.py @@ -78,6 +78,9 @@ class NuagePlugin(db_base_plugin_v2.NeutronDbPluginV2, self.syncmanager = syncmanager.SyncManager(self.nuageclient) self._synchronization_thread() + db_base_plugin_v2.NeutronDbPluginV2.register_dict_extend_funcs( + attributes.NETWORKS, ['_extend_network_dict_provider_nuage']) + def nuageclient_init(self): server = cfg.CONF.RESTPROXY.server serverauth = cfg.CONF.RESTPROXY.serverauth @@ -392,8 +395,9 @@ class NuagePlugin(db_base_plugin_v2.NeutronDbPluginV2, subnets = self.get_subnets(context, filters=filters) return bool(routers or subnets) - def _extend_network_dict_provider(self, context, network): - binding = nuagedb.get_network_binding(context.session, network['id']) + def _extend_network_dict_provider_nuage(self, network, net_db, + net_binding=None): + binding = net_db.pnetbinding if net_db else net_binding if binding: network[pnet.NETWORK_TYPE] = binding.network_type network[pnet.PHYSICAL_NETWORK] = binding.physical_network @@ -432,6 +436,7 @@ class NuagePlugin(db_base_plugin_v2.NeutronDbPluginV2, return network_type, physical_network, segmentation_id def create_network(self, context, network): + binding = None (network_type, physical_network, vlan_id) = self._process_provider_create(context, network['network']) @@ -444,10 +449,11 @@ class NuagePlugin(db_base_plugin_v2.NeutronDbPluginV2, network) self._process_l3_create(context, net, network['network']) if network_type == 'vlan': - nuagedb.add_network_binding(context.session, net['id'], + binding = nuagedb.add_network_binding(context.session, + net['id'], network_type, physical_network, vlan_id) - self._extend_network_dict_provider(context, net) + self._extend_network_dict_provider_nuage(net, None, binding) return net def _validate_update_network(self, context, id, network): @@ -473,23 +479,6 @@ class NuagePlugin(db_base_plugin_v2.NeutronDbPluginV2, raise n_exc.NetworkInUse(net_id=id) return (is_external_set, subnet) - def get_network(self, context, net_id, fields=None): - net = super(NuagePlugin, self).get_network(context, - net_id, - None) - self._extend_network_dict_provider(context, net) - return self._fields(net, fields) - - def get_networks(self, context, filters=None, fields=None, - sorts=None, limit=None, marker=None, page_reverse=False): - nets = super(NuagePlugin, - self).get_networks(context, filters, None, sorts, - limit, marker, page_reverse) - for net in nets: - self._extend_network_dict_provider(context, net) - - return [self._fields(net, fields) for net in nets] - def update_network(self, context, id, network): pnet._raise_if_updates_provider_attributes(network['network']) with context.session.begin(subtransactions=True): diff --git a/neutron/tests/unit/nuage/test_nuage_plugin.py b/neutron/tests/unit/nuage/test_nuage_plugin.py index e9a6595e726..37c062aff7b 100644 --- a/neutron/tests/unit/nuage/test_nuage_plugin.py +++ b/neutron/tests/unit/nuage/test_nuage_plugin.py @@ -547,24 +547,24 @@ class TestNuageExtrarouteTestCase(NuagePluginV2TestCase, class TestNuageProviderNetTestCase(NuagePluginV2TestCase): def test_create_provider_network(self): - phy_net = uuidutils.generate_uuid() + phys_net = uuidutils.generate_uuid() data = {'network': {'name': 'pnet1', 'tenant_id': 'admin', pnet.NETWORK_TYPE: 'vlan', - pnet.PHYSICAL_NETWORK: phy_net, + pnet.PHYSICAL_NETWORK: phys_net, pnet.SEGMENTATION_ID: 123}} network_req = self.new_create_request('networks', data, self.fmt) net = self.deserialize(self.fmt, network_req.get_response(self.api)) self.assertEqual('vlan', net['network'][pnet.NETWORK_TYPE]) - self.assertEqual(phy_net, net['network'][pnet.PHYSICAL_NETWORK]) + self.assertEqual(phys_net, net['network'][pnet.PHYSICAL_NETWORK]) self.assertEqual(123, net['network'][pnet.SEGMENTATION_ID]) def test_create_provider_network_no_admin(self): - phy_net = uuidutils.generate_uuid() + phys_net = uuidutils.generate_uuid() data = {'network': {'name': 'pnet1', 'tenant_id': 'no_admin', pnet.NETWORK_TYPE: 'vlan', - pnet.PHYSICAL_NETWORK: phy_net, + pnet.PHYSICAL_NETWORK: phys_net, pnet.SEGMENTATION_ID: 123}} network_req = self.new_create_request('networks', data, self.fmt) network_req.environ['neutron.context'] = context.Context( @@ -572,6 +572,49 @@ class TestNuageProviderNetTestCase(NuagePluginV2TestCase): res = network_req.get_response(self.api) self.assertEqual(exc.HTTPForbidden.code, res.status_int) + def test_get_network_for_provider_network(self): + phys_net = uuidutils.generate_uuid() + data = {'network': {'name': 'pnet1', + 'tenant_id': 'admin', + pnet.NETWORK_TYPE: 'vlan', + pnet.PHYSICAL_NETWORK: phys_net, + pnet.SEGMENTATION_ID: 123}} + network_req = self.new_create_request('networks', data, self.fmt) + res = self.deserialize(self.fmt, network_req.get_response(self.api)) + + get_req = self.new_show_request('networks', res['network']['id']) + net = self.deserialize(self.fmt, get_req.get_response(self.api)) + self.assertEqual('vlan', net['network'][pnet.NETWORK_TYPE]) + self.assertEqual(phys_net, net['network'][pnet.PHYSICAL_NETWORK]) + self.assertEqual(123, net['network'][pnet.SEGMENTATION_ID]) + + def test_list_networks_for_provider_network(self): + phys_net = uuidutils.generate_uuid() + data1 = {'network': {'name': 'pnet1', + 'tenant_id': 'admin', + pnet.NETWORK_TYPE: 'vlan', + pnet.PHYSICAL_NETWORK: phys_net, + pnet.SEGMENTATION_ID: 123}} + network_req_1 = self.new_create_request('networks', data1, self.fmt) + network_req_1.get_response(self.api) + data2 = {'network': {'name': 'pnet2', + 'tenant_id': 'admin', + pnet.NETWORK_TYPE: 'vlan', + pnet.PHYSICAL_NETWORK: phys_net, + pnet.SEGMENTATION_ID: 234}} + network_req_2 = self.new_create_request('networks', data2, self.fmt) + network_req_2.get_response(self.api) + + list_req = self.new_list_request('networks') + pnets = self.deserialize(self.fmt, list_req.get_response(self.api)) + self.assertEqual(2, len(pnets['networks'])) + self.assertEqual('vlan', pnets['networks'][0][pnet.NETWORK_TYPE]) + self.assertEqual(phys_net, pnets['networks'][0][pnet.PHYSICAL_NETWORK]) + self.assertEqual(123, pnets['networks'][0][pnet.SEGMENTATION_ID]) + self.assertEqual('vlan', pnets['networks'][1][pnet.NETWORK_TYPE]) + self.assertEqual(phys_net, pnets['networks'][1][pnet.PHYSICAL_NETWORK]) + self.assertEqual(234, pnets['networks'][1][pnet.SEGMENTATION_ID]) + class TestNuageSecurityGroupTestCase(NuagePluginV2TestCase, test_sg.TestSecurityGroups): From d1f1722e0edb63c73b60c80abafa63749349cd8e Mon Sep 17 00:00:00 2001 From: YAMAMOTO Takashi Date: Mon, 22 Sep 2014 07:39:27 +0900 Subject: [PATCH 018/128] ofagent: Drop log level of tenant-triggerable events To prevent evil tenants from flooding logs. Closes-Bug: #1372196 Change-Id: I617e9fedf8a8c5e95c6067b716c83778d4d8cc7e --- neutron/plugins/ofagent/agent/arp_lib.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/neutron/plugins/ofagent/agent/arp_lib.py b/neutron/plugins/ofagent/agent/arp_lib.py index e97394dc2a3..db844b37e9c 100644 --- a/neutron/plugins/ofagent/agent/arp_lib.py +++ b/neutron/plugins/ofagent/agent/arp_lib.py @@ -148,11 +148,11 @@ class ArpLib(object): try: pkt = packet.Packet(msg.data) except Exception as e: - LOG.info(_LI("Unparsable packet: got exception %s"), e) + LOG.debug("Unparsable packet: got exception %s", e) return - LOG.info(_LI("packet-in dpid %(dpid)s in_port %(port)s pkt %(pkt)s"), - {'dpid': dpid_lib.dpid_to_str(datapath.id), - 'port': port, 'pkt': pkt}) + LOG.debug("packet-in dpid %(dpid)s in_port %(port)s pkt %(pkt)s", + {'dpid': dpid_lib.dpid_to_str(datapath.id), + 'port': port, 'pkt': pkt}) if metadata is None: LOG.info(_LI("drop non tenant packet")) @@ -160,12 +160,12 @@ class ArpLib(object): network = metadata & meta.NETWORK_MASK pkt_ethernet = pkt.get_protocol(ethernet.ethernet) if not pkt_ethernet: - LOG.info(_LI("drop non-ethernet packet")) + LOG.debug("drop non-ethernet packet") return pkt_vlan = pkt.get_protocol(vlan.vlan) pkt_arp = pkt.get_protocol(arp.arp) if not pkt_arp: - LOG.info(_LI("drop non-arp packet")) + LOG.debug("drop non-arp packet") return arptbl = self._arp_tbl.get(network) From e266c5cacf8debaf130422c7a88764c70cbef2b5 Mon Sep 17 00:00:00 2001 From: OpenStack Proposal Bot Date: Mon, 22 Sep 2014 06:07:23 +0000 Subject: [PATCH 019/128] Imported Translations from Transifex Change-Id: If3c928da9856fae84b139c78ee04573daf562a95 --- .../locale/de/LC_MESSAGES/neutron-log-info.po | 19 +- .../en_AU/LC_MESSAGES/neutron-log-info.po | 19 +- .../en_GB/LC_MESSAGES/neutron-log-info.po | 19 +- neutron/locale/en_US/LC_MESSAGES/neutron.po | 4026 ++++++++-------- .../locale/es/LC_MESSAGES/neutron-log-info.po | 19 +- .../locale/fr/LC_MESSAGES/neutron-log-info.po | 19 +- .../locale/it/LC_MESSAGES/neutron-log-info.po | 19 +- .../locale/ja/LC_MESSAGES/neutron-log-info.po | 19 +- .../ko_KR/LC_MESSAGES/neutron-log-info.po | 19 +- neutron/locale/neutron-log-info.pot | 21 +- neutron/locale/neutron.pot | 4028 +++++++++-------- .../pt_BR/LC_MESSAGES/neutron-log-info.po | 19 +- .../te_IN/LC_MESSAGES/neutron-log-info.po | 19 +- .../vi_VN/LC_MESSAGES/neutron-log-info.po | 19 +- .../zh_CN/LC_MESSAGES/neutron-log-info.po | 19 +- .../zh_TW/LC_MESSAGES/neutron-log-info.po | 19 +- 16 files changed, 4218 insertions(+), 4104 deletions(-) diff --git a/neutron/locale/de/LC_MESSAGES/neutron-log-info.po b/neutron/locale/de/LC_MESSAGES/neutron-log-info.po index b71ec7e2003..8460729b68a 100644 --- a/neutron/locale/de/LC_MESSAGES/neutron-log-info.po +++ b/neutron/locale/de/LC_MESSAGES/neutron-log-info.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Neutron\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-14 06:10+0000\n" +"POT-Creation-Date: 2014-09-22 06:06+0000\n" "PO-Revision-Date: 2014-08-17 05:19+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: German (http://www.transifex.com/projects/p/neutron/language/" @@ -119,20 +119,25 @@ msgstr "Warten aufgerufen nach dem der Thread abgebrochen wurde. Bereinige." msgid "Waiting on %d children to exit" msgstr "Warten auf Beenden von %d untergeordneten Elementen" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:80 +#: neutron/plugins/ml2/drivers/type_tunnel.py:79 +#, python-format +msgid "%(type)s ID ranges: %(range)s" +msgstr "" + +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:78 msgid "APIC service agent starting ..." msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:97 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:95 msgid "APIC service agent started" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:191 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:189 #, python-format msgid "APIC host agent: agent starting on %s" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:211 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:209 #, python-format msgid "APIC host agent: started on %s" msgstr "" @@ -142,11 +147,11 @@ msgstr "" msgid "Agent out of sync with plugin!" msgstr "Agent nicht synchron mit Plug-in!" -#: neutron/plugins/nuage/syncmanager.py:47 +#: neutron/plugins/nuage/syncmanager.py:46 msgid "Starting the sync between Neutron and VSD" msgstr "" -#: neutron/plugins/nuage/syncmanager.py:60 +#: neutron/plugins/nuage/syncmanager.py:59 msgid "Sync between Neutron and VSD completed successfully" msgstr "" diff --git a/neutron/locale/en_AU/LC_MESSAGES/neutron-log-info.po b/neutron/locale/en_AU/LC_MESSAGES/neutron-log-info.po index f7dcf959c86..37d101a0c0d 100644 --- a/neutron/locale/en_AU/LC_MESSAGES/neutron-log-info.po +++ b/neutron/locale/en_AU/LC_MESSAGES/neutron-log-info.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Neutron\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-14 06:10+0000\n" +"POT-Creation-Date: 2014-09-22 06:06+0000\n" "PO-Revision-Date: 2014-07-18 20:49+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: English (Australia) (http://www.transifex.com/projects/p/" @@ -116,20 +116,25 @@ msgstr "" msgid "Waiting on %d children to exit" msgstr "Waiting on %d children to exit" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:80 +#: neutron/plugins/ml2/drivers/type_tunnel.py:79 +#, python-format +msgid "%(type)s ID ranges: %(range)s" +msgstr "" + +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:78 msgid "APIC service agent starting ..." msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:97 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:95 msgid "APIC service agent started" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:191 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:189 #, python-format msgid "APIC host agent: agent starting on %s" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:211 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:209 #, python-format msgid "APIC host agent: started on %s" msgstr "" @@ -139,11 +144,11 @@ msgstr "" msgid "Agent out of sync with plugin!" msgstr "" -#: neutron/plugins/nuage/syncmanager.py:47 +#: neutron/plugins/nuage/syncmanager.py:46 msgid "Starting the sync between Neutron and VSD" msgstr "" -#: neutron/plugins/nuage/syncmanager.py:60 +#: neutron/plugins/nuage/syncmanager.py:59 msgid "Sync between Neutron and VSD completed successfully" msgstr "" diff --git a/neutron/locale/en_GB/LC_MESSAGES/neutron-log-info.po b/neutron/locale/en_GB/LC_MESSAGES/neutron-log-info.po index 00baf831e3f..362b701da77 100644 --- a/neutron/locale/en_GB/LC_MESSAGES/neutron-log-info.po +++ b/neutron/locale/en_GB/LC_MESSAGES/neutron-log-info.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Neutron\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-14 06:10+0000\n" +"POT-Creation-Date: 2014-09-22 06:06+0000\n" "PO-Revision-Date: 2014-08-17 05:19+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: English (United Kingdom) (http://www.transifex.com/projects/p/" @@ -118,20 +118,25 @@ msgstr "Wait called after thread killed. Cleaning up." msgid "Waiting on %d children to exit" msgstr "Waiting on %d children to exit" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:80 +#: neutron/plugins/ml2/drivers/type_tunnel.py:79 +#, python-format +msgid "%(type)s ID ranges: %(range)s" +msgstr "" + +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:78 msgid "APIC service agent starting ..." msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:97 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:95 msgid "APIC service agent started" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:191 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:189 #, python-format msgid "APIC host agent: agent starting on %s" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:211 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:209 #, python-format msgid "APIC host agent: started on %s" msgstr "" @@ -141,11 +146,11 @@ msgstr "" msgid "Agent out of sync with plugin!" msgstr "" -#: neutron/plugins/nuage/syncmanager.py:47 +#: neutron/plugins/nuage/syncmanager.py:46 msgid "Starting the sync between Neutron and VSD" msgstr "" -#: neutron/plugins/nuage/syncmanager.py:60 +#: neutron/plugins/nuage/syncmanager.py:59 msgid "Sync between Neutron and VSD completed successfully" msgstr "" diff --git a/neutron/locale/en_US/LC_MESSAGES/neutron.po b/neutron/locale/en_US/LC_MESSAGES/neutron.po index de8e8303af5..09400125882 100644 --- a/neutron/locale/en_US/LC_MESSAGES/neutron.po +++ b/neutron/locale/en_US/LC_MESSAGES/neutron.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Neutron\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-15 06:10+0000\n" +"POT-Creation-Date: 2014-09-22 06:06+0000\n" "PO-Revision-Date: 2013-01-28 21:54+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: English (United States) " @@ -410,7 +410,7 @@ msgid "Number of threads to use during sync process." msgstr "" #: neutron/agent/dhcp_agent.py:65 neutron/agent/l3_agent.py:496 -#: neutron/agent/metadata/namespace_proxy.py:165 +#: neutron/agent/metadata/namespace_proxy.py:163 msgid "Location of Metadata Proxy UNIX domain socket" msgstr "" @@ -490,24 +490,24 @@ msgid "" msgstr "" #: neutron/agent/dhcp_agent.py:582 neutron/agent/l3_agent.py:1984 -#: neutron/agent/metadata/agent.py:363 -#: neutron/plugins/cisco/cfg_agent/cfg_agent.py:328 -#: neutron/services/metering/agents/metering_agent.py:272 +#: neutron/agent/metadata/agent.py:361 +#: neutron/plugins/cisco/cfg_agent/cfg_agent.py:326 +#: neutron/services/metering/agents/metering_agent.py:270 msgid "" "Neutron server does not support state report. State report for this agent" " will be disabled." msgstr "" #: neutron/agent/dhcp_agent.py:588 neutron/agent/l3_agent.py:1989 -#: neutron/agent/metadata/agent.py:368 -#: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:110 -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:795 +#: neutron/agent/metadata/agent.py:366 +#: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:108 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:794 #: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:216 -#: neutron/plugins/nec/agent/nec_neutron_agent.py:182 -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:261 +#: neutron/plugins/nec/agent/nec_neutron_agent.py:180 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:264 #: neutron/plugins/sriovnicagent/sriov_nic_agent.py:131 -#: neutron/services/loadbalancer/agent/agent_manager.py:121 -#: neutron/services/metering/agents/metering_agent.py:277 +#: neutron/services/loadbalancer/agent/agent_manager.py:119 +#: neutron/services/metering/agents/metering_agent.py:275 msgid "Failed reporting state!" msgstr "" @@ -517,7 +517,7 @@ msgid "Agent updated: %(payload)s" msgstr "" #: neutron/agent/dhcp_agent.py:597 neutron/agent/l3_agent.py:1994 -#: neutron/services/metering/agents/metering_agent.py:280 +#: neutron/services/metering/agents/metering_agent.py:278 #, python-format msgid "agent_updated by server side %s!" msgstr "" @@ -589,7 +589,7 @@ msgid "" msgstr "" #: neutron/agent/l3_agent.py:564 neutron/agent/linux/dhcp.py:785 -#: neutron/services/metering/drivers/iptables/iptables_driver.py:92 +#: neutron/services/metering/drivers/iptables/iptables_driver.py:90 msgid "An interface driver must be specified" msgstr "" @@ -623,15 +623,15 @@ msgid "Info for router %s were not found. Skipping router removal" msgstr "" #: neutron/agent/l3_agent.py:830 -#: neutron/plugins/cisco/cfg_agent/service_helpers/routing_svc_helper.py:635 -#: neutron/services/firewall/agents/varmour/varmour_router.py:103 +#: neutron/plugins/cisco/cfg_agent/service_helpers/routing_svc_helper.py:633 +#: neutron/services/firewall/agents/varmour/varmour_router.py:100 #, python-format msgid "Router port %s has no IP address" msgstr "" #: neutron/agent/l3_agent.py:832 neutron/db/l3_db.py:954 -#: neutron/plugins/cisco/cfg_agent/service_helpers/routing_svc_helper.py:637 -#: neutron/services/firewall/agents/varmour/varmour_router.py:106 +#: neutron/plugins/cisco/cfg_agent/service_helpers/routing_svc_helper.py:635 +#: neutron/services/firewall/agents/varmour/varmour_router.py:103 #, python-format msgid "Ignoring multiple IPs on router port %s" msgstr "" @@ -725,7 +725,7 @@ msgid "Failed synchronizing routers due to RPC error" msgstr "" #: neutron/agent/l3_agent.py:1873 -#: neutron/services/metering/agents/metering_agent.py:61 +#: neutron/services/metering/agents/metering_agent.py:59 msgid "Failed synchronizing routers" msgstr "" @@ -793,8 +793,8 @@ msgid "" msgstr "" #: neutron/agent/ovs_cleanup_util.py:73 -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:665 -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:299 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:664 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:302 #, python-format msgid "Delete %s" msgstr "" @@ -995,20 +995,20 @@ msgstr "" msgid "An error occurred while communicating with async process [%s]." msgstr "" -#: neutron/agent/linux/daemon.py:37 +#: neutron/agent/linux/daemon.py:35 #, python-format msgid "Error while handling pidfile: %s" msgstr "" -#: neutron/agent/linux/daemon.py:45 +#: neutron/agent/linux/daemon.py:43 msgid "Unable to unlock pid file" msgstr "" -#: neutron/agent/linux/daemon.py:94 +#: neutron/agent/linux/daemon.py:92 msgid "Fork failed" msgstr "" -#: neutron/agent/linux/daemon.py:136 +#: neutron/agent/linux/daemon.py:134 #, python-format msgid "Pidfile %s already exist. Daemon already running?" msgstr "" @@ -1049,17 +1049,17 @@ msgstr "" msgid "No DHCP started for %s" msgstr "" -#: neutron/agent/linux/dhcp.py:256 neutron/agent/linux/utils.py:152 +#: neutron/agent/linux/dhcp.py:256 neutron/agent/linux/utils.py:150 #, python-format msgid "Error while reading %s" msgstr "" -#: neutron/agent/linux/dhcp.py:263 neutron/agent/linux/utils.py:159 +#: neutron/agent/linux/dhcp.py:263 neutron/agent/linux/utils.py:157 #, python-format msgid "Unable to convert value in %s" msgstr "" -#: neutron/agent/linux/dhcp.py:265 neutron/agent/linux/utils.py:161 +#: neutron/agent/linux/dhcp.py:265 neutron/agent/linux/utils.py:159 #, python-format msgid "Unable to access %s" msgstr "" @@ -1140,19 +1140,19 @@ msgstr "" msgid "Reusing existing device: %s." msgstr "" -#: neutron/agent/linux/external_process.py:33 +#: neutron/agent/linux/external_process.py:32 msgid "Location to store child pid files" msgstr "" -#: neutron/agent/linux/external_process.py:35 +#: neutron/agent/linux/external_process.py:34 msgid "Periodically check child processes" msgstr "" -#: neutron/agent/linux/external_process.py:38 +#: neutron/agent/linux/external_process.py:37 msgid "Action to be executed when a child process dies" msgstr "" -#: neutron/agent/linux/external_process.py:40 +#: neutron/agent/linux/external_process.py:39 msgid "Interval between checks of child process liveness (seconds)" msgstr "" @@ -1169,57 +1169,65 @@ msgid "MTU setting for device." msgstr "" #: neutron/agent/linux/interface.py:44 -msgid "Mapping between flavor and LinuxInterfaceDriver" +msgid "" +"Mapping between flavor and LinuxInterfaceDriver. It is specific to " +"MetaInterfaceDriver used with admin_user, admin_password, " +"admin_tenant_name, admin_url, auth_strategy, auth_region and " +"endpoint_type." msgstr "" -#: neutron/agent/linux/interface.py:46 +#: neutron/agent/linux/interface.py:50 msgid "Admin username" msgstr "" -#: neutron/agent/linux/interface.py:48 neutron/agent/metadata/agent.py:54 +#: neutron/agent/linux/interface.py:52 neutron/agent/metadata/agent.py:52 #: neutron/plugins/metaplugin/common/config.py:65 msgid "Admin password" msgstr "" -#: neutron/agent/linux/interface.py:51 neutron/agent/metadata/agent.py:57 +#: neutron/agent/linux/interface.py:55 neutron/agent/metadata/agent.py:55 #: neutron/plugins/metaplugin/common/config.py:68 msgid "Admin tenant name" msgstr "" -#: neutron/agent/linux/interface.py:53 neutron/agent/metadata/agent.py:59 +#: neutron/agent/linux/interface.py:57 neutron/agent/metadata/agent.py:57 #: neutron/plugins/metaplugin/common/config.py:70 msgid "Authentication URL" msgstr "" -#: neutron/agent/linux/interface.py:55 neutron/agent/metadata/agent.py:61 +#: neutron/agent/linux/interface.py:59 neutron/agent/metadata/agent.py:59 #: neutron/common/config.py:47 neutron/plugins/metaplugin/common/config.py:72 msgid "The type of authentication to use" msgstr "" -#: neutron/agent/linux/interface.py:57 neutron/agent/metadata/agent.py:63 +#: neutron/agent/linux/interface.py:61 neutron/agent/metadata/agent.py:61 #: neutron/plugins/metaplugin/common/config.py:74 msgid "Authentication region" msgstr "" -#: neutron/agent/linux/interface.py:214 neutron/agent/linux/interface.py:268 -#: neutron/agent/linux/interface.py:330 neutron/agent/linux/interface.py:379 +#: neutron/agent/linux/interface.py:64 neutron/agent/metadata/agent.py:71 +msgid "Network service endpoint type to pull from the keystone catalog" +msgstr "" + +#: neutron/agent/linux/interface.py:222 neutron/agent/linux/interface.py:276 +#: neutron/agent/linux/interface.py:338 neutron/agent/linux/interface.py:387 #, python-format msgid "Device %s already exists" msgstr "" -#: neutron/agent/linux/interface.py:232 neutron/agent/linux/interface.py:279 -#: neutron/agent/linux/interface.py:342 neutron/agent/linux/interface.py:386 +#: neutron/agent/linux/interface.py:240 neutron/agent/linux/interface.py:287 +#: neutron/agent/linux/interface.py:350 neutron/agent/linux/interface.py:394 #, python-format msgid "Unplugged interface '%s'" msgstr "" -#: neutron/agent/linux/interface.py:234 neutron/agent/linux/interface.py:278 -#: neutron/agent/linux/interface.py:344 neutron/agent/linux/interface.py:388 +#: neutron/agent/linux/interface.py:242 neutron/agent/linux/interface.py:286 +#: neutron/agent/linux/interface.py:352 neutron/agent/linux/interface.py:396 #, python-format msgid "Failed unplugging interface '%s'" msgstr "" -#: neutron/agent/linux/interface.py:446 +#: neutron/agent/linux/interface.py:455 #, python-format msgid "Driver location: %s" msgstr "" @@ -1253,36 +1261,36 @@ msgstr "" msgid "Attempted to remove port filter which is not filtered %r" msgstr "" -#: neutron/agent/linux/iptables_manager.py:157 +#: neutron/agent/linux/iptables_manager.py:156 #, python-format msgid "Attempted to remove chain %s which does not exist" msgstr "" -#: neutron/agent/linux/iptables_manager.py:199 +#: neutron/agent/linux/iptables_manager.py:198 #, python-format msgid "Unknown chain: %r" msgstr "" -#: neutron/agent/linux/iptables_manager.py:234 +#: neutron/agent/linux/iptables_manager.py:233 #, python-format msgid "" "Tried to remove rule that was not there: %(chain)r %(rule)r %(wrap)r " "%(top)r" msgstr "" -#: neutron/agent/linux/iptables_manager.py:389 +#: neutron/agent/linux/iptables_manager.py:388 #, python-format msgid "Got semaphore / lock \"%s\"" msgstr "" -#: neutron/agent/linux/iptables_manager.py:392 +#: neutron/agent/linux/iptables_manager.py:391 #, python-format msgid "Semaphore / lock released \"%s\"" msgstr "" -#: neutron/agent/linux/iptables_manager.py:443 -#: neutron/tests/unit/test_iptables_manager.py:753 -#: neutron/tests/unit/test_iptables_manager.py:787 +#: neutron/agent/linux/iptables_manager.py:442 +#: neutron/tests/unit/test_iptables_manager.py:751 +#: neutron/tests/unit/test_iptables_manager.py:785 #, python-format msgid "" "IPTablesManager.apply failed to apply the following set of iptables " @@ -1290,16 +1298,16 @@ msgid "" "%s" msgstr "" -#: neutron/agent/linux/iptables_manager.py:446 +#: neutron/agent/linux/iptables_manager.py:445 msgid "IPTablesManager.apply completed with success" msgstr "" -#: neutron/agent/linux/iptables_manager.py:456 +#: neutron/agent/linux/iptables_manager.py:455 #, python-format msgid "Unable to find table %s" msgstr "" -#: neutron/agent/linux/iptables_manager.py:660 +#: neutron/agent/linux/iptables_manager.py:659 #, python-format msgid "Attempted to get traffic counters of chain %s which does not exist" msgstr "" @@ -1329,7 +1337,7 @@ msgstr "" #: neutron/agent/linux/ovs_lib.py:72 neutron/agent/linux/ovs_lib.py:170 #: neutron/agent/linux/ovs_lib.py:290 -#: neutron/plugins/bigswitch/agent/restproxy_agent.py:55 +#: neutron/plugins/bigswitch/agent/restproxy_agent.py:54 #, python-format msgid "Unable to execute %(cmd)s. Exception: %(exception)s" msgstr "" @@ -1412,12 +1420,12 @@ msgstr "" msgid "Location to store IPv6 RA config files" msgstr "" -#: neutron/agent/linux/utils.py:48 +#: neutron/agent/linux/utils.py:46 #, python-format msgid "Running command: %s" msgstr "" -#: neutron/agent/linux/utils.py:71 +#: neutron/agent/linux/utils.py:69 #, python-format msgid "" "\n" @@ -1427,125 +1435,121 @@ msgid "" "Stderr: %(stderr)r" msgstr "" -#: neutron/agent/metadata/agent.py:52 +#: neutron/agent/metadata/agent.py:50 #: neutron/plugins/metaplugin/common/config.py:63 msgid "Admin user" msgstr "" -#: neutron/agent/metadata/agent.py:66 +#: neutron/agent/metadata/agent.py:64 msgid "Turn off verification of the certificate for ssl" msgstr "" -#: neutron/agent/metadata/agent.py:69 +#: neutron/agent/metadata/agent.py:67 msgid "Certificate Authority public key (CA cert) file for ssl" msgstr "" -#: neutron/agent/metadata/agent.py:73 -msgid "Network service endpoint type to pull from the keystone catalog" -msgstr "" - -#: neutron/agent/metadata/agent.py:76 +#: neutron/agent/metadata/agent.py:74 msgid "IP address used by Nova metadata server." msgstr "" -#: neutron/agent/metadata/agent.py:79 +#: neutron/agent/metadata/agent.py:77 msgid "TCP Port used by Nova metadata server." msgstr "" -#: neutron/agent/metadata/agent.py:82 +#: neutron/agent/metadata/agent.py:80 #: neutron/plugins/vmware/dhcp_meta/nsx.py:63 msgid "Shared secret to sign instance-id request" msgstr "" -#: neutron/agent/metadata/agent.py:87 +#: neutron/agent/metadata/agent.py:85 msgid "Protocol to access nova metadata, http or https" msgstr "" -#: neutron/agent/metadata/agent.py:89 +#: neutron/agent/metadata/agent.py:87 msgid "Allow to perform insecure SSL (https) requests to nova metadata" msgstr "" -#: neutron/agent/metadata/agent.py:93 +#: neutron/agent/metadata/agent.py:91 msgid "Client certificate for nova metadata api server." msgstr "" -#: neutron/agent/metadata/agent.py:96 +#: neutron/agent/metadata/agent.py:94 msgid "Private key of client certificate." msgstr "" -#: neutron/agent/metadata/agent.py:126 -#: neutron/agent/metadata/namespace_proxy.py:68 +#: neutron/agent/metadata/agent.py:124 +#: neutron/agent/metadata/namespace_proxy.py:66 #, python-format msgid "Request: %s" msgstr "" -#: neutron/agent/metadata/agent.py:135 -#: neutron/agent/metadata/namespace_proxy.py:76 +#: neutron/agent/metadata/agent.py:133 +#: neutron/agent/metadata/namespace_proxy.py:74 msgid "Unexpected error." msgstr "" -#: neutron/agent/metadata/agent.py:136 -#: neutron/agent/metadata/namespace_proxy.py:77 +#: neutron/agent/metadata/agent.py:134 +#: neutron/agent/metadata/namespace_proxy.py:75 msgid "An unknown error has occurred. Please try your request again." msgstr "" -#: neutron/agent/metadata/agent.py:182 +#: neutron/agent/metadata/agent.py:180 msgid "" "Either one of parameter network_id or router_id must be passed to " "_get_ports method." msgstr "" -#: neutron/agent/metadata/agent.py:231 +#: neutron/agent/metadata/agent.py:229 msgid "" "The remote metadata server responded with Forbidden. This response " "usually occurs when shared secrets do not match." msgstr "" -#: neutron/agent/metadata/agent.py:242 -#: neutron/agent/metadata/namespace_proxy.py:120 +#: neutron/agent/metadata/agent.py:240 +#: neutron/agent/metadata/namespace_proxy.py:118 msgid "Remote metadata server experienced an internal server error." msgstr "" -#: neutron/agent/metadata/agent.py:248 -#: neutron/agent/metadata/namespace_proxy.py:126 +#: neutron/agent/metadata/agent.py:246 +#: neutron/agent/metadata/namespace_proxy.py:124 #, python-format msgid "Unexpected response code: %s" msgstr "" -#: neutron/agent/metadata/agent.py:308 +#: neutron/agent/metadata/agent.py:306 msgid "Location for Metadata Proxy UNIX domain socket" msgstr "" -#: neutron/agent/metadata/agent.py:311 +#: neutron/agent/metadata/agent.py:309 msgid "Number of separate worker processes for metadata server" msgstr "" -#: neutron/agent/metadata/agent.py:315 +#: neutron/agent/metadata/agent.py:313 msgid "Number of backlog requests to configure the metadata server socket with" msgstr "" -#: neutron/agent/metadata/namespace_proxy.py:63 +#: neutron/agent/metadata/namespace_proxy.py:61 msgid "network_id and router_id are None. One must be provided." msgstr "" -#: neutron/agent/metadata/namespace_proxy.py:149 +#: neutron/agent/metadata/namespace_proxy.py:147 msgid "Network that will have instance metadata proxied." msgstr "" -#: neutron/agent/metadata/namespace_proxy.py:152 +#: neutron/agent/metadata/namespace_proxy.py:150 msgid "Router that will have connected instances' metadata proxied." msgstr "" -#: neutron/agent/metadata/namespace_proxy.py:155 +#: neutron/agent/metadata/namespace_proxy.py:153 #: neutron/tests/functional/agent/linux/simple_daemon.py:42 msgid "Location of pid file of this process." msgstr "" -#: neutron/agent/metadata/namespace_proxy.py:158 +#: neutron/agent/metadata/namespace_proxy.py:156 msgid "Run as daemon." msgstr "" -#: neutron/agent/metadata/namespace_proxy.py:161 +#: neutron/agent/metadata/namespace_proxy.py:159 msgid "TCP Port to listen for metadata server requests." msgstr "" @@ -1577,7 +1581,7 @@ msgid "" " and '%(desc)s'" msgstr "" -#: neutron/api/api_common.py:315 neutron/api/v2/base.py:597 +#: neutron/api/api_common.py:315 neutron/api/v2/base.py:595 #, python-format msgid "Unable to find '%s' in request body" msgstr "" @@ -1725,36 +1729,36 @@ msgid "" "available. Payload: %(payload)s" msgstr "" -#: neutron/api/rpc/agentnotifiers/l3_rpc_agent_api.py:38 +#: neutron/api/rpc/agentnotifiers/l3_rpc_agent_api.py:40 #, python-format msgid "Nofity agent at %(host)s the message %(method)s" msgstr "" -#: neutron/api/rpc/agentnotifiers/l3_rpc_agent_api.py:57 +#: neutron/api/rpc/agentnotifiers/l3_rpc_agent_api.py:62 #, python-format msgid "Notify agent at %(topic)s.%(host)s the message %(method)s" msgstr "" -#: neutron/api/rpc/agentnotifiers/l3_rpc_agent_api.py:99 +#: neutron/api/rpc/agentnotifiers/l3_rpc_agent_api.py:105 #, python-format msgid "" "No plugin for L3 routing registered. Cannot notify agents with the " "message %s" msgstr "" -#: neutron/api/rpc/agentnotifiers/l3_rpc_agent_api.py:117 +#: neutron/api/rpc/agentnotifiers/l3_rpc_agent_api.py:123 #, python-format msgid "" "Fanout notify agent at %(topic)s the message %(method)s on router " "%(router_id)s" msgstr "" -#: neutron/api/rpc/agentnotifiers/metering_rpc_agent_api.py:49 +#: neutron/api/rpc/agentnotifiers/metering_rpc_agent_api.py:47 #, python-format msgid "Notify metering agent at %(topic)s.%(host)s the message %(method)s" msgstr "" -#: neutron/api/rpc/agentnotifiers/metering_rpc_agent_api.py:64 +#: neutron/api/rpc/agentnotifiers/metering_rpc_agent_api.py:62 #, python-format msgid "" "Fanout notify metering agent at %(topic)s the message %(method)s on " @@ -2004,7 +2008,7 @@ msgid "'%s' is not a valid input" msgstr "" #: neutron/api/v2/attributes.py:355 -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:534 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:529 #, python-format msgid "'%s' is not a valid UUID" msgstr "" @@ -2030,7 +2034,7 @@ msgid "'%s' cannot be converted to boolean" msgstr "" #: neutron/api/v2/attributes.py:491 -#: neutron/plugins/nec/extensions/packetfilter.py:75 +#: neutron/plugins/nec/extensions/packetfilter.py:72 #, python-format msgid "'%s' is not a integer" msgstr "" @@ -2077,41 +2081,41 @@ msgstr "" msgid "Request body: %(body)s" msgstr "" -#: neutron/api/v2/base.py:588 +#: neutron/api/v2/base.py:581 msgid "Bulk operation not supported" msgstr "" -#: neutron/api/v2/base.py:592 +#: neutron/api/v2/base.py:584 msgid "Resources required" msgstr "" -#: neutron/api/v2/base.py:608 +#: neutron/api/v2/base.py:606 #, python-format msgid "Failed to parse request. Required attribute '%s' not specified" msgstr "" -#: neutron/api/v2/base.py:615 +#: neutron/api/v2/base.py:613 #, python-format msgid "Attribute '%s' not allowed in POST" msgstr "" -#: neutron/api/v2/base.py:620 +#: neutron/api/v2/base.py:618 #, python-format msgid "Cannot update read-only attribute %s" msgstr "" -#: neutron/api/v2/base.py:638 +#: neutron/api/v2/base.py:636 #, python-format msgid "Invalid input for %(attr)s. Reason: %(reason)s." msgstr "" -#: neutron/api/v2/base.py:647 neutron/extensions/allowedaddresspairs.py:75 +#: neutron/api/v2/base.py:645 neutron/extensions/allowedaddresspairs.py:75 #: neutron/extensions/multiprovidernet.py:45 #, python-format msgid "Unrecognized attribute(s) '%s'" msgstr "" -#: neutron/api/v2/base.py:666 +#: neutron/api/v2/base.py:664 #, python-format msgid "Tenant %(tenant_id)s not allowed to create %(resource)s on this network" msgstr "" @@ -2128,7 +2132,7 @@ msgid "%s failed" msgstr "" #: neutron/api/v2/resource.py:130 -#: neutron/tests/unit/test_api_v2_resource.py:299 +#: neutron/tests/unit/test_api_v2_resource.py:296 msgid "Request Failed: internal server error while processing your request." msgstr "" @@ -2196,7 +2200,7 @@ msgstr "" msgid "The core plugin Neutron will use" msgstr "" -#: neutron/common/config.py:51 neutron/db/migration/cli.py:35 +#: neutron/common/config.py:51 neutron/db/migration/cli.py:33 msgid "The service plugins Neutron will use" msgstr "" @@ -2627,26 +2631,31 @@ msgstr "" #: neutron/common/exceptions.py:309 #, python-format +msgid "Invalid network Tunnel range: '%(tunnel_range)s' - %(error)s" +msgstr "" + +#: neutron/common/exceptions.py:320 +#, python-format msgid "Invalid network VXLAN port range: '%(vxlan_range)s'" msgstr "" -#: neutron/common/exceptions.py:313 +#: neutron/common/exceptions.py:324 msgid "VXLAN Network unsupported." msgstr "" -#: neutron/common/exceptions.py:317 +#: neutron/common/exceptions.py:328 #, python-format msgid "Found duplicate extension: %(alias)s" msgstr "" -#: neutron/common/exceptions.py:321 +#: neutron/common/exceptions.py:332 #, python-format msgid "" "The following device_id %(device_id)s is not owned by your tenant or " "matches another tenants router." msgstr "" -#: neutron/common/exceptions.py:326 +#: neutron/common/exceptions.py:337 #, python-format msgid "Invalid CIDR %(input)s given as IP prefix" msgstr "" @@ -2769,117 +2778,103 @@ msgstr "" msgid "Delete allocated IP %(ip_address)s (%(network_id)s/%(subnet_id)s)" msgstr "" -#: neutron/db/db_base_plugin_v2.py:224 -#, python-format -msgid "All IPs from subnet %(subnet_id)s (%(cidr)s) allocated" -msgstr "" - -#: neutron/db/db_base_plugin_v2.py:229 -#, python-format -msgid "Allocated IP - %(ip_address)s from %(first_ip)s to %(last_ip)s" -msgstr "" - -#: neutron/db/db_base_plugin_v2.py:236 -msgid "No more free IP's in slice. Deleting allocation pool." -msgstr "" - -#: neutron/db/db_base_plugin_v2.py:255 +#: neutron/db/db_base_plugin_v2.py:266 #, python-format msgid "Rebuilding availability ranges for subnet %s" msgstr "" -#: neutron/db/db_base_plugin_v2.py:398 +#: neutron/db/db_base_plugin_v2.py:411 msgid "IP allocation requires subnet_id or ip_address" msgstr "" -#: neutron/db/db_base_plugin_v2.py:410 +#: neutron/db/db_base_plugin_v2.py:423 #, python-format msgid "IP address %s is not a valid IP for the defined networks subnets" msgstr "" -#: neutron/db/db_base_plugin_v2.py:416 +#: neutron/db/db_base_plugin_v2.py:429 #, python-format msgid "" "Failed to create port on network %(network_id)s, because fixed_ips " "included invalid subnet %(subnet_id)s" msgstr "" -#: neutron/db/db_base_plugin_v2.py:436 +#: neutron/db/db_base_plugin_v2.py:449 #, python-format msgid "IP address %s is not a valid IP for the defined subnet" msgstr "" -#: neutron/db/db_base_plugin_v2.py:445 neutron/db/db_base_plugin_v2.py:478 +#: neutron/db/db_base_plugin_v2.py:458 neutron/db/db_base_plugin_v2.py:491 #: neutron/plugins/opencontrail/contrail_plugin.py:388 msgid "Exceeded maximim amount of fixed ips per port" msgstr "" -#: neutron/db/db_base_plugin_v2.py:493 +#: neutron/db/db_base_plugin_v2.py:506 #, python-format msgid "Port update. Hold %s" msgstr "" -#: neutron/db/db_base_plugin_v2.py:500 +#: neutron/db/db_base_plugin_v2.py:513 #, python-format msgid "Port update. Adding %s" msgstr "" -#: neutron/db/db_base_plugin_v2.py:574 +#: neutron/db/db_base_plugin_v2.py:587 msgid "0 is not allowed as CIDR prefix length" msgstr "" -#: neutron/db/db_base_plugin_v2.py:584 +#: neutron/db/db_base_plugin_v2.py:597 #, python-format msgid "" "Requested subnet with cidr: %(cidr)s for network: %(network_id)s overlaps" " with another subnet" msgstr "" -#: neutron/db/db_base_plugin_v2.py:589 +#: neutron/db/db_base_plugin_v2.py:602 #, python-format msgid "" "Validation for CIDR: %(new_cidr)s failed - overlaps with subnet " "%(subnet_id)s (CIDR: %(cidr)s)" msgstr "" -#: neutron/db/db_base_plugin_v2.py:609 +#: neutron/db/db_base_plugin_v2.py:622 msgid "Performing IP validity checks on allocation pools" msgstr "" -#: neutron/db/db_base_plugin_v2.py:616 +#: neutron/db/db_base_plugin_v2.py:629 #, python-format msgid "Found invalid IP address in pool: %(start)s - %(end)s:" msgstr "" -#: neutron/db/db_base_plugin_v2.py:623 +#: neutron/db/db_base_plugin_v2.py:636 msgid "Specified IP addresses do not match the subnet IP version" msgstr "" -#: neutron/db/db_base_plugin_v2.py:627 +#: neutron/db/db_base_plugin_v2.py:640 #, python-format msgid "Start IP (%(start)s) is greater than end IP (%(end)s)" msgstr "" -#: neutron/db/db_base_plugin_v2.py:632 +#: neutron/db/db_base_plugin_v2.py:645 #, python-format msgid "Found pool larger than subnet CIDR:%(start)s - %(end)s" msgstr "" -#: neutron/db/db_base_plugin_v2.py:645 +#: neutron/db/db_base_plugin_v2.py:658 msgid "Checking for overlaps among allocation pools and gateway ip" msgstr "" -#: neutron/db/db_base_plugin_v2.py:656 +#: neutron/db/db_base_plugin_v2.py:669 #, python-format msgid "Found overlapping ranges: %(l_range)s and %(r_range)s" msgstr "" -#: neutron/db/db_base_plugin_v2.py:669 neutron/db/db_base_plugin_v2.py:673 +#: neutron/db/db_base_plugin_v2.py:682 neutron/db/db_base_plugin_v2.py:686 #, python-format msgid "Invalid route: %s" msgstr "" -#: neutron/db/db_base_plugin_v2.py:751 +#: neutron/db/db_base_plugin_v2.py:764 #, python-format msgid "" "ipv6_ra_mode set to '%(ra_mode)s' with ipv6_address_mode set to " @@ -2887,49 +2882,49 @@ msgid "" "the same value" msgstr "" -#: neutron/db/db_base_plugin_v2.py:759 +#: neutron/db/db_base_plugin_v2.py:772 msgid "" "ipv6_ra_mode or ipv6_address_mode cannot be set when enable_dhcp is set " "to False." msgstr "" -#: neutron/db/db_base_plugin_v2.py:765 +#: neutron/db/db_base_plugin_v2.py:778 msgid "Cannot disable enable_dhcp with ipv6 attributes set" msgstr "" -#: neutron/db/db_base_plugin_v2.py:857 +#: neutron/db/db_base_plugin_v2.py:870 #, python-format msgid "An exception occurred while creating the %(resource)s:%(item)s" msgstr "" -#: neutron/db/db_base_plugin_v2.py:954 +#: neutron/db/db_base_plugin_v2.py:967 #, python-format msgid "%(name)s '%(addr)s' does not match the ip_version '%(ip_version)s'" msgstr "" -#: neutron/db/db_base_plugin_v2.py:978 +#: neutron/db/db_base_plugin_v2.py:991 msgid "Gateway is not valid on subnet" msgstr "" -#: neutron/db/db_base_plugin_v2.py:998 neutron/db/db_base_plugin_v2.py:1012 +#: neutron/db/db_base_plugin_v2.py:1011 neutron/db/db_base_plugin_v2.py:1025 #: neutron/plugins/opencontrail/contrail_plugin.py:312 msgid "new subnet" msgstr "" -#: neutron/db/db_base_plugin_v2.py:1005 +#: neutron/db/db_base_plugin_v2.py:1018 #, python-format msgid "Error parsing dns address %s" msgstr "" -#: neutron/db/db_base_plugin_v2.py:1021 +#: neutron/db/db_base_plugin_v2.py:1034 msgid "ipv6_ra_mode is not valid when ip_version is 4" msgstr "" -#: neutron/db/db_base_plugin_v2.py:1025 +#: neutron/db/db_base_plugin_v2.py:1038 msgid "ipv6_address_mode is not valid when ip_version is 4" msgstr "" -#: neutron/db/db_base_plugin_v2.py:1395 +#: neutron/db/db_base_plugin_v2.py:1406 #, python-format msgid "" "Ignoring PortNotFound when deleting port '%s'. The port has already been " @@ -3013,7 +3008,7 @@ msgid "" "of subnet %(sub_id)s" msgstr "" -#: neutron/db/l3_db.py:407 neutron/db/l3_db.py:534 neutron/db/l3_dvr_db.py:210 +#: neutron/db/l3_db.py:407 neutron/db/l3_db.py:534 neutron/db/l3_dvr_db.py:230 #: neutron/plugins/bigswitch/l3_router_plugin.py:170 #: neutron/plugins/bigswitch/l3_router_plugin.py:179 #: neutron/plugins/opencontrail/contrail_plugin.py:499 @@ -3032,7 +3027,7 @@ msgstr "" msgid "Subnet for router interface must have a gateway IP" msgstr "" -#: neutron/db/l3_db.py:580 neutron/plugins/nec/nec_router.py:197 +#: neutron/db/l3_db.py:580 neutron/plugins/nec/nec_router.py:195 #, python-format msgid "Cannot add floating IP to port on subnet %s which has no gateway_ip" msgstr "" @@ -3068,7 +3063,7 @@ msgid "" "assigning a floating IP" msgstr "" -#: neutron/db/l3_db.py:673 neutron/plugins/vmware/plugins/base.py:1804 +#: neutron/db/l3_db.py:673 neutron/plugins/vmware/plugins/base.py:1814 msgid "fixed_ip_address cannot be specified without a port_id" msgstr "" @@ -3100,25 +3095,25 @@ msgstr "" msgid "Centralizing distributed router %s is not supported" msgstr "" -#: neutron/db/l3_dvr_db.py:404 +#: neutron/db/l3_dvr_db.py:424 #, python-format msgid "Agent Gateway port does not exist, so create one: %s" msgstr "" -#: neutron/db/l3_dvr_db.py:419 +#: neutron/db/l3_dvr_db.py:439 msgid "Unable to create the Agent Gateway Port" msgstr "" -#: neutron/db/l3_dvr_db.py:445 +#: neutron/db/l3_dvr_db.py:465 msgid "Unable to create the SNAT Interface Port" msgstr "" -#: neutron/db/l3_dvr_db.py:469 +#: neutron/db/l3_dvr_db.py:489 #, python-format msgid "SNAT interface port list does not exist, so create one: %s" msgstr "" -#: neutron/db/l3_dvrscheduler_db.py:307 +#: neutron/db/l3_dvrscheduler_db.py:296 msgid "No active L3 agents found for SNAT" msgstr "" @@ -3138,17 +3133,17 @@ msgstr "" msgid "Subnet used for the l3 HA admin network." msgstr "" -#: neutron/db/routedserviceinsertion_db.py:36 +#: neutron/db/routedserviceinsertion_db.py:34 #, python-format msgid "Resource type '%(resource_type)s' is longer than %(maxlen)d characters" msgstr "" -#: neutron/db/securitygroups_rpc_base.py:58 +#: neutron/db/securitygroups_rpc_base.py:56 #, python-format msgid "%s must implement get_port_from_device." msgstr "" -#: neutron/db/securitygroups_rpc_base.py:338 +#: neutron/db/securitygroups_rpc_base.py:343 #, python-format msgid "No valid gateway port on subnet %s is found for IPv6 RA" msgstr "" @@ -3165,97 +3160,97 @@ msgid "" "sort '%(resource)s'" msgstr "" -#: neutron/db/firewall/firewall_db.py:241 +#: neutron/db/firewall/firewall_db.py:258 #: neutron/plugins/vmware/plugins/service.py:907 -#: neutron/services/firewall/fwaas_plugin.py:218 +#: neutron/services/firewall/fwaas_plugin.py:216 msgid "create_firewall() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:262 +#: neutron/db/firewall/firewall_db.py:279 #: neutron/plugins/vmware/plugins/service.py:941 -#: neutron/services/firewall/fwaas_plugin.py:232 +#: neutron/services/firewall/fwaas_plugin.py:230 msgid "update_firewall() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:271 +#: neutron/db/firewall/firewall_db.py:288 #: neutron/plugins/vmware/plugins/service.py:967 -#: neutron/services/firewall/fwaas_plugin.py:247 +#: neutron/services/firewall/fwaas_plugin.py:245 msgid "delete_firewall() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:280 +#: neutron/db/firewall/firewall_db.py:297 msgid "get_firewall() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:285 +#: neutron/db/firewall/firewall_db.py:302 msgid "get_firewalls() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:291 +#: neutron/db/firewall/firewall_db.py:308 msgid "get_firewalls_count() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:296 +#: neutron/db/firewall/firewall_db.py:313 msgid "create_firewall_policy() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:312 +#: neutron/db/firewall/firewall_db.py:328 #: neutron/plugins/vmware/plugins/service.py:1029 -#: neutron/services/firewall/fwaas_plugin.py:256 +#: neutron/services/firewall/fwaas_plugin.py:254 msgid "update_firewall_policy() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:326 +#: neutron/db/firewall/firewall_db.py:344 msgid "delete_firewall_policy() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:338 +#: neutron/db/firewall/firewall_db.py:356 msgid "get_firewall_policy() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:343 +#: neutron/db/firewall/firewall_db.py:361 msgid "get_firewall_policies() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:349 +#: neutron/db/firewall/firewall_db.py:367 msgid "get_firewall_policies_count() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:354 +#: neutron/db/firewall/firewall_db.py:372 msgid "create_firewall_rule() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:386 +#: neutron/db/firewall/firewall_db.py:404 #: neutron/plugins/vmware/plugins/service.py:1003 -#: neutron/services/firewall/fwaas_plugin.py:264 +#: neutron/services/firewall/fwaas_plugin.py:262 msgid "update_firewall_rule() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:418 +#: neutron/db/firewall/firewall_db.py:436 msgid "delete_firewall_rule() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:426 +#: neutron/db/firewall/firewall_db.py:444 msgid "get_firewall_rule() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:431 +#: neutron/db/firewall/firewall_db.py:449 msgid "get_firewall_rules() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:437 +#: neutron/db/firewall/firewall_db.py:455 msgid "get_firewall_rules_count() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:446 +#: neutron/db/firewall/firewall_db.py:464 #: neutron/plugins/vmware/plugins/service.py:1056 -#: neutron/services/firewall/fwaas_plugin.py:274 +#: neutron/services/firewall/fwaas_plugin.py:272 msgid "insert_rule() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:490 +#: neutron/db/firewall/firewall_db.py:508 #: neutron/plugins/vmware/plugins/service.py:1085 -#: neutron/services/firewall/fwaas_plugin.py:282 +#: neutron/services/firewall/fwaas_plugin.py:280 msgid "remove_rule() called" msgstr "" @@ -3272,45 +3267,45 @@ msgstr "" msgid "'cookie_name' is not allowed for this type of session persistence" msgstr "" -#: neutron/db/metering/metering_rpc.py:46 +#: neutron/db/metering/metering_rpc.py:44 #, python-format msgid "Unable to find agent %s." msgstr "" -#: neutron/db/migration/__init__.py:44 +#: neutron/db/migration/__init__.py:38 #, python-format msgid "%s cannot be called while in offline mode" msgstr "" -#: neutron/db/migration/cli.py:32 +#: neutron/db/migration/cli.py:30 msgid "Neutron plugin provider module" msgstr "" -#: neutron/db/migration/cli.py:41 +#: neutron/db/migration/cli.py:39 msgid "Neutron quota driver class" msgstr "" -#: neutron/db/migration/cli.py:49 +#: neutron/db/migration/cli.py:47 msgid "URL to database" msgstr "" -#: neutron/db/migration/cli.py:52 +#: neutron/db/migration/cli.py:50 msgid "Database engine" msgstr "" -#: neutron/db/migration/cli.py:75 +#: neutron/db/migration/cli.py:73 msgid "You must provide a revision or relative delta" msgstr "" -#: neutron/db/migration/cli.py:105 neutron/db/migration/cli.py:118 +#: neutron/db/migration/cli.py:103 neutron/db/migration/cli.py:116 msgid "Timeline branches unable to generate timeline" msgstr "" -#: neutron/db/migration/cli.py:112 +#: neutron/db/migration/cli.py:110 msgid "HEAD file does not match migration timeline head" msgstr "" -#: neutron/db/migration/cli.py:158 +#: neutron/db/migration/cli.py:156 msgid "Available commands" msgstr "" @@ -3386,7 +3381,7 @@ msgstr "" msgid "Table %(old_t)r was renamed to %(new_t)r" msgstr "" -#: neutron/db/vpn/vpn_db.py:651 +#: neutron/db/vpn/vpn_db.py:649 #, python-format msgid "vpnservice %s in db is already deleted" msgstr "" @@ -3527,12 +3522,12 @@ msgstr "" msgid "Adds external network attribute to network resource." msgstr "" -#: neutron/extensions/extra_dhcp_opt.py:25 +#: neutron/extensions/extra_dhcp_opt.py:23 #, python-format msgid "ExtraDhcpOpt %(id)s could not be found" msgstr "" -#: neutron/extensions/extra_dhcp_opt.py:29 +#: neutron/extensions/extra_dhcp_opt.py:27 #, python-format msgid "Invalid data format for extra-dhcp-opt: %(data)s" msgstr "" @@ -3556,51 +3551,67 @@ msgid "" "exceeds the maximum %(quota)s." msgstr "" -#: neutron/extensions/firewall.py:37 +#: neutron/extensions/firewall.py:35 #, python-format msgid "Firewall %(firewall_id)s could not be found." msgstr "" -#: neutron/extensions/firewall.py:41 +#: neutron/extensions/firewall.py:39 #, python-format msgid "Firewall %(firewall_id)s is still active." msgstr "" -#: neutron/extensions/firewall.py:45 +#: neutron/extensions/firewall.py:43 #, python-format msgid "" "Operation cannot be performed since associated Firewall %(firewall_id)s " "is in %(pending_state)s." msgstr "" -#: neutron/extensions/firewall.py:50 +#: neutron/extensions/firewall.py:48 #, python-format msgid "Firewall Policy %(firewall_policy_id)s could not be found." msgstr "" -#: neutron/extensions/firewall.py:54 +#: neutron/extensions/firewall.py:52 #, python-format msgid "Firewall Policy %(firewall_policy_id)s is being used." msgstr "" -#: neutron/extensions/firewall.py:58 +#: neutron/extensions/firewall.py:62 +#, python-format +msgid "" +"Operation cannot be performed since Firewall Policy " +"%(firewall_policy_id)s is shared but Firewall Rule %(firewall_rule_id)s " +"is not shared" +msgstr "" + +#: neutron/extensions/firewall.py:74 +#, python-format +msgid "" +"Operation cannot be performed. Before sharing Firewall Policy " +"%(firewall_policy_id)s, share associated Firewall Rule " +"%(firewall_rule_id)s" +msgstr "" + +#: neutron/extensions/firewall.py:80 #, python-format msgid "Firewall Rule %(firewall_rule_id)s could not be found." msgstr "" -#: neutron/extensions/firewall.py:62 +#: neutron/extensions/firewall.py:84 #, python-format msgid "Firewall Rule %(firewall_rule_id)s is being used." msgstr "" -#: neutron/extensions/firewall.py:66 +#: neutron/extensions/firewall.py:88 #, python-format msgid "" "Firewall Rule %(firewall_rule_id)s is not associated with Firewall " "Policy %(firewall_policy_id)s." msgstr "" -#: neutron/extensions/firewall.py:71 +#: neutron/extensions/firewall.py:93 #, python-format msgid "" "Firewall Rule protocol %(protocol)s is not supported. Only protocol " @@ -3608,62 +3619,62 @@ msgid "" "supported." msgstr "" -#: neutron/extensions/firewall.py:77 +#: neutron/extensions/firewall.py:99 #, python-format msgid "" "Firewall rule action %(action)s is not supported. Only action values " "%(values)s are supported." msgstr "" -#: neutron/extensions/firewall.py:82 +#: neutron/extensions/firewall.py:104 #, python-format msgid "%(param)s are not allowed when protocol is set to ICMP." msgstr "" -#: neutron/extensions/firewall.py:87 +#: neutron/extensions/firewall.py:109 msgid "Source/destination port requires a protocol" msgstr "" -#: neutron/extensions/firewall.py:91 +#: neutron/extensions/firewall.py:113 #, python-format msgid "Invalid value for port %(port)s." msgstr "" -#: neutron/extensions/firewall.py:95 +#: neutron/extensions/firewall.py:117 msgid "Missing rule info argument for insert/remove rule operation." msgstr "" -#: neutron/extensions/firewall.py:105 +#: neutron/extensions/firewall.py:127 #, python-format msgid "%(driver)s: Internal driver error." msgstr "" -#: neutron/extensions/firewall.py:154 +#: neutron/extensions/firewall.py:176 #, python-format msgid "Port '%s' is not a valid number" msgstr "" -#: neutron/extensions/firewall.py:158 +#: neutron/extensions/firewall.py:180 #, python-format msgid "Invalid port '%s'" msgstr "" -#: neutron/extensions/firewall.py:172 +#: neutron/extensions/firewall.py:194 #, python-format msgid "%(msg_ip)s and %(msg_subnet)s" msgstr "" -#: neutron/extensions/firewall.py:293 +#: neutron/extensions/firewall.py:315 msgid "Number of firewalls allowed per tenant. A negative value means unlimited." msgstr "" -#: neutron/extensions/firewall.py:297 +#: neutron/extensions/firewall.py:319 msgid "" "Number of firewall policies allowed per tenant. A negative value means " "unlimited." msgstr "" -#: neutron/extensions/firewall.py:301 +#: neutron/extensions/firewall.py:323 msgid "" "Number of firewall rules allowed per tenant. A negative value means " "unlimited." @@ -3925,21 +3936,21 @@ msgid "" "unlimited." msgstr "" -#: neutron/extensions/metering.py:33 +#: neutron/extensions/metering.py:31 #, python-format msgid "Metering label %(label_id)s does not exist" msgstr "" -#: neutron/extensions/metering.py:37 +#: neutron/extensions/metering.py:35 msgid "Duplicate Metering Rule in POST." msgstr "" -#: neutron/extensions/metering.py:41 +#: neutron/extensions/metering.py:39 #, python-format msgid "Metering label rule %(rule_id)s does not exist" msgstr "" -#: neutron/extensions/metering.py:45 +#: neutron/extensions/metering.py:43 #, python-format msgid "" "Metering label rule with remote_ip_prefix %(remote_ip_prefix)s overlaps " @@ -3971,7 +3982,7 @@ msgid "Port does not have port security binding." msgstr "" #: neutron/extensions/providernet.py:54 -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:272 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:267 msgid "Plugin does not support updating provider attributes" msgstr "" @@ -4092,84 +4103,84 @@ msgid "" "unlimited." msgstr "" -#: neutron/extensions/servicetype.py:52 +#: neutron/extensions/servicetype.py:49 msgid "Neutron Service Type Management" msgstr "" -#: neutron/extensions/servicetype.py:60 +#: neutron/extensions/servicetype.py:57 msgid "API for retrieving service providers for Neutron advanced services" msgstr "" -#: neutron/extensions/vpnaas.py:31 +#: neutron/extensions/vpnaas.py:29 #, python-format msgid "VPNService %(vpnservice_id)s could not be found" msgstr "" -#: neutron/extensions/vpnaas.py:35 +#: neutron/extensions/vpnaas.py:33 #, python-format msgid "ipsec_site_connection %(ipsec_site_conn_id)s not found" msgstr "" -#: neutron/extensions/vpnaas.py:39 +#: neutron/extensions/vpnaas.py:37 #, python-format msgid "ipsec_site_connection %(attr)s is equal to or less than dpd_interval" msgstr "" -#: neutron/extensions/vpnaas.py:44 +#: neutron/extensions/vpnaas.py:42 #, python-format msgid "ipsec_site_connection MTU %(mtu)d is too small for ipv%(version)s" msgstr "" -#: neutron/extensions/vpnaas.py:49 +#: neutron/extensions/vpnaas.py:47 #, python-format msgid "IKEPolicy %(ikepolicy_id)s could not be found" msgstr "" -#: neutron/extensions/vpnaas.py:53 +#: neutron/extensions/vpnaas.py:51 #, python-format msgid "IPsecPolicy %(ipsecpolicy_id)s could not be found" msgstr "" -#: neutron/extensions/vpnaas.py:57 +#: neutron/extensions/vpnaas.py:55 #, python-format msgid "" "IKEPolicy %(ikepolicy_id)s is in use by existing IPsecSiteConnection and " "can't be updated or deleted" msgstr "" -#: neutron/extensions/vpnaas.py:62 +#: neutron/extensions/vpnaas.py:60 #, python-format msgid "VPNService %(vpnservice_id)s is still in use" msgstr "" -#: neutron/extensions/vpnaas.py:66 +#: neutron/extensions/vpnaas.py:64 #, python-format msgid "Router %(router_id)s is used by VPNService %(vpnservice_id)s" msgstr "" -#: neutron/extensions/vpnaas.py:70 +#: neutron/extensions/vpnaas.py:68 #, python-format msgid "Invalid state %(state)s of vpnaas resource %(id)s for updating" msgstr "" -#: neutron/extensions/vpnaas.py:75 +#: neutron/extensions/vpnaas.py:73 #, python-format msgid "" "IPsecPolicy %(ipsecpolicy_id)s is in use by existing IPsecSiteConnection " "and can't be updated or deleted" msgstr "" -#: neutron/extensions/vpnaas.py:80 +#: neutron/extensions/vpnaas.py:78 #, python-format msgid "Can not load driver :%(device_driver)s" msgstr "" -#: neutron/extensions/vpnaas.py:84 +#: neutron/extensions/vpnaas.py:82 #, python-format msgid "Subnet %(subnet_id)s is not connected to Router %(router_id)s" msgstr "" -#: neutron/extensions/vpnaas.py:89 +#: neutron/extensions/vpnaas.py:87 #, python-format msgid "Router %(router_id)s has no external network gateway set" msgstr "" @@ -4432,7 +4443,7 @@ msgstr "" msgid "Request is too large." msgstr "" -#: neutron/plugins/bigswitch/config.py:32 +#: neutron/plugins/bigswitch/config.py:28 msgid "" "A comma separated list of Big Switch or Floodlight servers and port " "numbers. The plugin proxies the requests to the Big Switch/Floodlight " @@ -4441,76 +4452,76 @@ msgid "" "support failover." msgstr "" -#: neutron/plugins/bigswitch/config.py:39 +#: neutron/plugins/bigswitch/config.py:35 msgid "" "The username and password for authenticating against the Big Switch or " "Floodlight controller." msgstr "" -#: neutron/plugins/bigswitch/config.py:42 +#: neutron/plugins/bigswitch/config.py:38 msgid "" "If True, Use SSL when connecting to the Big Switch or Floodlight " "controller." msgstr "" -#: neutron/plugins/bigswitch/config.py:45 +#: neutron/plugins/bigswitch/config.py:41 msgid "" "Trust and store the first certificate received for each controller " "address and use it to validate future connections to that address." msgstr "" -#: neutron/plugins/bigswitch/config.py:49 +#: neutron/plugins/bigswitch/config.py:45 msgid "Disables SSL certificate validation for controllers" msgstr "" -#: neutron/plugins/bigswitch/config.py:51 +#: neutron/plugins/bigswitch/config.py:47 msgid "Re-use HTTP/HTTPS connections to the controller." msgstr "" -#: neutron/plugins/bigswitch/config.py:54 +#: neutron/plugins/bigswitch/config.py:50 msgid "Directory containing ca_certs and host_certs certificate directories." msgstr "" -#: neutron/plugins/bigswitch/config.py:57 +#: neutron/plugins/bigswitch/config.py:53 msgid "Sync data on connect" msgstr "" -#: neutron/plugins/bigswitch/config.py:59 +#: neutron/plugins/bigswitch/config.py:55 msgid "" "If neutron fails to create a resource because the backend controller " "doesn't know of a dependency, the plugin automatically triggers a full " "data synchronization to the controller." msgstr "" -#: neutron/plugins/bigswitch/config.py:64 +#: neutron/plugins/bigswitch/config.py:60 msgid "" "Time between verifications that the backend controller database is " "consistent with Neutron. (0 to disable)" msgstr "" -#: neutron/plugins/bigswitch/config.py:67 +#: neutron/plugins/bigswitch/config.py:63 msgid "" "Maximum number of seconds to wait for proxy request to connect and " "complete." msgstr "" -#: neutron/plugins/bigswitch/config.py:70 +#: neutron/plugins/bigswitch/config.py:66 msgid "" "Maximum number of threads to spawn to handle large volumes of port " "creations." msgstr "" -#: neutron/plugins/bigswitch/config.py:74 +#: neutron/plugins/bigswitch/config.py:70 msgid "User defined identifier for this Neutron deployment" msgstr "" -#: neutron/plugins/bigswitch/config.py:76 +#: neutron/plugins/bigswitch/config.py:72 msgid "" "Flag to decide if a route to the metadata server should be injected into " "the VM" msgstr "" -#: neutron/plugins/bigswitch/config.py:81 +#: neutron/plugins/bigswitch/config.py:77 msgid "" "The default router rules installed in new tenant routers. Repeat the " "config option for each rule. Format is " @@ -4518,34 +4529,34 @@ msgid "" "all tenants." msgstr "" -#: neutron/plugins/bigswitch/config.py:86 +#: neutron/plugins/bigswitch/config.py:82 msgid "Maximum number of router rules" msgstr "" -#: neutron/plugins/bigswitch/config.py:90 +#: neutron/plugins/bigswitch/config.py:86 msgid "Virtual interface type to configure on Nova compute nodes" msgstr "" -#: neutron/plugins/bigswitch/config.py:97 +#: neutron/plugins/bigswitch/config.py:93 #, python-format msgid "Nova compute nodes to manually set VIF type to %s" msgstr "" -#: neutron/plugins/bigswitch/config.py:104 +#: neutron/plugins/bigswitch/config.py:100 msgid "List of allowed vif_type values." msgstr "" -#: neutron/plugins/bigswitch/config.py:108 +#: neutron/plugins/bigswitch/config.py:104 msgid "" "Name of integration bridge on compute nodes used for security group " "insertion." msgstr "" -#: neutron/plugins/bigswitch/config.py:111 +#: neutron/plugins/bigswitch/config.py:107 msgid "Seconds between agent checks for port changes" msgstr "" -#: neutron/plugins/bigswitch/config.py:113 +#: neutron/plugins/bigswitch/config.py:109 msgid "Virtual switch type." msgstr "" @@ -4562,99 +4573,99 @@ msgstr "" msgid "NeutronRestProxyV2: too many external networks" msgstr "" -#: neutron/plugins/bigswitch/plugin.py:93 +#: neutron/plugins/bigswitch/plugin.py:90 msgid "Syntax error in server config file, aborting plugin" msgstr "" -#: neutron/plugins/bigswitch/plugin.py:127 neutron/plugins/ml2/db.py:212 +#: neutron/plugins/bigswitch/plugin.py:124 neutron/plugins/ml2/db.py:212 #, python-format msgid "get_port_and_sgs() called for port_id %s" msgstr "" -#: neutron/plugins/bigswitch/plugin.py:237 +#: neutron/plugins/bigswitch/plugin.py:234 #, python-format msgid "Unable to update remote topology: %s" msgstr "" -#: neutron/plugins/bigswitch/plugin.py:322 +#: neutron/plugins/bigswitch/plugin.py:319 #, python-format msgid "" "Setting admin_state_up=False is not supported in this plugin version. " "Ignoring setting for resource: %s" msgstr "" -#: neutron/plugins/bigswitch/plugin.py:328 +#: neutron/plugins/bigswitch/plugin.py:325 #, python-format msgid "" "Operational status is internally set by the plugin. Ignoring setting " "status=%s." msgstr "" -#: neutron/plugins/bigswitch/plugin.py:353 +#: neutron/plugins/bigswitch/plugin.py:350 #, python-format msgid "Unrecognized vif_type in configuration [%s]. Defaulting to ovs." msgstr "" -#: neutron/plugins/bigswitch/plugin.py:399 -#: neutron/plugins/ml2/drivers/mech_bigswitch/driver.py:106 +#: neutron/plugins/bigswitch/plugin.py:398 +#: neutron/plugins/ml2/drivers/mech_bigswitch/driver.py:109 msgid "Iconsistency with backend controller triggering full synchronization." msgstr "" -#: neutron/plugins/bigswitch/plugin.py:416 +#: neutron/plugins/bigswitch/plugin.py:415 #, python-format msgid "NeutronRestProxyV2: Unable to create port: %s" msgstr "" -#: neutron/plugins/bigswitch/plugin.py:475 +#: neutron/plugins/bigswitch/plugin.py:476 #, python-format msgid "NeutronRestProxy: Starting plugin. Version=%s" msgstr "" -#: neutron/plugins/bigswitch/plugin.py:502 +#: neutron/plugins/bigswitch/plugin.py:503 msgid "NeutronRestProxyV2: initialization done" msgstr "" -#: neutron/plugins/bigswitch/plugin.py:546 +#: neutron/plugins/bigswitch/plugin.py:547 msgid "NeutronRestProxyV2: create_network() called" msgstr "" -#: neutron/plugins/bigswitch/plugin.py:589 +#: neutron/plugins/bigswitch/plugin.py:590 msgid "NeutronRestProxyV2.update_network() called" msgstr "" -#: neutron/plugins/bigswitch/plugin.py:617 +#: neutron/plugins/bigswitch/plugin.py:618 msgid "NeutronRestProxyV2: delete_network() called" msgstr "" -#: neutron/plugins/bigswitch/plugin.py:655 +#: neutron/plugins/bigswitch/plugin.py:656 msgid "NeutronRestProxyV2: create_port() called" msgstr "" -#: neutron/plugins/bigswitch/plugin.py:747 +#: neutron/plugins/bigswitch/plugin.py:748 msgid "NeutronRestProxyV2: update_port() called" msgstr "" -#: neutron/plugins/bigswitch/plugin.py:807 +#: neutron/plugins/bigswitch/plugin.py:808 msgid "NeutronRestProxyV2: delete_port() called" msgstr "" -#: neutron/plugins/bigswitch/plugin.py:830 +#: neutron/plugins/bigswitch/plugin.py:831 msgid "NeutronRestProxyV2: create_subnet() called" msgstr "" -#: neutron/plugins/bigswitch/plugin.py:847 +#: neutron/plugins/bigswitch/plugin.py:848 msgid "NeutronRestProxyV2: update_subnet() called" msgstr "" -#: neutron/plugins/bigswitch/plugin.py:866 +#: neutron/plugins/bigswitch/plugin.py:867 msgid "NeutronRestProxyV2: delete_subnet() called" msgstr "" -#: neutron/plugins/bigswitch/plugin.py:890 +#: neutron/plugins/bigswitch/plugin.py:891 msgid "Adding host route: " msgstr "" -#: neutron/plugins/bigswitch/plugin.py:891 +#: neutron/plugins/bigswitch/plugin.py:892 #, python-format msgid "Destination:%(dst)s nexthop:%(next)s" msgstr "" @@ -4668,237 +4679,237 @@ msgstr "" msgid "Updating router rules to %s" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:82 +#: neutron/plugins/bigswitch/servermanager.py:79 #, python-format msgid "Error in REST call to remote network controller: %(reason)s" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:121 +#: neutron/plugins/bigswitch/servermanager.py:118 msgid "Couldn't retrieve capabilities. Newer API calls won't be supported." msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:123 +#: neutron/plugins/bigswitch/servermanager.py:120 #, python-format msgid "The following capabilities were received for %(server)s: %(cap)s" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:152 +#: neutron/plugins/bigswitch/servermanager.py:148 #, python-format msgid "ServerProxy: server=%(server)s, port=%(port)d, ssl=%(ssl)r" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:155 +#: neutron/plugins/bigswitch/servermanager.py:151 #, python-format msgid "" "ServerProxy: resource=%(resource)s, data=%(data)r, headers=%(headers)r, " "action=%(action)s" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:176 +#: neutron/plugins/bigswitch/servermanager.py:172 msgid "ServerProxy: Could not establish HTTPS connection" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:184 +#: neutron/plugins/bigswitch/servermanager.py:180 msgid "ServerProxy: Could not establish HTTP connection" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:220 +#: neutron/plugins/bigswitch/servermanager.py:216 #, python-format msgid "ServerProxy: %(action)s failure, %(e)r" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:223 +#: neutron/plugins/bigswitch/servermanager.py:219 #, python-format msgid "" "ServerProxy: status=%(status)d, reason=%(reason)r, ret=%(ret)s, " "data=%(data)r" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:244 +#: neutron/plugins/bigswitch/servermanager.py:240 msgid "ServerPool: initializing" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:267 +#: neutron/plugins/bigswitch/servermanager.py:263 msgid "Servers not defined. Aborting server manager." msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:274 +#: neutron/plugins/bigswitch/servermanager.py:270 #, python-format msgid "Servers must be defined as :. Configuration was %s" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:283 +#: neutron/plugins/bigswitch/servermanager.py:279 msgid "ServerPool: initialization done" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:333 +#: neutron/plugins/bigswitch/servermanager.py:329 #, python-format msgid "ssl_cert_directory [%s] does not exist. Create it or disable ssl." msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:350 +#: neutron/plugins/bigswitch/servermanager.py:346 #, python-format msgid "No certificates were found to verify controller %s" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:392 +#: neutron/plugins/bigswitch/servermanager.py:388 #, python-format msgid "" "Could not retrieve initial certificate from controller %(server)s. Error " "details: %(error)s" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:397 +#: neutron/plugins/bigswitch/servermanager.py:393 #, python-format msgid "Storing to certificate for host %(server)s at %(path)s" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:444 +#: neutron/plugins/bigswitch/servermanager.py:448 msgid "Server requires synchronization, but no topology function was defined." msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:461 +#: neutron/plugins/bigswitch/servermanager.py:465 #, python-format msgid "" "ServerProxy: %(action)s failure for servers: %(server)r Response: " "%(response)s" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:467 +#: neutron/plugins/bigswitch/servermanager.py:471 #, python-format msgid "" "ServerProxy: Error details: status=%(status)d, reason=%(reason)r, " "ret=%(ret)s, data=%(data)r" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:474 +#: neutron/plugins/bigswitch/servermanager.py:478 #, python-format msgid "ServerProxy: %(action)s failure for all servers: %(server)r" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:497 +#: neutron/plugins/bigswitch/servermanager.py:503 #, python-format msgid "" "NeutronRestProxyV2: Received and ignored error code %(code)s on " "%(action)s action to resource %(resource)s" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:507 +#: neutron/plugins/bigswitch/servermanager.py:513 #, python-format msgid "Unable to create remote router: %s" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:513 +#: neutron/plugins/bigswitch/servermanager.py:519 #, python-format msgid "Unable to update remote router: %s" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:518 +#: neutron/plugins/bigswitch/servermanager.py:524 #, python-format msgid "Unable to delete remote router: %s" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:524 +#: neutron/plugins/bigswitch/servermanager.py:530 #, python-format msgid "Unable to add router interface: %s" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:529 +#: neutron/plugins/bigswitch/servermanager.py:535 #, python-format msgid "Unable to delete remote intf: %s" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:535 +#: neutron/plugins/bigswitch/servermanager.py:541 #, python-format msgid "Unable to create remote network: %s" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:541 -#: neutron/plugins/bigswitch/servermanager.py:546 +#: neutron/plugins/bigswitch/servermanager.py:547 +#: neutron/plugins/bigswitch/servermanager.py:552 #, python-format msgid "Unable to update remote network: %s" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:555 +#: neutron/plugins/bigswitch/servermanager.py:561 #, python-format msgid "No device MAC attached to port %s. Skipping notification to controller." msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:560 +#: neutron/plugins/bigswitch/servermanager.py:566 #, python-format msgid "Unable to create remote port: %s" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:565 +#: neutron/plugins/bigswitch/servermanager.py:571 #, python-format msgid "Unable to delete remote port: %s" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:575 +#: neutron/plugins/bigswitch/servermanager.py:581 #, python-format msgid "Unable to create floating IP: %s" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:580 +#: neutron/plugins/bigswitch/servermanager.py:586 #, python-format msgid "Unable to update floating IP: %s" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:585 +#: neutron/plugins/bigswitch/servermanager.py:591 #, python-format msgid "Unable to delete floating IP: %s" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:590 +#: neutron/plugins/bigswitch/servermanager.py:596 #, python-format msgid "Unable to retrieve switch: %s" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:595 +#: neutron/plugins/bigswitch/servermanager.py:601 msgid "Backend server(s) do not support automated consitency checks." msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:599 +#: neutron/plugins/bigswitch/servermanager.py:605 #, python-format msgid "Consistency watchdog disabled by polling interval setting of %s." msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:611 +#: neutron/plugins/bigswitch/servermanager.py:617 msgid "Encountered an error checking controller health." msgstr "" -#: neutron/plugins/bigswitch/agent/restproxy_agent.py:116 -#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:234 +#: neutron/plugins/bigswitch/agent/restproxy_agent.py:115 +#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:233 msgid "Port update received" msgstr "" -#: neutron/plugins/bigswitch/agent/restproxy_agent.py:120 +#: neutron/plugins/bigswitch/agent/restproxy_agent.py:119 #, python-format msgid "Port %s is not present on this host." msgstr "" -#: neutron/plugins/bigswitch/agent/restproxy_agent.py:123 +#: neutron/plugins/bigswitch/agent/restproxy_agent.py:122 #, python-format msgid "Port %s found. Refreshing firewall." msgstr "" -#: neutron/plugins/bigswitch/agent/restproxy_agent.py:151 -#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:267 +#: neutron/plugins/bigswitch/agent/restproxy_agent.py:150 +#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:266 msgid "Agent loop has new device" msgstr "" -#: neutron/plugins/bigswitch/agent/restproxy_agent.py:155 -#: neutron/plugins/nec/agent/nec_neutron_agent.py:225 -#: neutron/plugins/oneconvergence/agent/nvsd_neutron_agent.py:159 -#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:271 +#: neutron/plugins/bigswitch/agent/restproxy_agent.py:154 +#: neutron/plugins/nec/agent/nec_neutron_agent.py:223 +#: neutron/plugins/oneconvergence/agent/nvsd_neutron_agent.py:157 +#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:270 msgid "Error in agent event loop" msgstr "" -#: neutron/plugins/bigswitch/agent/restproxy_agent.py:161 -#: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:225 -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:1012 -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1458 -#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:277 +#: neutron/plugins/bigswitch/agent/restproxy_agent.py:160 +#: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:223 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:1011 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1461 +#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:276 #: neutron/plugins/sriovnicagent/sriov_nic_agent.py:285 #, python-format msgid "Loop iteration exceeded interval (%(polling_interval)s vs. %(elapsed)s)!" @@ -4928,66 +4939,66 @@ msgstr "" msgid "Logging port %(port)s on host_id %(host)s" msgstr "" -#: neutron/plugins/bigswitch/extensions/routerrule.py:28 +#: neutron/plugins/bigswitch/extensions/routerrule.py:26 #, python-format msgid "Invalid format for router rules: %(rule)s, %(reason)s" msgstr "" -#: neutron/plugins/bigswitch/extensions/routerrule.py:32 +#: neutron/plugins/bigswitch/extensions/routerrule.py:30 #, python-format msgid "" "Unable to complete rules update for %(router_id)s. The number of rules " "exceeds the maximum %(quota)s." msgstr "" -#: neutron/plugins/bigswitch/extensions/routerrule.py:49 +#: neutron/plugins/bigswitch/extensions/routerrule.py:47 #, python-format msgid "Invalid data format for router rule: '%s'" msgstr "" -#: neutron/plugins/bigswitch/extensions/routerrule.py:81 +#: neutron/plugins/bigswitch/extensions/routerrule.py:79 #, python-format msgid "Duplicate nexthop in rule '%s'" msgstr "" -#: neutron/plugins/bigswitch/extensions/routerrule.py:89 +#: neutron/plugins/bigswitch/extensions/routerrule.py:87 #, python-format msgid "Action must be either permit or deny. '%s' was provided" msgstr "" -#: neutron/plugins/bigswitch/extensions/routerrule.py:101 +#: neutron/plugins/bigswitch/extensions/routerrule.py:99 #, python-format msgid "Duplicate router rules (src,dst) found '%s'" msgstr "" -#: neutron/plugins/brocade/NeutronPlugin.py:64 -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:34 +#: neutron/plugins/brocade/NeutronPlugin.py:60 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:31 #: neutron/services/l3_router/brocade/l3_router_plugin.py:36 msgid "The address of the host to SSH to" msgstr "" -#: neutron/plugins/brocade/NeutronPlugin.py:66 -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:36 +#: neutron/plugins/brocade/NeutronPlugin.py:62 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:33 #: neutron/services/l3_router/brocade/l3_router_plugin.py:38 msgid "The SSH username to use" msgstr "" -#: neutron/plugins/brocade/NeutronPlugin.py:68 -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:38 +#: neutron/plugins/brocade/NeutronPlugin.py:64 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:35 #: neutron/services/l3_router/brocade/l3_router_plugin.py:40 msgid "The SSH password to use" msgstr "" -#: neutron/plugins/brocade/NeutronPlugin.py:70 +#: neutron/plugins/brocade/NeutronPlugin.py:66 msgid "Currently unused" msgstr "" -#: neutron/plugins/brocade/NeutronPlugin.py:74 +#: neutron/plugins/brocade/NeutronPlugin.py:70 msgid "The network interface to use when creatinga port" msgstr "" -#: neutron/plugins/brocade/NeutronPlugin.py:96 -#: neutron/plugins/hyperv/rpc_callbacks.py:42 +#: neutron/plugins/brocade/NeutronPlugin.py:92 +#: neutron/plugins/hyperv/rpc_callbacks.py:41 #: neutron/plugins/linuxbridge/lb_neutron_plugin.py:71 #: neutron/plugins/mlnx/rpc_callbacks.py:37 #: neutron/plugins/openvswitch/ovs_neutron_plugin.py:80 @@ -4995,10 +5006,10 @@ msgstr "" msgid "Device %(device)s details requested from %(agent_id)s" msgstr "" -#: neutron/plugins/brocade/NeutronPlugin.py:110 -#: neutron/plugins/brocade/NeutronPlugin.py:137 -#: neutron/plugins/hyperv/rpc_callbacks.py:58 -#: neutron/plugins/hyperv/rpc_callbacks.py:87 +#: neutron/plugins/brocade/NeutronPlugin.py:106 +#: neutron/plugins/brocade/NeutronPlugin.py:133 +#: neutron/plugins/hyperv/rpc_callbacks.py:57 +#: neutron/plugins/hyperv/rpc_callbacks.py:86 #: neutron/plugins/linuxbridge/lb_neutron_plugin.py:95 #: neutron/plugins/linuxbridge/lb_neutron_plugin.py:132 #: neutron/plugins/linuxbridge/lb_neutron_plugin.py:155 @@ -5012,591 +5023,591 @@ msgstr "" msgid "%s can not be found in database" msgstr "" -#: neutron/plugins/brocade/NeutronPlugin.py:303 -#: neutron/plugins/brocade/NeutronPlugin.py:347 -#: neutron/plugins/brocade/NeutronPlugin.py:400 -#: neutron/plugins/brocade/NeutronPlugin.py:430 +#: neutron/plugins/brocade/NeutronPlugin.py:299 +#: neutron/plugins/brocade/NeutronPlugin.py:343 +#: neutron/plugins/brocade/NeutronPlugin.py:396 +#: neutron/plugins/brocade/NeutronPlugin.py:426 msgid "Brocade NOS driver error" msgstr "" -#: neutron/plugins/brocade/NeutronPlugin.py:304 +#: neutron/plugins/brocade/NeutronPlugin.py:300 #, python-format msgid "Returning the allocated vlan (%d) to the pool" msgstr "" -#: neutron/plugins/brocade/NeutronPlugin.py:307 -#: neutron/plugins/brocade/NeutronPlugin.py:348 -#: neutron/plugins/brocade/NeutronPlugin.py:401 -#: neutron/plugins/brocade/NeutronPlugin.py:432 +#: neutron/plugins/brocade/NeutronPlugin.py:303 +#: neutron/plugins/brocade/NeutronPlugin.py:344 +#: neutron/plugins/brocade/NeutronPlugin.py:397 +#: neutron/plugins/brocade/NeutronPlugin.py:428 msgid "Brocade plugin raised exception, check logs" msgstr "" -#: neutron/plugins/brocade/NeutronPlugin.py:313 +#: neutron/plugins/brocade/NeutronPlugin.py:309 #, python-format msgid "Allocated vlan (%d) from the pool" msgstr "" -#: neutron/plugins/brocade/nos/nosdriver.py:69 +#: neutron/plugins/brocade/nos/nosdriver.py:65 #, python-format msgid "Connect failed to switch: %s" msgstr "" -#: neutron/plugins/brocade/nos/nosdriver.py:71 -#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:90 +#: neutron/plugins/brocade/nos/nosdriver.py:67 +#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:86 #, python-format msgid "Connect success to host %(host)s:%(ssh_port)d" msgstr "" -#: neutron/plugins/brocade/nos/nosdriver.py:96 -#: neutron/plugins/brocade/nos/nosdriver.py:110 -#: neutron/plugins/brocade/nos/nosdriver.py:123 -#: neutron/plugins/brocade/nos/nosdriver.py:136 -#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:331 -#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:342 +#: neutron/plugins/brocade/nos/nosdriver.py:92 +#: neutron/plugins/brocade/nos/nosdriver.py:106 +#: neutron/plugins/brocade/nos/nosdriver.py:119 +#: neutron/plugins/brocade/nos/nosdriver.py:132 +#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:327 +#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:338 #, python-format msgid "NETCONF error: %s" msgstr "" -#: neutron/plugins/cisco/network_plugin.py:89 +#: neutron/plugins/cisco/network_plugin.py:87 msgid "Plugin initialization complete" msgstr "" -#: neutron/plugins/cisco/network_plugin.py:117 +#: neutron/plugins/cisco/network_plugin.py:115 #, python-format msgid "'%(model)s' object has no attribute '%(name)s'" msgstr "" -#: neutron/plugins/cisco/network_plugin.py:134 -#: neutron/plugins/cisco/db/network_db_v2.py:32 +#: neutron/plugins/cisco/network_plugin.py:132 +#: neutron/plugins/cisco/db/network_db_v2.py:30 msgid "get_all_qoss() called" msgstr "" -#: neutron/plugins/cisco/network_plugin.py:140 +#: neutron/plugins/cisco/network_plugin.py:138 msgid "get_qos_details() called" msgstr "" -#: neutron/plugins/cisco/network_plugin.py:145 +#: neutron/plugins/cisco/network_plugin.py:143 msgid "create_qos() called" msgstr "" -#: neutron/plugins/cisco/network_plugin.py:151 +#: neutron/plugins/cisco/network_plugin.py:149 msgid "delete_qos() called" msgstr "" -#: neutron/plugins/cisco/network_plugin.py:156 +#: neutron/plugins/cisco/network_plugin.py:154 msgid "rename_qos() called" msgstr "" -#: neutron/plugins/cisco/network_plugin.py:161 +#: neutron/plugins/cisco/network_plugin.py:159 msgid "get_all_credentials() called" msgstr "" -#: neutron/plugins/cisco/network_plugin.py:167 +#: neutron/plugins/cisco/network_plugin.py:165 msgid "get_credential_details() called" msgstr "" -#: neutron/plugins/cisco/network_plugin.py:172 +#: neutron/plugins/cisco/network_plugin.py:170 msgid "rename_credential() called" msgstr "" -#: neutron/plugins/cisco/cfg_agent/cfg_agent.py:108 +#: neutron/plugins/cisco/cfg_agent/cfg_agent.py:106 msgid "" "Interval when the process_services() loop executes in seconds. This is " "when the config agent lets each service helper to process its neutron " "resources." msgstr "" -#: neutron/plugins/cisco/cfg_agent/cfg_agent.py:115 +#: neutron/plugins/cisco/cfg_agent/cfg_agent.py:113 msgid "Path of the routing service helper class." msgstr "" -#: neutron/plugins/cisco/cfg_agent/cfg_agent.py:137 +#: neutron/plugins/cisco/cfg_agent/cfg_agent.py:135 #, python-format msgid "" "Error in loading routing service helper. Class specified is %(class)s. " "Reason:%(reason)s" msgstr "" -#: neutron/plugins/cisco/cfg_agent/cfg_agent.py:148 +#: neutron/plugins/cisco/cfg_agent/cfg_agent.py:146 msgid "Cisco cfg agent started" msgstr "" -#: neutron/plugins/cisco/cfg_agent/cfg_agent.py:208 +#: neutron/plugins/cisco/cfg_agent/cfg_agent.py:206 msgid "No routing service helper loaded" msgstr "" -#: neutron/plugins/cisco/cfg_agent/cfg_agent.py:237 +#: neutron/plugins/cisco/cfg_agent/cfg_agent.py:235 #, python-format msgid "" "Invalid payload format for received RPC message " "`hosting_devices_removed`. Error is %{error}s. Payload is %(payload)s" msgstr "" -#: neutron/plugins/cisco/cfg_agent/cfg_agent.py:281 +#: neutron/plugins/cisco/cfg_agent/cfg_agent.py:279 msgid "[Agent registration] Agent successfully registered" msgstr "" -#: neutron/plugins/cisco/cfg_agent/cfg_agent.py:285 +#: neutron/plugins/cisco/cfg_agent/cfg_agent.py:283 #, python-format msgid "" "[Agent registration] Neutron server said that device manager was not " "ready. Retrying in %0.2f seconds " msgstr "" -#: neutron/plugins/cisco/cfg_agent/cfg_agent.py:290 +#: neutron/plugins/cisco/cfg_agent/cfg_agent.py:288 msgid "" "[Agent registration] Neutron server said that no device manager was " "found. Cannot continue. Exiting!" msgstr "" -#: neutron/plugins/cisco/cfg_agent/cfg_agent.py:294 +#: neutron/plugins/cisco/cfg_agent/cfg_agent.py:292 #, python-format msgid "[Agent registration] %d unsuccessful registration attempts. Exiting!" msgstr "" -#: neutron/plugins/cisco/cfg_agent/cfg_agent.py:333 +#: neutron/plugins/cisco/cfg_agent/cfg_agent.py:331 msgid "Failed sending agent report!" msgstr "" -#: neutron/plugins/cisco/cfg_agent/cfg_exceptions.py:28 +#: neutron/plugins/cisco/cfg_agent/cfg_exceptions.py:26 msgid "" "Critical device parameter missing. Failed initializing CSR1kv routing " "driver." msgstr "" -#: neutron/plugins/cisco/cfg_agent/cfg_exceptions.py:34 +#: neutron/plugins/cisco/cfg_agent/cfg_exceptions.py:32 #, python-format msgid "" "Failed connecting to CSR1kv. Reason: %(reason)s. Connection params are " "User:%(user)s, Host:%(host)s, Port:%(port)s, Device timeout:%(timeout)s." msgstr "" -#: neutron/plugins/cisco/cfg_agent/cfg_exceptions.py:41 +#: neutron/plugins/cisco/cfg_agent/cfg_exceptions.py:39 #, python-format msgid "Error executing snippet:%(snippet)s. ErrorType:%(type)s ErrorTag:%(tag)s." msgstr "" -#: neutron/plugins/cisco/cfg_agent/cfg_exceptions.py:47 +#: neutron/plugins/cisco/cfg_agent/cfg_exceptions.py:45 #, python-format msgid "" "Data in attribute: %(attribute)s does not correspond to expected value. " "Value received is %(value)s. " msgstr "" -#: neutron/plugins/cisco/cfg_agent/cfg_exceptions.py:52 +#: neutron/plugins/cisco/cfg_agent/cfg_exceptions.py:50 #, python-format msgid "Driver %(driver)s does not exist." msgstr "" -#: neutron/plugins/cisco/cfg_agent/cfg_exceptions.py:56 +#: neutron/plugins/cisco/cfg_agent/cfg_exceptions.py:54 #, python-format msgid "Driver not found for resource id:%(id)s." msgstr "" -#: neutron/plugins/cisco/cfg_agent/cfg_exceptions.py:60 +#: neutron/plugins/cisco/cfg_agent/cfg_exceptions.py:58 #, python-format msgid "Driver cannot be set for missing parameter:%(p)s." msgstr "" -#: neutron/plugins/cisco/cfg_agent/device_status.py:30 +#: neutron/plugins/cisco/cfg_agent/device_status.py:28 msgid "Time in seconds for connecting to a hosting device" msgstr "" -#: neutron/plugins/cisco/cfg_agent/device_status.py:32 +#: neutron/plugins/cisco/cfg_agent/device_status.py:30 msgid "" "The time in seconds until a backlogged hosting device is presumed dead. " "This value should be set up high enough to recover from a period of " "connectivity loss or high load when the device may not be responding." msgstr "" -#: neutron/plugins/cisco/cfg_agent/device_status.py:59 +#: neutron/plugins/cisco/cfg_agent/device_status.py:57 #, python-format msgid "Cannot ping ip address: %s" msgstr "" -#: neutron/plugins/cisco/cfg_agent/device_status.py:143 +#: neutron/plugins/cisco/cfg_agent/device_status.py:141 #, python-format msgid "" "Hosting device: %(hd_id)s @ %(ip)s hasn't passed minimum boot time. " "Skipping it. " msgstr "" -#: neutron/plugins/cisco/cfg_agent/device_status.py:147 +#: neutron/plugins/cisco/cfg_agent/device_status.py:145 #, python-format msgid "Checking hosting device: %(hd_id)s @ %(ip)s for reachability." msgstr "" -#: neutron/plugins/cisco/cfg_agent/device_status.py:154 +#: neutron/plugins/cisco/cfg_agent/device_status.py:152 #, python-format msgid "Hosting device: %(hd_id)s @ %(ip)s is now reachable. Adding it to response" msgstr "" -#: neutron/plugins/cisco/cfg_agent/device_status.py:158 +#: neutron/plugins/cisco/cfg_agent/device_status.py:156 #, python-format msgid "Hosting device: %(hd_id)s @ %(ip)s still not reachable " msgstr "" -#: neutron/plugins/cisco/cfg_agent/device_drivers/driver_mgr.py:80 +#: neutron/plugins/cisco/cfg_agent/device_drivers/driver_mgr.py:79 #, python-format msgid "" "Error loading cfg agent driver %(driver)s for hosting device template " "%(t_name)s(%(t_id)s)" msgstr "" -#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:64 +#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:62 #, python-format msgid "Missing device parameter:%s. Aborting CSR1kvRoutingDriver initialization" msgstr "" -#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:230 +#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:228 #, python-format msgid "Unknown route command %s" msgstr "" -#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:322 +#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:320 #, python-format msgid "Interfaces:%s" msgstr "" -#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:337 +#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:335 #, python-format msgid "IP Address:%s" msgstr "" -#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:339 +#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:337 #, python-format msgid "Cannot find interface: %s" msgstr "" -#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:374 +#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:372 #, python-format msgid "Enabled interface %s " msgstr "" -#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:393 +#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:391 #, python-format msgid "VRFs:%s" msgstr "" -#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:438 +#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:436 #, python-format msgid "Mismatch in ACL configuration for %s" msgstr "" -#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:467 +#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:465 #, python-format msgid "VRF %s successfully created" msgstr "" -#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:469 +#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:467 #, python-format msgid "Failed creating VRF %s" msgstr "" -#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:477 +#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:475 #, python-format msgid "VRF %s removed" msgstr "" -#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:479 -#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:483 -#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:496 +#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:477 +#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:481 +#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:494 #, python-format msgid "VRF %s not present" msgstr "" -#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:681 +#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:679 #, python-format msgid "%s successfully executed" msgstr "" -#: neutron/plugins/cisco/cfg_agent/service_helpers/routing_svc_helper.py:229 +#: neutron/plugins/cisco/cfg_agent/service_helpers/routing_svc_helper.py:227 msgid "Failed processing routers" msgstr "" -#: neutron/plugins/cisco/cfg_agent/service_helpers/routing_svc_helper.py:290 +#: neutron/plugins/cisco/cfg_agent/service_helpers/routing_svc_helper.py:288 msgid "RPC Error in fetching routers from plugin" msgstr "" -#: neutron/plugins/cisco/cfg_agent/service_helpers/routing_svc_helper.py:377 +#: neutron/plugins/cisco/cfg_agent/service_helpers/routing_svc_helper.py:375 #, python-format msgid "Router: %(id)s is on an unreachable hosting device. " msgstr "" -#: neutron/plugins/cisco/cfg_agent/service_helpers/routing_svc_helper.py:386 +#: neutron/plugins/cisco/cfg_agent/service_helpers/routing_svc_helper.py:384 #, python-format msgid "Key Error, missing key: %s" msgstr "" -#: neutron/plugins/cisco/cfg_agent/service_helpers/routing_svc_helper.py:390 +#: neutron/plugins/cisco/cfg_agent/service_helpers/routing_svc_helper.py:388 #, python-format msgid "Driver Exception on router:%(id)s. Error is %(e)s" msgstr "" -#: neutron/plugins/cisco/cfg_agent/service_helpers/routing_svc_helper.py:401 +#: neutron/plugins/cisco/cfg_agent/service_helpers/routing_svc_helper.py:399 #, python-format msgid "Exception in processing routers on device:%s" msgstr "" -#: neutron/plugins/cisco/cfg_agent/service_helpers/routing_svc_helper.py:544 +#: neutron/plugins/cisco/cfg_agent/service_helpers/routing_svc_helper.py:542 #, python-format msgid "Info for router %s was not found. Skipping router removal" msgstr "" -#: neutron/plugins/cisco/cfg_agent/service_helpers/routing_svc_helper.py:559 +#: neutron/plugins/cisco/cfg_agent/service_helpers/routing_svc_helper.py:557 #, python-format msgid "" "Router remove for router_id: %s was incomplete. Adding the router to " "removed_routers list" msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:25 +#: neutron/plugins/cisco/common/cisco_exceptions.py:22 #, python-format msgid "Segmentation ID for network %(net_id)s is not found." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:30 +#: neutron/plugins/cisco/common/cisco_exceptions.py:27 msgid "" "Unable to complete operation. No more dynamic NICs are available in the " "system." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:36 +#: neutron/plugins/cisco/common/cisco_exceptions.py:33 #, python-format msgid "" "NetworkVlanBinding for %(vlan_id)s and network %(network_id)s already " "exists." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:42 +#: neutron/plugins/cisco/common/cisco_exceptions.py:39 #, python-format msgid "Vlan ID %(vlan_id)s not found." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:47 +#: neutron/plugins/cisco/common/cisco_exceptions.py:44 msgid "" "Unable to complete operation. VLAN ID exists outside of the configured " "network segment range." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:53 +#: neutron/plugins/cisco/common/cisco_exceptions.py:50 msgid "No Vlan ID available." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:58 +#: neutron/plugins/cisco/common/cisco_exceptions.py:55 #, python-format msgid "QoS level %(qos_id)s could not be found for tenant %(tenant_id)s." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:64 +#: neutron/plugins/cisco/common/cisco_exceptions.py:61 #, python-format msgid "QoS level with name %(qos_name)s already exists for tenant %(tenant_id)s." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:70 +#: neutron/plugins/cisco/common/cisco_exceptions.py:67 #: neutron/plugins/ml2/drivers/cisco/nexus/exceptions.py:23 #, python-format msgid "Credential %(credential_id)s could not be found." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:75 +#: neutron/plugins/cisco/common/cisco_exceptions.py:72 #: neutron/plugins/ml2/drivers/cisco/nexus/exceptions.py:28 #, python-format msgid "Credential %(credential_name)s could not be found." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:80 +#: neutron/plugins/cisco/common/cisco_exceptions.py:77 #, python-format msgid "Credential %(credential_name)s already exists." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:85 +#: neutron/plugins/cisco/common/cisco_exceptions.py:82 #, python-format msgid "Provider network %s already exists" msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:90 +#: neutron/plugins/cisco/common/cisco_exceptions.py:87 #: neutron/plugins/ml2/drivers/cisco/nexus/exceptions.py:39 #, python-format msgid "Connection to %(host)s is not configured." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:95 +#: neutron/plugins/cisco/common/cisco_exceptions.py:92 #: neutron/plugins/ml2/drivers/cisco/nexus/exceptions.py:44 #, python-format msgid "Unable to connect to Nexus %(nexus_host)s. Reason: %(exc)s." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:100 +#: neutron/plugins/cisco/common/cisco_exceptions.py:97 #: neutron/plugins/ml2/drivers/cisco/nexus/exceptions.py:49 #, python-format msgid "Failed to configure Nexus: %(config)s. Reason: %(exc)s." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:105 +#: neutron/plugins/cisco/common/cisco_exceptions.py:102 #, python-format msgid "Nexus Port Binding (%(filters)s) is not present." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:114 +#: neutron/plugins/cisco/common/cisco_exceptions.py:111 #: neutron/plugins/ml2/drivers/cisco/nexus/exceptions.py:69 msgid "No usable Nexus switch found to create SVI interface." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:119 +#: neutron/plugins/cisco/common/cisco_exceptions.py:116 #, python-format msgid "PortVnic Binding %(port_id)s already exists." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:124 +#: neutron/plugins/cisco/common/cisco_exceptions.py:121 #, python-format msgid "PortVnic Binding %(port_id)s is not present." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:129 +#: neutron/plugins/cisco/common/cisco_exceptions.py:126 #: neutron/plugins/ml2/drivers/cisco/nexus/exceptions.py:74 msgid "No subnet_id specified for router gateway." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:134 +#: neutron/plugins/cisco/common/cisco_exceptions.py:131 #: neutron/plugins/ml2/drivers/cisco/nexus/exceptions.py:79 #, python-format msgid "Subnet %(subnet_id)s has an interface on %(router_id)s." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:139 +#: neutron/plugins/cisco/common/cisco_exceptions.py:136 #: neutron/plugins/ml2/drivers/cisco/nexus/exceptions.py:84 msgid "Nexus hardware router gateway only uses Subnet Ids." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:143 +#: neutron/plugins/cisco/common/cisco_exceptions.py:140 #, python-format msgid "" "Unable to unplug the attachment %(att_id)s from port %(port_id)s for " "network %(net_id)s. The attachment %(att_id)s does not exist." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:150 +#: neutron/plugins/cisco/common/cisco_exceptions.py:147 #, python-format msgid "Policy Profile %(profile_id)s already exists." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:156 +#: neutron/plugins/cisco/common/cisco_exceptions.py:153 #, python-format msgid "Policy Profile %(profile_id)s could not be found." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:161 +#: neutron/plugins/cisco/common/cisco_exceptions.py:158 #, python-format msgid "Network Profile %(profile_id)s already exists." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:167 +#: neutron/plugins/cisco/common/cisco_exceptions.py:164 #, python-format msgid "Network Profile %(profile)s could not be found." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:172 +#: neutron/plugins/cisco/common/cisco_exceptions.py:169 #, python-format msgid "" "One or more network segments belonging to network profile %(profile)s is " "in use." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:178 +#: neutron/plugins/cisco/common/cisco_exceptions.py:175 #, python-format msgid "" "No more segments available in network segment pool " "%(network_profile_name)s." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:184 +#: neutron/plugins/cisco/common/cisco_exceptions.py:181 #, python-format msgid "VM Network %(name)s could not be found." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:189 +#: neutron/plugins/cisco/common/cisco_exceptions.py:186 #, python-format msgid "Unable to create the network. The VXLAN ID %(vxlan_id)s is in use." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:195 +#: neutron/plugins/cisco/common/cisco_exceptions.py:192 #, python-format msgid "Vxlan ID %(vxlan_id)s not found." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:200 +#: neutron/plugins/cisco/common/cisco_exceptions.py:197 msgid "" "Unable to complete operation. VXLAN ID exists outside of the configured " "network segment range." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:206 +#: neutron/plugins/cisco/common/cisco_exceptions.py:203 #, python-format msgid "Connection to VSM failed: %(reason)s." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:211 +#: neutron/plugins/cisco/common/cisco_exceptions.py:208 #, python-format msgid "Internal VSM Error: %(reason)s." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:216 +#: neutron/plugins/cisco/common/cisco_exceptions.py:213 #, python-format msgid "Network Binding for network %(network_id)s could not be found." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:222 +#: neutron/plugins/cisco/common/cisco_exceptions.py:219 #, python-format msgid "Port Binding for port %(port_id)s could not be found." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:228 +#: neutron/plugins/cisco/common/cisco_exceptions.py:225 #, python-format msgid "Profile-Tenant binding for profile %(profile_id)s could not be found." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:234 +#: neutron/plugins/cisco/common/cisco_exceptions.py:231 msgid "No service cluster found to perform multi-segment bridging." msgstr "" -#: neutron/plugins/cisco/common/cisco_faults.py:72 +#: neutron/plugins/cisco/common/cisco_faults.py:70 msgid "Port not Found" msgstr "" -#: neutron/plugins/cisco/common/cisco_faults.py:73 +#: neutron/plugins/cisco/common/cisco_faults.py:71 msgid "Unable to find a port with the specified identifier." msgstr "" -#: neutron/plugins/cisco/common/cisco_faults.py:87 +#: neutron/plugins/cisco/common/cisco_faults.py:85 msgid "Credential Not Found" msgstr "" -#: neutron/plugins/cisco/common/cisco_faults.py:88 +#: neutron/plugins/cisco/common/cisco_faults.py:86 msgid "Unable to find a Credential with the specified identifier." msgstr "" -#: neutron/plugins/cisco/common/cisco_faults.py:103 +#: neutron/plugins/cisco/common/cisco_faults.py:101 msgid "QoS Not Found" msgstr "" -#: neutron/plugins/cisco/common/cisco_faults.py:104 +#: neutron/plugins/cisco/common/cisco_faults.py:102 msgid "Unable to find a QoS with the specified identifier." msgstr "" -#: neutron/plugins/cisco/common/cisco_faults.py:119 +#: neutron/plugins/cisco/common/cisco_faults.py:117 msgid "Nova tenant Not Found" msgstr "" -#: neutron/plugins/cisco/common/cisco_faults.py:120 +#: neutron/plugins/cisco/common/cisco_faults.py:118 msgid "Unable to find a Novatenant with the specified identifier." msgstr "" -#: neutron/plugins/cisco/common/cisco_faults.py:135 +#: neutron/plugins/cisco/common/cisco_faults.py:133 msgid "Requested State Invalid" msgstr "" -#: neutron/plugins/cisco/common/cisco_faults.py:136 +#: neutron/plugins/cisco/common/cisco_faults.py:134 msgid "Unable to update port state with specified value." msgstr "" @@ -5697,633 +5708,633 @@ msgstr "" msgid "Some config files were not parsed properly" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:330 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:325 #, python-format msgid "seg_min %(seg_min)s, seg_max %(seg_max)s" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:561 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:556 #, python-format msgid "Reserving specific vlan %(vlan)s on physical network %(network)s from pool" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:586 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:581 #, python-format msgid "vlan_id %(vlan)s on physical network %(network)s not found" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:600 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:595 #, python-format msgid "Unreasonable vxlan ID range %(vxlan_min)s - %(vxlan_max)s" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:642 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:637 #, python-format msgid "Reserving specific vxlan %s from pool" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:663 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:658 #, python-format msgid "vxlan_id %s not found" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:772 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:767 msgid "create_network_profile()" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:794 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:789 msgid "delete_network_profile()" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:808 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:803 msgid "update_network_profile()" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:817 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:812 msgid "get_network_profile()" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:842 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:837 msgid "create_policy_profile()" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:853 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:848 msgid "delete_policy_profile()" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:862 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:857 msgid "update_policy_profile()" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:871 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:866 msgid "get_policy_profile()" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:890 -#: neutron/plugins/cisco/db/n1kv_db_v2.py:944 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:885 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:939 msgid "Invalid profile type" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:908 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:903 msgid "_profile_binding_exists()" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:917 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:912 msgid "get_profile_binding()" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:927 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:922 msgid "delete_profile_binding()" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:934 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:929 #, python-format msgid "" "Profile-Tenant binding missing for profile ID %(profile_id)s and tenant " "ID %(tenant_id)s" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:965 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:960 msgid "_get_profile_bindings()" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1121 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:1116 msgid "segment_range not required for TRUNK" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1127 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:1122 msgid "multicast_ip_range not required" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1254 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:1249 msgid "Invalid segment range. example range: 500-550" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1267 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:1262 msgid "Invalid multicast ip address range. example range: 224.1.1.1-224.1.1.10" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1274 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:1269 #, python-format msgid "%s is not a valid multicast ip address" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1278 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:1273 #, python-format msgid "%s is reserved multicast ip address" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1282 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:1277 #, python-format msgid "%s is not a valid ip address" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1286 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:1281 #, python-format msgid "" "Invalid multicast IP range '%(min_ip)s-%(max_ip)s': Range should be from " "low address to high address" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1299 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:1294 msgid "Arguments segment_type missing for network profile" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1308 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:1303 msgid "segment_type should either be vlan, overlay, multi-segment or trunk" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1314 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:1309 msgid "Argument physical_network missing for network profile" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1320 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:1315 msgid "segment_range not required for trunk" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1326 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:1321 msgid "Argument sub_type missing for network profile" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1333 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:1328 msgid "Argument segment_range missing for network profile" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1344 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:1339 msgid "Argument multicast_ip_range missing for VXLAN multicast network profile" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1372 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:1367 #, python-format msgid "Segment range is invalid, select from %(min)s-%(nmin)s, %(nmax)s-%(max)s" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1390 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:1385 #, python-format msgid "segment range is invalid. Valid range is : %(min)s-%(max)s" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1404 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:1399 #, python-format msgid "NetworkProfile name %s already exists" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1421 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:1416 msgid "Segment range overlaps with another profile" msgstr "" -#: neutron/plugins/cisco/db/network_db_v2.py:40 +#: neutron/plugins/cisco/db/network_db_v2.py:38 msgid "get_qos() called" msgstr "" -#: neutron/plugins/cisco/db/network_db_v2.py:53 +#: neutron/plugins/cisco/db/network_db_v2.py:51 msgid "add_qos() called" msgstr "" -#: neutron/plugins/cisco/db/l3/device_handling_db.py:44 +#: neutron/plugins/cisco/db/l3/device_handling_db.py:42 msgid "Name of the L3 admin tenant." msgstr "" -#: neutron/plugins/cisco/db/l3/device_handling_db.py:46 +#: neutron/plugins/cisco/db/l3/device_handling_db.py:44 msgid "" "Name of management network for device configuration. Default value is " "osn_mgmt_nw" msgstr "" -#: neutron/plugins/cisco/db/l3/device_handling_db.py:49 +#: neutron/plugins/cisco/db/l3/device_handling_db.py:47 msgid "" "Default security group applied on management port. Default value is " "mgmt_sec_grp." msgstr "" -#: neutron/plugins/cisco/db/l3/device_handling_db.py:52 +#: neutron/plugins/cisco/db/l3/device_handling_db.py:50 msgid "Seconds of no status update until a cfg agent is considered down." msgstr "" -#: neutron/plugins/cisco/db/l3/device_handling_db.py:55 +#: neutron/plugins/cisco/db/l3/device_handling_db.py:53 msgid "Ensure that Nova is running before attempting to create any VM." msgstr "" -#: neutron/plugins/cisco/db/l3/device_handling_db.py:61 +#: neutron/plugins/cisco/db/l3/device_handling_db.py:59 msgid "Name of Glance image for CSR1kv." msgstr "" -#: neutron/plugins/cisco/db/l3/device_handling_db.py:63 +#: neutron/plugins/cisco/db/l3/device_handling_db.py:61 msgid "UUID of Nova flavor for CSR1kv." msgstr "" -#: neutron/plugins/cisco/db/l3/device_handling_db.py:67 +#: neutron/plugins/cisco/db/l3/device_handling_db.py:65 msgid "Plugging driver for CSR1kv." msgstr "" -#: neutron/plugins/cisco/db/l3/device_handling_db.py:71 +#: neutron/plugins/cisco/db/l3/device_handling_db.py:69 msgid "Hosting device driver for CSR1kv." msgstr "" -#: neutron/plugins/cisco/db/l3/device_handling_db.py:75 +#: neutron/plugins/cisco/db/l3/device_handling_db.py:73 msgid "Config agent driver for CSR1kv." msgstr "" -#: neutron/plugins/cisco/db/l3/device_handling_db.py:77 +#: neutron/plugins/cisco/db/l3/device_handling_db.py:75 msgid "Booting time in seconds before a CSR1kv becomes operational." msgstr "" -#: neutron/plugins/cisco/db/l3/device_handling_db.py:80 +#: neutron/plugins/cisco/db/l3/device_handling_db.py:78 msgid "Username to use for CSR1kv configurations." msgstr "" -#: neutron/plugins/cisco/db/l3/device_handling_db.py:82 +#: neutron/plugins/cisco/db/l3/device_handling_db.py:80 msgid "Password to use for CSR1kv configurations." msgstr "" -#: neutron/plugins/cisco/db/l3/device_handling_db.py:124 +#: neutron/plugins/cisco/db/l3/device_handling_db.py:122 #, python-format msgid "No tenant with a name or ID of %s exists." msgstr "" -#: neutron/plugins/cisco/db/l3/device_handling_db.py:127 +#: neutron/plugins/cisco/db/l3/device_handling_db.py:125 #, python-format msgid "Multiple tenants matches found for %s" msgstr "" -#: neutron/plugins/cisco/db/l3/device_handling_db.py:146 +#: neutron/plugins/cisco/db/l3/device_handling_db.py:144 msgid "The virtual management network has no subnet. Please assign one." msgstr "" -#: neutron/plugins/cisco/db/l3/device_handling_db.py:150 +#: neutron/plugins/cisco/db/l3/device_handling_db.py:148 #, python-format msgid "The virtual management network has %d subnets. The first one will be used." msgstr "" -#: neutron/plugins/cisco/db/l3/device_handling_db.py:156 +#: neutron/plugins/cisco/db/l3/device_handling_db.py:154 msgid "" "The virtual management network does not have unique name. Please ensure " "that it is." msgstr "" -#: neutron/plugins/cisco/db/l3/device_handling_db.py:160 +#: neutron/plugins/cisco/db/l3/device_handling_db.py:158 msgid "There is no virtual management network. Please create one." msgstr "" -#: neutron/plugins/cisco/db/l3/device_handling_db.py:182 +#: neutron/plugins/cisco/db/l3/device_handling_db.py:180 msgid "" "The security group for the virtual management network does not have " "unique name. Please ensure that it is." msgstr "" -#: neutron/plugins/cisco/db/l3/device_handling_db.py:187 +#: neutron/plugins/cisco/db/l3/device_handling_db.py:185 msgid "" "There is no security group for the virtual management network. Please " "create one." msgstr "" -#: neutron/plugins/cisco/db/l3/device_handling_db.py:201 +#: neutron/plugins/cisco/db/l3/device_handling_db.py:199 msgid "Error loading hosting device driver" msgstr "" -#: neutron/plugins/cisco/db/l3/device_handling_db.py:214 +#: neutron/plugins/cisco/db/l3/device_handling_db.py:212 msgid "Error loading plugging driver" msgstr "" -#: neutron/plugins/cisco/db/l3/device_handling_db.py:330 +#: neutron/plugins/cisco/db/l3/device_handling_db.py:328 #, python-format msgid "Cisco cfg agent %s is not alive" msgstr "" -#: neutron/plugins/cisco/db/l3/device_handling_db.py:367 +#: neutron/plugins/cisco/db/l3/device_handling_db.py:365 msgid "" "Not all Nova services are up and running. Skipping this CSR1kv vm create " "request." msgstr "" -#: neutron/plugins/cisco/db/l3/device_handling_db.py:404 +#: neutron/plugins/cisco/db/l3/device_handling_db.py:402 msgid "Created a CSR1kv hosting device VM" msgstr "" -#: neutron/plugins/cisco/db/l3/device_handling_db.py:422 +#: neutron/plugins/cisco/db/l3/device_handling_db.py:420 #, python-format msgid "Failed to delete hosting device %s service VM. Will un-register it anyway." msgstr "" -#: neutron/plugins/cisco/db/l3/device_handling_db.py:463 +#: neutron/plugins/cisco/db/l3/device_handling_db.py:461 msgid "There are no active Cisco cfg agents" msgstr "" -#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:45 +#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:43 msgid "" "Time in seconds between renewed scheduling attempts of non-scheduled " "routers." msgstr "" -#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:53 +#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:51 msgid "Router could not be created due to internal error." msgstr "" -#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:57 +#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:55 msgid "Internal error during router processing." msgstr "" -#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:61 +#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:59 #, python-format msgid "Could not get binding information for router %(router_id)s." msgstr "" -#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:316 +#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:314 #, python-format msgid "Attempting to schedule router %s." msgstr "" -#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:328 +#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:326 #, python-format msgid "Successfully scheduled router %(r_id)s to hosting device %(d_id)s" msgstr "" -#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:335 +#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:333 #, python-format msgid "Un-schedule router %s." msgstr "" -#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:348 +#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:346 #, python-format msgid "Backlogging router %s for renewed scheduling attempt later" msgstr "" -#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:355 +#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:353 #, python-format msgid "Router %s removed from backlog" msgstr "" -#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:365 +#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:363 msgid "Processing router (scheduling) backlog" msgstr "" -#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:385 +#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:383 msgid "Synchronizing router (scheduling) backlog" msgstr "" -#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:408 +#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:406 #, python-format msgid "DB inconsistency: No type and hosting info associated with router %s" msgstr "" -#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:413 +#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:411 #, python-format msgid "DB inconsistency: Multiple type and hosting info associated with router %s" msgstr "" -#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:436 +#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:434 #, python-format msgid "DB inconsistency: No hosting info associated with router %s" msgstr "" -#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:513 +#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:511 #, python-format msgid "Failed to allocate hosting port for port %s" msgstr "" -#: neutron/plugins/cisco/l3/service_vm_lib.py:34 +#: neutron/plugins/cisco/l3/service_vm_lib.py:30 msgid "Path to templates for hosting devices." msgstr "" -#: neutron/plugins/cisco/l3/service_vm_lib.py:37 +#: neutron/plugins/cisco/l3/service_vm_lib.py:33 msgid "Path to config drive files for service VM instances." msgstr "" -#: neutron/plugins/cisco/l3/service_vm_lib.py:71 +#: neutron/plugins/cisco/l3/service_vm_lib.py:67 #, python-format msgid "Failure determining running Nova services: %s" msgstr "" -#: neutron/plugins/cisco/l3/service_vm_lib.py:88 +#: neutron/plugins/cisco/l3/service_vm_lib.py:84 #, python-format msgid "Failed to get status of service VM instance %(id)s, due to %(err)s" msgstr "" -#: neutron/plugins/cisco/l3/service_vm_lib.py:104 +#: neutron/plugins/cisco/l3/service_vm_lib.py:100 #, python-format msgid "Failure finding needed Nova resource: %s" msgstr "" -#: neutron/plugins/cisco/l3/service_vm_lib.py:126 +#: neutron/plugins/cisco/l3/service_vm_lib.py:122 #, python-format msgid "Failed to create service VM instance: %s" msgstr "" -#: neutron/plugins/cisco/l3/service_vm_lib.py:142 +#: neutron/plugins/cisco/l3/service_vm_lib.py:138 #, python-format msgid "Failed to delete service VM instance %(id)s, due to %(err)s" msgstr "" -#: neutron/plugins/cisco/l3/hosting_device_drivers/csr1kv_hd_driver.py:34 +#: neutron/plugins/cisco/l3/hosting_device_drivers/csr1kv_hd_driver.py:32 msgid "CSR1kv configdrive template file." msgstr "" -#: neutron/plugins/cisco/l3/hosting_device_drivers/csr1kv_hd_driver.py:68 +#: neutron/plugins/cisco/l3/hosting_device_drivers/csr1kv_hd_driver.py:66 #, python-format msgid "Failed to create config file: %s. Trying toclean up." msgstr "" -#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:42 +#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:40 msgid "Name of N1kv port profile for management ports." msgstr "" -#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:44 +#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:42 msgid "" "Name of N1kv port profile for T1 ports (i.e., ports carrying traffic from" " VXLAN segmented networks)." msgstr "" -#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:47 +#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:45 msgid "" "Name of N1kv port profile for T2 ports (i.e., ports carrying traffic from" " VLAN segmented networks)." msgstr "" -#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:50 +#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:48 msgid "" "Name of N1kv network profile for T1 networks (i.e., trunk networks for " "VXLAN segmented traffic)." msgstr "" -#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:53 +#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:51 msgid "" "Name of N1kv network profile for T2 networks (i.e., trunk networks for " "VLAN segmented traffic)." msgstr "" -#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:109 +#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:107 #, python-format msgid "" "The %(resource)s %(name)s does not have unique name. Please refer to " "admin guide and create one." msgstr "" -#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:114 +#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:112 #, python-format msgid "" "There is no %(resource)s %(name)s. Please refer to admin guide and create" " one." msgstr "" -#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:214 +#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:212 #, python-format msgid "Error %s when creating service VM resources. Cleaning up." msgstr "" -#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:285 +#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:283 #, python-format msgid "Aborting resource deletion after %d unsuccessful attempts" msgstr "" -#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:291 +#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:289 #, python-format msgid "Resource deletion attempt %d starting" msgstr "" -#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:310 +#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:308 msgid "Resource deletion succeeded" msgstr "" -#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:321 +#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:319 #, python-format msgid "Failed to delete %(resource_name) %(net_id)s for service vm due to %(err)s" msgstr "" -#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:413 +#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:411 #, python-format msgid "Updating trunk: %(action)s VLAN %(tag)d for network_id %(id)s" msgstr "" -#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:453 +#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:451 #, python-format msgid "Hosting port DB inconsistency for hosting device %s" msgstr "" -#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:460 +#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:458 #, python-format msgid "" "Attempt %(attempt)d to find trunk ports for hosting device %(hd_id)s " "failed. Trying again in %(time)d seconds." msgstr "" -#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:506 +#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:504 #, python-format msgid "Port trunk pair DB inconsistency for port %s" msgstr "" -#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:79 +#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:75 #, python-format msgid "%(module)s.%(name)s init done" msgstr "" -#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:120 +#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:116 #, python-format msgid "No %s Plugin loaded" msgstr "" -#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:121 +#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:117 #, python-format msgid "%(plugin_key)s: %(function_name)s with args %(args)s ignored" msgstr "" -#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:145 +#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:141 msgid "create_network() called" msgstr "" -#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:158 +#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:154 #, python-format msgid "Provider network added to DB: %(network_id)s, %(vlan_id)s" msgstr "" -#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:169 +#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:165 msgid "update_network() called" msgstr "" -#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:193 +#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:189 #, python-format msgid "Provider network removed from DB: %s" msgstr "" -#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:235 +#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:231 msgid "create_port() called" msgstr "" -#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:261 +#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:257 msgid "update_port() called" msgstr "" -#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:273 +#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:269 msgid "delete_port() called" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_client.py:226 +#: neutron/plugins/cisco/n1kv/n1kv_client.py:223 msgid "Logical network" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_client.py:251 +#: neutron/plugins/cisco/n1kv/n1kv_client.py:248 msgid "network_segment_pool" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_client.py:298 +#: neutron/plugins/cisco/n1kv/n1kv_client.py:295 msgid "Invalid input for CIDR" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_client.py:440 +#: neutron/plugins/cisco/n1kv/n1kv_client.py:437 #, python-format msgid "req: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_client.py:450 +#: neutron/plugins/cisco/n1kv/n1kv_client.py:447 #, python-format msgid "status_code %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_client.py:458 +#: neutron/plugins/cisco/n1kv/n1kv_client.py:455 #, python-format msgid "VSM: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:129 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:124 msgid "_setup_vsm" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:148 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:143 msgid "_populate_policy_profiles" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:175 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:170 msgid "No policy profile populated from VSM" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:212 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:207 #: neutron/plugins/linuxbridge/lb_neutron_plugin.py:342 -#: neutron/plugins/mlnx/mlnx_plugin.py:226 neutron/plugins/nuage/plugin.py:413 +#: neutron/plugins/mlnx/mlnx_plugin.py:226 neutron/plugins/nuage/plugin.py:415 #: neutron/plugins/openvswitch/ovs_neutron_plugin.py:414 msgid "provider:network_type required" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:216 -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:230 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:211 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:225 #: neutron/plugins/linuxbridge/lb_neutron_plugin.py:352 -#: neutron/plugins/mlnx/mlnx_plugin.py:256 neutron/plugins/nuage/plugin.py:423 +#: neutron/plugins/mlnx/mlnx_plugin.py:256 neutron/plugins/nuage/plugin.py:425 #: neutron/plugins/openvswitch/ovs_neutron_plugin.py:424 #: neutron/plugins/openvswitch/ovs_neutron_plugin.py:443 msgid "provider:segmentation_id required" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:219 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:214 msgid "provider:segmentation_id out of range (1 through 4094)" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:224 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:219 msgid "provider:physical_network specified for Overlay network" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:233 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:228 msgid "provider:segmentation_id out of range (5000+)" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:237 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:232 #: neutron/plugins/linuxbridge/lb_neutron_plugin.py:374 #: neutron/plugins/mlnx/mlnx_plugin.py:242 #: neutron/plugins/openvswitch/ovs_neutron_plugin.py:459 @@ -6331,7 +6342,7 @@ msgstr "" msgid "provider:network_type %s not supported" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:248 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:243 #: neutron/plugins/linuxbridge/lb_neutron_plugin.py:380 #: neutron/plugins/mlnx/mlnx_plugin.py:282 #: neutron/plugins/openvswitch/ovs_neutron_plugin.py:465 @@ -6339,166 +6350,166 @@ msgstr "" msgid "Unknown provider:physical_network %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:252 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:247 #: neutron/plugins/linuxbridge/lb_neutron_plugin.py:386 -#: neutron/plugins/mlnx/mlnx_plugin.py:288 neutron/plugins/nuage/plugin.py:420 +#: neutron/plugins/mlnx/mlnx_plugin.py:288 neutron/plugins/nuage/plugin.py:422 #: neutron/plugins/openvswitch/ovs_neutron_plugin.py:471 msgid "provider:physical_network required" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:430 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:425 #, python-format msgid "_populate_member_segments %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:469 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:464 msgid "Invalid pairing supplied" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:474 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:469 #, python-format msgid "Invalid UUID supplied in %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:475 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:470 msgid "Invalid UUID supplied" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:504 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:499 #, python-format msgid "Cannot add a trunk segment '%s' as a member of another trunk segment" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:509 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:504 #, python-format msgid "Cannot add vlan segment '%s' as a member of a vxlan trunk segment" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:515 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:510 #, python-format msgid "Network UUID '%s' belongs to a different physical network" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:520 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:515 #, python-format msgid "Cannot add vxlan segment '%s' as a member of a vlan trunk segment" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:525 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:520 #, python-format msgid "Vlan tag '%s' is out of range" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:528 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:523 #, python-format msgid "Vlan tag '%s' is not an integer value" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:533 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:528 #, python-format msgid "%s is not a valid uuid" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:580 -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:583 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:575 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:578 msgid "n1kv:profile_id does not exist" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:595 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:590 msgid "_send_create_logical_network" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:618 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:613 #, python-format msgid "_send_create_network_profile_request: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:628 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:623 #, python-format msgid "_send_update_network_profile_request: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:638 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:633 #, python-format msgid "_send_delete_network_profile_request: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:653 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:648 #, python-format msgid "_send_create_network_request: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:685 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:680 #, python-format msgid "_send_update_network_request: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:707 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:702 #, python-format msgid "add_segments=%s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:708 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:703 #, python-format msgid "del_segments=%s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:732 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:727 #, python-format msgid "_send_delete_network_request: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:772 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:767 #, python-format msgid "_send_create_subnet_request: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:782 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:777 #, python-format msgid "_send_update_subnet_request: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:793 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:788 #, python-format msgid "_send_delete_subnet_request: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:819 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:814 #, python-format msgid "_send_create_port_request: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:836 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:831 #, python-format msgid "_send_update_port_request: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:852 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:847 #, python-format msgid "_send_delete_port_request: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:883 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:878 #, python-format msgid "Create network: profile_id=%s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:891 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:886 #, python-format msgid "" "Physical_network %(phy_net)s, seg_type %(net_type)s, seg_id %(seg_id)s, " "multicast_ip %(multicast_ip)s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:903 -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:913 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:898 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:908 #, python-format msgid "Seg list %s " msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:954 -#: neutron/plugins/hyperv/hyperv_neutron_plugin.py:255 -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:198 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:949 +#: neutron/plugins/hyperv/hyperv_neutron_plugin.py:254 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:196 #: neutron/plugins/metaplugin/meta_neutron_plugin.py:226 #: neutron/plugins/mlnx/mlnx_plugin.py:369 #: neutron/plugins/openvswitch/ovs_neutron_plugin.py:519 @@ -6506,249 +6517,258 @@ msgstr "" msgid "Created network: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1012 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1007 #, python-format msgid "Updated network: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1026 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1021 #, python-format msgid "Cannot delete network '%s', delete the associated subnet first" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1030 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1025 #, python-format msgid "Cannot delete network '%s' that is member of a trunk segment" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1034 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1029 #, python-format msgid "Cannot delete network '%s' that is a member of a multi-segment network" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1062 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1057 #, python-format msgid "Get network: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1084 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1079 msgid "Get networks" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1135 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1130 #, python-format msgid "Create port: profile_id=%s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1182 -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:305 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1177 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:303 #, python-format msgid "Created port: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1193 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1188 #, python-format msgid "Update port: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1256 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1251 #, python-format msgid "Get port: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1276 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1271 msgid "Get ports" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1292 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1287 msgid "Create subnet" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1302 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1297 #, python-format msgid "Created subnet: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1317 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1312 msgid "Update subnet" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1332 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1327 #, python-format msgid "Delete subnet: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1347 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1342 #, python-format msgid "Get subnet: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1367 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1362 msgid "Get subnets" msgstr "" -#: neutron/plugins/common/utils.py:30 +#: neutron/plugins/common/utils.py:33 +#, python-format +msgid "%(id)s is not a valid %(type)s identifier" +msgstr "" + +#: neutron/plugins/common/utils.py:38 +msgid "End of tunnel range is less than start of tunnel range" +msgstr "" + +#: neutron/plugins/common/utils.py:48 #, python-format msgid "%s is not a valid VLAN tag" msgstr "" -#: neutron/plugins/common/utils.py:34 +#: neutron/plugins/common/utils.py:52 msgid "End of VLAN range is less than start of VLAN range" msgstr "" -#: neutron/plugins/embrane/base_plugin.py:107 -#: neutron/plugins/embrane/agent/dispatcher.py:132 -#: neutron/services/loadbalancer/drivers/embrane/poller.py:56 -#: neutron/services/loadbalancer/drivers/embrane/agent/dispatcher.py:108 +#: neutron/plugins/embrane/base_plugin.py:105 +#: neutron/plugins/embrane/agent/dispatcher.py:130 +#: neutron/services/loadbalancer/drivers/embrane/poller.py:54 +#: neutron/services/loadbalancer/drivers/embrane/agent/dispatcher.py:106 msgid "Unhandled exception occurred" msgstr "" -#: neutron/plugins/embrane/base_plugin.py:172 -#: neutron/plugins/embrane/base_plugin.py:191 +#: neutron/plugins/embrane/base_plugin.py:170 +#: neutron/plugins/embrane/base_plugin.py:189 #, python-format msgid "The following routers have not physical match: %s" msgstr "" -#: neutron/plugins/embrane/base_plugin.py:177 +#: neutron/plugins/embrane/base_plugin.py:175 #, python-format msgid "Requested router: %s" msgstr "" -#: neutron/plugins/embrane/base_plugin.py:229 +#: neutron/plugins/embrane/base_plugin.py:227 #, python-format msgid "Deleting router=%s" msgstr "" -#: neutron/plugins/embrane/agent/operations/router_operations.py:97 +#: neutron/plugins/embrane/agent/operations/router_operations.py:95 #, python-format msgid "The router %s had no physical representation,likely already deleted" msgstr "" -#: neutron/plugins/embrane/agent/operations/router_operations.py:126 +#: neutron/plugins/embrane/agent/operations/router_operations.py:124 #, python-format msgid "Interface %s not found in the heleos back-end,likely already deleted" msgstr "" -#: neutron/plugins/embrane/common/config.py:23 -#: neutron/services/loadbalancer/drivers/embrane/config.py:25 +#: neutron/plugins/embrane/common/config.py:21 +#: neutron/services/loadbalancer/drivers/embrane/config.py:23 msgid "ESM management root address" msgstr "" -#: neutron/plugins/embrane/common/config.py:25 -#: neutron/services/loadbalancer/drivers/embrane/config.py:27 +#: neutron/plugins/embrane/common/config.py:23 +#: neutron/services/loadbalancer/drivers/embrane/config.py:25 msgid "ESM admin username." msgstr "" -#: neutron/plugins/embrane/common/config.py:28 -#: neutron/services/loadbalancer/drivers/embrane/config.py:30 +#: neutron/plugins/embrane/common/config.py:26 +#: neutron/services/loadbalancer/drivers/embrane/config.py:28 msgid "ESM admin password." msgstr "" -#: neutron/plugins/embrane/common/config.py:30 +#: neutron/plugins/embrane/common/config.py:28 msgid "Router image id (Embrane FW/VPN)" msgstr "" -#: neutron/plugins/embrane/common/config.py:32 +#: neutron/plugins/embrane/common/config.py:30 msgid "In band Security Zone id" msgstr "" -#: neutron/plugins/embrane/common/config.py:34 +#: neutron/plugins/embrane/common/config.py:32 msgid "Out of band Security Zone id" msgstr "" -#: neutron/plugins/embrane/common/config.py:36 +#: neutron/plugins/embrane/common/config.py:34 msgid "Management Security Zone id" msgstr "" -#: neutron/plugins/embrane/common/config.py:38 +#: neutron/plugins/embrane/common/config.py:36 msgid "Dummy user traffic Security Zone id" msgstr "" -#: neutron/plugins/embrane/common/config.py:40 -#: neutron/services/loadbalancer/drivers/embrane/config.py:42 +#: neutron/plugins/embrane/common/config.py:38 +#: neutron/services/loadbalancer/drivers/embrane/config.py:40 msgid "Shared resource pool id" msgstr "" -#: neutron/plugins/embrane/common/config.py:42 -#: neutron/services/loadbalancer/drivers/embrane/config.py:49 +#: neutron/plugins/embrane/common/config.py:40 +#: neutron/services/loadbalancer/drivers/embrane/config.py:47 msgid "Define if the requests have run asynchronously or not" msgstr "" -#: neutron/plugins/embrane/common/constants.py:49 -#: neutron/services/loadbalancer/drivers/embrane/constants.py:50 +#: neutron/plugins/embrane/common/constants.py:47 +#: neutron/services/loadbalancer/drivers/embrane/constants.py:48 #, python-format msgid "Dva is pending for the following reason: %s" msgstr "" -#: neutron/plugins/embrane/common/constants.py:50 +#: neutron/plugins/embrane/common/constants.py:48 msgid "" "Dva can't be found to execute the operation, probably was cancelled " "through the heleos UI" msgstr "" -#: neutron/plugins/embrane/common/constants.py:52 -#: neutron/services/loadbalancer/drivers/embrane/constants.py:53 +#: neutron/plugins/embrane/common/constants.py:50 +#: neutron/services/loadbalancer/drivers/embrane/constants.py:51 #, python-format msgid "Dva seems to be broken for reason %s" msgstr "" -#: neutron/plugins/embrane/common/constants.py:53 +#: neutron/plugins/embrane/common/constants.py:51 #, python-format msgid "Dva interface seems to be broken for reason %s" msgstr "" -#: neutron/plugins/embrane/common/constants.py:55 -#: neutron/services/loadbalancer/drivers/embrane/constants.py:54 +#: neutron/plugins/embrane/common/constants.py:53 +#: neutron/services/loadbalancer/drivers/embrane/constants.py:52 #, python-format msgid "Dva creation failed reason %s" msgstr "" +#: neutron/plugins/embrane/common/constants.py:54 +#: neutron/services/loadbalancer/drivers/embrane/constants.py:53 +#, python-format +msgid "Dva creation is in pending state for reason %s" +msgstr "" + #: neutron/plugins/embrane/common/constants.py:56 #: neutron/services/loadbalancer/drivers/embrane/constants.py:55 #, python-format -msgid "Dva creation is in pending state for reason %s" -msgstr "" - -#: neutron/plugins/embrane/common/constants.py:58 -#: neutron/services/loadbalancer/drivers/embrane/constants.py:57 -#, python-format msgid "Dva configuration failed for reason %s" msgstr "" -#: neutron/plugins/embrane/common/constants.py:59 +#: neutron/plugins/embrane/common/constants.py:57 #, python-format msgid "" "Failed to delete the backend router for reason %s. Please remove it " "manually through the heleos UI" msgstr "" -#: neutron/plugins/embrane/common/exceptions.py:22 +#: neutron/plugins/embrane/common/exceptions.py:20 #, python-format msgid "An unexpected error occurred:%(err_msg)s" msgstr "" -#: neutron/plugins/embrane/common/exceptions.py:26 +#: neutron/plugins/embrane/common/exceptions.py:24 #, python-format msgid "%(err_msg)s" msgstr "" -#: neutron/plugins/embrane/common/utils.py:45 +#: neutron/plugins/embrane/common/utils.py:43 msgid "No ip allocation set" msgstr "" -#: neutron/plugins/embrane/l2base/support_exceptions.py:22 +#: neutron/plugins/embrane/l2base/support_exceptions.py:20 #, python-format msgid "Cannot retrieve utif info for the following reason: %(err_msg)s" msgstr "" -#: neutron/plugins/embrane/l2base/ml2/ml2_support.py:46 +#: neutron/plugins/embrane/l2base/ml2/ml2_support.py:43 #, python-format msgid "" "Network type %s not supported. Please be sure that tenant_network_type is" " vlan" msgstr "" -#: neutron/plugins/hyperv/db.py:38 +#: neutron/plugins/hyperv/db.py:37 #: neutron/plugins/linuxbridge/db/l2network_db_v2.py:113 #: neutron/plugins/openvswitch/ovs_db_v2.py:131 #, python-format @@ -6757,12 +6777,12 @@ msgid "" "pool" msgstr "" -#: neutron/plugins/hyperv/db.py:53 +#: neutron/plugins/hyperv/db.py:52 #, python-format msgid "Reserving flat physical network %(physical_network)s from pool" msgstr "" -#: neutron/plugins/hyperv/db.py:76 +#: neutron/plugins/hyperv/db.py:75 #: neutron/plugins/linuxbridge/db/l2network_db_v2.py:136 #: neutron/plugins/openvswitch/ovs_db_v2.py:155 #, python-format @@ -6771,19 +6791,19 @@ msgid "" "%(physical_network)s from pool" msgstr "" -#: neutron/plugins/hyperv/db.py:133 +#: neutron/plugins/hyperv/db.py:132 #, python-format msgid "Releasing vlan %(vlan_id)s on physical network %(physical_network)s" msgstr "" -#: neutron/plugins/hyperv/db.py:138 +#: neutron/plugins/hyperv/db.py:137 #: neutron/plugins/linuxbridge/db/l2network_db_v2.py:177 #: neutron/plugins/openvswitch/ovs_db_v2.py:196 #, python-format msgid "vlan_id %(vlan_id)s on physical network %(physical_network)s not found" msgstr "" -#: neutron/plugins/hyperv/db.py:163 neutron/plugins/hyperv/db.py:176 +#: neutron/plugins/hyperv/db.py:162 neutron/plugins/hyperv/db.py:175 #: neutron/plugins/linuxbridge/db/l2network_db_v2.py:64 #: neutron/plugins/linuxbridge/db/l2network_db_v2.py:83 #: neutron/plugins/ml2/drivers/type_vlan.py:130 @@ -6796,37 +6816,37 @@ msgid "" "pool" msgstr "" -#: neutron/plugins/hyperv/hyperv_neutron_plugin.py:46 +#: neutron/plugins/hyperv/hyperv_neutron_plugin.py:45 msgid "Network type for tenant networks (local, flat, vlan or none)" msgstr "" -#: neutron/plugins/hyperv/hyperv_neutron_plugin.py:50 -#: neutron/plugins/linuxbridge/common/config.py:33 +#: neutron/plugins/hyperv/hyperv_neutron_plugin.py:49 +#: neutron/plugins/linuxbridge/common/config.py:30 #: neutron/plugins/mlnx/common/config.py:30 msgid "List of :: or " msgstr "" -#: neutron/plugins/hyperv/hyperv_neutron_plugin.py:78 -#: neutron/plugins/hyperv/hyperv_neutron_plugin.py:100 +#: neutron/plugins/hyperv/hyperv_neutron_plugin.py:77 +#: neutron/plugins/hyperv/hyperv_neutron_plugin.py:99 #, python-format msgid "segmentation_id specified for %s network" msgstr "" -#: neutron/plugins/hyperv/hyperv_neutron_plugin.py:85 +#: neutron/plugins/hyperv/hyperv_neutron_plugin.py:84 #, python-format msgid "physical_network specified for %s network" msgstr "" -#: neutron/plugins/hyperv/hyperv_neutron_plugin.py:127 +#: neutron/plugins/hyperv/hyperv_neutron_plugin.py:126 msgid "physical_network not provided" msgstr "" -#: neutron/plugins/hyperv/hyperv_neutron_plugin.py:179 +#: neutron/plugins/hyperv/hyperv_neutron_plugin.py:178 #, python-format msgid "Invalid tenant_network_type: %s. Agent terminated!" msgstr "" -#: neutron/plugins/hyperv/hyperv_neutron_plugin.py:204 +#: neutron/plugins/hyperv/hyperv_neutron_plugin.py:203 #: neutron/plugins/linuxbridge/lb_neutron_plugin.py:303 #: neutron/plugins/ml2/drivers/type_vlan.py:96 #: neutron/plugins/mlnx/mlnx_plugin.py:187 @@ -6835,12 +6855,12 @@ msgstr "" msgid "Network VLAN ranges: %s" msgstr "" -#: neutron/plugins/hyperv/hyperv_neutron_plugin.py:229 +#: neutron/plugins/hyperv/hyperv_neutron_plugin.py:228 #, python-format msgid "Network type %s not supported" msgstr "" -#: neutron/plugins/hyperv/rpc_callbacks.py:76 +#: neutron/plugins/hyperv/rpc_callbacks.py:75 #: neutron/plugins/linuxbridge/lb_neutron_plugin.py:114 #: neutron/plugins/mlnx/rpc_callbacks.py:77 #: neutron/plugins/openvswitch/ovs_neutron_plugin.py:117 @@ -6848,20 +6868,20 @@ msgstr "" msgid "Device %(device)s no longer exists on %(agent_id)s" msgstr "" -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:50 +#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:48 msgid "" "List of : where the physical networks can be " "expressed with wildcards, e.g.: .\"*:external\"" msgstr "" -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:56 +#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:54 msgid "Private vswitch name used for local networks" msgstr "" -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:58 -#: neutron/plugins/linuxbridge/common/config.py:64 +#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:56 +#: neutron/plugins/linuxbridge/common/config.py:61 #: neutron/plugins/mlnx/common/config.py:67 -#: neutron/plugins/nec/common/config.py:29 +#: neutron/plugins/nec/common/config.py:28 #: neutron/plugins/oneconvergence/lib/config.py:47 #: neutron/plugins/openvswitch/common/config.py:66 #: neutron/plugins/ryu/common/config.py:43 @@ -6871,14 +6891,14 @@ msgid "" "device changes." msgstr "" -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:62 +#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:60 msgid "" "Enables metrics collections for switch ports by using Hyper-V's metric " "APIs. Collected data can by retrieved by other apps and services, e.g.: " "Ceilometer. Requires Hyper-V / Windows Server 2012 and above" msgstr "" -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:69 +#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:67 msgid "" "Specifies the maximum number of retries to enable Hyper-V's port metrics " "collection. The agent will try to enable the feature once every " @@ -6886,780 +6906,780 @@ msgid "" "succeedes." msgstr "" -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:151 +#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:149 #, python-format msgid "Failed reporting state! %s" msgstr "" -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:186 +#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:184 #, python-format msgid "Invalid physical network mapping: %s" msgstr "" -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:207 +#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:205 #, python-format msgid "network_delete received. Deleting network %s" msgstr "" -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:213 +#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:211 #, python-format msgid "Network %s not defined on agent." msgstr "" -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:216 +#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:214 msgid "port_delete received" msgstr "" -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:221 +#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:219 msgid "port_update received" msgstr "" -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:243 +#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:241 #: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:130 #, python-format msgid "Provisioning network %s" msgstr "" -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:256 +#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:254 #, python-format msgid "" "Cannot provision unknown network type %(network_type)s for network " "%(net_uuid)s" msgstr "" -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:268 +#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:266 #, python-format msgid "Reclaiming local network %s" msgstr "" -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:276 +#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:274 #, python-format msgid "Binding port %s" msgstr "" -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:289 +#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:287 #, python-format msgid "Binding VLAN ID %(segmentation_id)s to switch port %(port_id)s" msgstr "" -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:302 +#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:300 #: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:115 #, python-format msgid "Unsupported network type %s" msgstr "" -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:311 +#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:309 #, python-format msgid "Network %s is not avalailable on this agent" msgstr "" -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:315 +#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:313 #, python-format msgid "Unbinding port %s" msgstr "" -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:328 +#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:326 #, python-format msgid "Port metrics enabled for port: %s" msgstr "" -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:332 +#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:330 #, python-format msgid "Port metrics raw enabling for port: %s" msgstr "" -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:357 +#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:355 #: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:294 #, python-format msgid "No port %s defined on agent." msgstr "" -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:374 +#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:372 #, python-format msgid "Adding port %s" msgstr "" -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:377 +#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:375 #, python-format msgid "Port %(device)s updated. Details: %(device_details)s" msgstr "" -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:403 +#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:401 #, python-format msgid "Removing port %s" msgstr "" -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:411 +#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:409 #, python-format msgid "Removing port failed for device %(device)s: %(e)s" msgstr "" -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:436 -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:995 -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1350 +#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:434 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:994 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1353 #: neutron/plugins/sriovnicagent/sriov_nic_agent.py:254 msgid "Agent out of sync with plugin!" msgstr "" -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:444 +#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:442 msgid "Agent loop has new devices!" msgstr "" -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:451 +#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:449 #, python-format msgid "Error in agent event loop: %s" msgstr "" -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:459 +#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:457 #: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:393 #, python-format msgid "Loop iteration exceeded interval (%(polling_interval)s vs. %(elapsed)s)" msgstr "" -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:472 -#: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:268 -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:1036 -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1542 +#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:470 +#: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:266 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:1035 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1545 #: neutron/plugins/sriovnicagent/sriov_nic_agent.py:350 msgid "Agent initialized successfully, now running... " msgstr "" -#: neutron/plugins/hyperv/agent/security_groups_driver.py:62 +#: neutron/plugins/hyperv/agent/security_groups_driver.py:61 #, python-format msgid "Hyper-V Exception: %(hyperv_exeption)s while adding rule: %(rule)s" msgstr "" -#: neutron/plugins/hyperv/agent/security_groups_driver.py:72 +#: neutron/plugins/hyperv/agent/security_groups_driver.py:71 #, python-format msgid "Hyper-V Exception: %(hyperv_exeption)s while removing rule: %(rule)s" msgstr "" -#: neutron/plugins/hyperv/agent/security_groups_driver.py:92 +#: neutron/plugins/hyperv/agent/security_groups_driver.py:91 msgid "Aplying port filter." msgstr "" -#: neutron/plugins/hyperv/agent/security_groups_driver.py:95 +#: neutron/plugins/hyperv/agent/security_groups_driver.py:94 msgid "Updating port rules." msgstr "" -#: neutron/plugins/hyperv/agent/security_groups_driver.py:108 +#: neutron/plugins/hyperv/agent/security_groups_driver.py:107 #, python-format msgid "Creating %(new)s new rules, removing %(old)s old rules." msgstr "" -#: neutron/plugins/hyperv/agent/security_groups_driver.py:119 +#: neutron/plugins/hyperv/agent/security_groups_driver.py:118 msgid "Removing port filter" msgstr "" -#: neutron/plugins/hyperv/agent/utils.py:36 +#: neutron/plugins/hyperv/agent/utils.py:34 #, python-format msgid "HyperVException: %(msg)s" msgstr "" -#: neutron/plugins/hyperv/agent/utils.py:81 +#: neutron/plugins/hyperv/agent/utils.py:79 #, python-format msgid "Vnic not found: %s" msgstr "" -#: neutron/plugins/hyperv/agent/utils.py:116 +#: neutron/plugins/hyperv/agent/utils.py:114 #, python-format msgid "Job failed with error %d" msgstr "" -#: neutron/plugins/hyperv/agent/utils.py:135 +#: neutron/plugins/hyperv/agent/utils.py:133 #, python-format msgid "" "WMI job failed with status %(job_state)d. Error details: %(err_sum_desc)s" " - %(err_desc)s - Error code: %(err_code)d" msgstr "" -#: neutron/plugins/hyperv/agent/utils.py:144 +#: neutron/plugins/hyperv/agent/utils.py:142 #, python-format msgid "WMI job failed with status %(job_state)d. Error details: %(error)s" msgstr "" -#: neutron/plugins/hyperv/agent/utils.py:148 +#: neutron/plugins/hyperv/agent/utils.py:146 #, python-format msgid "WMI job failed with status %d. No error description available" msgstr "" -#: neutron/plugins/hyperv/agent/utils.py:153 +#: neutron/plugins/hyperv/agent/utils.py:151 #, python-format msgid "WMI job succeeded: %(desc)s, Elapsed=%(elap)s" msgstr "" -#: neutron/plugins/hyperv/agent/utils.py:167 +#: neutron/plugins/hyperv/agent/utils.py:165 #, python-format msgid "Failed creating port for %s" msgstr "" -#: neutron/plugins/hyperv/agent/utils.py:190 +#: neutron/plugins/hyperv/agent/utils.py:188 #, python-format msgid "" "Failed to disconnect port %(switch_port_name)s from switch " "%(vswitch_name)s with error %(ret_val)s" msgstr "" -#: neutron/plugins/hyperv/agent/utils.py:201 +#: neutron/plugins/hyperv/agent/utils.py:199 #, python-format msgid "" "Failed to delete port %(switch_port_name)s from switch %(vswitch_name)s " "with error %(ret_val)s" msgstr "" -#: neutron/plugins/hyperv/agent/utils.py:208 -#: neutron/plugins/hyperv/agent/utilsv2.py:135 +#: neutron/plugins/hyperv/agent/utils.py:206 +#: neutron/plugins/hyperv/agent/utilsv2.py:133 #, python-format msgid "VSwitch not found: %s" msgstr "" -#: neutron/plugins/hyperv/agent/utils.py:249 -#: neutron/plugins/hyperv/agent/utils.py:253 +#: neutron/plugins/hyperv/agent/utils.py:247 +#: neutron/plugins/hyperv/agent/utils.py:251 msgid "Metrics collection is not supported on this version of Hyper-V" msgstr "" -#: neutron/plugins/hyperv/agent/utilsfactory.py:32 +#: neutron/plugins/hyperv/agent/utilsfactory.py:31 msgid "Force V1 WMI utility classes" msgstr "" -#: neutron/plugins/hyperv/agent/utilsfactory.py:61 +#: neutron/plugins/hyperv/agent/utilsfactory.py:60 msgid "" "V1 virtualization namespace no longer supported on Windows Server / " "Hyper-V Server 2012 R2 or above." msgstr "" -#: neutron/plugins/hyperv/agent/utilsfactory.py:68 +#: neutron/plugins/hyperv/agent/utilsfactory.py:67 #, python-format msgid "Loading class: %(module_name)s.%(class_name)s" msgstr "" -#: neutron/plugins/hyperv/agent/utilsv2.py:158 -#: neutron/plugins/hyperv/agent/utilsv2.py:318 +#: neutron/plugins/hyperv/agent/utilsv2.py:156 +#: neutron/plugins/hyperv/agent/utilsv2.py:316 #, python-format msgid "Port Allocation not found: %s" msgstr "" -#: neutron/plugins/hyperv/agent/utilsv2.py:268 +#: neutron/plugins/hyperv/agent/utilsv2.py:266 #, python-format msgid "Cannot get VM summary data for: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_api.py:77 +#: neutron/plugins/ibm/sdnve_api.py:75 #, python-format msgid "The IP addr of available SDN-VE controllers: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_api.py:80 +#: neutron/plugins/ibm/sdnve_api.py:78 #, python-format msgid "The SDN-VE controller IP address: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_api.py:97 +#: neutron/plugins/ibm/sdnve_api.py:95 #, python-format msgid "unable to serialize object type: '%s'" msgstr "" -#: neutron/plugins/ibm/sdnve_api.py:164 +#: neutron/plugins/ibm/sdnve_api.py:162 #, python-format msgid "" "Sending request to SDN-VE. url: %(myurl)s method: %(method)s body: " "%(body)s header: %(header)s " msgstr "" -#: neutron/plugins/ibm/sdnve_api.py:177 +#: neutron/plugins/ibm/sdnve_api.py:175 #, python-format msgid "Error: Could not reach server: %(url)s Exception: %(excp)s." msgstr "" -#: neutron/plugins/ibm/sdnve_api.py:184 +#: neutron/plugins/ibm/sdnve_api.py:182 #, python-format msgid "Error message: %(reply)s -- Status: %(status)s" msgstr "" -#: neutron/plugins/ibm/sdnve_api.py:187 +#: neutron/plugins/ibm/sdnve_api.py:185 #, python-format msgid "Received response status: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_api.py:194 +#: neutron/plugins/ibm/sdnve_api.py:192 #, python-format msgid "Deserialized body: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_api.py:236 +#: neutron/plugins/ibm/sdnve_api.py:234 msgid "Bad resource for forming a list request" msgstr "" -#: neutron/plugins/ibm/sdnve_api.py:246 +#: neutron/plugins/ibm/sdnve_api.py:244 msgid "Bad resource for forming a show request" msgstr "" -#: neutron/plugins/ibm/sdnve_api.py:256 +#: neutron/plugins/ibm/sdnve_api.py:254 msgid "Bad resource for forming a create request" msgstr "" -#: neutron/plugins/ibm/sdnve_api.py:268 +#: neutron/plugins/ibm/sdnve_api.py:266 msgid "Bad resource for forming a update request" msgstr "" -#: neutron/plugins/ibm/sdnve_api.py:279 +#: neutron/plugins/ibm/sdnve_api.py:277 msgid "Bad resource for forming a delete request" msgstr "" -#: neutron/plugins/ibm/sdnve_api.py:307 +#: neutron/plugins/ibm/sdnve_api.py:305 #, python-format msgid "Non matching tenant and network types: %(ttype)s %(ntype)s" msgstr "" -#: neutron/plugins/ibm/sdnve_api.py:369 +#: neutron/plugins/ibm/sdnve_api.py:367 #, python-format msgid "Did not find tenant: %r" msgstr "" -#: neutron/plugins/ibm/sdnve_api_fake.py:32 +#: neutron/plugins/ibm/sdnve_api_fake.py:30 msgid "Fake SDNVE controller initialized" msgstr "" -#: neutron/plugins/ibm/sdnve_api_fake.py:35 +#: neutron/plugins/ibm/sdnve_api_fake.py:33 msgid "Fake SDNVE controller: list" msgstr "" -#: neutron/plugins/ibm/sdnve_api_fake.py:39 +#: neutron/plugins/ibm/sdnve_api_fake.py:37 msgid "Fake SDNVE controller: show" msgstr "" -#: neutron/plugins/ibm/sdnve_api_fake.py:43 +#: neutron/plugins/ibm/sdnve_api_fake.py:41 msgid "Fake SDNVE controller: create" msgstr "" -#: neutron/plugins/ibm/sdnve_api_fake.py:47 +#: neutron/plugins/ibm/sdnve_api_fake.py:45 msgid "Fake SDNVE controller: update" msgstr "" -#: neutron/plugins/ibm/sdnve_api_fake.py:51 +#: neutron/plugins/ibm/sdnve_api_fake.py:49 msgid "Fake SDNVE controller: delete" msgstr "" -#: neutron/plugins/ibm/sdnve_api_fake.py:55 +#: neutron/plugins/ibm/sdnve_api_fake.py:53 msgid "Fake SDNVE controller: get tenant by id" msgstr "" -#: neutron/plugins/ibm/sdnve_api_fake.py:59 +#: neutron/plugins/ibm/sdnve_api_fake.py:57 msgid "Fake SDNVE controller: check and create tenant" msgstr "" -#: neutron/plugins/ibm/sdnve_api_fake.py:63 +#: neutron/plugins/ibm/sdnve_api_fake.py:61 msgid "Fake SDNVE controller: get controller" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:152 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:150 msgid "Set a new controller if needed." msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:158 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:156 #, python-format msgid "Set the controller to a new controller: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:166 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:164 #, python-format msgid "Original SDN-VE HTTP request: %(orig)s; New request: %(new)s" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:176 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:174 #, python-format msgid "Create network in progress: %r" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:185 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:183 msgid "Create net failed: no SDN-VE tenant." msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:196 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:194 #, python-format msgid "Create net failed in SDN-VE: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:203 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:201 #, python-format msgid "Update network in progress: %r" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:223 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:221 #, python-format msgid "Update net failed in SDN-VE: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:229 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:227 #, python-format msgid "Delete network in progress: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:239 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:237 #, python-format msgid "Delete net failed after deleting the network in DB: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:244 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:242 #, python-format msgid "Get network in progress: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:250 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:248 msgid "Get networks in progress" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:260 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:258 #, python-format msgid "Create port in progress: %r" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:276 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:274 msgid "Create port does not have tenant id info" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:282 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:280 #, python-format msgid "Create port does not have tenant id info; obtained is: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:303 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:301 #, python-format msgid "Create port failed in SDN-VE: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:310 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:308 #, python-format msgid "Update port in progress: %r" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:337 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:335 #, python-format msgid "Update port failed in SDN-VE: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:343 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:341 #, python-format msgid "Delete port in progress: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:356 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:354 #, python-format msgid "Delete port operation failed in SDN-VE after deleting the port from DB: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:365 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:363 #, python-format msgid "Create subnet in progress: %r" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:377 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:375 #, python-format msgid "Create subnet failed in SDN-VE: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:379 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:377 #, python-format msgid "Subnet created: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:385 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:383 #, python-format msgid "Update subnet in progress: %r" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:410 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:408 #, python-format msgid "Update subnet failed in SDN-VE: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:416 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:414 #, python-format msgid "Delete subnet in progress: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:421 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:419 #, python-format msgid "" "Delete subnet operation failed in SDN-VE after deleting the subnet from " "DB: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:430 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:428 #, python-format msgid "Create router in progress: %r" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:433 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:431 #, python-format msgid "Ignoring admin_state_up=False for router=%r. Overriding with True" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:443 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:441 msgid "Create router failed: no SDN-VE tenant." msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:451 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:449 #, python-format msgid "Create router failed in SDN-VE: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:453 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:451 #, python-format msgid "Router created: %r" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:458 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:456 #, python-format msgid "Update router in progress: id=%(id)s router=%(router)r" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:465 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:463 msgid "admin_state_up=False routers are not supported." msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:489 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:487 #, python-format msgid "Update router failed in SDN-VE: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:495 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:493 #, python-format msgid "Delete router in progress: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:502 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:500 #, python-format msgid "" "Delete router operation failed in SDN-VE after deleting the router in DB:" " %s" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:507 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:505 #, python-format msgid "" "Add router interface in progress: router_id=%(router_id)s " "interface_info=%(interface_info)r" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:515 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:513 #, python-format msgid "SdnvePluginV2.add_router_interface called. Port info: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:529 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:527 #, python-format msgid "Update router-add-interface failed in SDN-VE: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:532 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:530 #, python-format msgid "Added router interface: %r" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:536 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:534 #, python-format msgid "" "Add router interface only called: router_id=%(router_id)s " "interface_info=%(interface_info)r" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:546 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:544 msgid "" "SdnvePluginV2._add_router_interface_only: failed to add the interface in " "the roll back. of a remove_router_interface operation" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:552 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:550 #, python-format msgid "" "Remove router interface in progress: router_id=%(router_id)s " "interface_info=%(interface_info)r" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:561 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:559 msgid "No port ID" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:563 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:561 #, python-format msgid "SdnvePluginV2.remove_router_interface port: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:567 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:565 msgid "No fixed IP" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:572 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:570 #, python-format msgid "SdnvePluginV2.remove_router_interface subnet_id: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:595 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:593 #, python-format msgid "Update router-remove-interface failed SDN-VE: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:616 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:614 #, python-format msgid "Create floatingip in progress: %r" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:627 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:625 #, python-format msgid "Creating floating ip operation failed in SDN-VE controller: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:630 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:628 #, python-format msgid "Created floatingip : %r" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:635 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:633 #, python-format msgid "Update floatingip in progress: %r" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:655 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:653 #, python-format msgid "Update floating ip failed in SDN-VE: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:661 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:659 #, python-format msgid "Delete floatingip in progress: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:666 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:664 #, python-format msgid "Delete floatingip failed in SDN-VE: %s" msgstr "" -#: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:138 +#: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:136 msgid "info_update received" msgstr "" -#: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:143 +#: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:141 #, python-format msgid "info_update received. New controlleris to be set to: %s" msgstr "" -#: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:149 +#: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:147 msgid "info_update received. New controlleris set to be out of band" msgstr "" -#: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:194 +#: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:192 #, python-format msgid "Mapping physical network %(physical_network)s to interface %(interface)s" msgstr "" -#: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:200 +#: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:198 #, python-format msgid "" "Interface %(interface)s for physical network %(physical_network)s does " "not exist. Agent terminated!" msgstr "" -#: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:218 +#: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:216 msgid "Agent in the rpc loop." msgstr "" -#: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:240 +#: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:238 #, python-format msgid "Controller IPs: %s" msgstr "" -#: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:262 -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1529 +#: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:260 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1532 #, python-format msgid "%s Agent terminated!" msgstr "" -#: neutron/plugins/ibm/common/config.py:28 +#: neutron/plugins/ibm/common/config.py:26 msgid "Whether to use a fake controller." msgstr "" -#: neutron/plugins/ibm/common/config.py:30 +#: neutron/plugins/ibm/common/config.py:28 msgid "Base URL for SDN-VE controller REST API." msgstr "" -#: neutron/plugins/ibm/common/config.py:32 +#: neutron/plugins/ibm/common/config.py:30 msgid "List of IP addresses of SDN-VE controller(s)." msgstr "" -#: neutron/plugins/ibm/common/config.py:34 +#: neutron/plugins/ibm/common/config.py:32 msgid "SDN-VE RPC subject." msgstr "" -#: neutron/plugins/ibm/common/config.py:36 +#: neutron/plugins/ibm/common/config.py:34 msgid "SDN-VE controller port number." msgstr "" -#: neutron/plugins/ibm/common/config.py:38 +#: neutron/plugins/ibm/common/config.py:36 msgid "SDN-VE request/response format." msgstr "" -#: neutron/plugins/ibm/common/config.py:40 +#: neutron/plugins/ibm/common/config.py:38 msgid "SDN-VE administrator user ID." msgstr "" -#: neutron/plugins/ibm/common/config.py:42 +#: neutron/plugins/ibm/common/config.py:40 msgid "SDN-VE administrator password." msgstr "" -#: neutron/plugins/ibm/common/config.py:44 -#: neutron/plugins/nec/common/config.py:24 +#: neutron/plugins/ibm/common/config.py:42 +#: neutron/plugins/nec/common/config.py:23 #: neutron/plugins/openvswitch/common/config.py:29 #: neutron/plugins/ryu/common/config.py:22 msgid "Integration bridge to use." msgstr "" -#: neutron/plugins/ibm/common/config.py:46 +#: neutron/plugins/ibm/common/config.py:44 msgid "Whether to reset the integration bridge before use." msgstr "" -#: neutron/plugins/ibm/common/config.py:48 +#: neutron/plugins/ibm/common/config.py:46 msgid "Indicating if controller is out of band or not." msgstr "" -#: neutron/plugins/ibm/common/config.py:51 +#: neutron/plugins/ibm/common/config.py:49 msgid "List of : mappings." msgstr "" -#: neutron/plugins/ibm/common/config.py:54 +#: neutron/plugins/ibm/common/config.py:52 msgid "Tenant type: OVERLAY (default) or OF." msgstr "" -#: neutron/plugins/ibm/common/config.py:56 +#: neutron/plugins/ibm/common/config.py:54 msgid "" "The string in tenant description that indicates the tenant is a OVERLAY " "tenant." msgstr "" -#: neutron/plugins/ibm/common/config.py:59 +#: neutron/plugins/ibm/common/config.py:57 msgid "The string in tenant description that indicates the tenant is a OF tenant." msgstr "" -#: neutron/plugins/ibm/common/config.py:65 +#: neutron/plugins/ibm/common/config.py:63 msgid "Agent polling interval if necessary." msgstr "" -#: neutron/plugins/ibm/common/config.py:67 +#: neutron/plugins/ibm/common/config.py:65 msgid "Using root helper." msgstr "" -#: neutron/plugins/ibm/common/config.py:69 +#: neutron/plugins/ibm/common/config.py:67 msgid "Whether to use rpc." msgstr "" -#: neutron/plugins/ibm/common/exceptions.py:23 +#: neutron/plugins/ibm/common/exceptions.py:21 #, python-format msgid "" "An unexpected error occurred in the SDN-VE Plugin. Here is the error " "message: %(msg)s" msgstr "" -#: neutron/plugins/ibm/common/exceptions.py:28 +#: neutron/plugins/ibm/common/exceptions.py:26 #, python-format msgid "The input does not contain nececessary info: %(msg)s" msgstr "" @@ -7719,328 +7739,328 @@ msgstr "" msgid "provider:segmentation_id specified for local network" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:83 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:82 msgid "VXLAN is enabled, a valid local_ip must be provided" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:97 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:96 msgid "Invalid Network ID, will lead to incorrect bridgename" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:104 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:103 msgid "Invalid VLAN ID, will lead to incorrect subinterface name" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:111 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:110 msgid "Invalid Interface ID, will lead to incorrect tap device name" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:120 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:119 #, python-format msgid "Invalid Segmentation ID: %s, will lead to incorrect vxlan device name" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:183 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:182 #, python-format msgid "Failed creating vxlan interface for %(segmentation_id)s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:215 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:214 #, python-format msgid "" "Creating subinterface %(interface)s for VLAN %(vlan_id)s on interface " "%(physical_interface)s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:228 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:227 #, python-format msgid "Done creating subinterface %s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:235 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:234 #, python-format msgid "Creating vxlan interface %(interface)s for VNI %(segmentation_id)s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:250 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:249 #, python-format msgid "Done creating vxlan interface %s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:304 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:303 #, python-format msgid "Starting bridge %(bridge_name)s for subinterface %(interface)s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:319 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:318 #, python-format msgid "Done starting bridge %(bridge_name)s for subinterface %(interface)s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:341 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:340 #, python-format msgid "Unable to add %(interface)s to %(bridge_name)s! Exception: %(e)s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:354 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:353 #, python-format msgid "Unable to add vxlan interface for network %s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:361 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:360 #, python-format msgid "No mapping for physical network %s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:370 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:369 #, python-format msgid "Unknown network_type %(network_type)s for network %(network_id)s." msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:382 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:381 #, python-format msgid "Tap device: %s does not exist on this host, skipped" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:400 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:399 #, python-format msgid "Adding device %(tap_device_name)s to bridge %(bridge_name)s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:409 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:408 #, python-format msgid "%(tap_device_name)s already exists on bridge %(bridge_name)s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:447 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:446 #, python-format msgid "Deleting bridge %s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:454 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:453 #, python-format msgid "Done deleting bridge %s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:457 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:456 #, python-format msgid "Cannot delete bridge %s, does not exist" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:471 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:470 #, python-format msgid "Removing device %(interface_name)s from bridge %(bridge_name)s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:478 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:477 #, python-format msgid "Done removing device %(interface_name)s from bridge %(bridge_name)s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:484 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:483 #, python-format msgid "" "Cannot remove device %(interface_name)s bridge %(bridge_name)s does not " "exist" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:492 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:491 #, python-format msgid "Deleting subinterface %s for vlan" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:499 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:498 #, python-format msgid "Done deleting subinterface %s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:503 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:502 #, python-format msgid "Deleting vxlan interface %s for vlan" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:508 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:507 #, python-format msgid "Done deleting vxlan interface %s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:522 -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:556 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:521 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:555 #, python-format msgid "" "Option \"%(option)s\" must be supported by command \"%(command)s\" to " "enable %(mode)s mode" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:533 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:532 msgid "No valid Segmentation ID to perform UCAST test." msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:550 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:549 msgid "" "VXLAN muticast group must be provided in vxlan_group option to enable " "VXLAN MCAST mode" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:575 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:574 msgid "" "Linux kernel vxlan module and iproute2 3.8 or above are required to " "enable VXLAN." msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:585 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:584 #, python-format msgid "Using %s VXLAN mode" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:662 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:661 #: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:163 -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:297 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:300 msgid "network_delete received" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:676 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:675 #: neutron/plugins/sriovnicagent/sriov_nic_agent.py:66 #, python-format msgid "port_update RPC received for port: %s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:679 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:678 msgid "fdb_add received" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:701 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:700 msgid "fdb_remove received" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:723 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:722 msgid "update chg_ip received" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:748 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:747 msgid "fdb_update received" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:805 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:804 msgid "Unable to obtain MAC address for unique ID. Agent terminated!" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:809 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:808 #: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:220 -#: neutron/plugins/nec/agent/nec_neutron_agent.py:144 -#: neutron/plugins/oneconvergence/agent/nvsd_neutron_agent.py:109 +#: neutron/plugins/nec/agent/nec_neutron_agent.py:142 +#: neutron/plugins/oneconvergence/agent/nvsd_neutron_agent.py:107 #: neutron/plugins/sriovnicagent/sriov_nic_agent.py:100 #, python-format msgid "RPC agent_id: %s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:880 -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1100 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:879 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1103 #: neutron/plugins/sriovnicagent/sriov_nic_agent.py:213 #, python-format msgid "Port %(device)s updated. Details: %(details)s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:913 -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:934 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:912 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:933 #: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:354 -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1126 -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1187 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1129 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1190 #: neutron/plugins/sriovnicagent/sriov_nic_agent.py:240 #, python-format msgid "Device %s not defined on plugin" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:920 -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1155 -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1172 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:919 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1158 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1175 #, python-format msgid "Attachment %s removed" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:928 -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1162 -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1179 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:927 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1165 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1182 #, python-format msgid "port_removed failed for %(device)s: %(e)s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:932 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:931 #: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:352 -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1184 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1187 #: neutron/plugins/sriovnicagent/sriov_nic_agent.py:238 #, python-format msgid "Port %s updated." msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:985 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:984 msgid "LinuxBridge Agent RPC Daemon Started!" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:999 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:998 #: neutron/plugins/sriovnicagent/sriov_nic_agent.py:267 #, python-format msgid "Agent loop found changes! %s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:1003 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:1002 #: neutron/plugins/sriovnicagent/sriov_nic_agent.py:273 #, python-format msgid "Error in agent loop. Devices info: %s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:1026 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:1025 #: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:407 #, python-format msgid "Parsing physical_interface_mappings failed: %s. Agent terminated!" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:1029 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:1028 #: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:410 #, python-format msgid "Interface mappings: %s" msgstr "" -#: neutron/plugins/linuxbridge/common/config.py:29 +#: neutron/plugins/linuxbridge/common/config.py:26 #: neutron/plugins/mlnx/common/config.py:26 msgid "Network type for tenant networks (local, vlan, or none)" msgstr "" -#: neutron/plugins/linuxbridge/common/config.py:39 +#: neutron/plugins/linuxbridge/common/config.py:36 msgid "" "Enable VXLAN on the agent. Can be enabled when agent is managed by ml2 " "plugin using linuxbridge mechanism driver" msgstr "" -#: neutron/plugins/linuxbridge/common/config.py:43 +#: neutron/plugins/linuxbridge/common/config.py:40 msgid "TTL for vxlan interface protocol packets." msgstr "" -#: neutron/plugins/linuxbridge/common/config.py:45 +#: neutron/plugins/linuxbridge/common/config.py:42 msgid "TOS for vxlan interface protocol packets." msgstr "" -#: neutron/plugins/linuxbridge/common/config.py:47 +#: neutron/plugins/linuxbridge/common/config.py:44 msgid "Multicast group for vxlan interface." msgstr "" -#: neutron/plugins/linuxbridge/common/config.py:49 +#: neutron/plugins/linuxbridge/common/config.py:46 msgid "Local IP address of the VXLAN endpoints." msgstr "" -#: neutron/plugins/linuxbridge/common/config.py:51 +#: neutron/plugins/linuxbridge/common/config.py:48 msgid "" "Extension to use alongside ml2 plugin's l2population mechanism driver. It" " enables the plugin to populate VXLAN forwarding table." msgstr "" -#: neutron/plugins/linuxbridge/common/config.py:59 +#: neutron/plugins/linuxbridge/common/config.py:56 #: neutron/plugins/mlnx/common/config.py:45 #: neutron/plugins/ofagent/common/config.py:29 msgid "List of :" msgstr "" -#: neutron/plugins/linuxbridge/common/config.py:67 +#: neutron/plugins/linuxbridge/common/config.py:64 #: neutron/plugins/mlnx/common/config.py:70 msgid "Enable server RPC compatibility with old agents" msgstr "" @@ -8199,38 +8219,38 @@ msgstr "" msgid "Specifies flavor for plugin to handle 'q-plugin' RPC requests." msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:44 +#: neutron/plugins/midonet/midonet_lib.py:39 #, python-format msgid "MidoNet %(resource_type)s %(id)s could not be found" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:48 -#: neutron/plugins/midonet/plugin.py:86 +#: neutron/plugins/midonet/midonet_lib.py:43 +#: neutron/plugins/midonet/plugin.py:80 #, python-format msgid "MidoNet API error: %(msg)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:82 +#: neutron/plugins/midonet/midonet_lib.py:77 #, python-format msgid "MidoClient.create_bridge called: kwargs=%(kwargs)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:92 +#: neutron/plugins/midonet/midonet_lib.py:87 #, python-format msgid "MidoClient.delete_bridge called: id=%(id)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:102 +#: neutron/plugins/midonet/midonet_lib.py:97 #, python-format msgid "MidoClient.get_bridge called: id=%s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:116 +#: neutron/plugins/midonet/midonet_lib.py:111 #, python-format msgid "MidoClient.update_bridge called: id=%(id)s, kwargs=%(kwargs)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:136 +#: neutron/plugins/midonet/midonet_lib.py:131 #, python-format msgid "" "MidoClient.create_dhcp called: bridge=%(bridge)s, cidr=%(cidr)s, " @@ -8238,142 +8258,142 @@ msgid "" "dns_servers=%(dns_servers)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:154 +#: neutron/plugins/midonet/midonet_lib.py:149 #, python-format msgid "" "MidoClient.add_dhcp_host called: bridge=%(bridge)s, cidr=%(cidr)s, " "ip=%(ip)s, mac=%(mac)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:159 +#: neutron/plugins/midonet/midonet_lib.py:154 msgid "Tried to add tonon-existent DHCP" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:173 +#: neutron/plugins/midonet/midonet_lib.py:168 #, python-format msgid "" "MidoClient.remove_dhcp_host called: bridge=%(bridge)s, cidr=%(cidr)s, " "ip=%(ip)s, mac=%(mac)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:178 +#: neutron/plugins/midonet/midonet_lib.py:173 msgid "Tried to delete mapping from non-existent subnet" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:183 +#: neutron/plugins/midonet/midonet_lib.py:178 #, python-format msgid "MidoClient.remove_dhcp_host: Deleting %(dh)r" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:196 +#: neutron/plugins/midonet/midonet_lib.py:191 #, python-format msgid "" "MidoClient.delete_dhcp_host called: bridge_id=%(bridge_id)s, " "cidr=%(cidr)s, ip=%(ip)s, mac=%(mac)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:211 +#: neutron/plugins/midonet/midonet_lib.py:206 #, python-format msgid "MidoClient.delete_dhcp called: bridge=%(bridge)s, cidr=%(cidr)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:218 +#: neutron/plugins/midonet/midonet_lib.py:213 msgid "Tried to delete non-existent DHCP" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:230 +#: neutron/plugins/midonet/midonet_lib.py:225 #, python-format msgid "MidoClient.delete_port called: id=%(id)s, delete_chains=%(delete_chains)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:245 +#: neutron/plugins/midonet/midonet_lib.py:240 #, python-format msgid "MidoClient.get_port called: id=%(id)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:259 +#: neutron/plugins/midonet/midonet_lib.py:254 #, python-format msgid "MidoClient.add_bridge_port called: bridge=%(bridge)s, kwargs=%(kwargs)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:271 +#: neutron/plugins/midonet/midonet_lib.py:266 #, python-format msgid "MidoClient.update_port called: id=%(id)s, kwargs=%(kwargs)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:296 +#: neutron/plugins/midonet/midonet_lib.py:291 #, python-format msgid "MidoClient.create_router called: kwargs=%(kwargs)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:306 +#: neutron/plugins/midonet/midonet_lib.py:301 #, python-format msgid "MidoClient.delete_router called: id=%(id)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:316 +#: neutron/plugins/midonet/midonet_lib.py:311 #, python-format msgid "MidoClient.get_router called: id=%(id)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:330 +#: neutron/plugins/midonet/midonet_lib.py:325 #, python-format msgid "MidoClient.update_router called: id=%(id)s, kwargs=%(kwargs)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:351 +#: neutron/plugins/midonet/midonet_lib.py:346 #, python-format msgid "" "MidoClient.add_dhcp_route_option called: bridge=%(bridge)s, " "cidr=%(cidr)s, gw_ip=%(gw_ip)sdst_ip=%(dst_ip)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:359 +#: neutron/plugins/midonet/midonet_lib.py:354 msgid "Tried to access non-existent DHCP" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:391 +#: neutron/plugins/midonet/midonet_lib.py:386 #, python-format msgid "MidoClient.unlink called: port=%(port)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:396 +#: neutron/plugins/midonet/midonet_lib.py:391 #, python-format msgid "Attempted to unlink a port that was not linked. %s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:402 +#: neutron/plugins/midonet/midonet_lib.py:397 #, python-format msgid "" "MidoClient.remove_rules_by_property called: tenant_id=%(tenant_id)s, " "chain_name=%(chain_name)skey=%(key)s, value=%(value)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:429 +#: neutron/plugins/midonet/midonet_lib.py:424 #, python-format msgid "" "MidoClient.create_router_chains called: router=%(router)s, " "inbound_chain_name=%(in_chain)s, outbound_chain_name=%(out_chain)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:452 +#: neutron/plugins/midonet/midonet_lib.py:447 #, python-format msgid "MidoClient.delete_router_chains called: id=%(id)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:467 +#: neutron/plugins/midonet/midonet_lib.py:462 #, python-format msgid "MidoClient.delete_port_chains called: id=%(id)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:479 +#: neutron/plugins/midonet/midonet_lib.py:474 #, python-format msgid "" "MidoClient.get_link_port called: router=%(router)s, " "peer_router_id=%(peer_router_id)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:518 +#: neutron/plugins/midonet/midonet_lib.py:513 #, python-format msgid "" "MidoClient.add_static_nat called: tenant_id=%(tenant_id)s, " @@ -8381,17 +8401,17 @@ msgid "" "port_id=%(port_id)s, nat_type=%(nat_type)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:526 +#: neutron/plugins/midonet/midonet_lib.py:521 #, python-format msgid "Invalid NAT type passed in %s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:578 +#: neutron/plugins/midonet/midonet_lib.py:573 #, python-format msgid "MidoClient.remote_static_route called: router=%(router)s, ip=%(ip)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:589 +#: neutron/plugins/midonet/midonet_lib.py:584 #, python-format msgid "" "MidoClient.update_port_chains called: " @@ -8399,82 +8419,82 @@ msgid "" "outbound_chain_id=%(outbound_chain_id)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:600 +#: neutron/plugins/midonet/midonet_lib.py:595 #, python-format msgid "MidoClient.create_chain called: tenant_id=%(tenant_id)s name=%(name)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:608 +#: neutron/plugins/midonet/midonet_lib.py:603 #, python-format msgid "MidoClient.delete_chain called: id=%(id)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:614 +#: neutron/plugins/midonet/midonet_lib.py:609 #, python-format msgid "" "MidoClient.delete_chains_by_names called: tenant_id=%(tenant_id)s " "names=%(names)s " msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:625 +#: neutron/plugins/midonet/midonet_lib.py:620 #, python-format msgid "" "MidoClient.get_chain_by_name called: tenant_id=%(tenant_id)s " "name=%(name)s " msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:636 +#: neutron/plugins/midonet/midonet_lib.py:631 #, python-format msgid "" "MidoClient.get_port_group_by_name called: tenant_id=%(tenant_id)s " "name=%(name)s " msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:650 +#: neutron/plugins/midonet/midonet_lib.py:645 #, python-format msgid "MidoClient.create_port_group called: tenant_id=%(tenant_id)s name=%(name)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:659 +#: neutron/plugins/midonet/midonet_lib.py:654 #, python-format msgid "" "MidoClient.delete_port_group_by_name called: tenant_id=%(tenant_id)s " "name=%(name)s " msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:665 +#: neutron/plugins/midonet/midonet_lib.py:660 #, python-format msgid "Deleting pg %(id)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:671 +#: neutron/plugins/midonet/midonet_lib.py:666 #, python-format msgid "" "MidoClient.add_port_to_port_group_by_name called: tenant_id=%(tenant_id)s" " name=%(name)s port_id=%(port_id)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:685 +#: neutron/plugins/midonet/midonet_lib.py:680 #, python-format msgid "MidoClient.remove_port_from_port_groups called: port_id=%(port_id)s" msgstr "" -#: neutron/plugins/midonet/plugin.py:100 +#: neutron/plugins/midonet/plugin.py:94 #, python-format msgid "Invalid nat_type %s" msgstr "" -#: neutron/plugins/midonet/plugin.py:157 +#: neutron/plugins/midonet/plugin.py:151 #, python-format msgid "Unrecognized direction %s" msgstr "" -#: neutron/plugins/midonet/plugin.py:191 +#: neutron/plugins/midonet/plugin.py:185 #, python-format msgid "There is no %(name)s with ID %(id)s in MidoNet." msgstr "" -#: neutron/plugins/midonet/plugin.py:198 +#: neutron/plugins/midonet/plugin.py:192 #: neutron/plugins/ml2/drivers/arista/exceptions.py:23 #: neutron/plugins/ml2/drivers/arista/exceptions.py:27 #: neutron/plugins/ml2/drivers/arista/exceptions.py:31 @@ -8483,214 +8503,214 @@ msgstr "" msgid "%(msg)s" msgstr "" -#: neutron/plugins/midonet/plugin.py:235 +#: neutron/plugins/midonet/plugin.py:229 msgid "provider_router_id should be configured in the plugin config file" msgstr "" -#: neutron/plugins/midonet/plugin.py:405 +#: neutron/plugins/midonet/plugin.py:399 #, python-format msgid "MidonetPluginV2.create_subnet called: subnet=%r" msgstr "" -#: neutron/plugins/midonet/plugin.py:437 +#: neutron/plugins/midonet/plugin.py:431 #, python-format msgid "MidonetPluginV2.create_subnet exiting: sn_entry=%r" msgstr "" -#: neutron/plugins/midonet/plugin.py:446 +#: neutron/plugins/midonet/plugin.py:440 #, python-format msgid "MidonetPluginV2.delete_subnet called: id=%s" msgstr "" -#: neutron/plugins/midonet/plugin.py:465 +#: neutron/plugins/midonet/plugin.py:459 msgid "MidonetPluginV2.delete_subnet exiting" msgstr "" -#: neutron/plugins/midonet/plugin.py:522 +#: neutron/plugins/midonet/plugin.py:516 #, python-format msgid "MidonetPluginV2.create_port called: port=%r" msgstr "" -#: neutron/plugins/midonet/plugin.py:583 +#: neutron/plugins/midonet/plugin.py:577 #, python-format msgid "Failed to create a port on network %(net_id)s: %(err)s" msgstr "" -#: neutron/plugins/midonet/plugin.py:588 +#: neutron/plugins/midonet/plugin.py:582 #, python-format msgid "MidonetPluginV2.create_port exiting: port=%r" msgstr "" -#: neutron/plugins/midonet/plugin.py:593 +#: neutron/plugins/midonet/plugin.py:587 #, python-format msgid "MidonetPluginV2.get_port called: id=%(id)s fields=%(fields)r" msgstr "" -#: neutron/plugins/midonet/plugin.py:600 +#: neutron/plugins/midonet/plugin.py:594 #, python-format msgid "There is no port with ID %(id)s in MidoNet." msgstr "" -#: neutron/plugins/midonet/plugin.py:604 +#: neutron/plugins/midonet/plugin.py:598 #, python-format msgid "MidonetPluginV2.get_port exiting: port=%r" msgstr "" -#: neutron/plugins/midonet/plugin.py:609 +#: neutron/plugins/midonet/plugin.py:603 #, python-format msgid "MidonetPluginV2.get_ports called: filters=%(filters)s fields=%(fields)r" msgstr "" -#: neutron/plugins/midonet/plugin.py:618 +#: neutron/plugins/midonet/plugin.py:612 #, python-format msgid "" "MidonetPluginV2.delete_port called: id=%(id)s " "l3_port_check=%(l3_port_check)r" msgstr "" -#: neutron/plugins/midonet/plugin.py:652 +#: neutron/plugins/midonet/plugin.py:646 #, python-format msgid "Failed to delete DHCP mapping for port %(id)s" msgstr "" -#: neutron/plugins/midonet/plugin.py:727 +#: neutron/plugins/midonet/plugin.py:721 #, python-format msgid "MidonetPluginV2.create_router called: router=%(router)s" msgstr "" -#: neutron/plugins/midonet/plugin.py:774 +#: neutron/plugins/midonet/plugin.py:768 #, python-format msgid "MidonetPluginV2.create_router exiting: router_data=%(router_data)s." msgstr "" -#: neutron/plugins/midonet/plugin.py:786 +#: neutron/plugins/midonet/plugin.py:780 #, python-format msgid "" "MidonetPluginV2.set_router_gateway called: id=%(id)s, " "gw_router=%(gw_router)s, gw_ip=%(gw_ip)s" msgstr "" -#: neutron/plugins/midonet/plugin.py:830 +#: neutron/plugins/midonet/plugin.py:824 #, python-format msgid "MidonetPluginV2.remove_router_gateway called: id=%(id)s" msgstr "" -#: neutron/plugins/midonet/plugin.py:850 +#: neutron/plugins/midonet/plugin.py:844 #, python-format msgid "MidonetPluginV2.update_router called: id=%(id)s router=%(router)r" msgstr "" -#: neutron/plugins/midonet/plugin.py:890 +#: neutron/plugins/midonet/plugin.py:884 #, python-format msgid "MidonetPluginV2.update_router exiting: router=%r" msgstr "" -#: neutron/plugins/midonet/plugin.py:901 +#: neutron/plugins/midonet/plugin.py:895 #, python-format msgid "MidonetPluginV2.delete_router called: id=%s" msgstr "" -#: neutron/plugins/midonet/plugin.py:1001 +#: neutron/plugins/midonet/plugin.py:995 #, python-format msgid "" "MidonetPluginV2.add_router_interface called: router_id=%(router_id)s " "interface_info=%(interface_info)r" msgstr "" -#: neutron/plugins/midonet/plugin.py:1025 +#: neutron/plugins/midonet/plugin.py:1019 msgid "" "DHCP agent is not working correctly. No port to reach the Metadata server" " on this network" msgstr "" -#: neutron/plugins/midonet/plugin.py:1034 +#: neutron/plugins/midonet/plugin.py:1028 #, python-format msgid "" "Failed to create MidoNet resources to add router interface. " "info=%(info)s, router_id=%(router_id)s" msgstr "" -#: neutron/plugins/midonet/plugin.py:1041 +#: neutron/plugins/midonet/plugin.py:1035 #, python-format msgid "MidonetPluginV2.add_router_interface exiting: info=%r" msgstr "" -#: neutron/plugins/midonet/plugin.py:1081 +#: neutron/plugins/midonet/plugin.py:1075 #, python-format msgid "" "MidonetPluginV2.update_floatingip called: id=%(id)s " "floatingip=%(floatingip)s " msgstr "" -#: neutron/plugins/midonet/plugin.py:1100 +#: neutron/plugins/midonet/plugin.py:1094 #, python-format msgid "MidonetPluginV2.update_floating_ip exiting: fip=%s" msgstr "" -#: neutron/plugins/midonet/plugin.py:1122 +#: neutron/plugins/midonet/plugin.py:1116 #, python-format msgid "" "MidonetPluginV2.create_security_group called: " "security_group=%(security_group)s default_sg=%(default_sg)s " msgstr "" -#: neutron/plugins/midonet/plugin.py:1151 +#: neutron/plugins/midonet/plugin.py:1145 #, python-format msgid "Failed to create MidoNet resources for sg %(sg)r" msgstr "" -#: neutron/plugins/midonet/plugin.py:1158 +#: neutron/plugins/midonet/plugin.py:1152 #, python-format msgid "MidonetPluginV2.create_security_group exiting: sg=%r" msgstr "" -#: neutron/plugins/midonet/plugin.py:1164 +#: neutron/plugins/midonet/plugin.py:1158 #, python-format msgid "MidonetPluginV2.delete_security_group called: id=%s" msgstr "" -#: neutron/plugins/midonet/plugin.py:1196 +#: neutron/plugins/midonet/plugin.py:1190 #, python-format msgid "" "MidonetPluginV2.create_security_group_rule called: " "security_group_rule=%(security_group_rule)r" msgstr "" -#: neutron/plugins/midonet/plugin.py:1206 +#: neutron/plugins/midonet/plugin.py:1200 #, python-format msgid "MidonetPluginV2.create_security_group_rule exiting: rule=%r" msgstr "" -#: neutron/plugins/midonet/plugin.py:1216 +#: neutron/plugins/midonet/plugin.py:1210 #, python-format msgid "MidonetPluginV2.delete_security_group_rule called: sg_rule_id=%s" msgstr "" -#: neutron/plugins/midonet/common/config.py:23 +#: neutron/plugins/midonet/common/config.py:21 msgid "MidoNet API server URI." msgstr "" -#: neutron/plugins/midonet/common/config.py:25 +#: neutron/plugins/midonet/common/config.py:23 msgid "MidoNet admin username." msgstr "" -#: neutron/plugins/midonet/common/config.py:28 +#: neutron/plugins/midonet/common/config.py:26 msgid "MidoNet admin password." msgstr "" -#: neutron/plugins/midonet/common/config.py:31 +#: neutron/plugins/midonet/common/config.py:29 msgid "ID of the project that MidoNet admin userbelongs to." msgstr "" -#: neutron/plugins/midonet/common/config.py:34 +#: neutron/plugins/midonet/common/config.py:32 msgid "Virtual provider router ID." msgstr "" -#: neutron/plugins/midonet/common/config.py:37 +#: neutron/plugins/midonet/common/config.py:35 msgid "Operational mode. Internal dev use only." msgstr "" -#: neutron/plugins/midonet/common/config.py:40 +#: neutron/plugins/midonet/common/config.py:38 msgid "Path to midonet host uuid file" msgstr "" @@ -8722,7 +8742,7 @@ msgid "Added segment %(id)s of type %(network_type)s for network %(network_id)s" msgstr "" #: neutron/plugins/ml2/db.py:197 neutron/plugins/ml2/db.py:249 -#: neutron/plugins/ml2/plugin.py:1025 +#: neutron/plugins/ml2/plugin.py:1029 #, python-format msgid "Multiple ports have port_id starting with %s" msgstr "" @@ -9003,34 +9023,34 @@ msgstr "" msgid "No Host supplied to bind DVR Port %s" msgstr "" -#: neutron/plugins/ml2/plugin.py:941 +#: neutron/plugins/ml2/plugin.py:945 #: neutron/tests/unit/ml2/test_ml2_plugin.py:144 #, python-format msgid "Deleting port %s" msgstr "" -#: neutron/plugins/ml2/plugin.py:961 +#: neutron/plugins/ml2/plugin.py:965 #: neutron/tests/unit/ml2/test_ml2_plugin.py:145 #, python-format msgid "The port '%s' was deleted" msgstr "" -#: neutron/plugins/ml2/plugin.py:1010 +#: neutron/plugins/ml2/plugin.py:1014 #, python-format msgid "mechanism_manager.delete_port_postcommit failed for port %s" msgstr "" -#: neutron/plugins/ml2/plugin.py:1034 +#: neutron/plugins/ml2/plugin.py:1038 #, python-format msgid "Binding info for DVR port %s not found" msgstr "" -#: neutron/plugins/ml2/plugin.py:1060 +#: neutron/plugins/ml2/plugin.py:1064 #, python-format msgid "Port %(port)s updated up by agent not found" msgstr "" -#: neutron/plugins/ml2/plugin.py:1090 +#: neutron/plugins/ml2/plugin.py:1094 #, python-format msgid "Port %s not found during update" msgstr "" @@ -9075,7 +9095,7 @@ msgid "" msgstr "" #: neutron/plugins/ml2/drivers/mech_agent.py:54 -#: neutron/plugins/ml2/drivers/mechanism_odl.py:327 +#: neutron/plugins/ml2/drivers/mechanism_odl.py:325 #, python-format msgid "Attempting to bind port %(port)s on network %(network)s" msgstr "" @@ -9091,7 +9111,7 @@ msgid "Checking agent: %s" msgstr "" #: neutron/plugins/ml2/drivers/mech_agent.py:70 -#: neutron/plugins/ml2/drivers/mechanism_odl.py:337 +#: neutron/plugins/ml2/drivers/mechanism_odl.py:335 #, python-format msgid "Bound using segment: %s" msgstr "" @@ -9115,99 +9135,55 @@ msgid "" "tunnel_types: %(tunnel_types)s" msgstr "" -#: neutron/plugins/ml2/drivers/mechanism_fslsdn.py:35 -msgid "CRD service Username" -msgstr "" - -#: neutron/plugins/ml2/drivers/mechanism_fslsdn.py:38 -msgid "CRD Service Password" -msgstr "" - -#: neutron/plugins/ml2/drivers/mechanism_fslsdn.py:40 -msgid "CRD Tenant Name" -msgstr "" - -#: neutron/plugins/ml2/drivers/mechanism_fslsdn.py:43 -msgid "CRD Auth URL" -msgstr "" - -#: neutron/plugins/ml2/drivers/mechanism_fslsdn.py:46 -msgid "URL for connecting to CRD service" -msgstr "" - -#: neutron/plugins/ml2/drivers/mechanism_fslsdn.py:49 -msgid "Timeout value for connecting to CRD service in seconds" -msgstr "" - -#: neutron/plugins/ml2/drivers/mechanism_fslsdn.py:53 -msgid "Region name for connecting to CRD Service in admin context" -msgstr "" - -#: neutron/plugins/ml2/drivers/mechanism_fslsdn.py:57 -msgid "If set, ignore any SSL validation issues" -msgstr "" - -#: neutron/plugins/ml2/drivers/mechanism_fslsdn.py:60 -msgid "Auth strategy for connecting to neutron in admin context" -msgstr "" - -#: neutron/plugins/ml2/drivers/mechanism_fslsdn.py:63 -msgid "Location of ca certificates file to use for CRD client requests." -msgstr "" - -#: neutron/plugins/ml2/drivers/mechanism_fslsdn.py:87 -msgid "Initializing CRD client... " -msgstr "" - #: neutron/plugins/ml2/drivers/mechanism_ncs.py:29 msgid "HTTP URL of Tail-f NCS REST interface." msgstr "" #: neutron/plugins/ml2/drivers/mechanism_ncs.py:31 -#: neutron/plugins/ml2/drivers/mechanism_odl.py:46 +#: neutron/plugins/ml2/drivers/mechanism_odl.py:44 msgid "HTTP username for authentication" msgstr "" #: neutron/plugins/ml2/drivers/mechanism_ncs.py:33 -#: neutron/plugins/ml2/drivers/mechanism_odl.py:48 +#: neutron/plugins/ml2/drivers/mechanism_odl.py:46 msgid "HTTP password for authentication" msgstr "" #: neutron/plugins/ml2/drivers/mechanism_ncs.py:35 -#: neutron/plugins/ml2/drivers/mechanism_odl.py:50 +#: neutron/plugins/ml2/drivers/mechanism_odl.py:48 msgid "HTTP timeout in seconds." msgstr "" -#: neutron/plugins/ml2/drivers/mechanism_odl.py:44 +#: neutron/plugins/ml2/drivers/mechanism_odl.py:42 msgid "HTTP URL of OpenDaylight REST interface." msgstr "" -#: neutron/plugins/ml2/drivers/mechanism_odl.py:52 +#: neutron/plugins/ml2/drivers/mechanism_odl.py:50 msgid "Tomcat session timeout in minutes." msgstr "" -#: neutron/plugins/ml2/drivers/mechanism_odl.py:102 +#: neutron/plugins/ml2/drivers/mechanism_odl.py:100 #, python-format msgid "Failed to authenticate with OpenDaylight: %s" msgstr "" -#: neutron/plugins/ml2/drivers/mechanism_odl.py:105 +#: neutron/plugins/ml2/drivers/mechanism_odl.py:103 #, python-format msgid "Authentication Timed Out: %s" msgstr "" -#: neutron/plugins/ml2/drivers/mechanism_odl.py:315 +#: neutron/plugins/ml2/drivers/mechanism_odl.py:313 #, python-format msgid "ODL-----> sending URL (%s) <-----ODL" msgstr "" -#: neutron/plugins/ml2/drivers/mechanism_odl.py:316 +#: neutron/plugins/ml2/drivers/mechanism_odl.py:314 #, python-format msgid "ODL-----> sending JSON (%s) <-----ODL" msgstr "" -#: neutron/plugins/ml2/drivers/mechanism_odl.py:340 -#: neutron/plugins/ml2/drivers/mech_nuage/driver.py:94 +#: neutron/plugins/ml2/drivers/mechanism_odl.py:338 +#: neutron/plugins/ml2/drivers/mech_nuage/driver.py:91 #, python-format msgid "" "Refusing to bind port for segment ID %(id)s, segment %(seg)s, phys net " @@ -9261,13 +9237,17 @@ msgstr "" msgid "No flat network found on physical network %s" msgstr "" -#: neutron/plugins/ml2/drivers/type_gre.py:34 +#: neutron/plugins/ml2/drivers/type_gre.py:35 msgid "" "Comma-separated list of : tuples enumerating ranges of " "GRE tunnel IDs that are available for tenant network allocation" msgstr "" -#: neutron/plugins/ml2/drivers/type_gre.py:126 +#: neutron/plugins/ml2/drivers/type_gre.py:75 +msgid "Failed to parse tunnel_id_ranges. Service terminated!" +msgstr "" + +#: neutron/plugins/ml2/drivers/type_gre.py:132 #, python-format msgid "Gre endpoint with ip %s already exists" msgstr "" @@ -9281,16 +9261,6 @@ msgstr "" msgid "%s prohibited for local provider network" msgstr "" -#: neutron/plugins/ml2/drivers/type_tunnel.py:76 -#, python-format -msgid "Invalid tunnel ID range: '%(range)s' - %(e)s. Agent terminated!" -msgstr "" - -#: neutron/plugins/ml2/drivers/type_tunnel.py:79 -#, python-format -msgid "%(type)s ID ranges: %(range)s" -msgstr "" - #: neutron/plugins/ml2/drivers/type_tunnel.py:88 #: neutron/plugins/openvswitch/ovs_neutron_plugin.py:437 #, python-format @@ -9356,53 +9326,57 @@ msgstr "" msgid "Multicast group for VXLAN. If unset, disables VXLAN multicast mode." msgstr "" -#: neutron/plugins/ml2/drivers/type_vxlan.py:127 +#: neutron/plugins/ml2/drivers/type_vxlan.py:82 +msgid "Failed to parse vni_ranges. Service terminated!" +msgstr "" + +#: neutron/plugins/ml2/drivers/type_vxlan.py:132 msgid "get_vxlan_endpoints() called" msgstr "" -#: neutron/plugins/ml2/drivers/type_vxlan.py:137 +#: neutron/plugins/ml2/drivers/type_vxlan.py:142 #, python-format msgid "add_vxlan_endpoint() called for ip %s" msgstr "" -#: neutron/plugins/ml2/drivers/type_vxlan.py:146 +#: neutron/plugins/ml2/drivers/type_vxlan.py:151 #, python-format msgid "Vxlan endpoint with ip %s already exists" msgstr "" -#: neutron/plugins/ml2/drivers/arista/arista_l3_driver.py:32 +#: neutron/plugins/ml2/drivers/arista/arista_l3_driver.py:29 #: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:32 msgid "Unable to reach EOS" msgstr "" -#: neutron/plugins/ml2/drivers/arista/arista_l3_driver.py:132 +#: neutron/plugins/ml2/drivers/arista/arista_l3_driver.py:129 msgid "Required option primary_l3_host is not set" msgstr "" -#: neutron/plugins/ml2/drivers/arista/arista_l3_driver.py:138 +#: neutron/plugins/ml2/drivers/arista/arista_l3_driver.py:135 msgid "VRFs are not supported MLAG config mode" msgstr "" -#: neutron/plugins/ml2/drivers/arista/arista_l3_driver.py:142 +#: neutron/plugins/ml2/drivers/arista/arista_l3_driver.py:139 msgid "Required option secondary_l3_host is not set" msgstr "" -#: neutron/plugins/ml2/drivers/arista/arista_l3_driver.py:146 +#: neutron/plugins/ml2/drivers/arista/arista_l3_driver.py:143 msgid "Required option primary_l3_host_username is not set" msgstr "" -#: neutron/plugins/ml2/drivers/arista/arista_l3_driver.py:327 -#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:435 +#: neutron/plugins/ml2/drivers/arista/arista_l3_driver.py:324 +#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:453 #, python-format msgid "Executing command on Arista EOS: %s" msgstr "" -#: neutron/plugins/ml2/drivers/arista/arista_l3_driver.py:333 +#: neutron/plugins/ml2/drivers/arista/arista_l3_driver.py:330 #, python-format msgid "Results of execution on Arista EOS: %s" msgstr "" -#: neutron/plugins/ml2/drivers/arista/arista_l3_driver.py:336 +#: neutron/plugins/ml2/drivers/arista/arista_l3_driver.py:333 #, python-format msgid "Error occured while trying to execute commands %(cmd)s on EOS %(host)s" msgstr "" @@ -9496,380 +9470,384 @@ msgid "" "field. If not set, a value of 180 seconds is assumed" msgstr "" -#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:75 +#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:76 #, python-format msgid "'timestamp' command '%s' is not available on EOS" msgstr "" -#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:317 +#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:330 #, python-format msgid "VM id %(vmid)s not found for port %(portid)s" msgstr "" -#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:336 +#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:349 #, python-format msgid "Unknown device owner: %s" msgstr "" -#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:450 +#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:468 #, python-format msgid "Error %(err)s while trying to execute commands %(cmd)s on EOS %(host)s" msgstr "" -#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:522 +#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:540 msgid "Required option eapi_host is not set" msgstr "" -#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:526 +#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:544 msgid "Required option eapi_username is not set" msgstr "" -#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:546 +#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:565 +msgid "Sync start trigger sent to EOS" +msgstr "" + +#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:582 msgid "Syncing Neutron <-> EOS" msgstr "" -#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:552 +#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:588 msgid "OpenStack and EOS are in sync!" msgstr "" -#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:574 +#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:610 #, python-format msgid "" "No Tenants configured in Neutron DB. But %d tenants discovered in EOS " "during synchronization.Entire EOS region is cleared" msgstr "" -#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:739 +#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:775 #, python-format msgid "Network %s is not created as it is not found inArista DB" msgstr "" -#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:753 +#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:789 #, python-format msgid "Network name changed to %s" msgstr "" -#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:781 +#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:817 #, python-format msgid "Network %s is not updated as it is not found inArista DB" msgstr "" -#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:873 +#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:909 #, python-format msgid "VM %s is not created as it is not found in Arista DB" msgstr "" -#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:888 +#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:924 #, python-format msgid "Port name changed to %s" msgstr "" -#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:938 +#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:974 #, python-format msgid "VM %s is not updated as it is not found in Arista DB" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:40 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:37 msgid "Allowed physical networks" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:42 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:39 msgid "OS Type of the switch" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:44 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:41 msgid "OS Version number" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:95 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:92 msgid "Virtual Fabric: enabled" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:97 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:94 msgid "Virtual Fabric: not enabled" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:135 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:132 msgid "" "Brocade Mechanism: failed to create network, network cannot be created in" " the configured physical network" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:141 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:138 msgid "" "Brocade Mechanism: failed to create network, only network type vlan is " "supported" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:149 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:146 msgid "Brocade Mechanism: failed to create network in db" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:151 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:148 msgid "Brocade Mechanism: create_network_precommit failed" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:153 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:150 #, python-format msgid "" "create network (precommit): %(network_id)s of network type = " "%(network_type)s with vlan = %(vlan_id)s for tenant %(tenant_id)s" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:165 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:162 msgid "create_network_postcommit: called" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:185 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:182 msgid "Brocade NOS driver: failed in create network" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:188 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:185 msgid "Brocade Mechanism: create_network_postcommmit failed" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:190 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:187 #, python-format msgid "" "created network (postcommit): %(network_id)s of network type = " "%(network_type)s with vlan = %(vlan_id)s for tenant %(tenant_id)s" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:202 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:199 msgid "delete_network_precommit: called" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:215 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:212 msgid "Brocade Mechanism: failed to delete network in db" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:217 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:214 msgid "Brocade Mechanism: delete_network_precommit failed" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:219 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:216 #, python-format msgid "" "delete network (precommit): %(network_id)s with vlan = %(vlan_id)s for " "tenant %(tenant_id)s" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:231 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:228 msgid "delete_network_postcommit: called" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:243 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:240 msgid "Brocade NOS driver: failed to delete network" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:245 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:242 msgid "Brocade switch exception, delete_network_postcommit failed" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:248 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:245 #, python-format msgid "" "delete network (postcommit): %(network_id)s with vlan = %(vlan_id)s for " "tenant %(tenant_id)s" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:266 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:263 msgid "create_port_precommit: called" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:284 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:281 msgid "Brocade Mechanism: failed to create port in db" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:286 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:283 msgid "Brocade Mechanism: create_port_precommit failed" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:291 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:288 msgid "create_port_postcommit: called" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:315 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:312 #, python-format msgid "Brocade NOS driver: failed to associate mac %s" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:318 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:315 msgid "Brocade switch exception: create_port_postcommit failed" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:321 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:318 #, python-format msgid "" "created port (postcommit): port_id=%(port_id)s network_id=%(network_id)s " "tenant_id=%(tenant_id)s" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:329 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:326 msgid "delete_port_precommit: called" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:338 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:335 msgid "Brocade Mechanism: failed to delete port in db" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:340 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:337 msgid "Brocade Mechanism: delete_port_precommit failed" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:345 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:342 msgid "delete_port_postcommit: called" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:369 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:366 #, python-format msgid "Brocade NOS driver: failed to dissociate MAC %s" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:372 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:369 msgid "Brocade switch exception, delete_port_postcommit failed" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:375 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:372 #, python-format msgid "" "delete port (postcommit): port_id=%(port_id)s network_id=%(network_id)s " "tenant_id=%(tenant_id)s" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:382 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:379 msgid "update_port_precommit(self: called" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:386 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:383 msgid "update_port_postcommit: called" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:390 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:387 msgid "create_subnetwork_precommit: called" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:394 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:391 msgid "create_subnetwork_postcommit: called" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:398 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:395 msgid "delete_subnetwork_precommit: called" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:402 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:399 msgid "delete_subnetwork_postcommit: called" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:406 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:403 msgid "update_subnet_precommit(self: called" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:410 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:407 msgid "update_subnet_postcommit: called" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:77 +#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:73 msgid "" "Brocade Switch IP address is not set, check config ml2_conf_brocade.ini " "file" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:88 +#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:84 msgid "Connect failed to switch" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:107 -#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:117 -#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:145 -#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:162 -#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:175 -#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:188 -#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:355 -#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:374 -#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:388 -#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:401 -#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:414 +#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:103 +#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:113 +#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:141 +#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:158 +#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:171 +#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:184 +#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:351 +#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:370 +#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:384 +#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:397 +#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:410 msgid "NETCONF error" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/config.py:30 +#: neutron/plugins/ml2/drivers/cisco/apic/config.py:28 msgid "Prefix for APIC domain/names/profiles created" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/config.py:40 +#: neutron/plugins/ml2/drivers/cisco/apic/config.py:38 msgid "An ordered list of host names or IP addresses of the APIC controller(s)." msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/config.py:43 +#: neutron/plugins/ml2/drivers/cisco/apic/config.py:41 msgid "Username for the APIC controller" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/config.py:45 +#: neutron/plugins/ml2/drivers/cisco/apic/config.py:43 msgid "Password for the APIC controller" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/config.py:48 +#: neutron/plugins/ml2/drivers/cisco/apic/config.py:46 msgid "Name mapping strategy to use: use_uuid | use_name" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/config.py:50 +#: neutron/plugins/ml2/drivers/cisco/apic/config.py:48 msgid "Use SSL to connect to the APIC controller" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/config.py:53 +#: neutron/plugins/ml2/drivers/cisco/apic/config.py:51 msgid "Name for the domain created on APIC" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/config.py:56 +#: neutron/plugins/ml2/drivers/cisco/apic/config.py:54 msgid "Name for the app profile used for Openstack" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/config.py:59 +#: neutron/plugins/ml2/drivers/cisco/apic/config.py:57 msgid "Name for the vlan namespace to be used for Openstack" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/config.py:62 +#: neutron/plugins/ml2/drivers/cisco/apic/config.py:60 msgid "Name of the node profile to be created" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/config.py:65 +#: neutron/plugins/ml2/drivers/cisco/apic/config.py:63 msgid "Name of the entity profile to be created" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/config.py:68 +#: neutron/plugins/ml2/drivers/cisco/apic/config.py:66 msgid "Name of the function profile to be created" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/config.py:71 +#: neutron/plugins/ml2/drivers/cisco/apic/config.py:69 msgid "Name of the LACP profile to be created" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/config.py:74 +#: neutron/plugins/ml2/drivers/cisco/apic/config.py:72 msgid "The uplink ports to check for ACI connectivity" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/config.py:77 +#: neutron/plugins/ml2/drivers/cisco/apic/config.py:75 msgid "The switch pairs for VPC connectivity" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/config.py:80 +#: neutron/plugins/ml2/drivers/cisco/apic/config.py:78 msgid "Range of VLAN's to be used for Openstack" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/config.py:83 +#: neutron/plugins/ml2/drivers/cisco/apic/config.py:81 msgid "Setup root helper as rootwrap or sudo" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/config.py:86 +#: neutron/plugins/ml2/drivers/cisco/apic/config.py:84 msgid "Synchronization interval in seconds" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/config.py:89 +#: neutron/plugins/ml2/drivers/cisco/apic/config.py:87 msgid "Interval between agent status updates (in sec)" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/config.py:92 +#: neutron/plugins/ml2/drivers/cisco/apic/config.py:90 msgid "Interval between agent poll for topology (in sec)" msgstr "" @@ -9948,64 +9926,108 @@ msgstr "" msgid "NexusDriver created VLAN: %s" msgstr "" -#: neutron/plugins/ml2/drivers/l2pop/config.py:25 +#: neutron/plugins/ml2/drivers/freescale/config.py:29 +msgid "CRD service Username." +msgstr "" + +#: neutron/plugins/ml2/drivers/freescale/config.py:32 +msgid "CRD Service Password." +msgstr "" + +#: neutron/plugins/ml2/drivers/freescale/config.py:34 +msgid "CRD Tenant Name." +msgstr "" + +#: neutron/plugins/ml2/drivers/freescale/config.py:37 +msgid "CRD Auth URL." +msgstr "" + +#: neutron/plugins/ml2/drivers/freescale/config.py:40 +msgid "URL for connecting to CRD service." +msgstr "" + +#: neutron/plugins/ml2/drivers/freescale/config.py:43 +msgid "Timeout value for connecting to CRD service in seconds." +msgstr "" + +#: neutron/plugins/ml2/drivers/freescale/config.py:47 +msgid "Region name for connecting to CRD Service in admin context." +msgstr "" + +#: neutron/plugins/ml2/drivers/freescale/config.py:51 +msgid "If set, ignore any SSL validation issues." +msgstr "" + +#: neutron/plugins/ml2/drivers/freescale/config.py:54 +msgid "Auth strategy for connecting to neutron in admin context." +msgstr "" + +#: neutron/plugins/ml2/drivers/freescale/config.py:57 +msgid "Location of ca certificates file to use for CRD client requests." +msgstr "" + +#: neutron/plugins/ml2/drivers/freescale/mechanism_fslsdn.py:38 +msgid "Initializing CRD client... " +msgstr "" + +#: neutron/plugins/ml2/drivers/l2pop/config.py:21 msgid "" "Delay within which agent is expected to update existing ports whent it " "restarts" msgstr "" -#: neutron/plugins/ml2/drivers/l2pop/mech_driver.py:42 +#: neutron/plugins/ml2/drivers/l2pop/mech_driver.py:38 msgid "Experimental L2 population driver" msgstr "" -#: neutron/plugins/ml2/drivers/l2pop/mech_driver.py:167 +#: neutron/plugins/ml2/drivers/l2pop/mech_driver.py:163 msgid "Unable to retrieve the agent ip, check the agent configuration." msgstr "" -#: neutron/plugins/ml2/drivers/l2pop/mech_driver.py:173 +#: neutron/plugins/ml2/drivers/l2pop/mech_driver.py:169 #, python-format msgid "Port %(port)s updated by agent %(agent)s isn't bound to any segment" msgstr "" -#: neutron/plugins/ml2/drivers/l2pop/mech_driver.py:226 +#: neutron/plugins/ml2/drivers/l2pop/mech_driver.py:222 #, python-format msgid "" "Unable to retrieve the agent ip, check the agent %(agent_host)s " "configuration." msgstr "" -#: neutron/plugins/ml2/drivers/l2pop/rpc.py:40 +#: neutron/plugins/ml2/drivers/l2pop/rpc.py:36 #, python-format msgid "" "Fanout notify l2population agents at %(topic)s the message %(method)s " "with %(fdb_entries)s" msgstr "" -#: neutron/plugins/ml2/drivers/l2pop/rpc.py:51 +#: neutron/plugins/ml2/drivers/l2pop/rpc.py:47 #, python-format msgid "" "Notify l2population agent %(host)s at %(topic)s the message %(method)s " "with %(fdb_entries)s" msgstr "" -#: neutron/plugins/ml2/drivers/mech_bigswitch/driver.py:54 +#: neutron/plugins/ml2/drivers/mech_bigswitch/driver.py:52 msgid "Initializing driver" msgstr "" -#: neutron/plugins/ml2/drivers/mech_bigswitch/driver.py:72 +#: neutron/plugins/ml2/drivers/mech_bigswitch/driver.py:70 msgid "Initialization done" msgstr "" -#: neutron/plugins/ml2/drivers/mech_bigswitch/driver.py:133 +#: neutron/plugins/ml2/drivers/mech_bigswitch/driver.py:137 msgid "Ignoring port notification to controller because of missing host ID." msgstr "" -#: neutron/plugins/ml2/drivers/mech_bigswitch/driver.py:202 +#: neutron/plugins/ml2/drivers/mech_bigswitch/driver.py:206 #, python-format msgid "No cache entry for host %s" msgstr "" -#: neutron/plugins/ml2/drivers/mech_bigswitch/driver.py:207 +#: neutron/plugins/ml2/drivers/mech_bigswitch/driver.py:211 #, python-format msgid "Expired cache entry for host %s" msgstr "" @@ -10361,112 +10383,112 @@ msgstr "" msgid "Set_port_status as %s called" msgstr "" -#: neutron/plugins/nec/nec_plugin.py:206 +#: neutron/plugins/nec/nec_plugin.py:204 #, python-format msgid "_cleanup_ofc_tenant: No OFC tenant for %s" msgstr "" -#: neutron/plugins/nec/nec_plugin.py:209 +#: neutron/plugins/nec/nec_plugin.py:207 #, python-format msgid "delete_ofc_tenant() failed due to %s" msgstr "" -#: neutron/plugins/nec/nec_plugin.py:225 +#: neutron/plugins/nec/nec_plugin.py:223 msgid "activate_port_if_ready(): skip, port.admin_state_up is False." msgstr "" -#: neutron/plugins/nec/nec_plugin.py:229 +#: neutron/plugins/nec/nec_plugin.py:227 msgid "activate_port_if_ready(): skip, network.admin_state_up is False." msgstr "" -#: neutron/plugins/nec/nec_plugin.py:233 +#: neutron/plugins/nec/nec_plugin.py:231 msgid "activate_port_if_ready(): skip, no portinfo for this port." msgstr "" -#: neutron/plugins/nec/nec_plugin.py:237 +#: neutron/plugins/nec/nec_plugin.py:235 msgid "activate_port_if_ready(): skip, ofc_port already exists." msgstr "" -#: neutron/plugins/nec/nec_plugin.py:245 +#: neutron/plugins/nec/nec_plugin.py:243 #, python-format msgid "create_ofc_port() failed due to %s" msgstr "" -#: neutron/plugins/nec/nec_plugin.py:258 +#: neutron/plugins/nec/nec_plugin.py:256 #, python-format msgid "deactivate_port(): skip, ofc_port for port=%s does not exist." msgstr "" -#: neutron/plugins/nec/nec_plugin.py:277 +#: neutron/plugins/nec/nec_plugin.py:275 #, python-format msgid "deactivate_port(): OFC port for port=%s is already removed." msgstr "" -#: neutron/plugins/nec/nec_plugin.py:285 +#: neutron/plugins/nec/nec_plugin.py:283 #, python-format msgid "Failed to delete port=%(port)s from OFC: %(exc)s" msgstr "" -#: neutron/plugins/nec/nec_plugin.py:304 +#: neutron/plugins/nec/nec_plugin.py:302 #, python-format msgid "NECPluginV2.create_network() called, network=%s ." msgstr "" -#: neutron/plugins/nec/nec_plugin.py:321 +#: neutron/plugins/nec/nec_plugin.py:319 #, python-format msgid "Failed to create network id=%(id)s on OFC: %(exc)s" msgstr "" -#: neutron/plugins/nec/nec_plugin.py:337 +#: neutron/plugins/nec/nec_plugin.py:335 #, python-format msgid "NECPluginV2.update_network() called, id=%(id)s network=%(network)s ." msgstr "" -#: neutron/plugins/nec/nec_plugin.py:381 +#: neutron/plugins/nec/nec_plugin.py:379 #, python-format msgid "NECPluginV2.delete_network() called, id=%s ." msgstr "" -#: neutron/plugins/nec/nec_plugin.py:415 +#: neutron/plugins/nec/nec_plugin.py:413 #, python-format msgid "delete_network() failed due to %s" msgstr "" -#: neutron/plugins/nec/nec_plugin.py:556 +#: neutron/plugins/nec/nec_plugin.py:554 #, python-format msgid "NECPluginV2.create_port() called, port=%s ." msgstr "" -#: neutron/plugins/nec/nec_plugin.py:620 +#: neutron/plugins/nec/nec_plugin.py:618 #, python-format msgid "NECPluginV2.update_port() called, id=%(id)s port=%(port)s ." msgstr "" -#: neutron/plugins/nec/nec_plugin.py:648 +#: neutron/plugins/nec/nec_plugin.py:646 #, python-format msgid "NECPluginV2.delete_port() called, id=%s ." msgstr "" -#: neutron/plugins/nec/nec_plugin.py:715 +#: neutron/plugins/nec/nec_plugin.py:713 #, python-format msgid "NECPluginV2RPCCallbacks.update_ports() called, kwargs=%s ." msgstr "" -#: neutron/plugins/nec/nec_plugin.py:725 +#: neutron/plugins/nec/nec_plugin.py:723 #, python-format msgid "" "update_ports(): ignore unchanged portinfo in port_added message " "(port_id=%s)." msgstr "" -#: neutron/plugins/nec/nec_plugin.py:745 +#: neutron/plugins/nec/nec_plugin.py:743 #, python-format msgid "" "update_ports(): ignore port_removed message due to portinfo for " "port_id=%s was not registered" msgstr "" -#: neutron/plugins/nec/nec_plugin.py:750 +#: neutron/plugins/nec/nec_plugin.py:748 #, python-format msgid "" "update_ports(): ignore port_removed message received from different host " @@ -10474,360 +10496,360 @@ msgid "" "received_datapath_id=%(received)s)." msgstr "" -#: neutron/plugins/nec/nec_router.py:58 +#: neutron/plugins/nec/nec_router.py:56 #, python-format msgid "RouterMixin.create_router() called, router=%s ." msgstr "" -#: neutron/plugins/nec/nec_router.py:84 +#: neutron/plugins/nec/nec_router.py:82 #, python-format msgid "RouterMixin.update_router() called, id=%(id)s, router=%(router)s ." msgstr "" -#: neutron/plugins/nec/nec_router.py:102 +#: neutron/plugins/nec/nec_router.py:100 #, python-format msgid "RouterMixin.delete_router() called, id=%s." msgstr "" -#: neutron/plugins/nec/nec_router.py:121 +#: neutron/plugins/nec/nec_router.py:119 #, python-format msgid "" "RouterMixin.add_router_interface() called, id=%(id)s, " "interface=%(interface)s." msgstr "" -#: neutron/plugins/nec/nec_router.py:128 +#: neutron/plugins/nec/nec_router.py:126 #, python-format msgid "" "RouterMixin.remove_router_interface() called, id=%(id)s, " "interface=%(interface)s." msgstr "" -#: neutron/plugins/nec/nec_router.py:311 +#: neutron/plugins/nec/nec_router.py:310 #, python-format msgid "" "OFC does not support router with provider=%(provider)s, so removed it " "from supported provider (new router driver map=%(driver_map)s)" msgstr "" -#: neutron/plugins/nec/nec_router.py:319 +#: neutron/plugins/nec/nec_router.py:318 #, python-format msgid "" "default_router_provider %(default)s is supported! Please specify one of " "%(supported)s" msgstr "" -#: neutron/plugins/nec/nec_router.py:333 +#: neutron/plugins/nec/nec_router.py:332 #, python-format msgid "Enabled router drivers: %s" msgstr "" -#: neutron/plugins/nec/nec_router.py:336 +#: neutron/plugins/nec/nec_router.py:335 #, python-format msgid "" "No router provider is enabled. neutron-server terminated! " "(supported=%(supported)s, configured=%(config)s)" msgstr "" -#: neutron/plugins/nec/packet_filter.py:40 +#: neutron/plugins/nec/packet_filter.py:39 msgid "Disabled packet-filter extension." msgstr "" -#: neutron/plugins/nec/packet_filter.py:45 +#: neutron/plugins/nec/packet_filter.py:44 #, python-format msgid "create_packet_filter() called, packet_filter=%s ." msgstr "" -#: neutron/plugins/nec/packet_filter.py:61 +#: neutron/plugins/nec/packet_filter.py:60 #, python-format msgid "update_packet_filter() called, id=%(id)s packet_filter=%(packet_filter)s ." msgstr "" -#: neutron/plugins/nec/packet_filter.py:134 -#: neutron/plugins/nec/packet_filter.py:187 +#: neutron/plugins/nec/packet_filter.py:133 +#: neutron/plugins/nec/packet_filter.py:186 #, python-format msgid "Failed to create packet_filter id=%(id)s on OFC: %(exc)s" msgstr "" -#: neutron/plugins/nec/packet_filter.py:144 +#: neutron/plugins/nec/packet_filter.py:143 #, python-format msgid "delete_packet_filter() called, id=%s ." msgstr "" -#: neutron/plugins/nec/packet_filter.py:162 +#: neutron/plugins/nec/packet_filter.py:161 #, python-format msgid "activate_packet_filter_if_ready() called, packet_filter=%s." msgstr "" -#: neutron/plugins/nec/packet_filter.py:171 +#: neutron/plugins/nec/packet_filter.py:170 #, python-format msgid "" "activate_packet_filter_if_ready(): skip pf_id=%s, " "packet_filter.admin_state_up is False." msgstr "" -#: neutron/plugins/nec/packet_filter.py:174 +#: neutron/plugins/nec/packet_filter.py:173 #, python-format msgid "" "activate_packet_filter_if_ready(): skip pf_id=%s, no portinfo for the " "in_port." msgstr "" -#: neutron/plugins/nec/packet_filter.py:177 +#: neutron/plugins/nec/packet_filter.py:176 msgid "" "_activate_packet_filter_if_ready(): skip, ofc_packet_filter already " "exists." msgstr "" -#: neutron/plugins/nec/packet_filter.py:180 +#: neutron/plugins/nec/packet_filter.py:179 #, python-format msgid "activate_packet_filter_if_ready(): create packet_filter id=%s on OFC." msgstr "" -#: neutron/plugins/nec/packet_filter.py:200 +#: neutron/plugins/nec/packet_filter.py:199 #, python-format msgid "deactivate_packet_filter_if_ready() called, packet_filter=%s." msgstr "" -#: neutron/plugins/nec/packet_filter.py:205 +#: neutron/plugins/nec/packet_filter.py:204 #, python-format msgid "" "deactivate_packet_filter(): skip, Not found OFC Mapping for packet_filter" " id=%s." msgstr "" -#: neutron/plugins/nec/packet_filter.py:210 +#: neutron/plugins/nec/packet_filter.py:209 #, python-format msgid "deactivate_packet_filter(): deleting packet_filter id=%s from OFC." msgstr "" -#: neutron/plugins/nec/packet_filter.py:219 +#: neutron/plugins/nec/packet_filter.py:218 #, python-format msgid "Failed to delete packet_filter id=%(id)s from OFC: %(exc)s" msgstr "" -#: neutron/plugins/nec/packet_filter.py:250 +#: neutron/plugins/nec/packet_filter.py:249 #, python-format msgid "Error occurred while disabling packet filter(s) for port %s" msgstr "" -#: neutron/plugins/nec/router_drivers.py:125 +#: neutron/plugins/nec/router_drivers.py:123 #, python-format msgid "create_router() failed due to %s" msgstr "" -#: neutron/plugins/nec/router_drivers.py:154 +#: neutron/plugins/nec/router_drivers.py:152 #, python-format msgid "_update_ofc_routes() failed due to %s" msgstr "" -#: neutron/plugins/nec/router_drivers.py:169 +#: neutron/plugins/nec/router_drivers.py:167 #, python-format msgid "delete_router() failed due to %s" msgstr "" -#: neutron/plugins/nec/router_drivers.py:180 +#: neutron/plugins/nec/router_drivers.py:178 #, python-format msgid "" "RouterOpenFlowDriver.add_interface(): the requested port has no subnet. " "add_interface() is skipped. router_id=%(id)s, port=%(port)s)" msgstr "" -#: neutron/plugins/nec/router_drivers.py:200 +#: neutron/plugins/nec/router_drivers.py:198 #, python-format msgid "add_router_interface() failed due to %s" msgstr "" -#: neutron/plugins/nec/router_drivers.py:218 +#: neutron/plugins/nec/router_drivers.py:216 #, python-format msgid "delete_router_interface() failed due to %s" msgstr "" -#: neutron/plugins/nec/agent/nec_neutron_agent.py:53 +#: neutron/plugins/nec/agent/nec_neutron_agent.py:51 #, python-format msgid "Update ports: added=%(added)s, removed=%(removed)s" msgstr "" -#: neutron/plugins/nec/agent/nec_neutron_agent.py:76 -#: neutron/plugins/oneconvergence/agent/nvsd_neutron_agent.py:51 +#: neutron/plugins/nec/agent/nec_neutron_agent.py:74 +#: neutron/plugins/oneconvergence/agent/nvsd_neutron_agent.py:49 #, python-format msgid "port_update received: %s" msgstr "" -#: neutron/plugins/nec/agent/nec_neutron_agent.py:220 +#: neutron/plugins/nec/agent/nec_neutron_agent.py:218 msgid "No port changed." msgstr "" -#: neutron/plugins/nec/common/config.py:35 +#: neutron/plugins/nec/common/config.py:34 msgid "Host to connect to." msgstr "" -#: neutron/plugins/nec/common/config.py:37 +#: neutron/plugins/nec/common/config.py:36 msgid "Base URL of OFC REST API. It is prepended to each API request." msgstr "" -#: neutron/plugins/nec/common/config.py:40 +#: neutron/plugins/nec/common/config.py:39 msgid "Port to connect to." msgstr "" -#: neutron/plugins/nec/common/config.py:42 +#: neutron/plugins/nec/common/config.py:41 msgid "Driver to use." msgstr "" -#: neutron/plugins/nec/common/config.py:44 +#: neutron/plugins/nec/common/config.py:43 msgid "Enable packet filter." msgstr "" -#: neutron/plugins/nec/common/config.py:46 +#: neutron/plugins/nec/common/config.py:45 msgid "Use SSL to connect." msgstr "" -#: neutron/plugins/nec/common/config.py:48 +#: neutron/plugins/nec/common/config.py:47 msgid "Location of key file." msgstr "" -#: neutron/plugins/nec/common/config.py:50 +#: neutron/plugins/nec/common/config.py:49 msgid "Location of certificate file." msgstr "" -#: neutron/plugins/nec/common/config.py:52 +#: neutron/plugins/nec/common/config.py:51 msgid "Disable SSL certificate verification." msgstr "" -#: neutron/plugins/nec/common/config.py:54 +#: neutron/plugins/nec/common/config.py:53 msgid "" "Maximum attempts per OFC API request. NEC plugin retries API request to " "OFC when OFC returns ServiceUnavailable (503). The value must be greater " "than 0." msgstr "" -#: neutron/plugins/nec/common/config.py:63 +#: neutron/plugins/nec/common/config.py:62 msgid "Default router provider to use." msgstr "" -#: neutron/plugins/nec/common/config.py:66 +#: neutron/plugins/nec/common/config.py:65 msgid "List of enabled router providers." msgstr "" -#: neutron/plugins/nec/common/exceptions.py:20 +#: neutron/plugins/nec/common/exceptions.py:19 #, python-format msgid "An OFC exception has occurred: %(reason)s" msgstr "" -#: neutron/plugins/nec/common/exceptions.py:30 +#: neutron/plugins/nec/common/exceptions.py:29 #, python-format msgid "The specified OFC resource (%(resource)s) is not found." msgstr "" -#: neutron/plugins/nec/common/exceptions.py:34 +#: neutron/plugins/nec/common/exceptions.py:33 #, python-format msgid "An exception occurred in NECPluginV2 DB: %(reason)s" msgstr "" -#: neutron/plugins/nec/common/exceptions.py:38 +#: neutron/plugins/nec/common/exceptions.py:37 #, python-format msgid "" "Neutron-OFC resource mapping for %(resource)s %(neutron_id)s is not " "found. It may be deleted during processing." msgstr "" -#: neutron/plugins/nec/common/exceptions.py:44 +#: neutron/plugins/nec/common/exceptions.py:43 #, python-format msgid "OFC returns Server Unavailable (503) (Retry-After=%(retry_after)s)" msgstr "" -#: neutron/plugins/nec/common/exceptions.py:53 +#: neutron/plugins/nec/common/exceptions.py:52 #, python-format msgid "PortInfo %(id)s could not be found" msgstr "" -#: neutron/plugins/nec/common/exceptions.py:57 +#: neutron/plugins/nec/common/exceptions.py:56 msgid "" "Invalid input for operation: datapath_id should be a hex string with at " "most 8 bytes" msgstr "" -#: neutron/plugins/nec/common/exceptions.py:63 +#: neutron/plugins/nec/common/exceptions.py:62 msgid "Invalid input for operation: port_no should be [0:65535]" msgstr "" -#: neutron/plugins/nec/common/exceptions.py:68 +#: neutron/plugins/nec/common/exceptions.py:67 #, python-format msgid "Router (provider=%(provider)s) does not support an external network" msgstr "" -#: neutron/plugins/nec/common/exceptions.py:73 +#: neutron/plugins/nec/common/exceptions.py:72 #, python-format msgid "Provider %(provider)s could not be found" msgstr "" -#: neutron/plugins/nec/common/exceptions.py:77 +#: neutron/plugins/nec/common/exceptions.py:76 #, python-format msgid "Cannot create more routers with provider=%(provider)s" msgstr "" -#: neutron/plugins/nec/common/exceptions.py:81 +#: neutron/plugins/nec/common/exceptions.py:80 #, python-format msgid "" "Provider of Router %(router_id)s is %(provider)s. This operation is " "supported only for router provider %(expected_provider)s." msgstr "" -#: neutron/plugins/nec/common/ofc_client.py:54 +#: neutron/plugins/nec/common/ofc_client.py:53 #, python-format msgid "Operation on OFC failed: %(status)s%(msg)s" msgstr "" -#: neutron/plugins/nec/common/ofc_client.py:78 +#: neutron/plugins/nec/common/ofc_client.py:77 #, python-format msgid "Client request: %(host)s:%(port)s %(method)s %(action)s [%(body)s]" msgstr "" -#: neutron/plugins/nec/common/ofc_client.py:87 +#: neutron/plugins/nec/common/ofc_client.py:86 #, python-format msgid "OFC returns [%(status)s:%(data)s]" msgstr "" -#: neutron/plugins/nec/common/ofc_client.py:104 +#: neutron/plugins/nec/common/ofc_client.py:103 #, python-format msgid "OFC returns ServiceUnavailable (retry-after=%s)" msgstr "" -#: neutron/plugins/nec/common/ofc_client.py:108 +#: neutron/plugins/nec/common/ofc_client.py:107 #, python-format msgid "Specified resource %s does not exist on OFC " msgstr "" -#: neutron/plugins/nec/common/ofc_client.py:112 +#: neutron/plugins/nec/common/ofc_client.py:111 #, python-format msgid "Operation on OFC failed: status=%(status)s, detail=%(detail)s" msgstr "" -#: neutron/plugins/nec/common/ofc_client.py:115 +#: neutron/plugins/nec/common/ofc_client.py:114 msgid "Operation on OFC failed" msgstr "" -#: neutron/plugins/nec/common/ofc_client.py:124 +#: neutron/plugins/nec/common/ofc_client.py:123 #, python-format msgid "Failed to connect OFC : %s" msgstr "" -#: neutron/plugins/nec/common/ofc_client.py:140 +#: neutron/plugins/nec/common/ofc_client.py:139 #, python-format msgid "Waiting for %s seconds due to OFC Service_Unavailable." msgstr "" -#: neutron/plugins/nec/db/api.py:103 +#: neutron/plugins/nec/db/api.py:102 #, python-format msgid "del_ofc_item(): NotFound item (resource=%(resource)s, id=%(id)s) " msgstr "" -#: neutron/plugins/nec/db/api.py:137 +#: neutron/plugins/nec/db/api.py:136 #, python-format msgid "del_portinfo(): NotFound portinfo for port_id: %s" msgstr "" -#: neutron/plugins/nec/db/api.py:158 +#: neutron/plugins/nec/db/api.py:157 #: neutron/plugins/openvswitch/ovs_db_v2.py:317 #, python-format msgid "get_port_with_securitygroups() called:port_id=%s" @@ -10838,257 +10860,257 @@ msgstr "" msgid "Add provider binding (router=%(router_id)s, provider=%(provider)s)" msgstr "" -#: neutron/plugins/nec/drivers/__init__.py:36 +#: neutron/plugins/nec/drivers/__init__.py:35 #, python-format msgid "Loading OFC driver: %s" msgstr "" -#: neutron/plugins/nec/drivers/pfc.py:33 +#: neutron/plugins/nec/drivers/pfc.py:31 #, python-format msgid "OFC %(resource)s ID has an invalid format: %(ofc_id)s" msgstr "" -#: neutron/plugins/nec/extensions/packetfilter.py:33 +#: neutron/plugins/nec/extensions/packetfilter.py:30 msgid "Number of packet_filters allowed per tenant, -1 for unlimited" msgstr "" -#: neutron/plugins/nec/extensions/packetfilter.py:40 +#: neutron/plugins/nec/extensions/packetfilter.py:37 #, python-format msgid "PacketFilter %(id)s could not be found" msgstr "" -#: neutron/plugins/nec/extensions/packetfilter.py:44 +#: neutron/plugins/nec/extensions/packetfilter.py:41 #, python-format msgid "" "IP version %(version)s is not supported for %(field)s (%(value)s is " "specified)" msgstr "" -#: neutron/plugins/nec/extensions/packetfilter.py:49 +#: neutron/plugins/nec/extensions/packetfilter.py:46 #, python-format msgid "Packet Filter priority should be %(min)s-%(max)s (included)" msgstr "" -#: neutron/plugins/nec/extensions/packetfilter.py:53 +#: neutron/plugins/nec/extensions/packetfilter.py:50 #, python-format msgid "%(field)s field cannot be updated" msgstr "" -#: neutron/plugins/nec/extensions/packetfilter.py:57 +#: neutron/plugins/nec/extensions/packetfilter.py:54 #, python-format msgid "" "The backend does not support duplicated priority. Priority %(priority)s " "is in use" msgstr "" -#: neutron/plugins/nec/extensions/packetfilter.py:62 +#: neutron/plugins/nec/extensions/packetfilter.py:59 #, python-format msgid "" "Ether Type '%(eth_type)s' conflicts with protocol '%(protocol)s'. Update " "or clear protocol before changing ether type." msgstr "" -#: neutron/plugins/nuage/plugin.py:109 +#: neutron/plugins/nuage/plugin.py:110 #, python-format msgid "%(resource)s with id %(resource_id)s does not exist" msgstr "" -#: neutron/plugins/nuage/plugin.py:118 +#: neutron/plugins/nuage/plugin.py:119 #, python-format msgid "" "Either %(resource)s %(req_resource)s not found or you dont have " "credential to access it" msgstr "" -#: neutron/plugins/nuage/plugin.py:124 +#: neutron/plugins/nuage/plugin.py:125 #, python-format msgid "" "More than one entry found for %(resource)s %(req_resource)s. Use id " "instead" msgstr "" -#: neutron/plugins/nuage/plugin.py:154 +#: neutron/plugins/nuage/plugin.py:155 #, python-format msgid "Router for subnet %s not found " msgstr "" -#: neutron/plugins/nuage/plugin.py:271 +#: neutron/plugins/nuage/plugin.py:272 #, python-format msgid "Subnet %s not found on VSD" msgstr "" -#: neutron/plugins/nuage/plugin.py:416 +#: neutron/plugins/nuage/plugin.py:418 #, python-format msgid "provider:network_type %s not supported in VSP" msgstr "" -#: neutron/plugins/nuage/plugin.py:461 +#: neutron/plugins/nuage/plugin.py:463 msgid "External network with subnets can not be changed to non-external network" msgstr "" -#: neutron/plugins/nuage/plugin.py:539 +#: neutron/plugins/nuage/plugin.py:541 msgid "" "Either net_partition is not provided with subnet OR default net_partition" " is not created at the start" msgstr "" -#: neutron/plugins/nuage/plugin.py:556 +#: neutron/plugins/nuage/plugin.py:558 #, python-format msgid "Only one subnet is allowed per Provider network %s" msgstr "" -#: neutron/plugins/nuage/plugin.py:567 +#: neutron/plugins/nuage/plugin.py:569 #, python-format msgid "Only one subnet is allowed per external network %s" msgstr "" -#: neutron/plugins/nuage/plugin.py:697 +#: neutron/plugins/nuage/plugin.py:705 #, python-format msgid "" "Unable to complete operation on subnet %s.One or more ports have an IP " "allocation from this subnet." msgstr "" -#: neutron/plugins/nuage/plugin.py:724 +#: neutron/plugins/nuage/plugin.py:732 #, python-format msgid "" "Router %s does not hold default zone OR domain in VSD. Router-IF add " "failed" msgstr "" -#: neutron/plugins/nuage/plugin.py:736 +#: neutron/plugins/nuage/plugin.py:744 #, python-format msgid "Subnet %s does not hold Nuage VSD reference. Router-IF add failed" msgstr "" -#: neutron/plugins/nuage/plugin.py:746 +#: neutron/plugins/nuage/plugin.py:754 #, python-format msgid "" "Subnet %(subnet)s and Router %(router)s belong to different net_partition" " Router-IF add not permitted" msgstr "" -#: neutron/plugins/nuage/plugin.py:757 +#: neutron/plugins/nuage/plugin.py:765 #, python-format msgid "Subnet %s has one or more active VMs Router-IF add not permitted" msgstr "" -#: neutron/plugins/nuage/plugin.py:809 neutron/plugins/nuage/plugin.py:814 -#: neutron/plugins/nuage/plugin.py:820 +#: neutron/plugins/nuage/plugin.py:817 neutron/plugins/nuage/plugin.py:822 +#: neutron/plugins/nuage/plugin.py:828 #, python-format msgid "No router interface found for Router %s. Router-IF delete failed" msgstr "" -#: neutron/plugins/nuage/plugin.py:836 +#: neutron/plugins/nuage/plugin.py:844 #, python-format msgid "Subnet %s has one or more active VMs Router-IF delete not permitted" msgstr "" -#: neutron/plugins/nuage/plugin.py:845 +#: neutron/plugins/nuage/plugin.py:853 #, python-format msgid "" "Router %s does not hold net_partition assoc on Nuage VSD. Router-IF " "delete failed" msgstr "" -#: neutron/plugins/nuage/plugin.py:886 +#: neutron/plugins/nuage/plugin.py:894 msgid "" "Either net_partition is not provided with router OR default net_partition" " is not created at the start" msgstr "" -#: neutron/plugins/nuage/plugin.py:927 +#: neutron/plugins/nuage/plugin.py:935 msgid "for same subnet, multiple static routes not allowed" msgstr "" -#: neutron/plugins/nuage/plugin.py:944 +#: neutron/plugins/nuage/plugin.py:952 #, python-format msgid "Router %s does not hold net-partition assoc on VSD. extra-route failed" msgstr "" -#: neutron/plugins/nuage/plugin.py:1061 +#: neutron/plugins/nuage/plugin.py:1069 #, python-format msgid "One or more router still attached to net_partition %s." msgstr "" -#: neutron/plugins/nuage/plugin.py:1066 +#: neutron/plugins/nuage/plugin.py:1074 #, python-format msgid "NetPartition with %s does not exist" msgstr "" -#: neutron/plugins/nuage/plugin.py:1108 +#: neutron/plugins/nuage/plugin.py:1116 #, python-format msgid "sharedresource %s not found on VSD" msgstr "" -#: neutron/plugins/nuage/plugin.py:1115 neutron/plugins/nuage/plugin.py:1257 +#: neutron/plugins/nuage/plugin.py:1123 neutron/plugins/nuage/plugin.py:1273 #, python-format msgid "router %s is not associated with any net-partition" msgstr "" -#: neutron/plugins/nuage/plugin.py:1148 +#: neutron/plugins/nuage/plugin.py:1156 msgid "Floating IP can not be associated to VM in different router context" msgstr "" -#: neutron/plugins/nuage/common/config.py:22 +#: neutron/plugins/nuage/common/config.py:20 msgid "IP Address and Port of Nuage's VSD server" msgstr "" -#: neutron/plugins/nuage/common/config.py:25 +#: neutron/plugins/nuage/common/config.py:23 msgid "Username and password for authentication" msgstr "" -#: neutron/plugins/nuage/common/config.py:27 +#: neutron/plugins/nuage/common/config.py:25 msgid "Boolean for SSL connection with VSD server" msgstr "" -#: neutron/plugins/nuage/common/config.py:29 +#: neutron/plugins/nuage/common/config.py:27 msgid "Nuage provided base uri to reach out to VSD" msgstr "" -#: neutron/plugins/nuage/common/config.py:31 +#: neutron/plugins/nuage/common/config.py:29 msgid "" "Organization name in which VSD will orchestrate network resources using " "openstack" msgstr "" -#: neutron/plugins/nuage/common/config.py:34 +#: neutron/plugins/nuage/common/config.py:32 msgid "Nuage provided uri for initial authorization to access VSD" msgstr "" -#: neutron/plugins/nuage/common/config.py:38 +#: neutron/plugins/nuage/common/config.py:36 msgid "" "Default Network partition in which VSD will orchestrate network resources" " using openstack" msgstr "" -#: neutron/plugins/nuage/common/config.py:42 +#: neutron/plugins/nuage/common/config.py:40 msgid "Per Net Partition quota of floating ips" msgstr "" -#: neutron/plugins/nuage/common/config.py:47 +#: neutron/plugins/nuage/common/config.py:45 msgid "Nuage plugin will sync resources between openstack and VSD" msgstr "" -#: neutron/plugins/nuage/common/config.py:50 +#: neutron/plugins/nuage/common/config.py:48 msgid "" "Sync interval in seconds between openstack and VSD. It defines how often " "the synchronization is done. If not set, value of 0 is assumed and sync " "will be performed only once, at the Neutron startup time." msgstr "" -#: neutron/plugins/nuage/common/exceptions.py:23 +#: neutron/plugins/nuage/common/exceptions.py:21 #, python-format msgid "Nuage Plugin does not support this operation: %(msg)s" msgstr "" -#: neutron/plugins/nuage/common/exceptions.py:27 +#: neutron/plugins/nuage/common/exceptions.py:25 #, python-format msgid "Bad request: %(msg)s" msgstr "" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:988 -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1486 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1489 #, python-format msgid "Parsing bridge_mappings failed: %s." msgstr "" @@ -11104,7 +11126,7 @@ msgid "Invalid tunnel type specificed: %s" msgstr "" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:1017 -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1514 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1517 msgid "Tunneling cannot be enabled without a valid local_ip." msgstr "" @@ -11112,32 +11134,32 @@ msgstr "" msgid "Number of seconds to retry acquiring an Open vSwitch datapath" msgstr "" -#: neutron/plugins/oneconvergence/plugin.py:238 +#: neutron/plugins/oneconvergence/plugin.py:236 msgid "Failed to create subnet, deleting it from neutron" msgstr "" -#: neutron/plugins/oneconvergence/plugin.py:302 +#: neutron/plugins/oneconvergence/plugin.py:300 #, python-format msgid "Deleting newly created neutron port %s" msgstr "" -#: neutron/plugins/oneconvergence/plugin.py:375 +#: neutron/plugins/oneconvergence/plugin.py:373 msgid "Failed to create floatingip" msgstr "" -#: neutron/plugins/oneconvergence/plugin.py:414 +#: neutron/plugins/oneconvergence/plugin.py:412 msgid "Failed to create router" msgstr "" -#: neutron/plugins/oneconvergence/agent/nvsd_neutron_agent.py:154 +#: neutron/plugins/oneconvergence/agent/nvsd_neutron_agent.py:152 msgid "Port list is updated" msgstr "" -#: neutron/plugins/oneconvergence/agent/nvsd_neutron_agent.py:161 +#: neutron/plugins/oneconvergence/agent/nvsd_neutron_agent.py:159 msgid "AGENT looping....." msgstr "" -#: neutron/plugins/oneconvergence/agent/nvsd_neutron_agent.py:173 +#: neutron/plugins/oneconvergence/agent/nvsd_neutron_agent.py:171 msgid "NVSD Agent initialized successfully, now running... " msgstr "" @@ -11212,169 +11234,169 @@ msgstr "" msgid "Internal Server Error from NVSD controller: %(reason)s" msgstr "" -#: neutron/plugins/oneconvergence/lib/nvsdlib.py:55 +#: neutron/plugins/oneconvergence/lib/nvsdlib.py:53 #, python-format msgid "Could not create a %(resource)s under tenant %(tenant_id)s" msgstr "" -#: neutron/plugins/oneconvergence/lib/nvsdlib.py:59 +#: neutron/plugins/oneconvergence/lib/nvsdlib.py:57 #, python-format msgid "Failed to %(method)s %(resource)s id=%(resource_id)s" msgstr "" -#: neutron/plugins/oneconvergence/lib/nvsdlib.py:65 +#: neutron/plugins/oneconvergence/lib/nvsdlib.py:63 #, python-format msgid "Failed to %(method)s %(resource)s" msgstr "" -#: neutron/plugins/oneconvergence/lib/nvsdlib.py:110 +#: neutron/plugins/oneconvergence/lib/nvsdlib.py:108 #, python-format msgid "Network %(id)s created under tenant %(tenant_id)s" msgstr "" -#: neutron/plugins/oneconvergence/lib/nvsdlib.py:127 +#: neutron/plugins/oneconvergence/lib/nvsdlib.py:125 #, python-format msgid "Network %(id)s updated under tenant %(tenant_id)s" msgstr "" -#: neutron/plugins/oneconvergence/lib/nvsdlib.py:148 +#: neutron/plugins/oneconvergence/lib/nvsdlib.py:146 #, python-format msgid "Network %(id)s deleted under tenant %(tenant_id)s" msgstr "" -#: neutron/plugins/oneconvergence/lib/nvsdlib.py:161 +#: neutron/plugins/oneconvergence/lib/nvsdlib.py:159 #, python-format msgid "Subnet %(id)s created under tenant %(tenant_id)s" msgstr "" -#: neutron/plugins/oneconvergence/lib/nvsdlib.py:175 +#: neutron/plugins/oneconvergence/lib/nvsdlib.py:173 #, python-format msgid "Subnet %(id)s deleted under tenant %(tenant_id)s" msgstr "" -#: neutron/plugins/oneconvergence/lib/nvsdlib.py:191 +#: neutron/plugins/oneconvergence/lib/nvsdlib.py:189 #, python-format msgid "Subnet %(id)s updated under tenant %(tenant_id)s" msgstr "" -#: neutron/plugins/oneconvergence/lib/nvsdlib.py:223 +#: neutron/plugins/oneconvergence/lib/nvsdlib.py:221 #, python-format msgid "Port %(id)s created under tenant %(tenant_id)s" msgstr "" -#: neutron/plugins/oneconvergence/lib/nvsdlib.py:247 +#: neutron/plugins/oneconvergence/lib/nvsdlib.py:245 #, python-format msgid "Port %(id)s updated under tenant %(tenant_id)s" msgstr "" -#: neutron/plugins/oneconvergence/lib/nvsdlib.py:260 +#: neutron/plugins/oneconvergence/lib/nvsdlib.py:258 #, python-format msgid "Port %(id)s deleted under tenant %(tenant_id)s" msgstr "" -#: neutron/plugins/oneconvergence/lib/nvsdlib.py:282 +#: neutron/plugins/oneconvergence/lib/nvsdlib.py:280 #, python-format msgid "Flatingip %(id)s created under tenant %(tenant_id)s" msgstr "" -#: neutron/plugins/oneconvergence/lib/nvsdlib.py:300 +#: neutron/plugins/oneconvergence/lib/nvsdlib.py:298 #, python-format msgid "Flatingip %(id)s updated under tenant %(tenant_id)s" msgstr "" -#: neutron/plugins/oneconvergence/lib/nvsdlib.py:314 +#: neutron/plugins/oneconvergence/lib/nvsdlib.py:312 #, python-format msgid "Flatingip %(id)s deleted under tenant %(tenant_id)s" msgstr "" -#: neutron/plugins/oneconvergence/lib/nvsdlib.py:327 +#: neutron/plugins/oneconvergence/lib/nvsdlib.py:325 #, python-format msgid "Router %(id)s created under tenant %(tenant_id)s" msgstr "" -#: neutron/plugins/oneconvergence/lib/nvsdlib.py:343 +#: neutron/plugins/oneconvergence/lib/nvsdlib.py:341 #, python-format msgid "Router %(id)s updated under tenant %(tenant_id)s" msgstr "" -#: neutron/plugins/oneconvergence/lib/nvsdlib.py:353 +#: neutron/plugins/oneconvergence/lib/nvsdlib.py:351 #, python-format msgid "Router %(id)s deleted under tenant %(tenant_id)s" msgstr "" -#: neutron/plugins/oneconvergence/lib/plugin_helper.py:81 +#: neutron/plugins/oneconvergence/lib/plugin_helper.py:79 #, python-format msgid "Unable to connect to NVSD controller. Exiting after %(retries)s attempts" msgstr "" -#: neutron/plugins/oneconvergence/lib/plugin_helper.py:90 +#: neutron/plugins/oneconvergence/lib/plugin_helper.py:88 #, python-format msgid "Login Failed: %s" msgstr "" -#: neutron/plugins/oneconvergence/lib/plugin_helper.py:91 +#: neutron/plugins/oneconvergence/lib/plugin_helper.py:89 #, python-format msgid "Unable to establish connection with Controller %s" msgstr "" -#: neutron/plugins/oneconvergence/lib/plugin_helper.py:93 +#: neutron/plugins/oneconvergence/lib/plugin_helper.py:91 msgid "Retrying after 1 second..." msgstr "" -#: neutron/plugins/oneconvergence/lib/plugin_helper.py:97 +#: neutron/plugins/oneconvergence/lib/plugin_helper.py:95 #, python-format msgid "Login Successful %(uri)s %(status)s" msgstr "" -#: neutron/plugins/oneconvergence/lib/plugin_helper.py:101 +#: neutron/plugins/oneconvergence/lib/plugin_helper.py:99 #, python-format msgid "AuthToken = %s" msgstr "" -#: neutron/plugins/oneconvergence/lib/plugin_helper.py:103 +#: neutron/plugins/oneconvergence/lib/plugin_helper.py:101 msgid "login failed" msgstr "" -#: neutron/plugins/oneconvergence/lib/plugin_helper.py:111 +#: neutron/plugins/oneconvergence/lib/plugin_helper.py:109 msgid "No Token, Re-login" msgstr "" -#: neutron/plugins/oneconvergence/lib/plugin_helper.py:127 +#: neutron/plugins/oneconvergence/lib/plugin_helper.py:125 #, python-format msgid "request: %(method)s %(uri)s successful" msgstr "" -#: neutron/plugins/oneconvergence/lib/plugin_helper.py:134 +#: neutron/plugins/oneconvergence/lib/plugin_helper.py:132 #, python-format msgid "request: Request failed from Controller side :%s" msgstr "" -#: neutron/plugins/oneconvergence/lib/plugin_helper.py:139 +#: neutron/plugins/oneconvergence/lib/plugin_helper.py:137 #, python-format msgid "Response is Null, Request timed out: %(method)s to %(uri)s" msgstr "" -#: neutron/plugins/oneconvergence/lib/plugin_helper.py:151 +#: neutron/plugins/oneconvergence/lib/plugin_helper.py:149 #, python-format msgid "Request %(method)s %(uri)s body = %(body)s failed with status %(status)s" msgstr "" -#: neutron/plugins/oneconvergence/lib/plugin_helper.py:155 +#: neutron/plugins/oneconvergence/lib/plugin_helper.py:153 #, python-format msgid "%s" msgstr "" -#: neutron/plugins/oneconvergence/lib/plugin_helper.py:159 +#: neutron/plugins/oneconvergence/lib/plugin_helper.py:157 #, python-format msgid "%(method)s to %(url)s, unexpected response code: %(status)d" msgstr "" -#: neutron/plugins/oneconvergence/lib/plugin_helper.py:165 +#: neutron/plugins/oneconvergence/lib/plugin_helper.py:163 #, python-format msgid "Request failed from Controller side with Status=%s" msgstr "" -#: neutron/plugins/oneconvergence/lib/plugin_helper.py:169 +#: neutron/plugins/oneconvergence/lib/plugin_helper.py:167 #, python-format msgid "Success: %(method)s %(url)s status=%(status)s" msgstr "" @@ -11460,26 +11482,26 @@ msgstr "" msgid "%s networks are not enabled" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_dvr_neutron_agent.py:159 +#: neutron/plugins/openvswitch/agent/ovs_dvr_neutron_agent.py:158 msgid "DVR: Failed to obtain local DVR Mac address" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_dvr_neutron_agent.py:292 +#: neutron/plugins/openvswitch/agent/ovs_dvr_neutron_agent.py:291 #, python-format msgid "DVR: Duplicate DVR router interface detected for subnet %s" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_dvr_neutron_agent.py:300 +#: neutron/plugins/openvswitch/agent/ovs_dvr_neutron_agent.py:299 #, python-format msgid "DVR: Unable to retrieve subnet information for subnet_id %s" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_dvr_neutron_agent.py:459 +#: neutron/plugins/openvswitch/agent/ovs_dvr_neutron_agent.py:458 #, python-format msgid "Centralized-SNAT port %s already seen on " msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_dvr_neutron_agent.py:461 +#: neutron/plugins/openvswitch/agent/ovs_dvr_neutron_agent.py:460 #, python-format msgid "a different subnet %s" msgstr "" @@ -11491,180 +11513,180 @@ msgid "" "error: %(error)s" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:305 -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:557 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:308 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:560 #, python-format msgid "Network %s not used on agent." msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:314 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:317 #, python-format msgid "port_update message processed for port %s" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:317 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:320 msgid "tunnel_update received" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:326 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:329 msgid "No tunnel_type specified, cannot create tunnels" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:329 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:332 #, python-format msgid "tunnel_type %s not supported by agent" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:437 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:440 #, python-format msgid "Action %s not supported" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:458 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:461 #, python-format msgid "No local VLAN available for net-id=%s" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:466 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:469 #, python-format msgid "Assigning %(vlan_id)s as local vlan for net-id=%(net_uuid)s" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:495 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:498 #, python-format msgid "" "Cannot provision %(network_type)s network for net-id=%(net_uuid)s - " "tunneling disabled" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:514 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:517 #, python-format msgid "" "Cannot provision flat network for net-id=%(net_uuid)s - no bridge for " "physical_network %(physical_network)s" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:534 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:537 #, python-format msgid "" "Cannot provision VLAN network for net-id=%(net_uuid)s - no bridge for " "physical_network %(physical_network)s" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:543 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:546 #, python-format msgid "" "Cannot provision unknown network type %(network_type)s for net-" "id=%(net_uuid)s" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:560 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:563 #, python-format msgid "Reclaiming vlan = %(vlan_id)s from net-id = %(net_uuid)s" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:601 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:604 #, python-format msgid "" "Cannot reclaim unknown network type %(network_type)s for net-" "id=%(net_uuid)s" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:655 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:658 #, python-format msgid "port_unbound(): net_uuid %s not in local_vlan_map" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:728 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:731 #, python-format msgid "Adding %s to list of bridges." msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:749 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:752 msgid "" "Failed to create OVS patch port. Cannot have tunneling enabled on this " "agent, since this version of OVS does not support tunnels or patch ports." " Agent terminated!" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:843 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:846 #, python-format msgid "" "Creating an interface named %(name)s exceeds the %(limit)d character " "limitation. It was shortened to %(new_name)s to fit." msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:864 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:867 #, python-format msgid "Mapping physical network %(physical_network)s to bridge %(bridge)s" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:870 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:873 #, python-format msgid "" "Bridge %(bridge)s for physical network %(physical_network)s does not " "exist. Agent terminated!" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:974 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:977 #, python-format msgid "Port '%(port_name)s' has lost its vlan tag '%(vlan_tag)d'!" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1003 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1006 #, python-format msgid "VIF port: %s has no ofport configured, and might not be able to transmit" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1013 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1016 #, python-format msgid "No VIF port for port %s defined on agent." msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1026 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1029 #: neutron/tests/unit/ofagent/test_ofa_neutron_agent.py:799 -#: neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py:1248 +#: neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py:1271 msgid "ofport should have a value that can be interpreted as an integer" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1029 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1032 #: neutron/tests/unit/ofagent/test_ofa_neutron_agent.py:782 #: neutron/tests/unit/ofagent/test_ofa_neutron_agent.py:802 -#: neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py:1231 -#: neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py:1251 -#: neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py:1268 +#: neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py:1254 +#: neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py:1274 +#: neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py:1291 #, python-format msgid "Failed to set-up %(type)s tunnel port to %(ip)s" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1094 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1097 #, python-format msgid "" "Port %s was not found on the integration bridge and will therefore not be" " processed" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1117 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1120 #, python-format msgid "Setting status for %s to UP" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1121 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1124 #, python-format msgid "Setting status for %s to DOWN" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1124 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1127 #, python-format msgid "Configuration for device %s completed." msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1143 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1146 #, python-format msgid "Ancillary Port %s added" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1215 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1218 #, python-format msgid "" "process_network_ports - iteration:%(iter_num)d " @@ -11673,116 +11695,116 @@ msgid "" "%(elapsed).3f" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1231 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1234 #, python-format msgid "" "process_network_ports - iteration:%d - failure while retrieving port " "details from server" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1238 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1241 #, python-format msgid "" "process_network_ports - iteration:%(iter_num)d -treat_devices_removed " "completed in %(elapsed).3f" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1252 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1255 #, python-format msgid "" "process_ancillary_network_ports - iteration: %(iter_num)d - " "treat_ancillary_devices_added completed in %(elapsed).3f" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1260 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1263 #, python-format msgid "" "process_ancillary_network_ports - iteration:%d - failure while retrieving" " port details from server" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1268 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1271 #, python-format msgid "" "process_ancillary_network_ports - iteration: %(iter_num)d - " "treat_ancillary_devices_removed completed in %(elapsed).3f" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1281 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1284 #, python-format msgid "Unable to create tunnel port. Invalid remote IP: %s" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1310 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1313 #, python-format msgid "Unable to sync tunnel IP %(local_ip)s: %(e)s" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1347 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1350 #, python-format msgid "Agent rpc_loop - iteration:%d started" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1369 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1372 msgid "Agent tunnel out of sync with plugin!" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1373 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1376 msgid "Error while synchronizing tunnels" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1377 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1380 #, python-format msgid "" "Agent rpc_loop - iteration:%(iter_num)d - starting polling. " "Elapsed:%(elapsed).3f" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1389 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1392 #, python-format msgid "" "Agent rpc_loop - iteration:%(iter_num)d - port information retrieved. " "Elapsed:%(elapsed).3f" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1399 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1402 #, python-format msgid "Starting to process devices in:%s" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1404 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1407 #, python-format msgid "" "Agent rpc_loop - iteration:%(iter_num)d -ports processed. " "Elapsed:%(elapsed).3f" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1419 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1422 #, python-format msgid "" "Agent rpc_loop - iteration:%(iter_num)d -ancillary port info retrieved. " "Elapsed:%(elapsed).3f" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1428 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1431 #, python-format msgid "" "Agent rpc_loop - iteration:%(iter_num)d - ancillary ports processed. " "Elapsed:%(elapsed).3f" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1442 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1445 msgid "Error while processing VIF ports" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1449 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1452 #, python-format msgid "" "Agent rpc_loop - iteration:%(iter_num)d completed. Processed ports " "statistics: %(port_stats)s. Elapsed:%(elapsed).3f" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1511 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1514 #, python-format msgid "Invalid tunnel type specified: %s" msgstr "" @@ -11877,121 +11899,121 @@ msgstr "" msgid "Make the l2 agent run in DVR mode." msgstr "" -#: neutron/plugins/plumgrid/common/exceptions.py:24 +#: neutron/plugins/plumgrid/common/exceptions.py:22 #, python-format msgid "PLUMgrid Plugin Error: %(err_msg)s" msgstr "" -#: neutron/plugins/plumgrid/common/exceptions.py:28 +#: neutron/plugins/plumgrid/common/exceptions.py:26 #, python-format msgid "Connection failed with PLUMgrid Director: %(err_msg)s" msgstr "" -#: neutron/plugins/plumgrid/drivers/fake_plumlib.py:31 +#: neutron/plugins/plumgrid/drivers/fake_plumlib.py:29 msgid "Python PLUMgrid Fake Library Started " msgstr "" -#: neutron/plugins/plumgrid/drivers/fake_plumlib.py:36 +#: neutron/plugins/plumgrid/drivers/fake_plumlib.py:34 #, python-format msgid "Fake Director: %s" msgstr "" -#: neutron/plugins/plumgrid/drivers/plumlib.py:37 +#: neutron/plugins/plumgrid/drivers/plumlib.py:35 msgid "Python PLUMgrid Library Started " msgstr "" -#: neutron/plugins/plumgrid/plumgrid_plugin/plumgrid_plugin.py:46 +#: neutron/plugins/plumgrid/plumgrid_plugin/plumgrid_plugin.py:44 msgid "PLUMgrid Director server to connect to" msgstr "" -#: neutron/plugins/plumgrid/plumgrid_plugin/plumgrid_plugin.py:48 +#: neutron/plugins/plumgrid/plumgrid_plugin/plumgrid_plugin.py:46 msgid "PLUMgrid Director server port to connect to" msgstr "" -#: neutron/plugins/plumgrid/plumgrid_plugin/plumgrid_plugin.py:50 +#: neutron/plugins/plumgrid/plumgrid_plugin/plumgrid_plugin.py:48 msgid "PLUMgrid Director admin username" msgstr "" -#: neutron/plugins/plumgrid/plumgrid_plugin/plumgrid_plugin.py:52 +#: neutron/plugins/plumgrid/plumgrid_plugin/plumgrid_plugin.py:50 msgid "PLUMgrid Director admin password" msgstr "" -#: neutron/plugins/plumgrid/plumgrid_plugin/plumgrid_plugin.py:54 +#: neutron/plugins/plumgrid/plumgrid_plugin/plumgrid_plugin.py:52 msgid "PLUMgrid Director server timeout" msgstr "" -#: neutron/plugins/plumgrid/plumgrid_plugin/plumgrid_plugin.py:57 +#: neutron/plugins/plumgrid/plumgrid_plugin/plumgrid_plugin.py:55 msgid "PLUMgrid Driver" msgstr "" -#: neutron/plugins/plumgrid/plumgrid_plugin/plumgrid_plugin.py:75 +#: neutron/plugins/plumgrid/plumgrid_plugin/plumgrid_plugin.py:73 msgid "Neutron PLUMgrid Director: Starting Plugin" msgstr "" -#: neutron/plugins/plumgrid/plumgrid_plugin/plumgrid_plugin.py:93 +#: neutron/plugins/plumgrid/plumgrid_plugin/plumgrid_plugin.py:91 #, python-format msgid "Neutron PLUMgrid Director: %s" msgstr "" -#: neutron/plugins/plumgrid/plumgrid_plugin/plumgrid_plugin.py:770 +#: neutron/plugins/plumgrid/plumgrid_plugin/plumgrid_plugin.py:768 msgid "" "Networks with admin_state_up=False are not supported by PLUMgrid plugin " "yet." msgstr "" -#: neutron/plugins/ryu/ryu_neutron_plugin.py:68 +#: neutron/plugins/ryu/ryu_neutron_plugin.py:67 #, python-format msgid "get_ofp_rest_api: %s" msgstr "" -#: neutron/plugins/ryu/ryu_neutron_plugin.py:125 +#: neutron/plugins/ryu/ryu_neutron_plugin.py:124 msgid "Invalid configuration. check ryu.ini" msgstr "" -#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:95 +#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:94 #, python-format msgid "Could not get IPv4 address from %(nic)s: %(cfg)s" msgstr "" -#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:161 +#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:160 #, python-format msgid "External port %s" msgstr "" -#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:169 +#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:168 msgid "Get Ryu rest API address" msgstr "" -#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:216 +#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:215 msgid "Ryu rest API port isn't specified" msgstr "" -#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:217 +#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:216 #, python-format msgid "Going to ofp controller mode %s" msgstr "" -#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:293 +#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:292 #, python-format msgid "tunnel_ip %s" msgstr "" -#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:295 +#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:294 #, python-format msgid "ovsdb_port %s" msgstr "" -#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:297 +#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:296 #, python-format msgid "ovsdb_ip %s" msgstr "" -#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:303 +#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:302 #, python-format msgid "Initialization failed: %s" msgstr "" -#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:306 +#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:305 msgid "" "Ryu initialization on the node is done. Agent initialized successfully, " "now running..." @@ -12055,42 +12077,42 @@ msgstr "" msgid "Transaction retry exhausted (%d). Abandoned tunnel key allocation." msgstr "" -#: neutron/plugins/sriovnicagent/eswitch_manager.py:46 +#: neutron/plugins/sriovnicagent/eswitch_manager.py:44 #, python-format msgid "Failed to get devices for %s" msgstr "" -#: neutron/plugins/sriovnicagent/eswitch_manager.py:48 +#: neutron/plugins/sriovnicagent/eswitch_manager.py:46 msgid "Device not found" msgstr "" -#: neutron/plugins/sriovnicagent/eswitch_manager.py:62 +#: neutron/plugins/sriovnicagent/eswitch_manager.py:60 msgid "Device has no virtual functions" msgstr "" -#: neutron/plugins/sriovnicagent/eswitch_manager.py:141 -#: neutron/plugins/sriovnicagent/eswitch_manager.py:154 +#: neutron/plugins/sriovnicagent/eswitch_manager.py:139 +#: neutron/plugins/sriovnicagent/eswitch_manager.py:152 #, python-format msgid "Cannot find vf index for pci slot %s" msgstr "" -#: neutron/plugins/sriovnicagent/eswitch_manager.py:279 +#: neutron/plugins/sriovnicagent/eswitch_manager.py:277 #, python-format msgid "device pci mismatch: %(device_mac)s - %(pci_slot)s" msgstr "" -#: neutron/plugins/sriovnicagent/pci_lib.py:58 -#: neutron/plugins/sriovnicagent/pci_lib.py:81 -#: neutron/plugins/sriovnicagent/pci_lib.py:108 +#: neutron/plugins/sriovnicagent/pci_lib.py:56 +#: neutron/plugins/sriovnicagent/pci_lib.py:79 +#: neutron/plugins/sriovnicagent/pci_lib.py:106 msgid "Failed executing ip command" msgstr "" -#: neutron/plugins/sriovnicagent/pci_lib.py:129 +#: neutron/plugins/sriovnicagent/pci_lib.py:127 #, python-format msgid "Cannot find vfs %(vfs)s in device %(dev_name)s" msgstr "" -#: neutron/plugins/sriovnicagent/pci_lib.py:145 +#: neutron/plugins/sriovnicagent/pci_lib.py:143 #, python-format msgid "failed to parse vf link show line %(line)s: for %(device)s" msgstr "" @@ -13673,13 +13695,13 @@ msgid "" msgstr "" #: neutron/plugins/vmware/plugins/base.py:673 -#: neutron/plugins/vmware/plugins/base.py:1739 +#: neutron/plugins/vmware/plugins/base.py:1749 #, python-format msgid "Logical router resource %s not found on NSX platform" msgstr "" #: neutron/plugins/vmware/plugins/base.py:677 -#: neutron/plugins/vmware/plugins/base.py:1743 +#: neutron/plugins/vmware/plugins/base.py:1753 msgid "Unable to update logical routeron NSX Platform" msgstr "" @@ -13721,240 +13743,240 @@ msgstr "" msgid "%(net_type_param)s %(net_type_value)s not supported" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:845 +#: neutron/plugins/vmware/plugins/base.py:849 #, python-format msgid "No switch has available ports (%d checked)" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:879 +#: neutron/plugins/vmware/plugins/base.py:883 #, python-format msgid "Maximum number of logical ports reached for logical network %s" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:925 +#: neutron/plugins/vmware/plugins/base.py:929 #, python-format msgid "" "Network with admin_state_up=False are not yet supported by this plugin. " "Ignoring setting for network %s" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1003 +#: neutron/plugins/vmware/plugins/base.py:1007 #, python-format msgid "The following logical switches were not found on the NSX backend:%s" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1040 +#: neutron/plugins/vmware/plugins/base.py:1044 msgid "admin_state_up=False networks are not supported." msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1060 +#: neutron/plugins/vmware/plugins/base.py:1064 #, python-format msgid "Unable to find NSX mappings for neutron network:%s" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1067 +#: neutron/plugins/vmware/plugins/base.py:1071 #, python-format msgid "" "Logical switch update on NSX backend failed. Neutron network " "id:%(net_id)s; NSX lswitch id:%(lswitch_id)s;Error:%(error)s" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1138 +#: neutron/plugins/vmware/plugins/base.py:1148 #, python-format msgid "port created on NSX backend for tenant %(tenant_id)s: (%(id)s)" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1141 +#: neutron/plugins/vmware/plugins/base.py:1151 #, python-format msgid "Logical switch for network %s was not found in NSX." msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1152 +#: neutron/plugins/vmware/plugins/base.py:1162 msgid "Unable to create port or set port attachment in NSX." msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1240 +#: neutron/plugins/vmware/plugins/base.py:1250 #, python-format msgid "Updating port: %s" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1275 +#: neutron/plugins/vmware/plugins/base.py:1285 #, python-format msgid "Unable to update port id: %s." msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1358 +#: neutron/plugins/vmware/plugins/base.py:1368 msgid "" "Cannot create a distributed router with the NSX platform currently in " "execution. Please, try without specifying the 'distributed' attribute." msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1364 +#: neutron/plugins/vmware/plugins/base.py:1374 msgid "Unable to create logical router on NSX Platform" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1375 +#: neutron/plugins/vmware/plugins/base.py:1385 #, python-format msgid "" "Unable to create L3GW port on logical router %(router_uuid)s. Verify " "Default Layer-3 Gateway service %(def_l3_gw_svc)s id is correct" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1385 +#: neutron/plugins/vmware/plugins/base.py:1395 #, python-format msgid "Unable to create router %s on NSX backend" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1414 -#: neutron/plugins/vmware/plugins/base.py:1499 +#: neutron/plugins/vmware/plugins/base.py:1424 +#: neutron/plugins/vmware/plugins/base.py:1509 #: neutron/plugins/vmware/plugins/service.py:201 #: neutron/plugins/vmware/plugins/service.py:1240 #, python-format msgid "Network '%s' is not a valid external network" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1463 +#: neutron/plugins/vmware/plugins/base.py:1473 #, python-format msgid "Failed to set gateway info for router being created:%s - removing router" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1466 +#: neutron/plugins/vmware/plugins/base.py:1476 #, python-format msgid "" "Create router failed while setting external gateway. Router:%s has been " "removed from DB and backend" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1508 +#: neutron/plugins/vmware/plugins/base.py:1518 msgid "" "'routes' cannot contain route '0.0.0.0/0', this must be updated through " "the default gateway attribute" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1524 +#: neutron/plugins/vmware/plugins/base.py:1534 #, python-format msgid "Logical router %s not found on NSX Platform" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1528 +#: neutron/plugins/vmware/plugins/base.py:1538 msgid "Unable to update logical router on NSX Platform" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1530 +#: neutron/plugins/vmware/plugins/base.py:1540 msgid "" "Request cannot contain 'routes' with the NSX platform currently in " "execution. Please, try without specifying the static routes." msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1587 +#: neutron/plugins/vmware/plugins/base.py:1597 #, python-format msgid "Logical router '%s' not found on NSX Platform" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1591 +#: neutron/plugins/vmware/plugins/base.py:1601 #, python-format msgid "Unable to delete logical router '%s' on NSX Platform" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1601 +#: neutron/plugins/vmware/plugins/base.py:1611 #, python-format msgid "" "Unable to remove NSX mapping for Neutron router %(router_id)s because of " "the following exception:%(d_exc)s" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1676 +#: neutron/plugins/vmware/plugins/base.py:1686 #, python-format msgid "" "Add_router_interface completed for subnet:%(subnet_id)s and " "router:%(router_id)s" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1775 +#: neutron/plugins/vmware/plugins/base.py:1785 #, python-format msgid "" "An error occurred while removing NAT rules on the NSX platform for " "floating ip:%s" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1780 +#: neutron/plugins/vmware/plugins/base.py:1790 msgid "An incorrect number of matching NAT rules was found on the NSX platform" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1922 +#: neutron/plugins/vmware/plugins/base.py:1932 #, python-format msgid "" "An error occurred while creating NAT rules on the NSX platform for " "floating ip:%(floating_ip)s mapped to internal ip:%(internal_ip)s" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1928 +#: neutron/plugins/vmware/plugins/base.py:1938 msgid "Failed to update NAT rules for floatingip update" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1967 +#: neutron/plugins/vmware/plugins/base.py:1977 #, python-format msgid "The port '%s' is not associated with floating IPs" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1970 +#: neutron/plugins/vmware/plugins/base.py:1980 #, python-format msgid "Nat rules not found in nsx for port: %s" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:2010 +#: neutron/plugins/vmware/plugins/base.py:2020 #, python-format msgid "Unable to create l2_gw_service for: %s" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:2033 +#: neutron/plugins/vmware/plugins/base.py:2043 msgid "" "Unable to remove gateway service from NSX plaform - the resource was not " "found" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:2062 +#: neutron/plugins/vmware/plugins/base.py:2072 #, python-format msgid "Unable to update name on NSX backend for network gateway: %s" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:2134 -#: neutron/plugins/vmware/plugins/base.py:2172 +#: neutron/plugins/vmware/plugins/base.py:2144 +#: neutron/plugins/vmware/plugins/base.py:2182 #, python-format msgid "" "Neutron gateway device: %(neutron_id)s; NSX transport node identifier: " "%(nsx_id)s; Operational status: %(status)s." msgstr "" -#: neutron/plugins/vmware/plugins/base.py:2269 +#: neutron/plugins/vmware/plugins/base.py:2279 #, python-format msgid "" "Removal of gateway device: %(neutron_id)s failed on NSX backend (NSX " "id:%(nsx_id)s) because the NSX resource was not found" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:2276 +#: neutron/plugins/vmware/plugins/base.py:2286 #, python-format msgid "" "Removal of gateway device: %(neutron_id)s failed on NSX backend (NSX " "id:%(nsx_id)s). Neutron and NSX states have diverged." msgstr "" -#: neutron/plugins/vmware/plugins/base.py:2324 +#: neutron/plugins/vmware/plugins/base.py:2334 #, python-format msgid "" "Error while updating security profile %(uuid)s with name %(name)s: " "%(error)s." msgstr "" -#: neutron/plugins/vmware/plugins/base.py:2356 +#: neutron/plugins/vmware/plugins/base.py:2366 #, python-format msgid "" "The NSX security profile %(sec_profile_id)s, associated with the Neutron " "security group %(sec_group_id)s was not found on the backend" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:2364 +#: neutron/plugins/vmware/plugins/base.py:2374 #, python-format msgid "" "An exception occurred while removing the NSX security profile " @@ -13962,12 +13984,12 @@ msgid "" "%(sec_group_id)s" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:2371 +#: neutron/plugins/vmware/plugins/base.py:2381 #, python-format msgid "Unable to remove security group %s from backend" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:2384 +#: neutron/plugins/vmware/plugins/base.py:2394 #, python-format msgid "Port values not valid for protocol: %s" msgstr "" @@ -14237,167 +14259,167 @@ msgstr "" msgid "Migration has been successful:\n" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:135 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:132 #, python-format msgid "" "VCNS: Failed to get edge status:\n" "%s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:162 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:159 #, python-format msgid "VCNS: start updating vnic %s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:167 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:164 #, python-format msgid "" "VCNS: Failed to update vnic %(config)s:\n" "%(response)s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:173 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:170 #, python-format msgid "VCNS: Failed to update vnic %d" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:181 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:178 #, python-format msgid "VCNS: update vnic %(index)d: %(addr)s %(netmask)s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:190 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:187 #, python-format msgid "Vnic %d currently not supported" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:211 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:208 #, python-format msgid "VCNS: start deploying edge %s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:219 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:216 #, python-format msgid "VCNS: deploying edge %s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:224 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:221 #, python-format msgid "VCNS: deploy edge failed for router %s." msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:243 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:240 #, python-format msgid "VCNS: Edge %s status query failed." msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:248 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:245 #, python-format msgid "VCNS: Unable to retrieve edge %(edge_id)s status. Retry %(retries)d." msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:255 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:252 #, python-format msgid "VCNS: Unable to retrieve edge %s status. Abort." msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:259 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:256 #, python-format msgid "VCNS: Edge %s status" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:266 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:263 #, python-format msgid "VCNS: Failed to deploy edge %(edge_id)s for %(name)s, status %(status)d" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:273 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:270 #, python-format msgid "VCNS: Edge %(edge_id)s deployed for router %(name)s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:280 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:277 #, python-format msgid "VCNS: start destroying edge %s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:288 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:285 #, python-format msgid "" "VCNS: Failed to delete %(edge_id)s:\n" "%(response)s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:294 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:291 #, python-format msgid "VCNS: Failed to delete %s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:304 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:301 #, python-format msgid "" "VCNS: Failed to get edges:\n" "%s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:382 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:379 #, python-format msgid "" "VCNS: Failed to get nat config:\n" "%s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:389 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:386 #, python-format msgid "VCNS: start creating nat rules: %s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:405 -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:530 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:402 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:527 #, python-format msgid "" "VCNS: Failed to create snat rule:\n" "%s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:413 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:410 #, python-format msgid "VCNS: create snat rule %(src)s/%(translated)s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:436 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:433 #, python-format msgid "VCNS: start deleting %(type)s rules: %(addr)s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:447 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:444 #, python-format msgid "" "VCNS: Failed to delete snat rule:\n" "%s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:454 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:451 #, python-format msgid "VCNS: delete snat rule %s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:472 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:469 #, python-format msgid "VCNS: create dnat rule %(dst)s/%(translated)s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:493 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:490 #, python-format msgid "VCNS: delete dnat rule %s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:517 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:514 #, python-format msgid "VCNS: start updating nat rules: %s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:538 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:535 #, python-format msgid "" "VCNS: update nat rule\n" @@ -14405,83 +14427,83 @@ msgid "" "DNAT:%(dnat)s\n" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:576 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:573 #, python-format msgid "VCNS: start updating routes for %s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:600 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:597 #, python-format msgid "" "VCNS: Failed to update routes:\n" "%s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:652 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:649 msgid "Failed to get service config" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:664 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:661 msgid "Failed to enable loadbalancer service config" msgstr "" -#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:41 +#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:39 #, python-format msgid "Invalid action value %s in a firewall rule" msgstr "" -#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:50 +#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:48 #, python-format msgid "Invalid action value %s in a vshield firewall rule" msgstr "" -#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:190 +#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:188 #, python-format msgid "Failed to get firewall with edge id: %s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:208 +#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:206 #, python-format msgid "No rule id:%s found in the edge_firewall_binding" msgstr "" -#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:218 +#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:216 #, python-format msgid "Failed to get firewall rule: %(rule_id)s with edge_id: %(edge_id)s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:234 +#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:232 #, python-format msgid "Failed to update firewall with edge_id: %s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:246 +#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:244 #, python-format msgid "Failed to delete firewall with edge_id:%s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:260 +#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:258 #, python-format msgid "Failed to update firewall rule: %(rule_id)s with edge_id: %(edge_id)s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:273 +#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:271 #, python-format msgid "Failed to delete firewall rule: %(rule_id)s with edge_id: %(edge_id)s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:290 -#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:318 +#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:288 +#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:316 #, python-format msgid "Failed to add firewall rule above: %(rule_id)s with edge_id: %(edge_id)s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:329 +#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:327 #, python-format msgid "Failed to append a firewall rulewith edge_id: %s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:350 +#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:348 msgid "Can't execute insert rule operation without reference rule_id" msgstr "" @@ -14539,156 +14561,156 @@ msgstr "" msgid "Failed to delete ipsec vpn configuration with edge_id: %s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:154 +#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:152 #, python-format msgid "Invalid %(protocol)s persistence method: %(type)s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:180 +#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:178 #, python-format msgid "Failed to create app profile on edge: %s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:191 +#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:189 #, python-format msgid "Failed to create vip on vshield edge: %s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:209 +#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:207 #, python-format msgid "vip_binding not found with id: %(id)s edge_id: %(edge_id)s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:226 +#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:224 msgid "Failed to get vip on edge" msgstr "" -#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:243 +#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:241 #, python-format msgid "Failed to update app profile on edge: %s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:251 +#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:249 #, python-format msgid "Failed to update vip on edge: %s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:262 +#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:260 #, python-format msgid "vip not found on edge: %s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:265 +#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:263 #, python-format msgid "Failed to delete vip on edge: %s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:270 +#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:268 #, python-format msgid "app profile not found on edge: %s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:273 +#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:271 #, python-format msgid "Failed to delete app profile on edge: %s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:284 +#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:282 msgid "Failed to create pool" msgstr "" -#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:301 +#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:299 #, python-format msgid "pool_binding not found with id: %(id)s edge_id: %(edge_id)s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:311 +#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:309 msgid "Failed to get pool on edge" msgstr "" -#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:323 +#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:321 msgid "Failed to update pool" msgstr "" -#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:333 +#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:331 msgid "Failed to delete pool" msgstr "" -#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:343 +#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:341 #, python-format msgid "Failed to create monitor on edge: %s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:361 +#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:359 #, python-format msgid "monitor_binding not found with id: %(id)s edge_id: %(edge_id)s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:371 +#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:369 #, python-format msgid "Failed to get monitor on edge: %s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:388 +#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:386 #, python-format msgid "Failed to update monitor on edge: %s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:399 +#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:397 msgid "Failed to delete monitor" msgstr "" -#: neutron/plugins/vmware/vshield/vcns.py:54 +#: neutron/plugins/vmware/vshield/vcns.py:52 #, python-format msgid "VcnsApiHelper('%(method)s', '%(uri)s', '%(body)s')" msgstr "" -#: neutron/plugins/vmware/vshield/vcns.py:62 +#: neutron/plugins/vmware/vshield/vcns.py:60 #, python-format msgid "Header: '%s'" msgstr "" -#: neutron/plugins/vmware/vshield/vcns.py:63 +#: neutron/plugins/vmware/vshield/vcns.py:61 #, python-format msgid "Content: '%s'" msgstr "" -#: neutron/plugins/vmware/vshield/common/exceptions.py:35 +#: neutron/plugins/vmware/vshield/common/exceptions.py:33 #, python-format msgid "%(resource)s not found: %(msg)s" msgstr "" -#: neutron/plugins/vmware/vshield/common/exceptions.py:39 +#: neutron/plugins/vmware/vshield/common/exceptions.py:37 #, python-format msgid "An unknown exception %(status)s occurred: %(response)s." msgstr "" -#: neutron/plugins/vmware/vshield/common/exceptions.py:50 +#: neutron/plugins/vmware/vshield/common/exceptions.py:48 #, python-format msgid "Resource %(uri)s has been redirected" msgstr "" -#: neutron/plugins/vmware/vshield/common/exceptions.py:54 +#: neutron/plugins/vmware/vshield/common/exceptions.py:52 #, python-format msgid "Request %(uri)s is Bad, response %(response)s" msgstr "" -#: neutron/plugins/vmware/vshield/common/exceptions.py:58 +#: neutron/plugins/vmware/vshield/common/exceptions.py:56 #, python-format msgid "Forbidden: %(uri)s" msgstr "" -#: neutron/plugins/vmware/vshield/common/exceptions.py:62 +#: neutron/plugins/vmware/vshield/common/exceptions.py:60 #, python-format msgid "Resource %(uri)s not found" msgstr "" -#: neutron/plugins/vmware/vshield/common/exceptions.py:66 +#: neutron/plugins/vmware/vshield/common/exceptions.py:64 #, python-format msgid "Media Type %(uri)s is not supported" msgstr "" -#: neutron/plugins/vmware/vshield/common/exceptions.py:70 +#: neutron/plugins/vmware/vshield/common/exceptions.py:68 #, python-format msgid "Service Unavailable: %(uri)s" msgstr "" @@ -14886,372 +14908,372 @@ msgstr "" msgid "Default provider is not specified for service type %s" msgstr "" -#: neutron/services/firewall/fwaas_plugin.py:42 +#: neutron/services/firewall/fwaas_plugin.py:40 msgid "set_firewall_status() called" msgstr "" -#: neutron/services/firewall/fwaas_plugin.py:50 +#: neutron/services/firewall/fwaas_plugin.py:48 #, python-format msgid "Firewall %(fw_id)s in PENDING_DELETE state, not changing to %(status)s" msgstr "" -#: neutron/services/firewall/fwaas_plugin.py:63 +#: neutron/services/firewall/fwaas_plugin.py:61 msgid "firewall_deleted() called" msgstr "" -#: neutron/services/firewall/fwaas_plugin.py:71 +#: neutron/services/firewall/fwaas_plugin.py:69 #, python-format msgid "Firewall %(fw)s unexpectedly deleted by agent, status was %(status)s" msgstr "" -#: neutron/services/firewall/fwaas_plugin.py:79 +#: neutron/services/firewall/fwaas_plugin.py:77 msgid "get_firewalls_for_tenant() called" msgstr "" -#: neutron/services/firewall/fwaas_plugin.py:88 +#: neutron/services/firewall/fwaas_plugin.py:86 msgid "get_firewalls_for_tenant_without_rules() called" msgstr "" -#: neutron/services/firewall/fwaas_plugin.py:94 +#: neutron/services/firewall/fwaas_plugin.py:92 msgid "get_tenants_with_firewalls() called" msgstr "" -#: neutron/services/firewall/fwaas_plugin.py:139 +#: neutron/services/firewall/fwaas_plugin.py:137 #, python-format msgid "" "Exceeded allowed count of firewalls for tenant %(tenant_id)s. Only one " "firewall is supported per tenant." msgstr "" -#: neutron/services/firewall/agents/firewall_agent_api.py:31 +#: neutron/services/firewall/agents/firewall_agent_api.py:27 msgid "Name of the FWaaS Driver" msgstr "" -#: neutron/services/firewall/agents/firewall_agent_api.py:35 +#: neutron/services/firewall/agents/firewall_agent_api.py:31 msgid "Enable FWaaS" msgstr "" -#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:43 +#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:39 msgid "Retrieve Firewall with rules from Plugin" msgstr "" -#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:51 +#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:47 msgid "Retrieve Tenants with Firewalls configured from Plugin" msgstr "" -#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:62 +#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:58 msgid "Initializing firewall agent" msgstr "" -#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:73 +#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:69 msgid "" "FWaaS plugin is configured in the server side, but FWaaS is disabled in " "L3-agent." msgstr "" -#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:83 +#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:79 #, python-format msgid "FWaaS Driver Loaded: '%s'" msgstr "" -#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:86 +#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:82 #, python-format msgid "Error importing FWaaS device driver: %s" msgstr "" -#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:123 +#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:119 #, python-format msgid "%(func_name)s from agent for fw: %(fwid)s" msgstr "" -#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:131 +#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:127 #, python-format msgid "No Routers on tenant: %s" msgstr "" -#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:138 -#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:278 +#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:134 +#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:274 #, python-format msgid "Apply fw on Router List: '%s'" msgstr "" -#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:151 +#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:147 #, python-format msgid "Firewall Driver Error for %(func_name)s for fw: %(fwid)s" msgstr "" -#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:166 +#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:162 #, python-format msgid "FWaaS RPC failure in %(func_name)s for fw: %(fwid)s" msgstr "" -#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:186 -#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:205 +#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:182 +#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:201 #, python-format msgid "Firewall Driver Error on fw state %(fwmsg)s for fw: %(fwid)s" msgstr "" -#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:217 +#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:213 #, python-format msgid "Process router add, router_id: '%s'" msgstr "" -#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:228 +#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:224 #, python-format msgid "Process router add, fw_list: '%s'" msgstr "" -#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:245 +#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:241 #, python-format msgid "FWaaS RPC info call failed for '%s'." msgstr "" -#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:260 +#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:256 #, python-format msgid "Tenants with Firewalls: '%s'" msgstr "" -#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:270 +#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:266 #, python-format msgid "Router List: '%s'" msgstr "" -#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:272 +#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:268 #, python-format msgid "fw_list: '%s'" msgstr "" -#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:289 +#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:285 msgid "Failed fwaas process services sync" msgstr "" -#: neutron/services/firewall/agents/varmour/varmour_api.py:29 +#: neutron/services/firewall/agents/varmour/varmour_api.py:27 msgid "vArmour director ip" msgstr "" -#: neutron/services/firewall/agents/varmour/varmour_api.py:31 +#: neutron/services/firewall/agents/varmour/varmour_api.py:29 msgid "vArmour director port" msgstr "" -#: neutron/services/firewall/agents/varmour/varmour_api.py:33 +#: neutron/services/firewall/agents/varmour/varmour_api.py:31 msgid "vArmour director username" msgstr "" -#: neutron/services/firewall/agents/varmour/varmour_api.py:35 +#: neutron/services/firewall/agents/varmour/varmour_api.py:33 msgid "vArmour director password" msgstr "" -#: neutron/services/firewall/agents/varmour/varmour_api.py:45 +#: neutron/services/firewall/agents/varmour/varmour_api.py:43 msgid "An unknown exception." msgstr "" -#: neutron/services/firewall/agents/varmour/varmour_api.py:59 +#: neutron/services/firewall/agents/varmour/varmour_api.py:57 msgid "Invalid login credential." msgstr "" -#: neutron/services/firewall/agents/varmour/varmour_api.py:65 +#: neutron/services/firewall/agents/varmour/varmour_api.py:63 msgid "vArmourRestAPI: started" msgstr "" -#: neutron/services/firewall/agents/varmour/varmour_api.py:98 +#: neutron/services/firewall/agents/varmour/varmour_api.py:96 #, python-format msgid "vArmourRestAPI: %(server)s %(port)s" msgstr "" -#: neutron/services/firewall/agents/varmour/varmour_api.py:104 +#: neutron/services/firewall/agents/varmour/varmour_api.py:102 #, python-format msgid "vArmourRestAPI Sending: %(method)s %(action)s %(headers)s %(body_data)s" msgstr "" -#: neutron/services/firewall/agents/varmour/varmour_api.py:115 +#: neutron/services/firewall/agents/varmour/varmour_api.py:113 #, python-format msgid "vArmourRestAPI Response: %(status)s %(resp_str)s" msgstr "" -#: neutron/services/firewall/agents/varmour/varmour_api.py:123 +#: neutron/services/firewall/agents/varmour/varmour_api.py:121 msgid "vArmourRestAPI: Could not establish HTTP connection" msgstr "" -#: neutron/services/firewall/agents/varmour/varmour_router.py:50 +#: neutron/services/firewall/agents/varmour/varmour_router.py:47 msgid "vArmourL3NATAgent: __init__" msgstr "" -#: neutron/services/firewall/agents/varmour/varmour_router.py:64 +#: neutron/services/firewall/agents/varmour/varmour_router.py:61 #, python-format msgid "_router_added: %s" msgstr "" -#: neutron/services/firewall/agents/varmour/varmour_router.py:71 +#: neutron/services/firewall/agents/varmour/varmour_router.py:68 #, python-format msgid "_router_removed: %s" msgstr "" -#: neutron/services/firewall/agents/varmour/varmour_router.py:112 +#: neutron/services/firewall/agents/varmour/varmour_router.py:109 #, python-format msgid "_va_unset_zone_interfaces: %s" msgstr "" -#: neutron/services/firewall/agents/varmour/varmour_router.py:144 +#: neutron/services/firewall/agents/varmour/varmour_router.py:141 #, python-format msgid "_va_set_interface_ip: %(pif)s %(cidr)s" msgstr "" -#: neutron/services/firewall/agents/varmour/varmour_router.py:164 +#: neutron/services/firewall/agents/varmour/varmour_router.py:161 #, python-format msgid "_va_config_trusted_zone: %s" msgstr "" -#: neutron/services/firewall/agents/varmour/varmour_router.py:195 +#: neutron/services/firewall/agents/varmour/varmour_router.py:192 #, python-format msgid "_va_config_untrusted_zone: %s" msgstr "" -#: neutron/services/firewall/agents/varmour/varmour_router.py:210 +#: neutron/services/firewall/agents/varmour/varmour_router.py:207 #, python-format msgid "_va_config_untrusted_zone: gw=%r" msgstr "" -#: neutron/services/firewall/agents/varmour/varmour_router.py:223 +#: neutron/services/firewall/agents/varmour/varmour_router.py:220 #, python-format msgid "_va_config_router_snat_rules: %s" msgstr "" -#: neutron/services/firewall/agents/varmour/varmour_router.py:255 +#: neutron/services/firewall/agents/varmour/varmour_router.py:252 #, python-format msgid "_va_config_floating_ips: %s" msgstr "" -#: neutron/services/firewall/agents/varmour/varmour_router.py:277 +#: neutron/services/firewall/agents/varmour/varmour_router.py:274 #, python-format msgid "process_router: %s" msgstr "" -#: neutron/services/firewall/agents/varmour/varmour_router.py:288 +#: neutron/services/firewall/agents/varmour/varmour_router.py:285 msgid "Unable to parse interface mapping." msgstr "" -#: neutron/services/firewall/agents/varmour/varmour_router.py:291 +#: neutron/services/firewall/agents/varmour/varmour_router.py:288 msgid "Unable to read interface mapping." msgstr "" -#: neutron/services/firewall/agents/varmour/varmour_router.py:310 +#: neutron/services/firewall/agents/varmour/varmour_router.py:307 #, python-format msgid "external_gateway_added: %s" msgstr "" -#: neutron/services/firewall/drivers/linux/iptables_fwaas.py:51 +#: neutron/services/firewall/drivers/linux/iptables_fwaas.py:49 msgid "Initializing fwaas iptables driver" msgstr "" -#: neutron/services/firewall/drivers/linux/iptables_fwaas.py:54 +#: neutron/services/firewall/drivers/linux/iptables_fwaas.py:52 #, python-format msgid "Creating firewall %(fw_id)s for tenant %(tid)s)" msgstr "" -#: neutron/services/firewall/drivers/linux/iptables_fwaas.py:63 +#: neutron/services/firewall/drivers/linux/iptables_fwaas.py:61 #, python-format msgid "Failed to create firewall: %s" msgstr "" -#: neutron/services/firewall/drivers/linux/iptables_fwaas.py:92 +#: neutron/services/firewall/drivers/linux/iptables_fwaas.py:90 #, python-format msgid "Deleting firewall %(fw_id)s for tenant %(tid)s)" msgstr "" -#: neutron/services/firewall/drivers/linux/iptables_fwaas.py:107 +#: neutron/services/firewall/drivers/linux/iptables_fwaas.py:105 #, python-format msgid "Failed to delete firewall: %s" msgstr "" -#: neutron/services/firewall/drivers/linux/iptables_fwaas.py:111 +#: neutron/services/firewall/drivers/linux/iptables_fwaas.py:109 #, python-format msgid "Updating firewall %(fw_id)s for tenant %(tid)s)" msgstr "" -#: neutron/services/firewall/drivers/linux/iptables_fwaas.py:120 +#: neutron/services/firewall/drivers/linux/iptables_fwaas.py:118 #, python-format msgid "Failed to update firewall: %s" msgstr "" -#: neutron/services/firewall/drivers/linux/iptables_fwaas.py:124 +#: neutron/services/firewall/drivers/linux/iptables_fwaas.py:122 #, python-format msgid "Applying firewall %(fw_id)s for tenant %(tid)s)" msgstr "" -#: neutron/services/firewall/drivers/linux/iptables_fwaas.py:145 +#: neutron/services/firewall/drivers/linux/iptables_fwaas.py:143 #, python-format msgid "Failed to apply default policy on firewall: %s" msgstr "" -#: neutron/services/firewall/drivers/varmour/varmour_fwaas.py:28 +#: neutron/services/firewall/drivers/varmour/varmour_fwaas.py:26 msgid "Initializing fwaas vArmour driver" msgstr "" -#: neutron/services/firewall/drivers/varmour/varmour_fwaas.py:33 +#: neutron/services/firewall/drivers/varmour/varmour_fwaas.py:31 #, python-format msgid "create_firewall (%s)" msgstr "" -#: neutron/services/firewall/drivers/varmour/varmour_fwaas.py:38 +#: neutron/services/firewall/drivers/varmour/varmour_fwaas.py:36 #, python-format msgid "update_firewall (%s)" msgstr "" -#: neutron/services/firewall/drivers/varmour/varmour_fwaas.py:46 +#: neutron/services/firewall/drivers/varmour/varmour_fwaas.py:44 #, python-format msgid "delete_firewall (%s)" msgstr "" -#: neutron/services/firewall/drivers/varmour/varmour_fwaas.py:51 +#: neutron/services/firewall/drivers/varmour/varmour_fwaas.py:49 #, python-format msgid "apply_default_policy (%s)" msgstr "" -#: neutron/services/firewall/drivers/varmour/varmour_fwaas.py:61 +#: neutron/services/firewall/drivers/varmour/varmour_fwaas.py:59 #, python-format msgid "Updating firewall (%s)" msgstr "" -#: neutron/services/firewall/drivers/varmour/varmour_fwaas.py:110 +#: neutron/services/firewall/drivers/varmour/varmour_fwaas.py:108 msgid "Unsupported IP version rule." msgstr "" -#: neutron/services/l3_router/l3_apic.py:60 +#: neutron/services/l3_router/l3_apic.py:57 msgid "L3 Router Service Plugin for basic L3 using the APIC" msgstr "" -#: neutron/services/l3_router/l3_arista.py:116 +#: neutron/services/l3_router/l3_arista.py:113 #, python-format msgid "Error creating router on Arista HW router=%s " msgstr "" -#: neutron/services/l3_router/l3_arista.py:139 +#: neutron/services/l3_router/l3_arista.py:136 #, python-format msgid "Error updating router on Arista HW router=%s " msgstr "" -#: neutron/services/l3_router/l3_arista.py:154 +#: neutron/services/l3_router/l3_arista.py:151 #, python-format msgid "Error deleting router on Arista HW router %(r)s exception=%(e)s" msgstr "" -#: neutron/services/l3_router/l3_arista.py:200 +#: neutron/services/l3_router/l3_arista.py:197 #, python-format msgid "Error Adding subnet %(subnet)s to router %(router_id)s on Arista HW" msgstr "" -#: neutron/services/l3_router/l3_arista.py:234 +#: neutron/services/l3_router/l3_arista.py:231 #, python-format msgid "" "Error removing interface %(interface)s from router %(router_id)s on " "Arista HWException =(exc)s" msgstr "" -#: neutron/services/l3_router/l3_arista.py:249 +#: neutron/services/l3_router/l3_arista.py:246 msgid "Syncing Neutron Router DB <-> EOS" msgstr "" -#: neutron/services/l3_router/l3_arista.py:280 +#: neutron/services/l3_router/l3_arista.py:277 #, python-format msgid "Error Adding interface %(subnet_id)s to router %(router_id)s on Arista HW" msgstr "" @@ -15313,226 +15335,226 @@ msgstr "" msgid "Pool %(pool_id)s is scheduled to lbaas agent %(agent_id)s" msgstr "" -#: neutron/services/loadbalancer/plugin.py:80 +#: neutron/services/loadbalancer/plugin.py:78 #, python-format msgid "Delete associated loadbalancer pools before removing providers %s" msgstr "" -#: neutron/services/loadbalancer/plugin.py:89 +#: neutron/services/loadbalancer/plugin.py:87 #, python-format msgid "Error retrieving driver for provider %s" msgstr "" -#: neutron/services/loadbalancer/plugin.py:97 +#: neutron/services/loadbalancer/plugin.py:95 #, python-format msgid "Error retrieving provider for pool %s" msgstr "" -#: neutron/services/loadbalancer/plugin.py:188 +#: neutron/services/loadbalancer/plugin.py:186 #, python-format msgid "Failed to delete pool %s, putting it in ERROR state" msgstr "" -#: neutron/services/loadbalancer/agent/agent.py:36 +#: neutron/services/loadbalancer/agent/agent.py:34 msgid "Seconds between periodic task runs" msgstr "" -#: neutron/services/loadbalancer/agent/agent_manager.py:39 +#: neutron/services/loadbalancer/agent/agent_manager.py:37 msgid "Drivers used to manage loadbalancing devices" msgstr "" -#: neutron/services/loadbalancer/agent/agent_manager.py:45 +#: neutron/services/loadbalancer/agent/agent_manager.py:43 #, python-format msgid "Unknown device with pool_id %(pool_id)s" msgstr "" -#: neutron/services/loadbalancer/agent/agent_manager.py:94 +#: neutron/services/loadbalancer/agent/agent_manager.py:92 #, python-format msgid "Error importing loadbalancer device driver: %s" msgstr "" -#: neutron/services/loadbalancer/agent/agent_manager.py:101 +#: neutron/services/loadbalancer/agent/agent_manager.py:99 #, python-format msgid "Multiple device drivers with the same name found: %s" msgstr "" -#: neutron/services/loadbalancer/agent/agent_manager.py:141 +#: neutron/services/loadbalancer/agent/agent_manager.py:139 #, python-format msgid "Error updating statistics on pool %s" msgstr "" -#: neutron/services/loadbalancer/agent/agent_manager.py:157 +#: neutron/services/loadbalancer/agent/agent_manager.py:155 msgid "Unable to retrieve ready devices" msgstr "" -#: neutron/services/loadbalancer/agent/agent_manager.py:174 -#: neutron/services/loadbalancer/agent/agent_manager.py:239 +#: neutron/services/loadbalancer/agent/agent_manager.py:172 +#: neutron/services/loadbalancer/agent/agent_manager.py:237 #, python-format msgid "No device driver on agent: %s." msgstr "" -#: neutron/services/loadbalancer/agent/agent_manager.py:184 +#: neutron/services/loadbalancer/agent/agent_manager.py:182 #, python-format msgid "Unable to deploy instance for pool: %s" msgstr "" -#: neutron/services/loadbalancer/agent/agent_manager.py:194 +#: neutron/services/loadbalancer/agent/agent_manager.py:192 #, python-format msgid "Unable to destroy device for pool: %s" msgstr "" -#: neutron/services/loadbalancer/agent/agent_manager.py:207 +#: neutron/services/loadbalancer/agent/agent_manager.py:205 #, python-format msgid "%(operation)s %(obj)s %(id)s failed on device driver %(driver)s" msgstr "" -#: neutron/services/loadbalancer/agent/agent_manager.py:333 +#: neutron/services/loadbalancer/agent/agent_manager.py:331 #, python-format msgid "Destroying pool %s due to agent disabling" msgstr "" -#: neutron/services/loadbalancer/agent/agent_manager.py:336 +#: neutron/services/loadbalancer/agent/agent_manager.py:334 #, python-format msgid "Agent_updated by server side %s!" msgstr "" -#: neutron/services/loadbalancer/drivers/common/agent_driver_base.py:40 +#: neutron/services/loadbalancer/drivers/common/agent_driver_base.py:38 msgid "Driver to use for scheduling pool to a default loadbalancer agent" msgstr "" -#: neutron/services/loadbalancer/drivers/common/agent_driver_base.py:48 +#: neutron/services/loadbalancer/drivers/common/agent_driver_base.py:46 msgid "Device driver for agent should be specified in plugin driver." msgstr "" -#: neutron/services/loadbalancer/drivers/common/agent_driver_base.py:72 +#: neutron/services/loadbalancer/drivers/common/agent_driver_base.py:70 #, python-format msgid "Multiple lbaas agents found on host %s" msgstr "" -#: neutron/services/loadbalancer/drivers/common/agent_driver_base.py:152 +#: neutron/services/loadbalancer/drivers/common/agent_driver_base.py:150 #, python-format msgid "Unknown object type: %s" msgstr "" -#: neutron/services/loadbalancer/drivers/common/agent_driver_base.py:163 +#: neutron/services/loadbalancer/drivers/common/agent_driver_base.py:161 #, python-format msgid "" "Cannot update status: %(obj_type)s %(obj_id)s not found in the DB, it was" " probably deleted concurrently" msgstr "" -#: neutron/services/loadbalancer/drivers/common/agent_driver_base.py:186 +#: neutron/services/loadbalancer/drivers/common/agent_driver_base.py:184 #, python-format msgid "Unable to find port %s to plug." msgstr "" -#: neutron/services/loadbalancer/drivers/common/agent_driver_base.py:210 -#: neutron/services/loadbalancer/drivers/common/agent_driver_base.py:227 +#: neutron/services/loadbalancer/drivers/common/agent_driver_base.py:208 +#: neutron/services/loadbalancer/drivers/common/agent_driver_base.py:225 #, python-format msgid "" "Unable to find port %s to unplug. This can occur when the Vip has been " "deleted first." msgstr "" -#: neutron/services/loadbalancer/drivers/embrane/config.py:32 +#: neutron/services/loadbalancer/drivers/embrane/config.py:30 msgid "Load Balancer image id (Embrane LB)" msgstr "" -#: neutron/services/loadbalancer/drivers/embrane/config.py:34 +#: neutron/services/loadbalancer/drivers/embrane/config.py:32 msgid "In band Security Zone id for LBs" msgstr "" -#: neutron/services/loadbalancer/drivers/embrane/config.py:36 +#: neutron/services/loadbalancer/drivers/embrane/config.py:34 msgid "Out of band Security Zone id for LBs" msgstr "" -#: neutron/services/loadbalancer/drivers/embrane/config.py:38 +#: neutron/services/loadbalancer/drivers/embrane/config.py:36 msgid "Management Security Zone id for LBs" msgstr "" -#: neutron/services/loadbalancer/drivers/embrane/config.py:40 +#: neutron/services/loadbalancer/drivers/embrane/config.py:38 msgid "Dummy user traffic Security Zone id for LBs" msgstr "" -#: neutron/services/loadbalancer/drivers/embrane/config.py:44 +#: neutron/services/loadbalancer/drivers/embrane/config.py:42 msgid "choose LB image flavor to use, accepted values: small, medium" msgstr "" -#: neutron/services/loadbalancer/drivers/embrane/config.py:47 +#: neutron/services/loadbalancer/drivers/embrane/config.py:45 msgid "resource synchronization interval in seconds" msgstr "" -#: neutron/services/loadbalancer/drivers/embrane/constants.py:51 +#: neutron/services/loadbalancer/drivers/embrane/constants.py:49 #, python-format msgid "%s, probably was cancelled through the heleos UI" msgstr "" -#: neutron/services/loadbalancer/drivers/embrane/constants.py:58 +#: neutron/services/loadbalancer/drivers/embrane/constants.py:56 #, python-format msgid "" "Failed to delete the backend load balancer for reason %s. Please remove " "it manually through the heleos UI" msgstr "" -#: neutron/services/loadbalancer/drivers/embrane/constants.py:61 +#: neutron/services/loadbalancer/drivers/embrane/constants.py:59 #, python-format msgid "" "No subnet is associated to member %s (required to identify the proper " "load balancer port)" msgstr "" -#: neutron/services/loadbalancer/drivers/embrane/driver.py:87 +#: neutron/services/loadbalancer/drivers/embrane/driver.py:85 msgid "Connection limit is not supported by Embrane LB" msgstr "" -#: neutron/services/loadbalancer/drivers/embrane/driver.py:93 +#: neutron/services/loadbalancer/drivers/embrane/driver.py:91 #, python-format msgid "Session persistence %s not supported by Embrane LBaaS" msgstr "" -#: neutron/services/loadbalancer/drivers/embrane/driver.py:131 +#: neutron/services/loadbalancer/drivers/embrane/driver.py:129 #, python-format msgid "Subnet assigned to pool %s doesn't exist, backend port can't be created" msgstr "" -#: neutron/services/loadbalancer/drivers/embrane/agent/lb_operations.py:111 +#: neutron/services/loadbalancer/drivers/embrane/agent/lb_operations.py:109 #, python-format msgid "" "The load balancer %s had no physical representation, likely already " "deleted" msgstr "" -#: neutron/services/loadbalancer/drivers/haproxy/namespace_driver.py:46 +#: neutron/services/loadbalancer/drivers/haproxy/namespace_driver.py:45 msgid "Location to store config and state files" msgstr "" -#: neutron/services/loadbalancer/drivers/haproxy/namespace_driver.py:53 +#: neutron/services/loadbalancer/drivers/haproxy/namespace_driver.py:52 msgid "The user group" msgstr "" -#: neutron/services/loadbalancer/drivers/haproxy/namespace_driver.py:59 +#: neutron/services/loadbalancer/drivers/haproxy/namespace_driver.py:58 msgid "" "When delete and re-add the same vip, send this many gratuitous ARPs to " "flush the ARP cache in the Router. Set it below or equal to 0 to disable " "this feature." msgstr "" -#: neutron/services/loadbalancer/drivers/haproxy/namespace_driver.py:76 +#: neutron/services/loadbalancer/drivers/haproxy/namespace_driver.py:75 #, python-format msgid "Error importing interface driver: %s" msgstr "" -#: neutron/services/loadbalancer/drivers/haproxy/namespace_driver.py:172 +#: neutron/services/loadbalancer/drivers/haproxy/namespace_driver.py:171 #, python-format msgid "Stats socket not found for pool %s" msgstr "" -#: neutron/services/loadbalancer/drivers/haproxy/namespace_driver.py:214 +#: neutron/services/loadbalancer/drivers/haproxy/namespace_driver.py:213 #, python-format msgid "Error while connecting to stats socket: %s" msgstr "" -#: neutron/services/loadbalancer/drivers/haproxy/namespace_driver.py:393 +#: neutron/services/loadbalancer/drivers/haproxy/namespace_driver.py:392 #, python-format msgid "Unable to kill haproxy process: %s" msgstr "" @@ -15716,331 +15738,331 @@ msgstr "" msgid "Removing SNAT port for subnet %s as this is the last pool using it..." msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:62 +#: neutron/services/loadbalancer/drivers/radware/driver.py:60 msgid "IP address of vDirect server." msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:64 +#: neutron/services/loadbalancer/drivers/radware/driver.py:62 msgid "IP address of secondary vDirect server." msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:67 +#: neutron/services/loadbalancer/drivers/radware/driver.py:65 msgid "vDirect user name." msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:70 +#: neutron/services/loadbalancer/drivers/radware/driver.py:68 msgid "vDirect user password." msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:73 +#: neutron/services/loadbalancer/drivers/radware/driver.py:71 msgid "Service ADC type. Default: VA." msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:76 +#: neutron/services/loadbalancer/drivers/radware/driver.py:74 msgid "Service ADC version." msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:79 +#: neutron/services/loadbalancer/drivers/radware/driver.py:77 msgid "Enables or disables the Service HA pair. Default: False." msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:83 +#: neutron/services/loadbalancer/drivers/radware/driver.py:81 msgid "Service throughput. Default: 1000." msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:86 +#: neutron/services/loadbalancer/drivers/radware/driver.py:84 msgid "Service SSL throughput. Default: 100." msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:89 +#: neutron/services/loadbalancer/drivers/radware/driver.py:87 msgid "Service compression throughput. Default: 100." msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:92 +#: neutron/services/loadbalancer/drivers/radware/driver.py:90 msgid "Size of service cache. Default: 20." msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:95 +#: neutron/services/loadbalancer/drivers/radware/driver.py:93 msgid "Name of l2_l3 workflow. Default: openstack_l2_l3." msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:99 +#: neutron/services/loadbalancer/drivers/radware/driver.py:97 msgid "Name of l4 workflow. Default: openstack_l4." msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:107 +#: neutron/services/loadbalancer/drivers/radware/driver.py:105 msgid "Parameter for l2_l3 workflow constructor." msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:114 +#: neutron/services/loadbalancer/drivers/radware/driver.py:112 msgid "Parameter for l2_l3 workflow setup." msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:117 +#: neutron/services/loadbalancer/drivers/radware/driver.py:115 msgid "List of actions that are not pushed to the completion queue." msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:121 +#: neutron/services/loadbalancer/drivers/radware/driver.py:119 msgid "Name of the l4 workflow action. Default: BaseCreate." msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:125 +#: neutron/services/loadbalancer/drivers/radware/driver.py:123 msgid "Resource pool IDs." msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:128 +#: neutron/services/loadbalancer/drivers/radware/driver.py:126 msgid "A required VLAN for the interswitch link to use." msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:131 +#: neutron/services/loadbalancer/drivers/radware/driver.py:129 msgid "" "Enable or disable Alteon interswitch link for stateful session failover. " "Default: False." msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:232 +#: neutron/services/loadbalancer/drivers/radware/driver.py:230 #, python-format msgid "" "vip: %(vip)s, extended_vip: %(extended_vip)s, service_name: " "%(service_name)s, " msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:266 +#: neutron/services/loadbalancer/drivers/radware/driver.py:264 #, python-format msgid "Retrieved pip nport: %(port)r for vip: %(vip)s" msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:274 +#: neutron/services/loadbalancer/drivers/radware/driver.py:272 #, python-format msgid "Found no pip nports associated with vip: %s" msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:283 +#: neutron/services/loadbalancer/drivers/radware/driver.py:281 #, python-format msgid "Failed to remove workflow %s. Going to set vip to ERROR status" msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:297 +#: neutron/services/loadbalancer/drivers/radware/driver.py:295 #, python-format msgid "pip nport id: %s" msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:301 +#: neutron/services/loadbalancer/drivers/radware/driver.py:299 #, python-format msgid "pip nport delete failed: %r" msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:389 +#: neutron/services/loadbalancer/drivers/radware/driver.py:387 #, python-format msgid "" "_handle_pool_health_monitor. health_monitor = %(hm_id)s pool_id = " "%(pool_id)s delete = %(delete)s vip_id = %(vip_id)s" msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:420 +#: neutron/services/loadbalancer/drivers/radware/driver.py:418 msgid "Starting operation completion handling thread" msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:450 +#: neutron/services/loadbalancer/drivers/radware/driver.py:448 #, python-format msgid "_update_workflow response: %s " msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:459 -#: neutron/services/loadbalancer/drivers/radware/driver.py:490 +#: neutron/services/loadbalancer/drivers/radware/driver.py:457 +#: neutron/services/loadbalancer/drivers/radware/driver.py:488 #, python-format msgid "Pushing operation %s to the queue" msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:467 +#: neutron/services/loadbalancer/drivers/radware/driver.py:465 #, python-format msgid "Remove the workflow %s" msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:475 +#: neutron/services/loadbalancer/drivers/radware/driver.py:473 #, python-format msgid "Post-remove workflow function %r completed" msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:479 +#: neutron/services/loadbalancer/drivers/radware/driver.py:477 #, python-format msgid "Post-remove workflow function %r failed" msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:596 +#: neutron/services/loadbalancer/drivers/radware/driver.py:594 #, python-format msgid "create_workflow response: %s" msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:650 +#: neutron/services/loadbalancer/drivers/radware/driver.py:648 #, python-format msgid "Could not find or allocate IP address for subnet id %s" msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:685 +#: neutron/services/loadbalancer/drivers/radware/driver.py:683 #, python-format msgid "" "vDirectRESTClient:init server=%(server)s, secondary " "server=%(sec_server)s, port=%(port)d, ssl=%(ssl)r" msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:691 +#: neutron/services/loadbalancer/drivers/radware/driver.py:689 #, python-format msgid "Fliping servers. Current is: %(server)s, switching to %(secondary)s" msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:704 +#: neutron/services/loadbalancer/drivers/radware/driver.py:702 msgid "" "REST client is not able to recover since only one vDirect server is " "configured." msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:712 +#: neutron/services/loadbalancer/drivers/radware/driver.py:710 #, python-format msgid "vDirect server is not responding (%s)." msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:716 +#: neutron/services/loadbalancer/drivers/radware/driver.py:714 #, python-format msgid "vDirect server is not active (%s)." msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:744 +#: neutron/services/loadbalancer/drivers/radware/driver.py:742 msgid "vdirectRESTClient: Could not establish HTTPS connection" msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:751 +#: neutron/services/loadbalancer/drivers/radware/driver.py:749 msgid "vdirectRESTClient: Could not establish HTTP connection" msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:768 +#: neutron/services/loadbalancer/drivers/radware/driver.py:766 #, python-format msgid "vdirectRESTClient: %(action)s failure, %(e)r" msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:836 +#: neutron/services/loadbalancer/drivers/radware/driver.py:834 #, python-format msgid "" "Operation %(oper)s is completed after %(sec_to_completion)d sec with " "success status: %(success)s :" msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:848 +#: neutron/services/loadbalancer/drivers/radware/driver.py:846 #, python-format msgid "Operation %(operation)s failed. Reason: %(msg)s" msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:880 +#: neutron/services/loadbalancer/drivers/radware/driver.py:878 #, python-format msgid "Operation %s is not completed yet.." msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:895 +#: neutron/services/loadbalancer/drivers/radware/driver.py:893 msgid "Exception was thrown inside OperationCompletionHandler" msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:904 +#: neutron/services/loadbalancer/drivers/radware/driver.py:902 #, python-format msgid "Post-operation function %(func)r completed after operation %(oper)r" msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:910 +#: neutron/services/loadbalancer/drivers/radware/driver.py:908 #, python-format msgid "Post-operation function %(func)r failed after operation %(oper)r" msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:951 +#: neutron/services/loadbalancer/drivers/radware/driver.py:949 #, python-format msgid "_update: %s " msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:991 +#: neutron/services/loadbalancer/drivers/radware/driver.py:989 #, python-format msgid "_remove_object_from_db %s" msgstr "" -#: neutron/services/loadbalancer/drivers/radware/exceptions.py:22 +#: neutron/services/loadbalancer/drivers/radware/exceptions.py:20 msgid "An unknown exception occurred in Radware LBaaS provider." msgstr "" -#: neutron/services/loadbalancer/drivers/radware/exceptions.py:26 +#: neutron/services/loadbalancer/drivers/radware/exceptions.py:24 msgid "" "vDirect user/password missing. Specify in configuration file, under " "[radware] section" msgstr "" -#: neutron/services/loadbalancer/drivers/radware/exceptions.py:31 +#: neutron/services/loadbalancer/drivers/radware/exceptions.py:29 #, python-format msgid "" "Workflow %(workflow)s is missing on vDirect server. Upload missing " "workflow" msgstr "" -#: neutron/services/loadbalancer/drivers/radware/exceptions.py:36 +#: neutron/services/loadbalancer/drivers/radware/exceptions.py:34 #, python-format msgid "" "REST request failed with status %(status)s. Reason: %(reason)s, " "Description: %(description)s. Success status codes are %(success_codes)s" msgstr "" -#: neutron/services/loadbalancer/drivers/radware/exceptions.py:42 +#: neutron/services/loadbalancer/drivers/radware/exceptions.py:40 #, python-format msgid "%(operation)s operation is not supported for %(entity)s." msgstr "" -#: neutron/services/metering/agents/metering_agent.py:70 +#: neutron/services/metering/agents/metering_agent.py:68 msgid "Metering driver" msgstr "" -#: neutron/services/metering/agents/metering_agent.py:72 +#: neutron/services/metering/agents/metering_agent.py:70 msgid "Interval between two metering measures" msgstr "" -#: neutron/services/metering/agents/metering_agent.py:74 +#: neutron/services/metering/agents/metering_agent.py:72 msgid "Interval between two metering reports" msgstr "" -#: neutron/services/metering/agents/metering_agent.py:98 +#: neutron/services/metering/agents/metering_agent.py:96 #, python-format msgid "Loading Metering driver %s" msgstr "" -#: neutron/services/metering/agents/metering_agent.py:100 +#: neutron/services/metering/agents/metering_agent.py:98 msgid "A metering driver must be specified" msgstr "" -#: neutron/services/metering/agents/metering_agent.py:115 +#: neutron/services/metering/agents/metering_agent.py:113 #, python-format msgid "Send metering report: %s" msgstr "" -#: neutron/services/metering/agents/metering_agent.py:179 +#: neutron/services/metering/agents/metering_agent.py:177 #, python-format msgid "Driver %(driver)s does not implement %(func)s" msgstr "" -#: neutron/services/metering/agents/metering_agent.py:183 +#: neutron/services/metering/agents/metering_agent.py:181 #, python-format msgid "Driver %(driver)s:%(func)s runtime error" msgstr "" -#: neutron/services/metering/agents/metering_agent.py:218 +#: neutron/services/metering/agents/metering_agent.py:216 msgid "Get router traffic counters" msgstr "" -#: neutron/services/metering/agents/metering_agent.py:222 +#: neutron/services/metering/agents/metering_agent.py:220 msgid "Update metering rules from agent" msgstr "" -#: neutron/services/metering/agents/metering_agent.py:227 +#: neutron/services/metering/agents/metering_agent.py:225 msgid "Creating a metering label from agent" msgstr "" -#: neutron/services/metering/agents/metering_agent.py:234 +#: neutron/services/metering/agents/metering_agent.py:232 msgid "Delete a metering label from agent" msgstr "" -#: neutron/services/metering/drivers/iptables/iptables_driver.py:93 +#: neutron/services/metering/drivers/iptables/iptables_driver.py:91 #, python-format msgid "Loading interface driver %s" msgstr "" @@ -16049,244 +16071,244 @@ msgstr "" msgid "The vpn device drivers Neutron will use" msgstr "" -#: neutron/services/vpn/plugin.py:46 +#: neutron/services/vpn/plugin.py:44 #, python-format msgid "VPN plugin using service driver: %s" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:89 +#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:87 #, python-format msgid "RESPONSE: %s" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:102 +#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:100 #, python-format msgid "%(method)s: Request for %(resource)s payload: %(payload)s" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:109 +#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:107 #, python-format msgid "%(method)s Took %(time).2f seconds to process" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:115 +#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:113 #, python-format msgid "%(method)s: Request timeout%(ssl)s (%(timeout).3f sec) for CSR(%(host)s)" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:124 +#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:122 #, python-format msgid "%(method)s: Unable to connect to CSR(%(host)s)" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:128 +#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:126 #, python-format msgid "%(method)s: Unexpected error for CSR (%(host)s): %(error)s" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:134 +#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:132 #, python-format msgid "%(method)s: Completed [%(status)s]" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:149 +#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:147 #, python-format msgid "%(auth)s with CSR %(host)s" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:156 +#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:154 #, python-format msgid "Successfully authenticated with CSR %s" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:158 +#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:156 #, python-format msgid "Failed authentication with CSR %(host)s [%(status)s]" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:193 +#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:191 #, python-format msgid "%(method)s: Request timeout for CSR(%(host)s)" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:42 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:40 msgid "Status check interval for Cisco CSR IPSec connections" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:53 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:51 #, python-format msgid "Cisco CSR failed to create %(resource)s (%(which)s)" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:57 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:55 #, python-format msgid "Cisco CSR failed to change %(tunnel)s admin state to %(state)s" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:62 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:60 #, python-format msgid "" "Required %(resource)s attribute %(attr)s mapping for Cisco CSR is missing" " in device driver" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:67 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:65 #, python-format msgid "" "Device driver does not have a mapping of '%(value)s for attribute " "%(attr)s of %(resource)s" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:130 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:128 #, python-format msgid "Handling VPN service update notification '%s'" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:152 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:150 #, python-format msgid "Update: Existing connection %s changed" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:159 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:157 #, python-format msgid "Update: Connection %s no longer admin down" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:165 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:163 #, python-format msgid "Update: Connection %s forced to admin down" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:173 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:171 #, python-format msgid "Update: Created new connection %s in admin down state" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:178 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:176 #, python-format msgid "Update: Created new connection %s" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:189 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:187 #, python-format msgid "Update: Existing VPN service %s detected" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:193 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:191 #, python-format msgid "Update: New VPN service %s detected" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:204 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:202 msgid "Update: Completed update processing" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:234 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:232 #, python-format msgid "Mark: %(service)d VPN services and %(conn)d IPSec connections marked dirty" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:256 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:254 #, python-format msgid "" "Sweep: Removed %(service)d dirty VPN service%(splural)s and %(conn)d " "dirty IPSec connection%(cplural)s" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:271 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:269 #, python-format msgid "Report: Collecting status for IPSec connections on VPN service %s" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:277 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:275 #, python-format msgid "Connection %s forced down" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:281 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:279 #, python-format msgid "Connection %(conn)s reported %(status)s" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:286 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:284 #, python-format msgid "Report: Adding info for IPSec connection %s" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:306 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:304 #, python-format msgid "Report: Adding info for VPN service %s" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:328 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:326 msgid "Report: Starting status report processing" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:330 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:328 #, python-format msgid "Report: Collecting status for VPN service %s" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:336 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:334 msgid "Sending status report update to plugin" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:338 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:336 msgid "Report: Completed status report processing" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:622 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:620 #, python-format msgid "Unable to create %(resource)s %(which)s: %(status)d" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:635 -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:663 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:633 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:661 #, python-format msgid "Internal error - '%s' is not defined" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:648 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:646 #, python-format msgid "Unable to delete %(resource)s %(which)s: %(status)d" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:657 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:655 #, python-format msgid "Performing rollback action %(action)s for resource %(resource)s" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:683 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:681 #, python-format msgid "Creating IPSec connection %s" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:716 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:714 #, python-format msgid "FAILED: Create of IPSec site-to-site connection %s" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:719 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:717 #, python-format msgid "SUCCESS: Created IPSec site-to-site connection %s" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:728 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:726 #, python-format msgid "Deleting IPSec connection %s" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:730 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:728 #, python-format msgid "Unable to find connection %s" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:734 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:732 #, python-format msgid "SUCCESS: Deleted IPSec site-to-site connection %s" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:742 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:740 #, python-format msgid "Unable to change %(tunnel)s admin state to %(state)s" msgstr "" @@ -16332,57 +16354,57 @@ msgstr "" msgid "Ignoring Cisco CSR for subnet %s - REST management is not an IP address" msgstr "" -#: neutron/services/vpn/service_drivers/cisco_csr_db.py:46 +#: neutron/services/vpn/service_drivers/cisco_csr_db.py:44 #, python-format msgid "Fatal - %(reason)s" msgstr "" -#: neutron/services/vpn/service_drivers/cisco_csr_db.py:80 +#: neutron/services/vpn/service_drivers/cisco_csr_db.py:78 #, python-format msgid "No available Cisco CSR %(type)s IDs from %(min)d..%(max)d" msgstr "" -#: neutron/services/vpn/service_drivers/cisco_csr_db.py:135 +#: neutron/services/vpn/service_drivers/cisco_csr_db.py:133 #, python-format msgid "" "Database inconsistency between IPSec connection and Cisco CSR mapping " "table (%s)" msgstr "" -#: neutron/services/vpn/service_drivers/cisco_csr_db.py:161 +#: neutron/services/vpn/service_drivers/cisco_csr_db.py:159 #, python-format msgid "Reserved new CSR ID %(csr_id)d for %(policy)s ID %(policy_id)s" msgstr "" -#: neutron/services/vpn/service_drivers/cisco_csr_db.py:188 +#: neutron/services/vpn/service_drivers/cisco_csr_db.py:186 #, python-format msgid "" "Mappings for IPSec connection %(conn)s - tunnel=%(tunnel)s " "ike_policy=%(csr_ike)d ipsec_policy=%(csr_ipsec)d" msgstr "" -#: neutron/services/vpn/service_drivers/cisco_csr_db.py:197 +#: neutron/services/vpn/service_drivers/cisco_csr_db.py:195 #, python-format msgid "" "Existing entry for IPSec connection %s not found in Cisco CSR mapping " "table" msgstr "" -#: neutron/services/vpn/service_drivers/cisco_csr_db.py:224 +#: neutron/services/vpn/service_drivers/cisco_csr_db.py:222 #, python-format msgid "" "Attempt to create duplicate entry in Cisco CSR mapping table for " "connection %s" msgstr "" -#: neutron/services/vpn/service_drivers/cisco_csr_db.py:227 +#: neutron/services/vpn/service_drivers/cisco_csr_db.py:225 #, python-format msgid "" "Mapped connection %(conn_id)s to Tunnel%(tunnel_id)d using IKE policy ID " "%(ike_id)d and IPSec policy ID %(ipsec_id)d" msgstr "" -#: neutron/services/vpn/service_drivers/cisco_csr_db.py:239 +#: neutron/services/vpn/service_drivers/cisco_csr_db.py:237 #, python-format msgid "Removed mapping for connection %s" msgstr "" @@ -16394,7 +16416,7 @@ msgid "" "router %(router)s" msgstr "" -#: neutron/services/vpn/service_drivers/cisco_validator.py:34 +#: neutron/services/vpn/service_drivers/cisco_validator.py:32 #, python-format msgid "" "Cisco CSR does not support %(resource)s attribute %(key)s with value " @@ -16407,35 +16429,35 @@ msgid "" "/proc/cmdline interface." msgstr "" -#: neutron/tests/unit/test_api_v2_resource.py:181 -#: neutron/tests/unit/test_api_v2_resource.py:251 +#: neutron/tests/unit/test_api_v2_resource.py:178 +#: neutron/tests/unit/test_api_v2_resource.py:248 msgid "Unmapped error" msgstr "" -#: neutron/tests/unit/test_api_v2_resource.py:320 +#: neutron/tests/unit/test_api_v2_resource.py:317 msgid "" "The server has either erred or is incapable of performing the requested " "operation." msgstr "" -#: neutron/tests/unit/bigswitch/fake_server.py:72 +#: neutron/tests/unit/bigswitch/fake_server.py:69 #, python-format msgid "" "Request: action=%(action)s, uri=%(uri)r, body=%(body)s, " "headers=%(headers)s" msgstr "" -#: neutron/tests/unit/bigswitch/fake_server.py:124 +#: neutron/tests/unit/bigswitch/fake_server.py:121 #, python-format msgid "No floating IPs in requesturi=%(uri)s, body=%(body)s" msgstr "" -#: neutron/tests/unit/bigswitch/fake_server.py:133 +#: neutron/tests/unit/bigswitch/fake_server.py:130 #, python-format msgid "Expected floating IPs from multiple tenants.uri=%(uri)s, body=%(body)s" msgstr "" -#: neutron/tests/unit/bigswitch/fake_server.py:178 +#: neutron/tests/unit/bigswitch/fake_server.py:175 #, python-format msgid "No host cert for %(server)s in cert %(cert)s" msgstr "" @@ -16475,165 +16497,165 @@ msgstr "" msgid "Adds test attributes to core resources." msgstr "" -#: neutron/tests/unit/nec/stub_ofc_driver.py:65 +#: neutron/tests/unit/nec/stub_ofc_driver.py:64 #, python-format msgid "(create_tenant) OFC tenant %s already exists" msgstr "" -#: neutron/tests/unit/nec/stub_ofc_driver.py:77 +#: neutron/tests/unit/nec/stub_ofc_driver.py:76 #, python-format msgid "(delete_tenant) OFC tenant %s not found" msgstr "" -#: neutron/tests/unit/nec/stub_ofc_driver.py:79 +#: neutron/tests/unit/nec/stub_ofc_driver.py:78 msgid "delete_tenant: SUCCEED" msgstr "" -#: neutron/tests/unit/nec/stub_ofc_driver.py:86 +#: neutron/tests/unit/nec/stub_ofc_driver.py:85 #, python-format msgid "(create_network) OFC tenant %s not found" msgstr "" -#: neutron/tests/unit/nec/stub_ofc_driver.py:89 +#: neutron/tests/unit/nec/stub_ofc_driver.py:88 #, python-format msgid "(create_network) OFC network %s already exists" msgstr "" -#: neutron/tests/unit/nec/stub_ofc_driver.py:100 +#: neutron/tests/unit/nec/stub_ofc_driver.py:99 #, python-format msgid "(update_network) OFC network %s not found" msgstr "" -#: neutron/tests/unit/nec/stub_ofc_driver.py:104 +#: neutron/tests/unit/nec/stub_ofc_driver.py:103 msgid "update_network: SUCCEED" msgstr "" -#: neutron/tests/unit/nec/stub_ofc_driver.py:112 +#: neutron/tests/unit/nec/stub_ofc_driver.py:111 #, python-format msgid "(delete_network) OFC network %s not found" msgstr "" -#: neutron/tests/unit/nec/stub_ofc_driver.py:114 +#: neutron/tests/unit/nec/stub_ofc_driver.py:113 msgid "delete_network: SUCCEED" msgstr "" -#: neutron/tests/unit/nec/stub_ofc_driver.py:121 +#: neutron/tests/unit/nec/stub_ofc_driver.py:120 #, python-format msgid "(create_port) OFC network %s not found" msgstr "" -#: neutron/tests/unit/nec/stub_ofc_driver.py:124 +#: neutron/tests/unit/nec/stub_ofc_driver.py:123 #, python-format msgid "(create_port) OFC port %s already exists" msgstr "" -#: neutron/tests/unit/nec/stub_ofc_driver.py:138 +#: neutron/tests/unit/nec/stub_ofc_driver.py:137 #, python-format msgid "(delete_port) OFC port %s not found" msgstr "" -#: neutron/tests/unit/nec/stub_ofc_driver.py:140 +#: neutron/tests/unit/nec/stub_ofc_driver.py:139 msgid "delete_port: SUCCEED" msgstr "" -#: neutron/tests/unit/nec/stub_ofc_driver.py:173 +#: neutron/tests/unit/nec/stub_ofc_driver.py:172 #, python-format msgid "(create_router) OFC tenant %s not found" msgstr "" -#: neutron/tests/unit/nec/stub_ofc_driver.py:176 +#: neutron/tests/unit/nec/stub_ofc_driver.py:175 #, python-format msgid "(create_router) OFC router %s already exists" msgstr "" -#: neutron/tests/unit/nec/stub_ofc_driver.py:179 +#: neutron/tests/unit/nec/stub_ofc_driver.py:178 msgid "Operation on OFC is failed" msgstr "" -#: neutron/tests/unit/nec/stub_ofc_driver.py:193 -#: neutron/tests/unit/nec/stub_ofc_driver.py:283 +#: neutron/tests/unit/nec/stub_ofc_driver.py:192 +#: neutron/tests/unit/nec/stub_ofc_driver.py:282 #, python-format msgid "(delete_router) OFC router %s not found" msgstr "" -#: neutron/tests/unit/nec/stub_ofc_driver.py:195 +#: neutron/tests/unit/nec/stub_ofc_driver.py:194 msgid "delete_router: SUCCEED" msgstr "" -#: neutron/tests/unit/nec/stub_ofc_driver.py:203 +#: neutron/tests/unit/nec/stub_ofc_driver.py:202 #, python-format msgid "(add_router_interface) ip_address %s is not a valid format (a.b.c.d/N)." msgstr "" -#: neutron/tests/unit/nec/stub_ofc_driver.py:208 +#: neutron/tests/unit/nec/stub_ofc_driver.py:207 #, python-format msgid "(add_router_interface) OFC router %s not found" msgstr "" -#: neutron/tests/unit/nec/stub_ofc_driver.py:211 +#: neutron/tests/unit/nec/stub_ofc_driver.py:210 #, python-format msgid "(add_router_interface) OFC network %s not found" msgstr "" -#: neutron/tests/unit/nec/stub_ofc_driver.py:218 +#: neutron/tests/unit/nec/stub_ofc_driver.py:217 #, python-format msgid "add_router_interface: SUCCEED (if_id=%s)" msgstr "" -#: neutron/tests/unit/nec/stub_ofc_driver.py:226 -#: neutron/tests/unit/nec/stub_ofc_driver.py:243 +#: neutron/tests/unit/nec/stub_ofc_driver.py:225 +#: neutron/tests/unit/nec/stub_ofc_driver.py:242 #, python-format msgid "(delete_router_interface) OFC router interface %s not found" msgstr "" -#: neutron/tests/unit/nec/stub_ofc_driver.py:235 +#: neutron/tests/unit/nec/stub_ofc_driver.py:234 msgid "update_router_route: SUCCEED" msgstr "" -#: neutron/tests/unit/nec/stub_ofc_driver.py:246 +#: neutron/tests/unit/nec/stub_ofc_driver.py:245 msgid "delete_router_interface: SUCCEED" msgstr "" -#: neutron/tests/unit/nec/stub_ofc_driver.py:256 +#: neutron/tests/unit/nec/stub_ofc_driver.py:255 #, python-format msgid "(add_router_route) OFC router %s not found" msgstr "" -#: neutron/tests/unit/nec/stub_ofc_driver.py:261 +#: neutron/tests/unit/nec/stub_ofc_driver.py:260 #, python-format msgid "(add_router_route) route to \"%s\" already exists" msgstr "" -#: neutron/tests/unit/nec/stub_ofc_driver.py:266 +#: neutron/tests/unit/nec/stub_ofc_driver.py:265 #, python-format msgid "add_router_route: SUCCEED (route_id=%s)" msgstr "" -#: neutron/tests/unit/nec/stub_ofc_driver.py:275 +#: neutron/tests/unit/nec/stub_ofc_driver.py:274 #, python-format msgid "(delete_router_route) OFC router route %s not found" msgstr "" -#: neutron/tests/unit/nec/stub_ofc_driver.py:277 +#: neutron/tests/unit/nec/stub_ofc_driver.py:276 msgid "delete_router_route: SUCCEED" msgstr "" -#: neutron/tests/unit/nec/stub_ofc_driver.py:290 +#: neutron/tests/unit/nec/stub_ofc_driver.py:289 #, python-format msgid "list_router_routes: routes=%s" msgstr "" -#: neutron/tests/unit/nec/test_ofc_client.py:86 +#: neutron/tests/unit/nec/test_ofc_client.py:84 msgid "The specified OFC resource (/somewhere) is not found." msgstr "" -#: neutron/tests/unit/nec/test_ofc_client.py:90 -#: neutron/tests/unit/nec/test_ofc_client.py:96 -#: neutron/tests/unit/nec/test_ofc_client.py:105 +#: neutron/tests/unit/nec/test_ofc_client.py:88 +#: neutron/tests/unit/nec/test_ofc_client.py:94 +#: neutron/tests/unit/nec/test_ofc_client.py:103 msgid "An OFC exception has occurred: Operation on OFC failed" msgstr "" -#: neutron/tests/unit/nec/test_ofc_client.py:112 +#: neutron/tests/unit/nec/test_ofc_client.py:110 msgid "An OFC exception has occurred: Failed to connect OFC : " msgstr "" diff --git a/neutron/locale/es/LC_MESSAGES/neutron-log-info.po b/neutron/locale/es/LC_MESSAGES/neutron-log-info.po index d40468cb024..1f6da878bc1 100644 --- a/neutron/locale/es/LC_MESSAGES/neutron-log-info.po +++ b/neutron/locale/es/LC_MESSAGES/neutron-log-info.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Neutron\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-14 06:10+0000\n" +"POT-Creation-Date: 2014-09-22 06:06+0000\n" "PO-Revision-Date: 2014-07-18 20:49+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: Spanish (http://www.transifex.com/projects/p/neutron/language/" @@ -116,20 +116,25 @@ msgstr "" msgid "Waiting on %d children to exit" msgstr "En espera de %d hijos para salir" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:80 +#: neutron/plugins/ml2/drivers/type_tunnel.py:79 +#, python-format +msgid "%(type)s ID ranges: %(range)s" +msgstr "" + +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:78 msgid "APIC service agent starting ..." msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:97 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:95 msgid "APIC service agent started" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:191 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:189 #, python-format msgid "APIC host agent: agent starting on %s" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:211 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:209 #, python-format msgid "APIC host agent: started on %s" msgstr "" @@ -139,11 +144,11 @@ msgstr "" msgid "Agent out of sync with plugin!" msgstr "" -#: neutron/plugins/nuage/syncmanager.py:47 +#: neutron/plugins/nuage/syncmanager.py:46 msgid "Starting the sync between Neutron and VSD" msgstr "" -#: neutron/plugins/nuage/syncmanager.py:60 +#: neutron/plugins/nuage/syncmanager.py:59 msgid "Sync between Neutron and VSD completed successfully" msgstr "" diff --git a/neutron/locale/fr/LC_MESSAGES/neutron-log-info.po b/neutron/locale/fr/LC_MESSAGES/neutron-log-info.po index 808648be4e6..72f11c1503a 100644 --- a/neutron/locale/fr/LC_MESSAGES/neutron-log-info.po +++ b/neutron/locale/fr/LC_MESSAGES/neutron-log-info.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Neutron\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-14 06:10+0000\n" +"POT-Creation-Date: 2014-09-22 06:06+0000\n" "PO-Revision-Date: 2014-08-12 21:40+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: French (http://www.transifex.com/projects/p/neutron/language/" @@ -116,20 +116,25 @@ msgstr "Pause demandée après suppression de thread. Nettoyage." msgid "Waiting on %d children to exit" msgstr "En attente %d enfants pour sortie" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:80 +#: neutron/plugins/ml2/drivers/type_tunnel.py:79 +#, python-format +msgid "%(type)s ID ranges: %(range)s" +msgstr "" + +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:78 msgid "APIC service agent starting ..." msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:97 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:95 msgid "APIC service agent started" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:191 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:189 #, python-format msgid "APIC host agent: agent starting on %s" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:211 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:209 #, python-format msgid "APIC host agent: started on %s" msgstr "" @@ -139,11 +144,11 @@ msgstr "" msgid "Agent out of sync with plugin!" msgstr "Agent non synchronisé avec le plug-in !" -#: neutron/plugins/nuage/syncmanager.py:47 +#: neutron/plugins/nuage/syncmanager.py:46 msgid "Starting the sync between Neutron and VSD" msgstr "" -#: neutron/plugins/nuage/syncmanager.py:60 +#: neutron/plugins/nuage/syncmanager.py:59 msgid "Sync between Neutron and VSD completed successfully" msgstr "" diff --git a/neutron/locale/it/LC_MESSAGES/neutron-log-info.po b/neutron/locale/it/LC_MESSAGES/neutron-log-info.po index 2e2426e88ea..e4199e1a40f 100644 --- a/neutron/locale/it/LC_MESSAGES/neutron-log-info.po +++ b/neutron/locale/it/LC_MESSAGES/neutron-log-info.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Neutron\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-14 06:10+0000\n" +"POT-Creation-Date: 2014-09-22 06:06+0000\n" "PO-Revision-Date: 2014-08-17 05:19+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: Italian (http://www.transifex.com/projects/p/neutron/language/" @@ -118,20 +118,25 @@ msgstr "Attendere la chiamata dopo l'uccisione de filo. Bonifica." msgid "Waiting on %d children to exit" msgstr "In attesa %d degli elementi secondari per uscire" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:80 +#: neutron/plugins/ml2/drivers/type_tunnel.py:79 +#, python-format +msgid "%(type)s ID ranges: %(range)s" +msgstr "" + +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:78 msgid "APIC service agent starting ..." msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:97 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:95 msgid "APIC service agent started" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:191 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:189 #, python-format msgid "APIC host agent: agent starting on %s" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:211 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:209 #, python-format msgid "APIC host agent: started on %s" msgstr "" @@ -141,11 +146,11 @@ msgstr "" msgid "Agent out of sync with plugin!" msgstr "Agent non sincronizzato con il plugin!" -#: neutron/plugins/nuage/syncmanager.py:47 +#: neutron/plugins/nuage/syncmanager.py:46 msgid "Starting the sync between Neutron and VSD" msgstr "" -#: neutron/plugins/nuage/syncmanager.py:60 +#: neutron/plugins/nuage/syncmanager.py:59 msgid "Sync between Neutron and VSD completed successfully" msgstr "" diff --git a/neutron/locale/ja/LC_MESSAGES/neutron-log-info.po b/neutron/locale/ja/LC_MESSAGES/neutron-log-info.po index 92c03c083da..783b1d275da 100644 --- a/neutron/locale/ja/LC_MESSAGES/neutron-log-info.po +++ b/neutron/locale/ja/LC_MESSAGES/neutron-log-info.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Neutron\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-14 06:10+0000\n" +"POT-Creation-Date: 2014-09-22 06:06+0000\n" "PO-Revision-Date: 2014-07-18 20:49+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: Japanese (http://www.transifex.com/projects/p/neutron/" @@ -116,20 +116,25 @@ msgstr "" msgid "Waiting on %d children to exit" msgstr "%d 個の子で終了を待機しています" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:80 +#: neutron/plugins/ml2/drivers/type_tunnel.py:79 +#, python-format +msgid "%(type)s ID ranges: %(range)s" +msgstr "" + +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:78 msgid "APIC service agent starting ..." msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:97 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:95 msgid "APIC service agent started" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:191 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:189 #, python-format msgid "APIC host agent: agent starting on %s" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:211 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:209 #, python-format msgid "APIC host agent: started on %s" msgstr "" @@ -139,11 +144,11 @@ msgstr "" msgid "Agent out of sync with plugin!" msgstr "" -#: neutron/plugins/nuage/syncmanager.py:47 +#: neutron/plugins/nuage/syncmanager.py:46 msgid "Starting the sync between Neutron and VSD" msgstr "" -#: neutron/plugins/nuage/syncmanager.py:60 +#: neutron/plugins/nuage/syncmanager.py:59 msgid "Sync between Neutron and VSD completed successfully" msgstr "" diff --git a/neutron/locale/ko_KR/LC_MESSAGES/neutron-log-info.po b/neutron/locale/ko_KR/LC_MESSAGES/neutron-log-info.po index c6adbb201be..7bffe5b962e 100644 --- a/neutron/locale/ko_KR/LC_MESSAGES/neutron-log-info.po +++ b/neutron/locale/ko_KR/LC_MESSAGES/neutron-log-info.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Neutron\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-14 06:10+0000\n" +"POT-Creation-Date: 2014-09-22 06:06+0000\n" "PO-Revision-Date: 2014-07-18 20:49+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: Korean (Korea) (http://www.transifex.com/projects/p/neutron/" @@ -116,20 +116,25 @@ msgstr "" msgid "Waiting on %d children to exit" msgstr "%d 하위에서 종료하기를 대기 중임" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:80 +#: neutron/plugins/ml2/drivers/type_tunnel.py:79 +#, python-format +msgid "%(type)s ID ranges: %(range)s" +msgstr "" + +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:78 msgid "APIC service agent starting ..." msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:97 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:95 msgid "APIC service agent started" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:191 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:189 #, python-format msgid "APIC host agent: agent starting on %s" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:211 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:209 #, python-format msgid "APIC host agent: started on %s" msgstr "" @@ -139,11 +144,11 @@ msgstr "" msgid "Agent out of sync with plugin!" msgstr "" -#: neutron/plugins/nuage/syncmanager.py:47 +#: neutron/plugins/nuage/syncmanager.py:46 msgid "Starting the sync between Neutron and VSD" msgstr "" -#: neutron/plugins/nuage/syncmanager.py:60 +#: neutron/plugins/nuage/syncmanager.py:59 msgid "Sync between Neutron and VSD completed successfully" msgstr "" diff --git a/neutron/locale/neutron-log-info.pot b/neutron/locale/neutron-log-info.pot index 0649ada5c20..ced85f81602 100644 --- a/neutron/locale/neutron-log-info.pot +++ b/neutron/locale/neutron-log-info.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: neutron 2014.2.dev114.gf095f99\n" +"Project-Id-Version: neutron 2014.2.dev190.ga76af4a\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-14 06:10+0000\n" +"POT-Creation-Date: 2014-09-22 06:06+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -115,20 +115,25 @@ msgstr "" msgid "Waiting on %d children to exit" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:80 +#: neutron/plugins/ml2/drivers/type_tunnel.py:79 +#, python-format +msgid "%(type)s ID ranges: %(range)s" +msgstr "" + +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:78 msgid "APIC service agent starting ..." msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:97 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:95 msgid "APIC service agent started" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:191 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:189 #, python-format msgid "APIC host agent: agent starting on %s" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:211 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:209 #, python-format msgid "APIC host agent: started on %s" msgstr "" @@ -138,11 +143,11 @@ msgstr "" msgid "Agent out of sync with plugin!" msgstr "" -#: neutron/plugins/nuage/syncmanager.py:47 +#: neutron/plugins/nuage/syncmanager.py:46 msgid "Starting the sync between Neutron and VSD" msgstr "" -#: neutron/plugins/nuage/syncmanager.py:60 +#: neutron/plugins/nuage/syncmanager.py:59 msgid "Sync between Neutron and VSD completed successfully" msgstr "" diff --git a/neutron/locale/neutron.pot b/neutron/locale/neutron.pot index 220aa82616c..57df3729cab 100644 --- a/neutron/locale/neutron.pot +++ b/neutron/locale/neutron.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: neutron 2014.2.dev123.g62ae82d\n" +"Project-Id-Version: neutron 2014.2.dev190.ga76af4a\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-15 06:10+0000\n" +"POT-Creation-Date: 2014-09-22 06:06+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -409,7 +409,7 @@ msgid "Number of threads to use during sync process." msgstr "" #: neutron/agent/dhcp_agent.py:65 neutron/agent/l3_agent.py:496 -#: neutron/agent/metadata/namespace_proxy.py:165 +#: neutron/agent/metadata/namespace_proxy.py:163 msgid "Location of Metadata Proxy UNIX domain socket" msgstr "" @@ -489,24 +489,24 @@ msgid "" msgstr "" #: neutron/agent/dhcp_agent.py:582 neutron/agent/l3_agent.py:1984 -#: neutron/agent/metadata/agent.py:363 -#: neutron/plugins/cisco/cfg_agent/cfg_agent.py:328 -#: neutron/services/metering/agents/metering_agent.py:272 +#: neutron/agent/metadata/agent.py:361 +#: neutron/plugins/cisco/cfg_agent/cfg_agent.py:326 +#: neutron/services/metering/agents/metering_agent.py:270 msgid "" "Neutron server does not support state report. State report for this agent" " will be disabled." msgstr "" #: neutron/agent/dhcp_agent.py:588 neutron/agent/l3_agent.py:1989 -#: neutron/agent/metadata/agent.py:368 -#: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:110 -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:795 +#: neutron/agent/metadata/agent.py:366 +#: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:108 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:794 #: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:216 -#: neutron/plugins/nec/agent/nec_neutron_agent.py:182 -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:261 +#: neutron/plugins/nec/agent/nec_neutron_agent.py:180 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:264 #: neutron/plugins/sriovnicagent/sriov_nic_agent.py:131 -#: neutron/services/loadbalancer/agent/agent_manager.py:121 -#: neutron/services/metering/agents/metering_agent.py:277 +#: neutron/services/loadbalancer/agent/agent_manager.py:119 +#: neutron/services/metering/agents/metering_agent.py:275 msgid "Failed reporting state!" msgstr "" @@ -516,7 +516,7 @@ msgid "Agent updated: %(payload)s" msgstr "" #: neutron/agent/dhcp_agent.py:597 neutron/agent/l3_agent.py:1994 -#: neutron/services/metering/agents/metering_agent.py:280 +#: neutron/services/metering/agents/metering_agent.py:278 #, python-format msgid "agent_updated by server side %s!" msgstr "" @@ -588,7 +588,7 @@ msgid "" msgstr "" #: neutron/agent/l3_agent.py:564 neutron/agent/linux/dhcp.py:785 -#: neutron/services/metering/drivers/iptables/iptables_driver.py:92 +#: neutron/services/metering/drivers/iptables/iptables_driver.py:90 msgid "An interface driver must be specified" msgstr "" @@ -622,15 +622,15 @@ msgid "Info for router %s were not found. Skipping router removal" msgstr "" #: neutron/agent/l3_agent.py:830 -#: neutron/plugins/cisco/cfg_agent/service_helpers/routing_svc_helper.py:635 -#: neutron/services/firewall/agents/varmour/varmour_router.py:103 +#: neutron/plugins/cisco/cfg_agent/service_helpers/routing_svc_helper.py:633 +#: neutron/services/firewall/agents/varmour/varmour_router.py:100 #, python-format msgid "Router port %s has no IP address" msgstr "" #: neutron/agent/l3_agent.py:832 neutron/db/l3_db.py:954 -#: neutron/plugins/cisco/cfg_agent/service_helpers/routing_svc_helper.py:637 -#: neutron/services/firewall/agents/varmour/varmour_router.py:106 +#: neutron/plugins/cisco/cfg_agent/service_helpers/routing_svc_helper.py:635 +#: neutron/services/firewall/agents/varmour/varmour_router.py:103 #, python-format msgid "Ignoring multiple IPs on router port %s" msgstr "" @@ -724,7 +724,7 @@ msgid "Failed synchronizing routers due to RPC error" msgstr "" #: neutron/agent/l3_agent.py:1873 -#: neutron/services/metering/agents/metering_agent.py:61 +#: neutron/services/metering/agents/metering_agent.py:59 msgid "Failed synchronizing routers" msgstr "" @@ -792,8 +792,8 @@ msgid "" msgstr "" #: neutron/agent/ovs_cleanup_util.py:73 -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:665 -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:299 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:664 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:302 #, python-format msgid "Delete %s" msgstr "" @@ -994,20 +994,20 @@ msgstr "" msgid "An error occurred while communicating with async process [%s]." msgstr "" -#: neutron/agent/linux/daemon.py:37 +#: neutron/agent/linux/daemon.py:35 #, python-format msgid "Error while handling pidfile: %s" msgstr "" -#: neutron/agent/linux/daemon.py:45 +#: neutron/agent/linux/daemon.py:43 msgid "Unable to unlock pid file" msgstr "" -#: neutron/agent/linux/daemon.py:94 +#: neutron/agent/linux/daemon.py:92 msgid "Fork failed" msgstr "" -#: neutron/agent/linux/daemon.py:136 +#: neutron/agent/linux/daemon.py:134 #, python-format msgid "Pidfile %s already exist. Daemon already running?" msgstr "" @@ -1048,17 +1048,17 @@ msgstr "" msgid "No DHCP started for %s" msgstr "" -#: neutron/agent/linux/dhcp.py:256 neutron/agent/linux/utils.py:152 +#: neutron/agent/linux/dhcp.py:256 neutron/agent/linux/utils.py:150 #, python-format msgid "Error while reading %s" msgstr "" -#: neutron/agent/linux/dhcp.py:263 neutron/agent/linux/utils.py:159 +#: neutron/agent/linux/dhcp.py:263 neutron/agent/linux/utils.py:157 #, python-format msgid "Unable to convert value in %s" msgstr "" -#: neutron/agent/linux/dhcp.py:265 neutron/agent/linux/utils.py:161 +#: neutron/agent/linux/dhcp.py:265 neutron/agent/linux/utils.py:159 #, python-format msgid "Unable to access %s" msgstr "" @@ -1139,19 +1139,19 @@ msgstr "" msgid "Reusing existing device: %s." msgstr "" -#: neutron/agent/linux/external_process.py:33 +#: neutron/agent/linux/external_process.py:32 msgid "Location to store child pid files" msgstr "" -#: neutron/agent/linux/external_process.py:35 +#: neutron/agent/linux/external_process.py:34 msgid "Periodically check child processes" msgstr "" -#: neutron/agent/linux/external_process.py:38 +#: neutron/agent/linux/external_process.py:37 msgid "Action to be executed when a child process dies" msgstr "" -#: neutron/agent/linux/external_process.py:40 +#: neutron/agent/linux/external_process.py:39 msgid "Interval between checks of child process liveness (seconds)" msgstr "" @@ -1168,57 +1168,65 @@ msgid "MTU setting for device." msgstr "" #: neutron/agent/linux/interface.py:44 -msgid "Mapping between flavor and LinuxInterfaceDriver" +msgid "" +"Mapping between flavor and LinuxInterfaceDriver. It is specific to " +"MetaInterfaceDriver used with admin_user, admin_password, " +"admin_tenant_name, admin_url, auth_strategy, auth_region and " +"endpoint_type." msgstr "" -#: neutron/agent/linux/interface.py:46 +#: neutron/agent/linux/interface.py:50 msgid "Admin username" msgstr "" -#: neutron/agent/linux/interface.py:48 neutron/agent/metadata/agent.py:54 +#: neutron/agent/linux/interface.py:52 neutron/agent/metadata/agent.py:52 #: neutron/plugins/metaplugin/common/config.py:65 msgid "Admin password" msgstr "" -#: neutron/agent/linux/interface.py:51 neutron/agent/metadata/agent.py:57 +#: neutron/agent/linux/interface.py:55 neutron/agent/metadata/agent.py:55 #: neutron/plugins/metaplugin/common/config.py:68 msgid "Admin tenant name" msgstr "" -#: neutron/agent/linux/interface.py:53 neutron/agent/metadata/agent.py:59 +#: neutron/agent/linux/interface.py:57 neutron/agent/metadata/agent.py:57 #: neutron/plugins/metaplugin/common/config.py:70 msgid "Authentication URL" msgstr "" -#: neutron/agent/linux/interface.py:55 neutron/agent/metadata/agent.py:61 +#: neutron/agent/linux/interface.py:59 neutron/agent/metadata/agent.py:59 #: neutron/common/config.py:47 neutron/plugins/metaplugin/common/config.py:72 msgid "The type of authentication to use" msgstr "" -#: neutron/agent/linux/interface.py:57 neutron/agent/metadata/agent.py:63 +#: neutron/agent/linux/interface.py:61 neutron/agent/metadata/agent.py:61 #: neutron/plugins/metaplugin/common/config.py:74 msgid "Authentication region" msgstr "" -#: neutron/agent/linux/interface.py:214 neutron/agent/linux/interface.py:268 -#: neutron/agent/linux/interface.py:330 neutron/agent/linux/interface.py:379 +#: neutron/agent/linux/interface.py:64 neutron/agent/metadata/agent.py:71 +msgid "Network service endpoint type to pull from the keystone catalog" +msgstr "" + +#: neutron/agent/linux/interface.py:222 neutron/agent/linux/interface.py:276 +#: neutron/agent/linux/interface.py:338 neutron/agent/linux/interface.py:387 #, python-format msgid "Device %s already exists" msgstr "" -#: neutron/agent/linux/interface.py:232 neutron/agent/linux/interface.py:279 -#: neutron/agent/linux/interface.py:342 neutron/agent/linux/interface.py:386 +#: neutron/agent/linux/interface.py:240 neutron/agent/linux/interface.py:287 +#: neutron/agent/linux/interface.py:350 neutron/agent/linux/interface.py:394 #, python-format msgid "Unplugged interface '%s'" msgstr "" -#: neutron/agent/linux/interface.py:234 neutron/agent/linux/interface.py:278 -#: neutron/agent/linux/interface.py:344 neutron/agent/linux/interface.py:388 +#: neutron/agent/linux/interface.py:242 neutron/agent/linux/interface.py:286 +#: neutron/agent/linux/interface.py:352 neutron/agent/linux/interface.py:396 #, python-format msgid "Failed unplugging interface '%s'" msgstr "" -#: neutron/agent/linux/interface.py:446 +#: neutron/agent/linux/interface.py:455 #, python-format msgid "Driver location: %s" msgstr "" @@ -1252,36 +1260,36 @@ msgstr "" msgid "Attempted to remove port filter which is not filtered %r" msgstr "" -#: neutron/agent/linux/iptables_manager.py:157 +#: neutron/agent/linux/iptables_manager.py:156 #, python-format msgid "Attempted to remove chain %s which does not exist" msgstr "" -#: neutron/agent/linux/iptables_manager.py:199 +#: neutron/agent/linux/iptables_manager.py:198 #, python-format msgid "Unknown chain: %r" msgstr "" -#: neutron/agent/linux/iptables_manager.py:234 +#: neutron/agent/linux/iptables_manager.py:233 #, python-format msgid "" "Tried to remove rule that was not there: %(chain)r %(rule)r %(wrap)r " "%(top)r" msgstr "" -#: neutron/agent/linux/iptables_manager.py:389 +#: neutron/agent/linux/iptables_manager.py:388 #, python-format msgid "Got semaphore / lock \"%s\"" msgstr "" -#: neutron/agent/linux/iptables_manager.py:392 +#: neutron/agent/linux/iptables_manager.py:391 #, python-format msgid "Semaphore / lock released \"%s\"" msgstr "" -#: neutron/agent/linux/iptables_manager.py:443 -#: neutron/tests/unit/test_iptables_manager.py:753 -#: neutron/tests/unit/test_iptables_manager.py:787 +#: neutron/agent/linux/iptables_manager.py:442 +#: neutron/tests/unit/test_iptables_manager.py:751 +#: neutron/tests/unit/test_iptables_manager.py:785 #, python-format msgid "" "IPTablesManager.apply failed to apply the following set of iptables " @@ -1289,16 +1297,16 @@ msgid "" "%s" msgstr "" -#: neutron/agent/linux/iptables_manager.py:446 +#: neutron/agent/linux/iptables_manager.py:445 msgid "IPTablesManager.apply completed with success" msgstr "" -#: neutron/agent/linux/iptables_manager.py:456 +#: neutron/agent/linux/iptables_manager.py:455 #, python-format msgid "Unable to find table %s" msgstr "" -#: neutron/agent/linux/iptables_manager.py:660 +#: neutron/agent/linux/iptables_manager.py:659 #, python-format msgid "Attempted to get traffic counters of chain %s which does not exist" msgstr "" @@ -1328,7 +1336,7 @@ msgstr "" #: neutron/agent/linux/ovs_lib.py:72 neutron/agent/linux/ovs_lib.py:170 #: neutron/agent/linux/ovs_lib.py:290 -#: neutron/plugins/bigswitch/agent/restproxy_agent.py:55 +#: neutron/plugins/bigswitch/agent/restproxy_agent.py:54 #, python-format msgid "Unable to execute %(cmd)s. Exception: %(exception)s" msgstr "" @@ -1411,12 +1419,12 @@ msgstr "" msgid "Location to store IPv6 RA config files" msgstr "" -#: neutron/agent/linux/utils.py:48 +#: neutron/agent/linux/utils.py:46 #, python-format msgid "Running command: %s" msgstr "" -#: neutron/agent/linux/utils.py:71 +#: neutron/agent/linux/utils.py:69 #, python-format msgid "" "\n" @@ -1426,125 +1434,121 @@ msgid "" "Stderr: %(stderr)r" msgstr "" -#: neutron/agent/metadata/agent.py:52 +#: neutron/agent/metadata/agent.py:50 #: neutron/plugins/metaplugin/common/config.py:63 msgid "Admin user" msgstr "" -#: neutron/agent/metadata/agent.py:66 +#: neutron/agent/metadata/agent.py:64 msgid "Turn off verification of the certificate for ssl" msgstr "" -#: neutron/agent/metadata/agent.py:69 +#: neutron/agent/metadata/agent.py:67 msgid "Certificate Authority public key (CA cert) file for ssl" msgstr "" -#: neutron/agent/metadata/agent.py:73 -msgid "Network service endpoint type to pull from the keystone catalog" -msgstr "" - -#: neutron/agent/metadata/agent.py:76 +#: neutron/agent/metadata/agent.py:74 msgid "IP address used by Nova metadata server." msgstr "" -#: neutron/agent/metadata/agent.py:79 +#: neutron/agent/metadata/agent.py:77 msgid "TCP Port used by Nova metadata server." msgstr "" -#: neutron/agent/metadata/agent.py:82 +#: neutron/agent/metadata/agent.py:80 #: neutron/plugins/vmware/dhcp_meta/nsx.py:63 msgid "Shared secret to sign instance-id request" msgstr "" -#: neutron/agent/metadata/agent.py:87 +#: neutron/agent/metadata/agent.py:85 msgid "Protocol to access nova metadata, http or https" msgstr "" -#: neutron/agent/metadata/agent.py:89 +#: neutron/agent/metadata/agent.py:87 msgid "Allow to perform insecure SSL (https) requests to nova metadata" msgstr "" -#: neutron/agent/metadata/agent.py:93 +#: neutron/agent/metadata/agent.py:91 msgid "Client certificate for nova metadata api server." msgstr "" -#: neutron/agent/metadata/agent.py:96 +#: neutron/agent/metadata/agent.py:94 msgid "Private key of client certificate." msgstr "" -#: neutron/agent/metadata/agent.py:126 -#: neutron/agent/metadata/namespace_proxy.py:68 +#: neutron/agent/metadata/agent.py:124 +#: neutron/agent/metadata/namespace_proxy.py:66 #, python-format msgid "Request: %s" msgstr "" -#: neutron/agent/metadata/agent.py:135 -#: neutron/agent/metadata/namespace_proxy.py:76 +#: neutron/agent/metadata/agent.py:133 +#: neutron/agent/metadata/namespace_proxy.py:74 msgid "Unexpected error." msgstr "" -#: neutron/agent/metadata/agent.py:136 -#: neutron/agent/metadata/namespace_proxy.py:77 +#: neutron/agent/metadata/agent.py:134 +#: neutron/agent/metadata/namespace_proxy.py:75 msgid "An unknown error has occurred. Please try your request again." msgstr "" -#: neutron/agent/metadata/agent.py:182 +#: neutron/agent/metadata/agent.py:180 msgid "" "Either one of parameter network_id or router_id must be passed to " "_get_ports method." msgstr "" -#: neutron/agent/metadata/agent.py:231 +#: neutron/agent/metadata/agent.py:229 msgid "" "The remote metadata server responded with Forbidden. This response " "usually occurs when shared secrets do not match." msgstr "" -#: neutron/agent/metadata/agent.py:242 -#: neutron/agent/metadata/namespace_proxy.py:120 +#: neutron/agent/metadata/agent.py:240 +#: neutron/agent/metadata/namespace_proxy.py:118 msgid "Remote metadata server experienced an internal server error." msgstr "" -#: neutron/agent/metadata/agent.py:248 -#: neutron/agent/metadata/namespace_proxy.py:126 +#: neutron/agent/metadata/agent.py:246 +#: neutron/agent/metadata/namespace_proxy.py:124 #, python-format msgid "Unexpected response code: %s" msgstr "" -#: neutron/agent/metadata/agent.py:308 +#: neutron/agent/metadata/agent.py:306 msgid "Location for Metadata Proxy UNIX domain socket" msgstr "" -#: neutron/agent/metadata/agent.py:311 +#: neutron/agent/metadata/agent.py:309 msgid "Number of separate worker processes for metadata server" msgstr "" -#: neutron/agent/metadata/agent.py:315 +#: neutron/agent/metadata/agent.py:313 msgid "Number of backlog requests to configure the metadata server socket with" msgstr "" -#: neutron/agent/metadata/namespace_proxy.py:63 +#: neutron/agent/metadata/namespace_proxy.py:61 msgid "network_id and router_id are None. One must be provided." msgstr "" -#: neutron/agent/metadata/namespace_proxy.py:149 +#: neutron/agent/metadata/namespace_proxy.py:147 msgid "Network that will have instance metadata proxied." msgstr "" -#: neutron/agent/metadata/namespace_proxy.py:152 +#: neutron/agent/metadata/namespace_proxy.py:150 msgid "Router that will have connected instances' metadata proxied." msgstr "" -#: neutron/agent/metadata/namespace_proxy.py:155 +#: neutron/agent/metadata/namespace_proxy.py:153 #: neutron/tests/functional/agent/linux/simple_daemon.py:42 msgid "Location of pid file of this process." msgstr "" -#: neutron/agent/metadata/namespace_proxy.py:158 +#: neutron/agent/metadata/namespace_proxy.py:156 msgid "Run as daemon." msgstr "" -#: neutron/agent/metadata/namespace_proxy.py:161 +#: neutron/agent/metadata/namespace_proxy.py:159 msgid "TCP Port to listen for metadata server requests." msgstr "" @@ -1576,7 +1580,7 @@ msgid "" " and '%(desc)s'" msgstr "" -#: neutron/api/api_common.py:315 neutron/api/v2/base.py:597 +#: neutron/api/api_common.py:315 neutron/api/v2/base.py:595 #, python-format msgid "Unable to find '%s' in request body" msgstr "" @@ -1724,36 +1728,36 @@ msgid "" "available. Payload: %(payload)s" msgstr "" -#: neutron/api/rpc/agentnotifiers/l3_rpc_agent_api.py:38 +#: neutron/api/rpc/agentnotifiers/l3_rpc_agent_api.py:40 #, python-format msgid "Nofity agent at %(host)s the message %(method)s" msgstr "" -#: neutron/api/rpc/agentnotifiers/l3_rpc_agent_api.py:57 +#: neutron/api/rpc/agentnotifiers/l3_rpc_agent_api.py:62 #, python-format msgid "Notify agent at %(topic)s.%(host)s the message %(method)s" msgstr "" -#: neutron/api/rpc/agentnotifiers/l3_rpc_agent_api.py:99 +#: neutron/api/rpc/agentnotifiers/l3_rpc_agent_api.py:105 #, python-format msgid "" "No plugin for L3 routing registered. Cannot notify agents with the " "message %s" msgstr "" -#: neutron/api/rpc/agentnotifiers/l3_rpc_agent_api.py:117 +#: neutron/api/rpc/agentnotifiers/l3_rpc_agent_api.py:123 #, python-format msgid "" "Fanout notify agent at %(topic)s the message %(method)s on router " "%(router_id)s" msgstr "" -#: neutron/api/rpc/agentnotifiers/metering_rpc_agent_api.py:49 +#: neutron/api/rpc/agentnotifiers/metering_rpc_agent_api.py:47 #, python-format msgid "Notify metering agent at %(topic)s.%(host)s the message %(method)s" msgstr "" -#: neutron/api/rpc/agentnotifiers/metering_rpc_agent_api.py:64 +#: neutron/api/rpc/agentnotifiers/metering_rpc_agent_api.py:62 #, python-format msgid "" "Fanout notify metering agent at %(topic)s the message %(method)s on " @@ -2003,7 +2007,7 @@ msgid "'%s' is not a valid input" msgstr "" #: neutron/api/v2/attributes.py:355 -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:534 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:529 #, python-format msgid "'%s' is not a valid UUID" msgstr "" @@ -2029,7 +2033,7 @@ msgid "'%s' cannot be converted to boolean" msgstr "" #: neutron/api/v2/attributes.py:491 -#: neutron/plugins/nec/extensions/packetfilter.py:75 +#: neutron/plugins/nec/extensions/packetfilter.py:72 #, python-format msgid "'%s' is not a integer" msgstr "" @@ -2076,41 +2080,41 @@ msgstr "" msgid "Request body: %(body)s" msgstr "" -#: neutron/api/v2/base.py:588 +#: neutron/api/v2/base.py:581 msgid "Bulk operation not supported" msgstr "" -#: neutron/api/v2/base.py:592 +#: neutron/api/v2/base.py:584 msgid "Resources required" msgstr "" -#: neutron/api/v2/base.py:608 +#: neutron/api/v2/base.py:606 #, python-format msgid "Failed to parse request. Required attribute '%s' not specified" msgstr "" -#: neutron/api/v2/base.py:615 +#: neutron/api/v2/base.py:613 #, python-format msgid "Attribute '%s' not allowed in POST" msgstr "" -#: neutron/api/v2/base.py:620 +#: neutron/api/v2/base.py:618 #, python-format msgid "Cannot update read-only attribute %s" msgstr "" -#: neutron/api/v2/base.py:638 +#: neutron/api/v2/base.py:636 #, python-format msgid "Invalid input for %(attr)s. Reason: %(reason)s." msgstr "" -#: neutron/api/v2/base.py:647 neutron/extensions/allowedaddresspairs.py:75 +#: neutron/api/v2/base.py:645 neutron/extensions/allowedaddresspairs.py:75 #: neutron/extensions/multiprovidernet.py:45 #, python-format msgid "Unrecognized attribute(s) '%s'" msgstr "" -#: neutron/api/v2/base.py:666 +#: neutron/api/v2/base.py:664 #, python-format msgid "Tenant %(tenant_id)s not allowed to create %(resource)s on this network" msgstr "" @@ -2127,7 +2131,7 @@ msgid "%s failed" msgstr "" #: neutron/api/v2/resource.py:130 -#: neutron/tests/unit/test_api_v2_resource.py:299 +#: neutron/tests/unit/test_api_v2_resource.py:296 msgid "Request Failed: internal server error while processing your request." msgstr "" @@ -2195,7 +2199,7 @@ msgstr "" msgid "The core plugin Neutron will use" msgstr "" -#: neutron/common/config.py:51 neutron/db/migration/cli.py:35 +#: neutron/common/config.py:51 neutron/db/migration/cli.py:33 msgid "The service plugins Neutron will use" msgstr "" @@ -2626,26 +2630,31 @@ msgstr "" #: neutron/common/exceptions.py:309 #, python-format +msgid "Invalid network Tunnel range: '%(tunnel_range)s' - %(error)s" +msgstr "" + +#: neutron/common/exceptions.py:320 +#, python-format msgid "Invalid network VXLAN port range: '%(vxlan_range)s'" msgstr "" -#: neutron/common/exceptions.py:313 +#: neutron/common/exceptions.py:324 msgid "VXLAN Network unsupported." msgstr "" -#: neutron/common/exceptions.py:317 +#: neutron/common/exceptions.py:328 #, python-format msgid "Found duplicate extension: %(alias)s" msgstr "" -#: neutron/common/exceptions.py:321 +#: neutron/common/exceptions.py:332 #, python-format msgid "" "The following device_id %(device_id)s is not owned by your tenant or " "matches another tenants router." msgstr "" -#: neutron/common/exceptions.py:326 +#: neutron/common/exceptions.py:337 #, python-format msgid "Invalid CIDR %(input)s given as IP prefix" msgstr "" @@ -2768,117 +2777,103 @@ msgstr "" msgid "Delete allocated IP %(ip_address)s (%(network_id)s/%(subnet_id)s)" msgstr "" -#: neutron/db/db_base_plugin_v2.py:224 -#, python-format -msgid "All IPs from subnet %(subnet_id)s (%(cidr)s) allocated" -msgstr "" - -#: neutron/db/db_base_plugin_v2.py:229 -#, python-format -msgid "Allocated IP - %(ip_address)s from %(first_ip)s to %(last_ip)s" -msgstr "" - -#: neutron/db/db_base_plugin_v2.py:236 -msgid "No more free IP's in slice. Deleting allocation pool." -msgstr "" - -#: neutron/db/db_base_plugin_v2.py:255 +#: neutron/db/db_base_plugin_v2.py:266 #, python-format msgid "Rebuilding availability ranges for subnet %s" msgstr "" -#: neutron/db/db_base_plugin_v2.py:398 +#: neutron/db/db_base_plugin_v2.py:411 msgid "IP allocation requires subnet_id or ip_address" msgstr "" -#: neutron/db/db_base_plugin_v2.py:410 +#: neutron/db/db_base_plugin_v2.py:423 #, python-format msgid "IP address %s is not a valid IP for the defined networks subnets" msgstr "" -#: neutron/db/db_base_plugin_v2.py:416 +#: neutron/db/db_base_plugin_v2.py:429 #, python-format msgid "" "Failed to create port on network %(network_id)s, because fixed_ips " "included invalid subnet %(subnet_id)s" msgstr "" -#: neutron/db/db_base_plugin_v2.py:436 +#: neutron/db/db_base_plugin_v2.py:449 #, python-format msgid "IP address %s is not a valid IP for the defined subnet" msgstr "" -#: neutron/db/db_base_plugin_v2.py:445 neutron/db/db_base_plugin_v2.py:478 +#: neutron/db/db_base_plugin_v2.py:458 neutron/db/db_base_plugin_v2.py:491 #: neutron/plugins/opencontrail/contrail_plugin.py:388 msgid "Exceeded maximim amount of fixed ips per port" msgstr "" -#: neutron/db/db_base_plugin_v2.py:493 +#: neutron/db/db_base_plugin_v2.py:506 #, python-format msgid "Port update. Hold %s" msgstr "" -#: neutron/db/db_base_plugin_v2.py:500 +#: neutron/db/db_base_plugin_v2.py:513 #, python-format msgid "Port update. Adding %s" msgstr "" -#: neutron/db/db_base_plugin_v2.py:574 +#: neutron/db/db_base_plugin_v2.py:587 msgid "0 is not allowed as CIDR prefix length" msgstr "" -#: neutron/db/db_base_plugin_v2.py:584 +#: neutron/db/db_base_plugin_v2.py:597 #, python-format msgid "" "Requested subnet with cidr: %(cidr)s for network: %(network_id)s overlaps" " with another subnet" msgstr "" -#: neutron/db/db_base_plugin_v2.py:589 +#: neutron/db/db_base_plugin_v2.py:602 #, python-format msgid "" "Validation for CIDR: %(new_cidr)s failed - overlaps with subnet " "%(subnet_id)s (CIDR: %(cidr)s)" msgstr "" -#: neutron/db/db_base_plugin_v2.py:609 +#: neutron/db/db_base_plugin_v2.py:622 msgid "Performing IP validity checks on allocation pools" msgstr "" -#: neutron/db/db_base_plugin_v2.py:616 +#: neutron/db/db_base_plugin_v2.py:629 #, python-format msgid "Found invalid IP address in pool: %(start)s - %(end)s:" msgstr "" -#: neutron/db/db_base_plugin_v2.py:623 +#: neutron/db/db_base_plugin_v2.py:636 msgid "Specified IP addresses do not match the subnet IP version" msgstr "" -#: neutron/db/db_base_plugin_v2.py:627 +#: neutron/db/db_base_plugin_v2.py:640 #, python-format msgid "Start IP (%(start)s) is greater than end IP (%(end)s)" msgstr "" -#: neutron/db/db_base_plugin_v2.py:632 +#: neutron/db/db_base_plugin_v2.py:645 #, python-format msgid "Found pool larger than subnet CIDR:%(start)s - %(end)s" msgstr "" -#: neutron/db/db_base_plugin_v2.py:645 +#: neutron/db/db_base_plugin_v2.py:658 msgid "Checking for overlaps among allocation pools and gateway ip" msgstr "" -#: neutron/db/db_base_plugin_v2.py:656 +#: neutron/db/db_base_plugin_v2.py:669 #, python-format msgid "Found overlapping ranges: %(l_range)s and %(r_range)s" msgstr "" -#: neutron/db/db_base_plugin_v2.py:669 neutron/db/db_base_plugin_v2.py:673 +#: neutron/db/db_base_plugin_v2.py:682 neutron/db/db_base_plugin_v2.py:686 #, python-format msgid "Invalid route: %s" msgstr "" -#: neutron/db/db_base_plugin_v2.py:751 +#: neutron/db/db_base_plugin_v2.py:764 #, python-format msgid "" "ipv6_ra_mode set to '%(ra_mode)s' with ipv6_address_mode set to " @@ -2886,49 +2881,49 @@ msgid "" "the same value" msgstr "" -#: neutron/db/db_base_plugin_v2.py:759 +#: neutron/db/db_base_plugin_v2.py:772 msgid "" "ipv6_ra_mode or ipv6_address_mode cannot be set when enable_dhcp is set " "to False." msgstr "" -#: neutron/db/db_base_plugin_v2.py:765 +#: neutron/db/db_base_plugin_v2.py:778 msgid "Cannot disable enable_dhcp with ipv6 attributes set" msgstr "" -#: neutron/db/db_base_plugin_v2.py:857 +#: neutron/db/db_base_plugin_v2.py:870 #, python-format msgid "An exception occurred while creating the %(resource)s:%(item)s" msgstr "" -#: neutron/db/db_base_plugin_v2.py:954 +#: neutron/db/db_base_plugin_v2.py:967 #, python-format msgid "%(name)s '%(addr)s' does not match the ip_version '%(ip_version)s'" msgstr "" -#: neutron/db/db_base_plugin_v2.py:978 +#: neutron/db/db_base_plugin_v2.py:991 msgid "Gateway is not valid on subnet" msgstr "" -#: neutron/db/db_base_plugin_v2.py:998 neutron/db/db_base_plugin_v2.py:1012 +#: neutron/db/db_base_plugin_v2.py:1011 neutron/db/db_base_plugin_v2.py:1025 #: neutron/plugins/opencontrail/contrail_plugin.py:312 msgid "new subnet" msgstr "" -#: neutron/db/db_base_plugin_v2.py:1005 +#: neutron/db/db_base_plugin_v2.py:1018 #, python-format msgid "Error parsing dns address %s" msgstr "" -#: neutron/db/db_base_plugin_v2.py:1021 +#: neutron/db/db_base_plugin_v2.py:1034 msgid "ipv6_ra_mode is not valid when ip_version is 4" msgstr "" -#: neutron/db/db_base_plugin_v2.py:1025 +#: neutron/db/db_base_plugin_v2.py:1038 msgid "ipv6_address_mode is not valid when ip_version is 4" msgstr "" -#: neutron/db/db_base_plugin_v2.py:1395 +#: neutron/db/db_base_plugin_v2.py:1406 #, python-format msgid "" "Ignoring PortNotFound when deleting port '%s'. The port has already been " @@ -3012,7 +3007,7 @@ msgid "" "of subnet %(sub_id)s" msgstr "" -#: neutron/db/l3_db.py:407 neutron/db/l3_db.py:534 neutron/db/l3_dvr_db.py:210 +#: neutron/db/l3_db.py:407 neutron/db/l3_db.py:534 neutron/db/l3_dvr_db.py:230 #: neutron/plugins/bigswitch/l3_router_plugin.py:170 #: neutron/plugins/bigswitch/l3_router_plugin.py:179 #: neutron/plugins/opencontrail/contrail_plugin.py:499 @@ -3031,7 +3026,7 @@ msgstr "" msgid "Subnet for router interface must have a gateway IP" msgstr "" -#: neutron/db/l3_db.py:580 neutron/plugins/nec/nec_router.py:197 +#: neutron/db/l3_db.py:580 neutron/plugins/nec/nec_router.py:195 #, python-format msgid "Cannot add floating IP to port on subnet %s which has no gateway_ip" msgstr "" @@ -3067,7 +3062,7 @@ msgid "" "assigning a floating IP" msgstr "" -#: neutron/db/l3_db.py:673 neutron/plugins/vmware/plugins/base.py:1804 +#: neutron/db/l3_db.py:673 neutron/plugins/vmware/plugins/base.py:1814 msgid "fixed_ip_address cannot be specified without a port_id" msgstr "" @@ -3099,25 +3094,25 @@ msgstr "" msgid "Centralizing distributed router %s is not supported" msgstr "" -#: neutron/db/l3_dvr_db.py:404 +#: neutron/db/l3_dvr_db.py:424 #, python-format msgid "Agent Gateway port does not exist, so create one: %s" msgstr "" -#: neutron/db/l3_dvr_db.py:419 +#: neutron/db/l3_dvr_db.py:439 msgid "Unable to create the Agent Gateway Port" msgstr "" -#: neutron/db/l3_dvr_db.py:445 +#: neutron/db/l3_dvr_db.py:465 msgid "Unable to create the SNAT Interface Port" msgstr "" -#: neutron/db/l3_dvr_db.py:469 +#: neutron/db/l3_dvr_db.py:489 #, python-format msgid "SNAT interface port list does not exist, so create one: %s" msgstr "" -#: neutron/db/l3_dvrscheduler_db.py:307 +#: neutron/db/l3_dvrscheduler_db.py:296 msgid "No active L3 agents found for SNAT" msgstr "" @@ -3137,17 +3132,17 @@ msgstr "" msgid "Subnet used for the l3 HA admin network." msgstr "" -#: neutron/db/routedserviceinsertion_db.py:36 +#: neutron/db/routedserviceinsertion_db.py:34 #, python-format msgid "Resource type '%(resource_type)s' is longer than %(maxlen)d characters" msgstr "" -#: neutron/db/securitygroups_rpc_base.py:58 +#: neutron/db/securitygroups_rpc_base.py:56 #, python-format msgid "%s must implement get_port_from_device." msgstr "" -#: neutron/db/securitygroups_rpc_base.py:338 +#: neutron/db/securitygroups_rpc_base.py:343 #, python-format msgid "No valid gateway port on subnet %s is found for IPv6 RA" msgstr "" @@ -3164,97 +3159,97 @@ msgid "" "sort '%(resource)s'" msgstr "" -#: neutron/db/firewall/firewall_db.py:241 +#: neutron/db/firewall/firewall_db.py:258 #: neutron/plugins/vmware/plugins/service.py:907 -#: neutron/services/firewall/fwaas_plugin.py:218 +#: neutron/services/firewall/fwaas_plugin.py:216 msgid "create_firewall() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:262 +#: neutron/db/firewall/firewall_db.py:279 #: neutron/plugins/vmware/plugins/service.py:941 -#: neutron/services/firewall/fwaas_plugin.py:232 +#: neutron/services/firewall/fwaas_plugin.py:230 msgid "update_firewall() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:271 +#: neutron/db/firewall/firewall_db.py:288 #: neutron/plugins/vmware/plugins/service.py:967 -#: neutron/services/firewall/fwaas_plugin.py:247 +#: neutron/services/firewall/fwaas_plugin.py:245 msgid "delete_firewall() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:280 +#: neutron/db/firewall/firewall_db.py:297 msgid "get_firewall() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:285 +#: neutron/db/firewall/firewall_db.py:302 msgid "get_firewalls() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:291 +#: neutron/db/firewall/firewall_db.py:308 msgid "get_firewalls_count() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:296 +#: neutron/db/firewall/firewall_db.py:313 msgid "create_firewall_policy() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:312 +#: neutron/db/firewall/firewall_db.py:328 #: neutron/plugins/vmware/plugins/service.py:1029 -#: neutron/services/firewall/fwaas_plugin.py:256 +#: neutron/services/firewall/fwaas_plugin.py:254 msgid "update_firewall_policy() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:326 +#: neutron/db/firewall/firewall_db.py:344 msgid "delete_firewall_policy() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:338 +#: neutron/db/firewall/firewall_db.py:356 msgid "get_firewall_policy() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:343 +#: neutron/db/firewall/firewall_db.py:361 msgid "get_firewall_policies() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:349 +#: neutron/db/firewall/firewall_db.py:367 msgid "get_firewall_policies_count() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:354 +#: neutron/db/firewall/firewall_db.py:372 msgid "create_firewall_rule() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:386 +#: neutron/db/firewall/firewall_db.py:404 #: neutron/plugins/vmware/plugins/service.py:1003 -#: neutron/services/firewall/fwaas_plugin.py:264 +#: neutron/services/firewall/fwaas_plugin.py:262 msgid "update_firewall_rule() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:418 +#: neutron/db/firewall/firewall_db.py:436 msgid "delete_firewall_rule() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:426 +#: neutron/db/firewall/firewall_db.py:444 msgid "get_firewall_rule() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:431 +#: neutron/db/firewall/firewall_db.py:449 msgid "get_firewall_rules() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:437 +#: neutron/db/firewall/firewall_db.py:455 msgid "get_firewall_rules_count() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:446 +#: neutron/db/firewall/firewall_db.py:464 #: neutron/plugins/vmware/plugins/service.py:1056 -#: neutron/services/firewall/fwaas_plugin.py:274 +#: neutron/services/firewall/fwaas_plugin.py:272 msgid "insert_rule() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:490 +#: neutron/db/firewall/firewall_db.py:508 #: neutron/plugins/vmware/plugins/service.py:1085 -#: neutron/services/firewall/fwaas_plugin.py:282 +#: neutron/services/firewall/fwaas_plugin.py:280 msgid "remove_rule() called" msgstr "" @@ -3271,45 +3266,45 @@ msgstr "" msgid "'cookie_name' is not allowed for this type of session persistence" msgstr "" -#: neutron/db/metering/metering_rpc.py:46 +#: neutron/db/metering/metering_rpc.py:44 #, python-format msgid "Unable to find agent %s." msgstr "" -#: neutron/db/migration/__init__.py:44 +#: neutron/db/migration/__init__.py:38 #, python-format msgid "%s cannot be called while in offline mode" msgstr "" -#: neutron/db/migration/cli.py:32 +#: neutron/db/migration/cli.py:30 msgid "Neutron plugin provider module" msgstr "" -#: neutron/db/migration/cli.py:41 +#: neutron/db/migration/cli.py:39 msgid "Neutron quota driver class" msgstr "" -#: neutron/db/migration/cli.py:49 +#: neutron/db/migration/cli.py:47 msgid "URL to database" msgstr "" -#: neutron/db/migration/cli.py:52 +#: neutron/db/migration/cli.py:50 msgid "Database engine" msgstr "" -#: neutron/db/migration/cli.py:75 +#: neutron/db/migration/cli.py:73 msgid "You must provide a revision or relative delta" msgstr "" -#: neutron/db/migration/cli.py:105 neutron/db/migration/cli.py:118 +#: neutron/db/migration/cli.py:103 neutron/db/migration/cli.py:116 msgid "Timeline branches unable to generate timeline" msgstr "" -#: neutron/db/migration/cli.py:112 +#: neutron/db/migration/cli.py:110 msgid "HEAD file does not match migration timeline head" msgstr "" -#: neutron/db/migration/cli.py:158 +#: neutron/db/migration/cli.py:156 msgid "Available commands" msgstr "" @@ -3385,7 +3380,7 @@ msgstr "" msgid "Table %(old_t)r was renamed to %(new_t)r" msgstr "" -#: neutron/db/vpn/vpn_db.py:651 +#: neutron/db/vpn/vpn_db.py:649 #, python-format msgid "vpnservice %s in db is already deleted" msgstr "" @@ -3526,12 +3521,12 @@ msgstr "" msgid "Adds external network attribute to network resource." msgstr "" -#: neutron/extensions/extra_dhcp_opt.py:25 +#: neutron/extensions/extra_dhcp_opt.py:23 #, python-format msgid "ExtraDhcpOpt %(id)s could not be found" msgstr "" -#: neutron/extensions/extra_dhcp_opt.py:29 +#: neutron/extensions/extra_dhcp_opt.py:27 #, python-format msgid "Invalid data format for extra-dhcp-opt: %(data)s" msgstr "" @@ -3555,51 +3550,67 @@ msgid "" "exceeds the maximum %(quota)s." msgstr "" -#: neutron/extensions/firewall.py:37 +#: neutron/extensions/firewall.py:35 #, python-format msgid "Firewall %(firewall_id)s could not be found." msgstr "" -#: neutron/extensions/firewall.py:41 +#: neutron/extensions/firewall.py:39 #, python-format msgid "Firewall %(firewall_id)s is still active." msgstr "" -#: neutron/extensions/firewall.py:45 +#: neutron/extensions/firewall.py:43 #, python-format msgid "" "Operation cannot be performed since associated Firewall %(firewall_id)s " "is in %(pending_state)s." msgstr "" -#: neutron/extensions/firewall.py:50 +#: neutron/extensions/firewall.py:48 #, python-format msgid "Firewall Policy %(firewall_policy_id)s could not be found." msgstr "" -#: neutron/extensions/firewall.py:54 +#: neutron/extensions/firewall.py:52 #, python-format msgid "Firewall Policy %(firewall_policy_id)s is being used." msgstr "" -#: neutron/extensions/firewall.py:58 +#: neutron/extensions/firewall.py:62 +#, python-format +msgid "" +"Operation cannot be performed since Firewall Policy " +"%(firewall_policy_id)s is shared but Firewall Rule %(firewall_rule_id)s " +"is not shared" +msgstr "" + +#: neutron/extensions/firewall.py:74 +#, python-format +msgid "" +"Operation cannot be performed. Before sharing Firewall Policy " +"%(firewall_policy_id)s, share associated Firewall Rule " +"%(firewall_rule_id)s" +msgstr "" + +#: neutron/extensions/firewall.py:80 #, python-format msgid "Firewall Rule %(firewall_rule_id)s could not be found." msgstr "" -#: neutron/extensions/firewall.py:62 +#: neutron/extensions/firewall.py:84 #, python-format msgid "Firewall Rule %(firewall_rule_id)s is being used." msgstr "" -#: neutron/extensions/firewall.py:66 +#: neutron/extensions/firewall.py:88 #, python-format msgid "" "Firewall Rule %(firewall_rule_id)s is not associated with Firewall " "Policy %(firewall_policy_id)s." msgstr "" -#: neutron/extensions/firewall.py:71 +#: neutron/extensions/firewall.py:93 #, python-format msgid "" "Firewall Rule protocol %(protocol)s is not supported. Only protocol " @@ -3607,62 +3618,62 @@ msgid "" "supported." msgstr "" -#: neutron/extensions/firewall.py:77 +#: neutron/extensions/firewall.py:99 #, python-format msgid "" "Firewall rule action %(action)s is not supported. Only action values " "%(values)s are supported." msgstr "" -#: neutron/extensions/firewall.py:82 +#: neutron/extensions/firewall.py:104 #, python-format msgid "%(param)s are not allowed when protocol is set to ICMP." msgstr "" -#: neutron/extensions/firewall.py:87 +#: neutron/extensions/firewall.py:109 msgid "Source/destination port requires a protocol" msgstr "" -#: neutron/extensions/firewall.py:91 +#: neutron/extensions/firewall.py:113 #, python-format msgid "Invalid value for port %(port)s." msgstr "" -#: neutron/extensions/firewall.py:95 +#: neutron/extensions/firewall.py:117 msgid "Missing rule info argument for insert/remove rule operation." msgstr "" -#: neutron/extensions/firewall.py:105 +#: neutron/extensions/firewall.py:127 #, python-format msgid "%(driver)s: Internal driver error." msgstr "" -#: neutron/extensions/firewall.py:154 +#: neutron/extensions/firewall.py:176 #, python-format msgid "Port '%s' is not a valid number" msgstr "" -#: neutron/extensions/firewall.py:158 +#: neutron/extensions/firewall.py:180 #, python-format msgid "Invalid port '%s'" msgstr "" -#: neutron/extensions/firewall.py:172 +#: neutron/extensions/firewall.py:194 #, python-format msgid "%(msg_ip)s and %(msg_subnet)s" msgstr "" -#: neutron/extensions/firewall.py:293 +#: neutron/extensions/firewall.py:315 msgid "Number of firewalls allowed per tenant. A negative value means unlimited." msgstr "" -#: neutron/extensions/firewall.py:297 +#: neutron/extensions/firewall.py:319 msgid "" "Number of firewall policies allowed per tenant. A negative value means " "unlimited." msgstr "" -#: neutron/extensions/firewall.py:301 +#: neutron/extensions/firewall.py:323 msgid "" "Number of firewall rules allowed per tenant. A negative value means " "unlimited." @@ -3924,21 +3935,21 @@ msgid "" "unlimited." msgstr "" -#: neutron/extensions/metering.py:33 +#: neutron/extensions/metering.py:31 #, python-format msgid "Metering label %(label_id)s does not exist" msgstr "" -#: neutron/extensions/metering.py:37 +#: neutron/extensions/metering.py:35 msgid "Duplicate Metering Rule in POST." msgstr "" -#: neutron/extensions/metering.py:41 +#: neutron/extensions/metering.py:39 #, python-format msgid "Metering label rule %(rule_id)s does not exist" msgstr "" -#: neutron/extensions/metering.py:45 +#: neutron/extensions/metering.py:43 #, python-format msgid "" "Metering label rule with remote_ip_prefix %(remote_ip_prefix)s overlaps " @@ -3970,7 +3981,7 @@ msgid "Port does not have port security binding." msgstr "" #: neutron/extensions/providernet.py:54 -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:272 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:267 msgid "Plugin does not support updating provider attributes" msgstr "" @@ -4091,84 +4102,84 @@ msgid "" "unlimited." msgstr "" -#: neutron/extensions/servicetype.py:52 +#: neutron/extensions/servicetype.py:49 msgid "Neutron Service Type Management" msgstr "" -#: neutron/extensions/servicetype.py:60 +#: neutron/extensions/servicetype.py:57 msgid "API for retrieving service providers for Neutron advanced services" msgstr "" -#: neutron/extensions/vpnaas.py:31 +#: neutron/extensions/vpnaas.py:29 #, python-format msgid "VPNService %(vpnservice_id)s could not be found" msgstr "" -#: neutron/extensions/vpnaas.py:35 +#: neutron/extensions/vpnaas.py:33 #, python-format msgid "ipsec_site_connection %(ipsec_site_conn_id)s not found" msgstr "" -#: neutron/extensions/vpnaas.py:39 +#: neutron/extensions/vpnaas.py:37 #, python-format msgid "ipsec_site_connection %(attr)s is equal to or less than dpd_interval" msgstr "" -#: neutron/extensions/vpnaas.py:44 +#: neutron/extensions/vpnaas.py:42 #, python-format msgid "ipsec_site_connection MTU %(mtu)d is too small for ipv%(version)s" msgstr "" -#: neutron/extensions/vpnaas.py:49 +#: neutron/extensions/vpnaas.py:47 #, python-format msgid "IKEPolicy %(ikepolicy_id)s could not be found" msgstr "" -#: neutron/extensions/vpnaas.py:53 +#: neutron/extensions/vpnaas.py:51 #, python-format msgid "IPsecPolicy %(ipsecpolicy_id)s could not be found" msgstr "" -#: neutron/extensions/vpnaas.py:57 +#: neutron/extensions/vpnaas.py:55 #, python-format msgid "" "IKEPolicy %(ikepolicy_id)s is in use by existing IPsecSiteConnection and " "can't be updated or deleted" msgstr "" -#: neutron/extensions/vpnaas.py:62 +#: neutron/extensions/vpnaas.py:60 #, python-format msgid "VPNService %(vpnservice_id)s is still in use" msgstr "" -#: neutron/extensions/vpnaas.py:66 +#: neutron/extensions/vpnaas.py:64 #, python-format msgid "Router %(router_id)s is used by VPNService %(vpnservice_id)s" msgstr "" -#: neutron/extensions/vpnaas.py:70 +#: neutron/extensions/vpnaas.py:68 #, python-format msgid "Invalid state %(state)s of vpnaas resource %(id)s for updating" msgstr "" -#: neutron/extensions/vpnaas.py:75 +#: neutron/extensions/vpnaas.py:73 #, python-format msgid "" "IPsecPolicy %(ipsecpolicy_id)s is in use by existing IPsecSiteConnection " "and can't be updated or deleted" msgstr "" -#: neutron/extensions/vpnaas.py:80 +#: neutron/extensions/vpnaas.py:78 #, python-format msgid "Can not load driver :%(device_driver)s" msgstr "" -#: neutron/extensions/vpnaas.py:84 +#: neutron/extensions/vpnaas.py:82 #, python-format msgid "Subnet %(subnet_id)s is not connected to Router %(router_id)s" msgstr "" -#: neutron/extensions/vpnaas.py:89 +#: neutron/extensions/vpnaas.py:87 #, python-format msgid "Router %(router_id)s has no external network gateway set" msgstr "" @@ -4431,7 +4442,7 @@ msgstr "" msgid "Request is too large." msgstr "" -#: neutron/plugins/bigswitch/config.py:32 +#: neutron/plugins/bigswitch/config.py:28 msgid "" "A comma separated list of Big Switch or Floodlight servers and port " "numbers. The plugin proxies the requests to the Big Switch/Floodlight " @@ -4440,76 +4451,76 @@ msgid "" "support failover." msgstr "" -#: neutron/plugins/bigswitch/config.py:39 +#: neutron/plugins/bigswitch/config.py:35 msgid "" "The username and password for authenticating against the Big Switch or " "Floodlight controller." msgstr "" -#: neutron/plugins/bigswitch/config.py:42 +#: neutron/plugins/bigswitch/config.py:38 msgid "" "If True, Use SSL when connecting to the Big Switch or Floodlight " "controller." msgstr "" -#: neutron/plugins/bigswitch/config.py:45 +#: neutron/plugins/bigswitch/config.py:41 msgid "" "Trust and store the first certificate received for each controller " "address and use it to validate future connections to that address." msgstr "" -#: neutron/plugins/bigswitch/config.py:49 +#: neutron/plugins/bigswitch/config.py:45 msgid "Disables SSL certificate validation for controllers" msgstr "" -#: neutron/plugins/bigswitch/config.py:51 +#: neutron/plugins/bigswitch/config.py:47 msgid "Re-use HTTP/HTTPS connections to the controller." msgstr "" -#: neutron/plugins/bigswitch/config.py:54 +#: neutron/plugins/bigswitch/config.py:50 msgid "Directory containing ca_certs and host_certs certificate directories." msgstr "" -#: neutron/plugins/bigswitch/config.py:57 +#: neutron/plugins/bigswitch/config.py:53 msgid "Sync data on connect" msgstr "" -#: neutron/plugins/bigswitch/config.py:59 +#: neutron/plugins/bigswitch/config.py:55 msgid "" "If neutron fails to create a resource because the backend controller " "doesn't know of a dependency, the plugin automatically triggers a full " "data synchronization to the controller." msgstr "" -#: neutron/plugins/bigswitch/config.py:64 +#: neutron/plugins/bigswitch/config.py:60 msgid "" "Time between verifications that the backend controller database is " "consistent with Neutron. (0 to disable)" msgstr "" -#: neutron/plugins/bigswitch/config.py:67 +#: neutron/plugins/bigswitch/config.py:63 msgid "" "Maximum number of seconds to wait for proxy request to connect and " "complete." msgstr "" -#: neutron/plugins/bigswitch/config.py:70 +#: neutron/plugins/bigswitch/config.py:66 msgid "" "Maximum number of threads to spawn to handle large volumes of port " "creations." msgstr "" -#: neutron/plugins/bigswitch/config.py:74 +#: neutron/plugins/bigswitch/config.py:70 msgid "User defined identifier for this Neutron deployment" msgstr "" -#: neutron/plugins/bigswitch/config.py:76 +#: neutron/plugins/bigswitch/config.py:72 msgid "" "Flag to decide if a route to the metadata server should be injected into " "the VM" msgstr "" -#: neutron/plugins/bigswitch/config.py:81 +#: neutron/plugins/bigswitch/config.py:77 msgid "" "The default router rules installed in new tenant routers. Repeat the " "config option for each rule. Format is " @@ -4517,34 +4528,34 @@ msgid "" "all tenants." msgstr "" -#: neutron/plugins/bigswitch/config.py:86 +#: neutron/plugins/bigswitch/config.py:82 msgid "Maximum number of router rules" msgstr "" -#: neutron/plugins/bigswitch/config.py:90 +#: neutron/plugins/bigswitch/config.py:86 msgid "Virtual interface type to configure on Nova compute nodes" msgstr "" -#: neutron/plugins/bigswitch/config.py:97 +#: neutron/plugins/bigswitch/config.py:93 #, python-format msgid "Nova compute nodes to manually set VIF type to %s" msgstr "" -#: neutron/plugins/bigswitch/config.py:104 +#: neutron/plugins/bigswitch/config.py:100 msgid "List of allowed vif_type values." msgstr "" -#: neutron/plugins/bigswitch/config.py:108 +#: neutron/plugins/bigswitch/config.py:104 msgid "" "Name of integration bridge on compute nodes used for security group " "insertion." msgstr "" -#: neutron/plugins/bigswitch/config.py:111 +#: neutron/plugins/bigswitch/config.py:107 msgid "Seconds between agent checks for port changes" msgstr "" -#: neutron/plugins/bigswitch/config.py:113 +#: neutron/plugins/bigswitch/config.py:109 msgid "Virtual switch type." msgstr "" @@ -4561,99 +4572,99 @@ msgstr "" msgid "NeutronRestProxyV2: too many external networks" msgstr "" -#: neutron/plugins/bigswitch/plugin.py:93 +#: neutron/plugins/bigswitch/plugin.py:90 msgid "Syntax error in server config file, aborting plugin" msgstr "" -#: neutron/plugins/bigswitch/plugin.py:127 neutron/plugins/ml2/db.py:212 +#: neutron/plugins/bigswitch/plugin.py:124 neutron/plugins/ml2/db.py:212 #, python-format msgid "get_port_and_sgs() called for port_id %s" msgstr "" -#: neutron/plugins/bigswitch/plugin.py:237 +#: neutron/plugins/bigswitch/plugin.py:234 #, python-format msgid "Unable to update remote topology: %s" msgstr "" -#: neutron/plugins/bigswitch/plugin.py:322 +#: neutron/plugins/bigswitch/plugin.py:319 #, python-format msgid "" "Setting admin_state_up=False is not supported in this plugin version. " "Ignoring setting for resource: %s" msgstr "" -#: neutron/plugins/bigswitch/plugin.py:328 +#: neutron/plugins/bigswitch/plugin.py:325 #, python-format msgid "" "Operational status is internally set by the plugin. Ignoring setting " "status=%s." msgstr "" -#: neutron/plugins/bigswitch/plugin.py:353 +#: neutron/plugins/bigswitch/plugin.py:350 #, python-format msgid "Unrecognized vif_type in configuration [%s]. Defaulting to ovs." msgstr "" -#: neutron/plugins/bigswitch/plugin.py:399 -#: neutron/plugins/ml2/drivers/mech_bigswitch/driver.py:106 +#: neutron/plugins/bigswitch/plugin.py:398 +#: neutron/plugins/ml2/drivers/mech_bigswitch/driver.py:109 msgid "Iconsistency with backend controller triggering full synchronization." msgstr "" -#: neutron/plugins/bigswitch/plugin.py:416 +#: neutron/plugins/bigswitch/plugin.py:415 #, python-format msgid "NeutronRestProxyV2: Unable to create port: %s" msgstr "" -#: neutron/plugins/bigswitch/plugin.py:475 +#: neutron/plugins/bigswitch/plugin.py:476 #, python-format msgid "NeutronRestProxy: Starting plugin. Version=%s" msgstr "" -#: neutron/plugins/bigswitch/plugin.py:502 +#: neutron/plugins/bigswitch/plugin.py:503 msgid "NeutronRestProxyV2: initialization done" msgstr "" -#: neutron/plugins/bigswitch/plugin.py:546 +#: neutron/plugins/bigswitch/plugin.py:547 msgid "NeutronRestProxyV2: create_network() called" msgstr "" -#: neutron/plugins/bigswitch/plugin.py:589 +#: neutron/plugins/bigswitch/plugin.py:590 msgid "NeutronRestProxyV2.update_network() called" msgstr "" -#: neutron/plugins/bigswitch/plugin.py:617 +#: neutron/plugins/bigswitch/plugin.py:618 msgid "NeutronRestProxyV2: delete_network() called" msgstr "" -#: neutron/plugins/bigswitch/plugin.py:655 +#: neutron/plugins/bigswitch/plugin.py:656 msgid "NeutronRestProxyV2: create_port() called" msgstr "" -#: neutron/plugins/bigswitch/plugin.py:747 +#: neutron/plugins/bigswitch/plugin.py:748 msgid "NeutronRestProxyV2: update_port() called" msgstr "" -#: neutron/plugins/bigswitch/plugin.py:807 +#: neutron/plugins/bigswitch/plugin.py:808 msgid "NeutronRestProxyV2: delete_port() called" msgstr "" -#: neutron/plugins/bigswitch/plugin.py:830 +#: neutron/plugins/bigswitch/plugin.py:831 msgid "NeutronRestProxyV2: create_subnet() called" msgstr "" -#: neutron/plugins/bigswitch/plugin.py:847 +#: neutron/plugins/bigswitch/plugin.py:848 msgid "NeutronRestProxyV2: update_subnet() called" msgstr "" -#: neutron/plugins/bigswitch/plugin.py:866 +#: neutron/plugins/bigswitch/plugin.py:867 msgid "NeutronRestProxyV2: delete_subnet() called" msgstr "" -#: neutron/plugins/bigswitch/plugin.py:890 +#: neutron/plugins/bigswitch/plugin.py:891 msgid "Adding host route: " msgstr "" -#: neutron/plugins/bigswitch/plugin.py:891 +#: neutron/plugins/bigswitch/plugin.py:892 #, python-format msgid "Destination:%(dst)s nexthop:%(next)s" msgstr "" @@ -4667,237 +4678,237 @@ msgstr "" msgid "Updating router rules to %s" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:82 +#: neutron/plugins/bigswitch/servermanager.py:79 #, python-format msgid "Error in REST call to remote network controller: %(reason)s" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:121 +#: neutron/plugins/bigswitch/servermanager.py:118 msgid "Couldn't retrieve capabilities. Newer API calls won't be supported." msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:123 +#: neutron/plugins/bigswitch/servermanager.py:120 #, python-format msgid "The following capabilities were received for %(server)s: %(cap)s" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:152 +#: neutron/plugins/bigswitch/servermanager.py:148 #, python-format msgid "ServerProxy: server=%(server)s, port=%(port)d, ssl=%(ssl)r" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:155 +#: neutron/plugins/bigswitch/servermanager.py:151 #, python-format msgid "" "ServerProxy: resource=%(resource)s, data=%(data)r, headers=%(headers)r, " "action=%(action)s" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:176 +#: neutron/plugins/bigswitch/servermanager.py:172 msgid "ServerProxy: Could not establish HTTPS connection" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:184 +#: neutron/plugins/bigswitch/servermanager.py:180 msgid "ServerProxy: Could not establish HTTP connection" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:220 +#: neutron/plugins/bigswitch/servermanager.py:216 #, python-format msgid "ServerProxy: %(action)s failure, %(e)r" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:223 +#: neutron/plugins/bigswitch/servermanager.py:219 #, python-format msgid "" "ServerProxy: status=%(status)d, reason=%(reason)r, ret=%(ret)s, " "data=%(data)r" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:244 +#: neutron/plugins/bigswitch/servermanager.py:240 msgid "ServerPool: initializing" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:267 +#: neutron/plugins/bigswitch/servermanager.py:263 msgid "Servers not defined. Aborting server manager." msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:274 +#: neutron/plugins/bigswitch/servermanager.py:270 #, python-format msgid "Servers must be defined as :. Configuration was %s" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:283 +#: neutron/plugins/bigswitch/servermanager.py:279 msgid "ServerPool: initialization done" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:333 +#: neutron/plugins/bigswitch/servermanager.py:329 #, python-format msgid "ssl_cert_directory [%s] does not exist. Create it or disable ssl." msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:350 +#: neutron/plugins/bigswitch/servermanager.py:346 #, python-format msgid "No certificates were found to verify controller %s" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:392 +#: neutron/plugins/bigswitch/servermanager.py:388 #, python-format msgid "" "Could not retrieve initial certificate from controller %(server)s. Error " "details: %(error)s" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:397 +#: neutron/plugins/bigswitch/servermanager.py:393 #, python-format msgid "Storing to certificate for host %(server)s at %(path)s" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:444 +#: neutron/plugins/bigswitch/servermanager.py:448 msgid "Server requires synchronization, but no topology function was defined." msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:461 +#: neutron/plugins/bigswitch/servermanager.py:465 #, python-format msgid "" "ServerProxy: %(action)s failure for servers: %(server)r Response: " "%(response)s" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:467 +#: neutron/plugins/bigswitch/servermanager.py:471 #, python-format msgid "" "ServerProxy: Error details: status=%(status)d, reason=%(reason)r, " "ret=%(ret)s, data=%(data)r" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:474 +#: neutron/plugins/bigswitch/servermanager.py:478 #, python-format msgid "ServerProxy: %(action)s failure for all servers: %(server)r" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:497 +#: neutron/plugins/bigswitch/servermanager.py:503 #, python-format msgid "" "NeutronRestProxyV2: Received and ignored error code %(code)s on " "%(action)s action to resource %(resource)s" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:507 +#: neutron/plugins/bigswitch/servermanager.py:513 #, python-format msgid "Unable to create remote router: %s" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:513 +#: neutron/plugins/bigswitch/servermanager.py:519 #, python-format msgid "Unable to update remote router: %s" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:518 +#: neutron/plugins/bigswitch/servermanager.py:524 #, python-format msgid "Unable to delete remote router: %s" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:524 +#: neutron/plugins/bigswitch/servermanager.py:530 #, python-format msgid "Unable to add router interface: %s" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:529 +#: neutron/plugins/bigswitch/servermanager.py:535 #, python-format msgid "Unable to delete remote intf: %s" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:535 +#: neutron/plugins/bigswitch/servermanager.py:541 #, python-format msgid "Unable to create remote network: %s" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:541 -#: neutron/plugins/bigswitch/servermanager.py:546 +#: neutron/plugins/bigswitch/servermanager.py:547 +#: neutron/plugins/bigswitch/servermanager.py:552 #, python-format msgid "Unable to update remote network: %s" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:555 +#: neutron/plugins/bigswitch/servermanager.py:561 #, python-format msgid "No device MAC attached to port %s. Skipping notification to controller." msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:560 +#: neutron/plugins/bigswitch/servermanager.py:566 #, python-format msgid "Unable to create remote port: %s" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:565 +#: neutron/plugins/bigswitch/servermanager.py:571 #, python-format msgid "Unable to delete remote port: %s" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:575 +#: neutron/plugins/bigswitch/servermanager.py:581 #, python-format msgid "Unable to create floating IP: %s" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:580 +#: neutron/plugins/bigswitch/servermanager.py:586 #, python-format msgid "Unable to update floating IP: %s" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:585 +#: neutron/plugins/bigswitch/servermanager.py:591 #, python-format msgid "Unable to delete floating IP: %s" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:590 +#: neutron/plugins/bigswitch/servermanager.py:596 #, python-format msgid "Unable to retrieve switch: %s" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:595 +#: neutron/plugins/bigswitch/servermanager.py:601 msgid "Backend server(s) do not support automated consitency checks." msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:599 +#: neutron/plugins/bigswitch/servermanager.py:605 #, python-format msgid "Consistency watchdog disabled by polling interval setting of %s." msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:611 +#: neutron/plugins/bigswitch/servermanager.py:617 msgid "Encountered an error checking controller health." msgstr "" -#: neutron/plugins/bigswitch/agent/restproxy_agent.py:116 -#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:234 +#: neutron/plugins/bigswitch/agent/restproxy_agent.py:115 +#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:233 msgid "Port update received" msgstr "" -#: neutron/plugins/bigswitch/agent/restproxy_agent.py:120 +#: neutron/plugins/bigswitch/agent/restproxy_agent.py:119 #, python-format msgid "Port %s is not present on this host." msgstr "" -#: neutron/plugins/bigswitch/agent/restproxy_agent.py:123 +#: neutron/plugins/bigswitch/agent/restproxy_agent.py:122 #, python-format msgid "Port %s found. Refreshing firewall." msgstr "" -#: neutron/plugins/bigswitch/agent/restproxy_agent.py:151 -#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:267 +#: neutron/plugins/bigswitch/agent/restproxy_agent.py:150 +#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:266 msgid "Agent loop has new device" msgstr "" -#: neutron/plugins/bigswitch/agent/restproxy_agent.py:155 -#: neutron/plugins/nec/agent/nec_neutron_agent.py:225 -#: neutron/plugins/oneconvergence/agent/nvsd_neutron_agent.py:159 -#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:271 +#: neutron/plugins/bigswitch/agent/restproxy_agent.py:154 +#: neutron/plugins/nec/agent/nec_neutron_agent.py:223 +#: neutron/plugins/oneconvergence/agent/nvsd_neutron_agent.py:157 +#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:270 msgid "Error in agent event loop" msgstr "" -#: neutron/plugins/bigswitch/agent/restproxy_agent.py:161 -#: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:225 -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:1012 -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1458 -#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:277 +#: neutron/plugins/bigswitch/agent/restproxy_agent.py:160 +#: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:223 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:1011 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1461 +#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:276 #: neutron/plugins/sriovnicagent/sriov_nic_agent.py:285 #, python-format msgid "Loop iteration exceeded interval (%(polling_interval)s vs. %(elapsed)s)!" @@ -4927,66 +4938,66 @@ msgstr "" msgid "Logging port %(port)s on host_id %(host)s" msgstr "" -#: neutron/plugins/bigswitch/extensions/routerrule.py:28 +#: neutron/plugins/bigswitch/extensions/routerrule.py:26 #, python-format msgid "Invalid format for router rules: %(rule)s, %(reason)s" msgstr "" -#: neutron/plugins/bigswitch/extensions/routerrule.py:32 +#: neutron/plugins/bigswitch/extensions/routerrule.py:30 #, python-format msgid "" "Unable to complete rules update for %(router_id)s. The number of rules " "exceeds the maximum %(quota)s." msgstr "" -#: neutron/plugins/bigswitch/extensions/routerrule.py:49 +#: neutron/plugins/bigswitch/extensions/routerrule.py:47 #, python-format msgid "Invalid data format for router rule: '%s'" msgstr "" -#: neutron/plugins/bigswitch/extensions/routerrule.py:81 +#: neutron/plugins/bigswitch/extensions/routerrule.py:79 #, python-format msgid "Duplicate nexthop in rule '%s'" msgstr "" -#: neutron/plugins/bigswitch/extensions/routerrule.py:89 +#: neutron/plugins/bigswitch/extensions/routerrule.py:87 #, python-format msgid "Action must be either permit or deny. '%s' was provided" msgstr "" -#: neutron/plugins/bigswitch/extensions/routerrule.py:101 +#: neutron/plugins/bigswitch/extensions/routerrule.py:99 #, python-format msgid "Duplicate router rules (src,dst) found '%s'" msgstr "" -#: neutron/plugins/brocade/NeutronPlugin.py:64 -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:34 +#: neutron/plugins/brocade/NeutronPlugin.py:60 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:31 #: neutron/services/l3_router/brocade/l3_router_plugin.py:36 msgid "The address of the host to SSH to" msgstr "" -#: neutron/plugins/brocade/NeutronPlugin.py:66 -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:36 +#: neutron/plugins/brocade/NeutronPlugin.py:62 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:33 #: neutron/services/l3_router/brocade/l3_router_plugin.py:38 msgid "The SSH username to use" msgstr "" -#: neutron/plugins/brocade/NeutronPlugin.py:68 -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:38 +#: neutron/plugins/brocade/NeutronPlugin.py:64 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:35 #: neutron/services/l3_router/brocade/l3_router_plugin.py:40 msgid "The SSH password to use" msgstr "" -#: neutron/plugins/brocade/NeutronPlugin.py:70 +#: neutron/plugins/brocade/NeutronPlugin.py:66 msgid "Currently unused" msgstr "" -#: neutron/plugins/brocade/NeutronPlugin.py:74 +#: neutron/plugins/brocade/NeutronPlugin.py:70 msgid "The network interface to use when creatinga port" msgstr "" -#: neutron/plugins/brocade/NeutronPlugin.py:96 -#: neutron/plugins/hyperv/rpc_callbacks.py:42 +#: neutron/plugins/brocade/NeutronPlugin.py:92 +#: neutron/plugins/hyperv/rpc_callbacks.py:41 #: neutron/plugins/linuxbridge/lb_neutron_plugin.py:71 #: neutron/plugins/mlnx/rpc_callbacks.py:37 #: neutron/plugins/openvswitch/ovs_neutron_plugin.py:80 @@ -4994,10 +5005,10 @@ msgstr "" msgid "Device %(device)s details requested from %(agent_id)s" msgstr "" -#: neutron/plugins/brocade/NeutronPlugin.py:110 -#: neutron/plugins/brocade/NeutronPlugin.py:137 -#: neutron/plugins/hyperv/rpc_callbacks.py:58 -#: neutron/plugins/hyperv/rpc_callbacks.py:87 +#: neutron/plugins/brocade/NeutronPlugin.py:106 +#: neutron/plugins/brocade/NeutronPlugin.py:133 +#: neutron/plugins/hyperv/rpc_callbacks.py:57 +#: neutron/plugins/hyperv/rpc_callbacks.py:86 #: neutron/plugins/linuxbridge/lb_neutron_plugin.py:95 #: neutron/plugins/linuxbridge/lb_neutron_plugin.py:132 #: neutron/plugins/linuxbridge/lb_neutron_plugin.py:155 @@ -5011,591 +5022,591 @@ msgstr "" msgid "%s can not be found in database" msgstr "" -#: neutron/plugins/brocade/NeutronPlugin.py:303 -#: neutron/plugins/brocade/NeutronPlugin.py:347 -#: neutron/plugins/brocade/NeutronPlugin.py:400 -#: neutron/plugins/brocade/NeutronPlugin.py:430 +#: neutron/plugins/brocade/NeutronPlugin.py:299 +#: neutron/plugins/brocade/NeutronPlugin.py:343 +#: neutron/plugins/brocade/NeutronPlugin.py:396 +#: neutron/plugins/brocade/NeutronPlugin.py:426 msgid "Brocade NOS driver error" msgstr "" -#: neutron/plugins/brocade/NeutronPlugin.py:304 +#: neutron/plugins/brocade/NeutronPlugin.py:300 #, python-format msgid "Returning the allocated vlan (%d) to the pool" msgstr "" -#: neutron/plugins/brocade/NeutronPlugin.py:307 -#: neutron/plugins/brocade/NeutronPlugin.py:348 -#: neutron/plugins/brocade/NeutronPlugin.py:401 -#: neutron/plugins/brocade/NeutronPlugin.py:432 +#: neutron/plugins/brocade/NeutronPlugin.py:303 +#: neutron/plugins/brocade/NeutronPlugin.py:344 +#: neutron/plugins/brocade/NeutronPlugin.py:397 +#: neutron/plugins/brocade/NeutronPlugin.py:428 msgid "Brocade plugin raised exception, check logs" msgstr "" -#: neutron/plugins/brocade/NeutronPlugin.py:313 +#: neutron/plugins/brocade/NeutronPlugin.py:309 #, python-format msgid "Allocated vlan (%d) from the pool" msgstr "" -#: neutron/plugins/brocade/nos/nosdriver.py:69 +#: neutron/plugins/brocade/nos/nosdriver.py:65 #, python-format msgid "Connect failed to switch: %s" msgstr "" -#: neutron/plugins/brocade/nos/nosdriver.py:71 -#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:90 +#: neutron/plugins/brocade/nos/nosdriver.py:67 +#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:86 #, python-format msgid "Connect success to host %(host)s:%(ssh_port)d" msgstr "" -#: neutron/plugins/brocade/nos/nosdriver.py:96 -#: neutron/plugins/brocade/nos/nosdriver.py:110 -#: neutron/plugins/brocade/nos/nosdriver.py:123 -#: neutron/plugins/brocade/nos/nosdriver.py:136 -#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:331 -#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:342 +#: neutron/plugins/brocade/nos/nosdriver.py:92 +#: neutron/plugins/brocade/nos/nosdriver.py:106 +#: neutron/plugins/brocade/nos/nosdriver.py:119 +#: neutron/plugins/brocade/nos/nosdriver.py:132 +#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:327 +#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:338 #, python-format msgid "NETCONF error: %s" msgstr "" -#: neutron/plugins/cisco/network_plugin.py:89 +#: neutron/plugins/cisco/network_plugin.py:87 msgid "Plugin initialization complete" msgstr "" -#: neutron/plugins/cisco/network_plugin.py:117 +#: neutron/plugins/cisco/network_plugin.py:115 #, python-format msgid "'%(model)s' object has no attribute '%(name)s'" msgstr "" -#: neutron/plugins/cisco/network_plugin.py:134 -#: neutron/plugins/cisco/db/network_db_v2.py:32 +#: neutron/plugins/cisco/network_plugin.py:132 +#: neutron/plugins/cisco/db/network_db_v2.py:30 msgid "get_all_qoss() called" msgstr "" -#: neutron/plugins/cisco/network_plugin.py:140 +#: neutron/plugins/cisco/network_plugin.py:138 msgid "get_qos_details() called" msgstr "" -#: neutron/plugins/cisco/network_plugin.py:145 +#: neutron/plugins/cisco/network_plugin.py:143 msgid "create_qos() called" msgstr "" -#: neutron/plugins/cisco/network_plugin.py:151 +#: neutron/plugins/cisco/network_plugin.py:149 msgid "delete_qos() called" msgstr "" -#: neutron/plugins/cisco/network_plugin.py:156 +#: neutron/plugins/cisco/network_plugin.py:154 msgid "rename_qos() called" msgstr "" -#: neutron/plugins/cisco/network_plugin.py:161 +#: neutron/plugins/cisco/network_plugin.py:159 msgid "get_all_credentials() called" msgstr "" -#: neutron/plugins/cisco/network_plugin.py:167 +#: neutron/plugins/cisco/network_plugin.py:165 msgid "get_credential_details() called" msgstr "" -#: neutron/plugins/cisco/network_plugin.py:172 +#: neutron/plugins/cisco/network_plugin.py:170 msgid "rename_credential() called" msgstr "" -#: neutron/plugins/cisco/cfg_agent/cfg_agent.py:108 +#: neutron/plugins/cisco/cfg_agent/cfg_agent.py:106 msgid "" "Interval when the process_services() loop executes in seconds. This is " "when the config agent lets each service helper to process its neutron " "resources." msgstr "" -#: neutron/plugins/cisco/cfg_agent/cfg_agent.py:115 +#: neutron/plugins/cisco/cfg_agent/cfg_agent.py:113 msgid "Path of the routing service helper class." msgstr "" -#: neutron/plugins/cisco/cfg_agent/cfg_agent.py:137 +#: neutron/plugins/cisco/cfg_agent/cfg_agent.py:135 #, python-format msgid "" "Error in loading routing service helper. Class specified is %(class)s. " "Reason:%(reason)s" msgstr "" -#: neutron/plugins/cisco/cfg_agent/cfg_agent.py:148 +#: neutron/plugins/cisco/cfg_agent/cfg_agent.py:146 msgid "Cisco cfg agent started" msgstr "" -#: neutron/plugins/cisco/cfg_agent/cfg_agent.py:208 +#: neutron/plugins/cisco/cfg_agent/cfg_agent.py:206 msgid "No routing service helper loaded" msgstr "" -#: neutron/plugins/cisco/cfg_agent/cfg_agent.py:237 +#: neutron/plugins/cisco/cfg_agent/cfg_agent.py:235 #, python-format msgid "" "Invalid payload format for received RPC message " "`hosting_devices_removed`. Error is %{error}s. Payload is %(payload)s" msgstr "" -#: neutron/plugins/cisco/cfg_agent/cfg_agent.py:281 +#: neutron/plugins/cisco/cfg_agent/cfg_agent.py:279 msgid "[Agent registration] Agent successfully registered" msgstr "" -#: neutron/plugins/cisco/cfg_agent/cfg_agent.py:285 +#: neutron/plugins/cisco/cfg_agent/cfg_agent.py:283 #, python-format msgid "" "[Agent registration] Neutron server said that device manager was not " "ready. Retrying in %0.2f seconds " msgstr "" -#: neutron/plugins/cisco/cfg_agent/cfg_agent.py:290 +#: neutron/plugins/cisco/cfg_agent/cfg_agent.py:288 msgid "" "[Agent registration] Neutron server said that no device manager was " "found. Cannot continue. Exiting!" msgstr "" -#: neutron/plugins/cisco/cfg_agent/cfg_agent.py:294 +#: neutron/plugins/cisco/cfg_agent/cfg_agent.py:292 #, python-format msgid "[Agent registration] %d unsuccessful registration attempts. Exiting!" msgstr "" -#: neutron/plugins/cisco/cfg_agent/cfg_agent.py:333 +#: neutron/plugins/cisco/cfg_agent/cfg_agent.py:331 msgid "Failed sending agent report!" msgstr "" -#: neutron/plugins/cisco/cfg_agent/cfg_exceptions.py:28 +#: neutron/plugins/cisco/cfg_agent/cfg_exceptions.py:26 msgid "" "Critical device parameter missing. Failed initializing CSR1kv routing " "driver." msgstr "" -#: neutron/plugins/cisco/cfg_agent/cfg_exceptions.py:34 +#: neutron/plugins/cisco/cfg_agent/cfg_exceptions.py:32 #, python-format msgid "" "Failed connecting to CSR1kv. Reason: %(reason)s. Connection params are " "User:%(user)s, Host:%(host)s, Port:%(port)s, Device timeout:%(timeout)s." msgstr "" -#: neutron/plugins/cisco/cfg_agent/cfg_exceptions.py:41 +#: neutron/plugins/cisco/cfg_agent/cfg_exceptions.py:39 #, python-format msgid "Error executing snippet:%(snippet)s. ErrorType:%(type)s ErrorTag:%(tag)s." msgstr "" -#: neutron/plugins/cisco/cfg_agent/cfg_exceptions.py:47 +#: neutron/plugins/cisco/cfg_agent/cfg_exceptions.py:45 #, python-format msgid "" "Data in attribute: %(attribute)s does not correspond to expected value. " "Value received is %(value)s. " msgstr "" -#: neutron/plugins/cisco/cfg_agent/cfg_exceptions.py:52 +#: neutron/plugins/cisco/cfg_agent/cfg_exceptions.py:50 #, python-format msgid "Driver %(driver)s does not exist." msgstr "" -#: neutron/plugins/cisco/cfg_agent/cfg_exceptions.py:56 +#: neutron/plugins/cisco/cfg_agent/cfg_exceptions.py:54 #, python-format msgid "Driver not found for resource id:%(id)s." msgstr "" -#: neutron/plugins/cisco/cfg_agent/cfg_exceptions.py:60 +#: neutron/plugins/cisco/cfg_agent/cfg_exceptions.py:58 #, python-format msgid "Driver cannot be set for missing parameter:%(p)s." msgstr "" -#: neutron/plugins/cisco/cfg_agent/device_status.py:30 +#: neutron/plugins/cisco/cfg_agent/device_status.py:28 msgid "Time in seconds for connecting to a hosting device" msgstr "" -#: neutron/plugins/cisco/cfg_agent/device_status.py:32 +#: neutron/plugins/cisco/cfg_agent/device_status.py:30 msgid "" "The time in seconds until a backlogged hosting device is presumed dead. " "This value should be set up high enough to recover from a period of " "connectivity loss or high load when the device may not be responding." msgstr "" -#: neutron/plugins/cisco/cfg_agent/device_status.py:59 +#: neutron/plugins/cisco/cfg_agent/device_status.py:57 #, python-format msgid "Cannot ping ip address: %s" msgstr "" -#: neutron/plugins/cisco/cfg_agent/device_status.py:143 +#: neutron/plugins/cisco/cfg_agent/device_status.py:141 #, python-format msgid "" "Hosting device: %(hd_id)s @ %(ip)s hasn't passed minimum boot time. " "Skipping it. " msgstr "" -#: neutron/plugins/cisco/cfg_agent/device_status.py:147 +#: neutron/plugins/cisco/cfg_agent/device_status.py:145 #, python-format msgid "Checking hosting device: %(hd_id)s @ %(ip)s for reachability." msgstr "" -#: neutron/plugins/cisco/cfg_agent/device_status.py:154 +#: neutron/plugins/cisco/cfg_agent/device_status.py:152 #, python-format msgid "Hosting device: %(hd_id)s @ %(ip)s is now reachable. Adding it to response" msgstr "" -#: neutron/plugins/cisco/cfg_agent/device_status.py:158 +#: neutron/plugins/cisco/cfg_agent/device_status.py:156 #, python-format msgid "Hosting device: %(hd_id)s @ %(ip)s still not reachable " msgstr "" -#: neutron/plugins/cisco/cfg_agent/device_drivers/driver_mgr.py:80 +#: neutron/plugins/cisco/cfg_agent/device_drivers/driver_mgr.py:79 #, python-format msgid "" "Error loading cfg agent driver %(driver)s for hosting device template " "%(t_name)s(%(t_id)s)" msgstr "" -#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:64 +#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:62 #, python-format msgid "Missing device parameter:%s. Aborting CSR1kvRoutingDriver initialization" msgstr "" -#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:230 +#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:228 #, python-format msgid "Unknown route command %s" msgstr "" -#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:322 +#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:320 #, python-format msgid "Interfaces:%s" msgstr "" -#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:337 +#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:335 #, python-format msgid "IP Address:%s" msgstr "" -#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:339 +#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:337 #, python-format msgid "Cannot find interface: %s" msgstr "" -#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:374 +#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:372 #, python-format msgid "Enabled interface %s " msgstr "" -#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:393 +#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:391 #, python-format msgid "VRFs:%s" msgstr "" -#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:438 +#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:436 #, python-format msgid "Mismatch in ACL configuration for %s" msgstr "" -#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:467 +#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:465 #, python-format msgid "VRF %s successfully created" msgstr "" -#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:469 +#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:467 #, python-format msgid "Failed creating VRF %s" msgstr "" -#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:477 +#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:475 #, python-format msgid "VRF %s removed" msgstr "" -#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:479 -#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:483 -#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:496 +#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:477 +#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:481 +#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:494 #, python-format msgid "VRF %s not present" msgstr "" -#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:681 +#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:679 #, python-format msgid "%s successfully executed" msgstr "" -#: neutron/plugins/cisco/cfg_agent/service_helpers/routing_svc_helper.py:229 +#: neutron/plugins/cisco/cfg_agent/service_helpers/routing_svc_helper.py:227 msgid "Failed processing routers" msgstr "" -#: neutron/plugins/cisco/cfg_agent/service_helpers/routing_svc_helper.py:290 +#: neutron/plugins/cisco/cfg_agent/service_helpers/routing_svc_helper.py:288 msgid "RPC Error in fetching routers from plugin" msgstr "" -#: neutron/plugins/cisco/cfg_agent/service_helpers/routing_svc_helper.py:377 +#: neutron/plugins/cisco/cfg_agent/service_helpers/routing_svc_helper.py:375 #, python-format msgid "Router: %(id)s is on an unreachable hosting device. " msgstr "" -#: neutron/plugins/cisco/cfg_agent/service_helpers/routing_svc_helper.py:386 +#: neutron/plugins/cisco/cfg_agent/service_helpers/routing_svc_helper.py:384 #, python-format msgid "Key Error, missing key: %s" msgstr "" -#: neutron/plugins/cisco/cfg_agent/service_helpers/routing_svc_helper.py:390 +#: neutron/plugins/cisco/cfg_agent/service_helpers/routing_svc_helper.py:388 #, python-format msgid "Driver Exception on router:%(id)s. Error is %(e)s" msgstr "" -#: neutron/plugins/cisco/cfg_agent/service_helpers/routing_svc_helper.py:401 +#: neutron/plugins/cisco/cfg_agent/service_helpers/routing_svc_helper.py:399 #, python-format msgid "Exception in processing routers on device:%s" msgstr "" -#: neutron/plugins/cisco/cfg_agent/service_helpers/routing_svc_helper.py:544 +#: neutron/plugins/cisco/cfg_agent/service_helpers/routing_svc_helper.py:542 #, python-format msgid "Info for router %s was not found. Skipping router removal" msgstr "" -#: neutron/plugins/cisco/cfg_agent/service_helpers/routing_svc_helper.py:559 +#: neutron/plugins/cisco/cfg_agent/service_helpers/routing_svc_helper.py:557 #, python-format msgid "" "Router remove for router_id: %s was incomplete. Adding the router to " "removed_routers list" msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:25 +#: neutron/plugins/cisco/common/cisco_exceptions.py:22 #, python-format msgid "Segmentation ID for network %(net_id)s is not found." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:30 +#: neutron/plugins/cisco/common/cisco_exceptions.py:27 msgid "" "Unable to complete operation. No more dynamic NICs are available in the " "system." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:36 +#: neutron/plugins/cisco/common/cisco_exceptions.py:33 #, python-format msgid "" "NetworkVlanBinding for %(vlan_id)s and network %(network_id)s already " "exists." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:42 +#: neutron/plugins/cisco/common/cisco_exceptions.py:39 #, python-format msgid "Vlan ID %(vlan_id)s not found." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:47 +#: neutron/plugins/cisco/common/cisco_exceptions.py:44 msgid "" "Unable to complete operation. VLAN ID exists outside of the configured " "network segment range." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:53 +#: neutron/plugins/cisco/common/cisco_exceptions.py:50 msgid "No Vlan ID available." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:58 +#: neutron/plugins/cisco/common/cisco_exceptions.py:55 #, python-format msgid "QoS level %(qos_id)s could not be found for tenant %(tenant_id)s." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:64 +#: neutron/plugins/cisco/common/cisco_exceptions.py:61 #, python-format msgid "QoS level with name %(qos_name)s already exists for tenant %(tenant_id)s." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:70 +#: neutron/plugins/cisco/common/cisco_exceptions.py:67 #: neutron/plugins/ml2/drivers/cisco/nexus/exceptions.py:23 #, python-format msgid "Credential %(credential_id)s could not be found." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:75 +#: neutron/plugins/cisco/common/cisco_exceptions.py:72 #: neutron/plugins/ml2/drivers/cisco/nexus/exceptions.py:28 #, python-format msgid "Credential %(credential_name)s could not be found." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:80 +#: neutron/plugins/cisco/common/cisco_exceptions.py:77 #, python-format msgid "Credential %(credential_name)s already exists." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:85 +#: neutron/plugins/cisco/common/cisco_exceptions.py:82 #, python-format msgid "Provider network %s already exists" msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:90 +#: neutron/plugins/cisco/common/cisco_exceptions.py:87 #: neutron/plugins/ml2/drivers/cisco/nexus/exceptions.py:39 #, python-format msgid "Connection to %(host)s is not configured." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:95 +#: neutron/plugins/cisco/common/cisco_exceptions.py:92 #: neutron/plugins/ml2/drivers/cisco/nexus/exceptions.py:44 #, python-format msgid "Unable to connect to Nexus %(nexus_host)s. Reason: %(exc)s." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:100 +#: neutron/plugins/cisco/common/cisco_exceptions.py:97 #: neutron/plugins/ml2/drivers/cisco/nexus/exceptions.py:49 #, python-format msgid "Failed to configure Nexus: %(config)s. Reason: %(exc)s." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:105 +#: neutron/plugins/cisco/common/cisco_exceptions.py:102 #, python-format msgid "Nexus Port Binding (%(filters)s) is not present." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:114 +#: neutron/plugins/cisco/common/cisco_exceptions.py:111 #: neutron/plugins/ml2/drivers/cisco/nexus/exceptions.py:69 msgid "No usable Nexus switch found to create SVI interface." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:119 +#: neutron/plugins/cisco/common/cisco_exceptions.py:116 #, python-format msgid "PortVnic Binding %(port_id)s already exists." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:124 +#: neutron/plugins/cisco/common/cisco_exceptions.py:121 #, python-format msgid "PortVnic Binding %(port_id)s is not present." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:129 +#: neutron/plugins/cisco/common/cisco_exceptions.py:126 #: neutron/plugins/ml2/drivers/cisco/nexus/exceptions.py:74 msgid "No subnet_id specified for router gateway." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:134 +#: neutron/plugins/cisco/common/cisco_exceptions.py:131 #: neutron/plugins/ml2/drivers/cisco/nexus/exceptions.py:79 #, python-format msgid "Subnet %(subnet_id)s has an interface on %(router_id)s." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:139 +#: neutron/plugins/cisco/common/cisco_exceptions.py:136 #: neutron/plugins/ml2/drivers/cisco/nexus/exceptions.py:84 msgid "Nexus hardware router gateway only uses Subnet Ids." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:143 +#: neutron/plugins/cisco/common/cisco_exceptions.py:140 #, python-format msgid "" "Unable to unplug the attachment %(att_id)s from port %(port_id)s for " "network %(net_id)s. The attachment %(att_id)s does not exist." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:150 +#: neutron/plugins/cisco/common/cisco_exceptions.py:147 #, python-format msgid "Policy Profile %(profile_id)s already exists." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:156 +#: neutron/plugins/cisco/common/cisco_exceptions.py:153 #, python-format msgid "Policy Profile %(profile_id)s could not be found." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:161 +#: neutron/plugins/cisco/common/cisco_exceptions.py:158 #, python-format msgid "Network Profile %(profile_id)s already exists." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:167 +#: neutron/plugins/cisco/common/cisco_exceptions.py:164 #, python-format msgid "Network Profile %(profile)s could not be found." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:172 +#: neutron/plugins/cisco/common/cisco_exceptions.py:169 #, python-format msgid "" "One or more network segments belonging to network profile %(profile)s is " "in use." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:178 +#: neutron/plugins/cisco/common/cisco_exceptions.py:175 #, python-format msgid "" "No more segments available in network segment pool " "%(network_profile_name)s." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:184 +#: neutron/plugins/cisco/common/cisco_exceptions.py:181 #, python-format msgid "VM Network %(name)s could not be found." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:189 +#: neutron/plugins/cisco/common/cisco_exceptions.py:186 #, python-format msgid "Unable to create the network. The VXLAN ID %(vxlan_id)s is in use." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:195 +#: neutron/plugins/cisco/common/cisco_exceptions.py:192 #, python-format msgid "Vxlan ID %(vxlan_id)s not found." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:200 +#: neutron/plugins/cisco/common/cisco_exceptions.py:197 msgid "" "Unable to complete operation. VXLAN ID exists outside of the configured " "network segment range." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:206 +#: neutron/plugins/cisco/common/cisco_exceptions.py:203 #, python-format msgid "Connection to VSM failed: %(reason)s." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:211 +#: neutron/plugins/cisco/common/cisco_exceptions.py:208 #, python-format msgid "Internal VSM Error: %(reason)s." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:216 +#: neutron/plugins/cisco/common/cisco_exceptions.py:213 #, python-format msgid "Network Binding for network %(network_id)s could not be found." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:222 +#: neutron/plugins/cisco/common/cisco_exceptions.py:219 #, python-format msgid "Port Binding for port %(port_id)s could not be found." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:228 +#: neutron/plugins/cisco/common/cisco_exceptions.py:225 #, python-format msgid "Profile-Tenant binding for profile %(profile_id)s could not be found." msgstr "" -#: neutron/plugins/cisco/common/cisco_exceptions.py:234 +#: neutron/plugins/cisco/common/cisco_exceptions.py:231 msgid "No service cluster found to perform multi-segment bridging." msgstr "" -#: neutron/plugins/cisco/common/cisco_faults.py:72 +#: neutron/plugins/cisco/common/cisco_faults.py:70 msgid "Port not Found" msgstr "" -#: neutron/plugins/cisco/common/cisco_faults.py:73 +#: neutron/plugins/cisco/common/cisco_faults.py:71 msgid "Unable to find a port with the specified identifier." msgstr "" -#: neutron/plugins/cisco/common/cisco_faults.py:87 +#: neutron/plugins/cisco/common/cisco_faults.py:85 msgid "Credential Not Found" msgstr "" -#: neutron/plugins/cisco/common/cisco_faults.py:88 +#: neutron/plugins/cisco/common/cisco_faults.py:86 msgid "Unable to find a Credential with the specified identifier." msgstr "" -#: neutron/plugins/cisco/common/cisco_faults.py:103 +#: neutron/plugins/cisco/common/cisco_faults.py:101 msgid "QoS Not Found" msgstr "" -#: neutron/plugins/cisco/common/cisco_faults.py:104 +#: neutron/plugins/cisco/common/cisco_faults.py:102 msgid "Unable to find a QoS with the specified identifier." msgstr "" -#: neutron/plugins/cisco/common/cisco_faults.py:119 +#: neutron/plugins/cisco/common/cisco_faults.py:117 msgid "Nova tenant Not Found" msgstr "" -#: neutron/plugins/cisco/common/cisco_faults.py:120 +#: neutron/plugins/cisco/common/cisco_faults.py:118 msgid "Unable to find a Novatenant with the specified identifier." msgstr "" -#: neutron/plugins/cisco/common/cisco_faults.py:135 +#: neutron/plugins/cisco/common/cisco_faults.py:133 msgid "Requested State Invalid" msgstr "" -#: neutron/plugins/cisco/common/cisco_faults.py:136 +#: neutron/plugins/cisco/common/cisco_faults.py:134 msgid "Unable to update port state with specified value." msgstr "" @@ -5696,633 +5707,633 @@ msgstr "" msgid "Some config files were not parsed properly" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:330 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:325 #, python-format msgid "seg_min %(seg_min)s, seg_max %(seg_max)s" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:561 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:556 #, python-format msgid "Reserving specific vlan %(vlan)s on physical network %(network)s from pool" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:586 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:581 #, python-format msgid "vlan_id %(vlan)s on physical network %(network)s not found" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:600 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:595 #, python-format msgid "Unreasonable vxlan ID range %(vxlan_min)s - %(vxlan_max)s" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:642 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:637 #, python-format msgid "Reserving specific vxlan %s from pool" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:663 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:658 #, python-format msgid "vxlan_id %s not found" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:772 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:767 msgid "create_network_profile()" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:794 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:789 msgid "delete_network_profile()" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:808 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:803 msgid "update_network_profile()" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:817 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:812 msgid "get_network_profile()" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:842 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:837 msgid "create_policy_profile()" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:853 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:848 msgid "delete_policy_profile()" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:862 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:857 msgid "update_policy_profile()" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:871 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:866 msgid "get_policy_profile()" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:890 -#: neutron/plugins/cisco/db/n1kv_db_v2.py:944 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:885 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:939 msgid "Invalid profile type" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:908 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:903 msgid "_profile_binding_exists()" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:917 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:912 msgid "get_profile_binding()" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:927 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:922 msgid "delete_profile_binding()" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:934 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:929 #, python-format msgid "" "Profile-Tenant binding missing for profile ID %(profile_id)s and tenant " "ID %(tenant_id)s" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:965 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:960 msgid "_get_profile_bindings()" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1121 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:1116 msgid "segment_range not required for TRUNK" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1127 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:1122 msgid "multicast_ip_range not required" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1254 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:1249 msgid "Invalid segment range. example range: 500-550" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1267 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:1262 msgid "Invalid multicast ip address range. example range: 224.1.1.1-224.1.1.10" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1274 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:1269 #, python-format msgid "%s is not a valid multicast ip address" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1278 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:1273 #, python-format msgid "%s is reserved multicast ip address" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1282 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:1277 #, python-format msgid "%s is not a valid ip address" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1286 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:1281 #, python-format msgid "" "Invalid multicast IP range '%(min_ip)s-%(max_ip)s': Range should be from " "low address to high address" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1299 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:1294 msgid "Arguments segment_type missing for network profile" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1308 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:1303 msgid "segment_type should either be vlan, overlay, multi-segment or trunk" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1314 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:1309 msgid "Argument physical_network missing for network profile" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1320 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:1315 msgid "segment_range not required for trunk" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1326 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:1321 msgid "Argument sub_type missing for network profile" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1333 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:1328 msgid "Argument segment_range missing for network profile" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1344 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:1339 msgid "Argument multicast_ip_range missing for VXLAN multicast network profile" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1372 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:1367 #, python-format msgid "Segment range is invalid, select from %(min)s-%(nmin)s, %(nmax)s-%(max)s" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1390 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:1385 #, python-format msgid "segment range is invalid. Valid range is : %(min)s-%(max)s" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1404 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:1399 #, python-format msgid "NetworkProfile name %s already exists" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1421 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:1416 msgid "Segment range overlaps with another profile" msgstr "" -#: neutron/plugins/cisco/db/network_db_v2.py:40 +#: neutron/plugins/cisco/db/network_db_v2.py:38 msgid "get_qos() called" msgstr "" -#: neutron/plugins/cisco/db/network_db_v2.py:53 +#: neutron/plugins/cisco/db/network_db_v2.py:51 msgid "add_qos() called" msgstr "" -#: neutron/plugins/cisco/db/l3/device_handling_db.py:44 +#: neutron/plugins/cisco/db/l3/device_handling_db.py:42 msgid "Name of the L3 admin tenant." msgstr "" -#: neutron/plugins/cisco/db/l3/device_handling_db.py:46 +#: neutron/plugins/cisco/db/l3/device_handling_db.py:44 msgid "" "Name of management network for device configuration. Default value is " "osn_mgmt_nw" msgstr "" -#: neutron/plugins/cisco/db/l3/device_handling_db.py:49 +#: neutron/plugins/cisco/db/l3/device_handling_db.py:47 msgid "" "Default security group applied on management port. Default value is " "mgmt_sec_grp." msgstr "" -#: neutron/plugins/cisco/db/l3/device_handling_db.py:52 +#: neutron/plugins/cisco/db/l3/device_handling_db.py:50 msgid "Seconds of no status update until a cfg agent is considered down." msgstr "" -#: neutron/plugins/cisco/db/l3/device_handling_db.py:55 +#: neutron/plugins/cisco/db/l3/device_handling_db.py:53 msgid "Ensure that Nova is running before attempting to create any VM." msgstr "" -#: neutron/plugins/cisco/db/l3/device_handling_db.py:61 +#: neutron/plugins/cisco/db/l3/device_handling_db.py:59 msgid "Name of Glance image for CSR1kv." msgstr "" -#: neutron/plugins/cisco/db/l3/device_handling_db.py:63 +#: neutron/plugins/cisco/db/l3/device_handling_db.py:61 msgid "UUID of Nova flavor for CSR1kv." msgstr "" -#: neutron/plugins/cisco/db/l3/device_handling_db.py:67 +#: neutron/plugins/cisco/db/l3/device_handling_db.py:65 msgid "Plugging driver for CSR1kv." msgstr "" -#: neutron/plugins/cisco/db/l3/device_handling_db.py:71 +#: neutron/plugins/cisco/db/l3/device_handling_db.py:69 msgid "Hosting device driver for CSR1kv." msgstr "" -#: neutron/plugins/cisco/db/l3/device_handling_db.py:75 +#: neutron/plugins/cisco/db/l3/device_handling_db.py:73 msgid "Config agent driver for CSR1kv." msgstr "" -#: neutron/plugins/cisco/db/l3/device_handling_db.py:77 +#: neutron/plugins/cisco/db/l3/device_handling_db.py:75 msgid "Booting time in seconds before a CSR1kv becomes operational." msgstr "" -#: neutron/plugins/cisco/db/l3/device_handling_db.py:80 +#: neutron/plugins/cisco/db/l3/device_handling_db.py:78 msgid "Username to use for CSR1kv configurations." msgstr "" -#: neutron/plugins/cisco/db/l3/device_handling_db.py:82 +#: neutron/plugins/cisco/db/l3/device_handling_db.py:80 msgid "Password to use for CSR1kv configurations." msgstr "" -#: neutron/plugins/cisco/db/l3/device_handling_db.py:124 +#: neutron/plugins/cisco/db/l3/device_handling_db.py:122 #, python-format msgid "No tenant with a name or ID of %s exists." msgstr "" -#: neutron/plugins/cisco/db/l3/device_handling_db.py:127 +#: neutron/plugins/cisco/db/l3/device_handling_db.py:125 #, python-format msgid "Multiple tenants matches found for %s" msgstr "" -#: neutron/plugins/cisco/db/l3/device_handling_db.py:146 +#: neutron/plugins/cisco/db/l3/device_handling_db.py:144 msgid "The virtual management network has no subnet. Please assign one." msgstr "" -#: neutron/plugins/cisco/db/l3/device_handling_db.py:150 +#: neutron/plugins/cisco/db/l3/device_handling_db.py:148 #, python-format msgid "The virtual management network has %d subnets. The first one will be used." msgstr "" -#: neutron/plugins/cisco/db/l3/device_handling_db.py:156 +#: neutron/plugins/cisco/db/l3/device_handling_db.py:154 msgid "" "The virtual management network does not have unique name. Please ensure " "that it is." msgstr "" -#: neutron/plugins/cisco/db/l3/device_handling_db.py:160 +#: neutron/plugins/cisco/db/l3/device_handling_db.py:158 msgid "There is no virtual management network. Please create one." msgstr "" -#: neutron/plugins/cisco/db/l3/device_handling_db.py:182 +#: neutron/plugins/cisco/db/l3/device_handling_db.py:180 msgid "" "The security group for the virtual management network does not have " "unique name. Please ensure that it is." msgstr "" -#: neutron/plugins/cisco/db/l3/device_handling_db.py:187 +#: neutron/plugins/cisco/db/l3/device_handling_db.py:185 msgid "" "There is no security group for the virtual management network. Please " "create one." msgstr "" -#: neutron/plugins/cisco/db/l3/device_handling_db.py:201 +#: neutron/plugins/cisco/db/l3/device_handling_db.py:199 msgid "Error loading hosting device driver" msgstr "" -#: neutron/plugins/cisco/db/l3/device_handling_db.py:214 +#: neutron/plugins/cisco/db/l3/device_handling_db.py:212 msgid "Error loading plugging driver" msgstr "" -#: neutron/plugins/cisco/db/l3/device_handling_db.py:330 +#: neutron/plugins/cisco/db/l3/device_handling_db.py:328 #, python-format msgid "Cisco cfg agent %s is not alive" msgstr "" -#: neutron/plugins/cisco/db/l3/device_handling_db.py:367 +#: neutron/plugins/cisco/db/l3/device_handling_db.py:365 msgid "" "Not all Nova services are up and running. Skipping this CSR1kv vm create " "request." msgstr "" -#: neutron/plugins/cisco/db/l3/device_handling_db.py:404 +#: neutron/plugins/cisco/db/l3/device_handling_db.py:402 msgid "Created a CSR1kv hosting device VM" msgstr "" -#: neutron/plugins/cisco/db/l3/device_handling_db.py:422 +#: neutron/plugins/cisco/db/l3/device_handling_db.py:420 #, python-format msgid "Failed to delete hosting device %s service VM. Will un-register it anyway." msgstr "" -#: neutron/plugins/cisco/db/l3/device_handling_db.py:463 +#: neutron/plugins/cisco/db/l3/device_handling_db.py:461 msgid "There are no active Cisco cfg agents" msgstr "" -#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:45 +#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:43 msgid "" "Time in seconds between renewed scheduling attempts of non-scheduled " "routers." msgstr "" -#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:53 +#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:51 msgid "Router could not be created due to internal error." msgstr "" -#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:57 +#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:55 msgid "Internal error during router processing." msgstr "" -#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:61 +#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:59 #, python-format msgid "Could not get binding information for router %(router_id)s." msgstr "" -#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:316 +#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:314 #, python-format msgid "Attempting to schedule router %s." msgstr "" -#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:328 +#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:326 #, python-format msgid "Successfully scheduled router %(r_id)s to hosting device %(d_id)s" msgstr "" -#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:335 +#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:333 #, python-format msgid "Un-schedule router %s." msgstr "" -#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:348 +#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:346 #, python-format msgid "Backlogging router %s for renewed scheduling attempt later" msgstr "" -#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:355 +#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:353 #, python-format msgid "Router %s removed from backlog" msgstr "" -#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:365 +#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:363 msgid "Processing router (scheduling) backlog" msgstr "" -#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:385 +#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:383 msgid "Synchronizing router (scheduling) backlog" msgstr "" -#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:408 +#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:406 #, python-format msgid "DB inconsistency: No type and hosting info associated with router %s" msgstr "" -#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:413 +#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:411 #, python-format msgid "DB inconsistency: Multiple type and hosting info associated with router %s" msgstr "" -#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:436 +#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:434 #, python-format msgid "DB inconsistency: No hosting info associated with router %s" msgstr "" -#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:513 +#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:511 #, python-format msgid "Failed to allocate hosting port for port %s" msgstr "" -#: neutron/plugins/cisco/l3/service_vm_lib.py:34 +#: neutron/plugins/cisco/l3/service_vm_lib.py:30 msgid "Path to templates for hosting devices." msgstr "" -#: neutron/plugins/cisco/l3/service_vm_lib.py:37 +#: neutron/plugins/cisco/l3/service_vm_lib.py:33 msgid "Path to config drive files for service VM instances." msgstr "" -#: neutron/plugins/cisco/l3/service_vm_lib.py:71 +#: neutron/plugins/cisco/l3/service_vm_lib.py:67 #, python-format msgid "Failure determining running Nova services: %s" msgstr "" -#: neutron/plugins/cisco/l3/service_vm_lib.py:88 +#: neutron/plugins/cisco/l3/service_vm_lib.py:84 #, python-format msgid "Failed to get status of service VM instance %(id)s, due to %(err)s" msgstr "" -#: neutron/plugins/cisco/l3/service_vm_lib.py:104 +#: neutron/plugins/cisco/l3/service_vm_lib.py:100 #, python-format msgid "Failure finding needed Nova resource: %s" msgstr "" -#: neutron/plugins/cisco/l3/service_vm_lib.py:126 +#: neutron/plugins/cisco/l3/service_vm_lib.py:122 #, python-format msgid "Failed to create service VM instance: %s" msgstr "" -#: neutron/plugins/cisco/l3/service_vm_lib.py:142 +#: neutron/plugins/cisco/l3/service_vm_lib.py:138 #, python-format msgid "Failed to delete service VM instance %(id)s, due to %(err)s" msgstr "" -#: neutron/plugins/cisco/l3/hosting_device_drivers/csr1kv_hd_driver.py:34 +#: neutron/plugins/cisco/l3/hosting_device_drivers/csr1kv_hd_driver.py:32 msgid "CSR1kv configdrive template file." msgstr "" -#: neutron/plugins/cisco/l3/hosting_device_drivers/csr1kv_hd_driver.py:68 +#: neutron/plugins/cisco/l3/hosting_device_drivers/csr1kv_hd_driver.py:66 #, python-format msgid "Failed to create config file: %s. Trying toclean up." msgstr "" -#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:42 +#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:40 msgid "Name of N1kv port profile for management ports." msgstr "" -#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:44 +#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:42 msgid "" "Name of N1kv port profile for T1 ports (i.e., ports carrying traffic from" " VXLAN segmented networks)." msgstr "" -#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:47 +#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:45 msgid "" "Name of N1kv port profile for T2 ports (i.e., ports carrying traffic from" " VLAN segmented networks)." msgstr "" -#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:50 +#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:48 msgid "" "Name of N1kv network profile for T1 networks (i.e., trunk networks for " "VXLAN segmented traffic)." msgstr "" -#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:53 +#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:51 msgid "" "Name of N1kv network profile for T2 networks (i.e., trunk networks for " "VLAN segmented traffic)." msgstr "" -#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:109 +#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:107 #, python-format msgid "" "The %(resource)s %(name)s does not have unique name. Please refer to " "admin guide and create one." msgstr "" -#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:114 +#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:112 #, python-format msgid "" "There is no %(resource)s %(name)s. Please refer to admin guide and create" " one." msgstr "" -#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:214 +#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:212 #, python-format msgid "Error %s when creating service VM resources. Cleaning up." msgstr "" -#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:285 +#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:283 #, python-format msgid "Aborting resource deletion after %d unsuccessful attempts" msgstr "" -#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:291 +#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:289 #, python-format msgid "Resource deletion attempt %d starting" msgstr "" -#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:310 +#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:308 msgid "Resource deletion succeeded" msgstr "" -#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:321 +#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:319 #, python-format msgid "Failed to delete %(resource_name) %(net_id)s for service vm due to %(err)s" msgstr "" -#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:413 +#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:411 #, python-format msgid "Updating trunk: %(action)s VLAN %(tag)d for network_id %(id)s" msgstr "" -#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:453 +#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:451 #, python-format msgid "Hosting port DB inconsistency for hosting device %s" msgstr "" -#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:460 +#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:458 #, python-format msgid "" "Attempt %(attempt)d to find trunk ports for hosting device %(hd_id)s " "failed. Trying again in %(time)d seconds." msgstr "" -#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:506 +#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:504 #, python-format msgid "Port trunk pair DB inconsistency for port %s" msgstr "" -#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:79 +#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:75 #, python-format msgid "%(module)s.%(name)s init done" msgstr "" -#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:120 +#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:116 #, python-format msgid "No %s Plugin loaded" msgstr "" -#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:121 +#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:117 #, python-format msgid "%(plugin_key)s: %(function_name)s with args %(args)s ignored" msgstr "" -#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:145 +#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:141 msgid "create_network() called" msgstr "" -#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:158 +#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:154 #, python-format msgid "Provider network added to DB: %(network_id)s, %(vlan_id)s" msgstr "" -#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:169 +#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:165 msgid "update_network() called" msgstr "" -#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:193 +#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:189 #, python-format msgid "Provider network removed from DB: %s" msgstr "" -#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:235 +#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:231 msgid "create_port() called" msgstr "" -#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:261 +#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:257 msgid "update_port() called" msgstr "" -#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:273 +#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:269 msgid "delete_port() called" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_client.py:226 +#: neutron/plugins/cisco/n1kv/n1kv_client.py:223 msgid "Logical network" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_client.py:251 +#: neutron/plugins/cisco/n1kv/n1kv_client.py:248 msgid "network_segment_pool" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_client.py:298 +#: neutron/plugins/cisco/n1kv/n1kv_client.py:295 msgid "Invalid input for CIDR" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_client.py:440 +#: neutron/plugins/cisco/n1kv/n1kv_client.py:437 #, python-format msgid "req: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_client.py:450 +#: neutron/plugins/cisco/n1kv/n1kv_client.py:447 #, python-format msgid "status_code %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_client.py:458 +#: neutron/plugins/cisco/n1kv/n1kv_client.py:455 #, python-format msgid "VSM: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:129 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:124 msgid "_setup_vsm" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:148 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:143 msgid "_populate_policy_profiles" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:175 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:170 msgid "No policy profile populated from VSM" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:212 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:207 #: neutron/plugins/linuxbridge/lb_neutron_plugin.py:342 -#: neutron/plugins/mlnx/mlnx_plugin.py:226 neutron/plugins/nuage/plugin.py:413 +#: neutron/plugins/mlnx/mlnx_plugin.py:226 neutron/plugins/nuage/plugin.py:415 #: neutron/plugins/openvswitch/ovs_neutron_plugin.py:414 msgid "provider:network_type required" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:216 -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:230 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:211 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:225 #: neutron/plugins/linuxbridge/lb_neutron_plugin.py:352 -#: neutron/plugins/mlnx/mlnx_plugin.py:256 neutron/plugins/nuage/plugin.py:423 +#: neutron/plugins/mlnx/mlnx_plugin.py:256 neutron/plugins/nuage/plugin.py:425 #: neutron/plugins/openvswitch/ovs_neutron_plugin.py:424 #: neutron/plugins/openvswitch/ovs_neutron_plugin.py:443 msgid "provider:segmentation_id required" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:219 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:214 msgid "provider:segmentation_id out of range (1 through 4094)" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:224 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:219 msgid "provider:physical_network specified for Overlay network" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:233 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:228 msgid "provider:segmentation_id out of range (5000+)" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:237 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:232 #: neutron/plugins/linuxbridge/lb_neutron_plugin.py:374 #: neutron/plugins/mlnx/mlnx_plugin.py:242 #: neutron/plugins/openvswitch/ovs_neutron_plugin.py:459 @@ -6330,7 +6341,7 @@ msgstr "" msgid "provider:network_type %s not supported" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:248 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:243 #: neutron/plugins/linuxbridge/lb_neutron_plugin.py:380 #: neutron/plugins/mlnx/mlnx_plugin.py:282 #: neutron/plugins/openvswitch/ovs_neutron_plugin.py:465 @@ -6338,166 +6349,166 @@ msgstr "" msgid "Unknown provider:physical_network %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:252 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:247 #: neutron/plugins/linuxbridge/lb_neutron_plugin.py:386 -#: neutron/plugins/mlnx/mlnx_plugin.py:288 neutron/plugins/nuage/plugin.py:420 +#: neutron/plugins/mlnx/mlnx_plugin.py:288 neutron/plugins/nuage/plugin.py:422 #: neutron/plugins/openvswitch/ovs_neutron_plugin.py:471 msgid "provider:physical_network required" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:430 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:425 #, python-format msgid "_populate_member_segments %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:469 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:464 msgid "Invalid pairing supplied" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:474 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:469 #, python-format msgid "Invalid UUID supplied in %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:475 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:470 msgid "Invalid UUID supplied" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:504 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:499 #, python-format msgid "Cannot add a trunk segment '%s' as a member of another trunk segment" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:509 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:504 #, python-format msgid "Cannot add vlan segment '%s' as a member of a vxlan trunk segment" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:515 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:510 #, python-format msgid "Network UUID '%s' belongs to a different physical network" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:520 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:515 #, python-format msgid "Cannot add vxlan segment '%s' as a member of a vlan trunk segment" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:525 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:520 #, python-format msgid "Vlan tag '%s' is out of range" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:528 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:523 #, python-format msgid "Vlan tag '%s' is not an integer value" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:533 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:528 #, python-format msgid "%s is not a valid uuid" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:580 -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:583 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:575 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:578 msgid "n1kv:profile_id does not exist" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:595 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:590 msgid "_send_create_logical_network" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:618 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:613 #, python-format msgid "_send_create_network_profile_request: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:628 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:623 #, python-format msgid "_send_update_network_profile_request: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:638 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:633 #, python-format msgid "_send_delete_network_profile_request: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:653 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:648 #, python-format msgid "_send_create_network_request: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:685 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:680 #, python-format msgid "_send_update_network_request: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:707 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:702 #, python-format msgid "add_segments=%s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:708 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:703 #, python-format msgid "del_segments=%s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:732 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:727 #, python-format msgid "_send_delete_network_request: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:772 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:767 #, python-format msgid "_send_create_subnet_request: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:782 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:777 #, python-format msgid "_send_update_subnet_request: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:793 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:788 #, python-format msgid "_send_delete_subnet_request: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:819 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:814 #, python-format msgid "_send_create_port_request: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:836 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:831 #, python-format msgid "_send_update_port_request: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:852 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:847 #, python-format msgid "_send_delete_port_request: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:883 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:878 #, python-format msgid "Create network: profile_id=%s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:891 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:886 #, python-format msgid "" "Physical_network %(phy_net)s, seg_type %(net_type)s, seg_id %(seg_id)s, " "multicast_ip %(multicast_ip)s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:903 -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:913 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:898 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:908 #, python-format msgid "Seg list %s " msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:954 -#: neutron/plugins/hyperv/hyperv_neutron_plugin.py:255 -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:198 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:949 +#: neutron/plugins/hyperv/hyperv_neutron_plugin.py:254 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:196 #: neutron/plugins/metaplugin/meta_neutron_plugin.py:226 #: neutron/plugins/mlnx/mlnx_plugin.py:369 #: neutron/plugins/openvswitch/ovs_neutron_plugin.py:519 @@ -6505,249 +6516,258 @@ msgstr "" msgid "Created network: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1012 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1007 #, python-format msgid "Updated network: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1026 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1021 #, python-format msgid "Cannot delete network '%s', delete the associated subnet first" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1030 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1025 #, python-format msgid "Cannot delete network '%s' that is member of a trunk segment" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1034 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1029 #, python-format msgid "Cannot delete network '%s' that is a member of a multi-segment network" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1062 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1057 #, python-format msgid "Get network: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1084 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1079 msgid "Get networks" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1135 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1130 #, python-format msgid "Create port: profile_id=%s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1182 -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:305 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1177 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:303 #, python-format msgid "Created port: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1193 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1188 #, python-format msgid "Update port: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1256 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1251 #, python-format msgid "Get port: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1276 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1271 msgid "Get ports" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1292 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1287 msgid "Create subnet" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1302 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1297 #, python-format msgid "Created subnet: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1317 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1312 msgid "Update subnet" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1332 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1327 #, python-format msgid "Delete subnet: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1347 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1342 #, python-format msgid "Get subnet: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1367 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1362 msgid "Get subnets" msgstr "" -#: neutron/plugins/common/utils.py:30 +#: neutron/plugins/common/utils.py:33 +#, python-format +msgid "%(id)s is not a valid %(type)s identifier" +msgstr "" + +#: neutron/plugins/common/utils.py:38 +msgid "End of tunnel range is less than start of tunnel range" +msgstr "" + +#: neutron/plugins/common/utils.py:48 #, python-format msgid "%s is not a valid VLAN tag" msgstr "" -#: neutron/plugins/common/utils.py:34 +#: neutron/plugins/common/utils.py:52 msgid "End of VLAN range is less than start of VLAN range" msgstr "" -#: neutron/plugins/embrane/base_plugin.py:107 -#: neutron/plugins/embrane/agent/dispatcher.py:132 -#: neutron/services/loadbalancer/drivers/embrane/poller.py:56 -#: neutron/services/loadbalancer/drivers/embrane/agent/dispatcher.py:108 +#: neutron/plugins/embrane/base_plugin.py:105 +#: neutron/plugins/embrane/agent/dispatcher.py:130 +#: neutron/services/loadbalancer/drivers/embrane/poller.py:54 +#: neutron/services/loadbalancer/drivers/embrane/agent/dispatcher.py:106 msgid "Unhandled exception occurred" msgstr "" -#: neutron/plugins/embrane/base_plugin.py:172 -#: neutron/plugins/embrane/base_plugin.py:191 +#: neutron/plugins/embrane/base_plugin.py:170 +#: neutron/plugins/embrane/base_plugin.py:189 #, python-format msgid "The following routers have not physical match: %s" msgstr "" -#: neutron/plugins/embrane/base_plugin.py:177 +#: neutron/plugins/embrane/base_plugin.py:175 #, python-format msgid "Requested router: %s" msgstr "" -#: neutron/plugins/embrane/base_plugin.py:229 +#: neutron/plugins/embrane/base_plugin.py:227 #, python-format msgid "Deleting router=%s" msgstr "" -#: neutron/plugins/embrane/agent/operations/router_operations.py:97 +#: neutron/plugins/embrane/agent/operations/router_operations.py:95 #, python-format msgid "The router %s had no physical representation,likely already deleted" msgstr "" -#: neutron/plugins/embrane/agent/operations/router_operations.py:126 +#: neutron/plugins/embrane/agent/operations/router_operations.py:124 #, python-format msgid "Interface %s not found in the heleos back-end,likely already deleted" msgstr "" -#: neutron/plugins/embrane/common/config.py:23 -#: neutron/services/loadbalancer/drivers/embrane/config.py:25 +#: neutron/plugins/embrane/common/config.py:21 +#: neutron/services/loadbalancer/drivers/embrane/config.py:23 msgid "ESM management root address" msgstr "" -#: neutron/plugins/embrane/common/config.py:25 -#: neutron/services/loadbalancer/drivers/embrane/config.py:27 +#: neutron/plugins/embrane/common/config.py:23 +#: neutron/services/loadbalancer/drivers/embrane/config.py:25 msgid "ESM admin username." msgstr "" -#: neutron/plugins/embrane/common/config.py:28 -#: neutron/services/loadbalancer/drivers/embrane/config.py:30 +#: neutron/plugins/embrane/common/config.py:26 +#: neutron/services/loadbalancer/drivers/embrane/config.py:28 msgid "ESM admin password." msgstr "" -#: neutron/plugins/embrane/common/config.py:30 +#: neutron/plugins/embrane/common/config.py:28 msgid "Router image id (Embrane FW/VPN)" msgstr "" -#: neutron/plugins/embrane/common/config.py:32 +#: neutron/plugins/embrane/common/config.py:30 msgid "In band Security Zone id" msgstr "" -#: neutron/plugins/embrane/common/config.py:34 +#: neutron/plugins/embrane/common/config.py:32 msgid "Out of band Security Zone id" msgstr "" -#: neutron/plugins/embrane/common/config.py:36 +#: neutron/plugins/embrane/common/config.py:34 msgid "Management Security Zone id" msgstr "" -#: neutron/plugins/embrane/common/config.py:38 +#: neutron/plugins/embrane/common/config.py:36 msgid "Dummy user traffic Security Zone id" msgstr "" -#: neutron/plugins/embrane/common/config.py:40 -#: neutron/services/loadbalancer/drivers/embrane/config.py:42 +#: neutron/plugins/embrane/common/config.py:38 +#: neutron/services/loadbalancer/drivers/embrane/config.py:40 msgid "Shared resource pool id" msgstr "" -#: neutron/plugins/embrane/common/config.py:42 -#: neutron/services/loadbalancer/drivers/embrane/config.py:49 +#: neutron/plugins/embrane/common/config.py:40 +#: neutron/services/loadbalancer/drivers/embrane/config.py:47 msgid "Define if the requests have run asynchronously or not" msgstr "" -#: neutron/plugins/embrane/common/constants.py:49 -#: neutron/services/loadbalancer/drivers/embrane/constants.py:50 +#: neutron/plugins/embrane/common/constants.py:47 +#: neutron/services/loadbalancer/drivers/embrane/constants.py:48 #, python-format msgid "Dva is pending for the following reason: %s" msgstr "" -#: neutron/plugins/embrane/common/constants.py:50 +#: neutron/plugins/embrane/common/constants.py:48 msgid "" "Dva can't be found to execute the operation, probably was cancelled " "through the heleos UI" msgstr "" -#: neutron/plugins/embrane/common/constants.py:52 -#: neutron/services/loadbalancer/drivers/embrane/constants.py:53 +#: neutron/plugins/embrane/common/constants.py:50 +#: neutron/services/loadbalancer/drivers/embrane/constants.py:51 #, python-format msgid "Dva seems to be broken for reason %s" msgstr "" -#: neutron/plugins/embrane/common/constants.py:53 +#: neutron/plugins/embrane/common/constants.py:51 #, python-format msgid "Dva interface seems to be broken for reason %s" msgstr "" -#: neutron/plugins/embrane/common/constants.py:55 -#: neutron/services/loadbalancer/drivers/embrane/constants.py:54 +#: neutron/plugins/embrane/common/constants.py:53 +#: neutron/services/loadbalancer/drivers/embrane/constants.py:52 #, python-format msgid "Dva creation failed reason %s" msgstr "" +#: neutron/plugins/embrane/common/constants.py:54 +#: neutron/services/loadbalancer/drivers/embrane/constants.py:53 +#, python-format +msgid "Dva creation is in pending state for reason %s" +msgstr "" + #: neutron/plugins/embrane/common/constants.py:56 #: neutron/services/loadbalancer/drivers/embrane/constants.py:55 #, python-format -msgid "Dva creation is in pending state for reason %s" -msgstr "" - -#: neutron/plugins/embrane/common/constants.py:58 -#: neutron/services/loadbalancer/drivers/embrane/constants.py:57 -#, python-format msgid "Dva configuration failed for reason %s" msgstr "" -#: neutron/plugins/embrane/common/constants.py:59 +#: neutron/plugins/embrane/common/constants.py:57 #, python-format msgid "" "Failed to delete the backend router for reason %s. Please remove it " "manually through the heleos UI" msgstr "" -#: neutron/plugins/embrane/common/exceptions.py:22 +#: neutron/plugins/embrane/common/exceptions.py:20 #, python-format msgid "An unexpected error occurred:%(err_msg)s" msgstr "" -#: neutron/plugins/embrane/common/exceptions.py:26 +#: neutron/plugins/embrane/common/exceptions.py:24 #, python-format msgid "%(err_msg)s" msgstr "" -#: neutron/plugins/embrane/common/utils.py:45 +#: neutron/plugins/embrane/common/utils.py:43 msgid "No ip allocation set" msgstr "" -#: neutron/plugins/embrane/l2base/support_exceptions.py:22 +#: neutron/plugins/embrane/l2base/support_exceptions.py:20 #, python-format msgid "Cannot retrieve utif info for the following reason: %(err_msg)s" msgstr "" -#: neutron/plugins/embrane/l2base/ml2/ml2_support.py:46 +#: neutron/plugins/embrane/l2base/ml2/ml2_support.py:43 #, python-format msgid "" "Network type %s not supported. Please be sure that tenant_network_type is" " vlan" msgstr "" -#: neutron/plugins/hyperv/db.py:38 +#: neutron/plugins/hyperv/db.py:37 #: neutron/plugins/linuxbridge/db/l2network_db_v2.py:113 #: neutron/plugins/openvswitch/ovs_db_v2.py:131 #, python-format @@ -6756,12 +6776,12 @@ msgid "" "pool" msgstr "" -#: neutron/plugins/hyperv/db.py:53 +#: neutron/plugins/hyperv/db.py:52 #, python-format msgid "Reserving flat physical network %(physical_network)s from pool" msgstr "" -#: neutron/plugins/hyperv/db.py:76 +#: neutron/plugins/hyperv/db.py:75 #: neutron/plugins/linuxbridge/db/l2network_db_v2.py:136 #: neutron/plugins/openvswitch/ovs_db_v2.py:155 #, python-format @@ -6770,19 +6790,19 @@ msgid "" "%(physical_network)s from pool" msgstr "" -#: neutron/plugins/hyperv/db.py:133 +#: neutron/plugins/hyperv/db.py:132 #, python-format msgid "Releasing vlan %(vlan_id)s on physical network %(physical_network)s" msgstr "" -#: neutron/plugins/hyperv/db.py:138 +#: neutron/plugins/hyperv/db.py:137 #: neutron/plugins/linuxbridge/db/l2network_db_v2.py:177 #: neutron/plugins/openvswitch/ovs_db_v2.py:196 #, python-format msgid "vlan_id %(vlan_id)s on physical network %(physical_network)s not found" msgstr "" -#: neutron/plugins/hyperv/db.py:163 neutron/plugins/hyperv/db.py:176 +#: neutron/plugins/hyperv/db.py:162 neutron/plugins/hyperv/db.py:175 #: neutron/plugins/linuxbridge/db/l2network_db_v2.py:64 #: neutron/plugins/linuxbridge/db/l2network_db_v2.py:83 #: neutron/plugins/ml2/drivers/type_vlan.py:130 @@ -6795,37 +6815,37 @@ msgid "" "pool" msgstr "" -#: neutron/plugins/hyperv/hyperv_neutron_plugin.py:46 +#: neutron/plugins/hyperv/hyperv_neutron_plugin.py:45 msgid "Network type for tenant networks (local, flat, vlan or none)" msgstr "" -#: neutron/plugins/hyperv/hyperv_neutron_plugin.py:50 -#: neutron/plugins/linuxbridge/common/config.py:33 +#: neutron/plugins/hyperv/hyperv_neutron_plugin.py:49 +#: neutron/plugins/linuxbridge/common/config.py:30 #: neutron/plugins/mlnx/common/config.py:30 msgid "List of :: or " msgstr "" -#: neutron/plugins/hyperv/hyperv_neutron_plugin.py:78 -#: neutron/plugins/hyperv/hyperv_neutron_plugin.py:100 +#: neutron/plugins/hyperv/hyperv_neutron_plugin.py:77 +#: neutron/plugins/hyperv/hyperv_neutron_plugin.py:99 #, python-format msgid "segmentation_id specified for %s network" msgstr "" -#: neutron/plugins/hyperv/hyperv_neutron_plugin.py:85 +#: neutron/plugins/hyperv/hyperv_neutron_plugin.py:84 #, python-format msgid "physical_network specified for %s network" msgstr "" -#: neutron/plugins/hyperv/hyperv_neutron_plugin.py:127 +#: neutron/plugins/hyperv/hyperv_neutron_plugin.py:126 msgid "physical_network not provided" msgstr "" -#: neutron/plugins/hyperv/hyperv_neutron_plugin.py:179 +#: neutron/plugins/hyperv/hyperv_neutron_plugin.py:178 #, python-format msgid "Invalid tenant_network_type: %s. Agent terminated!" msgstr "" -#: neutron/plugins/hyperv/hyperv_neutron_plugin.py:204 +#: neutron/plugins/hyperv/hyperv_neutron_plugin.py:203 #: neutron/plugins/linuxbridge/lb_neutron_plugin.py:303 #: neutron/plugins/ml2/drivers/type_vlan.py:96 #: neutron/plugins/mlnx/mlnx_plugin.py:187 @@ -6834,12 +6854,12 @@ msgstr "" msgid "Network VLAN ranges: %s" msgstr "" -#: neutron/plugins/hyperv/hyperv_neutron_plugin.py:229 +#: neutron/plugins/hyperv/hyperv_neutron_plugin.py:228 #, python-format msgid "Network type %s not supported" msgstr "" -#: neutron/plugins/hyperv/rpc_callbacks.py:76 +#: neutron/plugins/hyperv/rpc_callbacks.py:75 #: neutron/plugins/linuxbridge/lb_neutron_plugin.py:114 #: neutron/plugins/mlnx/rpc_callbacks.py:77 #: neutron/plugins/openvswitch/ovs_neutron_plugin.py:117 @@ -6847,20 +6867,20 @@ msgstr "" msgid "Device %(device)s no longer exists on %(agent_id)s" msgstr "" -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:50 +#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:48 msgid "" "List of : where the physical networks can be " "expressed with wildcards, e.g.: .\"*:external\"" msgstr "" -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:56 +#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:54 msgid "Private vswitch name used for local networks" msgstr "" -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:58 -#: neutron/plugins/linuxbridge/common/config.py:64 +#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:56 +#: neutron/plugins/linuxbridge/common/config.py:61 #: neutron/plugins/mlnx/common/config.py:67 -#: neutron/plugins/nec/common/config.py:29 +#: neutron/plugins/nec/common/config.py:28 #: neutron/plugins/oneconvergence/lib/config.py:47 #: neutron/plugins/openvswitch/common/config.py:66 #: neutron/plugins/ryu/common/config.py:43 @@ -6870,14 +6890,14 @@ msgid "" "device changes." msgstr "" -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:62 +#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:60 msgid "" "Enables metrics collections for switch ports by using Hyper-V's metric " "APIs. Collected data can by retrieved by other apps and services, e.g.: " "Ceilometer. Requires Hyper-V / Windows Server 2012 and above" msgstr "" -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:69 +#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:67 msgid "" "Specifies the maximum number of retries to enable Hyper-V's port metrics " "collection. The agent will try to enable the feature once every " @@ -6885,780 +6905,780 @@ msgid "" "succeedes." msgstr "" -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:151 +#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:149 #, python-format msgid "Failed reporting state! %s" msgstr "" -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:186 +#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:184 #, python-format msgid "Invalid physical network mapping: %s" msgstr "" -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:207 +#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:205 #, python-format msgid "network_delete received. Deleting network %s" msgstr "" -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:213 +#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:211 #, python-format msgid "Network %s not defined on agent." msgstr "" -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:216 +#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:214 msgid "port_delete received" msgstr "" -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:221 +#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:219 msgid "port_update received" msgstr "" -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:243 +#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:241 #: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:130 #, python-format msgid "Provisioning network %s" msgstr "" -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:256 +#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:254 #, python-format msgid "" "Cannot provision unknown network type %(network_type)s for network " "%(net_uuid)s" msgstr "" -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:268 +#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:266 #, python-format msgid "Reclaiming local network %s" msgstr "" -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:276 +#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:274 #, python-format msgid "Binding port %s" msgstr "" -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:289 +#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:287 #, python-format msgid "Binding VLAN ID %(segmentation_id)s to switch port %(port_id)s" msgstr "" -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:302 +#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:300 #: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:115 #, python-format msgid "Unsupported network type %s" msgstr "" -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:311 +#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:309 #, python-format msgid "Network %s is not avalailable on this agent" msgstr "" -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:315 +#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:313 #, python-format msgid "Unbinding port %s" msgstr "" -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:328 +#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:326 #, python-format msgid "Port metrics enabled for port: %s" msgstr "" -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:332 +#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:330 #, python-format msgid "Port metrics raw enabling for port: %s" msgstr "" -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:357 +#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:355 #: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:294 #, python-format msgid "No port %s defined on agent." msgstr "" -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:374 +#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:372 #, python-format msgid "Adding port %s" msgstr "" -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:377 +#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:375 #, python-format msgid "Port %(device)s updated. Details: %(device_details)s" msgstr "" -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:403 +#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:401 #, python-format msgid "Removing port %s" msgstr "" -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:411 +#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:409 #, python-format msgid "Removing port failed for device %(device)s: %(e)s" msgstr "" -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:436 -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:995 -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1350 +#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:434 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:994 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1353 #: neutron/plugins/sriovnicagent/sriov_nic_agent.py:254 msgid "Agent out of sync with plugin!" msgstr "" -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:444 +#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:442 msgid "Agent loop has new devices!" msgstr "" -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:451 +#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:449 #, python-format msgid "Error in agent event loop: %s" msgstr "" -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:459 +#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:457 #: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:393 #, python-format msgid "Loop iteration exceeded interval (%(polling_interval)s vs. %(elapsed)s)" msgstr "" -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:472 -#: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:268 -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:1036 -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1542 +#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:470 +#: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:266 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:1035 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1545 #: neutron/plugins/sriovnicagent/sriov_nic_agent.py:350 msgid "Agent initialized successfully, now running... " msgstr "" -#: neutron/plugins/hyperv/agent/security_groups_driver.py:62 +#: neutron/plugins/hyperv/agent/security_groups_driver.py:61 #, python-format msgid "Hyper-V Exception: %(hyperv_exeption)s while adding rule: %(rule)s" msgstr "" -#: neutron/plugins/hyperv/agent/security_groups_driver.py:72 +#: neutron/plugins/hyperv/agent/security_groups_driver.py:71 #, python-format msgid "Hyper-V Exception: %(hyperv_exeption)s while removing rule: %(rule)s" msgstr "" -#: neutron/plugins/hyperv/agent/security_groups_driver.py:92 +#: neutron/plugins/hyperv/agent/security_groups_driver.py:91 msgid "Aplying port filter." msgstr "" -#: neutron/plugins/hyperv/agent/security_groups_driver.py:95 +#: neutron/plugins/hyperv/agent/security_groups_driver.py:94 msgid "Updating port rules." msgstr "" -#: neutron/plugins/hyperv/agent/security_groups_driver.py:108 +#: neutron/plugins/hyperv/agent/security_groups_driver.py:107 #, python-format msgid "Creating %(new)s new rules, removing %(old)s old rules." msgstr "" -#: neutron/plugins/hyperv/agent/security_groups_driver.py:119 +#: neutron/plugins/hyperv/agent/security_groups_driver.py:118 msgid "Removing port filter" msgstr "" -#: neutron/plugins/hyperv/agent/utils.py:36 +#: neutron/plugins/hyperv/agent/utils.py:34 #, python-format msgid "HyperVException: %(msg)s" msgstr "" -#: neutron/plugins/hyperv/agent/utils.py:81 +#: neutron/plugins/hyperv/agent/utils.py:79 #, python-format msgid "Vnic not found: %s" msgstr "" -#: neutron/plugins/hyperv/agent/utils.py:116 +#: neutron/plugins/hyperv/agent/utils.py:114 #, python-format msgid "Job failed with error %d" msgstr "" -#: neutron/plugins/hyperv/agent/utils.py:135 +#: neutron/plugins/hyperv/agent/utils.py:133 #, python-format msgid "" "WMI job failed with status %(job_state)d. Error details: %(err_sum_desc)s" " - %(err_desc)s - Error code: %(err_code)d" msgstr "" -#: neutron/plugins/hyperv/agent/utils.py:144 +#: neutron/plugins/hyperv/agent/utils.py:142 #, python-format msgid "WMI job failed with status %(job_state)d. Error details: %(error)s" msgstr "" -#: neutron/plugins/hyperv/agent/utils.py:148 +#: neutron/plugins/hyperv/agent/utils.py:146 #, python-format msgid "WMI job failed with status %d. No error description available" msgstr "" -#: neutron/plugins/hyperv/agent/utils.py:153 +#: neutron/plugins/hyperv/agent/utils.py:151 #, python-format msgid "WMI job succeeded: %(desc)s, Elapsed=%(elap)s" msgstr "" -#: neutron/plugins/hyperv/agent/utils.py:167 +#: neutron/plugins/hyperv/agent/utils.py:165 #, python-format msgid "Failed creating port for %s" msgstr "" -#: neutron/plugins/hyperv/agent/utils.py:190 +#: neutron/plugins/hyperv/agent/utils.py:188 #, python-format msgid "" "Failed to disconnect port %(switch_port_name)s from switch " "%(vswitch_name)s with error %(ret_val)s" msgstr "" -#: neutron/plugins/hyperv/agent/utils.py:201 +#: neutron/plugins/hyperv/agent/utils.py:199 #, python-format msgid "" "Failed to delete port %(switch_port_name)s from switch %(vswitch_name)s " "with error %(ret_val)s" msgstr "" -#: neutron/plugins/hyperv/agent/utils.py:208 -#: neutron/plugins/hyperv/agent/utilsv2.py:135 +#: neutron/plugins/hyperv/agent/utils.py:206 +#: neutron/plugins/hyperv/agent/utilsv2.py:133 #, python-format msgid "VSwitch not found: %s" msgstr "" -#: neutron/plugins/hyperv/agent/utils.py:249 -#: neutron/plugins/hyperv/agent/utils.py:253 +#: neutron/plugins/hyperv/agent/utils.py:247 +#: neutron/plugins/hyperv/agent/utils.py:251 msgid "Metrics collection is not supported on this version of Hyper-V" msgstr "" -#: neutron/plugins/hyperv/agent/utilsfactory.py:32 +#: neutron/plugins/hyperv/agent/utilsfactory.py:31 msgid "Force V1 WMI utility classes" msgstr "" -#: neutron/plugins/hyperv/agent/utilsfactory.py:61 +#: neutron/plugins/hyperv/agent/utilsfactory.py:60 msgid "" "V1 virtualization namespace no longer supported on Windows Server / " "Hyper-V Server 2012 R2 or above." msgstr "" -#: neutron/plugins/hyperv/agent/utilsfactory.py:68 +#: neutron/plugins/hyperv/agent/utilsfactory.py:67 #, python-format msgid "Loading class: %(module_name)s.%(class_name)s" msgstr "" -#: neutron/plugins/hyperv/agent/utilsv2.py:158 -#: neutron/plugins/hyperv/agent/utilsv2.py:318 +#: neutron/plugins/hyperv/agent/utilsv2.py:156 +#: neutron/plugins/hyperv/agent/utilsv2.py:316 #, python-format msgid "Port Allocation not found: %s" msgstr "" -#: neutron/plugins/hyperv/agent/utilsv2.py:268 +#: neutron/plugins/hyperv/agent/utilsv2.py:266 #, python-format msgid "Cannot get VM summary data for: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_api.py:77 +#: neutron/plugins/ibm/sdnve_api.py:75 #, python-format msgid "The IP addr of available SDN-VE controllers: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_api.py:80 +#: neutron/plugins/ibm/sdnve_api.py:78 #, python-format msgid "The SDN-VE controller IP address: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_api.py:97 +#: neutron/plugins/ibm/sdnve_api.py:95 #, python-format msgid "unable to serialize object type: '%s'" msgstr "" -#: neutron/plugins/ibm/sdnve_api.py:164 +#: neutron/plugins/ibm/sdnve_api.py:162 #, python-format msgid "" "Sending request to SDN-VE. url: %(myurl)s method: %(method)s body: " "%(body)s header: %(header)s " msgstr "" -#: neutron/plugins/ibm/sdnve_api.py:177 +#: neutron/plugins/ibm/sdnve_api.py:175 #, python-format msgid "Error: Could not reach server: %(url)s Exception: %(excp)s." msgstr "" -#: neutron/plugins/ibm/sdnve_api.py:184 +#: neutron/plugins/ibm/sdnve_api.py:182 #, python-format msgid "Error message: %(reply)s -- Status: %(status)s" msgstr "" -#: neutron/plugins/ibm/sdnve_api.py:187 +#: neutron/plugins/ibm/sdnve_api.py:185 #, python-format msgid "Received response status: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_api.py:194 +#: neutron/plugins/ibm/sdnve_api.py:192 #, python-format msgid "Deserialized body: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_api.py:236 +#: neutron/plugins/ibm/sdnve_api.py:234 msgid "Bad resource for forming a list request" msgstr "" -#: neutron/plugins/ibm/sdnve_api.py:246 +#: neutron/plugins/ibm/sdnve_api.py:244 msgid "Bad resource for forming a show request" msgstr "" -#: neutron/plugins/ibm/sdnve_api.py:256 +#: neutron/plugins/ibm/sdnve_api.py:254 msgid "Bad resource for forming a create request" msgstr "" -#: neutron/plugins/ibm/sdnve_api.py:268 +#: neutron/plugins/ibm/sdnve_api.py:266 msgid "Bad resource for forming a update request" msgstr "" -#: neutron/plugins/ibm/sdnve_api.py:279 +#: neutron/plugins/ibm/sdnve_api.py:277 msgid "Bad resource for forming a delete request" msgstr "" -#: neutron/plugins/ibm/sdnve_api.py:307 +#: neutron/plugins/ibm/sdnve_api.py:305 #, python-format msgid "Non matching tenant and network types: %(ttype)s %(ntype)s" msgstr "" -#: neutron/plugins/ibm/sdnve_api.py:369 +#: neutron/plugins/ibm/sdnve_api.py:367 #, python-format msgid "Did not find tenant: %r" msgstr "" -#: neutron/plugins/ibm/sdnve_api_fake.py:32 +#: neutron/plugins/ibm/sdnve_api_fake.py:30 msgid "Fake SDNVE controller initialized" msgstr "" -#: neutron/plugins/ibm/sdnve_api_fake.py:35 +#: neutron/plugins/ibm/sdnve_api_fake.py:33 msgid "Fake SDNVE controller: list" msgstr "" -#: neutron/plugins/ibm/sdnve_api_fake.py:39 +#: neutron/plugins/ibm/sdnve_api_fake.py:37 msgid "Fake SDNVE controller: show" msgstr "" -#: neutron/plugins/ibm/sdnve_api_fake.py:43 +#: neutron/plugins/ibm/sdnve_api_fake.py:41 msgid "Fake SDNVE controller: create" msgstr "" -#: neutron/plugins/ibm/sdnve_api_fake.py:47 +#: neutron/plugins/ibm/sdnve_api_fake.py:45 msgid "Fake SDNVE controller: update" msgstr "" -#: neutron/plugins/ibm/sdnve_api_fake.py:51 +#: neutron/plugins/ibm/sdnve_api_fake.py:49 msgid "Fake SDNVE controller: delete" msgstr "" -#: neutron/plugins/ibm/sdnve_api_fake.py:55 +#: neutron/plugins/ibm/sdnve_api_fake.py:53 msgid "Fake SDNVE controller: get tenant by id" msgstr "" -#: neutron/plugins/ibm/sdnve_api_fake.py:59 +#: neutron/plugins/ibm/sdnve_api_fake.py:57 msgid "Fake SDNVE controller: check and create tenant" msgstr "" -#: neutron/plugins/ibm/sdnve_api_fake.py:63 +#: neutron/plugins/ibm/sdnve_api_fake.py:61 msgid "Fake SDNVE controller: get controller" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:152 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:150 msgid "Set a new controller if needed." msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:158 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:156 #, python-format msgid "Set the controller to a new controller: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:166 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:164 #, python-format msgid "Original SDN-VE HTTP request: %(orig)s; New request: %(new)s" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:176 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:174 #, python-format msgid "Create network in progress: %r" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:185 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:183 msgid "Create net failed: no SDN-VE tenant." msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:196 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:194 #, python-format msgid "Create net failed in SDN-VE: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:203 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:201 #, python-format msgid "Update network in progress: %r" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:223 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:221 #, python-format msgid "Update net failed in SDN-VE: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:229 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:227 #, python-format msgid "Delete network in progress: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:239 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:237 #, python-format msgid "Delete net failed after deleting the network in DB: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:244 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:242 #, python-format msgid "Get network in progress: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:250 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:248 msgid "Get networks in progress" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:260 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:258 #, python-format msgid "Create port in progress: %r" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:276 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:274 msgid "Create port does not have tenant id info" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:282 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:280 #, python-format msgid "Create port does not have tenant id info; obtained is: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:303 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:301 #, python-format msgid "Create port failed in SDN-VE: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:310 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:308 #, python-format msgid "Update port in progress: %r" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:337 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:335 #, python-format msgid "Update port failed in SDN-VE: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:343 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:341 #, python-format msgid "Delete port in progress: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:356 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:354 #, python-format msgid "Delete port operation failed in SDN-VE after deleting the port from DB: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:365 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:363 #, python-format msgid "Create subnet in progress: %r" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:377 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:375 #, python-format msgid "Create subnet failed in SDN-VE: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:379 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:377 #, python-format msgid "Subnet created: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:385 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:383 #, python-format msgid "Update subnet in progress: %r" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:410 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:408 #, python-format msgid "Update subnet failed in SDN-VE: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:416 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:414 #, python-format msgid "Delete subnet in progress: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:421 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:419 #, python-format msgid "" "Delete subnet operation failed in SDN-VE after deleting the subnet from " "DB: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:430 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:428 #, python-format msgid "Create router in progress: %r" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:433 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:431 #, python-format msgid "Ignoring admin_state_up=False for router=%r. Overriding with True" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:443 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:441 msgid "Create router failed: no SDN-VE tenant." msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:451 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:449 #, python-format msgid "Create router failed in SDN-VE: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:453 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:451 #, python-format msgid "Router created: %r" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:458 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:456 #, python-format msgid "Update router in progress: id=%(id)s router=%(router)r" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:465 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:463 msgid "admin_state_up=False routers are not supported." msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:489 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:487 #, python-format msgid "Update router failed in SDN-VE: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:495 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:493 #, python-format msgid "Delete router in progress: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:502 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:500 #, python-format msgid "" "Delete router operation failed in SDN-VE after deleting the router in DB:" " %s" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:507 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:505 #, python-format msgid "" "Add router interface in progress: router_id=%(router_id)s " "interface_info=%(interface_info)r" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:515 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:513 #, python-format msgid "SdnvePluginV2.add_router_interface called. Port info: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:529 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:527 #, python-format msgid "Update router-add-interface failed in SDN-VE: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:532 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:530 #, python-format msgid "Added router interface: %r" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:536 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:534 #, python-format msgid "" "Add router interface only called: router_id=%(router_id)s " "interface_info=%(interface_info)r" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:546 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:544 msgid "" "SdnvePluginV2._add_router_interface_only: failed to add the interface in " "the roll back. of a remove_router_interface operation" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:552 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:550 #, python-format msgid "" "Remove router interface in progress: router_id=%(router_id)s " "interface_info=%(interface_info)r" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:561 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:559 msgid "No port ID" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:563 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:561 #, python-format msgid "SdnvePluginV2.remove_router_interface port: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:567 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:565 msgid "No fixed IP" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:572 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:570 #, python-format msgid "SdnvePluginV2.remove_router_interface subnet_id: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:595 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:593 #, python-format msgid "Update router-remove-interface failed SDN-VE: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:616 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:614 #, python-format msgid "Create floatingip in progress: %r" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:627 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:625 #, python-format msgid "Creating floating ip operation failed in SDN-VE controller: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:630 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:628 #, python-format msgid "Created floatingip : %r" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:635 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:633 #, python-format msgid "Update floatingip in progress: %r" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:655 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:653 #, python-format msgid "Update floating ip failed in SDN-VE: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:661 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:659 #, python-format msgid "Delete floatingip in progress: %s" msgstr "" -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:666 +#: neutron/plugins/ibm/sdnve_neutron_plugin.py:664 #, python-format msgid "Delete floatingip failed in SDN-VE: %s" msgstr "" -#: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:138 +#: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:136 msgid "info_update received" msgstr "" -#: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:143 +#: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:141 #, python-format msgid "info_update received. New controlleris to be set to: %s" msgstr "" -#: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:149 +#: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:147 msgid "info_update received. New controlleris set to be out of band" msgstr "" -#: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:194 +#: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:192 #, python-format msgid "Mapping physical network %(physical_network)s to interface %(interface)s" msgstr "" -#: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:200 +#: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:198 #, python-format msgid "" "Interface %(interface)s for physical network %(physical_network)s does " "not exist. Agent terminated!" msgstr "" -#: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:218 +#: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:216 msgid "Agent in the rpc loop." msgstr "" -#: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:240 +#: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:238 #, python-format msgid "Controller IPs: %s" msgstr "" -#: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:262 -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1529 +#: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:260 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1532 #, python-format msgid "%s Agent terminated!" msgstr "" -#: neutron/plugins/ibm/common/config.py:28 +#: neutron/plugins/ibm/common/config.py:26 msgid "Whether to use a fake controller." msgstr "" -#: neutron/plugins/ibm/common/config.py:30 +#: neutron/plugins/ibm/common/config.py:28 msgid "Base URL for SDN-VE controller REST API." msgstr "" -#: neutron/plugins/ibm/common/config.py:32 +#: neutron/plugins/ibm/common/config.py:30 msgid "List of IP addresses of SDN-VE controller(s)." msgstr "" -#: neutron/plugins/ibm/common/config.py:34 +#: neutron/plugins/ibm/common/config.py:32 msgid "SDN-VE RPC subject." msgstr "" -#: neutron/plugins/ibm/common/config.py:36 +#: neutron/plugins/ibm/common/config.py:34 msgid "SDN-VE controller port number." msgstr "" -#: neutron/plugins/ibm/common/config.py:38 +#: neutron/plugins/ibm/common/config.py:36 msgid "SDN-VE request/response format." msgstr "" -#: neutron/plugins/ibm/common/config.py:40 +#: neutron/plugins/ibm/common/config.py:38 msgid "SDN-VE administrator user ID." msgstr "" -#: neutron/plugins/ibm/common/config.py:42 +#: neutron/plugins/ibm/common/config.py:40 msgid "SDN-VE administrator password." msgstr "" -#: neutron/plugins/ibm/common/config.py:44 -#: neutron/plugins/nec/common/config.py:24 +#: neutron/plugins/ibm/common/config.py:42 +#: neutron/plugins/nec/common/config.py:23 #: neutron/plugins/openvswitch/common/config.py:29 #: neutron/plugins/ryu/common/config.py:22 msgid "Integration bridge to use." msgstr "" -#: neutron/plugins/ibm/common/config.py:46 +#: neutron/plugins/ibm/common/config.py:44 msgid "Whether to reset the integration bridge before use." msgstr "" -#: neutron/plugins/ibm/common/config.py:48 +#: neutron/plugins/ibm/common/config.py:46 msgid "Indicating if controller is out of band or not." msgstr "" -#: neutron/plugins/ibm/common/config.py:51 +#: neutron/plugins/ibm/common/config.py:49 msgid "List of : mappings." msgstr "" -#: neutron/plugins/ibm/common/config.py:54 +#: neutron/plugins/ibm/common/config.py:52 msgid "Tenant type: OVERLAY (default) or OF." msgstr "" -#: neutron/plugins/ibm/common/config.py:56 +#: neutron/plugins/ibm/common/config.py:54 msgid "" "The string in tenant description that indicates the tenant is a OVERLAY " "tenant." msgstr "" -#: neutron/plugins/ibm/common/config.py:59 +#: neutron/plugins/ibm/common/config.py:57 msgid "The string in tenant description that indicates the tenant is a OF tenant." msgstr "" -#: neutron/plugins/ibm/common/config.py:65 +#: neutron/plugins/ibm/common/config.py:63 msgid "Agent polling interval if necessary." msgstr "" -#: neutron/plugins/ibm/common/config.py:67 +#: neutron/plugins/ibm/common/config.py:65 msgid "Using root helper." msgstr "" -#: neutron/plugins/ibm/common/config.py:69 +#: neutron/plugins/ibm/common/config.py:67 msgid "Whether to use rpc." msgstr "" -#: neutron/plugins/ibm/common/exceptions.py:23 +#: neutron/plugins/ibm/common/exceptions.py:21 #, python-format msgid "" "An unexpected error occurred in the SDN-VE Plugin. Here is the error " "message: %(msg)s" msgstr "" -#: neutron/plugins/ibm/common/exceptions.py:28 +#: neutron/plugins/ibm/common/exceptions.py:26 #, python-format msgid "The input does not contain nececessary info: %(msg)s" msgstr "" @@ -7718,328 +7738,328 @@ msgstr "" msgid "provider:segmentation_id specified for local network" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:83 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:82 msgid "VXLAN is enabled, a valid local_ip must be provided" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:97 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:96 msgid "Invalid Network ID, will lead to incorrect bridgename" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:104 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:103 msgid "Invalid VLAN ID, will lead to incorrect subinterface name" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:111 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:110 msgid "Invalid Interface ID, will lead to incorrect tap device name" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:120 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:119 #, python-format msgid "Invalid Segmentation ID: %s, will lead to incorrect vxlan device name" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:183 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:182 #, python-format msgid "Failed creating vxlan interface for %(segmentation_id)s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:215 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:214 #, python-format msgid "" "Creating subinterface %(interface)s for VLAN %(vlan_id)s on interface " "%(physical_interface)s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:228 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:227 #, python-format msgid "Done creating subinterface %s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:235 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:234 #, python-format msgid "Creating vxlan interface %(interface)s for VNI %(segmentation_id)s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:250 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:249 #, python-format msgid "Done creating vxlan interface %s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:304 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:303 #, python-format msgid "Starting bridge %(bridge_name)s for subinterface %(interface)s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:319 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:318 #, python-format msgid "Done starting bridge %(bridge_name)s for subinterface %(interface)s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:341 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:340 #, python-format msgid "Unable to add %(interface)s to %(bridge_name)s! Exception: %(e)s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:354 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:353 #, python-format msgid "Unable to add vxlan interface for network %s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:361 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:360 #, python-format msgid "No mapping for physical network %s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:370 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:369 #, python-format msgid "Unknown network_type %(network_type)s for network %(network_id)s." msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:382 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:381 #, python-format msgid "Tap device: %s does not exist on this host, skipped" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:400 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:399 #, python-format msgid "Adding device %(tap_device_name)s to bridge %(bridge_name)s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:409 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:408 #, python-format msgid "%(tap_device_name)s already exists on bridge %(bridge_name)s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:447 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:446 #, python-format msgid "Deleting bridge %s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:454 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:453 #, python-format msgid "Done deleting bridge %s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:457 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:456 #, python-format msgid "Cannot delete bridge %s, does not exist" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:471 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:470 #, python-format msgid "Removing device %(interface_name)s from bridge %(bridge_name)s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:478 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:477 #, python-format msgid "Done removing device %(interface_name)s from bridge %(bridge_name)s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:484 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:483 #, python-format msgid "" "Cannot remove device %(interface_name)s bridge %(bridge_name)s does not " "exist" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:492 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:491 #, python-format msgid "Deleting subinterface %s for vlan" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:499 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:498 #, python-format msgid "Done deleting subinterface %s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:503 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:502 #, python-format msgid "Deleting vxlan interface %s for vlan" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:508 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:507 #, python-format msgid "Done deleting vxlan interface %s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:522 -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:556 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:521 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:555 #, python-format msgid "" "Option \"%(option)s\" must be supported by command \"%(command)s\" to " "enable %(mode)s mode" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:533 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:532 msgid "No valid Segmentation ID to perform UCAST test." msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:550 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:549 msgid "" "VXLAN muticast group must be provided in vxlan_group option to enable " "VXLAN MCAST mode" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:575 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:574 msgid "" "Linux kernel vxlan module and iproute2 3.8 or above are required to " "enable VXLAN." msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:585 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:584 #, python-format msgid "Using %s VXLAN mode" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:662 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:661 #: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:163 -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:297 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:300 msgid "network_delete received" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:676 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:675 #: neutron/plugins/sriovnicagent/sriov_nic_agent.py:66 #, python-format msgid "port_update RPC received for port: %s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:679 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:678 msgid "fdb_add received" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:701 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:700 msgid "fdb_remove received" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:723 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:722 msgid "update chg_ip received" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:748 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:747 msgid "fdb_update received" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:805 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:804 msgid "Unable to obtain MAC address for unique ID. Agent terminated!" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:809 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:808 #: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:220 -#: neutron/plugins/nec/agent/nec_neutron_agent.py:144 -#: neutron/plugins/oneconvergence/agent/nvsd_neutron_agent.py:109 +#: neutron/plugins/nec/agent/nec_neutron_agent.py:142 +#: neutron/plugins/oneconvergence/agent/nvsd_neutron_agent.py:107 #: neutron/plugins/sriovnicagent/sriov_nic_agent.py:100 #, python-format msgid "RPC agent_id: %s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:880 -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1100 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:879 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1103 #: neutron/plugins/sriovnicagent/sriov_nic_agent.py:213 #, python-format msgid "Port %(device)s updated. Details: %(details)s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:913 -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:934 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:912 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:933 #: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:354 -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1126 -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1187 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1129 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1190 #: neutron/plugins/sriovnicagent/sriov_nic_agent.py:240 #, python-format msgid "Device %s not defined on plugin" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:920 -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1155 -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1172 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:919 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1158 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1175 #, python-format msgid "Attachment %s removed" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:928 -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1162 -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1179 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:927 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1165 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1182 #, python-format msgid "port_removed failed for %(device)s: %(e)s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:932 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:931 #: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:352 -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1184 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1187 #: neutron/plugins/sriovnicagent/sriov_nic_agent.py:238 #, python-format msgid "Port %s updated." msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:985 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:984 msgid "LinuxBridge Agent RPC Daemon Started!" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:999 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:998 #: neutron/plugins/sriovnicagent/sriov_nic_agent.py:267 #, python-format msgid "Agent loop found changes! %s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:1003 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:1002 #: neutron/plugins/sriovnicagent/sriov_nic_agent.py:273 #, python-format msgid "Error in agent loop. Devices info: %s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:1026 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:1025 #: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:407 #, python-format msgid "Parsing physical_interface_mappings failed: %s. Agent terminated!" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:1029 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:1028 #: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:410 #, python-format msgid "Interface mappings: %s" msgstr "" -#: neutron/plugins/linuxbridge/common/config.py:29 +#: neutron/plugins/linuxbridge/common/config.py:26 #: neutron/plugins/mlnx/common/config.py:26 msgid "Network type for tenant networks (local, vlan, or none)" msgstr "" -#: neutron/plugins/linuxbridge/common/config.py:39 +#: neutron/plugins/linuxbridge/common/config.py:36 msgid "" "Enable VXLAN on the agent. Can be enabled when agent is managed by ml2 " "plugin using linuxbridge mechanism driver" msgstr "" -#: neutron/plugins/linuxbridge/common/config.py:43 +#: neutron/plugins/linuxbridge/common/config.py:40 msgid "TTL for vxlan interface protocol packets." msgstr "" -#: neutron/plugins/linuxbridge/common/config.py:45 +#: neutron/plugins/linuxbridge/common/config.py:42 msgid "TOS for vxlan interface protocol packets." msgstr "" -#: neutron/plugins/linuxbridge/common/config.py:47 +#: neutron/plugins/linuxbridge/common/config.py:44 msgid "Multicast group for vxlan interface." msgstr "" -#: neutron/plugins/linuxbridge/common/config.py:49 +#: neutron/plugins/linuxbridge/common/config.py:46 msgid "Local IP address of the VXLAN endpoints." msgstr "" -#: neutron/plugins/linuxbridge/common/config.py:51 +#: neutron/plugins/linuxbridge/common/config.py:48 msgid "" "Extension to use alongside ml2 plugin's l2population mechanism driver. It" " enables the plugin to populate VXLAN forwarding table." msgstr "" -#: neutron/plugins/linuxbridge/common/config.py:59 +#: neutron/plugins/linuxbridge/common/config.py:56 #: neutron/plugins/mlnx/common/config.py:45 #: neutron/plugins/ofagent/common/config.py:29 msgid "List of :" msgstr "" -#: neutron/plugins/linuxbridge/common/config.py:67 +#: neutron/plugins/linuxbridge/common/config.py:64 #: neutron/plugins/mlnx/common/config.py:70 msgid "Enable server RPC compatibility with old agents" msgstr "" @@ -8198,38 +8218,38 @@ msgstr "" msgid "Specifies flavor for plugin to handle 'q-plugin' RPC requests." msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:44 +#: neutron/plugins/midonet/midonet_lib.py:39 #, python-format msgid "MidoNet %(resource_type)s %(id)s could not be found" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:48 -#: neutron/plugins/midonet/plugin.py:86 +#: neutron/plugins/midonet/midonet_lib.py:43 +#: neutron/plugins/midonet/plugin.py:80 #, python-format msgid "MidoNet API error: %(msg)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:82 +#: neutron/plugins/midonet/midonet_lib.py:77 #, python-format msgid "MidoClient.create_bridge called: kwargs=%(kwargs)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:92 +#: neutron/plugins/midonet/midonet_lib.py:87 #, python-format msgid "MidoClient.delete_bridge called: id=%(id)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:102 +#: neutron/plugins/midonet/midonet_lib.py:97 #, python-format msgid "MidoClient.get_bridge called: id=%s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:116 +#: neutron/plugins/midonet/midonet_lib.py:111 #, python-format msgid "MidoClient.update_bridge called: id=%(id)s, kwargs=%(kwargs)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:136 +#: neutron/plugins/midonet/midonet_lib.py:131 #, python-format msgid "" "MidoClient.create_dhcp called: bridge=%(bridge)s, cidr=%(cidr)s, " @@ -8237,142 +8257,142 @@ msgid "" "dns_servers=%(dns_servers)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:154 +#: neutron/plugins/midonet/midonet_lib.py:149 #, python-format msgid "" "MidoClient.add_dhcp_host called: bridge=%(bridge)s, cidr=%(cidr)s, " "ip=%(ip)s, mac=%(mac)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:159 +#: neutron/plugins/midonet/midonet_lib.py:154 msgid "Tried to add tonon-existent DHCP" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:173 +#: neutron/plugins/midonet/midonet_lib.py:168 #, python-format msgid "" "MidoClient.remove_dhcp_host called: bridge=%(bridge)s, cidr=%(cidr)s, " "ip=%(ip)s, mac=%(mac)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:178 +#: neutron/plugins/midonet/midonet_lib.py:173 msgid "Tried to delete mapping from non-existent subnet" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:183 +#: neutron/plugins/midonet/midonet_lib.py:178 #, python-format msgid "MidoClient.remove_dhcp_host: Deleting %(dh)r" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:196 +#: neutron/plugins/midonet/midonet_lib.py:191 #, python-format msgid "" "MidoClient.delete_dhcp_host called: bridge_id=%(bridge_id)s, " "cidr=%(cidr)s, ip=%(ip)s, mac=%(mac)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:211 +#: neutron/plugins/midonet/midonet_lib.py:206 #, python-format msgid "MidoClient.delete_dhcp called: bridge=%(bridge)s, cidr=%(cidr)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:218 +#: neutron/plugins/midonet/midonet_lib.py:213 msgid "Tried to delete non-existent DHCP" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:230 +#: neutron/plugins/midonet/midonet_lib.py:225 #, python-format msgid "MidoClient.delete_port called: id=%(id)s, delete_chains=%(delete_chains)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:245 +#: neutron/plugins/midonet/midonet_lib.py:240 #, python-format msgid "MidoClient.get_port called: id=%(id)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:259 +#: neutron/plugins/midonet/midonet_lib.py:254 #, python-format msgid "MidoClient.add_bridge_port called: bridge=%(bridge)s, kwargs=%(kwargs)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:271 +#: neutron/plugins/midonet/midonet_lib.py:266 #, python-format msgid "MidoClient.update_port called: id=%(id)s, kwargs=%(kwargs)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:296 +#: neutron/plugins/midonet/midonet_lib.py:291 #, python-format msgid "MidoClient.create_router called: kwargs=%(kwargs)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:306 +#: neutron/plugins/midonet/midonet_lib.py:301 #, python-format msgid "MidoClient.delete_router called: id=%(id)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:316 +#: neutron/plugins/midonet/midonet_lib.py:311 #, python-format msgid "MidoClient.get_router called: id=%(id)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:330 +#: neutron/plugins/midonet/midonet_lib.py:325 #, python-format msgid "MidoClient.update_router called: id=%(id)s, kwargs=%(kwargs)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:351 +#: neutron/plugins/midonet/midonet_lib.py:346 #, python-format msgid "" "MidoClient.add_dhcp_route_option called: bridge=%(bridge)s, " "cidr=%(cidr)s, gw_ip=%(gw_ip)sdst_ip=%(dst_ip)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:359 +#: neutron/plugins/midonet/midonet_lib.py:354 msgid "Tried to access non-existent DHCP" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:391 +#: neutron/plugins/midonet/midonet_lib.py:386 #, python-format msgid "MidoClient.unlink called: port=%(port)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:396 +#: neutron/plugins/midonet/midonet_lib.py:391 #, python-format msgid "Attempted to unlink a port that was not linked. %s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:402 +#: neutron/plugins/midonet/midonet_lib.py:397 #, python-format msgid "" "MidoClient.remove_rules_by_property called: tenant_id=%(tenant_id)s, " "chain_name=%(chain_name)skey=%(key)s, value=%(value)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:429 +#: neutron/plugins/midonet/midonet_lib.py:424 #, python-format msgid "" "MidoClient.create_router_chains called: router=%(router)s, " "inbound_chain_name=%(in_chain)s, outbound_chain_name=%(out_chain)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:452 +#: neutron/plugins/midonet/midonet_lib.py:447 #, python-format msgid "MidoClient.delete_router_chains called: id=%(id)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:467 +#: neutron/plugins/midonet/midonet_lib.py:462 #, python-format msgid "MidoClient.delete_port_chains called: id=%(id)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:479 +#: neutron/plugins/midonet/midonet_lib.py:474 #, python-format msgid "" "MidoClient.get_link_port called: router=%(router)s, " "peer_router_id=%(peer_router_id)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:518 +#: neutron/plugins/midonet/midonet_lib.py:513 #, python-format msgid "" "MidoClient.add_static_nat called: tenant_id=%(tenant_id)s, " @@ -8380,17 +8400,17 @@ msgid "" "port_id=%(port_id)s, nat_type=%(nat_type)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:526 +#: neutron/plugins/midonet/midonet_lib.py:521 #, python-format msgid "Invalid NAT type passed in %s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:578 +#: neutron/plugins/midonet/midonet_lib.py:573 #, python-format msgid "MidoClient.remote_static_route called: router=%(router)s, ip=%(ip)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:589 +#: neutron/plugins/midonet/midonet_lib.py:584 #, python-format msgid "" "MidoClient.update_port_chains called: " @@ -8398,82 +8418,82 @@ msgid "" "outbound_chain_id=%(outbound_chain_id)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:600 +#: neutron/plugins/midonet/midonet_lib.py:595 #, python-format msgid "MidoClient.create_chain called: tenant_id=%(tenant_id)s name=%(name)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:608 +#: neutron/plugins/midonet/midonet_lib.py:603 #, python-format msgid "MidoClient.delete_chain called: id=%(id)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:614 +#: neutron/plugins/midonet/midonet_lib.py:609 #, python-format msgid "" "MidoClient.delete_chains_by_names called: tenant_id=%(tenant_id)s " "names=%(names)s " msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:625 +#: neutron/plugins/midonet/midonet_lib.py:620 #, python-format msgid "" "MidoClient.get_chain_by_name called: tenant_id=%(tenant_id)s " "name=%(name)s " msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:636 +#: neutron/plugins/midonet/midonet_lib.py:631 #, python-format msgid "" "MidoClient.get_port_group_by_name called: tenant_id=%(tenant_id)s " "name=%(name)s " msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:650 +#: neutron/plugins/midonet/midonet_lib.py:645 #, python-format msgid "MidoClient.create_port_group called: tenant_id=%(tenant_id)s name=%(name)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:659 +#: neutron/plugins/midonet/midonet_lib.py:654 #, python-format msgid "" "MidoClient.delete_port_group_by_name called: tenant_id=%(tenant_id)s " "name=%(name)s " msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:665 +#: neutron/plugins/midonet/midonet_lib.py:660 #, python-format msgid "Deleting pg %(id)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:671 +#: neutron/plugins/midonet/midonet_lib.py:666 #, python-format msgid "" "MidoClient.add_port_to_port_group_by_name called: tenant_id=%(tenant_id)s" " name=%(name)s port_id=%(port_id)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:685 +#: neutron/plugins/midonet/midonet_lib.py:680 #, python-format msgid "MidoClient.remove_port_from_port_groups called: port_id=%(port_id)s" msgstr "" -#: neutron/plugins/midonet/plugin.py:100 +#: neutron/plugins/midonet/plugin.py:94 #, python-format msgid "Invalid nat_type %s" msgstr "" -#: neutron/plugins/midonet/plugin.py:157 +#: neutron/plugins/midonet/plugin.py:151 #, python-format msgid "Unrecognized direction %s" msgstr "" -#: neutron/plugins/midonet/plugin.py:191 +#: neutron/plugins/midonet/plugin.py:185 #, python-format msgid "There is no %(name)s with ID %(id)s in MidoNet." msgstr "" -#: neutron/plugins/midonet/plugin.py:198 +#: neutron/plugins/midonet/plugin.py:192 #: neutron/plugins/ml2/drivers/arista/exceptions.py:23 #: neutron/plugins/ml2/drivers/arista/exceptions.py:27 #: neutron/plugins/ml2/drivers/arista/exceptions.py:31 @@ -8482,214 +8502,214 @@ msgstr "" msgid "%(msg)s" msgstr "" -#: neutron/plugins/midonet/plugin.py:235 +#: neutron/plugins/midonet/plugin.py:229 msgid "provider_router_id should be configured in the plugin config file" msgstr "" -#: neutron/plugins/midonet/plugin.py:405 +#: neutron/plugins/midonet/plugin.py:399 #, python-format msgid "MidonetPluginV2.create_subnet called: subnet=%r" msgstr "" -#: neutron/plugins/midonet/plugin.py:437 +#: neutron/plugins/midonet/plugin.py:431 #, python-format msgid "MidonetPluginV2.create_subnet exiting: sn_entry=%r" msgstr "" -#: neutron/plugins/midonet/plugin.py:446 +#: neutron/plugins/midonet/plugin.py:440 #, python-format msgid "MidonetPluginV2.delete_subnet called: id=%s" msgstr "" -#: neutron/plugins/midonet/plugin.py:465 +#: neutron/plugins/midonet/plugin.py:459 msgid "MidonetPluginV2.delete_subnet exiting" msgstr "" -#: neutron/plugins/midonet/plugin.py:522 +#: neutron/plugins/midonet/plugin.py:516 #, python-format msgid "MidonetPluginV2.create_port called: port=%r" msgstr "" -#: neutron/plugins/midonet/plugin.py:583 +#: neutron/plugins/midonet/plugin.py:577 #, python-format msgid "Failed to create a port on network %(net_id)s: %(err)s" msgstr "" -#: neutron/plugins/midonet/plugin.py:588 +#: neutron/plugins/midonet/plugin.py:582 #, python-format msgid "MidonetPluginV2.create_port exiting: port=%r" msgstr "" -#: neutron/plugins/midonet/plugin.py:593 +#: neutron/plugins/midonet/plugin.py:587 #, python-format msgid "MidonetPluginV2.get_port called: id=%(id)s fields=%(fields)r" msgstr "" -#: neutron/plugins/midonet/plugin.py:600 +#: neutron/plugins/midonet/plugin.py:594 #, python-format msgid "There is no port with ID %(id)s in MidoNet." msgstr "" -#: neutron/plugins/midonet/plugin.py:604 +#: neutron/plugins/midonet/plugin.py:598 #, python-format msgid "MidonetPluginV2.get_port exiting: port=%r" msgstr "" -#: neutron/plugins/midonet/plugin.py:609 +#: neutron/plugins/midonet/plugin.py:603 #, python-format msgid "MidonetPluginV2.get_ports called: filters=%(filters)s fields=%(fields)r" msgstr "" -#: neutron/plugins/midonet/plugin.py:618 +#: neutron/plugins/midonet/plugin.py:612 #, python-format msgid "" "MidonetPluginV2.delete_port called: id=%(id)s " "l3_port_check=%(l3_port_check)r" msgstr "" -#: neutron/plugins/midonet/plugin.py:652 +#: neutron/plugins/midonet/plugin.py:646 #, python-format msgid "Failed to delete DHCP mapping for port %(id)s" msgstr "" -#: neutron/plugins/midonet/plugin.py:727 +#: neutron/plugins/midonet/plugin.py:721 #, python-format msgid "MidonetPluginV2.create_router called: router=%(router)s" msgstr "" -#: neutron/plugins/midonet/plugin.py:774 +#: neutron/plugins/midonet/plugin.py:768 #, python-format msgid "MidonetPluginV2.create_router exiting: router_data=%(router_data)s." msgstr "" -#: neutron/plugins/midonet/plugin.py:786 +#: neutron/plugins/midonet/plugin.py:780 #, python-format msgid "" "MidonetPluginV2.set_router_gateway called: id=%(id)s, " "gw_router=%(gw_router)s, gw_ip=%(gw_ip)s" msgstr "" -#: neutron/plugins/midonet/plugin.py:830 +#: neutron/plugins/midonet/plugin.py:824 #, python-format msgid "MidonetPluginV2.remove_router_gateway called: id=%(id)s" msgstr "" -#: neutron/plugins/midonet/plugin.py:850 +#: neutron/plugins/midonet/plugin.py:844 #, python-format msgid "MidonetPluginV2.update_router called: id=%(id)s router=%(router)r" msgstr "" -#: neutron/plugins/midonet/plugin.py:890 +#: neutron/plugins/midonet/plugin.py:884 #, python-format msgid "MidonetPluginV2.update_router exiting: router=%r" msgstr "" -#: neutron/plugins/midonet/plugin.py:901 +#: neutron/plugins/midonet/plugin.py:895 #, python-format msgid "MidonetPluginV2.delete_router called: id=%s" msgstr "" -#: neutron/plugins/midonet/plugin.py:1001 +#: neutron/plugins/midonet/plugin.py:995 #, python-format msgid "" "MidonetPluginV2.add_router_interface called: router_id=%(router_id)s " "interface_info=%(interface_info)r" msgstr "" -#: neutron/plugins/midonet/plugin.py:1025 +#: neutron/plugins/midonet/plugin.py:1019 msgid "" "DHCP agent is not working correctly. No port to reach the Metadata server" " on this network" msgstr "" -#: neutron/plugins/midonet/plugin.py:1034 +#: neutron/plugins/midonet/plugin.py:1028 #, python-format msgid "" "Failed to create MidoNet resources to add router interface. " "info=%(info)s, router_id=%(router_id)s" msgstr "" -#: neutron/plugins/midonet/plugin.py:1041 +#: neutron/plugins/midonet/plugin.py:1035 #, python-format msgid "MidonetPluginV2.add_router_interface exiting: info=%r" msgstr "" -#: neutron/plugins/midonet/plugin.py:1081 +#: neutron/plugins/midonet/plugin.py:1075 #, python-format msgid "" "MidonetPluginV2.update_floatingip called: id=%(id)s " "floatingip=%(floatingip)s " msgstr "" -#: neutron/plugins/midonet/plugin.py:1100 +#: neutron/plugins/midonet/plugin.py:1094 #, python-format msgid "MidonetPluginV2.update_floating_ip exiting: fip=%s" msgstr "" -#: neutron/plugins/midonet/plugin.py:1122 +#: neutron/plugins/midonet/plugin.py:1116 #, python-format msgid "" "MidonetPluginV2.create_security_group called: " "security_group=%(security_group)s default_sg=%(default_sg)s " msgstr "" -#: neutron/plugins/midonet/plugin.py:1151 +#: neutron/plugins/midonet/plugin.py:1145 #, python-format msgid "Failed to create MidoNet resources for sg %(sg)r" msgstr "" -#: neutron/plugins/midonet/plugin.py:1158 +#: neutron/plugins/midonet/plugin.py:1152 #, python-format msgid "MidonetPluginV2.create_security_group exiting: sg=%r" msgstr "" -#: neutron/plugins/midonet/plugin.py:1164 +#: neutron/plugins/midonet/plugin.py:1158 #, python-format msgid "MidonetPluginV2.delete_security_group called: id=%s" msgstr "" -#: neutron/plugins/midonet/plugin.py:1196 +#: neutron/plugins/midonet/plugin.py:1190 #, python-format msgid "" "MidonetPluginV2.create_security_group_rule called: " "security_group_rule=%(security_group_rule)r" msgstr "" -#: neutron/plugins/midonet/plugin.py:1206 +#: neutron/plugins/midonet/plugin.py:1200 #, python-format msgid "MidonetPluginV2.create_security_group_rule exiting: rule=%r" msgstr "" -#: neutron/plugins/midonet/plugin.py:1216 +#: neutron/plugins/midonet/plugin.py:1210 #, python-format msgid "MidonetPluginV2.delete_security_group_rule called: sg_rule_id=%s" msgstr "" -#: neutron/plugins/midonet/common/config.py:23 +#: neutron/plugins/midonet/common/config.py:21 msgid "MidoNet API server URI." msgstr "" -#: neutron/plugins/midonet/common/config.py:25 +#: neutron/plugins/midonet/common/config.py:23 msgid "MidoNet admin username." msgstr "" -#: neutron/plugins/midonet/common/config.py:28 +#: neutron/plugins/midonet/common/config.py:26 msgid "MidoNet admin password." msgstr "" -#: neutron/plugins/midonet/common/config.py:31 +#: neutron/plugins/midonet/common/config.py:29 msgid "ID of the project that MidoNet admin userbelongs to." msgstr "" -#: neutron/plugins/midonet/common/config.py:34 +#: neutron/plugins/midonet/common/config.py:32 msgid "Virtual provider router ID." msgstr "" -#: neutron/plugins/midonet/common/config.py:37 +#: neutron/plugins/midonet/common/config.py:35 msgid "Operational mode. Internal dev use only." msgstr "" -#: neutron/plugins/midonet/common/config.py:40 +#: neutron/plugins/midonet/common/config.py:38 msgid "Path to midonet host uuid file" msgstr "" @@ -8721,7 +8741,7 @@ msgid "Added segment %(id)s of type %(network_type)s for network %(network_id)s" msgstr "" #: neutron/plugins/ml2/db.py:197 neutron/plugins/ml2/db.py:249 -#: neutron/plugins/ml2/plugin.py:1025 +#: neutron/plugins/ml2/plugin.py:1029 #, python-format msgid "Multiple ports have port_id starting with %s" msgstr "" @@ -9002,34 +9022,34 @@ msgstr "" msgid "No Host supplied to bind DVR Port %s" msgstr "" -#: neutron/plugins/ml2/plugin.py:941 +#: neutron/plugins/ml2/plugin.py:945 #: neutron/tests/unit/ml2/test_ml2_plugin.py:144 #, python-format msgid "Deleting port %s" msgstr "" -#: neutron/plugins/ml2/plugin.py:961 +#: neutron/plugins/ml2/plugin.py:965 #: neutron/tests/unit/ml2/test_ml2_plugin.py:145 #, python-format msgid "The port '%s' was deleted" msgstr "" -#: neutron/plugins/ml2/plugin.py:1010 +#: neutron/plugins/ml2/plugin.py:1014 #, python-format msgid "mechanism_manager.delete_port_postcommit failed for port %s" msgstr "" -#: neutron/plugins/ml2/plugin.py:1034 +#: neutron/plugins/ml2/plugin.py:1038 #, python-format msgid "Binding info for DVR port %s not found" msgstr "" -#: neutron/plugins/ml2/plugin.py:1060 +#: neutron/plugins/ml2/plugin.py:1064 #, python-format msgid "Port %(port)s updated up by agent not found" msgstr "" -#: neutron/plugins/ml2/plugin.py:1090 +#: neutron/plugins/ml2/plugin.py:1094 #, python-format msgid "Port %s not found during update" msgstr "" @@ -9074,7 +9094,7 @@ msgid "" msgstr "" #: neutron/plugins/ml2/drivers/mech_agent.py:54 -#: neutron/plugins/ml2/drivers/mechanism_odl.py:327 +#: neutron/plugins/ml2/drivers/mechanism_odl.py:325 #, python-format msgid "Attempting to bind port %(port)s on network %(network)s" msgstr "" @@ -9090,7 +9110,7 @@ msgid "Checking agent: %s" msgstr "" #: neutron/plugins/ml2/drivers/mech_agent.py:70 -#: neutron/plugins/ml2/drivers/mechanism_odl.py:337 +#: neutron/plugins/ml2/drivers/mechanism_odl.py:335 #, python-format msgid "Bound using segment: %s" msgstr "" @@ -9114,99 +9134,55 @@ msgid "" "tunnel_types: %(tunnel_types)s" msgstr "" -#: neutron/plugins/ml2/drivers/mechanism_fslsdn.py:35 -msgid "CRD service Username" -msgstr "" - -#: neutron/plugins/ml2/drivers/mechanism_fslsdn.py:38 -msgid "CRD Service Password" -msgstr "" - -#: neutron/plugins/ml2/drivers/mechanism_fslsdn.py:40 -msgid "CRD Tenant Name" -msgstr "" - -#: neutron/plugins/ml2/drivers/mechanism_fslsdn.py:43 -msgid "CRD Auth URL" -msgstr "" - -#: neutron/plugins/ml2/drivers/mechanism_fslsdn.py:46 -msgid "URL for connecting to CRD service" -msgstr "" - -#: neutron/plugins/ml2/drivers/mechanism_fslsdn.py:49 -msgid "Timeout value for connecting to CRD service in seconds" -msgstr "" - -#: neutron/plugins/ml2/drivers/mechanism_fslsdn.py:53 -msgid "Region name for connecting to CRD Service in admin context" -msgstr "" - -#: neutron/plugins/ml2/drivers/mechanism_fslsdn.py:57 -msgid "If set, ignore any SSL validation issues" -msgstr "" - -#: neutron/plugins/ml2/drivers/mechanism_fslsdn.py:60 -msgid "Auth strategy for connecting to neutron in admin context" -msgstr "" - -#: neutron/plugins/ml2/drivers/mechanism_fslsdn.py:63 -msgid "Location of ca certificates file to use for CRD client requests." -msgstr "" - -#: neutron/plugins/ml2/drivers/mechanism_fslsdn.py:87 -msgid "Initializing CRD client... " -msgstr "" - #: neutron/plugins/ml2/drivers/mechanism_ncs.py:29 msgid "HTTP URL of Tail-f NCS REST interface." msgstr "" #: neutron/plugins/ml2/drivers/mechanism_ncs.py:31 -#: neutron/plugins/ml2/drivers/mechanism_odl.py:46 +#: neutron/plugins/ml2/drivers/mechanism_odl.py:44 msgid "HTTP username for authentication" msgstr "" #: neutron/plugins/ml2/drivers/mechanism_ncs.py:33 -#: neutron/plugins/ml2/drivers/mechanism_odl.py:48 +#: neutron/plugins/ml2/drivers/mechanism_odl.py:46 msgid "HTTP password for authentication" msgstr "" #: neutron/plugins/ml2/drivers/mechanism_ncs.py:35 -#: neutron/plugins/ml2/drivers/mechanism_odl.py:50 +#: neutron/plugins/ml2/drivers/mechanism_odl.py:48 msgid "HTTP timeout in seconds." msgstr "" -#: neutron/plugins/ml2/drivers/mechanism_odl.py:44 +#: neutron/plugins/ml2/drivers/mechanism_odl.py:42 msgid "HTTP URL of OpenDaylight REST interface." msgstr "" -#: neutron/plugins/ml2/drivers/mechanism_odl.py:52 +#: neutron/plugins/ml2/drivers/mechanism_odl.py:50 msgid "Tomcat session timeout in minutes." msgstr "" -#: neutron/plugins/ml2/drivers/mechanism_odl.py:102 +#: neutron/plugins/ml2/drivers/mechanism_odl.py:100 #, python-format msgid "Failed to authenticate with OpenDaylight: %s" msgstr "" -#: neutron/plugins/ml2/drivers/mechanism_odl.py:105 +#: neutron/plugins/ml2/drivers/mechanism_odl.py:103 #, python-format msgid "Authentication Timed Out: %s" msgstr "" -#: neutron/plugins/ml2/drivers/mechanism_odl.py:315 +#: neutron/plugins/ml2/drivers/mechanism_odl.py:313 #, python-format msgid "ODL-----> sending URL (%s) <-----ODL" msgstr "" -#: neutron/plugins/ml2/drivers/mechanism_odl.py:316 +#: neutron/plugins/ml2/drivers/mechanism_odl.py:314 #, python-format msgid "ODL-----> sending JSON (%s) <-----ODL" msgstr "" -#: neutron/plugins/ml2/drivers/mechanism_odl.py:340 -#: neutron/plugins/ml2/drivers/mech_nuage/driver.py:94 +#: neutron/plugins/ml2/drivers/mechanism_odl.py:338 +#: neutron/plugins/ml2/drivers/mech_nuage/driver.py:91 #, python-format msgid "" "Refusing to bind port for segment ID %(id)s, segment %(seg)s, phys net " @@ -9260,13 +9236,17 @@ msgstr "" msgid "No flat network found on physical network %s" msgstr "" -#: neutron/plugins/ml2/drivers/type_gre.py:34 +#: neutron/plugins/ml2/drivers/type_gre.py:35 msgid "" "Comma-separated list of : tuples enumerating ranges of " "GRE tunnel IDs that are available for tenant network allocation" msgstr "" -#: neutron/plugins/ml2/drivers/type_gre.py:126 +#: neutron/plugins/ml2/drivers/type_gre.py:75 +msgid "Failed to parse tunnel_id_ranges. Service terminated!" +msgstr "" + +#: neutron/plugins/ml2/drivers/type_gre.py:132 #, python-format msgid "Gre endpoint with ip %s already exists" msgstr "" @@ -9280,16 +9260,6 @@ msgstr "" msgid "%s prohibited for local provider network" msgstr "" -#: neutron/plugins/ml2/drivers/type_tunnel.py:76 -#, python-format -msgid "Invalid tunnel ID range: '%(range)s' - %(e)s. Agent terminated!" -msgstr "" - -#: neutron/plugins/ml2/drivers/type_tunnel.py:79 -#, python-format -msgid "%(type)s ID ranges: %(range)s" -msgstr "" - #: neutron/plugins/ml2/drivers/type_tunnel.py:88 #: neutron/plugins/openvswitch/ovs_neutron_plugin.py:437 #, python-format @@ -9355,53 +9325,57 @@ msgstr "" msgid "Multicast group for VXLAN. If unset, disables VXLAN multicast mode." msgstr "" -#: neutron/plugins/ml2/drivers/type_vxlan.py:127 +#: neutron/plugins/ml2/drivers/type_vxlan.py:82 +msgid "Failed to parse vni_ranges. Service terminated!" +msgstr "" + +#: neutron/plugins/ml2/drivers/type_vxlan.py:132 msgid "get_vxlan_endpoints() called" msgstr "" -#: neutron/plugins/ml2/drivers/type_vxlan.py:137 +#: neutron/plugins/ml2/drivers/type_vxlan.py:142 #, python-format msgid "add_vxlan_endpoint() called for ip %s" msgstr "" -#: neutron/plugins/ml2/drivers/type_vxlan.py:146 +#: neutron/plugins/ml2/drivers/type_vxlan.py:151 #, python-format msgid "Vxlan endpoint with ip %s already exists" msgstr "" -#: neutron/plugins/ml2/drivers/arista/arista_l3_driver.py:32 +#: neutron/plugins/ml2/drivers/arista/arista_l3_driver.py:29 #: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:32 msgid "Unable to reach EOS" msgstr "" -#: neutron/plugins/ml2/drivers/arista/arista_l3_driver.py:132 +#: neutron/plugins/ml2/drivers/arista/arista_l3_driver.py:129 msgid "Required option primary_l3_host is not set" msgstr "" -#: neutron/plugins/ml2/drivers/arista/arista_l3_driver.py:138 +#: neutron/plugins/ml2/drivers/arista/arista_l3_driver.py:135 msgid "VRFs are not supported MLAG config mode" msgstr "" -#: neutron/plugins/ml2/drivers/arista/arista_l3_driver.py:142 +#: neutron/plugins/ml2/drivers/arista/arista_l3_driver.py:139 msgid "Required option secondary_l3_host is not set" msgstr "" -#: neutron/plugins/ml2/drivers/arista/arista_l3_driver.py:146 +#: neutron/plugins/ml2/drivers/arista/arista_l3_driver.py:143 msgid "Required option primary_l3_host_username is not set" msgstr "" -#: neutron/plugins/ml2/drivers/arista/arista_l3_driver.py:327 -#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:435 +#: neutron/plugins/ml2/drivers/arista/arista_l3_driver.py:324 +#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:453 #, python-format msgid "Executing command on Arista EOS: %s" msgstr "" -#: neutron/plugins/ml2/drivers/arista/arista_l3_driver.py:333 +#: neutron/plugins/ml2/drivers/arista/arista_l3_driver.py:330 #, python-format msgid "Results of execution on Arista EOS: %s" msgstr "" -#: neutron/plugins/ml2/drivers/arista/arista_l3_driver.py:336 +#: neutron/plugins/ml2/drivers/arista/arista_l3_driver.py:333 #, python-format msgid "Error occured while trying to execute commands %(cmd)s on EOS %(host)s" msgstr "" @@ -9495,380 +9469,384 @@ msgid "" "field. If not set, a value of 180 seconds is assumed" msgstr "" -#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:75 +#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:76 #, python-format msgid "'timestamp' command '%s' is not available on EOS" msgstr "" -#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:317 +#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:330 #, python-format msgid "VM id %(vmid)s not found for port %(portid)s" msgstr "" -#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:336 +#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:349 #, python-format msgid "Unknown device owner: %s" msgstr "" -#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:450 +#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:468 #, python-format msgid "Error %(err)s while trying to execute commands %(cmd)s on EOS %(host)s" msgstr "" -#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:522 +#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:540 msgid "Required option eapi_host is not set" msgstr "" -#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:526 +#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:544 msgid "Required option eapi_username is not set" msgstr "" -#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:546 +#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:565 +msgid "Sync start trigger sent to EOS" +msgstr "" + +#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:582 msgid "Syncing Neutron <-> EOS" msgstr "" -#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:552 +#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:588 msgid "OpenStack and EOS are in sync!" msgstr "" -#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:574 +#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:610 #, python-format msgid "" "No Tenants configured in Neutron DB. But %d tenants discovered in EOS " "during synchronization.Entire EOS region is cleared" msgstr "" -#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:739 +#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:775 #, python-format msgid "Network %s is not created as it is not found inArista DB" msgstr "" -#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:753 +#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:789 #, python-format msgid "Network name changed to %s" msgstr "" -#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:781 +#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:817 #, python-format msgid "Network %s is not updated as it is not found inArista DB" msgstr "" -#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:873 +#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:909 #, python-format msgid "VM %s is not created as it is not found in Arista DB" msgstr "" -#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:888 +#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:924 #, python-format msgid "Port name changed to %s" msgstr "" -#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:938 +#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:974 #, python-format msgid "VM %s is not updated as it is not found in Arista DB" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:40 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:37 msgid "Allowed physical networks" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:42 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:39 msgid "OS Type of the switch" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:44 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:41 msgid "OS Version number" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:95 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:92 msgid "Virtual Fabric: enabled" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:97 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:94 msgid "Virtual Fabric: not enabled" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:135 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:132 msgid "" "Brocade Mechanism: failed to create network, network cannot be created in" " the configured physical network" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:141 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:138 msgid "" "Brocade Mechanism: failed to create network, only network type vlan is " "supported" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:149 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:146 msgid "Brocade Mechanism: failed to create network in db" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:151 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:148 msgid "Brocade Mechanism: create_network_precommit failed" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:153 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:150 #, python-format msgid "" "create network (precommit): %(network_id)s of network type = " "%(network_type)s with vlan = %(vlan_id)s for tenant %(tenant_id)s" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:165 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:162 msgid "create_network_postcommit: called" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:185 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:182 msgid "Brocade NOS driver: failed in create network" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:188 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:185 msgid "Brocade Mechanism: create_network_postcommmit failed" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:190 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:187 #, python-format msgid "" "created network (postcommit): %(network_id)s of network type = " "%(network_type)s with vlan = %(vlan_id)s for tenant %(tenant_id)s" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:202 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:199 msgid "delete_network_precommit: called" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:215 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:212 msgid "Brocade Mechanism: failed to delete network in db" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:217 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:214 msgid "Brocade Mechanism: delete_network_precommit failed" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:219 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:216 #, python-format msgid "" "delete network (precommit): %(network_id)s with vlan = %(vlan_id)s for " "tenant %(tenant_id)s" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:231 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:228 msgid "delete_network_postcommit: called" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:243 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:240 msgid "Brocade NOS driver: failed to delete network" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:245 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:242 msgid "Brocade switch exception, delete_network_postcommit failed" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:248 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:245 #, python-format msgid "" "delete network (postcommit): %(network_id)s with vlan = %(vlan_id)s for " "tenant %(tenant_id)s" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:266 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:263 msgid "create_port_precommit: called" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:284 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:281 msgid "Brocade Mechanism: failed to create port in db" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:286 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:283 msgid "Brocade Mechanism: create_port_precommit failed" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:291 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:288 msgid "create_port_postcommit: called" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:315 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:312 #, python-format msgid "Brocade NOS driver: failed to associate mac %s" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:318 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:315 msgid "Brocade switch exception: create_port_postcommit failed" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:321 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:318 #, python-format msgid "" "created port (postcommit): port_id=%(port_id)s network_id=%(network_id)s " "tenant_id=%(tenant_id)s" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:329 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:326 msgid "delete_port_precommit: called" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:338 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:335 msgid "Brocade Mechanism: failed to delete port in db" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:340 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:337 msgid "Brocade Mechanism: delete_port_precommit failed" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:345 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:342 msgid "delete_port_postcommit: called" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:369 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:366 #, python-format msgid "Brocade NOS driver: failed to dissociate MAC %s" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:372 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:369 msgid "Brocade switch exception, delete_port_postcommit failed" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:375 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:372 #, python-format msgid "" "delete port (postcommit): port_id=%(port_id)s network_id=%(network_id)s " "tenant_id=%(tenant_id)s" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:382 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:379 msgid "update_port_precommit(self: called" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:386 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:383 msgid "update_port_postcommit: called" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:390 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:387 msgid "create_subnetwork_precommit: called" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:394 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:391 msgid "create_subnetwork_postcommit: called" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:398 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:395 msgid "delete_subnetwork_precommit: called" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:402 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:399 msgid "delete_subnetwork_postcommit: called" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:406 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:403 msgid "update_subnet_precommit(self: called" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:410 +#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:407 msgid "update_subnet_postcommit: called" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:77 +#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:73 msgid "" "Brocade Switch IP address is not set, check config ml2_conf_brocade.ini " "file" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:88 +#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:84 msgid "Connect failed to switch" msgstr "" -#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:107 -#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:117 -#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:145 -#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:162 -#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:175 -#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:188 -#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:355 -#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:374 -#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:388 -#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:401 -#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:414 +#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:103 +#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:113 +#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:141 +#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:158 +#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:171 +#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:184 +#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:351 +#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:370 +#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:384 +#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:397 +#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:410 msgid "NETCONF error" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/config.py:30 +#: neutron/plugins/ml2/drivers/cisco/apic/config.py:28 msgid "Prefix for APIC domain/names/profiles created" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/config.py:40 +#: neutron/plugins/ml2/drivers/cisco/apic/config.py:38 msgid "An ordered list of host names or IP addresses of the APIC controller(s)." msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/config.py:43 +#: neutron/plugins/ml2/drivers/cisco/apic/config.py:41 msgid "Username for the APIC controller" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/config.py:45 +#: neutron/plugins/ml2/drivers/cisco/apic/config.py:43 msgid "Password for the APIC controller" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/config.py:48 +#: neutron/plugins/ml2/drivers/cisco/apic/config.py:46 msgid "Name mapping strategy to use: use_uuid | use_name" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/config.py:50 +#: neutron/plugins/ml2/drivers/cisco/apic/config.py:48 msgid "Use SSL to connect to the APIC controller" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/config.py:53 +#: neutron/plugins/ml2/drivers/cisco/apic/config.py:51 msgid "Name for the domain created on APIC" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/config.py:56 +#: neutron/plugins/ml2/drivers/cisco/apic/config.py:54 msgid "Name for the app profile used for Openstack" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/config.py:59 +#: neutron/plugins/ml2/drivers/cisco/apic/config.py:57 msgid "Name for the vlan namespace to be used for Openstack" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/config.py:62 +#: neutron/plugins/ml2/drivers/cisco/apic/config.py:60 msgid "Name of the node profile to be created" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/config.py:65 +#: neutron/plugins/ml2/drivers/cisco/apic/config.py:63 msgid "Name of the entity profile to be created" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/config.py:68 +#: neutron/plugins/ml2/drivers/cisco/apic/config.py:66 msgid "Name of the function profile to be created" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/config.py:71 +#: neutron/plugins/ml2/drivers/cisco/apic/config.py:69 msgid "Name of the LACP profile to be created" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/config.py:74 +#: neutron/plugins/ml2/drivers/cisco/apic/config.py:72 msgid "The uplink ports to check for ACI connectivity" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/config.py:77 +#: neutron/plugins/ml2/drivers/cisco/apic/config.py:75 msgid "The switch pairs for VPC connectivity" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/config.py:80 +#: neutron/plugins/ml2/drivers/cisco/apic/config.py:78 msgid "Range of VLAN's to be used for Openstack" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/config.py:83 +#: neutron/plugins/ml2/drivers/cisco/apic/config.py:81 msgid "Setup root helper as rootwrap or sudo" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/config.py:86 +#: neutron/plugins/ml2/drivers/cisco/apic/config.py:84 msgid "Synchronization interval in seconds" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/config.py:89 +#: neutron/plugins/ml2/drivers/cisco/apic/config.py:87 msgid "Interval between agent status updates (in sec)" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/config.py:92 +#: neutron/plugins/ml2/drivers/cisco/apic/config.py:90 msgid "Interval between agent poll for topology (in sec)" msgstr "" @@ -9947,64 +9925,108 @@ msgstr "" msgid "NexusDriver created VLAN: %s" msgstr "" -#: neutron/plugins/ml2/drivers/l2pop/config.py:25 +#: neutron/plugins/ml2/drivers/freescale/config.py:29 +msgid "CRD service Username." +msgstr "" + +#: neutron/plugins/ml2/drivers/freescale/config.py:32 +msgid "CRD Service Password." +msgstr "" + +#: neutron/plugins/ml2/drivers/freescale/config.py:34 +msgid "CRD Tenant Name." +msgstr "" + +#: neutron/plugins/ml2/drivers/freescale/config.py:37 +msgid "CRD Auth URL." +msgstr "" + +#: neutron/plugins/ml2/drivers/freescale/config.py:40 +msgid "URL for connecting to CRD service." +msgstr "" + +#: neutron/plugins/ml2/drivers/freescale/config.py:43 +msgid "Timeout value for connecting to CRD service in seconds." +msgstr "" + +#: neutron/plugins/ml2/drivers/freescale/config.py:47 +msgid "Region name for connecting to CRD Service in admin context." +msgstr "" + +#: neutron/plugins/ml2/drivers/freescale/config.py:51 +msgid "If set, ignore any SSL validation issues." +msgstr "" + +#: neutron/plugins/ml2/drivers/freescale/config.py:54 +msgid "Auth strategy for connecting to neutron in admin context." +msgstr "" + +#: neutron/plugins/ml2/drivers/freescale/config.py:57 +msgid "Location of ca certificates file to use for CRD client requests." +msgstr "" + +#: neutron/plugins/ml2/drivers/freescale/mechanism_fslsdn.py:38 +msgid "Initializing CRD client... " +msgstr "" + +#: neutron/plugins/ml2/drivers/l2pop/config.py:21 msgid "" "Delay within which agent is expected to update existing ports whent it " "restarts" msgstr "" -#: neutron/plugins/ml2/drivers/l2pop/mech_driver.py:42 +#: neutron/plugins/ml2/drivers/l2pop/mech_driver.py:38 msgid "Experimental L2 population driver" msgstr "" -#: neutron/plugins/ml2/drivers/l2pop/mech_driver.py:167 +#: neutron/plugins/ml2/drivers/l2pop/mech_driver.py:163 msgid "Unable to retrieve the agent ip, check the agent configuration." msgstr "" -#: neutron/plugins/ml2/drivers/l2pop/mech_driver.py:173 +#: neutron/plugins/ml2/drivers/l2pop/mech_driver.py:169 #, python-format msgid "Port %(port)s updated by agent %(agent)s isn't bound to any segment" msgstr "" -#: neutron/plugins/ml2/drivers/l2pop/mech_driver.py:226 +#: neutron/plugins/ml2/drivers/l2pop/mech_driver.py:222 #, python-format msgid "" "Unable to retrieve the agent ip, check the agent %(agent_host)s " "configuration." msgstr "" -#: neutron/plugins/ml2/drivers/l2pop/rpc.py:40 +#: neutron/plugins/ml2/drivers/l2pop/rpc.py:36 #, python-format msgid "" "Fanout notify l2population agents at %(topic)s the message %(method)s " "with %(fdb_entries)s" msgstr "" -#: neutron/plugins/ml2/drivers/l2pop/rpc.py:51 +#: neutron/plugins/ml2/drivers/l2pop/rpc.py:47 #, python-format msgid "" "Notify l2population agent %(host)s at %(topic)s the message %(method)s " "with %(fdb_entries)s" msgstr "" -#: neutron/plugins/ml2/drivers/mech_bigswitch/driver.py:54 +#: neutron/plugins/ml2/drivers/mech_bigswitch/driver.py:52 msgid "Initializing driver" msgstr "" -#: neutron/plugins/ml2/drivers/mech_bigswitch/driver.py:72 +#: neutron/plugins/ml2/drivers/mech_bigswitch/driver.py:70 msgid "Initialization done" msgstr "" -#: neutron/plugins/ml2/drivers/mech_bigswitch/driver.py:133 +#: neutron/plugins/ml2/drivers/mech_bigswitch/driver.py:137 msgid "Ignoring port notification to controller because of missing host ID." msgstr "" -#: neutron/plugins/ml2/drivers/mech_bigswitch/driver.py:202 +#: neutron/plugins/ml2/drivers/mech_bigswitch/driver.py:206 #, python-format msgid "No cache entry for host %s" msgstr "" -#: neutron/plugins/ml2/drivers/mech_bigswitch/driver.py:207 +#: neutron/plugins/ml2/drivers/mech_bigswitch/driver.py:211 #, python-format msgid "Expired cache entry for host %s" msgstr "" @@ -10360,112 +10382,112 @@ msgstr "" msgid "Set_port_status as %s called" msgstr "" -#: neutron/plugins/nec/nec_plugin.py:206 +#: neutron/plugins/nec/nec_plugin.py:204 #, python-format msgid "_cleanup_ofc_tenant: No OFC tenant for %s" msgstr "" -#: neutron/plugins/nec/nec_plugin.py:209 +#: neutron/plugins/nec/nec_plugin.py:207 #, python-format msgid "delete_ofc_tenant() failed due to %s" msgstr "" -#: neutron/plugins/nec/nec_plugin.py:225 +#: neutron/plugins/nec/nec_plugin.py:223 msgid "activate_port_if_ready(): skip, port.admin_state_up is False." msgstr "" -#: neutron/plugins/nec/nec_plugin.py:229 +#: neutron/plugins/nec/nec_plugin.py:227 msgid "activate_port_if_ready(): skip, network.admin_state_up is False." msgstr "" -#: neutron/plugins/nec/nec_plugin.py:233 +#: neutron/plugins/nec/nec_plugin.py:231 msgid "activate_port_if_ready(): skip, no portinfo for this port." msgstr "" -#: neutron/plugins/nec/nec_plugin.py:237 +#: neutron/plugins/nec/nec_plugin.py:235 msgid "activate_port_if_ready(): skip, ofc_port already exists." msgstr "" -#: neutron/plugins/nec/nec_plugin.py:245 +#: neutron/plugins/nec/nec_plugin.py:243 #, python-format msgid "create_ofc_port() failed due to %s" msgstr "" -#: neutron/plugins/nec/nec_plugin.py:258 +#: neutron/plugins/nec/nec_plugin.py:256 #, python-format msgid "deactivate_port(): skip, ofc_port for port=%s does not exist." msgstr "" -#: neutron/plugins/nec/nec_plugin.py:277 +#: neutron/plugins/nec/nec_plugin.py:275 #, python-format msgid "deactivate_port(): OFC port for port=%s is already removed." msgstr "" -#: neutron/plugins/nec/nec_plugin.py:285 +#: neutron/plugins/nec/nec_plugin.py:283 #, python-format msgid "Failed to delete port=%(port)s from OFC: %(exc)s" msgstr "" -#: neutron/plugins/nec/nec_plugin.py:304 +#: neutron/plugins/nec/nec_plugin.py:302 #, python-format msgid "NECPluginV2.create_network() called, network=%s ." msgstr "" -#: neutron/plugins/nec/nec_plugin.py:321 +#: neutron/plugins/nec/nec_plugin.py:319 #, python-format msgid "Failed to create network id=%(id)s on OFC: %(exc)s" msgstr "" -#: neutron/plugins/nec/nec_plugin.py:337 +#: neutron/plugins/nec/nec_plugin.py:335 #, python-format msgid "NECPluginV2.update_network() called, id=%(id)s network=%(network)s ." msgstr "" -#: neutron/plugins/nec/nec_plugin.py:381 +#: neutron/plugins/nec/nec_plugin.py:379 #, python-format msgid "NECPluginV2.delete_network() called, id=%s ." msgstr "" -#: neutron/plugins/nec/nec_plugin.py:415 +#: neutron/plugins/nec/nec_plugin.py:413 #, python-format msgid "delete_network() failed due to %s" msgstr "" -#: neutron/plugins/nec/nec_plugin.py:556 +#: neutron/plugins/nec/nec_plugin.py:554 #, python-format msgid "NECPluginV2.create_port() called, port=%s ." msgstr "" -#: neutron/plugins/nec/nec_plugin.py:620 +#: neutron/plugins/nec/nec_plugin.py:618 #, python-format msgid "NECPluginV2.update_port() called, id=%(id)s port=%(port)s ." msgstr "" -#: neutron/plugins/nec/nec_plugin.py:648 +#: neutron/plugins/nec/nec_plugin.py:646 #, python-format msgid "NECPluginV2.delete_port() called, id=%s ." msgstr "" -#: neutron/plugins/nec/nec_plugin.py:715 +#: neutron/plugins/nec/nec_plugin.py:713 #, python-format msgid "NECPluginV2RPCCallbacks.update_ports() called, kwargs=%s ." msgstr "" -#: neutron/plugins/nec/nec_plugin.py:725 +#: neutron/plugins/nec/nec_plugin.py:723 #, python-format msgid "" "update_ports(): ignore unchanged portinfo in port_added message " "(port_id=%s)." msgstr "" -#: neutron/plugins/nec/nec_plugin.py:745 +#: neutron/plugins/nec/nec_plugin.py:743 #, python-format msgid "" "update_ports(): ignore port_removed message due to portinfo for " "port_id=%s was not registered" msgstr "" -#: neutron/plugins/nec/nec_plugin.py:750 +#: neutron/plugins/nec/nec_plugin.py:748 #, python-format msgid "" "update_ports(): ignore port_removed message received from different host " @@ -10473,360 +10495,360 @@ msgid "" "received_datapath_id=%(received)s)." msgstr "" -#: neutron/plugins/nec/nec_router.py:58 +#: neutron/plugins/nec/nec_router.py:56 #, python-format msgid "RouterMixin.create_router() called, router=%s ." msgstr "" -#: neutron/plugins/nec/nec_router.py:84 +#: neutron/plugins/nec/nec_router.py:82 #, python-format msgid "RouterMixin.update_router() called, id=%(id)s, router=%(router)s ." msgstr "" -#: neutron/plugins/nec/nec_router.py:102 +#: neutron/plugins/nec/nec_router.py:100 #, python-format msgid "RouterMixin.delete_router() called, id=%s." msgstr "" -#: neutron/plugins/nec/nec_router.py:121 +#: neutron/plugins/nec/nec_router.py:119 #, python-format msgid "" "RouterMixin.add_router_interface() called, id=%(id)s, " "interface=%(interface)s." msgstr "" -#: neutron/plugins/nec/nec_router.py:128 +#: neutron/plugins/nec/nec_router.py:126 #, python-format msgid "" "RouterMixin.remove_router_interface() called, id=%(id)s, " "interface=%(interface)s." msgstr "" -#: neutron/plugins/nec/nec_router.py:311 +#: neutron/plugins/nec/nec_router.py:310 #, python-format msgid "" "OFC does not support router with provider=%(provider)s, so removed it " "from supported provider (new router driver map=%(driver_map)s)" msgstr "" -#: neutron/plugins/nec/nec_router.py:319 +#: neutron/plugins/nec/nec_router.py:318 #, python-format msgid "" "default_router_provider %(default)s is supported! Please specify one of " "%(supported)s" msgstr "" -#: neutron/plugins/nec/nec_router.py:333 +#: neutron/plugins/nec/nec_router.py:332 #, python-format msgid "Enabled router drivers: %s" msgstr "" -#: neutron/plugins/nec/nec_router.py:336 +#: neutron/plugins/nec/nec_router.py:335 #, python-format msgid "" "No router provider is enabled. neutron-server terminated! " "(supported=%(supported)s, configured=%(config)s)" msgstr "" -#: neutron/plugins/nec/packet_filter.py:40 +#: neutron/plugins/nec/packet_filter.py:39 msgid "Disabled packet-filter extension." msgstr "" -#: neutron/plugins/nec/packet_filter.py:45 +#: neutron/plugins/nec/packet_filter.py:44 #, python-format msgid "create_packet_filter() called, packet_filter=%s ." msgstr "" -#: neutron/plugins/nec/packet_filter.py:61 +#: neutron/plugins/nec/packet_filter.py:60 #, python-format msgid "update_packet_filter() called, id=%(id)s packet_filter=%(packet_filter)s ." msgstr "" -#: neutron/plugins/nec/packet_filter.py:134 -#: neutron/plugins/nec/packet_filter.py:187 +#: neutron/plugins/nec/packet_filter.py:133 +#: neutron/plugins/nec/packet_filter.py:186 #, python-format msgid "Failed to create packet_filter id=%(id)s on OFC: %(exc)s" msgstr "" -#: neutron/plugins/nec/packet_filter.py:144 +#: neutron/plugins/nec/packet_filter.py:143 #, python-format msgid "delete_packet_filter() called, id=%s ." msgstr "" -#: neutron/plugins/nec/packet_filter.py:162 +#: neutron/plugins/nec/packet_filter.py:161 #, python-format msgid "activate_packet_filter_if_ready() called, packet_filter=%s." msgstr "" -#: neutron/plugins/nec/packet_filter.py:171 +#: neutron/plugins/nec/packet_filter.py:170 #, python-format msgid "" "activate_packet_filter_if_ready(): skip pf_id=%s, " "packet_filter.admin_state_up is False." msgstr "" -#: neutron/plugins/nec/packet_filter.py:174 +#: neutron/plugins/nec/packet_filter.py:173 #, python-format msgid "" "activate_packet_filter_if_ready(): skip pf_id=%s, no portinfo for the " "in_port." msgstr "" -#: neutron/plugins/nec/packet_filter.py:177 +#: neutron/plugins/nec/packet_filter.py:176 msgid "" "_activate_packet_filter_if_ready(): skip, ofc_packet_filter already " "exists." msgstr "" -#: neutron/plugins/nec/packet_filter.py:180 +#: neutron/plugins/nec/packet_filter.py:179 #, python-format msgid "activate_packet_filter_if_ready(): create packet_filter id=%s on OFC." msgstr "" -#: neutron/plugins/nec/packet_filter.py:200 +#: neutron/plugins/nec/packet_filter.py:199 #, python-format msgid "deactivate_packet_filter_if_ready() called, packet_filter=%s." msgstr "" -#: neutron/plugins/nec/packet_filter.py:205 +#: neutron/plugins/nec/packet_filter.py:204 #, python-format msgid "" "deactivate_packet_filter(): skip, Not found OFC Mapping for packet_filter" " id=%s." msgstr "" -#: neutron/plugins/nec/packet_filter.py:210 +#: neutron/plugins/nec/packet_filter.py:209 #, python-format msgid "deactivate_packet_filter(): deleting packet_filter id=%s from OFC." msgstr "" -#: neutron/plugins/nec/packet_filter.py:219 +#: neutron/plugins/nec/packet_filter.py:218 #, python-format msgid "Failed to delete packet_filter id=%(id)s from OFC: %(exc)s" msgstr "" -#: neutron/plugins/nec/packet_filter.py:250 +#: neutron/plugins/nec/packet_filter.py:249 #, python-format msgid "Error occurred while disabling packet filter(s) for port %s" msgstr "" -#: neutron/plugins/nec/router_drivers.py:125 +#: neutron/plugins/nec/router_drivers.py:123 #, python-format msgid "create_router() failed due to %s" msgstr "" -#: neutron/plugins/nec/router_drivers.py:154 +#: neutron/plugins/nec/router_drivers.py:152 #, python-format msgid "_update_ofc_routes() failed due to %s" msgstr "" -#: neutron/plugins/nec/router_drivers.py:169 +#: neutron/plugins/nec/router_drivers.py:167 #, python-format msgid "delete_router() failed due to %s" msgstr "" -#: neutron/plugins/nec/router_drivers.py:180 +#: neutron/plugins/nec/router_drivers.py:178 #, python-format msgid "" "RouterOpenFlowDriver.add_interface(): the requested port has no subnet. " "add_interface() is skipped. router_id=%(id)s, port=%(port)s)" msgstr "" -#: neutron/plugins/nec/router_drivers.py:200 +#: neutron/plugins/nec/router_drivers.py:198 #, python-format msgid "add_router_interface() failed due to %s" msgstr "" -#: neutron/plugins/nec/router_drivers.py:218 +#: neutron/plugins/nec/router_drivers.py:216 #, python-format msgid "delete_router_interface() failed due to %s" msgstr "" -#: neutron/plugins/nec/agent/nec_neutron_agent.py:53 +#: neutron/plugins/nec/agent/nec_neutron_agent.py:51 #, python-format msgid "Update ports: added=%(added)s, removed=%(removed)s" msgstr "" -#: neutron/plugins/nec/agent/nec_neutron_agent.py:76 -#: neutron/plugins/oneconvergence/agent/nvsd_neutron_agent.py:51 +#: neutron/plugins/nec/agent/nec_neutron_agent.py:74 +#: neutron/plugins/oneconvergence/agent/nvsd_neutron_agent.py:49 #, python-format msgid "port_update received: %s" msgstr "" -#: neutron/plugins/nec/agent/nec_neutron_agent.py:220 +#: neutron/plugins/nec/agent/nec_neutron_agent.py:218 msgid "No port changed." msgstr "" -#: neutron/plugins/nec/common/config.py:35 +#: neutron/plugins/nec/common/config.py:34 msgid "Host to connect to." msgstr "" -#: neutron/plugins/nec/common/config.py:37 +#: neutron/plugins/nec/common/config.py:36 msgid "Base URL of OFC REST API. It is prepended to each API request." msgstr "" -#: neutron/plugins/nec/common/config.py:40 +#: neutron/plugins/nec/common/config.py:39 msgid "Port to connect to." msgstr "" -#: neutron/plugins/nec/common/config.py:42 +#: neutron/plugins/nec/common/config.py:41 msgid "Driver to use." msgstr "" -#: neutron/plugins/nec/common/config.py:44 +#: neutron/plugins/nec/common/config.py:43 msgid "Enable packet filter." msgstr "" -#: neutron/plugins/nec/common/config.py:46 +#: neutron/plugins/nec/common/config.py:45 msgid "Use SSL to connect." msgstr "" -#: neutron/plugins/nec/common/config.py:48 +#: neutron/plugins/nec/common/config.py:47 msgid "Location of key file." msgstr "" -#: neutron/plugins/nec/common/config.py:50 +#: neutron/plugins/nec/common/config.py:49 msgid "Location of certificate file." msgstr "" -#: neutron/plugins/nec/common/config.py:52 +#: neutron/plugins/nec/common/config.py:51 msgid "Disable SSL certificate verification." msgstr "" -#: neutron/plugins/nec/common/config.py:54 +#: neutron/plugins/nec/common/config.py:53 msgid "" "Maximum attempts per OFC API request. NEC plugin retries API request to " "OFC when OFC returns ServiceUnavailable (503). The value must be greater " "than 0." msgstr "" -#: neutron/plugins/nec/common/config.py:63 +#: neutron/plugins/nec/common/config.py:62 msgid "Default router provider to use." msgstr "" -#: neutron/plugins/nec/common/config.py:66 +#: neutron/plugins/nec/common/config.py:65 msgid "List of enabled router providers." msgstr "" -#: neutron/plugins/nec/common/exceptions.py:20 +#: neutron/plugins/nec/common/exceptions.py:19 #, python-format msgid "An OFC exception has occurred: %(reason)s" msgstr "" -#: neutron/plugins/nec/common/exceptions.py:30 +#: neutron/plugins/nec/common/exceptions.py:29 #, python-format msgid "The specified OFC resource (%(resource)s) is not found." msgstr "" -#: neutron/plugins/nec/common/exceptions.py:34 +#: neutron/plugins/nec/common/exceptions.py:33 #, python-format msgid "An exception occurred in NECPluginV2 DB: %(reason)s" msgstr "" -#: neutron/plugins/nec/common/exceptions.py:38 +#: neutron/plugins/nec/common/exceptions.py:37 #, python-format msgid "" "Neutron-OFC resource mapping for %(resource)s %(neutron_id)s is not " "found. It may be deleted during processing." msgstr "" -#: neutron/plugins/nec/common/exceptions.py:44 +#: neutron/plugins/nec/common/exceptions.py:43 #, python-format msgid "OFC returns Server Unavailable (503) (Retry-After=%(retry_after)s)" msgstr "" -#: neutron/plugins/nec/common/exceptions.py:53 +#: neutron/plugins/nec/common/exceptions.py:52 #, python-format msgid "PortInfo %(id)s could not be found" msgstr "" -#: neutron/plugins/nec/common/exceptions.py:57 +#: neutron/plugins/nec/common/exceptions.py:56 msgid "" "Invalid input for operation: datapath_id should be a hex string with at " "most 8 bytes" msgstr "" -#: neutron/plugins/nec/common/exceptions.py:63 +#: neutron/plugins/nec/common/exceptions.py:62 msgid "Invalid input for operation: port_no should be [0:65535]" msgstr "" -#: neutron/plugins/nec/common/exceptions.py:68 +#: neutron/plugins/nec/common/exceptions.py:67 #, python-format msgid "Router (provider=%(provider)s) does not support an external network" msgstr "" -#: neutron/plugins/nec/common/exceptions.py:73 +#: neutron/plugins/nec/common/exceptions.py:72 #, python-format msgid "Provider %(provider)s could not be found" msgstr "" -#: neutron/plugins/nec/common/exceptions.py:77 +#: neutron/plugins/nec/common/exceptions.py:76 #, python-format msgid "Cannot create more routers with provider=%(provider)s" msgstr "" -#: neutron/plugins/nec/common/exceptions.py:81 +#: neutron/plugins/nec/common/exceptions.py:80 #, python-format msgid "" "Provider of Router %(router_id)s is %(provider)s. This operation is " "supported only for router provider %(expected_provider)s." msgstr "" -#: neutron/plugins/nec/common/ofc_client.py:54 +#: neutron/plugins/nec/common/ofc_client.py:53 #, python-format msgid "Operation on OFC failed: %(status)s%(msg)s" msgstr "" -#: neutron/plugins/nec/common/ofc_client.py:78 +#: neutron/plugins/nec/common/ofc_client.py:77 #, python-format msgid "Client request: %(host)s:%(port)s %(method)s %(action)s [%(body)s]" msgstr "" -#: neutron/plugins/nec/common/ofc_client.py:87 +#: neutron/plugins/nec/common/ofc_client.py:86 #, python-format msgid "OFC returns [%(status)s:%(data)s]" msgstr "" -#: neutron/plugins/nec/common/ofc_client.py:104 +#: neutron/plugins/nec/common/ofc_client.py:103 #, python-format msgid "OFC returns ServiceUnavailable (retry-after=%s)" msgstr "" -#: neutron/plugins/nec/common/ofc_client.py:108 +#: neutron/plugins/nec/common/ofc_client.py:107 #, python-format msgid "Specified resource %s does not exist on OFC " msgstr "" -#: neutron/plugins/nec/common/ofc_client.py:112 +#: neutron/plugins/nec/common/ofc_client.py:111 #, python-format msgid "Operation on OFC failed: status=%(status)s, detail=%(detail)s" msgstr "" -#: neutron/plugins/nec/common/ofc_client.py:115 +#: neutron/plugins/nec/common/ofc_client.py:114 msgid "Operation on OFC failed" msgstr "" -#: neutron/plugins/nec/common/ofc_client.py:124 +#: neutron/plugins/nec/common/ofc_client.py:123 #, python-format msgid "Failed to connect OFC : %s" msgstr "" -#: neutron/plugins/nec/common/ofc_client.py:140 +#: neutron/plugins/nec/common/ofc_client.py:139 #, python-format msgid "Waiting for %s seconds due to OFC Service_Unavailable." msgstr "" -#: neutron/plugins/nec/db/api.py:103 +#: neutron/plugins/nec/db/api.py:102 #, python-format msgid "del_ofc_item(): NotFound item (resource=%(resource)s, id=%(id)s) " msgstr "" -#: neutron/plugins/nec/db/api.py:137 +#: neutron/plugins/nec/db/api.py:136 #, python-format msgid "del_portinfo(): NotFound portinfo for port_id: %s" msgstr "" -#: neutron/plugins/nec/db/api.py:158 +#: neutron/plugins/nec/db/api.py:157 #: neutron/plugins/openvswitch/ovs_db_v2.py:317 #, python-format msgid "get_port_with_securitygroups() called:port_id=%s" @@ -10837,257 +10859,257 @@ msgstr "" msgid "Add provider binding (router=%(router_id)s, provider=%(provider)s)" msgstr "" -#: neutron/plugins/nec/drivers/__init__.py:36 +#: neutron/plugins/nec/drivers/__init__.py:35 #, python-format msgid "Loading OFC driver: %s" msgstr "" -#: neutron/plugins/nec/drivers/pfc.py:33 +#: neutron/plugins/nec/drivers/pfc.py:31 #, python-format msgid "OFC %(resource)s ID has an invalid format: %(ofc_id)s" msgstr "" -#: neutron/plugins/nec/extensions/packetfilter.py:33 +#: neutron/plugins/nec/extensions/packetfilter.py:30 msgid "Number of packet_filters allowed per tenant, -1 for unlimited" msgstr "" -#: neutron/plugins/nec/extensions/packetfilter.py:40 +#: neutron/plugins/nec/extensions/packetfilter.py:37 #, python-format msgid "PacketFilter %(id)s could not be found" msgstr "" -#: neutron/plugins/nec/extensions/packetfilter.py:44 +#: neutron/plugins/nec/extensions/packetfilter.py:41 #, python-format msgid "" "IP version %(version)s is not supported for %(field)s (%(value)s is " "specified)" msgstr "" -#: neutron/plugins/nec/extensions/packetfilter.py:49 +#: neutron/plugins/nec/extensions/packetfilter.py:46 #, python-format msgid "Packet Filter priority should be %(min)s-%(max)s (included)" msgstr "" -#: neutron/plugins/nec/extensions/packetfilter.py:53 +#: neutron/plugins/nec/extensions/packetfilter.py:50 #, python-format msgid "%(field)s field cannot be updated" msgstr "" -#: neutron/plugins/nec/extensions/packetfilter.py:57 +#: neutron/plugins/nec/extensions/packetfilter.py:54 #, python-format msgid "" "The backend does not support duplicated priority. Priority %(priority)s " "is in use" msgstr "" -#: neutron/plugins/nec/extensions/packetfilter.py:62 +#: neutron/plugins/nec/extensions/packetfilter.py:59 #, python-format msgid "" "Ether Type '%(eth_type)s' conflicts with protocol '%(protocol)s'. Update " "or clear protocol before changing ether type." msgstr "" -#: neutron/plugins/nuage/plugin.py:109 +#: neutron/plugins/nuage/plugin.py:110 #, python-format msgid "%(resource)s with id %(resource_id)s does not exist" msgstr "" -#: neutron/plugins/nuage/plugin.py:118 +#: neutron/plugins/nuage/plugin.py:119 #, python-format msgid "" "Either %(resource)s %(req_resource)s not found or you dont have " "credential to access it" msgstr "" -#: neutron/plugins/nuage/plugin.py:124 +#: neutron/plugins/nuage/plugin.py:125 #, python-format msgid "" "More than one entry found for %(resource)s %(req_resource)s. Use id " "instead" msgstr "" -#: neutron/plugins/nuage/plugin.py:154 +#: neutron/plugins/nuage/plugin.py:155 #, python-format msgid "Router for subnet %s not found " msgstr "" -#: neutron/plugins/nuage/plugin.py:271 +#: neutron/plugins/nuage/plugin.py:272 #, python-format msgid "Subnet %s not found on VSD" msgstr "" -#: neutron/plugins/nuage/plugin.py:416 +#: neutron/plugins/nuage/plugin.py:418 #, python-format msgid "provider:network_type %s not supported in VSP" msgstr "" -#: neutron/plugins/nuage/plugin.py:461 +#: neutron/plugins/nuage/plugin.py:463 msgid "External network with subnets can not be changed to non-external network" msgstr "" -#: neutron/plugins/nuage/plugin.py:539 +#: neutron/plugins/nuage/plugin.py:541 msgid "" "Either net_partition is not provided with subnet OR default net_partition" " is not created at the start" msgstr "" -#: neutron/plugins/nuage/plugin.py:556 +#: neutron/plugins/nuage/plugin.py:558 #, python-format msgid "Only one subnet is allowed per Provider network %s" msgstr "" -#: neutron/plugins/nuage/plugin.py:567 +#: neutron/plugins/nuage/plugin.py:569 #, python-format msgid "Only one subnet is allowed per external network %s" msgstr "" -#: neutron/plugins/nuage/plugin.py:697 +#: neutron/plugins/nuage/plugin.py:705 #, python-format msgid "" "Unable to complete operation on subnet %s.One or more ports have an IP " "allocation from this subnet." msgstr "" -#: neutron/plugins/nuage/plugin.py:724 +#: neutron/plugins/nuage/plugin.py:732 #, python-format msgid "" "Router %s does not hold default zone OR domain in VSD. Router-IF add " "failed" msgstr "" -#: neutron/plugins/nuage/plugin.py:736 +#: neutron/plugins/nuage/plugin.py:744 #, python-format msgid "Subnet %s does not hold Nuage VSD reference. Router-IF add failed" msgstr "" -#: neutron/plugins/nuage/plugin.py:746 +#: neutron/plugins/nuage/plugin.py:754 #, python-format msgid "" "Subnet %(subnet)s and Router %(router)s belong to different net_partition" " Router-IF add not permitted" msgstr "" -#: neutron/plugins/nuage/plugin.py:757 +#: neutron/plugins/nuage/plugin.py:765 #, python-format msgid "Subnet %s has one or more active VMs Router-IF add not permitted" msgstr "" -#: neutron/plugins/nuage/plugin.py:809 neutron/plugins/nuage/plugin.py:814 -#: neutron/plugins/nuage/plugin.py:820 +#: neutron/plugins/nuage/plugin.py:817 neutron/plugins/nuage/plugin.py:822 +#: neutron/plugins/nuage/plugin.py:828 #, python-format msgid "No router interface found for Router %s. Router-IF delete failed" msgstr "" -#: neutron/plugins/nuage/plugin.py:836 +#: neutron/plugins/nuage/plugin.py:844 #, python-format msgid "Subnet %s has one or more active VMs Router-IF delete not permitted" msgstr "" -#: neutron/plugins/nuage/plugin.py:845 +#: neutron/plugins/nuage/plugin.py:853 #, python-format msgid "" "Router %s does not hold net_partition assoc on Nuage VSD. Router-IF " "delete failed" msgstr "" -#: neutron/plugins/nuage/plugin.py:886 +#: neutron/plugins/nuage/plugin.py:894 msgid "" "Either net_partition is not provided with router OR default net_partition" " is not created at the start" msgstr "" -#: neutron/plugins/nuage/plugin.py:927 +#: neutron/plugins/nuage/plugin.py:935 msgid "for same subnet, multiple static routes not allowed" msgstr "" -#: neutron/plugins/nuage/plugin.py:944 +#: neutron/plugins/nuage/plugin.py:952 #, python-format msgid "Router %s does not hold net-partition assoc on VSD. extra-route failed" msgstr "" -#: neutron/plugins/nuage/plugin.py:1061 +#: neutron/plugins/nuage/plugin.py:1069 #, python-format msgid "One or more router still attached to net_partition %s." msgstr "" -#: neutron/plugins/nuage/plugin.py:1066 +#: neutron/plugins/nuage/plugin.py:1074 #, python-format msgid "NetPartition with %s does not exist" msgstr "" -#: neutron/plugins/nuage/plugin.py:1108 +#: neutron/plugins/nuage/plugin.py:1116 #, python-format msgid "sharedresource %s not found on VSD" msgstr "" -#: neutron/plugins/nuage/plugin.py:1115 neutron/plugins/nuage/plugin.py:1257 +#: neutron/plugins/nuage/plugin.py:1123 neutron/plugins/nuage/plugin.py:1273 #, python-format msgid "router %s is not associated with any net-partition" msgstr "" -#: neutron/plugins/nuage/plugin.py:1148 +#: neutron/plugins/nuage/plugin.py:1156 msgid "Floating IP can not be associated to VM in different router context" msgstr "" -#: neutron/plugins/nuage/common/config.py:22 +#: neutron/plugins/nuage/common/config.py:20 msgid "IP Address and Port of Nuage's VSD server" msgstr "" -#: neutron/plugins/nuage/common/config.py:25 +#: neutron/plugins/nuage/common/config.py:23 msgid "Username and password for authentication" msgstr "" -#: neutron/plugins/nuage/common/config.py:27 +#: neutron/plugins/nuage/common/config.py:25 msgid "Boolean for SSL connection with VSD server" msgstr "" -#: neutron/plugins/nuage/common/config.py:29 +#: neutron/plugins/nuage/common/config.py:27 msgid "Nuage provided base uri to reach out to VSD" msgstr "" -#: neutron/plugins/nuage/common/config.py:31 +#: neutron/plugins/nuage/common/config.py:29 msgid "" "Organization name in which VSD will orchestrate network resources using " "openstack" msgstr "" -#: neutron/plugins/nuage/common/config.py:34 +#: neutron/plugins/nuage/common/config.py:32 msgid "Nuage provided uri for initial authorization to access VSD" msgstr "" -#: neutron/plugins/nuage/common/config.py:38 +#: neutron/plugins/nuage/common/config.py:36 msgid "" "Default Network partition in which VSD will orchestrate network resources" " using openstack" msgstr "" -#: neutron/plugins/nuage/common/config.py:42 +#: neutron/plugins/nuage/common/config.py:40 msgid "Per Net Partition quota of floating ips" msgstr "" -#: neutron/plugins/nuage/common/config.py:47 +#: neutron/plugins/nuage/common/config.py:45 msgid "Nuage plugin will sync resources between openstack and VSD" msgstr "" -#: neutron/plugins/nuage/common/config.py:50 +#: neutron/plugins/nuage/common/config.py:48 msgid "" "Sync interval in seconds between openstack and VSD. It defines how often " "the synchronization is done. If not set, value of 0 is assumed and sync " "will be performed only once, at the Neutron startup time." msgstr "" -#: neutron/plugins/nuage/common/exceptions.py:23 +#: neutron/plugins/nuage/common/exceptions.py:21 #, python-format msgid "Nuage Plugin does not support this operation: %(msg)s" msgstr "" -#: neutron/plugins/nuage/common/exceptions.py:27 +#: neutron/plugins/nuage/common/exceptions.py:25 #, python-format msgid "Bad request: %(msg)s" msgstr "" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:988 -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1486 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1489 #, python-format msgid "Parsing bridge_mappings failed: %s." msgstr "" @@ -11103,7 +11125,7 @@ msgid "Invalid tunnel type specificed: %s" msgstr "" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:1017 -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1514 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1517 msgid "Tunneling cannot be enabled without a valid local_ip." msgstr "" @@ -11111,32 +11133,32 @@ msgstr "" msgid "Number of seconds to retry acquiring an Open vSwitch datapath" msgstr "" -#: neutron/plugins/oneconvergence/plugin.py:238 +#: neutron/plugins/oneconvergence/plugin.py:236 msgid "Failed to create subnet, deleting it from neutron" msgstr "" -#: neutron/plugins/oneconvergence/plugin.py:302 +#: neutron/plugins/oneconvergence/plugin.py:300 #, python-format msgid "Deleting newly created neutron port %s" msgstr "" -#: neutron/plugins/oneconvergence/plugin.py:375 +#: neutron/plugins/oneconvergence/plugin.py:373 msgid "Failed to create floatingip" msgstr "" -#: neutron/plugins/oneconvergence/plugin.py:414 +#: neutron/plugins/oneconvergence/plugin.py:412 msgid "Failed to create router" msgstr "" -#: neutron/plugins/oneconvergence/agent/nvsd_neutron_agent.py:154 +#: neutron/plugins/oneconvergence/agent/nvsd_neutron_agent.py:152 msgid "Port list is updated" msgstr "" -#: neutron/plugins/oneconvergence/agent/nvsd_neutron_agent.py:161 +#: neutron/plugins/oneconvergence/agent/nvsd_neutron_agent.py:159 msgid "AGENT looping....." msgstr "" -#: neutron/plugins/oneconvergence/agent/nvsd_neutron_agent.py:173 +#: neutron/plugins/oneconvergence/agent/nvsd_neutron_agent.py:171 msgid "NVSD Agent initialized successfully, now running... " msgstr "" @@ -11211,169 +11233,169 @@ msgstr "" msgid "Internal Server Error from NVSD controller: %(reason)s" msgstr "" -#: neutron/plugins/oneconvergence/lib/nvsdlib.py:55 +#: neutron/plugins/oneconvergence/lib/nvsdlib.py:53 #, python-format msgid "Could not create a %(resource)s under tenant %(tenant_id)s" msgstr "" -#: neutron/plugins/oneconvergence/lib/nvsdlib.py:59 +#: neutron/plugins/oneconvergence/lib/nvsdlib.py:57 #, python-format msgid "Failed to %(method)s %(resource)s id=%(resource_id)s" msgstr "" -#: neutron/plugins/oneconvergence/lib/nvsdlib.py:65 +#: neutron/plugins/oneconvergence/lib/nvsdlib.py:63 #, python-format msgid "Failed to %(method)s %(resource)s" msgstr "" -#: neutron/plugins/oneconvergence/lib/nvsdlib.py:110 +#: neutron/plugins/oneconvergence/lib/nvsdlib.py:108 #, python-format msgid "Network %(id)s created under tenant %(tenant_id)s" msgstr "" -#: neutron/plugins/oneconvergence/lib/nvsdlib.py:127 +#: neutron/plugins/oneconvergence/lib/nvsdlib.py:125 #, python-format msgid "Network %(id)s updated under tenant %(tenant_id)s" msgstr "" -#: neutron/plugins/oneconvergence/lib/nvsdlib.py:148 +#: neutron/plugins/oneconvergence/lib/nvsdlib.py:146 #, python-format msgid "Network %(id)s deleted under tenant %(tenant_id)s" msgstr "" -#: neutron/plugins/oneconvergence/lib/nvsdlib.py:161 +#: neutron/plugins/oneconvergence/lib/nvsdlib.py:159 #, python-format msgid "Subnet %(id)s created under tenant %(tenant_id)s" msgstr "" -#: neutron/plugins/oneconvergence/lib/nvsdlib.py:175 +#: neutron/plugins/oneconvergence/lib/nvsdlib.py:173 #, python-format msgid "Subnet %(id)s deleted under tenant %(tenant_id)s" msgstr "" -#: neutron/plugins/oneconvergence/lib/nvsdlib.py:191 +#: neutron/plugins/oneconvergence/lib/nvsdlib.py:189 #, python-format msgid "Subnet %(id)s updated under tenant %(tenant_id)s" msgstr "" -#: neutron/plugins/oneconvergence/lib/nvsdlib.py:223 +#: neutron/plugins/oneconvergence/lib/nvsdlib.py:221 #, python-format msgid "Port %(id)s created under tenant %(tenant_id)s" msgstr "" -#: neutron/plugins/oneconvergence/lib/nvsdlib.py:247 +#: neutron/plugins/oneconvergence/lib/nvsdlib.py:245 #, python-format msgid "Port %(id)s updated under tenant %(tenant_id)s" msgstr "" -#: neutron/plugins/oneconvergence/lib/nvsdlib.py:260 +#: neutron/plugins/oneconvergence/lib/nvsdlib.py:258 #, python-format msgid "Port %(id)s deleted under tenant %(tenant_id)s" msgstr "" -#: neutron/plugins/oneconvergence/lib/nvsdlib.py:282 +#: neutron/plugins/oneconvergence/lib/nvsdlib.py:280 #, python-format msgid "Flatingip %(id)s created under tenant %(tenant_id)s" msgstr "" -#: neutron/plugins/oneconvergence/lib/nvsdlib.py:300 +#: neutron/plugins/oneconvergence/lib/nvsdlib.py:298 #, python-format msgid "Flatingip %(id)s updated under tenant %(tenant_id)s" msgstr "" -#: neutron/plugins/oneconvergence/lib/nvsdlib.py:314 +#: neutron/plugins/oneconvergence/lib/nvsdlib.py:312 #, python-format msgid "Flatingip %(id)s deleted under tenant %(tenant_id)s" msgstr "" -#: neutron/plugins/oneconvergence/lib/nvsdlib.py:327 +#: neutron/plugins/oneconvergence/lib/nvsdlib.py:325 #, python-format msgid "Router %(id)s created under tenant %(tenant_id)s" msgstr "" -#: neutron/plugins/oneconvergence/lib/nvsdlib.py:343 +#: neutron/plugins/oneconvergence/lib/nvsdlib.py:341 #, python-format msgid "Router %(id)s updated under tenant %(tenant_id)s" msgstr "" -#: neutron/plugins/oneconvergence/lib/nvsdlib.py:353 +#: neutron/plugins/oneconvergence/lib/nvsdlib.py:351 #, python-format msgid "Router %(id)s deleted under tenant %(tenant_id)s" msgstr "" -#: neutron/plugins/oneconvergence/lib/plugin_helper.py:81 +#: neutron/plugins/oneconvergence/lib/plugin_helper.py:79 #, python-format msgid "Unable to connect to NVSD controller. Exiting after %(retries)s attempts" msgstr "" -#: neutron/plugins/oneconvergence/lib/plugin_helper.py:90 +#: neutron/plugins/oneconvergence/lib/plugin_helper.py:88 #, python-format msgid "Login Failed: %s" msgstr "" -#: neutron/plugins/oneconvergence/lib/plugin_helper.py:91 +#: neutron/plugins/oneconvergence/lib/plugin_helper.py:89 #, python-format msgid "Unable to establish connection with Controller %s" msgstr "" -#: neutron/plugins/oneconvergence/lib/plugin_helper.py:93 +#: neutron/plugins/oneconvergence/lib/plugin_helper.py:91 msgid "Retrying after 1 second..." msgstr "" -#: neutron/plugins/oneconvergence/lib/plugin_helper.py:97 +#: neutron/plugins/oneconvergence/lib/plugin_helper.py:95 #, python-format msgid "Login Successful %(uri)s %(status)s" msgstr "" -#: neutron/plugins/oneconvergence/lib/plugin_helper.py:101 +#: neutron/plugins/oneconvergence/lib/plugin_helper.py:99 #, python-format msgid "AuthToken = %s" msgstr "" -#: neutron/plugins/oneconvergence/lib/plugin_helper.py:103 +#: neutron/plugins/oneconvergence/lib/plugin_helper.py:101 msgid "login failed" msgstr "" -#: neutron/plugins/oneconvergence/lib/plugin_helper.py:111 +#: neutron/plugins/oneconvergence/lib/plugin_helper.py:109 msgid "No Token, Re-login" msgstr "" -#: neutron/plugins/oneconvergence/lib/plugin_helper.py:127 +#: neutron/plugins/oneconvergence/lib/plugin_helper.py:125 #, python-format msgid "request: %(method)s %(uri)s successful" msgstr "" -#: neutron/plugins/oneconvergence/lib/plugin_helper.py:134 +#: neutron/plugins/oneconvergence/lib/plugin_helper.py:132 #, python-format msgid "request: Request failed from Controller side :%s" msgstr "" -#: neutron/plugins/oneconvergence/lib/plugin_helper.py:139 +#: neutron/plugins/oneconvergence/lib/plugin_helper.py:137 #, python-format msgid "Response is Null, Request timed out: %(method)s to %(uri)s" msgstr "" -#: neutron/plugins/oneconvergence/lib/plugin_helper.py:151 +#: neutron/plugins/oneconvergence/lib/plugin_helper.py:149 #, python-format msgid "Request %(method)s %(uri)s body = %(body)s failed with status %(status)s" msgstr "" -#: neutron/plugins/oneconvergence/lib/plugin_helper.py:155 +#: neutron/plugins/oneconvergence/lib/plugin_helper.py:153 #, python-format msgid "%s" msgstr "" -#: neutron/plugins/oneconvergence/lib/plugin_helper.py:159 +#: neutron/plugins/oneconvergence/lib/plugin_helper.py:157 #, python-format msgid "%(method)s to %(url)s, unexpected response code: %(status)d" msgstr "" -#: neutron/plugins/oneconvergence/lib/plugin_helper.py:165 +#: neutron/plugins/oneconvergence/lib/plugin_helper.py:163 #, python-format msgid "Request failed from Controller side with Status=%s" msgstr "" -#: neutron/plugins/oneconvergence/lib/plugin_helper.py:169 +#: neutron/plugins/oneconvergence/lib/plugin_helper.py:167 #, python-format msgid "Success: %(method)s %(url)s status=%(status)s" msgstr "" @@ -11459,26 +11481,26 @@ msgstr "" msgid "%s networks are not enabled" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_dvr_neutron_agent.py:159 +#: neutron/plugins/openvswitch/agent/ovs_dvr_neutron_agent.py:158 msgid "DVR: Failed to obtain local DVR Mac address" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_dvr_neutron_agent.py:292 +#: neutron/plugins/openvswitch/agent/ovs_dvr_neutron_agent.py:291 #, python-format msgid "DVR: Duplicate DVR router interface detected for subnet %s" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_dvr_neutron_agent.py:300 +#: neutron/plugins/openvswitch/agent/ovs_dvr_neutron_agent.py:299 #, python-format msgid "DVR: Unable to retrieve subnet information for subnet_id %s" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_dvr_neutron_agent.py:459 +#: neutron/plugins/openvswitch/agent/ovs_dvr_neutron_agent.py:458 #, python-format msgid "Centralized-SNAT port %s already seen on " msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_dvr_neutron_agent.py:461 +#: neutron/plugins/openvswitch/agent/ovs_dvr_neutron_agent.py:460 #, python-format msgid "a different subnet %s" msgstr "" @@ -11490,180 +11512,180 @@ msgid "" "error: %(error)s" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:305 -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:557 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:308 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:560 #, python-format msgid "Network %s not used on agent." msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:314 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:317 #, python-format msgid "port_update message processed for port %s" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:317 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:320 msgid "tunnel_update received" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:326 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:329 msgid "No tunnel_type specified, cannot create tunnels" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:329 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:332 #, python-format msgid "tunnel_type %s not supported by agent" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:437 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:440 #, python-format msgid "Action %s not supported" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:458 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:461 #, python-format msgid "No local VLAN available for net-id=%s" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:466 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:469 #, python-format msgid "Assigning %(vlan_id)s as local vlan for net-id=%(net_uuid)s" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:495 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:498 #, python-format msgid "" "Cannot provision %(network_type)s network for net-id=%(net_uuid)s - " "tunneling disabled" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:514 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:517 #, python-format msgid "" "Cannot provision flat network for net-id=%(net_uuid)s - no bridge for " "physical_network %(physical_network)s" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:534 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:537 #, python-format msgid "" "Cannot provision VLAN network for net-id=%(net_uuid)s - no bridge for " "physical_network %(physical_network)s" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:543 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:546 #, python-format msgid "" "Cannot provision unknown network type %(network_type)s for net-" "id=%(net_uuid)s" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:560 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:563 #, python-format msgid "Reclaiming vlan = %(vlan_id)s from net-id = %(net_uuid)s" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:601 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:604 #, python-format msgid "" "Cannot reclaim unknown network type %(network_type)s for net-" "id=%(net_uuid)s" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:655 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:658 #, python-format msgid "port_unbound(): net_uuid %s not in local_vlan_map" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:728 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:731 #, python-format msgid "Adding %s to list of bridges." msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:749 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:752 msgid "" "Failed to create OVS patch port. Cannot have tunneling enabled on this " "agent, since this version of OVS does not support tunnels or patch ports." " Agent terminated!" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:843 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:846 #, python-format msgid "" "Creating an interface named %(name)s exceeds the %(limit)d character " "limitation. It was shortened to %(new_name)s to fit." msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:864 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:867 #, python-format msgid "Mapping physical network %(physical_network)s to bridge %(bridge)s" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:870 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:873 #, python-format msgid "" "Bridge %(bridge)s for physical network %(physical_network)s does not " "exist. Agent terminated!" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:974 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:977 #, python-format msgid "Port '%(port_name)s' has lost its vlan tag '%(vlan_tag)d'!" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1003 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1006 #, python-format msgid "VIF port: %s has no ofport configured, and might not be able to transmit" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1013 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1016 #, python-format msgid "No VIF port for port %s defined on agent." msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1026 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1029 #: neutron/tests/unit/ofagent/test_ofa_neutron_agent.py:799 -#: neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py:1248 +#: neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py:1271 msgid "ofport should have a value that can be interpreted as an integer" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1029 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1032 #: neutron/tests/unit/ofagent/test_ofa_neutron_agent.py:782 #: neutron/tests/unit/ofagent/test_ofa_neutron_agent.py:802 -#: neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py:1231 -#: neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py:1251 -#: neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py:1268 +#: neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py:1254 +#: neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py:1274 +#: neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py:1291 #, python-format msgid "Failed to set-up %(type)s tunnel port to %(ip)s" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1094 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1097 #, python-format msgid "" "Port %s was not found on the integration bridge and will therefore not be" " processed" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1117 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1120 #, python-format msgid "Setting status for %s to UP" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1121 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1124 #, python-format msgid "Setting status for %s to DOWN" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1124 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1127 #, python-format msgid "Configuration for device %s completed." msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1143 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1146 #, python-format msgid "Ancillary Port %s added" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1215 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1218 #, python-format msgid "" "process_network_ports - iteration:%(iter_num)d " @@ -11672,116 +11694,116 @@ msgid "" "%(elapsed).3f" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1231 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1234 #, python-format msgid "" "process_network_ports - iteration:%d - failure while retrieving port " "details from server" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1238 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1241 #, python-format msgid "" "process_network_ports - iteration:%(iter_num)d -treat_devices_removed " "completed in %(elapsed).3f" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1252 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1255 #, python-format msgid "" "process_ancillary_network_ports - iteration: %(iter_num)d - " "treat_ancillary_devices_added completed in %(elapsed).3f" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1260 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1263 #, python-format msgid "" "process_ancillary_network_ports - iteration:%d - failure while retrieving" " port details from server" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1268 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1271 #, python-format msgid "" "process_ancillary_network_ports - iteration: %(iter_num)d - " "treat_ancillary_devices_removed completed in %(elapsed).3f" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1281 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1284 #, python-format msgid "Unable to create tunnel port. Invalid remote IP: %s" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1310 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1313 #, python-format msgid "Unable to sync tunnel IP %(local_ip)s: %(e)s" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1347 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1350 #, python-format msgid "Agent rpc_loop - iteration:%d started" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1369 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1372 msgid "Agent tunnel out of sync with plugin!" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1373 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1376 msgid "Error while synchronizing tunnels" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1377 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1380 #, python-format msgid "" "Agent rpc_loop - iteration:%(iter_num)d - starting polling. " "Elapsed:%(elapsed).3f" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1389 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1392 #, python-format msgid "" "Agent rpc_loop - iteration:%(iter_num)d - port information retrieved. " "Elapsed:%(elapsed).3f" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1399 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1402 #, python-format msgid "Starting to process devices in:%s" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1404 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1407 #, python-format msgid "" "Agent rpc_loop - iteration:%(iter_num)d -ports processed. " "Elapsed:%(elapsed).3f" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1419 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1422 #, python-format msgid "" "Agent rpc_loop - iteration:%(iter_num)d -ancillary port info retrieved. " "Elapsed:%(elapsed).3f" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1428 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1431 #, python-format msgid "" "Agent rpc_loop - iteration:%(iter_num)d - ancillary ports processed. " "Elapsed:%(elapsed).3f" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1442 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1445 msgid "Error while processing VIF ports" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1449 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1452 #, python-format msgid "" "Agent rpc_loop - iteration:%(iter_num)d completed. Processed ports " "statistics: %(port_stats)s. Elapsed:%(elapsed).3f" msgstr "" -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1511 +#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1514 #, python-format msgid "Invalid tunnel type specified: %s" msgstr "" @@ -11876,121 +11898,121 @@ msgstr "" msgid "Make the l2 agent run in DVR mode." msgstr "" -#: neutron/plugins/plumgrid/common/exceptions.py:24 +#: neutron/plugins/plumgrid/common/exceptions.py:22 #, python-format msgid "PLUMgrid Plugin Error: %(err_msg)s" msgstr "" -#: neutron/plugins/plumgrid/common/exceptions.py:28 +#: neutron/plugins/plumgrid/common/exceptions.py:26 #, python-format msgid "Connection failed with PLUMgrid Director: %(err_msg)s" msgstr "" -#: neutron/plugins/plumgrid/drivers/fake_plumlib.py:31 +#: neutron/plugins/plumgrid/drivers/fake_plumlib.py:29 msgid "Python PLUMgrid Fake Library Started " msgstr "" -#: neutron/plugins/plumgrid/drivers/fake_plumlib.py:36 +#: neutron/plugins/plumgrid/drivers/fake_plumlib.py:34 #, python-format msgid "Fake Director: %s" msgstr "" -#: neutron/plugins/plumgrid/drivers/plumlib.py:37 +#: neutron/plugins/plumgrid/drivers/plumlib.py:35 msgid "Python PLUMgrid Library Started " msgstr "" -#: neutron/plugins/plumgrid/plumgrid_plugin/plumgrid_plugin.py:46 +#: neutron/plugins/plumgrid/plumgrid_plugin/plumgrid_plugin.py:44 msgid "PLUMgrid Director server to connect to" msgstr "" -#: neutron/plugins/plumgrid/plumgrid_plugin/plumgrid_plugin.py:48 +#: neutron/plugins/plumgrid/plumgrid_plugin/plumgrid_plugin.py:46 msgid "PLUMgrid Director server port to connect to" msgstr "" -#: neutron/plugins/plumgrid/plumgrid_plugin/plumgrid_plugin.py:50 +#: neutron/plugins/plumgrid/plumgrid_plugin/plumgrid_plugin.py:48 msgid "PLUMgrid Director admin username" msgstr "" -#: neutron/plugins/plumgrid/plumgrid_plugin/plumgrid_plugin.py:52 +#: neutron/plugins/plumgrid/plumgrid_plugin/plumgrid_plugin.py:50 msgid "PLUMgrid Director admin password" msgstr "" -#: neutron/plugins/plumgrid/plumgrid_plugin/plumgrid_plugin.py:54 +#: neutron/plugins/plumgrid/plumgrid_plugin/plumgrid_plugin.py:52 msgid "PLUMgrid Director server timeout" msgstr "" -#: neutron/plugins/plumgrid/plumgrid_plugin/plumgrid_plugin.py:57 +#: neutron/plugins/plumgrid/plumgrid_plugin/plumgrid_plugin.py:55 msgid "PLUMgrid Driver" msgstr "" -#: neutron/plugins/plumgrid/plumgrid_plugin/plumgrid_plugin.py:75 +#: neutron/plugins/plumgrid/plumgrid_plugin/plumgrid_plugin.py:73 msgid "Neutron PLUMgrid Director: Starting Plugin" msgstr "" -#: neutron/plugins/plumgrid/plumgrid_plugin/plumgrid_plugin.py:93 +#: neutron/plugins/plumgrid/plumgrid_plugin/plumgrid_plugin.py:91 #, python-format msgid "Neutron PLUMgrid Director: %s" msgstr "" -#: neutron/plugins/plumgrid/plumgrid_plugin/plumgrid_plugin.py:770 +#: neutron/plugins/plumgrid/plumgrid_plugin/plumgrid_plugin.py:768 msgid "" "Networks with admin_state_up=False are not supported by PLUMgrid plugin " "yet." msgstr "" -#: neutron/plugins/ryu/ryu_neutron_plugin.py:68 +#: neutron/plugins/ryu/ryu_neutron_plugin.py:67 #, python-format msgid "get_ofp_rest_api: %s" msgstr "" -#: neutron/plugins/ryu/ryu_neutron_plugin.py:125 +#: neutron/plugins/ryu/ryu_neutron_plugin.py:124 msgid "Invalid configuration. check ryu.ini" msgstr "" -#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:95 +#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:94 #, python-format msgid "Could not get IPv4 address from %(nic)s: %(cfg)s" msgstr "" -#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:161 +#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:160 #, python-format msgid "External port %s" msgstr "" -#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:169 +#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:168 msgid "Get Ryu rest API address" msgstr "" -#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:216 +#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:215 msgid "Ryu rest API port isn't specified" msgstr "" -#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:217 +#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:216 #, python-format msgid "Going to ofp controller mode %s" msgstr "" -#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:293 +#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:292 #, python-format msgid "tunnel_ip %s" msgstr "" -#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:295 +#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:294 #, python-format msgid "ovsdb_port %s" msgstr "" -#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:297 +#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:296 #, python-format msgid "ovsdb_ip %s" msgstr "" -#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:303 +#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:302 #, python-format msgid "Initialization failed: %s" msgstr "" -#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:306 +#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:305 msgid "" "Ryu initialization on the node is done. Agent initialized successfully, " "now running..." @@ -12054,42 +12076,42 @@ msgstr "" msgid "Transaction retry exhausted (%d). Abandoned tunnel key allocation." msgstr "" -#: neutron/plugins/sriovnicagent/eswitch_manager.py:46 +#: neutron/plugins/sriovnicagent/eswitch_manager.py:44 #, python-format msgid "Failed to get devices for %s" msgstr "" -#: neutron/plugins/sriovnicagent/eswitch_manager.py:48 +#: neutron/plugins/sriovnicagent/eswitch_manager.py:46 msgid "Device not found" msgstr "" -#: neutron/plugins/sriovnicagent/eswitch_manager.py:62 +#: neutron/plugins/sriovnicagent/eswitch_manager.py:60 msgid "Device has no virtual functions" msgstr "" -#: neutron/plugins/sriovnicagent/eswitch_manager.py:141 -#: neutron/plugins/sriovnicagent/eswitch_manager.py:154 +#: neutron/plugins/sriovnicagent/eswitch_manager.py:139 +#: neutron/plugins/sriovnicagent/eswitch_manager.py:152 #, python-format msgid "Cannot find vf index for pci slot %s" msgstr "" -#: neutron/plugins/sriovnicagent/eswitch_manager.py:279 +#: neutron/plugins/sriovnicagent/eswitch_manager.py:277 #, python-format msgid "device pci mismatch: %(device_mac)s - %(pci_slot)s" msgstr "" -#: neutron/plugins/sriovnicagent/pci_lib.py:58 -#: neutron/plugins/sriovnicagent/pci_lib.py:81 -#: neutron/plugins/sriovnicagent/pci_lib.py:108 +#: neutron/plugins/sriovnicagent/pci_lib.py:56 +#: neutron/plugins/sriovnicagent/pci_lib.py:79 +#: neutron/plugins/sriovnicagent/pci_lib.py:106 msgid "Failed executing ip command" msgstr "" -#: neutron/plugins/sriovnicagent/pci_lib.py:129 +#: neutron/plugins/sriovnicagent/pci_lib.py:127 #, python-format msgid "Cannot find vfs %(vfs)s in device %(dev_name)s" msgstr "" -#: neutron/plugins/sriovnicagent/pci_lib.py:145 +#: neutron/plugins/sriovnicagent/pci_lib.py:143 #, python-format msgid "failed to parse vf link show line %(line)s: for %(device)s" msgstr "" @@ -13672,13 +13694,13 @@ msgid "" msgstr "" #: neutron/plugins/vmware/plugins/base.py:673 -#: neutron/plugins/vmware/plugins/base.py:1739 +#: neutron/plugins/vmware/plugins/base.py:1749 #, python-format msgid "Logical router resource %s not found on NSX platform" msgstr "" #: neutron/plugins/vmware/plugins/base.py:677 -#: neutron/plugins/vmware/plugins/base.py:1743 +#: neutron/plugins/vmware/plugins/base.py:1753 msgid "Unable to update logical routeron NSX Platform" msgstr "" @@ -13720,240 +13742,240 @@ msgstr "" msgid "%(net_type_param)s %(net_type_value)s not supported" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:845 +#: neutron/plugins/vmware/plugins/base.py:849 #, python-format msgid "No switch has available ports (%d checked)" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:879 +#: neutron/plugins/vmware/plugins/base.py:883 #, python-format msgid "Maximum number of logical ports reached for logical network %s" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:925 +#: neutron/plugins/vmware/plugins/base.py:929 #, python-format msgid "" "Network with admin_state_up=False are not yet supported by this plugin. " "Ignoring setting for network %s" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1003 +#: neutron/plugins/vmware/plugins/base.py:1007 #, python-format msgid "The following logical switches were not found on the NSX backend:%s" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1040 +#: neutron/plugins/vmware/plugins/base.py:1044 msgid "admin_state_up=False networks are not supported." msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1060 +#: neutron/plugins/vmware/plugins/base.py:1064 #, python-format msgid "Unable to find NSX mappings for neutron network:%s" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1067 +#: neutron/plugins/vmware/plugins/base.py:1071 #, python-format msgid "" "Logical switch update on NSX backend failed. Neutron network " "id:%(net_id)s; NSX lswitch id:%(lswitch_id)s;Error:%(error)s" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1138 +#: neutron/plugins/vmware/plugins/base.py:1148 #, python-format msgid "port created on NSX backend for tenant %(tenant_id)s: (%(id)s)" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1141 +#: neutron/plugins/vmware/plugins/base.py:1151 #, python-format msgid "Logical switch for network %s was not found in NSX." msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1152 +#: neutron/plugins/vmware/plugins/base.py:1162 msgid "Unable to create port or set port attachment in NSX." msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1240 +#: neutron/plugins/vmware/plugins/base.py:1250 #, python-format msgid "Updating port: %s" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1275 +#: neutron/plugins/vmware/plugins/base.py:1285 #, python-format msgid "Unable to update port id: %s." msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1358 +#: neutron/plugins/vmware/plugins/base.py:1368 msgid "" "Cannot create a distributed router with the NSX platform currently in " "execution. Please, try without specifying the 'distributed' attribute." msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1364 +#: neutron/plugins/vmware/plugins/base.py:1374 msgid "Unable to create logical router on NSX Platform" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1375 +#: neutron/plugins/vmware/plugins/base.py:1385 #, python-format msgid "" "Unable to create L3GW port on logical router %(router_uuid)s. Verify " "Default Layer-3 Gateway service %(def_l3_gw_svc)s id is correct" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1385 +#: neutron/plugins/vmware/plugins/base.py:1395 #, python-format msgid "Unable to create router %s on NSX backend" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1414 -#: neutron/plugins/vmware/plugins/base.py:1499 +#: neutron/plugins/vmware/plugins/base.py:1424 +#: neutron/plugins/vmware/plugins/base.py:1509 #: neutron/plugins/vmware/plugins/service.py:201 #: neutron/plugins/vmware/plugins/service.py:1240 #, python-format msgid "Network '%s' is not a valid external network" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1463 +#: neutron/plugins/vmware/plugins/base.py:1473 #, python-format msgid "Failed to set gateway info for router being created:%s - removing router" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1466 +#: neutron/plugins/vmware/plugins/base.py:1476 #, python-format msgid "" "Create router failed while setting external gateway. Router:%s has been " "removed from DB and backend" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1508 +#: neutron/plugins/vmware/plugins/base.py:1518 msgid "" "'routes' cannot contain route '0.0.0.0/0', this must be updated through " "the default gateway attribute" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1524 +#: neutron/plugins/vmware/plugins/base.py:1534 #, python-format msgid "Logical router %s not found on NSX Platform" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1528 +#: neutron/plugins/vmware/plugins/base.py:1538 msgid "Unable to update logical router on NSX Platform" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1530 +#: neutron/plugins/vmware/plugins/base.py:1540 msgid "" "Request cannot contain 'routes' with the NSX platform currently in " "execution. Please, try without specifying the static routes." msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1587 +#: neutron/plugins/vmware/plugins/base.py:1597 #, python-format msgid "Logical router '%s' not found on NSX Platform" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1591 +#: neutron/plugins/vmware/plugins/base.py:1601 #, python-format msgid "Unable to delete logical router '%s' on NSX Platform" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1601 +#: neutron/plugins/vmware/plugins/base.py:1611 #, python-format msgid "" "Unable to remove NSX mapping for Neutron router %(router_id)s because of " "the following exception:%(d_exc)s" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1676 +#: neutron/plugins/vmware/plugins/base.py:1686 #, python-format msgid "" "Add_router_interface completed for subnet:%(subnet_id)s and " "router:%(router_id)s" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1775 +#: neutron/plugins/vmware/plugins/base.py:1785 #, python-format msgid "" "An error occurred while removing NAT rules on the NSX platform for " "floating ip:%s" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1780 +#: neutron/plugins/vmware/plugins/base.py:1790 msgid "An incorrect number of matching NAT rules was found on the NSX platform" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1922 +#: neutron/plugins/vmware/plugins/base.py:1932 #, python-format msgid "" "An error occurred while creating NAT rules on the NSX platform for " "floating ip:%(floating_ip)s mapped to internal ip:%(internal_ip)s" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1928 +#: neutron/plugins/vmware/plugins/base.py:1938 msgid "Failed to update NAT rules for floatingip update" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1967 +#: neutron/plugins/vmware/plugins/base.py:1977 #, python-format msgid "The port '%s' is not associated with floating IPs" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1970 +#: neutron/plugins/vmware/plugins/base.py:1980 #, python-format msgid "Nat rules not found in nsx for port: %s" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:2010 +#: neutron/plugins/vmware/plugins/base.py:2020 #, python-format msgid "Unable to create l2_gw_service for: %s" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:2033 +#: neutron/plugins/vmware/plugins/base.py:2043 msgid "" "Unable to remove gateway service from NSX plaform - the resource was not " "found" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:2062 +#: neutron/plugins/vmware/plugins/base.py:2072 #, python-format msgid "Unable to update name on NSX backend for network gateway: %s" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:2134 -#: neutron/plugins/vmware/plugins/base.py:2172 +#: neutron/plugins/vmware/plugins/base.py:2144 +#: neutron/plugins/vmware/plugins/base.py:2182 #, python-format msgid "" "Neutron gateway device: %(neutron_id)s; NSX transport node identifier: " "%(nsx_id)s; Operational status: %(status)s." msgstr "" -#: neutron/plugins/vmware/plugins/base.py:2269 +#: neutron/plugins/vmware/plugins/base.py:2279 #, python-format msgid "" "Removal of gateway device: %(neutron_id)s failed on NSX backend (NSX " "id:%(nsx_id)s) because the NSX resource was not found" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:2276 +#: neutron/plugins/vmware/plugins/base.py:2286 #, python-format msgid "" "Removal of gateway device: %(neutron_id)s failed on NSX backend (NSX " "id:%(nsx_id)s). Neutron and NSX states have diverged." msgstr "" -#: neutron/plugins/vmware/plugins/base.py:2324 +#: neutron/plugins/vmware/plugins/base.py:2334 #, python-format msgid "" "Error while updating security profile %(uuid)s with name %(name)s: " "%(error)s." msgstr "" -#: neutron/plugins/vmware/plugins/base.py:2356 +#: neutron/plugins/vmware/plugins/base.py:2366 #, python-format msgid "" "The NSX security profile %(sec_profile_id)s, associated with the Neutron " "security group %(sec_group_id)s was not found on the backend" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:2364 +#: neutron/plugins/vmware/plugins/base.py:2374 #, python-format msgid "" "An exception occurred while removing the NSX security profile " @@ -13961,12 +13983,12 @@ msgid "" "%(sec_group_id)s" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:2371 +#: neutron/plugins/vmware/plugins/base.py:2381 #, python-format msgid "Unable to remove security group %s from backend" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:2384 +#: neutron/plugins/vmware/plugins/base.py:2394 #, python-format msgid "Port values not valid for protocol: %s" msgstr "" @@ -14236,167 +14258,167 @@ msgstr "" msgid "Migration has been successful:\n" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:135 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:132 #, python-format msgid "" "VCNS: Failed to get edge status:\n" "%s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:162 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:159 #, python-format msgid "VCNS: start updating vnic %s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:167 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:164 #, python-format msgid "" "VCNS: Failed to update vnic %(config)s:\n" "%(response)s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:173 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:170 #, python-format msgid "VCNS: Failed to update vnic %d" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:181 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:178 #, python-format msgid "VCNS: update vnic %(index)d: %(addr)s %(netmask)s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:190 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:187 #, python-format msgid "Vnic %d currently not supported" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:211 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:208 #, python-format msgid "VCNS: start deploying edge %s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:219 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:216 #, python-format msgid "VCNS: deploying edge %s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:224 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:221 #, python-format msgid "VCNS: deploy edge failed for router %s." msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:243 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:240 #, python-format msgid "VCNS: Edge %s status query failed." msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:248 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:245 #, python-format msgid "VCNS: Unable to retrieve edge %(edge_id)s status. Retry %(retries)d." msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:255 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:252 #, python-format msgid "VCNS: Unable to retrieve edge %s status. Abort." msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:259 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:256 #, python-format msgid "VCNS: Edge %s status" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:266 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:263 #, python-format msgid "VCNS: Failed to deploy edge %(edge_id)s for %(name)s, status %(status)d" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:273 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:270 #, python-format msgid "VCNS: Edge %(edge_id)s deployed for router %(name)s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:280 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:277 #, python-format msgid "VCNS: start destroying edge %s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:288 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:285 #, python-format msgid "" "VCNS: Failed to delete %(edge_id)s:\n" "%(response)s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:294 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:291 #, python-format msgid "VCNS: Failed to delete %s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:304 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:301 #, python-format msgid "" "VCNS: Failed to get edges:\n" "%s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:382 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:379 #, python-format msgid "" "VCNS: Failed to get nat config:\n" "%s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:389 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:386 #, python-format msgid "VCNS: start creating nat rules: %s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:405 -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:530 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:402 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:527 #, python-format msgid "" "VCNS: Failed to create snat rule:\n" "%s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:413 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:410 #, python-format msgid "VCNS: create snat rule %(src)s/%(translated)s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:436 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:433 #, python-format msgid "VCNS: start deleting %(type)s rules: %(addr)s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:447 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:444 #, python-format msgid "" "VCNS: Failed to delete snat rule:\n" "%s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:454 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:451 #, python-format msgid "VCNS: delete snat rule %s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:472 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:469 #, python-format msgid "VCNS: create dnat rule %(dst)s/%(translated)s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:493 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:490 #, python-format msgid "VCNS: delete dnat rule %s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:517 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:514 #, python-format msgid "VCNS: start updating nat rules: %s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:538 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:535 #, python-format msgid "" "VCNS: update nat rule\n" @@ -14404,83 +14426,83 @@ msgid "" "DNAT:%(dnat)s\n" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:576 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:573 #, python-format msgid "VCNS: start updating routes for %s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:600 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:597 #, python-format msgid "" "VCNS: Failed to update routes:\n" "%s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:652 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:649 msgid "Failed to get service config" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:664 +#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:661 msgid "Failed to enable loadbalancer service config" msgstr "" -#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:41 +#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:39 #, python-format msgid "Invalid action value %s in a firewall rule" msgstr "" -#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:50 +#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:48 #, python-format msgid "Invalid action value %s in a vshield firewall rule" msgstr "" -#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:190 +#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:188 #, python-format msgid "Failed to get firewall with edge id: %s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:208 +#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:206 #, python-format msgid "No rule id:%s found in the edge_firewall_binding" msgstr "" -#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:218 +#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:216 #, python-format msgid "Failed to get firewall rule: %(rule_id)s with edge_id: %(edge_id)s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:234 +#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:232 #, python-format msgid "Failed to update firewall with edge_id: %s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:246 +#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:244 #, python-format msgid "Failed to delete firewall with edge_id:%s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:260 +#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:258 #, python-format msgid "Failed to update firewall rule: %(rule_id)s with edge_id: %(edge_id)s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:273 +#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:271 #, python-format msgid "Failed to delete firewall rule: %(rule_id)s with edge_id: %(edge_id)s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:290 -#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:318 +#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:288 +#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:316 #, python-format msgid "Failed to add firewall rule above: %(rule_id)s with edge_id: %(edge_id)s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:329 +#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:327 #, python-format msgid "Failed to append a firewall rulewith edge_id: %s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:350 +#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:348 msgid "Can't execute insert rule operation without reference rule_id" msgstr "" @@ -14538,156 +14560,156 @@ msgstr "" msgid "Failed to delete ipsec vpn configuration with edge_id: %s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:154 +#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:152 #, python-format msgid "Invalid %(protocol)s persistence method: %(type)s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:180 +#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:178 #, python-format msgid "Failed to create app profile on edge: %s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:191 +#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:189 #, python-format msgid "Failed to create vip on vshield edge: %s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:209 +#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:207 #, python-format msgid "vip_binding not found with id: %(id)s edge_id: %(edge_id)s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:226 +#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:224 msgid "Failed to get vip on edge" msgstr "" -#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:243 +#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:241 #, python-format msgid "Failed to update app profile on edge: %s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:251 +#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:249 #, python-format msgid "Failed to update vip on edge: %s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:262 +#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:260 #, python-format msgid "vip not found on edge: %s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:265 +#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:263 #, python-format msgid "Failed to delete vip on edge: %s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:270 +#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:268 #, python-format msgid "app profile not found on edge: %s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:273 +#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:271 #, python-format msgid "Failed to delete app profile on edge: %s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:284 +#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:282 msgid "Failed to create pool" msgstr "" -#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:301 +#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:299 #, python-format msgid "pool_binding not found with id: %(id)s edge_id: %(edge_id)s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:311 +#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:309 msgid "Failed to get pool on edge" msgstr "" -#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:323 +#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:321 msgid "Failed to update pool" msgstr "" -#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:333 +#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:331 msgid "Failed to delete pool" msgstr "" -#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:343 +#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:341 #, python-format msgid "Failed to create monitor on edge: %s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:361 +#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:359 #, python-format msgid "monitor_binding not found with id: %(id)s edge_id: %(edge_id)s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:371 +#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:369 #, python-format msgid "Failed to get monitor on edge: %s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:388 +#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:386 #, python-format msgid "Failed to update monitor on edge: %s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:399 +#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:397 msgid "Failed to delete monitor" msgstr "" -#: neutron/plugins/vmware/vshield/vcns.py:54 +#: neutron/plugins/vmware/vshield/vcns.py:52 #, python-format msgid "VcnsApiHelper('%(method)s', '%(uri)s', '%(body)s')" msgstr "" -#: neutron/plugins/vmware/vshield/vcns.py:62 +#: neutron/plugins/vmware/vshield/vcns.py:60 #, python-format msgid "Header: '%s'" msgstr "" -#: neutron/plugins/vmware/vshield/vcns.py:63 +#: neutron/plugins/vmware/vshield/vcns.py:61 #, python-format msgid "Content: '%s'" msgstr "" -#: neutron/plugins/vmware/vshield/common/exceptions.py:35 +#: neutron/plugins/vmware/vshield/common/exceptions.py:33 #, python-format msgid "%(resource)s not found: %(msg)s" msgstr "" -#: neutron/plugins/vmware/vshield/common/exceptions.py:39 +#: neutron/plugins/vmware/vshield/common/exceptions.py:37 #, python-format msgid "An unknown exception %(status)s occurred: %(response)s." msgstr "" -#: neutron/plugins/vmware/vshield/common/exceptions.py:50 +#: neutron/plugins/vmware/vshield/common/exceptions.py:48 #, python-format msgid "Resource %(uri)s has been redirected" msgstr "" -#: neutron/plugins/vmware/vshield/common/exceptions.py:54 +#: neutron/plugins/vmware/vshield/common/exceptions.py:52 #, python-format msgid "Request %(uri)s is Bad, response %(response)s" msgstr "" -#: neutron/plugins/vmware/vshield/common/exceptions.py:58 +#: neutron/plugins/vmware/vshield/common/exceptions.py:56 #, python-format msgid "Forbidden: %(uri)s" msgstr "" -#: neutron/plugins/vmware/vshield/common/exceptions.py:62 +#: neutron/plugins/vmware/vshield/common/exceptions.py:60 #, python-format msgid "Resource %(uri)s not found" msgstr "" -#: neutron/plugins/vmware/vshield/common/exceptions.py:66 +#: neutron/plugins/vmware/vshield/common/exceptions.py:64 #, python-format msgid "Media Type %(uri)s is not supported" msgstr "" -#: neutron/plugins/vmware/vshield/common/exceptions.py:70 +#: neutron/plugins/vmware/vshield/common/exceptions.py:68 #, python-format msgid "Service Unavailable: %(uri)s" msgstr "" @@ -14885,372 +14907,372 @@ msgstr "" msgid "Default provider is not specified for service type %s" msgstr "" -#: neutron/services/firewall/fwaas_plugin.py:42 +#: neutron/services/firewall/fwaas_plugin.py:40 msgid "set_firewall_status() called" msgstr "" -#: neutron/services/firewall/fwaas_plugin.py:50 +#: neutron/services/firewall/fwaas_plugin.py:48 #, python-format msgid "Firewall %(fw_id)s in PENDING_DELETE state, not changing to %(status)s" msgstr "" -#: neutron/services/firewall/fwaas_plugin.py:63 +#: neutron/services/firewall/fwaas_plugin.py:61 msgid "firewall_deleted() called" msgstr "" -#: neutron/services/firewall/fwaas_plugin.py:71 +#: neutron/services/firewall/fwaas_plugin.py:69 #, python-format msgid "Firewall %(fw)s unexpectedly deleted by agent, status was %(status)s" msgstr "" -#: neutron/services/firewall/fwaas_plugin.py:79 +#: neutron/services/firewall/fwaas_plugin.py:77 msgid "get_firewalls_for_tenant() called" msgstr "" -#: neutron/services/firewall/fwaas_plugin.py:88 +#: neutron/services/firewall/fwaas_plugin.py:86 msgid "get_firewalls_for_tenant_without_rules() called" msgstr "" -#: neutron/services/firewall/fwaas_plugin.py:94 +#: neutron/services/firewall/fwaas_plugin.py:92 msgid "get_tenants_with_firewalls() called" msgstr "" -#: neutron/services/firewall/fwaas_plugin.py:139 +#: neutron/services/firewall/fwaas_plugin.py:137 #, python-format msgid "" "Exceeded allowed count of firewalls for tenant %(tenant_id)s. Only one " "firewall is supported per tenant." msgstr "" -#: neutron/services/firewall/agents/firewall_agent_api.py:31 +#: neutron/services/firewall/agents/firewall_agent_api.py:27 msgid "Name of the FWaaS Driver" msgstr "" -#: neutron/services/firewall/agents/firewall_agent_api.py:35 +#: neutron/services/firewall/agents/firewall_agent_api.py:31 msgid "Enable FWaaS" msgstr "" -#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:43 +#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:39 msgid "Retrieve Firewall with rules from Plugin" msgstr "" -#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:51 +#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:47 msgid "Retrieve Tenants with Firewalls configured from Plugin" msgstr "" -#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:62 +#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:58 msgid "Initializing firewall agent" msgstr "" -#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:73 +#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:69 msgid "" "FWaaS plugin is configured in the server side, but FWaaS is disabled in " "L3-agent." msgstr "" -#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:83 +#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:79 #, python-format msgid "FWaaS Driver Loaded: '%s'" msgstr "" -#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:86 +#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:82 #, python-format msgid "Error importing FWaaS device driver: %s" msgstr "" -#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:123 +#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:119 #, python-format msgid "%(func_name)s from agent for fw: %(fwid)s" msgstr "" -#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:131 +#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:127 #, python-format msgid "No Routers on tenant: %s" msgstr "" -#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:138 -#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:278 +#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:134 +#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:274 #, python-format msgid "Apply fw on Router List: '%s'" msgstr "" -#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:151 +#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:147 #, python-format msgid "Firewall Driver Error for %(func_name)s for fw: %(fwid)s" msgstr "" -#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:166 +#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:162 #, python-format msgid "FWaaS RPC failure in %(func_name)s for fw: %(fwid)s" msgstr "" -#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:186 -#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:205 +#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:182 +#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:201 #, python-format msgid "Firewall Driver Error on fw state %(fwmsg)s for fw: %(fwid)s" msgstr "" -#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:217 +#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:213 #, python-format msgid "Process router add, router_id: '%s'" msgstr "" -#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:228 +#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:224 #, python-format msgid "Process router add, fw_list: '%s'" msgstr "" -#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:245 +#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:241 #, python-format msgid "FWaaS RPC info call failed for '%s'." msgstr "" -#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:260 +#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:256 #, python-format msgid "Tenants with Firewalls: '%s'" msgstr "" -#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:270 +#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:266 #, python-format msgid "Router List: '%s'" msgstr "" -#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:272 +#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:268 #, python-format msgid "fw_list: '%s'" msgstr "" -#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:289 +#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:285 msgid "Failed fwaas process services sync" msgstr "" -#: neutron/services/firewall/agents/varmour/varmour_api.py:29 +#: neutron/services/firewall/agents/varmour/varmour_api.py:27 msgid "vArmour director ip" msgstr "" -#: neutron/services/firewall/agents/varmour/varmour_api.py:31 +#: neutron/services/firewall/agents/varmour/varmour_api.py:29 msgid "vArmour director port" msgstr "" -#: neutron/services/firewall/agents/varmour/varmour_api.py:33 +#: neutron/services/firewall/agents/varmour/varmour_api.py:31 msgid "vArmour director username" msgstr "" -#: neutron/services/firewall/agents/varmour/varmour_api.py:35 +#: neutron/services/firewall/agents/varmour/varmour_api.py:33 msgid "vArmour director password" msgstr "" -#: neutron/services/firewall/agents/varmour/varmour_api.py:45 +#: neutron/services/firewall/agents/varmour/varmour_api.py:43 msgid "An unknown exception." msgstr "" -#: neutron/services/firewall/agents/varmour/varmour_api.py:59 +#: neutron/services/firewall/agents/varmour/varmour_api.py:57 msgid "Invalid login credential." msgstr "" -#: neutron/services/firewall/agents/varmour/varmour_api.py:65 +#: neutron/services/firewall/agents/varmour/varmour_api.py:63 msgid "vArmourRestAPI: started" msgstr "" -#: neutron/services/firewall/agents/varmour/varmour_api.py:98 +#: neutron/services/firewall/agents/varmour/varmour_api.py:96 #, python-format msgid "vArmourRestAPI: %(server)s %(port)s" msgstr "" -#: neutron/services/firewall/agents/varmour/varmour_api.py:104 +#: neutron/services/firewall/agents/varmour/varmour_api.py:102 #, python-format msgid "vArmourRestAPI Sending: %(method)s %(action)s %(headers)s %(body_data)s" msgstr "" -#: neutron/services/firewall/agents/varmour/varmour_api.py:115 +#: neutron/services/firewall/agents/varmour/varmour_api.py:113 #, python-format msgid "vArmourRestAPI Response: %(status)s %(resp_str)s" msgstr "" -#: neutron/services/firewall/agents/varmour/varmour_api.py:123 +#: neutron/services/firewall/agents/varmour/varmour_api.py:121 msgid "vArmourRestAPI: Could not establish HTTP connection" msgstr "" -#: neutron/services/firewall/agents/varmour/varmour_router.py:50 +#: neutron/services/firewall/agents/varmour/varmour_router.py:47 msgid "vArmourL3NATAgent: __init__" msgstr "" -#: neutron/services/firewall/agents/varmour/varmour_router.py:64 +#: neutron/services/firewall/agents/varmour/varmour_router.py:61 #, python-format msgid "_router_added: %s" msgstr "" -#: neutron/services/firewall/agents/varmour/varmour_router.py:71 +#: neutron/services/firewall/agents/varmour/varmour_router.py:68 #, python-format msgid "_router_removed: %s" msgstr "" -#: neutron/services/firewall/agents/varmour/varmour_router.py:112 +#: neutron/services/firewall/agents/varmour/varmour_router.py:109 #, python-format msgid "_va_unset_zone_interfaces: %s" msgstr "" -#: neutron/services/firewall/agents/varmour/varmour_router.py:144 +#: neutron/services/firewall/agents/varmour/varmour_router.py:141 #, python-format msgid "_va_set_interface_ip: %(pif)s %(cidr)s" msgstr "" -#: neutron/services/firewall/agents/varmour/varmour_router.py:164 +#: neutron/services/firewall/agents/varmour/varmour_router.py:161 #, python-format msgid "_va_config_trusted_zone: %s" msgstr "" -#: neutron/services/firewall/agents/varmour/varmour_router.py:195 +#: neutron/services/firewall/agents/varmour/varmour_router.py:192 #, python-format msgid "_va_config_untrusted_zone: %s" msgstr "" -#: neutron/services/firewall/agents/varmour/varmour_router.py:210 +#: neutron/services/firewall/agents/varmour/varmour_router.py:207 #, python-format msgid "_va_config_untrusted_zone: gw=%r" msgstr "" -#: neutron/services/firewall/agents/varmour/varmour_router.py:223 +#: neutron/services/firewall/agents/varmour/varmour_router.py:220 #, python-format msgid "_va_config_router_snat_rules: %s" msgstr "" -#: neutron/services/firewall/agents/varmour/varmour_router.py:255 +#: neutron/services/firewall/agents/varmour/varmour_router.py:252 #, python-format msgid "_va_config_floating_ips: %s" msgstr "" -#: neutron/services/firewall/agents/varmour/varmour_router.py:277 +#: neutron/services/firewall/agents/varmour/varmour_router.py:274 #, python-format msgid "process_router: %s" msgstr "" -#: neutron/services/firewall/agents/varmour/varmour_router.py:288 +#: neutron/services/firewall/agents/varmour/varmour_router.py:285 msgid "Unable to parse interface mapping." msgstr "" -#: neutron/services/firewall/agents/varmour/varmour_router.py:291 +#: neutron/services/firewall/agents/varmour/varmour_router.py:288 msgid "Unable to read interface mapping." msgstr "" -#: neutron/services/firewall/agents/varmour/varmour_router.py:310 +#: neutron/services/firewall/agents/varmour/varmour_router.py:307 #, python-format msgid "external_gateway_added: %s" msgstr "" -#: neutron/services/firewall/drivers/linux/iptables_fwaas.py:51 +#: neutron/services/firewall/drivers/linux/iptables_fwaas.py:49 msgid "Initializing fwaas iptables driver" msgstr "" -#: neutron/services/firewall/drivers/linux/iptables_fwaas.py:54 +#: neutron/services/firewall/drivers/linux/iptables_fwaas.py:52 #, python-format msgid "Creating firewall %(fw_id)s for tenant %(tid)s)" msgstr "" -#: neutron/services/firewall/drivers/linux/iptables_fwaas.py:63 +#: neutron/services/firewall/drivers/linux/iptables_fwaas.py:61 #, python-format msgid "Failed to create firewall: %s" msgstr "" -#: neutron/services/firewall/drivers/linux/iptables_fwaas.py:92 +#: neutron/services/firewall/drivers/linux/iptables_fwaas.py:90 #, python-format msgid "Deleting firewall %(fw_id)s for tenant %(tid)s)" msgstr "" -#: neutron/services/firewall/drivers/linux/iptables_fwaas.py:107 +#: neutron/services/firewall/drivers/linux/iptables_fwaas.py:105 #, python-format msgid "Failed to delete firewall: %s" msgstr "" -#: neutron/services/firewall/drivers/linux/iptables_fwaas.py:111 +#: neutron/services/firewall/drivers/linux/iptables_fwaas.py:109 #, python-format msgid "Updating firewall %(fw_id)s for tenant %(tid)s)" msgstr "" -#: neutron/services/firewall/drivers/linux/iptables_fwaas.py:120 +#: neutron/services/firewall/drivers/linux/iptables_fwaas.py:118 #, python-format msgid "Failed to update firewall: %s" msgstr "" -#: neutron/services/firewall/drivers/linux/iptables_fwaas.py:124 +#: neutron/services/firewall/drivers/linux/iptables_fwaas.py:122 #, python-format msgid "Applying firewall %(fw_id)s for tenant %(tid)s)" msgstr "" -#: neutron/services/firewall/drivers/linux/iptables_fwaas.py:145 +#: neutron/services/firewall/drivers/linux/iptables_fwaas.py:143 #, python-format msgid "Failed to apply default policy on firewall: %s" msgstr "" -#: neutron/services/firewall/drivers/varmour/varmour_fwaas.py:28 +#: neutron/services/firewall/drivers/varmour/varmour_fwaas.py:26 msgid "Initializing fwaas vArmour driver" msgstr "" -#: neutron/services/firewall/drivers/varmour/varmour_fwaas.py:33 +#: neutron/services/firewall/drivers/varmour/varmour_fwaas.py:31 #, python-format msgid "create_firewall (%s)" msgstr "" -#: neutron/services/firewall/drivers/varmour/varmour_fwaas.py:38 +#: neutron/services/firewall/drivers/varmour/varmour_fwaas.py:36 #, python-format msgid "update_firewall (%s)" msgstr "" -#: neutron/services/firewall/drivers/varmour/varmour_fwaas.py:46 +#: neutron/services/firewall/drivers/varmour/varmour_fwaas.py:44 #, python-format msgid "delete_firewall (%s)" msgstr "" -#: neutron/services/firewall/drivers/varmour/varmour_fwaas.py:51 +#: neutron/services/firewall/drivers/varmour/varmour_fwaas.py:49 #, python-format msgid "apply_default_policy (%s)" msgstr "" -#: neutron/services/firewall/drivers/varmour/varmour_fwaas.py:61 +#: neutron/services/firewall/drivers/varmour/varmour_fwaas.py:59 #, python-format msgid "Updating firewall (%s)" msgstr "" -#: neutron/services/firewall/drivers/varmour/varmour_fwaas.py:110 +#: neutron/services/firewall/drivers/varmour/varmour_fwaas.py:108 msgid "Unsupported IP version rule." msgstr "" -#: neutron/services/l3_router/l3_apic.py:60 +#: neutron/services/l3_router/l3_apic.py:57 msgid "L3 Router Service Plugin for basic L3 using the APIC" msgstr "" -#: neutron/services/l3_router/l3_arista.py:116 +#: neutron/services/l3_router/l3_arista.py:113 #, python-format msgid "Error creating router on Arista HW router=%s " msgstr "" -#: neutron/services/l3_router/l3_arista.py:139 +#: neutron/services/l3_router/l3_arista.py:136 #, python-format msgid "Error updating router on Arista HW router=%s " msgstr "" -#: neutron/services/l3_router/l3_arista.py:154 +#: neutron/services/l3_router/l3_arista.py:151 #, python-format msgid "Error deleting router on Arista HW router %(r)s exception=%(e)s" msgstr "" -#: neutron/services/l3_router/l3_arista.py:200 +#: neutron/services/l3_router/l3_arista.py:197 #, python-format msgid "Error Adding subnet %(subnet)s to router %(router_id)s on Arista HW" msgstr "" -#: neutron/services/l3_router/l3_arista.py:234 +#: neutron/services/l3_router/l3_arista.py:231 #, python-format msgid "" "Error removing interface %(interface)s from router %(router_id)s on " "Arista HWException =(exc)s" msgstr "" -#: neutron/services/l3_router/l3_arista.py:249 +#: neutron/services/l3_router/l3_arista.py:246 msgid "Syncing Neutron Router DB <-> EOS" msgstr "" -#: neutron/services/l3_router/l3_arista.py:280 +#: neutron/services/l3_router/l3_arista.py:277 #, python-format msgid "Error Adding interface %(subnet_id)s to router %(router_id)s on Arista HW" msgstr "" @@ -15312,226 +15334,226 @@ msgstr "" msgid "Pool %(pool_id)s is scheduled to lbaas agent %(agent_id)s" msgstr "" -#: neutron/services/loadbalancer/plugin.py:80 +#: neutron/services/loadbalancer/plugin.py:78 #, python-format msgid "Delete associated loadbalancer pools before removing providers %s" msgstr "" -#: neutron/services/loadbalancer/plugin.py:89 +#: neutron/services/loadbalancer/plugin.py:87 #, python-format msgid "Error retrieving driver for provider %s" msgstr "" -#: neutron/services/loadbalancer/plugin.py:97 +#: neutron/services/loadbalancer/plugin.py:95 #, python-format msgid "Error retrieving provider for pool %s" msgstr "" -#: neutron/services/loadbalancer/plugin.py:188 +#: neutron/services/loadbalancer/plugin.py:186 #, python-format msgid "Failed to delete pool %s, putting it in ERROR state" msgstr "" -#: neutron/services/loadbalancer/agent/agent.py:36 +#: neutron/services/loadbalancer/agent/agent.py:34 msgid "Seconds between periodic task runs" msgstr "" -#: neutron/services/loadbalancer/agent/agent_manager.py:39 +#: neutron/services/loadbalancer/agent/agent_manager.py:37 msgid "Drivers used to manage loadbalancing devices" msgstr "" -#: neutron/services/loadbalancer/agent/agent_manager.py:45 +#: neutron/services/loadbalancer/agent/agent_manager.py:43 #, python-format msgid "Unknown device with pool_id %(pool_id)s" msgstr "" -#: neutron/services/loadbalancer/agent/agent_manager.py:94 +#: neutron/services/loadbalancer/agent/agent_manager.py:92 #, python-format msgid "Error importing loadbalancer device driver: %s" msgstr "" -#: neutron/services/loadbalancer/agent/agent_manager.py:101 +#: neutron/services/loadbalancer/agent/agent_manager.py:99 #, python-format msgid "Multiple device drivers with the same name found: %s" msgstr "" -#: neutron/services/loadbalancer/agent/agent_manager.py:141 +#: neutron/services/loadbalancer/agent/agent_manager.py:139 #, python-format msgid "Error updating statistics on pool %s" msgstr "" -#: neutron/services/loadbalancer/agent/agent_manager.py:157 +#: neutron/services/loadbalancer/agent/agent_manager.py:155 msgid "Unable to retrieve ready devices" msgstr "" -#: neutron/services/loadbalancer/agent/agent_manager.py:174 -#: neutron/services/loadbalancer/agent/agent_manager.py:239 +#: neutron/services/loadbalancer/agent/agent_manager.py:172 +#: neutron/services/loadbalancer/agent/agent_manager.py:237 #, python-format msgid "No device driver on agent: %s." msgstr "" -#: neutron/services/loadbalancer/agent/agent_manager.py:184 +#: neutron/services/loadbalancer/agent/agent_manager.py:182 #, python-format msgid "Unable to deploy instance for pool: %s" msgstr "" -#: neutron/services/loadbalancer/agent/agent_manager.py:194 +#: neutron/services/loadbalancer/agent/agent_manager.py:192 #, python-format msgid "Unable to destroy device for pool: %s" msgstr "" -#: neutron/services/loadbalancer/agent/agent_manager.py:207 +#: neutron/services/loadbalancer/agent/agent_manager.py:205 #, python-format msgid "%(operation)s %(obj)s %(id)s failed on device driver %(driver)s" msgstr "" -#: neutron/services/loadbalancer/agent/agent_manager.py:333 +#: neutron/services/loadbalancer/agent/agent_manager.py:331 #, python-format msgid "Destroying pool %s due to agent disabling" msgstr "" -#: neutron/services/loadbalancer/agent/agent_manager.py:336 +#: neutron/services/loadbalancer/agent/agent_manager.py:334 #, python-format msgid "Agent_updated by server side %s!" msgstr "" -#: neutron/services/loadbalancer/drivers/common/agent_driver_base.py:40 +#: neutron/services/loadbalancer/drivers/common/agent_driver_base.py:38 msgid "Driver to use for scheduling pool to a default loadbalancer agent" msgstr "" -#: neutron/services/loadbalancer/drivers/common/agent_driver_base.py:48 +#: neutron/services/loadbalancer/drivers/common/agent_driver_base.py:46 msgid "Device driver for agent should be specified in plugin driver." msgstr "" -#: neutron/services/loadbalancer/drivers/common/agent_driver_base.py:72 +#: neutron/services/loadbalancer/drivers/common/agent_driver_base.py:70 #, python-format msgid "Multiple lbaas agents found on host %s" msgstr "" -#: neutron/services/loadbalancer/drivers/common/agent_driver_base.py:152 +#: neutron/services/loadbalancer/drivers/common/agent_driver_base.py:150 #, python-format msgid "Unknown object type: %s" msgstr "" -#: neutron/services/loadbalancer/drivers/common/agent_driver_base.py:163 +#: neutron/services/loadbalancer/drivers/common/agent_driver_base.py:161 #, python-format msgid "" "Cannot update status: %(obj_type)s %(obj_id)s not found in the DB, it was" " probably deleted concurrently" msgstr "" -#: neutron/services/loadbalancer/drivers/common/agent_driver_base.py:186 +#: neutron/services/loadbalancer/drivers/common/agent_driver_base.py:184 #, python-format msgid "Unable to find port %s to plug." msgstr "" -#: neutron/services/loadbalancer/drivers/common/agent_driver_base.py:210 -#: neutron/services/loadbalancer/drivers/common/agent_driver_base.py:227 +#: neutron/services/loadbalancer/drivers/common/agent_driver_base.py:208 +#: neutron/services/loadbalancer/drivers/common/agent_driver_base.py:225 #, python-format msgid "" "Unable to find port %s to unplug. This can occur when the Vip has been " "deleted first." msgstr "" -#: neutron/services/loadbalancer/drivers/embrane/config.py:32 +#: neutron/services/loadbalancer/drivers/embrane/config.py:30 msgid "Load Balancer image id (Embrane LB)" msgstr "" -#: neutron/services/loadbalancer/drivers/embrane/config.py:34 +#: neutron/services/loadbalancer/drivers/embrane/config.py:32 msgid "In band Security Zone id for LBs" msgstr "" -#: neutron/services/loadbalancer/drivers/embrane/config.py:36 +#: neutron/services/loadbalancer/drivers/embrane/config.py:34 msgid "Out of band Security Zone id for LBs" msgstr "" -#: neutron/services/loadbalancer/drivers/embrane/config.py:38 +#: neutron/services/loadbalancer/drivers/embrane/config.py:36 msgid "Management Security Zone id for LBs" msgstr "" -#: neutron/services/loadbalancer/drivers/embrane/config.py:40 +#: neutron/services/loadbalancer/drivers/embrane/config.py:38 msgid "Dummy user traffic Security Zone id for LBs" msgstr "" -#: neutron/services/loadbalancer/drivers/embrane/config.py:44 +#: neutron/services/loadbalancer/drivers/embrane/config.py:42 msgid "choose LB image flavor to use, accepted values: small, medium" msgstr "" -#: neutron/services/loadbalancer/drivers/embrane/config.py:47 +#: neutron/services/loadbalancer/drivers/embrane/config.py:45 msgid "resource synchronization interval in seconds" msgstr "" -#: neutron/services/loadbalancer/drivers/embrane/constants.py:51 +#: neutron/services/loadbalancer/drivers/embrane/constants.py:49 #, python-format msgid "%s, probably was cancelled through the heleos UI" msgstr "" -#: neutron/services/loadbalancer/drivers/embrane/constants.py:58 +#: neutron/services/loadbalancer/drivers/embrane/constants.py:56 #, python-format msgid "" "Failed to delete the backend load balancer for reason %s. Please remove " "it manually through the heleos UI" msgstr "" -#: neutron/services/loadbalancer/drivers/embrane/constants.py:61 +#: neutron/services/loadbalancer/drivers/embrane/constants.py:59 #, python-format msgid "" "No subnet is associated to member %s (required to identify the proper " "load balancer port)" msgstr "" -#: neutron/services/loadbalancer/drivers/embrane/driver.py:87 +#: neutron/services/loadbalancer/drivers/embrane/driver.py:85 msgid "Connection limit is not supported by Embrane LB" msgstr "" -#: neutron/services/loadbalancer/drivers/embrane/driver.py:93 +#: neutron/services/loadbalancer/drivers/embrane/driver.py:91 #, python-format msgid "Session persistence %s not supported by Embrane LBaaS" msgstr "" -#: neutron/services/loadbalancer/drivers/embrane/driver.py:131 +#: neutron/services/loadbalancer/drivers/embrane/driver.py:129 #, python-format msgid "Subnet assigned to pool %s doesn't exist, backend port can't be created" msgstr "" -#: neutron/services/loadbalancer/drivers/embrane/agent/lb_operations.py:111 +#: neutron/services/loadbalancer/drivers/embrane/agent/lb_operations.py:109 #, python-format msgid "" "The load balancer %s had no physical representation, likely already " "deleted" msgstr "" -#: neutron/services/loadbalancer/drivers/haproxy/namespace_driver.py:46 +#: neutron/services/loadbalancer/drivers/haproxy/namespace_driver.py:45 msgid "Location to store config and state files" msgstr "" -#: neutron/services/loadbalancer/drivers/haproxy/namespace_driver.py:53 +#: neutron/services/loadbalancer/drivers/haproxy/namespace_driver.py:52 msgid "The user group" msgstr "" -#: neutron/services/loadbalancer/drivers/haproxy/namespace_driver.py:59 +#: neutron/services/loadbalancer/drivers/haproxy/namespace_driver.py:58 msgid "" "When delete and re-add the same vip, send this many gratuitous ARPs to " "flush the ARP cache in the Router. Set it below or equal to 0 to disable " "this feature." msgstr "" -#: neutron/services/loadbalancer/drivers/haproxy/namespace_driver.py:76 +#: neutron/services/loadbalancer/drivers/haproxy/namespace_driver.py:75 #, python-format msgid "Error importing interface driver: %s" msgstr "" -#: neutron/services/loadbalancer/drivers/haproxy/namespace_driver.py:172 +#: neutron/services/loadbalancer/drivers/haproxy/namespace_driver.py:171 #, python-format msgid "Stats socket not found for pool %s" msgstr "" -#: neutron/services/loadbalancer/drivers/haproxy/namespace_driver.py:214 +#: neutron/services/loadbalancer/drivers/haproxy/namespace_driver.py:213 #, python-format msgid "Error while connecting to stats socket: %s" msgstr "" -#: neutron/services/loadbalancer/drivers/haproxy/namespace_driver.py:393 +#: neutron/services/loadbalancer/drivers/haproxy/namespace_driver.py:392 #, python-format msgid "Unable to kill haproxy process: %s" msgstr "" @@ -15715,331 +15737,331 @@ msgstr "" msgid "Removing SNAT port for subnet %s as this is the last pool using it..." msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:62 +#: neutron/services/loadbalancer/drivers/radware/driver.py:60 msgid "IP address of vDirect server." msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:64 +#: neutron/services/loadbalancer/drivers/radware/driver.py:62 msgid "IP address of secondary vDirect server." msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:67 +#: neutron/services/loadbalancer/drivers/radware/driver.py:65 msgid "vDirect user name." msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:70 +#: neutron/services/loadbalancer/drivers/radware/driver.py:68 msgid "vDirect user password." msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:73 +#: neutron/services/loadbalancer/drivers/radware/driver.py:71 msgid "Service ADC type. Default: VA." msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:76 +#: neutron/services/loadbalancer/drivers/radware/driver.py:74 msgid "Service ADC version." msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:79 +#: neutron/services/loadbalancer/drivers/radware/driver.py:77 msgid "Enables or disables the Service HA pair. Default: False." msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:83 +#: neutron/services/loadbalancer/drivers/radware/driver.py:81 msgid "Service throughput. Default: 1000." msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:86 +#: neutron/services/loadbalancer/drivers/radware/driver.py:84 msgid "Service SSL throughput. Default: 100." msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:89 +#: neutron/services/loadbalancer/drivers/radware/driver.py:87 msgid "Service compression throughput. Default: 100." msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:92 +#: neutron/services/loadbalancer/drivers/radware/driver.py:90 msgid "Size of service cache. Default: 20." msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:95 +#: neutron/services/loadbalancer/drivers/radware/driver.py:93 msgid "Name of l2_l3 workflow. Default: openstack_l2_l3." msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:99 +#: neutron/services/loadbalancer/drivers/radware/driver.py:97 msgid "Name of l4 workflow. Default: openstack_l4." msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:107 +#: neutron/services/loadbalancer/drivers/radware/driver.py:105 msgid "Parameter for l2_l3 workflow constructor." msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:114 +#: neutron/services/loadbalancer/drivers/radware/driver.py:112 msgid "Parameter for l2_l3 workflow setup." msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:117 +#: neutron/services/loadbalancer/drivers/radware/driver.py:115 msgid "List of actions that are not pushed to the completion queue." msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:121 +#: neutron/services/loadbalancer/drivers/radware/driver.py:119 msgid "Name of the l4 workflow action. Default: BaseCreate." msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:125 +#: neutron/services/loadbalancer/drivers/radware/driver.py:123 msgid "Resource pool IDs." msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:128 +#: neutron/services/loadbalancer/drivers/radware/driver.py:126 msgid "A required VLAN for the interswitch link to use." msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:131 +#: neutron/services/loadbalancer/drivers/radware/driver.py:129 msgid "" "Enable or disable Alteon interswitch link for stateful session failover. " "Default: False." msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:232 +#: neutron/services/loadbalancer/drivers/radware/driver.py:230 #, python-format msgid "" "vip: %(vip)s, extended_vip: %(extended_vip)s, service_name: " "%(service_name)s, " msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:266 +#: neutron/services/loadbalancer/drivers/radware/driver.py:264 #, python-format msgid "Retrieved pip nport: %(port)r for vip: %(vip)s" msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:274 +#: neutron/services/loadbalancer/drivers/radware/driver.py:272 #, python-format msgid "Found no pip nports associated with vip: %s" msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:283 +#: neutron/services/loadbalancer/drivers/radware/driver.py:281 #, python-format msgid "Failed to remove workflow %s. Going to set vip to ERROR status" msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:297 +#: neutron/services/loadbalancer/drivers/radware/driver.py:295 #, python-format msgid "pip nport id: %s" msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:301 +#: neutron/services/loadbalancer/drivers/radware/driver.py:299 #, python-format msgid "pip nport delete failed: %r" msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:389 +#: neutron/services/loadbalancer/drivers/radware/driver.py:387 #, python-format msgid "" "_handle_pool_health_monitor. health_monitor = %(hm_id)s pool_id = " "%(pool_id)s delete = %(delete)s vip_id = %(vip_id)s" msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:420 +#: neutron/services/loadbalancer/drivers/radware/driver.py:418 msgid "Starting operation completion handling thread" msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:450 +#: neutron/services/loadbalancer/drivers/radware/driver.py:448 #, python-format msgid "_update_workflow response: %s " msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:459 -#: neutron/services/loadbalancer/drivers/radware/driver.py:490 +#: neutron/services/loadbalancer/drivers/radware/driver.py:457 +#: neutron/services/loadbalancer/drivers/radware/driver.py:488 #, python-format msgid "Pushing operation %s to the queue" msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:467 +#: neutron/services/loadbalancer/drivers/radware/driver.py:465 #, python-format msgid "Remove the workflow %s" msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:475 +#: neutron/services/loadbalancer/drivers/radware/driver.py:473 #, python-format msgid "Post-remove workflow function %r completed" msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:479 +#: neutron/services/loadbalancer/drivers/radware/driver.py:477 #, python-format msgid "Post-remove workflow function %r failed" msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:596 +#: neutron/services/loadbalancer/drivers/radware/driver.py:594 #, python-format msgid "create_workflow response: %s" msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:650 +#: neutron/services/loadbalancer/drivers/radware/driver.py:648 #, python-format msgid "Could not find or allocate IP address for subnet id %s" msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:685 +#: neutron/services/loadbalancer/drivers/radware/driver.py:683 #, python-format msgid "" "vDirectRESTClient:init server=%(server)s, secondary " "server=%(sec_server)s, port=%(port)d, ssl=%(ssl)r" msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:691 +#: neutron/services/loadbalancer/drivers/radware/driver.py:689 #, python-format msgid "Fliping servers. Current is: %(server)s, switching to %(secondary)s" msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:704 +#: neutron/services/loadbalancer/drivers/radware/driver.py:702 msgid "" "REST client is not able to recover since only one vDirect server is " "configured." msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:712 +#: neutron/services/loadbalancer/drivers/radware/driver.py:710 #, python-format msgid "vDirect server is not responding (%s)." msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:716 +#: neutron/services/loadbalancer/drivers/radware/driver.py:714 #, python-format msgid "vDirect server is not active (%s)." msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:744 +#: neutron/services/loadbalancer/drivers/radware/driver.py:742 msgid "vdirectRESTClient: Could not establish HTTPS connection" msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:751 +#: neutron/services/loadbalancer/drivers/radware/driver.py:749 msgid "vdirectRESTClient: Could not establish HTTP connection" msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:768 +#: neutron/services/loadbalancer/drivers/radware/driver.py:766 #, python-format msgid "vdirectRESTClient: %(action)s failure, %(e)r" msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:836 +#: neutron/services/loadbalancer/drivers/radware/driver.py:834 #, python-format msgid "" "Operation %(oper)s is completed after %(sec_to_completion)d sec with " "success status: %(success)s :" msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:848 +#: neutron/services/loadbalancer/drivers/radware/driver.py:846 #, python-format msgid "Operation %(operation)s failed. Reason: %(msg)s" msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:880 +#: neutron/services/loadbalancer/drivers/radware/driver.py:878 #, python-format msgid "Operation %s is not completed yet.." msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:895 +#: neutron/services/loadbalancer/drivers/radware/driver.py:893 msgid "Exception was thrown inside OperationCompletionHandler" msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:904 +#: neutron/services/loadbalancer/drivers/radware/driver.py:902 #, python-format msgid "Post-operation function %(func)r completed after operation %(oper)r" msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:910 +#: neutron/services/loadbalancer/drivers/radware/driver.py:908 #, python-format msgid "Post-operation function %(func)r failed after operation %(oper)r" msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:951 +#: neutron/services/loadbalancer/drivers/radware/driver.py:949 #, python-format msgid "_update: %s " msgstr "" -#: neutron/services/loadbalancer/drivers/radware/driver.py:991 +#: neutron/services/loadbalancer/drivers/radware/driver.py:989 #, python-format msgid "_remove_object_from_db %s" msgstr "" -#: neutron/services/loadbalancer/drivers/radware/exceptions.py:22 +#: neutron/services/loadbalancer/drivers/radware/exceptions.py:20 msgid "An unknown exception occurred in Radware LBaaS provider." msgstr "" -#: neutron/services/loadbalancer/drivers/radware/exceptions.py:26 +#: neutron/services/loadbalancer/drivers/radware/exceptions.py:24 msgid "" "vDirect user/password missing. Specify in configuration file, under " "[radware] section" msgstr "" -#: neutron/services/loadbalancer/drivers/radware/exceptions.py:31 +#: neutron/services/loadbalancer/drivers/radware/exceptions.py:29 #, python-format msgid "" "Workflow %(workflow)s is missing on vDirect server. Upload missing " "workflow" msgstr "" -#: neutron/services/loadbalancer/drivers/radware/exceptions.py:36 +#: neutron/services/loadbalancer/drivers/radware/exceptions.py:34 #, python-format msgid "" "REST request failed with status %(status)s. Reason: %(reason)s, " "Description: %(description)s. Success status codes are %(success_codes)s" msgstr "" -#: neutron/services/loadbalancer/drivers/radware/exceptions.py:42 +#: neutron/services/loadbalancer/drivers/radware/exceptions.py:40 #, python-format msgid "%(operation)s operation is not supported for %(entity)s." msgstr "" -#: neutron/services/metering/agents/metering_agent.py:70 +#: neutron/services/metering/agents/metering_agent.py:68 msgid "Metering driver" msgstr "" -#: neutron/services/metering/agents/metering_agent.py:72 +#: neutron/services/metering/agents/metering_agent.py:70 msgid "Interval between two metering measures" msgstr "" -#: neutron/services/metering/agents/metering_agent.py:74 +#: neutron/services/metering/agents/metering_agent.py:72 msgid "Interval between two metering reports" msgstr "" -#: neutron/services/metering/agents/metering_agent.py:98 +#: neutron/services/metering/agents/metering_agent.py:96 #, python-format msgid "Loading Metering driver %s" msgstr "" -#: neutron/services/metering/agents/metering_agent.py:100 +#: neutron/services/metering/agents/metering_agent.py:98 msgid "A metering driver must be specified" msgstr "" -#: neutron/services/metering/agents/metering_agent.py:115 +#: neutron/services/metering/agents/metering_agent.py:113 #, python-format msgid "Send metering report: %s" msgstr "" -#: neutron/services/metering/agents/metering_agent.py:179 +#: neutron/services/metering/agents/metering_agent.py:177 #, python-format msgid "Driver %(driver)s does not implement %(func)s" msgstr "" -#: neutron/services/metering/agents/metering_agent.py:183 +#: neutron/services/metering/agents/metering_agent.py:181 #, python-format msgid "Driver %(driver)s:%(func)s runtime error" msgstr "" -#: neutron/services/metering/agents/metering_agent.py:218 +#: neutron/services/metering/agents/metering_agent.py:216 msgid "Get router traffic counters" msgstr "" -#: neutron/services/metering/agents/metering_agent.py:222 +#: neutron/services/metering/agents/metering_agent.py:220 msgid "Update metering rules from agent" msgstr "" -#: neutron/services/metering/agents/metering_agent.py:227 +#: neutron/services/metering/agents/metering_agent.py:225 msgid "Creating a metering label from agent" msgstr "" -#: neutron/services/metering/agents/metering_agent.py:234 +#: neutron/services/metering/agents/metering_agent.py:232 msgid "Delete a metering label from agent" msgstr "" -#: neutron/services/metering/drivers/iptables/iptables_driver.py:93 +#: neutron/services/metering/drivers/iptables/iptables_driver.py:91 #, python-format msgid "Loading interface driver %s" msgstr "" @@ -16048,244 +16070,244 @@ msgstr "" msgid "The vpn device drivers Neutron will use" msgstr "" -#: neutron/services/vpn/plugin.py:46 +#: neutron/services/vpn/plugin.py:44 #, python-format msgid "VPN plugin using service driver: %s" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:89 +#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:87 #, python-format msgid "RESPONSE: %s" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:102 +#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:100 #, python-format msgid "%(method)s: Request for %(resource)s payload: %(payload)s" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:109 +#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:107 #, python-format msgid "%(method)s Took %(time).2f seconds to process" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:115 +#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:113 #, python-format msgid "%(method)s: Request timeout%(ssl)s (%(timeout).3f sec) for CSR(%(host)s)" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:124 +#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:122 #, python-format msgid "%(method)s: Unable to connect to CSR(%(host)s)" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:128 +#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:126 #, python-format msgid "%(method)s: Unexpected error for CSR (%(host)s): %(error)s" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:134 +#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:132 #, python-format msgid "%(method)s: Completed [%(status)s]" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:149 +#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:147 #, python-format msgid "%(auth)s with CSR %(host)s" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:156 +#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:154 #, python-format msgid "Successfully authenticated with CSR %s" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:158 +#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:156 #, python-format msgid "Failed authentication with CSR %(host)s [%(status)s]" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:193 +#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:191 #, python-format msgid "%(method)s: Request timeout for CSR(%(host)s)" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:42 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:40 msgid "Status check interval for Cisco CSR IPSec connections" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:53 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:51 #, python-format msgid "Cisco CSR failed to create %(resource)s (%(which)s)" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:57 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:55 #, python-format msgid "Cisco CSR failed to change %(tunnel)s admin state to %(state)s" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:62 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:60 #, python-format msgid "" "Required %(resource)s attribute %(attr)s mapping for Cisco CSR is missing" " in device driver" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:67 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:65 #, python-format msgid "" "Device driver does not have a mapping of '%(value)s for attribute " "%(attr)s of %(resource)s" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:130 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:128 #, python-format msgid "Handling VPN service update notification '%s'" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:152 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:150 #, python-format msgid "Update: Existing connection %s changed" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:159 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:157 #, python-format msgid "Update: Connection %s no longer admin down" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:165 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:163 #, python-format msgid "Update: Connection %s forced to admin down" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:173 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:171 #, python-format msgid "Update: Created new connection %s in admin down state" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:178 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:176 #, python-format msgid "Update: Created new connection %s" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:189 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:187 #, python-format msgid "Update: Existing VPN service %s detected" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:193 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:191 #, python-format msgid "Update: New VPN service %s detected" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:204 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:202 msgid "Update: Completed update processing" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:234 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:232 #, python-format msgid "Mark: %(service)d VPN services and %(conn)d IPSec connections marked dirty" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:256 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:254 #, python-format msgid "" "Sweep: Removed %(service)d dirty VPN service%(splural)s and %(conn)d " "dirty IPSec connection%(cplural)s" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:271 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:269 #, python-format msgid "Report: Collecting status for IPSec connections on VPN service %s" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:277 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:275 #, python-format msgid "Connection %s forced down" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:281 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:279 #, python-format msgid "Connection %(conn)s reported %(status)s" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:286 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:284 #, python-format msgid "Report: Adding info for IPSec connection %s" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:306 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:304 #, python-format msgid "Report: Adding info for VPN service %s" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:328 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:326 msgid "Report: Starting status report processing" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:330 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:328 #, python-format msgid "Report: Collecting status for VPN service %s" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:336 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:334 msgid "Sending status report update to plugin" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:338 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:336 msgid "Report: Completed status report processing" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:622 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:620 #, python-format msgid "Unable to create %(resource)s %(which)s: %(status)d" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:635 -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:663 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:633 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:661 #, python-format msgid "Internal error - '%s' is not defined" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:648 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:646 #, python-format msgid "Unable to delete %(resource)s %(which)s: %(status)d" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:657 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:655 #, python-format msgid "Performing rollback action %(action)s for resource %(resource)s" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:683 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:681 #, python-format msgid "Creating IPSec connection %s" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:716 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:714 #, python-format msgid "FAILED: Create of IPSec site-to-site connection %s" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:719 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:717 #, python-format msgid "SUCCESS: Created IPSec site-to-site connection %s" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:728 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:726 #, python-format msgid "Deleting IPSec connection %s" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:730 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:728 #, python-format msgid "Unable to find connection %s" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:734 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:732 #, python-format msgid "SUCCESS: Deleted IPSec site-to-site connection %s" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:742 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:740 #, python-format msgid "Unable to change %(tunnel)s admin state to %(state)s" msgstr "" @@ -16331,57 +16353,57 @@ msgstr "" msgid "Ignoring Cisco CSR for subnet %s - REST management is not an IP address" msgstr "" -#: neutron/services/vpn/service_drivers/cisco_csr_db.py:46 +#: neutron/services/vpn/service_drivers/cisco_csr_db.py:44 #, python-format msgid "Fatal - %(reason)s" msgstr "" -#: neutron/services/vpn/service_drivers/cisco_csr_db.py:80 +#: neutron/services/vpn/service_drivers/cisco_csr_db.py:78 #, python-format msgid "No available Cisco CSR %(type)s IDs from %(min)d..%(max)d" msgstr "" -#: neutron/services/vpn/service_drivers/cisco_csr_db.py:135 +#: neutron/services/vpn/service_drivers/cisco_csr_db.py:133 #, python-format msgid "" "Database inconsistency between IPSec connection and Cisco CSR mapping " "table (%s)" msgstr "" -#: neutron/services/vpn/service_drivers/cisco_csr_db.py:161 +#: neutron/services/vpn/service_drivers/cisco_csr_db.py:159 #, python-format msgid "Reserved new CSR ID %(csr_id)d for %(policy)s ID %(policy_id)s" msgstr "" -#: neutron/services/vpn/service_drivers/cisco_csr_db.py:188 +#: neutron/services/vpn/service_drivers/cisco_csr_db.py:186 #, python-format msgid "" "Mappings for IPSec connection %(conn)s - tunnel=%(tunnel)s " "ike_policy=%(csr_ike)d ipsec_policy=%(csr_ipsec)d" msgstr "" -#: neutron/services/vpn/service_drivers/cisco_csr_db.py:197 +#: neutron/services/vpn/service_drivers/cisco_csr_db.py:195 #, python-format msgid "" "Existing entry for IPSec connection %s not found in Cisco CSR mapping " "table" msgstr "" -#: neutron/services/vpn/service_drivers/cisco_csr_db.py:224 +#: neutron/services/vpn/service_drivers/cisco_csr_db.py:222 #, python-format msgid "" "Attempt to create duplicate entry in Cisco CSR mapping table for " "connection %s" msgstr "" -#: neutron/services/vpn/service_drivers/cisco_csr_db.py:227 +#: neutron/services/vpn/service_drivers/cisco_csr_db.py:225 #, python-format msgid "" "Mapped connection %(conn_id)s to Tunnel%(tunnel_id)d using IKE policy ID " "%(ike_id)d and IPSec policy ID %(ipsec_id)d" msgstr "" -#: neutron/services/vpn/service_drivers/cisco_csr_db.py:239 +#: neutron/services/vpn/service_drivers/cisco_csr_db.py:237 #, python-format msgid "Removed mapping for connection %s" msgstr "" @@ -16393,7 +16415,7 @@ msgid "" "router %(router)s" msgstr "" -#: neutron/services/vpn/service_drivers/cisco_validator.py:34 +#: neutron/services/vpn/service_drivers/cisco_validator.py:32 #, python-format msgid "" "Cisco CSR does not support %(resource)s attribute %(key)s with value " @@ -16406,35 +16428,35 @@ msgid "" "/proc/cmdline interface." msgstr "" -#: neutron/tests/unit/test_api_v2_resource.py:181 -#: neutron/tests/unit/test_api_v2_resource.py:251 +#: neutron/tests/unit/test_api_v2_resource.py:178 +#: neutron/tests/unit/test_api_v2_resource.py:248 msgid "Unmapped error" msgstr "" -#: neutron/tests/unit/test_api_v2_resource.py:320 +#: neutron/tests/unit/test_api_v2_resource.py:317 msgid "" "The server has either erred or is incapable of performing the requested " "operation." msgstr "" -#: neutron/tests/unit/bigswitch/fake_server.py:72 +#: neutron/tests/unit/bigswitch/fake_server.py:69 #, python-format msgid "" "Request: action=%(action)s, uri=%(uri)r, body=%(body)s, " "headers=%(headers)s" msgstr "" -#: neutron/tests/unit/bigswitch/fake_server.py:124 +#: neutron/tests/unit/bigswitch/fake_server.py:121 #, python-format msgid "No floating IPs in requesturi=%(uri)s, body=%(body)s" msgstr "" -#: neutron/tests/unit/bigswitch/fake_server.py:133 +#: neutron/tests/unit/bigswitch/fake_server.py:130 #, python-format msgid "Expected floating IPs from multiple tenants.uri=%(uri)s, body=%(body)s" msgstr "" -#: neutron/tests/unit/bigswitch/fake_server.py:178 +#: neutron/tests/unit/bigswitch/fake_server.py:175 #, python-format msgid "No host cert for %(server)s in cert %(cert)s" msgstr "" @@ -16474,165 +16496,165 @@ msgstr "" msgid "Adds test attributes to core resources." msgstr "" -#: neutron/tests/unit/nec/stub_ofc_driver.py:65 +#: neutron/tests/unit/nec/stub_ofc_driver.py:64 #, python-format msgid "(create_tenant) OFC tenant %s already exists" msgstr "" -#: neutron/tests/unit/nec/stub_ofc_driver.py:77 +#: neutron/tests/unit/nec/stub_ofc_driver.py:76 #, python-format msgid "(delete_tenant) OFC tenant %s not found" msgstr "" -#: neutron/tests/unit/nec/stub_ofc_driver.py:79 +#: neutron/tests/unit/nec/stub_ofc_driver.py:78 msgid "delete_tenant: SUCCEED" msgstr "" -#: neutron/tests/unit/nec/stub_ofc_driver.py:86 +#: neutron/tests/unit/nec/stub_ofc_driver.py:85 #, python-format msgid "(create_network) OFC tenant %s not found" msgstr "" -#: neutron/tests/unit/nec/stub_ofc_driver.py:89 +#: neutron/tests/unit/nec/stub_ofc_driver.py:88 #, python-format msgid "(create_network) OFC network %s already exists" msgstr "" -#: neutron/tests/unit/nec/stub_ofc_driver.py:100 +#: neutron/tests/unit/nec/stub_ofc_driver.py:99 #, python-format msgid "(update_network) OFC network %s not found" msgstr "" -#: neutron/tests/unit/nec/stub_ofc_driver.py:104 +#: neutron/tests/unit/nec/stub_ofc_driver.py:103 msgid "update_network: SUCCEED" msgstr "" -#: neutron/tests/unit/nec/stub_ofc_driver.py:112 +#: neutron/tests/unit/nec/stub_ofc_driver.py:111 #, python-format msgid "(delete_network) OFC network %s not found" msgstr "" -#: neutron/tests/unit/nec/stub_ofc_driver.py:114 +#: neutron/tests/unit/nec/stub_ofc_driver.py:113 msgid "delete_network: SUCCEED" msgstr "" -#: neutron/tests/unit/nec/stub_ofc_driver.py:121 +#: neutron/tests/unit/nec/stub_ofc_driver.py:120 #, python-format msgid "(create_port) OFC network %s not found" msgstr "" -#: neutron/tests/unit/nec/stub_ofc_driver.py:124 +#: neutron/tests/unit/nec/stub_ofc_driver.py:123 #, python-format msgid "(create_port) OFC port %s already exists" msgstr "" -#: neutron/tests/unit/nec/stub_ofc_driver.py:138 +#: neutron/tests/unit/nec/stub_ofc_driver.py:137 #, python-format msgid "(delete_port) OFC port %s not found" msgstr "" -#: neutron/tests/unit/nec/stub_ofc_driver.py:140 +#: neutron/tests/unit/nec/stub_ofc_driver.py:139 msgid "delete_port: SUCCEED" msgstr "" -#: neutron/tests/unit/nec/stub_ofc_driver.py:173 +#: neutron/tests/unit/nec/stub_ofc_driver.py:172 #, python-format msgid "(create_router) OFC tenant %s not found" msgstr "" -#: neutron/tests/unit/nec/stub_ofc_driver.py:176 +#: neutron/tests/unit/nec/stub_ofc_driver.py:175 #, python-format msgid "(create_router) OFC router %s already exists" msgstr "" -#: neutron/tests/unit/nec/stub_ofc_driver.py:179 +#: neutron/tests/unit/nec/stub_ofc_driver.py:178 msgid "Operation on OFC is failed" msgstr "" -#: neutron/tests/unit/nec/stub_ofc_driver.py:193 -#: neutron/tests/unit/nec/stub_ofc_driver.py:283 +#: neutron/tests/unit/nec/stub_ofc_driver.py:192 +#: neutron/tests/unit/nec/stub_ofc_driver.py:282 #, python-format msgid "(delete_router) OFC router %s not found" msgstr "" -#: neutron/tests/unit/nec/stub_ofc_driver.py:195 +#: neutron/tests/unit/nec/stub_ofc_driver.py:194 msgid "delete_router: SUCCEED" msgstr "" -#: neutron/tests/unit/nec/stub_ofc_driver.py:203 +#: neutron/tests/unit/nec/stub_ofc_driver.py:202 #, python-format msgid "(add_router_interface) ip_address %s is not a valid format (a.b.c.d/N)." msgstr "" -#: neutron/tests/unit/nec/stub_ofc_driver.py:208 +#: neutron/tests/unit/nec/stub_ofc_driver.py:207 #, python-format msgid "(add_router_interface) OFC router %s not found" msgstr "" -#: neutron/tests/unit/nec/stub_ofc_driver.py:211 +#: neutron/tests/unit/nec/stub_ofc_driver.py:210 #, python-format msgid "(add_router_interface) OFC network %s not found" msgstr "" -#: neutron/tests/unit/nec/stub_ofc_driver.py:218 +#: neutron/tests/unit/nec/stub_ofc_driver.py:217 #, python-format msgid "add_router_interface: SUCCEED (if_id=%s)" msgstr "" -#: neutron/tests/unit/nec/stub_ofc_driver.py:226 -#: neutron/tests/unit/nec/stub_ofc_driver.py:243 +#: neutron/tests/unit/nec/stub_ofc_driver.py:225 +#: neutron/tests/unit/nec/stub_ofc_driver.py:242 #, python-format msgid "(delete_router_interface) OFC router interface %s not found" msgstr "" -#: neutron/tests/unit/nec/stub_ofc_driver.py:235 +#: neutron/tests/unit/nec/stub_ofc_driver.py:234 msgid "update_router_route: SUCCEED" msgstr "" -#: neutron/tests/unit/nec/stub_ofc_driver.py:246 +#: neutron/tests/unit/nec/stub_ofc_driver.py:245 msgid "delete_router_interface: SUCCEED" msgstr "" -#: neutron/tests/unit/nec/stub_ofc_driver.py:256 +#: neutron/tests/unit/nec/stub_ofc_driver.py:255 #, python-format msgid "(add_router_route) OFC router %s not found" msgstr "" -#: neutron/tests/unit/nec/stub_ofc_driver.py:261 +#: neutron/tests/unit/nec/stub_ofc_driver.py:260 #, python-format msgid "(add_router_route) route to \"%s\" already exists" msgstr "" -#: neutron/tests/unit/nec/stub_ofc_driver.py:266 +#: neutron/tests/unit/nec/stub_ofc_driver.py:265 #, python-format msgid "add_router_route: SUCCEED (route_id=%s)" msgstr "" -#: neutron/tests/unit/nec/stub_ofc_driver.py:275 +#: neutron/tests/unit/nec/stub_ofc_driver.py:274 #, python-format msgid "(delete_router_route) OFC router route %s not found" msgstr "" -#: neutron/tests/unit/nec/stub_ofc_driver.py:277 +#: neutron/tests/unit/nec/stub_ofc_driver.py:276 msgid "delete_router_route: SUCCEED" msgstr "" -#: neutron/tests/unit/nec/stub_ofc_driver.py:290 +#: neutron/tests/unit/nec/stub_ofc_driver.py:289 #, python-format msgid "list_router_routes: routes=%s" msgstr "" -#: neutron/tests/unit/nec/test_ofc_client.py:86 +#: neutron/tests/unit/nec/test_ofc_client.py:84 msgid "The specified OFC resource (/somewhere) is not found." msgstr "" -#: neutron/tests/unit/nec/test_ofc_client.py:90 -#: neutron/tests/unit/nec/test_ofc_client.py:96 -#: neutron/tests/unit/nec/test_ofc_client.py:105 +#: neutron/tests/unit/nec/test_ofc_client.py:88 +#: neutron/tests/unit/nec/test_ofc_client.py:94 +#: neutron/tests/unit/nec/test_ofc_client.py:103 msgid "An OFC exception has occurred: Operation on OFC failed" msgstr "" -#: neutron/tests/unit/nec/test_ofc_client.py:112 +#: neutron/tests/unit/nec/test_ofc_client.py:110 msgid "An OFC exception has occurred: Failed to connect OFC : " msgstr "" diff --git a/neutron/locale/pt_BR/LC_MESSAGES/neutron-log-info.po b/neutron/locale/pt_BR/LC_MESSAGES/neutron-log-info.po index 9c69d687533..6a121095889 100644 --- a/neutron/locale/pt_BR/LC_MESSAGES/neutron-log-info.po +++ b/neutron/locale/pt_BR/LC_MESSAGES/neutron-log-info.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Neutron\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-14 06:10+0000\n" +"POT-Creation-Date: 2014-09-22 06:06+0000\n" "PO-Revision-Date: 2014-08-12 21:40+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/" @@ -118,20 +118,25 @@ msgstr "" msgid "Waiting on %d children to exit" msgstr "Aguardando em %d filhos para sair" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:80 +#: neutron/plugins/ml2/drivers/type_tunnel.py:79 +#, python-format +msgid "%(type)s ID ranges: %(range)s" +msgstr "" + +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:78 msgid "APIC service agent starting ..." msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:97 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:95 msgid "APIC service agent started" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:191 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:189 #, python-format msgid "APIC host agent: agent starting on %s" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:211 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:209 #, python-format msgid "APIC host agent: started on %s" msgstr "" @@ -141,11 +146,11 @@ msgstr "" msgid "Agent out of sync with plugin!" msgstr "Agente fora de sincronização com o plug-in!" -#: neutron/plugins/nuage/syncmanager.py:47 +#: neutron/plugins/nuage/syncmanager.py:46 msgid "Starting the sync between Neutron and VSD" msgstr "" -#: neutron/plugins/nuage/syncmanager.py:60 +#: neutron/plugins/nuage/syncmanager.py:59 msgid "Sync between Neutron and VSD completed successfully" msgstr "" diff --git a/neutron/locale/te_IN/LC_MESSAGES/neutron-log-info.po b/neutron/locale/te_IN/LC_MESSAGES/neutron-log-info.po index d2ff5dd2fb7..f835b0ec795 100644 --- a/neutron/locale/te_IN/LC_MESSAGES/neutron-log-info.po +++ b/neutron/locale/te_IN/LC_MESSAGES/neutron-log-info.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Neutron\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-14 06:10+0000\n" +"POT-Creation-Date: 2014-09-22 06:06+0000\n" "PO-Revision-Date: 2014-08-17 05:19+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: Telugu (India) (http://www.transifex.com/projects/p/neutron/" @@ -117,20 +117,25 @@ msgstr "థ్రెడ్ మృతి తర్వాత అని వేచ msgid "Waiting on %d children to exit" msgstr "%d పిల్లల వెయిటింగ్ నిష్క్రమణ" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:80 +#: neutron/plugins/ml2/drivers/type_tunnel.py:79 +#, python-format +msgid "%(type)s ID ranges: %(range)s" +msgstr "" + +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:78 msgid "APIC service agent starting ..." msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:97 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:95 msgid "APIC service agent started" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:191 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:189 #, python-format msgid "APIC host agent: agent starting on %s" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:211 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:209 #, python-format msgid "APIC host agent: started on %s" msgstr "" @@ -140,11 +145,11 @@ msgstr "" msgid "Agent out of sync with plugin!" msgstr "" -#: neutron/plugins/nuage/syncmanager.py:47 +#: neutron/plugins/nuage/syncmanager.py:46 msgid "Starting the sync between Neutron and VSD" msgstr "" -#: neutron/plugins/nuage/syncmanager.py:60 +#: neutron/plugins/nuage/syncmanager.py:59 msgid "Sync between Neutron and VSD completed successfully" msgstr "" diff --git a/neutron/locale/vi_VN/LC_MESSAGES/neutron-log-info.po b/neutron/locale/vi_VN/LC_MESSAGES/neutron-log-info.po index cbe139653ae..19234a53bfd 100644 --- a/neutron/locale/vi_VN/LC_MESSAGES/neutron-log-info.po +++ b/neutron/locale/vi_VN/LC_MESSAGES/neutron-log-info.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Neutron\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-14 06:10+0000\n" +"POT-Creation-Date: 2014-09-22 06:06+0000\n" "PO-Revision-Date: 2014-07-18 20:49+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: Vietnamese (Viet Nam) (http://www.transifex.com/projects/p/" @@ -116,20 +116,25 @@ msgstr "Chờ đợi được gọi sau khi luồng bị huỷ. Làm sạch." msgid "Waiting on %d children to exit" msgstr "Chờ đợi %d tiến trình con để thoát " -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:80 +#: neutron/plugins/ml2/drivers/type_tunnel.py:79 +#, python-format +msgid "%(type)s ID ranges: %(range)s" +msgstr "" + +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:78 msgid "APIC service agent starting ..." msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:97 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:95 msgid "APIC service agent started" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:191 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:189 #, python-format msgid "APIC host agent: agent starting on %s" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:211 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:209 #, python-format msgid "APIC host agent: started on %s" msgstr "" @@ -139,11 +144,11 @@ msgstr "" msgid "Agent out of sync with plugin!" msgstr "" -#: neutron/plugins/nuage/syncmanager.py:47 +#: neutron/plugins/nuage/syncmanager.py:46 msgid "Starting the sync between Neutron and VSD" msgstr "" -#: neutron/plugins/nuage/syncmanager.py:60 +#: neutron/plugins/nuage/syncmanager.py:59 msgid "Sync between Neutron and VSD completed successfully" msgstr "" diff --git a/neutron/locale/zh_CN/LC_MESSAGES/neutron-log-info.po b/neutron/locale/zh_CN/LC_MESSAGES/neutron-log-info.po index 32ebc2febfb..c6e346f22cf 100644 --- a/neutron/locale/zh_CN/LC_MESSAGES/neutron-log-info.po +++ b/neutron/locale/zh_CN/LC_MESSAGES/neutron-log-info.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Neutron\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-14 06:10+0000\n" +"POT-Creation-Date: 2014-09-22 06:06+0000\n" "PO-Revision-Date: 2014-08-12 21:40+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: Chinese (China) (http://www.transifex.com/projects/p/neutron/" @@ -116,20 +116,25 @@ msgstr "" msgid "Waiting on %d children to exit" msgstr "正在等待 %d 个子代退出" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:80 +#: neutron/plugins/ml2/drivers/type_tunnel.py:79 +#, python-format +msgid "%(type)s ID ranges: %(range)s" +msgstr "" + +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:78 msgid "APIC service agent starting ..." msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:97 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:95 msgid "APIC service agent started" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:191 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:189 #, python-format msgid "APIC host agent: agent starting on %s" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:211 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:209 #, python-format msgid "APIC host agent: started on %s" msgstr "" @@ -139,11 +144,11 @@ msgstr "" msgid "Agent out of sync with plugin!" msgstr "代理与插件不同步!" -#: neutron/plugins/nuage/syncmanager.py:47 +#: neutron/plugins/nuage/syncmanager.py:46 msgid "Starting the sync between Neutron and VSD" msgstr "" -#: neutron/plugins/nuage/syncmanager.py:60 +#: neutron/plugins/nuage/syncmanager.py:59 msgid "Sync between Neutron and VSD completed successfully" msgstr "" diff --git a/neutron/locale/zh_TW/LC_MESSAGES/neutron-log-info.po b/neutron/locale/zh_TW/LC_MESSAGES/neutron-log-info.po index 78044b1fd60..5235f251dd8 100644 --- a/neutron/locale/zh_TW/LC_MESSAGES/neutron-log-info.po +++ b/neutron/locale/zh_TW/LC_MESSAGES/neutron-log-info.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Neutron\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-14 06:10+0000\n" +"POT-Creation-Date: 2014-09-22 06:06+0000\n" "PO-Revision-Date: 2014-07-18 20:49+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/neutron/" @@ -116,20 +116,25 @@ msgstr "" msgid "Waiting on %d children to exit" msgstr "正在等待 %d 個子項結束" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:80 +#: neutron/plugins/ml2/drivers/type_tunnel.py:79 +#, python-format +msgid "%(type)s ID ranges: %(range)s" +msgstr "" + +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:78 msgid "APIC service agent starting ..." msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:97 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:95 msgid "APIC service agent started" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:191 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:189 #, python-format msgid "APIC host agent: agent starting on %s" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:211 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:209 #, python-format msgid "APIC host agent: started on %s" msgstr "" @@ -139,11 +144,11 @@ msgstr "" msgid "Agent out of sync with plugin!" msgstr "" -#: neutron/plugins/nuage/syncmanager.py:47 +#: neutron/plugins/nuage/syncmanager.py:46 msgid "Starting the sync between Neutron and VSD" msgstr "" -#: neutron/plugins/nuage/syncmanager.py:60 +#: neutron/plugins/nuage/syncmanager.py:59 msgid "Sync between Neutron and VSD completed successfully" msgstr "" From 0cc7444f7577e53f14068a2cb35431713d6d21a0 Mon Sep 17 00:00:00 2001 From: Elena Ezhova Date: Tue, 26 Aug 2014 19:22:20 +0400 Subject: [PATCH 020/128] Add logging for enforced policy rules There are a lot of policy rules which should not necessarily be explicitly specified in policy.json to be checked while enforcement. There should be a way for an operator to know which policy rules are actually being enforced for each action. Added a unit test. Change-Id: I261d3e230eced9ea514b35cc3f5f8be04f84c751 Closes-Bug: #1356679 --- neutron/policy.py | 20 ++++++++++++++++++-- neutron/tests/unit/test_policy.py | 21 +++++++++++++++++++++ 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/neutron/policy.py b/neutron/policy.py index 562ee036303..092750add59 100644 --- a/neutron/policy.py +++ b/neutron/policy.py @@ -17,6 +17,7 @@ Policy engine for neutron. Largely copied from nova. """ import itertools +import logging import re from oslo.config import cfg @@ -27,11 +28,11 @@ import neutron.common.utils as utils from neutron.openstack.common import excutils from neutron.openstack.common.gettextutils import _LE, _LI, _LW from neutron.openstack.common import importutils -from neutron.openstack.common import log as logging +from neutron.openstack.common import log from neutron.openstack.common import policy -LOG = logging.getLogger(__name__) +LOG = log.getLogger(__name__) _POLICY_PATH = None _POLICY_CACHE = {} ADMIN_CTX_POLICY = 'context_is_admin' @@ -151,6 +152,16 @@ def _build_subattr_match_rule(attr_name, attr, action, target): return policy.AndCheck(sub_attr_rules) +def _process_rules_list(rules, match_rule): + """Recursively walk a policy rule to extract a list of match entries.""" + if isinstance(match_rule, policy.RuleCheck): + rules.append(match_rule.match) + elif isinstance(match_rule, policy.AndCheck): + for rule in match_rule.rules: + _process_rules_list(rules, rule) + return rules + + def _build_match_rule(action, target): """Create the rule to match for a given action. @@ -188,6 +199,11 @@ def _build_match_rule(action, target): attribute_name, attribute, action, target)]) match_rule = policy.AndCheck([match_rule, attr_rule]) + # Check that the logger has a DEBUG log level + if (cfg.CONF.debug and LOG.logger.level == logging.NOTSET or + LOG.logger.level == logging.DEBUG): + rules = _process_rules_list([], match_rule) + LOG.debug("Enforcing rules: %s", rules) return match_rule diff --git a/neutron/tests/unit/test_policy.py b/neutron/tests/unit/test_policy.py index bc0074c909c..70905b29a07 100644 --- a/neutron/tests/unit/test_policy.py +++ b/neutron/tests/unit/test_policy.py @@ -551,3 +551,24 @@ class NeutronPolicyTestCase(base.BaseTestCase): {'extension:provider_network:set': 'rule:admin_only'}, dict((policy, 'rule:admin_only') for policy in expected_policies)) + + def test_process_rules(self): + action = "create_something" + # Construct RuleChecks for an action, attribute and subattribute + match_rule = common_policy.RuleCheck('rule', action) + attr_rule = common_policy.RuleCheck('rule', '%s:%s' % + (action, 'somethings')) + sub_attr_rules = [common_policy.RuleCheck('rule', '%s:%s:%s' % + (action, 'attr', + 'sub_attr_1'))] + # Build an AndCheck from the given RuleChecks + # Make the checks nested to better check the recursion + sub_attr_rules = common_policy.AndCheck(sub_attr_rules) + attr_rule = common_policy.AndCheck( + [attr_rule, sub_attr_rules]) + + match_rule = common_policy.AndCheck([match_rule, attr_rule]) + # Assert that the rules are correctly extracted from the match_rule + rules = policy._process_rules_list([], match_rule) + self.assertEqual(['create_something', 'create_something:somethings', + 'create_something:attr:sub_attr_1'], rules) From 086496bfc45e01cd2905a074d526a7d513bf4ec2 Mon Sep 17 00:00:00 2001 From: Kevin Benton Date: Sat, 20 Sep 2014 10:48:22 -0700 Subject: [PATCH 021/128] Mock out all RPC calls with a fixture Mock out the rpc proxy calls used by various agents to prevent unit tests from blocking for 10+ seconds while waiting for a timeout. This happened with the OVS agent unit tests recently in Change-ID Idd770a85a9eabff112d9613e75d8bb524020234a. This change results in a reduction from 330.8 seconds to 2.7 seconds for the neutron.tests.unit.openvswitch.test_ovs_neutron_agent test module. Closes-Bug: #1372076 Change-Id: I5e6794dc33c64c8fe309d8e72a8af3385c7d4442 --- neutron/tests/base.py | 20 +++++++++++++------ .../openvswitch/test_ovs_neutron_agent.py | 3 +++ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/neutron/tests/base.py b/neutron/tests/base.py index adda2a0bd81..dae1320de5c 100644 --- a/neutron/tests/base.py +++ b/neutron/tests/base.py @@ -125,11 +125,25 @@ class BaseTestCase(testtools.TestCase): 'neutron.common.exceptions.NeutronException.use_fatal_exceptions', fake_use_fatal_exceptions)) + self.setup_rpc_mocks() + + if sys.version_info < (2, 7) and getattr(self, 'fmt', '') == 'xml': + raise self.skipException('XML Testing Skipped in Py26') + + self.setup_config() + self.addOnException(self.check_for_systemexit) + + def setup_rpc_mocks(self): # don't actually start RPC listeners when testing self.useFixture(fixtures.MonkeyPatch( 'neutron.common.rpc.Connection.consume_in_threads', fake_consume_in_threads)) + # immediately return RPC calls + self.useFixture(fixtures.MonkeyPatch( + 'neutron.common.rpc.RpcProxy._RpcProxy__call_rpc_method', + mock.MagicMock())) + self.useFixture(fixtures.MonkeyPatch( 'oslo.messaging.Notifier', fake_notifier.FakeNotifier)) @@ -144,12 +158,6 @@ class BaseTestCase(testtools.TestCase): self.addCleanup(n_rpc.cleanup) n_rpc.init(CONF) - if sys.version_info < (2, 7) and getattr(self, 'fmt', '') == 'xml': - raise self.skipException('XML Testing Skipped in Py26') - - self.setup_config() - self.addOnException(self.check_for_systemexit) - def check_for_systemexit(self, exc_info): if isinstance(exc_info[1], SystemExit): self.fail("A SystemExit was raised during the test. %s" diff --git a/neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py b/neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py index 3289b34965e..6a214dd6f29 100644 --- a/neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py +++ b/neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py @@ -136,6 +136,9 @@ class TestOvsNeutronAgent(base.BaseTestCase): 'FixedIntervalLoopingCall', new=MockFixedIntervalLoopingCall)): self.agent = ovs_neutron_agent.OVSNeutronAgent(**kwargs) + # set back to true because initial report state will succeed due + # to mocked out RPC calls + self.agent.use_call = True self.agent.tun_br = mock.Mock() self.agent.sg_agent = mock.Mock() From c756d3c3ca9e90fab5e1d3ff37af33972747ba70 Mon Sep 17 00:00:00 2001 From: "Kevin L. Mitchell" Date: Mon, 22 Sep 2014 12:18:11 -0500 Subject: [PATCH 022/128] Eliminate OrderedDict from test_api_v2.py Neutron cannot possibly be passing tests under Python 2.6, as neutron/tests/unit/test_api_v2.py is referencing collections.OrderedDict, which does not exist in Python 2.6. Since there is no reason to use an OrderedDict in this case, this replaces it with a simple dict. Change-Id: I1b9886f508c4c8b96cf50c50f157c1960da433fc Closes-Bug: #1372571 --- neutron/tests/unit/test_api_v2.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/neutron/tests/unit/test_api_v2.py b/neutron/tests/unit/test_api_v2.py index e2ee2aacb48..842ec9cf80f 100644 --- a/neutron/tests/unit/test_api_v2.py +++ b/neutron/tests/unit/test_api_v2.py @@ -13,7 +13,6 @@ # License for the specific language governing permissions and limitations # under the License. -import collections import os import mock @@ -145,7 +144,7 @@ class APIv2TestCase(APIv2TestBase): def _get_collection_kwargs(self, skipargs=[], **kwargs): args_list = ['filters', 'fields', 'sorts', 'limit', 'marker', 'page_reverse'] - args_dict = collections.OrderedDict( + args_dict = dict( (arg, mock.ANY) for arg in set(args_list) - set(skipargs)) args_dict.update(kwargs) return args_dict From 2f5aca31b508da9c673c0209ad40efc2b5b2d16d Mon Sep 17 00:00:00 2001 From: Preeti Mirji Date: Wed, 23 Jul 2014 03:22:30 -0700 Subject: [PATCH 023/128] Stop admin using other tenants unshared rules MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit If the firewall rules are not shared and if they belong to different tenants, then admin should not be able to create a policy using these rules and he should not be able to insert such rules into policies. An exception should be raised in such case. Added new exception “FirewallRuleConflict” to handle such conditions. Co-Authored-By: Koteswara Rao Kelam Change-Id: I984eb76069bd1493a77bf523bec2bd81abb14abb Closes-bug: 1327057 --- neutron/db/firewall/firewall_db.py | 21 ++++++++++-- neutron/extensions/firewall.py | 13 +++++++ .../unit/db/firewall/test_db_firewall.py | 34 +++++++++++++++++++ 3 files changed, 65 insertions(+), 3 deletions(-) diff --git a/neutron/db/firewall/firewall_db.py b/neutron/db/firewall/firewall_db.py index 2e7097d5517..7321d1d126f 100644 --- a/neutron/db/firewall/firewall_db.py +++ b/neutron/db/firewall/firewall_db.py @@ -162,6 +162,13 @@ class Firewall_db_mixin(firewall.FirewallPluginBase, base_db.CommonDbMixin): 'enabled': firewall_rule['enabled']} return self._fields(res, fields) + def _check_firewall_rule_conflict(self, fwr_db, fwp_db): + if not fwr_db['shared']: + if fwr_db['tenant_id'] != fwp_db['tenant_id']: + raise firewall.FirewallRuleConflict( + firewall_rule_id=fwr_db['id'], + tenant_id=fwr_db['tenant_id']) + def _set_rules_for_policy(self, context, firewall_policy_db, fwp): rule_id_list = fwp['firewall_rules'] fwp_db = firewall_policy_db @@ -196,6 +203,8 @@ class Firewall_db_mixin(firewall.FirewallPluginBase, base_db.CommonDbMixin): raise firewall.FirewallRuleSharingConflict( firewall_rule_id=fwrule_id, firewall_policy_id=fwp_db['id']) + for fwr_db in rules_in_db: + self._check_firewall_rule_conflict(fwr_db, fwp_db) # New list of rules is valid so we will first reset the existing # list and then add each rule in order. # Note that the list could be empty in which case we interpret @@ -403,6 +412,13 @@ class Firewall_db_mixin(firewall.FirewallPluginBase, base_db.CommonDbMixin): def update_firewall_rule(self, context, id, firewall_rule): LOG.debug(_("update_firewall_rule() called")) fwr = firewall_rule['firewall_rule'] + fwr_db = self._get_firewall_rule(context, id) + if fwr_db.firewall_policy_id: + fwp_db = self._get_firewall_policy(context, + fwr_db.firewall_policy_id) + if 'shared' in fwr and not fwr['shared']: + if fwr_db['tenant_id'] != fwp_db['tenant_id']: + raise firewall.FirewallRuleInUse(firewall_rule_id=id) if 'source_port' in fwr: src_port_min, src_port_max = self._get_min_max_ports_from_range( fwr['source_port']) @@ -416,7 +432,6 @@ class Firewall_db_mixin(firewall.FirewallPluginBase, base_db.CommonDbMixin): fwr['destination_port_range_max'] = dst_port_max del fwr['destination_port'] with context.session.begin(subtransactions=True): - fwr_db = self._get_firewall_rule(context, id) protocol = fwr.get('protocol', fwr_db['protocol']) if not protocol: sport = fwr.get('source_port_range_min', @@ -427,8 +442,6 @@ class Firewall_db_mixin(firewall.FirewallPluginBase, base_db.CommonDbMixin): raise firewall.FirewallRuleWithPortWithoutProtocolInvalid() fwr_db.update(fwr) if fwr_db.firewall_policy_id: - fwp_db = self._get_firewall_policy(context, - fwr_db.firewall_policy_id) fwp_db.audited = False return self._make_firewall_rule_dict(fwr_db) @@ -476,8 +489,10 @@ class Firewall_db_mixin(firewall.FirewallPluginBase, base_db.CommonDbMixin): insert_before = False with context.session.begin(subtransactions=True): fwr_db = self._get_firewall_rule(context, firewall_rule_id) + fwp_db = self._get_firewall_policy(context, id) if fwr_db.firewall_policy_id: raise firewall.FirewallRuleInUse(firewall_rule_id=fwr_db['id']) + self._check_firewall_rule_conflict(fwr_db, fwp_db) if ref_firewall_rule_id: # If reference_firewall_rule_id is set, the new rule # is inserted depending on the value of insert_before. diff --git a/neutron/extensions/firewall.py b/neutron/extensions/firewall.py index 89f8b0f0bf5..3ae5bc7f384 100644 --- a/neutron/extensions/firewall.py +++ b/neutron/extensions/firewall.py @@ -127,6 +127,19 @@ class FirewallInternalDriverError(qexception.NeutronException): message = _("%(driver)s: Internal driver error.") +class FirewallRuleConflict(qexception.Conflict): + + """Firewall rule conflict exception. + + Occurs when admin policy tries to use another tenant's unshared + rule. + """ + + message = _("Operation cannot be performed since Firewall Rule " + "%(firewall_rule_id)s is not shared and belongs to " + "another tenant %(tenant_id)s") + + fw_valid_protocol_values = [None, constants.TCP, constants.UDP, constants.ICMP] fw_valid_action_values = [constants.FWAAS_ALLOW, constants.FWAAS_DENY] diff --git a/neutron/tests/unit/db/firewall/test_db_firewall.py b/neutron/tests/unit/db/firewall/test_db_firewall.py index 0fc3c2c61ea..0dd6f42aac0 100644 --- a/neutron/tests/unit/db/firewall/test_db_firewall.py +++ b/neutron/tests/unit/db/firewall/test_db_firewall.py @@ -335,6 +335,17 @@ class TestFirewallDBPlugin(FirewallPluginDbTestCase): for k, v in attrs.iteritems(): self.assertEqual(fwp['firewall_policy'][k], v) + def test_create_admin_firewall_policy_with_other_tenant_rules(self): + with self.firewall_rule(shared=False) as fr: + fw_rule_ids = [fr['firewall_rule']['id']] + res = self._create_firewall_policy(None, 'firewall_policy1', + description=DESCRIPTION, + shared=SHARED, + firewall_rules=fw_rule_ids, + audited=AUDITED, + tenant_id='admin-tenant') + self.assertEqual(webob.exc.HTTPConflict.code, res.status_int) + def test_create_firewall_policy_with_previously_associated_rule(self): with self.firewall_rule() as fwr: fw_rule_ids = [fwr['firewall_rule']['id']] @@ -834,6 +845,17 @@ class TestFirewallDBPlugin(FirewallPluginDbTestCase): [fwr_id]) self.assertEqual(res['firewall_policy']['audited'], False) + def test_update_firewall_rule_associated_with_other_tenant_policy(self): + with self.firewall_rule(shared=True, tenant_id='tenant1') as fwr: + fwr_id = [fwr['firewall_rule']['id']] + with self.firewall_policy(shared=False, + firewall_rules=fwr_id): + data = {'firewall_rule': {'shared': False}} + req = self.new_update_request('firewall_rules', data, + fwr['firewall_rule']['id']) + res = req.get_response(self.ext_api) + self.assertEqual(webob.exc.HTTPConflict.code, res.status_int) + def test_delete_firewall_rule(self): ctx = context.get_admin_context() with self.firewall_rule(do_delete=False) as fwr: @@ -1057,6 +1079,18 @@ class TestFirewallDBPlugin(FirewallPluginDbTestCase): expected_code=webob.exc.HTTPBadRequest.code, expected_body=None) + def test_insert_rule_for_policy_of_other_tenant(self): + with self.firewall_rule(tenant_id='tenant-2', shared=False) as fwr: + fwr_id = fwr['firewall_rule']['id'] + with self.firewall_policy(name='firewall_policy') as fwp: + fwp_id = fwp['firewall_policy']['id'] + insert_data = {'firewall_rule_id': fwr_id} + self._rule_action( + 'insert', fwp_id, fwr_id, insert_before=None, + insert_after=None, + expected_code=webob.exc.HTTPConflict.code, + expected_body=None, body_data=insert_data) + def test_insert_rule_in_policy(self): attrs = self._get_test_firewall_policy_attrs() attrs['audited'] = False From 32ea2e349decd750e25cb00a8c907b8f73f795f3 Mon Sep 17 00:00:00 2001 From: Gary Kotton Date: Mon, 22 Sep 2014 10:03:37 -0700 Subject: [PATCH 024/128] Security groups: prevent race for default security group creation When a VM is booted via the Nova the client connection is created with an admin user. This causes problems when creating the neutron port. That is, there may be a race for the creation of the default security group for the tenant. The problem was introduced by commit acf44dba26ca8dca47bfb5fb2916807f9f4e2060 Change-Id: Ie0199c71231a322704f1f49995facde09c92da25 Closes-bug: #1372570 --- neutron/db/securitygroups_db.py | 13 +++++++++++-- neutron/tests/unit/test_extension_security_group.py | 10 ++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/neutron/db/securitygroups_db.py b/neutron/db/securitygroups_db.py index e10d29e6f32..23b5c80cb11 100644 --- a/neutron/db/securitygroups_db.py +++ b/neutron/db/securitygroups_db.py @@ -147,7 +147,12 @@ class SecurityGroupDbMixin(ext_sg.SecurityGroupPluginBase): # because all the unit tests do not explicitly set the context on # GETS. TODO(arosen) context handling can probably be improved here. if not default_sg and context.tenant_id: - self._ensure_default_security_group(context, context.tenant_id) + tenant_id = filters.get('tenant_id') + if tenant_id: + tenant_id = tenant_id[0] + else: + tenant_id = context.tenant_id + self._ensure_default_security_group(context, tenant_id) marker_obj = self._get_marker_obj(context, 'security_group', limit, marker) return self._get_collection(context, @@ -518,9 +523,13 @@ class SecurityGroupDbMixin(ext_sg.SecurityGroupPluginBase): return port_sg = p.get(ext_sg.SECURITYGROUPS, []) + filters = {'id': port_sg} + tenant_id = p.get('tenant_id') + if tenant_id: + filters['tenant_id'] = [tenant_id] valid_groups = set(g['id'] for g in self.get_security_groups(context, fields=['id'], - filters={'id': port_sg})) + filters=filters)) requested_groups = set(port_sg) port_sg_missing = requested_groups - valid_groups diff --git a/neutron/tests/unit/test_extension_security_group.py b/neutron/tests/unit/test_extension_security_group.py index 478d4a31ddd..4f52ba08077 100644 --- a/neutron/tests/unit/test_extension_security_group.py +++ b/neutron/tests/unit/test_extension_security_group.py @@ -573,6 +573,16 @@ class TestSecurityGroups(SecurityGroupDBTestCase): neutron_context=neutron_context).get('security_groups') self.assertEqual(len(sg), 1) + def test_security_group_port_create_creates_default_security_group(self): + res = self._create_network(self.fmt, 'net1', True, + tenant_id='not_admin', + set_context=True) + net1 = self.deserialize(self.fmt, res) + res = self._create_port(self.fmt, net1['network']['id'], + tenant_id='not_admin', set_context=True) + sg = self._list('security-groups').get('security_groups') + self.assertEqual(len(sg), 1) + def test_default_security_group_rules(self): with self.network(): res = self.new_list_request('security-groups') From 4418e80c117e896743bdd77fcc499bbd85475dc2 Mon Sep 17 00:00:00 2001 From: Kevin Benton Date: Thu, 11 Sep 2014 04:26:03 -0700 Subject: [PATCH 025/128] Finish small unit test refactor of API v2 tests Leverage a utility function for all of the tests that create something in the API and expect a failure. Change-Id: Iedb6ba35d637dda5ae9f553d0c7ffcb7c526f3c6 --- neutron/tests/unit/test_api_v2.py | 60 +++++++------------------------ 1 file changed, 13 insertions(+), 47 deletions(-) diff --git a/neutron/tests/unit/test_api_v2.py b/neutron/tests/unit/test_api_v2.py index e2ee2aacb48..b3a3378b1ba 100644 --- a/neutron/tests/unit/test_api_v2.py +++ b/neutron/tests/unit/test_api_v2.py @@ -791,11 +791,7 @@ class JSONV2TestCase(APIv2TestBase, testlib_api.WebTestCase): def test_create_no_keystone_env(self): data = {'name': 'net1'} - res = self.api.post(_get_path('networks', fmt=self.fmt), - self.serialize(data), - content_type='application/' + self.fmt, - expect_errors=True) - self.assertEqual(res.status_int, exc.HTTPBadRequest.code) + self._test_create_failure_bad_request('networks', data) def test_create_with_keystone_env(self): tenant_id = _uuid() @@ -827,45 +823,25 @@ class JSONV2TestCase(APIv2TestBase, testlib_api.WebTestCase): tenant_id = _uuid() data = {'network': {'name': 'net1', 'tenant_id': tenant_id}} env = {'neutron.context': context.Context('', tenant_id + "bad")} - res = self.api.post(_get_path('networks', fmt=self.fmt), - self.serialize(data), - content_type='application/' + self.fmt, - expect_errors=True, - extra_environ=env) - self.assertEqual(res.status_int, exc.HTTPBadRequest.code) + self._test_create_failure_bad_request('networks', data, + extra_environ=env) def test_create_no_body(self): data = {'whoa': None} - res = self.api.post(_get_path('networks', fmt=self.fmt), - self.serialize(data), - content_type='application/' + self.fmt, - expect_errors=True) - self.assertEqual(res.status_int, exc.HTTPBadRequest.code) + self._test_create_failure_bad_request('networks', data) def test_create_no_resource(self): data = {} - res = self.api.post(_get_path('networks', fmt=self.fmt), - self.serialize(data), - content_type='application/' + self.fmt, - expect_errors=True) - self.assertEqual(res.status_int, exc.HTTPBadRequest.code) + self._test_create_failure_bad_request('networks', data) def test_create_missing_attr(self): data = {'port': {'what': 'who', 'tenant_id': _uuid()}} - res = self.api.post(_get_path('ports', fmt=self.fmt), - self.serialize(data), - content_type='application/' + self.fmt, - expect_errors=True) - self.assertEqual(res.status_int, 400) + self._test_create_failure_bad_request('ports', data) def test_create_readonly_attr(self): data = {'network': {'name': 'net1', 'tenant_id': _uuid(), 'status': "ACTIVE"}} - res = self.api.post(_get_path('networks', fmt=self.fmt), - self.serialize(data), - content_type='application/' + self.fmt, - expect_errors=True) - self.assertEqual(res.status_int, 400) + self._test_create_failure_bad_request('networks', data) def test_create_bulk(self): data = {'networks': [{'name': 'net1', @@ -888,38 +864,28 @@ class JSONV2TestCase(APIv2TestBase, testlib_api.WebTestCase): content_type='application/' + self.fmt) self.assertEqual(res.status_int, exc.HTTPCreated.code) - def _test_create_bulk_failure(self, resource, data): - # TODO(kevinbenton): update the rest of the failure cases to use - # this. + def _test_create_failure_bad_request(self, resource, data, **kwargs): res = self.api.post(_get_path(resource, fmt=self.fmt), self.serialize(data), content_type='application/' + self.fmt, - expect_errors=True) + expect_errors=True, **kwargs) self.assertEqual(res.status_int, exc.HTTPBadRequest.code) def test_create_bulk_networks_none(self): - self._test_create_bulk_failure('networks', {'networks': None}) + self._test_create_failure_bad_request('networks', {'networks': None}) def test_create_bulk_networks_empty_list(self): - self._test_create_bulk_failure('networks', {'networks': []}) + self._test_create_failure_bad_request('networks', {'networks': []}) def test_create_bulk_missing_attr(self): data = {'ports': [{'what': 'who', 'tenant_id': _uuid()}]} - res = self.api.post(_get_path('ports', fmt=self.fmt), - self.serialize(data), - content_type='application/' + self.fmt, - expect_errors=True) - self.assertEqual(res.status_int, 400) + self._test_create_failure_bad_request('ports', data) def test_create_bulk_partial_body(self): data = {'ports': [{'device_id': 'device_1', 'tenant_id': _uuid()}, {'tenant_id': _uuid()}]} - res = self.api.post(_get_path('ports', fmt=self.fmt), - self.serialize(data), - content_type='application/' + self.fmt, - expect_errors=True) - self.assertEqual(res.status_int, 400) + self._test_create_failure_bad_request('ports', data) def test_create_attr_not_specified(self): net_id = _uuid() From 74d10939903984d5f06c1749a8707fa3257e44ff Mon Sep 17 00:00:00 2001 From: Elena Ezhova Date: Tue, 19 Aug 2014 15:54:36 +0400 Subject: [PATCH 026/128] Forbid regular users to reset admin-only attrs to default values A regular user can reset an admin-only attribute to its default value due to the fact that a corresponding policy rule is enforced only in the case when an attribute is present in the target AND has a non-default value. Added a new attribute "attributes_to_update" which contains a list of all to-be updated attributes to the body of the target that is passed to policy.enforce. Changed a check for whether an attribute is explicitly set. Now, in the case of update, the function should not pay attention to a default value of an attribute, but check whether it was explicitly marked as being updated. Added unit-tests. Closes-Bug: #1357379 Related-Bug: #1338880 Change-Id: I6537bb1da5ef0d6899bc71e4e949f2c760c103c2 --- neutron/api/v2/base.py | 4 ++++ neutron/common/constants.py | 2 ++ neutron/policy.py | 31 +++++++++++++++++++++++-------- neutron/tests/unit/test_api_v2.py | 12 ++++++++++++ neutron/tests/unit/test_policy.py | 22 +++++++++++++++++----- 5 files changed, 58 insertions(+), 13 deletions(-) diff --git a/neutron/api/v2/base.py b/neutron/api/v2/base.py index a8bf20555e6..53c11b9d218 100644 --- a/neutron/api/v2/base.py +++ b/neutron/api/v2/base.py @@ -513,6 +513,10 @@ class Controller(object): parent_id=parent_id) orig_object_copy = copy.copy(orig_obj) orig_obj.update(body[self._resource]) + # Make a list of attributes to be updated to inform the policy engine + # which attributes are set explicitly so that it can distinguish them + # from the ones that are set to their default values. + orig_obj[const.ATTRIBUTES_TO_UPDATE] = body[self._resource].keys() try: policy.enforce(request.context, action, diff --git a/neutron/common/constants.py b/neutron/common/constants.py index 79353937653..158e34245ee 100644 --- a/neutron/common/constants.py +++ b/neutron/common/constants.py @@ -150,3 +150,5 @@ DEVICE_NAME_MAX_LEN = 15 # Device names start with "tap" TAP_DEVICE_PREFIX = 'tap' + +ATTRIBUTES_TO_UPDATE = 'attributes_to_update' diff --git a/neutron/policy.py b/neutron/policy.py index 562ee036303..b7f7873e191 100644 --- a/neutron/policy.py +++ b/neutron/policy.py @@ -16,12 +16,15 @@ """ Policy engine for neutron. Largely copied from nova. """ + +import collections import itertools import re from oslo.config import cfg from neutron.api.v2 import attributes +from neutron.common import constants as const from neutron.common import exceptions import neutron.common.utils as utils from neutron.openstack.common import excutils @@ -118,14 +121,28 @@ def _set_rules(data): policy.set_rules(policies) -def _is_attribute_explicitly_set(attribute_name, resource, target): - """Verify that an attribute is present and has a non-default value.""" +def _is_attribute_explicitly_set(attribute_name, resource, target, action): + """Verify that an attribute is present and is explicitly set.""" + if 'update' in action: + # In the case of update, the function should not pay attention to a + # default value of an attribute, but check whether it was explicitly + # marked as being updated instead. + return (attribute_name in target[const.ATTRIBUTES_TO_UPDATE] and + target[attribute_name] is not attributes.ATTR_NOT_SPECIFIED) return ('default' in resource[attribute_name] and attribute_name in target and target[attribute_name] is not attributes.ATTR_NOT_SPECIFIED and target[attribute_name] != resource[attribute_name]['default']) +def _should_validate_sub_attributes(attribute, sub_attr): + """Verify that sub-attributes are iterable and should be validated.""" + validate = attribute.get('validate') + return (validate and isinstance(sub_attr, collections.Iterable) and + any([k.startswith('type:dict') and + v for (k, v) in validate.iteritems()])) + + def _build_subattr_match_rule(attr_name, attr, action, target): """Create the rule to match for sub-attribute policy checks.""" # TODO(salv-orlando): Instead of relying on validator info, introduce @@ -173,16 +190,14 @@ def _build_match_rule(action, target): for attribute_name in res_map[resource]: if _is_attribute_explicitly_set(attribute_name, res_map[resource], - target): + target, action): attribute = res_map[resource][attribute_name] if 'enforce_policy' in attribute: attr_rule = policy.RuleCheck('rule', '%s:%s' % (action, attribute_name)) - # Build match entries for sub-attributes, if present - validate = attribute.get('validate') - if (validate and any([k.startswith('type:dict') and v - for (k, v) in - validate.iteritems()])): + # Build match entries for sub-attributes + if _should_validate_sub_attributes( + attribute, target[attribute_name]): attr_rule = policy.AndCheck( [attr_rule, _build_subattr_match_rule( attribute_name, attribute, diff --git a/neutron/tests/unit/test_api_v2.py b/neutron/tests/unit/test_api_v2.py index e2ee2aacb48..ec8ca75ed2d 100644 --- a/neutron/tests/unit/test_api_v2.py +++ b/neutron/tests/unit/test_api_v2.py @@ -1207,6 +1207,18 @@ class SubresourceTest(base.BaseTestCase, testlib_plugin.PluginSetupHelper): network_id='id1', dummy=body) + def test_update_subresource_to_none(self): + instance = self.plugin.return_value + + dummy_id = _uuid() + body = {'dummy': {}} + self.api.put_json('/networks/id1' + _get_path('dummies', id=dummy_id), + body) + instance.update_network_dummy.assert_called_once_with(mock.ANY, + dummy_id, + network_id='id1', + dummy=body) + def test_delete_sub_resource(self): instance = self.plugin.return_value diff --git a/neutron/tests/unit/test_policy.py b/neutron/tests/unit/test_policy.py index bc0074c909c..ad3e8138180 100644 --- a/neutron/tests/unit/test_policy.py +++ b/neutron/tests/unit/test_policy.py @@ -23,6 +23,7 @@ import six import neutron from neutron.api.v2 import attributes +from neutron.common import constants as const from neutron.common import exceptions from neutron import context from neutron import manager @@ -282,9 +283,11 @@ class NeutronPolicyTestCase(base.BaseTestCase): fake_manager_instance.plugin = plugin_klass() def _test_action_on_attr(self, context, action, attr, value, - exception=None): + exception=None, **kwargs): action = "%s_network" % action target = {'tenant_id': 'the_owner', attr: value} + if kwargs: + target.update(kwargs) if exception: self.assertRaises(exception, policy.enforce, context, action, target) @@ -293,10 +296,10 @@ class NeutronPolicyTestCase(base.BaseTestCase): self.assertEqual(result, True) def _test_nonadmin_action_on_attr(self, action, attr, value, - exception=None): + exception=None, **kwargs): user_context = context.Context('', "user", roles=['user']) self._test_action_on_attr(user_context, action, attr, - value, exception) + value, exception, **kwargs) def test_nonadmin_write_on_private_fails(self): self._test_nonadmin_action_on_attr('create', 'shared', False, @@ -313,9 +316,11 @@ class NeutronPolicyTestCase(base.BaseTestCase): def test_nonadmin_read_on_shared_succeeds(self): self._test_nonadmin_action_on_attr('get', 'shared', True) - def _test_enforce_adminonly_attribute(self, action): + def _test_enforce_adminonly_attribute(self, action, **kwargs): admin_context = context.get_admin_context() target = {'shared': True} + if kwargs: + target.update(kwargs) result = policy.enforce(admin_context, action, target) self.assertEqual(result, True) @@ -323,7 +328,14 @@ class NeutronPolicyTestCase(base.BaseTestCase): self._test_enforce_adminonly_attribute('create_network') def test_enforce_adminonly_attribute_update(self): - self._test_enforce_adminonly_attribute('update_network') + kwargs = {const.ATTRIBUTES_TO_UPDATE: ['shared']} + self._test_enforce_adminonly_attribute('update_network', **kwargs) + + def test_reset_adminonly_attr_to_default_fails(self): + kwargs = {const.ATTRIBUTES_TO_UPDATE: ['shared']} + self._test_nonadmin_action_on_attr('update', 'shared', False, + exceptions.PolicyNotAuthorized, + **kwargs) def test_enforce_adminonly_attribute_no_context_is_admin_policy(self): del self.rules[policy.ADMIN_CTX_POLICY] From 7af293ea527d5f904afcc2c3596bb151a5c3c017 Mon Sep 17 00:00:00 2001 From: Ann Kamyshnikova Date: Tue, 23 Sep 2014 12:15:05 +0400 Subject: [PATCH 027/128] Fix entrypoint of OneConvergencePlugin plugin In setup.cfg entrypoint of OneConvergencePlugin is set incorrectly. Used '.' instead of ':'. Closes-bug: #1372810 Change-Id: Ic1e154cfcf8b13f021b0635238e07a0459a25a9e --- setup.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.cfg b/setup.cfg index 4f0697c80e7..f4c1aa5bc50 100644 --- a/setup.cfg +++ b/setup.cfg @@ -140,7 +140,7 @@ neutron.core_plugins = nec = neutron.plugins.nec.nec_plugin:NECPluginV2 nuage = neutron.plugins.nuage.plugin:NuagePlugin metaplugin = neutron.plugins.metaplugin.meta_neutron_plugin:MetaPluginV2 - oneconvergence = neutron.plugins.oneconvergence.plugin.OneConvergencePluginV2 + oneconvergence = neutron.plugins.oneconvergence.plugin:OneConvergencePluginV2 openvswitch = neutron.plugins.openvswitch.ovs_neutron_plugin:OVSNeutronPluginV2 plumgrid = neutron.plugins.plumgrid.plumgrid_plugin.plumgrid_plugin:NeutronPluginPLUMgridV2 ryu = neutron.plugins.ryu.ryu_neutron_plugin:RyuNeutronPluginV2 From e7f0b56d74fbfbb08a3b7a0d2da4cefb6fe2aa67 Mon Sep 17 00:00:00 2001 From: Derek Higgins Date: Fri, 12 Sep 2014 16:31:44 +0100 Subject: [PATCH 028/128] Retry getting the list of service plugins On systems that start both neutron-server and neutron-l3-agent together, there is a chance that the first call to neutron will timeout. Retry upto 4 more times to avoid the l3 agent exiting on startup. This should make the l3 agent a little more robust on startup but still not ideal, ideally it wouldn't exit and retry periodically. Change-Id: I2171a164f3f77bccd89895d73c1c8d67f7190488 Closes-Bug: #1353953 Closes-Bug: #1368152 Closes-Bug: #1368795 --- neutron/agent/l3_agent.py | 42 +++++++++++++++++++++-------- neutron/tests/unit/test_l3_agent.py | 21 +++++++++++++++ 2 files changed, 52 insertions(+), 11 deletions(-) diff --git a/neutron/agent/l3_agent.py b/neutron/agent/l3_agent.py index 6531a6bc628..f8b3f5694cc 100644 --- a/neutron/agent/l3_agent.py +++ b/neutron/agent/l3_agent.py @@ -22,6 +22,7 @@ eventlet.monkey_patch() import netaddr import os from oslo.config import cfg +from oslo import messaging import Queue from neutron.agent.common import config @@ -40,6 +41,7 @@ from neutron.common import utils as common_utils from neutron import context from neutron import manager from neutron.openstack.common import excutils +from neutron.openstack.common.gettextutils import _LW from neutron.openstack.common import importutils from neutron.openstack.common import log as logging from neutron.openstack.common import loopingcall @@ -521,17 +523,35 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback, manager.Manager): self.sync_progress = False # Get the list of service plugins from Neutron Server - try: - self.neutron_service_plugins = ( - self.plugin_rpc.get_service_plugin_list(self.context)) - except n_rpc.RemoteError as e: - LOG.warning(_('l3-agent cannot check service plugins ' - 'enabled at the neutron server when startup ' - 'due to RPC error. It happens when the server ' - 'does not support this RPC API. If the error ' - 'is UnsupportedVersion you can ignore ' - 'this warning. Detail message: %s'), e) - self.neutron_service_plugins = None + # This is the first place where we contact neutron-server on startup + # so retry in case its not ready to respond. + retry_count = 5 + while True: + retry_count = retry_count - 1 + try: + self.neutron_service_plugins = ( + self.plugin_rpc.get_service_plugin_list(self.context)) + except n_rpc.RemoteError as e: + with excutils.save_and_reraise_exception() as ctx: + ctx.reraise = False + LOG.warning(_LW('l3-agent cannot check service plugins ' + 'enabled at the neutron server when ' + 'startup due to RPC error. It happens ' + 'when the server does not support this ' + 'RPC API. If the error is ' + 'UnsupportedVersion you can ignore this ' + 'warning. Detail message: %s'), e) + self.neutron_service_plugins = None + except messaging.MessagingTimeout as e: + with excutils.save_and_reraise_exception() as ctx: + if retry_count > 0: + ctx.reraise = False + LOG.warning(_LW('l3-agent cannot check service ' + 'plugins enabled on the neutron ' + 'server. Retrying. ' + 'Detail message: %s'), e) + continue + break self._clean_stale_namespaces = self.conf.use_namespaces diff --git a/neutron/tests/unit/test_l3_agent.py b/neutron/tests/unit/test_l3_agent.py index 42d0d09ef3f..93aa9e76f4a 100644 --- a/neutron/tests/unit/test_l3_agent.py +++ b/neutron/tests/unit/test_l3_agent.py @@ -20,6 +20,7 @@ import datetime import mock import netaddr from oslo.config import cfg +from oslo import messaging from testtools import matchers from neutron.agent.common import config as agent_config @@ -2140,6 +2141,26 @@ class TestBasicRouterOperations(base.BaseTestCase): self.assertIsNone(agent.neutron_service_plugins) self.assertTrue(self.plugin_api.get_service_plugin_list.called) + def test_get_service_plugin_list_retried(self): + raise_timeout = messaging.MessagingTimeout() + # Raise a timeout the first 2 times it calls + # get_service_plugin_list then return a empty tuple + self.plugin_api.get_service_plugin_list.side_effect = ( + raise_timeout, raise_timeout, tuple() + ) + agent = l3_agent.L3NATAgent(HOSTNAME, self.conf) + + self.assertEqual(agent.neutron_service_plugins, tuple()) + + def test_get_service_plugin_list_retried_max(self): + raise_timeout = messaging.MessagingTimeout() + # Raise a timeout 5 times + self.plugin_api.get_service_plugin_list.side_effect = ( + (raise_timeout, ) * 5 + ) + self.assertRaises(messaging.MessagingTimeout, l3_agent.L3NATAgent, + HOSTNAME, self.conf) + class TestL3AgentEventHandler(base.BaseTestCase): From 739b3cac3210e6a1ce942238ca3efa3ddf49cb4d Mon Sep 17 00:00:00 2001 From: Steven Ren Date: Tue, 23 Sep 2014 02:58:34 -0700 Subject: [PATCH 029/128] Remove the translation tag for debug level logs in vmware plugin There is no need to translate the debug level logs in vmware plugin for neutron. Closes-bug: #1372862 Change-Id: If07c06cc3a1eb3dd147191bb8ab9198d4198cd69 --- neutron/plugins/vmware/plugins/base.py | 66 +++++++++---------- neutron/plugins/vmware/plugins/service.py | 52 +++++++-------- .../vmware/vshield/edge_appliance_driver.py | 44 ++++++------- neutron/plugins/vmware/vshield/tasks/tasks.py | 4 +- neutron/plugins/vmware/vshield/vcns.py | 6 +- 5 files changed, 86 insertions(+), 86 deletions(-) diff --git a/neutron/plugins/vmware/plugins/base.py b/neutron/plugins/vmware/plugins/base.py index 6dbf8ae3568..37978917714 100644 --- a/neutron/plugins/vmware/plugins/base.py +++ b/neutron/plugins/vmware/plugins/base.py @@ -245,7 +245,7 @@ class NsxPluginV2(addr_pair_db.AllowedAddressPairsMixin, port_data.get('id', 'fake'), port_data.get('name', 'fake'), port_data.get('admin_state_up', True), ip_addresses, port_data.get('mac_address')) - LOG.debug(_("Created NSX router port:%s"), lrouter_port['uuid']) + LOG.debug("Created NSX router port:%s", lrouter_port['uuid']) except api_exc.NsxApiException: LOG.exception(_("Unable to create port on NSX logical router %s"), nsx_router_id) @@ -329,7 +329,7 @@ class NsxPluginV2(addr_pair_db.AllowedAddressPairsMixin, attachment, attachment_type, attachment_vlan) - LOG.debug(_("Attached %(att)s to NSX router port %(port)s"), + LOG.debug("Attached %(att)s to NSX router port %(port)s", {'att': attachment, 'port': nsx_router_port_id}) except api_exc.NsxApiException: # Must remove NSX logical port @@ -460,9 +460,9 @@ class NsxPluginV2(addr_pair_db.AllowedAddressPairsMixin, switchlib.plug_vif_interface( self.cluster, selected_lswitch['uuid'], lport['uuid'], "VifAttachment", port_data['id']) - LOG.debug(_("_nsx_create_port completed for port %(name)s " - "on network %(network_id)s. The new port id is " - "%(id)s."), port_data) + LOG.debug("_nsx_create_port completed for port %(name)s " + "on network %(network_id)s. The new port id is " + "%(id)s.", port_data) except (api_exc.NsxApiException, n_exc.NeutronException): self._handle_create_port_exception( context, port_data['id'], @@ -483,7 +483,7 @@ class NsxPluginV2(addr_pair_db.AllowedAddressPairsMixin, selected_lswitch['uuid'], lport['uuid']) except n_exc.NotFound: - LOG.debug(_("NSX Port %s already gone"), lport['uuid']) + LOG.debug("NSX Port %s already gone", lport['uuid']) def _nsx_delete_port(self, context, port_data): # FIXME(salvatore-orlando): On the NSX platform we do not really have @@ -498,15 +498,15 @@ class NsxPluginV2(addr_pair_db.AllowedAddressPairsMixin, nsx_switch_id, nsx_port_id = nsx_utils.get_nsx_switch_and_port_id( context.session, self.cluster, port_data['id']) if not nsx_port_id: - LOG.debug(_("Port '%s' was already deleted on NSX platform"), id) + LOG.debug("Port '%s' was already deleted on NSX platform", id) return # TODO(bgh): if this is a bridged network and the lswitch we just got # back will have zero ports after the delete we should garbage collect # the lswitch. try: switchlib.delete_port(self.cluster, nsx_switch_id, nsx_port_id) - LOG.debug(_("_nsx_delete_port completed for port %(port_id)s " - "on network %(net_id)s"), + LOG.debug("_nsx_delete_port completed for port %(port_id)s " + "on network %(net_id)s", {'port_id': port_data['id'], 'net_id': port_data['network_id']}) except n_exc.NotFound: @@ -571,9 +571,9 @@ class NsxPluginV2(addr_pair_db.AllowedAddressPairsMixin, nsx_db.add_neutron_nsx_port_mapping( context.session, port_data['id'], selected_lswitch['uuid'], ls_port['uuid']) - LOG.debug(_("_nsx_create_router_port completed for port " - "%(name)s on network %(network_id)s. The new " - "port id is %(id)s."), + LOG.debug("_nsx_create_router_port completed for port " + "%(name)s on network %(network_id)s. The new " + "port id is %(id)s.", port_data) except (api_exc.NsxApiException, n_exc.NeutronException): self._handle_create_port_exception( @@ -635,9 +635,9 @@ class NsxPluginV2(addr_pair_db.AllowedAddressPairsMixin, physical_network, ext_network[pnet.SEGMENTATION_ID]) - LOG.debug(_("_nsx_create_ext_gw_port completed on external network " - "%(ext_net_id)s, attached to router:%(router_id)s. " - "NSX port id is %(nsx_port_id)s"), + LOG.debug("_nsx_create_ext_gw_port completed on external network " + "%(ext_net_id)s, attached to router:%(router_id)s. " + "NSX port id is %(nsx_port_id)s", {'ext_net_id': port_data['network_id'], 'router_id': nsx_router_id, 'nsx_port_id': lr_port['uuid']}) @@ -676,8 +676,8 @@ class NsxPluginV2(addr_pair_db.AllowedAddressPairsMixin, raise nsx_exc.NsxPluginException( err_msg=_("Unable to update logical router" "on NSX Platform")) - LOG.debug(_("_nsx_delete_ext_gw_port completed on external network " - "%(ext_net_id)s, attached to NSX router:%(router_id)s"), + LOG.debug("_nsx_delete_ext_gw_port completed on external network " + "%(ext_net_id)s, attached to NSX router:%(router_id)s", {'ext_net_id': port_data['network_id'], 'router_id': nsx_router_id}) @@ -718,9 +718,9 @@ class NsxPluginV2(addr_pair_db.AllowedAddressPairsMixin, switchlib.delete_port(self.cluster, selected_lswitch['uuid'], lport['uuid']) - LOG.debug(_("_nsx_create_l2_gw_port completed for port %(name)s " - "on network %(network_id)s. The new port id " - "is %(id)s."), port_data) + LOG.debug("_nsx_create_l2_gw_port completed for port %(name)s " + "on network %(network_id)s. The new port id " + "is %(id)s.", port_data) def _nsx_create_fip_port(self, context, port_data): # As we do not create ports for floating IPs in NSX, @@ -846,7 +846,7 @@ class NsxPluginV2(addr_pair_db.AllowedAddressPairsMixin, ['lport_count'] < max_ports)].pop(0) except IndexError: # Too bad, no switch available - LOG.debug(_("No switch has available ports (%d checked)"), + LOG.debug("No switch has available ports (%d checked)", len(lswitches)) if allow_extra_lswitches: # The 'main' logical switch is either the only one available @@ -1145,8 +1145,8 @@ class NsxPluginV2(addr_pair_db.AllowedAddressPairsMixin, port_data['device_owner'], self._port_drivers['create']['default']) port_create_func(context, port_data) - LOG.debug(_("port created on NSX backend for tenant " - "%(tenant_id)s: (%(id)s)"), port_data) + LOG.debug("port created on NSX backend for tenant " + "%(tenant_id)s: (%(id)s)", port_data) except n_exc.NotFound: LOG.warning(_("Logical switch for network %s was not " "found in NSX."), port_data['network_id']) @@ -1247,7 +1247,7 @@ class NsxPluginV2(addr_pair_db.AllowedAddressPairsMixin, self._delete_port_queue_mapping(context, ret_port['id']) self._process_port_queue_mapping(context, ret_port, port_queue_id) - LOG.debug(_("Updating port: %s"), port) + LOG.debug("Updating port: %s", port) nsx_switch_id, nsx_port_id = nsx_utils.get_nsx_switch_and_port_id( context.session, self.cluster, id) # Convert Neutron security groups identifiers into NSX security @@ -1683,8 +1683,8 @@ class NsxPluginV2(addr_pair_db.AllowedAddressPairsMixin, # if needed. self.handle_router_metadata_access( context, router_id, interface=router_iface_info) - LOG.debug(_("Add_router_interface completed for subnet:%(subnet_id)s " - "and router:%(router_id)s"), + LOG.debug("Add_router_interface completed for subnet:%(subnet_id)s " + "and router:%(router_id)s", {'subnet_id': subnet_id, 'router_id': router_id}) return router_iface_info @@ -1974,7 +1974,7 @@ class NsxPluginV2(addr_pair_db.AllowedAddressPairsMixin, min_num_rules_expected=1) self._remove_floatingip_address(context, fip_db) except sa_exc.NoResultFound: - LOG.debug(_("The port '%s' is not associated with floating IPs"), + LOG.debug("The port '%s' is not associated with floating IPs", port_id) except n_exc.NotFound: LOG.warning(_("Nat rules not found in nsx for port: %s"), id) @@ -2141,9 +2141,9 @@ class NsxPluginV2(addr_pair_db.AllowedAddressPairsMixin, query.update({'status': device_status, 'nsx_id': nsx_res['uuid']}, synchronize_session=False) - LOG.debug(_("Neutron gateway device: %(neutron_id)s; " - "NSX transport node identifier: %(nsx_id)s; " - "Operational status: %(status)s."), + LOG.debug("Neutron gateway device: %(neutron_id)s; " + "NSX transport node identifier: %(nsx_id)s; " + "Operational status: %(status)s.", {'neutron_id': neutron_id, 'nsx_id': nsx_res['uuid'], 'status': device_status}) @@ -2179,9 +2179,9 @@ class NsxPluginV2(addr_pair_db.AllowedAddressPairsMixin, networkgw_db.NetworkGatewayDevice.id == neutron_id) query.update({'status': device_status}, synchronize_session=False) - LOG.debug(_("Neutron gateway device: %(neutron_id)s; " - "NSX transport node identifier: %(nsx_id)s; " - "Operational status: %(status)s."), + LOG.debug("Neutron gateway device: %(neutron_id)s; " + "NSX transport node identifier: %(nsx_id)s; " + "Operational status: %(status)s.", {'neutron_id': neutron_id, 'nsx_id': nsx_id, 'status': device_status}) diff --git a/neutron/plugins/vmware/plugins/service.py b/neutron/plugins/vmware/plugins/service.py index 1f5e503b61f..d7e32e2f22c 100644 --- a/neutron/plugins/vmware/plugins/service.py +++ b/neutron/plugins/vmware/plugins/service.py @@ -141,7 +141,7 @@ class NsxAdvancedPlugin(sr_db.ServiceRouter_mixin, return self._router_type[router_id] router = self._get_router(context, router_id) - LOG.debug(_("EDGE: router = %s"), router) + LOG.debug("EDGE: router = %s", router) if router['extra_attributes']['service_router']: router_type = ROUTER_TYPE_ADVANCED else: @@ -172,7 +172,7 @@ class NsxAdvancedPlugin(sr_db.ServiceRouter_mixin, # NOP for Edge because currently the port will be create internally # by VSM - LOG.debug(_("EDGE: _vcns_create_ext_gw_port")) + LOG.debug("EDGE: _vcns_create_ext_gw_port") def _vcns_delete_ext_gw_port(self, context, port_data): router_id = port_data['device_id'] @@ -181,7 +181,7 @@ class NsxAdvancedPlugin(sr_db.ServiceRouter_mixin, return # NOP for Edge - LOG.debug(_("EDGE: _vcns_delete_ext_gw_port")) + LOG.debug("EDGE: _vcns_delete_ext_gw_port") def _get_external_attachment_info(self, context, router): gw_port = router.gw_port @@ -336,7 +336,7 @@ class NsxAdvancedPlugin(sr_db.ServiceRouter_mixin, if new_ext_net_id != org_ext_net_id and orgnexthop: # network changed, need to remove default gateway before vnic # can be configured - LOG.debug(_("VCNS: delete default gateway %s"), orgnexthop) + LOG.debug("VCNS: delete default gateway %s", orgnexthop) self._vcns_update_static_routes(context, router=router, edge_id=binding['edge_id'], @@ -904,7 +904,7 @@ class NsxAdvancedPlugin(sr_db.ServiceRouter_mixin, self.vcns_driver.delete_firewall(context, edge_id) def create_firewall(self, context, firewall): - LOG.debug(_("create_firewall() called")) + LOG.debug("create_firewall() called") router_id = firewall['firewall'].get(vcns_const.ROUTER_ID) if not router_id: msg = _("router_id is not provided!") @@ -938,7 +938,7 @@ class NsxAdvancedPlugin(sr_db.ServiceRouter_mixin, return fw def update_firewall(self, context, id, firewall): - LOG.debug(_("update_firewall() called")) + LOG.debug("update_firewall() called") self._ensure_firewall_update_allowed(context, id) service_router_binding = self._get_resource_router_id_binding( context, firewall_db.Firewall, resource_id=id) @@ -964,7 +964,7 @@ class NsxAdvancedPlugin(sr_db.ServiceRouter_mixin, return fw def delete_firewall(self, context, id): - LOG.debug(_("delete_firewall() called")) + LOG.debug("delete_firewall() called") self._firewall_set_status( context, id, service_constants.PENDING_DELETE) service_router_binding = self._get_resource_router_id_binding( @@ -1000,7 +1000,7 @@ class NsxAdvancedPlugin(sr_db.ServiceRouter_mixin, return fws def update_firewall_rule(self, context, id, firewall_rule): - LOG.debug(_("update_firewall_rule() called")) + LOG.debug("update_firewall_rule() called") self._ensure_update_or_delete_firewall_rule(context, id) fwr_pre = self.get_firewall_rule(context, id) fwr = super(NsxAdvancedPlugin, self).update_firewall_rule( @@ -1026,7 +1026,7 @@ class NsxAdvancedPlugin(sr_db.ServiceRouter_mixin, return fwr def update_firewall_policy(self, context, id, firewall_policy): - LOG.debug(_("update_firewall_policy() called")) + LOG.debug("update_firewall_policy() called") self._ensure_firewall_policy_update_allowed(context, id) firewall_rules_pre = self._make_firewall_rule_list_by_policy_id( context, id) @@ -1053,7 +1053,7 @@ class NsxAdvancedPlugin(sr_db.ServiceRouter_mixin, return fwp def insert_rule(self, context, id, rule_info): - LOG.debug(_("insert_rule() called")) + LOG.debug("insert_rule() called") self._ensure_firewall_policy_update_allowed(context, id) fwp = super(NsxAdvancedPlugin, self).insert_rule( context, id, rule_info) @@ -1082,7 +1082,7 @@ class NsxAdvancedPlugin(sr_db.ServiceRouter_mixin, return fwp def remove_rule(self, context, id, rule_info): - LOG.debug(_("remove_rule() called")) + LOG.debug("remove_rule() called") self._ensure_firewall_policy_update_allowed(context, id) fwp = super(NsxAdvancedPlugin, self).remove_rule( context, id, rule_info) @@ -1220,7 +1220,7 @@ class NsxAdvancedPlugin(sr_db.ServiceRouter_mixin, self.vcns_driver.update_pool(context, edge_id, pool, members) def create_vip(self, context, vip): - LOG.debug(_("create_vip() called")) + LOG.debug("create_vip() called") router_id = vip['vip'].get(vcns_const.ROUTER_ID) if not router_id: msg = _("router_id is not provided!") @@ -1608,7 +1608,7 @@ class NsxAdvancedPlugin(sr_db.ServiceRouter_mixin, LOG.exception(msg) def create_vpnservice(self, context, vpnservice): - LOG.debug(_("create_vpnservice() called")) + LOG.debug("create_vpnservice() called") router_id = vpnservice['vpnservice'].get('router_id') if not self._is_advanced_service_router(context, router_id): msg = _("router_id:%s is not an advanced router!") % router_id @@ -1729,7 +1729,7 @@ class VcnsCallbacks(object): neutron_router_id = jobdata['neutron_router_id'] name = task.userdata['router_name'] if edge_id: - LOG.debug(_("Start deploying %(edge_id)s for router %(name)s"), { + LOG.debug("Start deploying %(edge_id)s for router %(name)s", { 'edge_id': edge_id, 'name': name}) vcns_db.update_vcns_router_binding( @@ -1756,10 +1756,10 @@ class VcnsCallbacks(object): LOG.exception(_("Router %s not found"), lrouter['uuid']) if task.status == tasks_const.TaskStatus.COMPLETED: - LOG.debug(_("Successfully deployed %(edge_id)s for " - "router %(name)s"), { - 'edge_id': task.userdata['edge_id'], - 'name': name}) + LOG.debug("Successfully deployed %(edge_id)s for " + "router %(name)s", { + 'edge_id': task.userdata['edge_id'], + 'name': name}) if (router_db and router_db['status'] == service_constants.PENDING_CREATE): router_db['status'] = service_constants.ACTIVE @@ -1772,7 +1772,7 @@ class VcnsCallbacks(object): context.session, neutron_router_id, status=service_constants.ACTIVE) else: - LOG.debug(_("Failed to deploy Edge for router %s"), name) + LOG.debug("Failed to deploy Edge for router %s", name) if router_db: router_db['status'] = service_constants.ERROR vcns_db.update_vcns_router_binding( @@ -1788,25 +1788,25 @@ class VcnsCallbacks(object): router_id) def interface_update_result(self, task): - LOG.debug(_("interface_update_result %d"), task.status) + LOG.debug("interface_update_result %d", task.status) def snat_create_result(self, task): - LOG.debug(_("snat_create_result %d"), task.status) + LOG.debug("snat_create_result %d", task.status) def snat_delete_result(self, task): - LOG.debug(_("snat_delete_result %d"), task.status) + LOG.debug("snat_delete_result %d", task.status) def dnat_create_result(self, task): - LOG.debug(_("dnat_create_result %d"), task.status) + LOG.debug("dnat_create_result %d", task.status) def dnat_delete_result(self, task): - LOG.debug(_("dnat_delete_result %d"), task.status) + LOG.debug("dnat_delete_result %d", task.status) def routes_update_result(self, task): - LOG.debug(_("routes_update_result %d"), task.status) + LOG.debug("routes_update_result %d", task.status) def nat_update_result(self, task): - LOG.debug(_("nat_update_result %d"), task.status) + LOG.debug("nat_update_result %d", task.status) def _process_base_create_lswitch_args(*args, **kwargs): diff --git a/neutron/plugins/vmware/vshield/edge_appliance_driver.py b/neutron/plugins/vmware/vshield/edge_appliance_driver.py index 5b71b097232..9ce708457bf 100644 --- a/neutron/plugins/vmware/vshield/edge_appliance_driver.py +++ b/neutron/plugins/vmware/vshield/edge_appliance_driver.py @@ -156,7 +156,7 @@ class EdgeApplianceDriver(object): def _update_interface(self, task): edge_id = task.userdata['edge_id'] config = task.userdata['config'] - LOG.debug(_("VCNS: start updating vnic %s"), config) + LOG.debug("VCNS: start updating vnic %s", config) try: self.vcns.update_interface(edge_id, config) except exceptions.VcnsApiException as e: @@ -175,7 +175,7 @@ class EdgeApplianceDriver(object): def update_interface(self, router_id, edge_id, index, network, address=None, netmask=None, secondary=None, jobdata=None): - LOG.debug(_("VCNS: update vnic %(index)d: %(addr)s %(netmask)s"), { + LOG.debug("VCNS: update vnic %(index)d: %(addr)s %(netmask)s", { 'index': index, 'addr': address, 'netmask': netmask}) if index == vcns_const.EXTERNAL_VNIC_INDEX: name = vcns_const.EXTERNAL_VNIC_NAME @@ -205,7 +205,7 @@ class EdgeApplianceDriver(object): def _deploy_edge(self, task): userdata = task.userdata name = userdata['router_name'] - LOG.debug(_("VCNS: start deploying edge %s"), name) + LOG.debug("VCNS: start deploying edge %s", name) request = userdata['request'] try: header = self.vcns.deploy_edge(request)[0] @@ -213,7 +213,7 @@ class EdgeApplianceDriver(object): job_id = objuri[objuri.rfind("/") + 1:] response = self.vcns.get_edge_id(job_id)[1] edge_id = response['edgeId'] - LOG.debug(_("VCNS: deploying edge %s"), edge_id) + LOG.debug("VCNS: deploying edge %s", edge_id) userdata['edge_id'] = edge_id status = constants.TaskStatus.PENDING except exceptions.VcnsApiException: @@ -253,7 +253,7 @@ class EdgeApplianceDriver(object): "Abort.") % edge_id LOG.exception(msg) status = constants.TaskStatus.ERROR - LOG.debug(_("VCNS: Edge %s status"), edge_id) + LOG.debug("VCNS: Edge %s status", edge_id) return status def _result_edge(self, task): @@ -267,14 +267,14 @@ class EdgeApplianceDriver(object): 'status': task.status }) else: - LOG.debug(_("VCNS: Edge %(edge_id)s deployed for " - "router %(name)s"), { - 'edge_id': edge_id, 'name': router_name - }) + LOG.debug("VCNS: Edge %(edge_id)s deployed for " + "router %(name)s", { + 'edge_id': edge_id, 'name': router_name + }) def _delete_edge(self, task): edge_id = task.userdata['edge_id'] - LOG.debug(_("VCNS: start destroying edge %s"), edge_id) + LOG.debug("VCNS: start destroying edge %s", edge_id) status = constants.TaskStatus.COMPLETED if edge_id: try: @@ -383,7 +383,7 @@ class EdgeApplianceDriver(object): # TODO(fank): use POST for optimization # return rule_id for future reference rule = task.userdata['rule'] - LOG.debug(_("VCNS: start creating nat rules: %s"), rule) + LOG.debug("VCNS: start creating nat rules: %s", rule) edge_id = task.userdata['edge_id'] nat = self.get_nat_config(edge_id) location = task.userdata['location'] @@ -407,7 +407,7 @@ class EdgeApplianceDriver(object): def create_snat_rule(self, router_id, edge_id, src, translated, jobdata=None, location=None): - LOG.debug(_("VCNS: create snat rule %(src)s/%(translated)s"), { + LOG.debug("VCNS: create snat rule %(src)s/%(translated)s", { 'src': src, 'translated': translated}) snat_rule = self._assemble_nat_rule("snat", src, translated) userdata = { @@ -430,7 +430,7 @@ class EdgeApplianceDriver(object): edge_id = task.userdata['edge_id'] address = task.userdata['address'] addrtype = task.userdata['addrtype'] - LOG.debug(_("VCNS: start deleting %(type)s rules: %(addr)s"), { + LOG.debug("VCNS: start deleting %(type)s rules: %(addr)s", { 'type': addrtype, 'addr': address}) nat = self.get_nat_config(edge_id) del nat['version'] @@ -448,7 +448,7 @@ class EdgeApplianceDriver(object): return status def delete_snat_rule(self, router_id, edge_id, src, jobdata=None): - LOG.debug(_("VCNS: delete snat rule %s"), src) + LOG.debug("VCNS: delete snat rule %s", src) userdata = { 'edge_id': edge_id, 'address': src, @@ -466,7 +466,7 @@ class EdgeApplianceDriver(object): jobdata=None, location=None): # TODO(fank): use POST for optimization # return rule_id for future reference - LOG.debug(_("VCNS: create dnat rule %(dst)s/%(translated)s"), { + LOG.debug("VCNS: create dnat rule %(dst)s/%(translated)s", { 'dst': dst, 'translated': translated}) dnat_rule = self._assemble_nat_rule( "dnat", dst, translated) @@ -487,7 +487,7 @@ class EdgeApplianceDriver(object): def delete_dnat_rule(self, router_id, edge_id, translated, jobdata=None): # TODO(fank): pass in rule_id for optimization - LOG.debug(_("VCNS: delete dnat rule %s"), translated) + LOG.debug("VCNS: delete dnat rule %s", translated) userdata = { 'edge_id': edge_id, 'address': translated, @@ -511,7 +511,7 @@ class EdgeApplianceDriver(object): return constants.TaskStatus.ABORT rules = task.userdata['rules'] - LOG.debug(_("VCNS: start updating nat rules: %s"), rules) + LOG.debug("VCNS: start updating nat rules: %s", rules) nat = { 'featureType': 'nat', @@ -532,10 +532,10 @@ class EdgeApplianceDriver(object): def update_nat_rules(self, router_id, edge_id, snats, dnats, jobdata=None): - LOG.debug(_("VCNS: update nat rule\n" - "SNAT:%(snat)s\n" - "DNAT:%(dnat)s\n"), { - 'snat': snats, 'dnat': dnats}) + LOG.debug("VCNS: update nat rule\n" + "SNAT:%(snat)s\n" + "DNAT:%(dnat)s\n", { + 'snat': snats, 'dnat': dnats}) nat_rules = [] for dnat in dnats: @@ -570,7 +570,7 @@ class EdgeApplianceDriver(object): return constants.TaskStatus.ABORT gateway = task.userdata['gateway'] routes = task.userdata['routes'] - LOG.debug(_("VCNS: start updating routes for %s"), edge_id) + LOG.debug("VCNS: start updating routes for %s", edge_id) static_routes = [] for route in routes: static_routes.append({ diff --git a/neutron/plugins/vmware/vshield/tasks/tasks.py b/neutron/plugins/vmware/vshield/tasks/tasks.py index 7037c430dd4..424736f71e6 100644 --- a/neutron/plugins/vmware/vshield/tasks/tasks.py +++ b/neutron/plugins/vmware/vshield/tasks/tasks.py @@ -191,7 +191,7 @@ class TaskManager(): LOG.exception(msg) status = constants.TaskStatus.ERROR - LOG.debug(_("Task %(task)s return %(status)s"), { + LOG.debug("Task %(task)s return %(status)s", { 'task': str(task), 'status': status}) @@ -210,7 +210,7 @@ class TaskManager(): 'cb': str(task._result_callback)} LOG.exception(msg) - LOG.debug(_("Task %(task)s return %(status)s"), + LOG.debug("Task %(task)s return %(status)s", {'task': str(task), 'status': task.status}) task._finished() diff --git a/neutron/plugins/vmware/vshield/vcns.py b/neutron/plugins/vmware/vshield/vcns.py index ec3923c3a68..6c2835ea231 100644 --- a/neutron/plugins/vmware/vshield/vcns.py +++ b/neutron/plugins/vmware/vshield/vcns.py @@ -49,7 +49,7 @@ class Vcns(object): password, 'json') def do_request(self, method, uri, params=None, format='json', **kwargs): - LOG.debug(_("VcnsApiHelper('%(method)s', '%(uri)s', '%(body)s')"), { + LOG.debug("VcnsApiHelper('%(method)s', '%(uri)s', '%(body)s')", { 'method': method, 'uri': uri, 'body': jsonutils.dumps(params)}) @@ -57,8 +57,8 @@ class Vcns(object): header, content = self.jsonapi_client.request(method, uri, params) else: header, content = self.xmlapi_client.request(method, uri, params) - LOG.debug(_("Header: '%s'"), header) - LOG.debug(_("Content: '%s'"), content) + LOG.debug("Header: '%s'", header) + LOG.debug("Content: '%s'", content) if content == '': return header, {} if kwargs.get('decode', True): From d5b90315d2ff647179fd91512377a7f21a57ef0a Mon Sep 17 00:00:00 2001 From: Jacek Swiderski Date: Wed, 6 Aug 2014 11:23:16 +0200 Subject: [PATCH 030/128] Do not assume order of body and tags elements This fixes the l2gateway unit test that breaks with a randomized PYTHONHASHSEED (see the bug report). The test assumed that the body dict from self._create_expected_req_body had elements (including contents of tags list) in a particular order. Found with PYTHONHASHSEED=2455351445. The fix ensures that body is in predictable order. Partial-bug: #1348818 Note: There are several other unrelated unit tests that also break with a randomized PYTHONHASHSEED, but they are not addressed here. They will be addressed in separate patches. Change-Id: I423b68aff58486c113d0e5c5f4726f9eabf6920e --- neutron/plugins/vmware/common/utils.py | 2 +- neutron/plugins/vmware/nsxlib/l2gateway.py | 4 ++-- neutron/tests/unit/vmware/nsxlib/test_l2gateway.py | 7 ++++--- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/neutron/plugins/vmware/common/utils.py b/neutron/plugins/vmware/common/utils.py index fb21e55e699..fd5f2fc2956 100644 --- a/neutron/plugins/vmware/common/utils.py +++ b/neutron/plugins/vmware/common/utils.py @@ -40,7 +40,7 @@ def get_tags(**kwargs): tags = ([dict(tag=value, scope=key) for key, value in kwargs.iteritems()]) tags.append({"tag": NEUTRON_VERSION, "scope": "quantum"}) - return tags + return sorted(tags) def device_id_to_vm_id(device_id, obfuscate=False): diff --git a/neutron/plugins/vmware/nsxlib/l2gateway.py b/neutron/plugins/vmware/nsxlib/l2gateway.py index f5a6e3053b7..0848ed591fb 100644 --- a/neutron/plugins/vmware/nsxlib/l2gateway.py +++ b/neutron/plugins/vmware/nsxlib/l2gateway.py @@ -149,7 +149,7 @@ def create_gateway_device(cluster, tenant_id, display_name, neutron_id, try: return nsxlib.do_request( HTTP_POST, nsxlib._build_uri_path(TRANSPORTNODE_RESOURCE), - jsonutils.dumps(body), cluster=cluster) + jsonutils.dumps(body, sort_keys=True), cluster=cluster) except api_exc.InvalidSecurityCertificate: raise nsx_exc.InvalidSecurityCertificate() @@ -166,7 +166,7 @@ def update_gateway_device(cluster, gateway_id, tenant_id, HTTP_PUT, nsxlib._build_uri_path(TRANSPORTNODE_RESOURCE, resource_id=gateway_id), - jsonutils.dumps(body), cluster=cluster) + jsonutils.dumps(body, sort_keys=True), cluster=cluster) except api_exc.InvalidSecurityCertificate: raise nsx_exc.InvalidSecurityCertificate() diff --git a/neutron/tests/unit/vmware/nsxlib/test_l2gateway.py b/neutron/tests/unit/vmware/nsxlib/test_l2gateway.py index e3b92f25f81..006ad38648d 100644 --- a/neutron/tests/unit/vmware/nsxlib/test_l2gateway.py +++ b/neutron/tests/unit/vmware/nsxlib/test_l2gateway.py @@ -165,6 +165,7 @@ class L2GatewayTestCase(base.NsxlibTestCase): "type": '%sConnector' % connector_type}], "admin_status_enabled": True } + body.get("tags").sort() if client_certificate: body["credential"] = { "client_certificate": { @@ -191,7 +192,7 @@ class L2GatewayTestCase(base.NsxlibTestCase): request_mock.assert_called_once_with( "POST", "/ws.v1/transport-node", - jsonutils.dumps(expected_req_body), + jsonutils.dumps(expected_req_body, sort_keys=True), cluster=self.fake_cluster) def test_update_gw_device(self): @@ -215,7 +216,7 @@ class L2GatewayTestCase(base.NsxlibTestCase): request_mock.assert_called_once_with( "PUT", "/ws.v1/transport-node/whatever", - jsonutils.dumps(expected_req_body), + jsonutils.dumps(expected_req_body, sort_keys=True), cluster=self.fake_cluster) def test_update_gw_device_without_certificate(self): @@ -238,7 +239,7 @@ class L2GatewayTestCase(base.NsxlibTestCase): request_mock.assert_called_once_with( "PUT", "/ws.v1/transport-node/whatever", - jsonutils.dumps(expected_req_body), + jsonutils.dumps(expected_req_body, sort_keys=True), cluster=self.fake_cluster) def test_get_gw_device_status(self): From 411836b5411411a6046043e0264aaa7b6f5760f0 Mon Sep 17 00:00:00 2001 From: Carl Baldwin Date: Fri, 19 Sep 2014 17:37:17 +0000 Subject: [PATCH 031/128] Remove RPC notification from transaction in create/update port Removing notifications to the L3 agent from within the transaction in create_port and update_port eliminates many lock wait timeouts in the dvr check queue job and in scale testing locally. Since this patch leaves context unused in _process_port_binding, the argument is removed from the method. Closes-Bug: #1371732 Change-Id: Ibd86611ad3e7eff085d769bdff777a5870f30c58 --- neutron/plugins/ml2/plugin.py | 43 ++++++++++++----- neutron/tests/unit/ml2/test_ml2_plugin.py | 59 +++++++++++++++++++++++ 2 files changed, 90 insertions(+), 12 deletions(-) diff --git a/neutron/plugins/ml2/plugin.py b/neutron/plugins/ml2/plugin.py index e6a8d9040ca..c1e1627b68b 100644 --- a/neutron/plugins/ml2/plugin.py +++ b/neutron/plugins/ml2/plugin.py @@ -159,7 +159,27 @@ class Ml2Plugin(db_base_plugin_v2.NeutronDbPluginV2, # TODO(rkukura): Implement filtering. return nets - def _process_port_binding(self, mech_context, context, attrs): + def _notify_l3_agent_new_port(self, context, port): + if not port: + return + + # Whenever a DVR serviceable port comes up on a + # node, it has to be communicated to the L3 Plugin + # and agent for creating the respective namespaces. + if (utils.is_dvr_serviced(port['device_owner'])): + l3plugin = manager.NeutronManager.get_service_plugins().get( + service_constants.L3_ROUTER_NAT) + if (utils.is_extension_supported( + l3plugin, const.L3_DISTRIBUTED_EXT_ALIAS)): + l3plugin.dvr_update_router_addvm(context, port) + + def _get_host_port_if_changed(self, mech_context, attrs): + binding = mech_context._binding + host = attrs and attrs.get(portbindings.HOST_ID) + if (attributes.is_attr_set(host) and binding.host != host): + return mech_context.current + + def _process_port_binding(self, mech_context, attrs): binding = mech_context._binding port = mech_context.current changes = False @@ -169,15 +189,6 @@ class Ml2Plugin(db_base_plugin_v2.NeutronDbPluginV2, binding.host != host): binding.host = host changes = True - # Whenever a DVR serviceable port comes up on a - # node, it has to be communicated to the L3 Plugin - # and agent for creating the respective namespaces. - if (utils.is_dvr_serviced(port['device_owner'])): - l3plugin = manager.NeutronManager.get_service_plugins().get( - service_constants.L3_ROUTER_NAT) - if (utils.is_extension_supported( - l3plugin, const.L3_DISTRIBUTED_EXT_ALIAS)): - l3plugin.dvr_update_router_addvm(context, port) vnic_type = attrs and attrs.get(portbindings.VNIC_TYPE) if (attributes.is_attr_set(vnic_type) and @@ -770,7 +781,8 @@ class Ml2Plugin(db_base_plugin_v2.NeutronDbPluginV2, binding = db.add_port_binding(session, result['id']) mech_context = driver_context.PortContext(self, context, result, network, binding) - self._process_port_binding(mech_context, context, attrs) + new_host_port = self._get_host_port_if_changed(mech_context, attrs) + self._process_port_binding(mech_context, attrs) result[addr_pair.ADDRESS_PAIRS] = ( self._process_create_allowed_address_pairs( @@ -780,6 +792,9 @@ class Ml2Plugin(db_base_plugin_v2.NeutronDbPluginV2, dhcp_opts) self.mechanism_manager.create_port_precommit(mech_context) + # Notification must be sent after the above transaction is complete + self._notify_l3_agent_new_port(context, new_host_port) + try: self.mechanism_manager.create_port_postcommit(mech_context) except ml2_exc.MechanismDriverError: @@ -834,10 +849,14 @@ class Ml2Plugin(db_base_plugin_v2.NeutronDbPluginV2, mech_context = driver_context.PortContext( self, context, updated_port, network, binding, original_port=original_port) + new_host_port = self._get_host_port_if_changed(mech_context, attrs) need_port_update_notify |= self._process_port_binding( - mech_context, context, attrs) + mech_context, attrs) self.mechanism_manager.update_port_precommit(mech_context) + # Notification must be sent after the above transaction is complete + self._notify_l3_agent_new_port(context, new_host_port) + # TODO(apech) - handle errors raised by update_port, potentially # by re-calling update_port with the previous attributes. For # now the error is propogated to the caller, which is expected to diff --git a/neutron/tests/unit/ml2/test_ml2_plugin.py b/neutron/tests/unit/ml2/test_ml2_plugin.py index ca0a061f946..1996979abdb 100644 --- a/neutron/tests/unit/ml2/test_ml2_plugin.py +++ b/neutron/tests/unit/ml2/test_ml2_plugin.py @@ -23,6 +23,7 @@ from neutron.common import constants from neutron.common import exceptions as exc from neutron.common import utils from neutron import context +from neutron.db import db_base_plugin_v2 as base_plugin from neutron.extensions import multiprovidernet as mpnet from neutron.extensions import portbindings from neutron.extensions import providernet as pnet @@ -36,6 +37,7 @@ from neutron.plugins.ml2 import driver_context from neutron.plugins.ml2.drivers import type_vlan from neutron.plugins.ml2 import models from neutron.plugins.ml2 import plugin as ml2_plugin +from neutron.tests import base from neutron.tests.unit import _test_extension_portbindings as test_bindings from neutron.tests.unit.ml2.drivers import mechanism_logger as mech_logger from neutron.tests.unit.ml2.drivers import mechanism_test as mech_test @@ -940,3 +942,60 @@ class TestFaultyMechansimDriver(Ml2PluginV2FaultyDriverTestCase): self.assertEqual(new_name, port['port']['name']) self._delete('ports', port['port']['id']) + + +class TestMl2PluginCreateUpdatePort(base.BaseTestCase): + def setUp(self): + super(TestMl2PluginCreateUpdatePort, self).setUp() + self.context = mock.MagicMock() + + def _ensure_transaction_is_closed(self): + transaction = self.context.session.begin(subtransactions=True) + enter = transaction.__enter__.call_count + exit = transaction.__exit__.call_count + self.assertEqual(enter, exit) + + def _create_plugin_for_create_update_port(self, new_host_port): + plugin = ml2_plugin.Ml2Plugin() + plugin.extension_manager = mock.Mock() + plugin.type_manager = mock.Mock() + plugin.mechanism_manager = mock.Mock() + plugin.notifier = mock.Mock() + plugin._get_host_port_if_changed = mock.Mock( + return_value=new_host_port) + + plugin._notify_l3_agent_new_port = mock.Mock() + plugin._notify_l3_agent_new_port.side_effect = ( + lambda c, p: self._ensure_transaction_is_closed()) + + return plugin + + def test_create_port_rpc_outside_transaction(self): + with contextlib.nested( + mock.patch.object(ml2_plugin.Ml2Plugin, '__init__'), + mock.patch.object(base_plugin.NeutronDbPluginV2, 'create_port'), + ) as (init, super_create_port): + init.return_value = None + + new_host_port = mock.Mock() + plugin = self._create_plugin_for_create_update_port(new_host_port) + + plugin.create_port(self.context, mock.MagicMock()) + + plugin._notify_l3_agent_new_port.assert_called_once_with( + self.context, new_host_port) + + def test_update_port_rpc_outside_transaction(self): + with contextlib.nested( + mock.patch.object(ml2_plugin.Ml2Plugin, '__init__'), + mock.patch.object(base_plugin.NeutronDbPluginV2, 'update_port'), + ) as (init, super_update_port): + init.return_value = None + + new_host_port = mock.Mock() + plugin = self._create_plugin_for_create_update_port(new_host_port) + + plugin.update_port(self.context, 'fake_id', mock.MagicMock()) + + plugin._notify_l3_agent_new_port.assert_called_once_with( + self.context, new_host_port) From 4478eee9e55193746b43ad5158be5fee29aef8a3 Mon Sep 17 00:00:00 2001 From: Brian Haley Date: Wed, 17 Sep 2014 21:48:53 -0400 Subject: [PATCH 032/128] Do not lookup l3-agent for floating IP if host=None, dvr issue If a floating IP has been associated with a port, but the port has not been associated with an instance, attempting to lookup the l3-agent hosting it will cause an AgentNotFoundByTypeHost exception. Just skip it and go onto the next one. Change-Id: If3df9770fa9e2d2eada932ee5f243d3458bf7261 Closes-Bug: #1370795 --- neutron/db/l3_dvr_db.py | 3 ++ neutron/tests/unit/db/test_l3_dvr_db.py | 49 +++++++++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/neutron/db/l3_dvr_db.py b/neutron/db/l3_dvr_db.py index 69561719263..9093c42ce66 100644 --- a/neutron/db/l3_dvr_db.py +++ b/neutron/db/l3_dvr_db.py @@ -294,6 +294,9 @@ class L3_NAT_with_dvr_db_mixin(l3_db.L3_NAT_db_mixin, floating_ip['host'] = self.get_vm_port_hostid( context, floating_ip['port_id']) LOG.debug("Floating IP host: %s", floating_ip['host']) + # if no VM there won't be an agent assigned + if not floating_ip['host']: + continue fip_agent = self._get_agent_by_type_and_host( context, l3_const.AGENT_TYPE_L3, floating_ip['host']) diff --git a/neutron/tests/unit/db/test_l3_dvr_db.py b/neutron/tests/unit/db/test_l3_dvr_db.py index be27ce9ca40..44da11c29c4 100644 --- a/neutron/tests/unit/db/test_l3_dvr_db.py +++ b/neutron/tests/unit/db/test_l3_dvr_db.py @@ -231,3 +231,52 @@ class L3DvrTestCase(testlib_api.SqlTestCase): } mock_fip_clear = self._delete_floatingip_test_setup(floatingip) self.assertTrue(mock_fip_clear.called) + + def _floatingip_on_port_test_setup(self, hostid): + router = {'id': 'foo_router_id', 'distributed': True} + floatingip = { + 'id': _uuid(), + 'port_id': _uuid(), + 'router_id': 'foo_router_id' + } + routers = { + 'foo_router_id': router + } + fipagent = { + 'id': _uuid() + } + + # NOTE: mock.patch is not needed here since self.mixin is created fresh + # for each test. It doesn't work with some methods since the mixin is + # tested in isolation (e.g. _get_agent_by_type_and_host). + self.mixin.get_vm_port_hostid = mock.Mock(return_value=hostid) + self.mixin._get_agent_by_type_and_host = mock.Mock( + return_value=fipagent) + self.mixin.get_fip_sync_interfaces = mock.Mock( + return_value='fip_interface') + + self.mixin._process_floating_ips(self.ctx, routers, [floatingip]) + return (router, floatingip) + + def test_floatingip_on_port_no_host(self): + router, fip = self._floatingip_on_port_test_setup(None) + + self.assertTrue(self.mixin.get_vm_port_hostid.called) + self.assertFalse(self.mixin._get_agent_by_type_and_host.called) + self.assertFalse(self.mixin.get_fip_sync_interfaces.called) + + self.assertNotIn(l3_const.FLOATINGIP_KEY, router) + self.assertNotIn(l3_const.FLOATINGIP_AGENT_INTF_KEY, router) + + def test_floatingip_on_port_with_host(self): + router, fip = self._floatingip_on_port_test_setup(_uuid()) + + self.assertTrue(self.mixin.get_vm_port_hostid.called) + self.assertTrue(self.mixin._get_agent_by_type_and_host.called) + self.assertTrue(self.mixin.get_fip_sync_interfaces.called) + + self.assertIn(l3_const.FLOATINGIP_KEY, router) + self.assertIn(l3_const.FLOATINGIP_AGENT_INTF_KEY, router) + self.assertIn(fip, router[l3_const.FLOATINGIP_KEY]) + self.assertIn('fip_interface', + router[l3_const.FLOATINGIP_AGENT_INTF_KEY]) From 966645538395079b5337b5ed30d597112279283c Mon Sep 17 00:00:00 2001 From: Yong Sheng Gong Date: Mon, 30 Jun 2014 15:01:17 +0800 Subject: [PATCH 033/128] Deletes floating ip related connection states When a floating ip is dissociated with a port, the current connection with the floating ip is still working. This patch will clear the connection state and cut off the connection immediately. Since conntrack -D will return 1, which is not an error code, so add extra_ok_codes argument to execute methods. Change-Id: Ia9bd7ae243a0859dcb97e2fa939f7d16f9c2456c Closes-Bug: 1334926 --- etc/neutron/rootwrap.d/l3.filters | 3 ++ neutron/agent/l3_agent.py | 3 ++ neutron/agent/linux/interface.py | 41 +++++++++++++++++++ neutron/agent/linux/ip_lib.py | 5 ++- neutron/agent/linux/utils.py | 7 +++- neutron/tests/unit/test_l3_agent.py | 4 ++ neutron/tests/unit/test_linux_dhcp.py | 3 +- .../tests/unit/test_linux_external_process.py | 3 +- neutron/tests/unit/test_linux_ip_lib.py | 10 +++-- 9 files changed, 70 insertions(+), 9 deletions(-) diff --git a/etc/neutron/rootwrap.d/l3.filters b/etc/neutron/rootwrap.d/l3.filters index 65631698277..9a3031822a5 100644 --- a/etc/neutron/rootwrap.d/l3.filters +++ b/etc/neutron/rootwrap.d/l3.filters @@ -46,3 +46,6 @@ ip6tables-restore: CommandFilter, ip6tables-restore, root # Keepalived keepalived: CommandFilter, keepalived, root kill_keepalived: KillFilter, root, /usr/sbin/keepalived, -HUP, -15, -9 + +# l3 agent to delete floatingip's conntrack state +conntrack: CommandFilter, conntrack, root diff --git a/neutron/agent/l3_agent.py b/neutron/agent/l3_agent.py index 84953bc2e22..1dd673f3a3e 100644 --- a/neutron/agent/l3_agent.py +++ b/neutron/agent/l3_agent.py @@ -1115,6 +1115,9 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback, else: net = netaddr.IPNetwork(ip_cidr) device.addr.delete(net.version, ip_cidr) + self.driver.delete_conntrack_state(root_helper=self.root_helper, + namespace=ri.ns_name, + ip=ip_cidr) if ri.router['distributed']: self.floating_ip_removed_dist(ri, ip_cidr) diff --git a/neutron/agent/linux/interface.py b/neutron/agent/linux/interface.py index 77b8365c4b3..7613db41053 100644 --- a/neutron/agent/linux/interface.py +++ b/neutron/agent/linux/interface.py @@ -25,6 +25,7 @@ from neutron.agent.linux import ovs_lib from neutron.agent.linux import utils from neutron.common import exceptions from neutron.extensions import flavor +from neutron.openstack.common.gettextutils import _LE from neutron.openstack.common import importutils from neutron.openstack.common import log as logging @@ -110,6 +111,9 @@ class LinuxInterfaceDriver(object): for ip_cidr, ip_version in previous.items(): if ip_cidr not in preserve_ips: device.addr.delete(ip_version, ip_cidr) + self.delete_conntrack_state(root_helper=self.root_helper, + namespace=namespace, + ip=ip_cidr) if gateway: device.route.add_gateway(gateway) @@ -121,6 +125,43 @@ class LinuxInterfaceDriver(object): for route in existing_onlink_routes - new_onlink_routes: device.route.delete_onlink_route(route) + def delete_conntrack_state(self, root_helper, namespace, ip): + """Delete conntrack state associated with an IP address. + + This terminates any active connections through an IP. Call this soon + after removing the IP address from an interface so that new connections + cannot be created before the IP address is gone. + + root_helper: root_helper to gain root access to call conntrack + namespace: the name of the namespace where the IP has been configured + ip: the IP address for which state should be removed. This can be + passed as a string with or without /NN. A netaddr.IPAddress or + netaddr.Network representing the IP address can also be passed. + """ + ip_str = str(netaddr.IPNetwork(ip).ip) + ip_wrapper = ip_lib.IPWrapper(root_helper, namespace=namespace) + + # Delete conntrack state for ingress traffic + # If 0 flow entries have been deleted + # conntrack -D will return 1 + try: + ip_wrapper.netns.execute(["conntrack", "-D", "-d", ip_str], + check_exit_code=True, + extra_ok_codes=[1]) + + except RuntimeError: + LOG.exception(_LE("Failed deleting ingress connection state of" + " floatingip %s"), ip_str) + + # Delete conntrack state for egress traffic + try: + ip_wrapper.netns.execute(["conntrack", "-D", "-q", ip_str], + check_exit_code=True, + extra_ok_codes=[1]) + except RuntimeError: + LOG.exception(_LE("Failed deleting egress connection state of" + " floatingip %s"), ip_str) + def check_bridge_exists(self, bridge): if not ip_lib.device_exists(bridge): raise exceptions.BridgeDoesNotExist(bridge=bridge) diff --git a/neutron/agent/linux/ip_lib.py b/neutron/agent/linux/ip_lib.py index f085b4ded87..1d32a5497f8 100644 --- a/neutron/agent/linux/ip_lib.py +++ b/neutron/agent/linux/ip_lib.py @@ -532,7 +532,8 @@ class IpNetnsCommand(IpCommandBase): def delete(self, name): self._as_root('delete', name, use_root_namespace=True) - def execute(self, cmds, addl_env={}, check_exit_code=True): + def execute(self, cmds, addl_env={}, check_exit_code=True, + extra_ok_codes=None): ns_params = [] if self._parent.namespace: if not self._parent.root_helper: @@ -546,7 +547,7 @@ class IpNetnsCommand(IpCommandBase): return utils.execute( ns_params + env_params + list(cmds), root_helper=self._parent.root_helper, - check_exit_code=check_exit_code) + check_exit_code=check_exit_code, extra_ok_codes=extra_ok_codes) def exists(self, name): output = self._parent._execute('o', 'netns', ['list']) diff --git a/neutron/agent/linux/utils.py b/neutron/agent/linux/utils.py index e82a0d1496c..e0a66f843ca 100644 --- a/neutron/agent/linux/utils.py +++ b/neutron/agent/linux/utils.py @@ -58,7 +58,8 @@ def create_process(cmd, root_helper=None, addl_env=None): def execute(cmd, root_helper=None, process_input=None, addl_env=None, - check_exit_code=True, return_stderr=False, log_fail_as_error=True): + check_exit_code=True, return_stderr=False, log_fail_as_error=True, + extra_ok_codes=None): try: obj, cmd = create_process(cmd, root_helper=root_helper, addl_env=addl_env) @@ -70,6 +71,10 @@ def execute(cmd, root_helper=None, process_input=None, addl_env=None, "Stderr: %(stderr)r") % {'cmd': cmd, 'code': obj.returncode, 'stdout': _stdout, 'stderr': _stderr} + extra_ok_codes = extra_ok_codes or [] + if obj.returncode and obj.returncode in extra_ok_codes: + obj.returncode = None + if obj.returncode and log_fail_as_error: LOG.error(m) else: diff --git a/neutron/tests/unit/test_l3_agent.py b/neutron/tests/unit/test_l3_agent.py index 0be506e7ce6..8c0d0256f9f 100644 --- a/neutron/tests/unit/test_l3_agent.py +++ b/neutron/tests/unit/test_l3_agent.py @@ -1153,6 +1153,10 @@ vrrp_instance VR_1 { ri, {'id': _uuid()}) self.assertEqual({}, fip_statuses) device.addr.delete.assert_called_once_with(4, '15.1.2.3/32') + self.mock_driver.delete_conntrack_state.assert_called_once_with( + root_helper=self.conf.root_helper, + namespace=ri.ns_name, + ip='15.1.2.3/32') def test_process_router_floating_ip_nat_rules_remove(self): ri = mock.MagicMock() diff --git a/neutron/tests/unit/test_linux_dhcp.py b/neutron/tests/unit/test_linux_dhcp.py index f6f5fc6a23a..b3090e1b575 100644 --- a/neutron/tests/unit/test_linux_dhcp.py +++ b/neutron/tests/unit/test_linux_dhcp.py @@ -798,7 +798,8 @@ class TestDnsmasq(TestBase): self.assertTrue(mocks['_output_opts_file'].called) self.execute.assert_called_once_with(expected, root_helper='sudo', - check_exit_code=True) + check_exit_code=True, + extra_ok_codes=None) def test_spawn(self): self._test_spawn(['--conf-file=', '--domain=openstacklocal']) diff --git a/neutron/tests/unit/test_linux_external_process.py b/neutron/tests/unit/test_linux_external_process.py index 85c24544a24..88f4bc075bc 100644 --- a/neutron/tests/unit/test_linux_external_process.py +++ b/neutron/tests/unit/test_linux_external_process.py @@ -41,7 +41,8 @@ class TestProcessManager(base.BaseTestCase): name.assert_called_once_with(ensure_pids_dir=True) self.execute.assert_called_once_with(['the', 'cmd'], root_helper='sudo', - check_exit_code=True) + check_exit_code=True, + extra_ok_codes=None) def test_enable_with_namespace(self): callback = mock.Mock() diff --git a/neutron/tests/unit/test_linux_ip_lib.py b/neutron/tests/unit/test_linux_ip_lib.py index 6c20aa6d743..2b9486d3e75 100644 --- a/neutron/tests/unit/test_linux_ip_lib.py +++ b/neutron/tests/unit/test_linux_ip_lib.py @@ -792,7 +792,7 @@ class TestIpNetnsCommand(TestIPCmdBase): execute.assert_called_once_with( ['ip', 'netns', 'exec', 'ns', 'sysctl', '-w', 'net.ipv4.conf.all.promote_secondaries=1'], - root_helper='sudo', check_exit_code=True) + root_helper='sudo', check_exit_code=True, extra_ok_codes=None) def test_delete_namespace(self): with mock.patch('neutron.agent.linux.utils.execute'): @@ -830,7 +830,8 @@ class TestIpNetnsCommand(TestIPCmdBase): execute.assert_called_once_with(['ip', 'netns', 'exec', 'ns', 'ip', 'link', 'list'], root_helper='sudo', - check_exit_code=True) + check_exit_code=True, + extra_ok_codes=None) def test_execute_env_var_prepend(self): self.parent.namespace = 'ns' @@ -841,7 +842,7 @@ class TestIpNetnsCommand(TestIPCmdBase): ['ip', 'netns', 'exec', 'ns', 'env'] + ['%s=%s' % (k, v) for k, v in env.items()] + ['ip', 'link', 'list'], - root_helper='sudo', check_exit_code=True) + root_helper='sudo', check_exit_code=True, extra_ok_codes=None) def test_execute_nosudo_with_no_namespace(self): with mock.patch('neutron.agent.linux.utils.execute') as execute: @@ -850,7 +851,8 @@ class TestIpNetnsCommand(TestIPCmdBase): self.netns_cmd.execute(['test']) execute.assert_called_once_with(['test'], root_helper=None, - check_exit_code=True) + check_exit_code=True, + extra_ok_codes=None) class TestDeviceExists(base.BaseTestCase): From 55f6a8ac5d234f004ef06add87d16284e9f048d3 Mon Sep 17 00:00:00 2001 From: shihanzhang Date: Mon, 22 Sep 2014 17:28:06 +0800 Subject: [PATCH 034/128] Fix KeyError when getting secgroup info for ports The patch fixes a regression introduced with secgroup rpc refactor by handling the case when security group contains rules for only IPv4 or IPv6. Change-Id: I02b174757bfc796a81cdb482c55ba7f9e954131d Closes-bug: #1372337 --- neutron/db/securitygroups_rpc_base.py | 3 +- .../tests/unit/test_security_groups_rpc.py | 46 +++++++++++++++++++ 2 files changed, 48 insertions(+), 1 deletion(-) diff --git a/neutron/db/securitygroups_rpc_base.py b/neutron/db/securitygroups_rpc_base.py index 8f87a8c804f..1dda6bb4698 100644 --- a/neutron/db/securitygroups_rpc_base.py +++ b/neutron/db/securitygroups_rpc_base.py @@ -206,7 +206,8 @@ class SecurityGroupServerRpcMixin(sg_db.SecurityGroupDbMixin): for sg_id, member_ips in ips.items(): for ip in member_ips: ethertype = 'IPv%d' % netaddr.IPAddress(ip).version - if ip not in sg_info['sg_member_ips'][sg_id][ethertype]: + if (ethertype in sg_info['sg_member_ips'][sg_id] + and ip not in sg_info['sg_member_ips'][sg_id][ethertype]): sg_info['sg_member_ips'][sg_id][ethertype].append(ip) return sg_info diff --git a/neutron/tests/unit/test_security_groups_rpc.py b/neutron/tests/unit/test_security_groups_rpc.py index 5a1d5dc97ed..7f20c7d9ea3 100644 --- a/neutron/tests/unit/test_security_groups_rpc.py +++ b/neutron/tests/unit/test_security_groups_rpc.py @@ -544,6 +544,52 @@ class SGServerRpcCallBackTestCase(test_sg.SecurityGroupDBTestCase): expected) self._delete('ports', port_id1) + def test_security_group_info_for_devices_only_ipv6_rule(self): + with self.network() as n: + with contextlib.nested(self.subnet(n), + self.security_group()) as (subnet_v4, + sg1): + sg1_id = sg1['security_group']['id'] + rule1 = self._build_security_group_rule( + sg1_id, + 'ingress', const.PROTO_NAME_TCP, '22', + '22', remote_group_id=sg1_id, + ethertype=const.IPv6) + rules = { + 'security_group_rules': [rule1['security_group_rule']]} + self._make_security_group_rule(self.fmt, rules) + + res1 = self._create_port( + self.fmt, n['network']['id'], + security_groups=[sg1_id]) + ports_rest1 = self.deserialize(self.fmt, res1) + port_id1 = ports_rest1['port']['id'] + self.rpc.devices = {port_id1: ports_rest1['port']} + devices = [port_id1, 'no_exist_device'] + + ctx = context.get_admin_context() + ports_rpc = self.rpc.security_group_info_for_devices( + ctx, devices=devices) + expected = { + 'security_groups': {sg1_id: [ + {'direction': 'egress', 'ethertype': const.IPv4}, + {'direction': 'egress', 'ethertype': const.IPv6}, + {'direction': u'ingress', + 'protocol': const.PROTO_NAME_TCP, + 'ethertype': const.IPv6, + 'port_range_max': 22, 'port_range_min': 22, + 'remote_group_id': sg1_id} + ]}, + 'sg_member_ips': {sg1_id: { + 'IPv6': [], + }} + } + self.assertEqual(expected['security_groups'], + ports_rpc['security_groups']) + self.assertEqual(expected['sg_member_ips'][sg1_id]['IPv6'], + ports_rpc['sg_member_ips'][sg1_id]['IPv6']) + self._delete('ports', port_id1) + def test_security_group_ra_rules_for_devices_ipv6_gateway_global(self): fake_prefix = FAKE_PREFIX[const.IPv6] fake_gateway = FAKE_IP['IPv6_GLOBAL'] From 3ca85460a178a18dea60399fd369ed84b17721dc Mon Sep 17 00:00:00 2001 From: Elena Ezhova Date: Mon, 25 Aug 2014 18:44:32 +0400 Subject: [PATCH 035/128] Fix quota limit range validator In Quota model limit is defined with Integer type which in case of MySQL and PostgreSQL is always stored in 4 bytes. At the same time, the current validator checks that the value does not exceed sys.maxsize which depends on whether the system is 32-bit or 64-bit based. In SQLite Integer can be stored in 1, 2, 3, 4, 6, or 8 bytes depending on the magnitude of the value. Nevertheless, assume that it can not exceed 4 bytes for consistency. Limited the upper bound of the validator with 2**31 - 1. Added a unit test. Closes-Bug: #1338479 Change-Id: Icefa2fc228e4255a022d586cab4590607953d1ee --- neutron/common/constants.py | 5 +++++ neutron/extensions/quotasv2.py | 5 ++--- neutron/tests/unit/test_quota_ext.py | 12 ++++++++++++ 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/neutron/common/constants.py b/neutron/common/constants.py index 158e34245ee..59066903b11 100644 --- a/neutron/common/constants.py +++ b/neutron/common/constants.py @@ -152,3 +152,8 @@ DEVICE_NAME_MAX_LEN = 15 TAP_DEVICE_PREFIX = 'tap' ATTRIBUTES_TO_UPDATE = 'attributes_to_update' + +# Maximum value integer can take in MySQL and PostgreSQL +# In SQLite integer can be stored in 1, 2, 3, 4, 6, or 8 bytes, +# but here it will be limited by this value for consistency. +DB_INTEGER_MAX_VALUE = 2 ** 31 - 1 diff --git a/neutron/extensions/quotasv2.py b/neutron/extensions/quotasv2.py index 4fa9bf28056..19fa85dbff2 100644 --- a/neutron/extensions/quotasv2.py +++ b/neutron/extensions/quotasv2.py @@ -13,8 +13,6 @@ # License for the specific language governing permissions and limitations # under the License. -import sys - from oslo.config import cfg import webob @@ -22,6 +20,7 @@ from neutron.api import extensions from neutron.api.v2 import attributes from neutron.api.v2 import base from neutron.api.v2 import resource +from neutron.common import constants as const from neutron.common import exceptions as n_exc from neutron import manager from neutron.openstack.common import importutils @@ -55,7 +54,7 @@ class QuotaSetsController(wsgi.Controller): 'allow_post': False, 'allow_put': True, 'convert_to': attributes.convert_to_int, - 'validate': {'type:range': [-1, sys.maxsize]}, + 'validate': {'type:range': [-1, const.DB_INTEGER_MAX_VALUE]}, 'is_visible': True} self._update_extended_attributes = False diff --git a/neutron/tests/unit/test_quota_ext.py b/neutron/tests/unit/test_quota_ext.py index 262fb044115..d330b5f67d9 100644 --- a/neutron/tests/unit/test_quota_ext.py +++ b/neutron/tests/unit/test_quota_ext.py @@ -18,11 +18,13 @@ import sys import mock from oslo.config import cfg import testtools +from webob import exc import webtest from neutron.api import extensions from neutron.api.v2 import attributes from neutron.common import config +from neutron.common import constants from neutron.common import exceptions from neutron import context from neutron.db import quota_db @@ -188,6 +190,16 @@ class QuotaExtensionDbTestCase(QuotaExtensionTestCase): expect_errors=True) self.assertEqual(400, res.status_int) + def test_update_quotas_with_out_of_range_integer_returns_400(self): + tenant_id = 'tenant_id1' + env = {'neutron.context': context.Context('', tenant_id, + is_admin=True)} + quotas = {'quota': {'network': constants.DB_INTEGER_MAX_VALUE + 1}} + res = self.api.put(_get_path('quotas', id=tenant_id, fmt=self.fmt), + self.serialize(quotas), extra_environ=env, + expect_errors=True) + self.assertEqual(exc.HTTPBadRequest.code, res.status_int) + def test_update_quotas_to_unlimited(self): tenant_id = 'tenant_id1' env = {'neutron.context': context.Context('', tenant_id, From 5be55ac161adfec9085121fe59ea3bf59daa92cf Mon Sep 17 00:00:00 2001 From: Michael Smith Date: Wed, 24 Sep 2014 10:20:46 -0700 Subject: [PATCH 036/128] fix dvr snat bindings for external-gw-clear When router_gateway_clear happens, the schedule_router calls the unbind_snat_servicenode in the plugin. This will clear the agent binding from the binding table. But the l3-agent was expecting the ex_gw_port binding to be present. The agent needs to check its cache of the router['gw_host_port'] value now. Change-Id: I051fb97d802b0508b30683a33673b85f5ab24000 Closes-bug: #1373524 --- neutron/agent/l3_agent.py | 2 +- neutron/tests/unit/test_l3_agent.py | 101 ++++++++++++++++++---------- 2 files changed, 65 insertions(+), 38 deletions(-) diff --git a/neutron/agent/l3_agent.py b/neutron/agent/l3_agent.py index 1dd673f3a3e..a8318580079 100644 --- a/neutron/agent/l3_agent.py +++ b/neutron/agent/l3_agent.py @@ -1387,7 +1387,7 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback, self._snat_redirect_remove(ri, p, internal_interface) if self.conf.agent_mode == 'dvr_snat' and ( - ex_gw_port['binding:host_id'] == self.host): + ri.router['gw_port_host'] == self.host): ns_name = self.get_snat_ns_name(ri.router['id']) else: # not hosting agent - no work to do diff --git a/neutron/tests/unit/test_l3_agent.py b/neutron/tests/unit/test_l3_agent.py index 8c0d0256f9f..55ee9876f3a 100644 --- a/neutron/tests/unit/test_l3_agent.py +++ b/neutron/tests/unit/test_l3_agent.py @@ -376,6 +376,27 @@ class TestBasicRouterOperations(base.BaseTestCase): 'neutron.openstack.common.loopingcall.FixedIntervalLoopingCall') self.looping_call_p.start() + self.snat_ports = [{'subnet': {'cidr': '152.2.0.0/16', + 'gateway_ip': '152.2.0.1', + 'id': _uuid()}, + 'network_id': _uuid(), + 'device_owner': 'network:router_centralized_snat', + 'ip_cidr': '152.2.0.13/16', + 'mac_address': 'fa:16:3e:80:8d:80', + 'fixed_ips': [{'subnet_id': _uuid(), + 'ip_address': '152.2.0.13'}], + 'id': _uuid(), 'device_id': _uuid()}, + {'subnet': {'cidr': '152.10.0.0/16', + 'gateway_ip': '152.10.0.1', + 'id': _uuid()}, + 'network_id': _uuid(), + 'device_owner': 'network:router_centralized_snat', + 'ip_cidr': '152.10.0.13/16', + 'mac_address': 'fa:16:3e:80:8d:80', + 'fixed_ips': [{'subnet_id': _uuid(), + 'ip_address': '152.10.0.13'}], + 'id': _uuid(), 'device_id': _uuid()}] + def _prepare_internal_network_data(self): port_id = _uuid() router_id = _uuid() @@ -497,11 +518,17 @@ class TestBasicRouterOperations(base.BaseTestCase): def test_agent_remove_internal_network(self): self._test_internal_network_action('remove') - def _test_external_gateway_action(self, action): - router = prepare_router_data(num_internal_ports=2) + def _test_external_gateway_action(self, action, router): ri = l3_agent.RouterInfo(router['id'], self.conf.root_helper, self.conf.use_namespaces, router=router) agent = l3_agent.L3NATAgent(HOSTNAME, self.conf) + # Special setup for dvr routers + if router.get('distributed'): + agent.conf.agent_mode = 'dvr_snat' + agent.host = HOSTNAME + agent._create_dvr_gateway = mock.Mock() + agent.get_snat_interfaces = mock.Mock(return_value=self.snat_ports) + ex_gw_port = {'fixed_ips': [{'ip_address': '20.0.0.30', 'subnet_id': _uuid()}], 'subnet': {'gateway_ip': '20.0.0.1'}, @@ -520,17 +547,23 @@ class TestBasicRouterOperations(base.BaseTestCase): 'port_id': _uuid()}]} router[l3_constants.FLOATINGIP_KEY] = fake_fip['floatingips'] agent.external_gateway_added(ri, ex_gw_port, interface_name) - self.assertEqual(self.mock_driver.plug.call_count, 1) - self.assertEqual(self.mock_driver.init_l3.call_count, 1) - self.send_arp.assert_called_once_with(ri.ns_name, interface_name, - '20.0.0.30') - kwargs = {'preserve_ips': ['192.168.1.34/32'], - 'namespace': 'qrouter-' + router['id'], - 'gateway': '20.0.0.1', - 'extra_subnets': [{'cidr': '172.16.0.0/24'}]} - self.mock_driver.init_l3.assert_called_with(interface_name, - ['20.0.0.30/24'], - **kwargs) + if not router.get('distributed'): + self.assertEqual(self.mock_driver.plug.call_count, 1) + self.assertEqual(self.mock_driver.init_l3.call_count, 1) + self.send_arp.assert_called_once_with(ri.ns_name, + interface_name, + '20.0.0.30') + kwargs = {'preserve_ips': ['192.168.1.34/32'], + 'namespace': 'qrouter-' + router['id'], + 'gateway': '20.0.0.1', + 'extra_subnets': [{'cidr': '172.16.0.0/24'}]} + self.mock_driver.init_l3.assert_called_with(interface_name, + ['20.0.0.30/24'], + **kwargs) + else: + agent._create_dvr_gateway.assert_called_once_with( + ri, ex_gw_port, interface_name, + self.snat_ports) elif action == 'remove': self.device_exists.return_value = True @@ -614,7 +647,14 @@ class TestBasicRouterOperations(base.BaseTestCase): 'dvr_snat', 1) def test_agent_add_external_gateway(self): - self._test_external_gateway_action('add') + router = prepare_router_data(num_internal_ports=2) + self._test_external_gateway_action('add', router) + + def test_agent_add_external_gateway_dist(self): + router = prepare_router_data(num_internal_ports=2) + router['distributed'] = True + router['gw_port_host'] = HOSTNAME + self._test_external_gateway_action('add', router) def _test_arping(self, namespace): if not namespace: @@ -642,7 +682,14 @@ class TestBasicRouterOperations(base.BaseTestCase): self._test_arping(namespace=False) def test_agent_remove_external_gateway(self): - self._test_external_gateway_action('remove') + router = prepare_router_data(num_internal_ports=2) + self._test_external_gateway_action('remove', router) + + def test_agent_remove_external_gateway_dist(self): + router = prepare_router_data(num_internal_ports=2) + router['distributed'] = True + router['gw_port_host'] = HOSTNAME + self._test_external_gateway_action('remove', router) def _check_agent_method_called(self, agent, calls, namespace): self.mock_ip.netns.execute.assert_has_calls( @@ -2077,31 +2124,11 @@ vrrp_instance VR_1 { 'mac_address': 'ca:fe:de:ad:be:ef', 'ip_cidr': '20.0.0.30/24'} - snat_ports = [{'subnet': {'cidr': '152.2.0.0/16', - 'gateway_ip': '152.2.0.1', - 'id': _uuid()}, - 'network_id': _uuid(), - 'device_owner': 'network:router_centralized_snat', - 'ip_cidr': '152.2.0.13/16', - 'mac_address': 'fa:16:3e:80:8d:80', - 'fixed_ips': [{'subnet_id': _uuid(), - 'ip_address': '152.2.0.13'}], - 'id': _uuid(), 'device_id': _uuid()}, - {'subnet': {'cidr': '152.10.0.0/16', - 'gateway_ip': '152.10.0.1', - 'id': _uuid()}, - 'network_id': _uuid(), - 'device_owner': 'network:router_centralized_snat', - 'ip_cidr': '152.10.0.13/16', - 'mac_address': 'fa:16:3e:80:8d:80', - 'fixed_ips': [{'subnet_id': _uuid(), - 'ip_address': '152.10.0.13'}], - 'id': _uuid(), 'device_id': _uuid()}] - interface_name = agent.get_snat_int_device_name(port_id) self.device_exists.return_value = False - agent._create_dvr_gateway(ri, dvr_gw_port, interface_name, snat_ports) + agent._create_dvr_gateway(ri, dvr_gw_port, interface_name, + self.snat_ports) # check 2 internal ports are plugged # check 1 ext-gw-port is plugged From 45a523681f2136f8fefb6c3da44540decd6a0fda Mon Sep 17 00:00:00 2001 From: armando-migliaccio Date: Mon, 15 Sep 2014 18:40:08 -0700 Subject: [PATCH 037/128] Revert "Cleanup floatingips also on router delete" This reverts commit c3326996e38cb67f8d4ba3dabd829dc6f327b666. The patch being reverted here addresses an issue that can no longer be reproduced, in that under no circumstances, I can make the FIP lie around before deleting a router (which can only be done after all FIP have been disassociated or released). Unless we have more clarity as to what the initial commit was really meant to fix, there is a strong case for reverting this patch at this point. Closes-bug: #1373100 Change-Id: I7e0f80e456ff4d9eb57a1d31c6ffc7cdfca5a163 --- neutron/agent/l3_agent.py | 4 ++-- neutron/tests/unit/test_l3_agent.py | 10 ---------- 2 files changed, 2 insertions(+), 12 deletions(-) diff --git a/neutron/agent/l3_agent.py b/neutron/agent/l3_agent.py index 84953bc2e22..c12693558e4 100644 --- a/neutron/agent/l3_agent.py +++ b/neutron/agent/l3_agent.py @@ -948,7 +948,7 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback, # Process SNAT/DNAT rules for floating IPs fip_statuses = {} try: - if ex_gw_port or ri.ex_gw_port: + if ex_gw_port: existing_floating_ips = ri.floating_ips self.process_router_floating_ip_nat_rules(ri) ri.iptables_manager.defer_apply_off() @@ -962,7 +962,7 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback, for fip in ri.router.get(l3_constants.FLOATINGIP_KEY, []): fip_statuses[fip['id']] = l3_constants.FLOATINGIP_STATUS_ERROR - if ex_gw_port or ri.ex_gw_port: + if ex_gw_port: # Identify floating IPs which were disabled ri.floating_ips = set(fip_statuses.keys()) for fip_id in existing_floating_ips - ri.floating_ips: diff --git a/neutron/tests/unit/test_l3_agent.py b/neutron/tests/unit/test_l3_agent.py index 0be506e7ce6..c9fb026f301 100644 --- a/neutron/tests/unit/test_l3_agent.py +++ b/neutron/tests/unit/test_l3_agent.py @@ -988,17 +988,7 @@ class TestBasicRouterOperations(base.BaseTestCase): del router[l3_constants.INTERFACE_KEY] del router['gw_port'] agent.process_router(ri) - ex_gw_port = agent._get_ex_gw_port(ri) self.assertEqual(self.send_arp.call_count, 1) - agent.process_router_floating_ip_addresses.assert_called_with( - ri, ex_gw_port) - agent.process_router_floating_ip_addresses.reset_mock() - agent.process_router_floating_ip_nat_rules.assert_called_with(ri) - agent.process_router_floating_ip_nat_rules.reset_mock() - - # now no ports no gateway, test state tear down - ri.ex_gw_port = None - agent.process_router(ri) self.assertFalse(agent.process_router_floating_ip_addresses.called) self.assertFalse(agent.process_router_floating_ip_nat_rules.called) From 78a2ecb9923417f63c17c1e7055200ac97e6e947 Mon Sep 17 00:00:00 2001 From: Kevin Benton Date: Sat, 20 Sep 2014 00:17:58 -0700 Subject: [PATCH 038/128] Fix broken port query in Extraroute test case One of the queries in an extra route test case tries to filter based on the port owner, but the _list_ports method it calls doesn't take a device_owner parameter. This can cause failures if a DHCP port is created on the same subnet. Change-Id: I0e62027ae4d98944ef91a5d457d43d4224441b2f --- neutron/tests/unit/test_db_plugin.py | 8 +++++--- neutron/tests/unit/test_extension_extraroute.py | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/neutron/tests/unit/test_db_plugin.py b/neutron/tests/unit/test_db_plugin.py index 7754cc2b12d..f6b8204886b 100644 --- a/neutron/tests/unit/test_db_plugin.py +++ b/neutron/tests/unit/test_db_plugin.py @@ -368,10 +368,12 @@ class NeutronDbPluginV2TestCase(testlib_api.WebTestCase, def _list_ports(self, fmt, expected_res_status=None, net_id=None, **kwargs): - query_params = None + query_params = [] if net_id: - query_params = "network_id=%s" % net_id - port_req = self.new_list_request('ports', fmt, query_params) + query_params.append("network_id=%s" % net_id) + if kwargs.get('device_owner'): + query_params.append("device_owner=%s" % kwargs.get('device_owner')) + port_req = self.new_list_request('ports', fmt, '&'.join(query_params)) if ('set_context' in kwargs and kwargs['set_context'] is True and 'tenant_id' in kwargs): diff --git a/neutron/tests/unit/test_extension_extraroute.py b/neutron/tests/unit/test_extension_extraroute.py index f2fa6e33944..dad220370f8 100644 --- a/neutron/tests/unit/test_extension_extraroute.py +++ b/neutron/tests/unit/test_extension_extraroute.py @@ -403,7 +403,7 @@ class ExtraRouteDBTestCaseBase(object): 200, s['subnet']['network_id'], tenant_id=r['router']['tenant_id'], - device_own=constants.DEVICE_OWNER_ROUTER_GW) + device_owner=constants.DEVICE_OWNER_ROUTER_GW) port_list = self.deserialize('json', port_res) self.assertEqual(len(port_list['ports']), 1) From 0d8911115e1b722da2f1e92f444e53b22223ee32 Mon Sep 17 00:00:00 2001 From: Eugene Nikanorov Date: Mon, 25 Aug 2014 00:59:02 +0400 Subject: [PATCH 039/128] Raise exception if ipv6 prefix is inappropriate for address mode Address prefix to use with slaac and stateless ipv6 address modes should be equal to 64 in order to work properly. The patch adds corresponding validation and fixes unit tests accordingly. Change-Id: I6c344b21a69f85f2885a72377171f70309b26775 Closes-Bug: #1357084 --- neutron/db/db_base_plugin_v2.py | 15 ++++++++++++++ neutron/tests/unit/test_db_plugin.py | 30 +++++++++++++++++++--------- 2 files changed, 36 insertions(+), 9 deletions(-) diff --git a/neutron/db/db_base_plugin_v2.py b/neutron/db/db_base_plugin_v2.py index c7e82d5bc41..155b9f3995d 100644 --- a/neutron/db/db_base_plugin_v2.py +++ b/neutron/db/db_base_plugin_v2.py @@ -758,6 +758,21 @@ class NeutronDbPluginV2(neutron_plugin_base_v2.NeutronPluginBaseV2, if ra_mode_set and address_mode_set: self._validate_ipv6_combination(subnet['ipv6_ra_mode'], subnet['ipv6_address_mode']) + if address_mode_set: + self._validate_eui64_applicable(subnet) + + def _validate_eui64_applicable(self, subnet): + # Per RFC 4862, section 5.5.3, prefix length and interface + # id together should be equal to 128. Currently neutron supports + # EUI64 interface id only, thus limiting the prefix + # length to be 64 only. + if self._check_if_subnet_uses_eui64(subnet): + if netaddr.IPNetwork(subnet['cidr']).prefixlen != 64: + msg = _('Invalid CIDR %s for IPv6 address mode. ' + 'OpenStack uses the EUI-64 address format, ' + 'which requires the prefix to be /64.') + raise n_exc.InvalidInput( + error_message=(msg % subnet['cidr'])) def _validate_ipv6_combination(self, ra_mode, address_mode): if ra_mode != address_mode: diff --git a/neutron/tests/unit/test_db_plugin.py b/neutron/tests/unit/test_db_plugin.py index 7754cc2b12d..2db22433956 100644 --- a/neutron/tests/unit/test_db_plugin.py +++ b/neutron/tests/unit/test_db_plugin.py @@ -1390,13 +1390,13 @@ fixed_ips=ip_address%%3D%s&fixed_ips=ip_address%%3D%s&fixed_ips=subnet_id%%3D%s self._delete('ports', port3['port']['id']) self._delete('ports', port4['port']['id']) - def test_ip_allocation_for_ipv6_subnet_slaac_adddress_mode(self): + def test_ip_allocation_for_ipv6_subnet_slaac_address_mode(self): res = self._create_network(fmt=self.fmt, name='net', admin_state_up=True) network = self.deserialize(self.fmt, res) v6_subnet = self._make_subnet(self.fmt, network, gateway='fe80::1', - cidr='fe80::/80', + cidr='fe80::/64', ip_version=6, ipv6_ra_mode=None, ipv6_address_mode=constants.IPV6_SLAAC) @@ -2359,6 +2359,18 @@ class TestSubnetsV2(NeutronDbPluginV2TestCase): res = subnet_req.get_response(self.api) self.assertEqual(res.status_int, webob.exc.HTTPClientError.code) + def test_create_subnet_V6_slaac_big_prefix(self): + with self.network() as network: + data = {'subnet': {'network_id': network['network']['id'], + 'cidr': '2014::/65', + 'ip_version': '6', + 'tenant_id': network['network']['tenant_id'], + 'gateway_ip': 'fe80::1', + 'ipv6_address_mode': 'slaac'}} + subnet_req = self.new_create_request('subnets', data) + res = subnet_req.get_response(self.api) + self.assertEqual(webob.exc.HTTPClientError.code, res.status_int) + def test_create_2_subnets_overlapping_cidr_allowed_returns_200(self): cidr_1 = '10.0.0.0/23' cidr_2 = '10.0.0.0/24' @@ -3026,7 +3038,7 @@ class TestSubnetsV2(NeutronDbPluginV2TestCase): def test_create_subnet_ipv6_attributes(self): gateway_ip = 'fe80::1' - cidr = 'fe80::/80' + cidr = 'fe80::/64' for mode in constants.IPV6_MODES: self._test_create_subnet(gateway_ip=gateway_ip, @@ -3058,7 +3070,7 @@ class TestSubnetsV2(NeutronDbPluginV2TestCase): def test_create_subnet_ipv6_attributes_no_dhcp_enabled(self): gateway_ip = 'fe80::1' - cidr = 'fe80::/80' + cidr = 'fe80::/64' with testlib_api.ExpectedException( webob.exc.HTTPClientError) as ctx_manager: for mode in constants.IPV6_MODES: @@ -3108,7 +3120,7 @@ class TestSubnetsV2(NeutronDbPluginV2TestCase): def test_create_subnet_ipv6_single_attribute_set(self): gateway_ip = 'fe80::1' - cidr = 'fe80::/80' + cidr = 'fe80::/64' for mode in constants.IPV6_MODES: self._test_create_subnet(gateway_ip=gateway_ip, cidr=cidr, ip_version=6, @@ -3299,7 +3311,7 @@ class TestSubnetsV2(NeutronDbPluginV2TestCase): webob.exc.HTTPConflict.code) def test_update_subnet_ipv6_attributes(self): - with self.subnet(ip_version=6, cidr='fe80::/80', + with self.subnet(ip_version=6, cidr='fe80::/64', ipv6_ra_mode=constants.IPV6_SLAAC, ipv6_address_mode=constants.IPV6_SLAAC) as subnet: data = {'subnet': {'ipv6_ra_mode': constants.DHCPV6_STATEFUL, @@ -3313,7 +3325,7 @@ class TestSubnetsV2(NeutronDbPluginV2TestCase): data['subnet']['ipv6_address_mode']) def test_update_subnet_ipv6_inconsistent_ra_attribute(self): - with self.subnet(ip_version=6, cidr='fe80::/80', + with self.subnet(ip_version=6, cidr='fe80::/64', ipv6_ra_mode=constants.IPV6_SLAAC, ipv6_address_mode=constants.IPV6_SLAAC) as subnet: data = {'subnet': {'ipv6_ra_mode': constants.DHCPV6_STATEFUL}} @@ -3324,7 +3336,7 @@ class TestSubnetsV2(NeutronDbPluginV2TestCase): webob.exc.HTTPClientError.code) def test_update_subnet_ipv6_inconsistent_address_attribute(self): - with self.subnet(ip_version=6, cidr='fe80::/80', + with self.subnet(ip_version=6, cidr='fe80::/64', ipv6_ra_mode=constants.IPV6_SLAAC, ipv6_address_mode=constants.IPV6_SLAAC) as subnet: data = {'subnet': {'ipv6_address_mode': constants.DHCPV6_STATEFUL}} @@ -3335,7 +3347,7 @@ class TestSubnetsV2(NeutronDbPluginV2TestCase): webob.exc.HTTPClientError.code) def test_update_subnet_ipv6_inconsistent_enable_dhcp(self): - with self.subnet(ip_version=6, cidr='fe80::/80', + with self.subnet(ip_version=6, cidr='fe80::/64', ipv6_ra_mode=constants.IPV6_SLAAC, ipv6_address_mode=constants.IPV6_SLAAC) as subnet: data = {'subnet': {'enable_dhcp': False}} From 9a6c073656a7e0b1a26b2bca0ba381489d04e322 Mon Sep 17 00:00:00 2001 From: Eugene Nikanorov Date: Mon, 15 Sep 2014 22:10:45 +0400 Subject: [PATCH 040/128] Add missing methods to NoopFirewallDriver The fix adds missing methods into generic Firewall class and in NoopFirewall driver class. Change-Id: I6402448075ed414434dc007f5c403fc85b6b1456 Closes-Bug: #1369685 Related-Bug: #1365806 --- neutron/agent/firewall.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/neutron/agent/firewall.py b/neutron/agent/firewall.py index 7ce1f992098..8ce8e7b16bf 100644 --- a/neutron/agent/firewall.py +++ b/neutron/agent/firewall.py @@ -105,6 +105,14 @@ class FirewallDriver(object): finally: self.filter_defer_apply_off() + def update_security_group_members(self, sg_id, ips): + """Update group members in a security group.""" + raise NotImplementedError() + + def update_security_group_rules(self, sg_id, rules): + """Update rules in a security group.""" + raise NotImplementedError() + class NoopFirewallDriver(FirewallDriver): """Noop Firewall Driver. @@ -134,3 +142,9 @@ class NoopFirewallDriver(FirewallDriver): @property def ports(self): return {} + + def update_security_group_members(self, sg_id, ips): + pass + + def update_security_group_rules(self, sg_id, rules): + pass From fd50ff4d243fbd4590b24b96039361504b45b49f Mon Sep 17 00:00:00 2001 From: OpenStack Proposal Bot Date: Mon, 29 Sep 2014 06:04:31 +0000 Subject: [PATCH 041/128] Imported Translations from Transifex Change-Id: I585e3df5504fcc071811e0ec9f925bc493584b2f --- .../de/LC_MESSAGES/neutron-log-error.po | 42 +- .../en_AU/LC_MESSAGES/neutron-log-error.po | 42 +- .../en_GB/LC_MESSAGES/neutron-log-error.po | 42 +- neutron/locale/en_US/LC_MESSAGES/neutron.po | 934 ++++++----------- .../es/LC_MESSAGES/neutron-log-error.po | 42 +- .../fr/LC_MESSAGES/neutron-log-error.po | 42 +- .../it/LC_MESSAGES/neutron-log-error.po | 42 +- .../ja/LC_MESSAGES/neutron-log-error.po | 42 +- .../ko_KR/LC_MESSAGES/neutron-log-error.po | 42 +- neutron/locale/neutron-log-error.pot | 44 +- neutron/locale/neutron.pot | 936 ++++++------------ .../pt_BR/LC_MESSAGES/neutron-log-error.po | 42 +- .../te_IN/LC_MESSAGES/neutron-log-error.po | 42 +- .../zh_CN/LC_MESSAGES/neutron-log-error.po | 42 +- 14 files changed, 950 insertions(+), 1426 deletions(-) diff --git a/neutron/locale/de/LC_MESSAGES/neutron-log-error.po b/neutron/locale/de/LC_MESSAGES/neutron-log-error.po index 46193aaf338..0e268f59a98 100644 --- a/neutron/locale/de/LC_MESSAGES/neutron-log-error.po +++ b/neutron/locale/de/LC_MESSAGES/neutron-log-error.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Neutron\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-15 06:11+0000\n" +"POT-Creation-Date: 2014-09-29 06:04+0000\n" "PO-Revision-Date: 2014-06-30 20:07+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: German (http://www.transifex.com/projects/p/neutron/language/" @@ -19,14 +19,14 @@ msgstr "" "Generated-By: Babel 1.3\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: neutron/policy.py:115 +#: neutron/policy.py:119 #, python-format msgid "" "Backward compatibility unavailable for deprecated policy %s. The policy will " "not be enforced" msgstr "" -#: neutron/policy.py:280 +#: neutron/policy.py:311 #, python-format msgid "Policy check error while calling %s!" msgstr "" @@ -36,22 +36,32 @@ msgstr "" msgid "Unable to process HA router %s without ha port" msgstr "" -#: neutron/agent/linux/external_process.py:230 +#: neutron/agent/linux/external_process.py:229 #, python-format msgid "" "%(service)s for %(resource_type)s with uuid %(uuid)s not found. The process " "should not have died" msgstr "" -#: neutron/agent/linux/external_process.py:250 +#: neutron/agent/linux/external_process.py:249 #, python-format msgid "respawning %(service)s for uuid %(uuid)s" msgstr "" -#: neutron/agent/linux/external_process.py:256 +#: neutron/agent/linux/external_process.py:255 msgid "Exiting agent as programmed in check_child_processes_actions" msgstr "" +#: neutron/agent/linux/interface.py:154 +#, python-format +msgid "Failed deleting ingress connection state of floatingip %s" +msgstr "" + +#: neutron/agent/linux/interface.py:163 +#, python-format +msgid "Failed deleting egress connection state of floatingip %s" +msgstr "" + #: neutron/cmd/sanity_check.py:58 msgid "" "Nova notifications are enabled, but novaclient is not installed. Either " @@ -81,40 +91,40 @@ msgstr "" msgid "Unhandled exception" msgstr "Nicht behandelte Ausnahme" -#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:283 +#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:279 #, python-format msgid "Unable to delete port '%(pname)s' on switch. Exception: %(exp)s" msgstr "" -#: neutron/plugins/ml2/drivers/type_gre.py:80 +#: neutron/plugins/ml2/drivers/type_gre.py:86 #, python-format msgid "Skipping unreasonable gre ID range %(tun_min)s:%(tun_max)s" msgstr "" -#: neutron/plugins/ml2/drivers/type_vxlan.py:87 +#: neutron/plugins/ml2/drivers/type_vxlan.py:92 #, python-format msgid "Skipping unreasonable VXLAN VNI range %(tun_min)s:%(tun_max)s" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:112 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:110 msgid "APIC service agent: failed in reporting state" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:207 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:205 #, python-format msgid "No such interface (ignored): %s" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:257 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:255 msgid "APIC service agent: exception in LLDP parsing" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:312 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:310 #, python-format msgid "APIC service agent: can not get MACaddr for %s" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:328 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:326 msgid "APIC host agent: failed in reporting state" msgstr "" @@ -122,7 +132,7 @@ msgstr "" msgid "Error in agent event loop" msgstr "" -#: neutron/plugins/nuage/syncmanager.py:56 +#: neutron/plugins/nuage/syncmanager.py:55 #, python-format msgid "Cannot complete the sync between Neutron and VSD because of error:%s" msgstr "" @@ -199,7 +209,7 @@ msgstr "" msgid "Error while processing VIF ports" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:2089 +#: neutron/plugins/vmware/plugins/base.py:2099 #, python-format msgid "" "Rolling back database changes for gateway device %s because of an error in " diff --git a/neutron/locale/en_AU/LC_MESSAGES/neutron-log-error.po b/neutron/locale/en_AU/LC_MESSAGES/neutron-log-error.po index 0319ce9f99f..54c192e9ffe 100644 --- a/neutron/locale/en_AU/LC_MESSAGES/neutron-log-error.po +++ b/neutron/locale/en_AU/LC_MESSAGES/neutron-log-error.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Neutron\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-15 06:11+0000\n" +"POT-Creation-Date: 2014-09-29 06:04+0000\n" "PO-Revision-Date: 2014-06-30 20:07+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: English (Australia) (http://www.transifex.com/projects/p/" @@ -19,14 +19,14 @@ msgstr "" "Generated-By: Babel 1.3\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: neutron/policy.py:115 +#: neutron/policy.py:119 #, python-format msgid "" "Backward compatibility unavailable for deprecated policy %s. The policy will " "not be enforced" msgstr "" -#: neutron/policy.py:280 +#: neutron/policy.py:311 #, python-format msgid "Policy check error while calling %s!" msgstr "" @@ -36,22 +36,32 @@ msgstr "" msgid "Unable to process HA router %s without ha port" msgstr "" -#: neutron/agent/linux/external_process.py:230 +#: neutron/agent/linux/external_process.py:229 #, python-format msgid "" "%(service)s for %(resource_type)s with uuid %(uuid)s not found. The process " "should not have died" msgstr "" -#: neutron/agent/linux/external_process.py:250 +#: neutron/agent/linux/external_process.py:249 #, python-format msgid "respawning %(service)s for uuid %(uuid)s" msgstr "" -#: neutron/agent/linux/external_process.py:256 +#: neutron/agent/linux/external_process.py:255 msgid "Exiting agent as programmed in check_child_processes_actions" msgstr "" +#: neutron/agent/linux/interface.py:154 +#, python-format +msgid "Failed deleting ingress connection state of floatingip %s" +msgstr "" + +#: neutron/agent/linux/interface.py:163 +#, python-format +msgid "Failed deleting egress connection state of floatingip %s" +msgstr "" + #: neutron/cmd/sanity_check.py:58 msgid "" "Nova notifications are enabled, but novaclient is not installed. Either " @@ -81,40 +91,40 @@ msgstr "Exception during rpc cleanup." msgid "Unhandled exception" msgstr "Unhandled exception" -#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:283 +#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:279 #, python-format msgid "Unable to delete port '%(pname)s' on switch. Exception: %(exp)s" msgstr "" -#: neutron/plugins/ml2/drivers/type_gre.py:80 +#: neutron/plugins/ml2/drivers/type_gre.py:86 #, python-format msgid "Skipping unreasonable gre ID range %(tun_min)s:%(tun_max)s" msgstr "" -#: neutron/plugins/ml2/drivers/type_vxlan.py:87 +#: neutron/plugins/ml2/drivers/type_vxlan.py:92 #, python-format msgid "Skipping unreasonable VXLAN VNI range %(tun_min)s:%(tun_max)s" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:112 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:110 msgid "APIC service agent: failed in reporting state" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:207 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:205 #, python-format msgid "No such interface (ignored): %s" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:257 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:255 msgid "APIC service agent: exception in LLDP parsing" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:312 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:310 #, python-format msgid "APIC service agent: can not get MACaddr for %s" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:328 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:326 msgid "APIC host agent: failed in reporting state" msgstr "" @@ -122,7 +132,7 @@ msgstr "" msgid "Error in agent event loop" msgstr "" -#: neutron/plugins/nuage/syncmanager.py:56 +#: neutron/plugins/nuage/syncmanager.py:55 #, python-format msgid "Cannot complete the sync between Neutron and VSD because of error:%s" msgstr "" @@ -199,7 +209,7 @@ msgstr "" msgid "Error while processing VIF ports" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:2089 +#: neutron/plugins/vmware/plugins/base.py:2099 #, python-format msgid "" "Rolling back database changes for gateway device %s because of an error in " diff --git a/neutron/locale/en_GB/LC_MESSAGES/neutron-log-error.po b/neutron/locale/en_GB/LC_MESSAGES/neutron-log-error.po index 06b44c7a973..1205d68f301 100644 --- a/neutron/locale/en_GB/LC_MESSAGES/neutron-log-error.po +++ b/neutron/locale/en_GB/LC_MESSAGES/neutron-log-error.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Neutron\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-15 06:11+0000\n" +"POT-Creation-Date: 2014-09-29 06:04+0000\n" "PO-Revision-Date: 2014-08-12 21:24+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: English (United Kingdom) (http://www.transifex.com/projects/p/" @@ -20,7 +20,7 @@ msgstr "" "Generated-By: Babel 1.3\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: neutron/policy.py:115 +#: neutron/policy.py:119 #, python-format msgid "" "Backward compatibility unavailable for deprecated policy %s. The policy will " @@ -29,7 +29,7 @@ msgstr "" "Backward compatibility unavailable for deprecated policy %s. The policy will " "not be enforced" -#: neutron/policy.py:280 +#: neutron/policy.py:311 #, python-format msgid "Policy check error while calling %s!" msgstr "Policy check error while calling %s!" @@ -39,22 +39,32 @@ msgstr "Policy check error while calling %s!" msgid "Unable to process HA router %s without ha port" msgstr "" -#: neutron/agent/linux/external_process.py:230 +#: neutron/agent/linux/external_process.py:229 #, python-format msgid "" "%(service)s for %(resource_type)s with uuid %(uuid)s not found. The process " "should not have died" msgstr "" -#: neutron/agent/linux/external_process.py:250 +#: neutron/agent/linux/external_process.py:249 #, python-format msgid "respawning %(service)s for uuid %(uuid)s" msgstr "" -#: neutron/agent/linux/external_process.py:256 +#: neutron/agent/linux/external_process.py:255 msgid "Exiting agent as programmed in check_child_processes_actions" msgstr "" +#: neutron/agent/linux/interface.py:154 +#, python-format +msgid "Failed deleting ingress connection state of floatingip %s" +msgstr "" + +#: neutron/agent/linux/interface.py:163 +#, python-format +msgid "Failed deleting egress connection state of floatingip %s" +msgstr "" + #: neutron/cmd/sanity_check.py:58 msgid "" "Nova notifications are enabled, but novaclient is not installed. Either " @@ -86,40 +96,40 @@ msgstr "Exception during rpc cleanup." msgid "Unhandled exception" msgstr "Unhandled exception" -#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:283 +#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:279 #, python-format msgid "Unable to delete port '%(pname)s' on switch. Exception: %(exp)s" msgstr "" -#: neutron/plugins/ml2/drivers/type_gre.py:80 +#: neutron/plugins/ml2/drivers/type_gre.py:86 #, python-format msgid "Skipping unreasonable gre ID range %(tun_min)s:%(tun_max)s" msgstr "" -#: neutron/plugins/ml2/drivers/type_vxlan.py:87 +#: neutron/plugins/ml2/drivers/type_vxlan.py:92 #, python-format msgid "Skipping unreasonable VXLAN VNI range %(tun_min)s:%(tun_max)s" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:112 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:110 msgid "APIC service agent: failed in reporting state" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:207 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:205 #, python-format msgid "No such interface (ignored): %s" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:257 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:255 msgid "APIC service agent: exception in LLDP parsing" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:312 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:310 #, python-format msgid "APIC service agent: can not get MACaddr for %s" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:328 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:326 msgid "APIC host agent: failed in reporting state" msgstr "" @@ -127,7 +137,7 @@ msgstr "" msgid "Error in agent event loop" msgstr "" -#: neutron/plugins/nuage/syncmanager.py:56 +#: neutron/plugins/nuage/syncmanager.py:55 #, python-format msgid "Cannot complete the sync between Neutron and VSD because of error:%s" msgstr "" @@ -204,7 +214,7 @@ msgstr "" msgid "Error while processing VIF ports" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:2089 +#: neutron/plugins/vmware/plugins/base.py:2099 #, python-format msgid "" "Rolling back database changes for gateway device %s because of an error in " diff --git a/neutron/locale/en_US/LC_MESSAGES/neutron.po b/neutron/locale/en_US/LC_MESSAGES/neutron.po index 09400125882..57f9fbd29e9 100644 --- a/neutron/locale/en_US/LC_MESSAGES/neutron.po +++ b/neutron/locale/en_US/LC_MESSAGES/neutron.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Neutron\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-22 06:06+0000\n" +"POT-Creation-Date: 2014-09-29 06:03+0000\n" "PO-Revision-Date: 2013-01-28 21:54+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: English (United States) " @@ -89,48 +89,48 @@ msgstr "" msgid "Successfully loaded %(type)s plugin. Description: %(desc)s" msgstr "" -#: neutron/policy.py:87 +#: neutron/policy.py:91 #, python-format msgid "Loading policies from file: %s" msgstr "" -#: neutron/policy.py:142 +#: neutron/policy.py:160 #, python-format msgid "" "Attribute type descriptor is not a dict. Unable to generate any sub-attr " "policy rule for %s." msgstr "" -#: neutron/policy.py:215 +#: neutron/policy.py:246 #, python-format msgid "" "Unable to identify a target field from:%s.match should be in the form " "%%()s" msgstr "" -#: neutron/policy.py:241 +#: neutron/policy.py:272 #, python-format msgid "Unable to find ':' as separator in %s." msgstr "" -#: neutron/policy.py:245 +#: neutron/policy.py:276 #, python-format msgid "Unable to find resource name in %s" msgstr "" -#: neutron/policy.py:254 +#: neutron/policy.py:285 #, python-format msgid "" "Unable to verify match:%(match)s as the parent resource: %(res)s was not " "found" msgstr "" -#: neutron/policy.py:312 +#: neutron/policy.py:343 #, python-format msgid "Unable to find requested field: %(field)s in target: %(target_dict)s" msgstr "" -#: neutron/policy.py:370 +#: neutron/policy.py:401 #, python-format msgid "Failed policy check for '%s'" msgstr "" @@ -330,7 +330,7 @@ msgid "You must implement __call__" msgstr "" #: neutron/wsgi.py:1024 neutron/api/v2/base.py:191 neutron/api/v2/base.py:332 -#: neutron/api/v2/base.py:472 neutron/api/v2/base.py:527 +#: neutron/api/v2/base.py:472 neutron/api/v2/base.py:531 #: neutron/extensions/l3agentscheduler.py:50 #: neutron/extensions/l3agentscheduler.py:93 msgid "The resource could not be found." @@ -410,7 +410,7 @@ msgid "Number of threads to use during sync process." msgstr "" #: neutron/agent/dhcp_agent.py:65 neutron/agent/l3_agent.py:496 -#: neutron/agent/metadata/namespace_proxy.py:163 +#: neutron/agent/metadata/namespace_proxy.py:165 msgid "Location of Metadata Proxy UNIX domain socket" msgstr "" @@ -489,8 +489,8 @@ msgid "" "port %(port_id)s, for router %(router_id)s will be considered" msgstr "" -#: neutron/agent/dhcp_agent.py:582 neutron/agent/l3_agent.py:1984 -#: neutron/agent/metadata/agent.py:361 +#: neutron/agent/dhcp_agent.py:582 neutron/agent/l3_agent.py:1987 +#: neutron/agent/metadata/agent.py:363 #: neutron/plugins/cisco/cfg_agent/cfg_agent.py:326 #: neutron/services/metering/agents/metering_agent.py:270 msgid "" @@ -498,10 +498,10 @@ msgid "" " will be disabled." msgstr "" -#: neutron/agent/dhcp_agent.py:588 neutron/agent/l3_agent.py:1989 -#: neutron/agent/metadata/agent.py:366 +#: neutron/agent/dhcp_agent.py:588 neutron/agent/l3_agent.py:1992 +#: neutron/agent/metadata/agent.py:368 #: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:108 -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:794 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:793 #: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:216 #: neutron/plugins/nec/agent/nec_neutron_agent.py:180 #: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:264 @@ -516,7 +516,7 @@ msgstr "" msgid "Agent updated: %(payload)s" msgstr "" -#: neutron/agent/dhcp_agent.py:597 neutron/agent/l3_agent.py:1994 +#: neutron/agent/dhcp_agent.py:597 neutron/agent/l3_agent.py:1997 #: neutron/services/metering/agents/metering_agent.py:278 #, python-format msgid "agent_updated by server side %s!" @@ -651,103 +651,103 @@ msgstr "" msgid "Unable to configure IP address for floating IP: %s" msgstr "" -#: neutron/agent/l3_agent.py:1178 +#: neutron/agent/l3_agent.py:1181 #, python-format msgid "Failed sending gratuitous ARP: %s" msgstr "" -#: neutron/agent/l3_agent.py:1240 +#: neutron/agent/l3_agent.py:1243 msgid "DVR: no map match_port found!" msgstr "" -#: neutron/agent/l3_agent.py:1444 +#: neutron/agent/l3_agent.py:1447 msgid "DVR: error adding redirection logic" msgstr "" -#: neutron/agent/l3_agent.py:1456 +#: neutron/agent/l3_agent.py:1459 msgid "DVR: removed snat failed" msgstr "" -#: neutron/agent/l3_agent.py:1557 +#: neutron/agent/l3_agent.py:1560 msgid "Missing subnet/agent_gateway_port" msgstr "" -#: neutron/agent/l3_agent.py:1678 +#: neutron/agent/l3_agent.py:1681 #, python-format msgid "Got router deleted notification for %s" msgstr "" -#: neutron/agent/l3_agent.py:1699 +#: neutron/agent/l3_agent.py:1702 msgid "DVR: Failed updating arp entry" msgstr "" -#: neutron/agent/l3_agent.py:1726 +#: neutron/agent/l3_agent.py:1729 #, python-format msgid "Got routers updated notification :%s" msgstr "" -#: neutron/agent/l3_agent.py:1736 +#: neutron/agent/l3_agent.py:1739 #, python-format msgid "Got router removed from agent :%r" msgstr "" -#: neutron/agent/l3_agent.py:1742 +#: neutron/agent/l3_agent.py:1745 #, python-format msgid "Got router added to agent :%r" msgstr "" -#: neutron/agent/l3_agent.py:1749 +#: neutron/agent/l3_agent.py:1752 #, python-format msgid "The external network bridge '%s' does not exist" msgstr "" -#: neutron/agent/l3_agent.py:1801 +#: neutron/agent/l3_agent.py:1804 #, python-format msgid "Failed to fetch router information for '%s'" msgstr "" -#: neutron/agent/l3_agent.py:1840 +#: neutron/agent/l3_agent.py:1843 #, python-format msgid "Starting _sync_routers_task - fullsync:%s" msgstr "" -#: neutron/agent/l3_agent.py:1860 +#: neutron/agent/l3_agent.py:1863 #, python-format msgid "Processing :%r" msgstr "" -#: neutron/agent/l3_agent.py:1868 +#: neutron/agent/l3_agent.py:1871 msgid "_sync_routers_task successfully completed" msgstr "" -#: neutron/agent/l3_agent.py:1870 +#: neutron/agent/l3_agent.py:1873 msgid "Failed synchronizing routers due to RPC error" msgstr "" -#: neutron/agent/l3_agent.py:1873 +#: neutron/agent/l3_agent.py:1876 #: neutron/services/metering/agents/metering_agent.py:59 msgid "Failed synchronizing routers" msgstr "" -#: neutron/agent/l3_agent.py:1896 +#: neutron/agent/l3_agent.py:1899 msgid "L3 agent started" msgstr "" -#: neutron/agent/l3_agent.py:1915 +#: neutron/agent/l3_agent.py:1918 #, python-format msgid "Added route entry is '%s'" msgstr "" -#: neutron/agent/l3_agent.py:1923 +#: neutron/agent/l3_agent.py:1926 #, python-format msgid "Removed route entry is '%s'" msgstr "" -#: neutron/agent/l3_agent.py:1957 +#: neutron/agent/l3_agent.py:1960 msgid "Report state task started" msgstr "" -#: neutron/agent/l3_agent.py:1981 +#: neutron/agent/l3_agent.py:1984 msgid "Report state task successfully completed" msgstr "" @@ -793,7 +793,7 @@ msgid "" msgstr "" #: neutron/agent/ovs_cleanup_util.py:73 -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:664 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:663 #: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:302 #, python-format msgid "Delete %s" @@ -1049,17 +1049,17 @@ msgstr "" msgid "No DHCP started for %s" msgstr "" -#: neutron/agent/linux/dhcp.py:256 neutron/agent/linux/utils.py:150 +#: neutron/agent/linux/dhcp.py:256 neutron/agent/linux/utils.py:155 #, python-format msgid "Error while reading %s" msgstr "" -#: neutron/agent/linux/dhcp.py:263 neutron/agent/linux/utils.py:157 +#: neutron/agent/linux/dhcp.py:263 neutron/agent/linux/utils.py:162 #, python-format msgid "Unable to convert value in %s" msgstr "" -#: neutron/agent/linux/dhcp.py:265 neutron/agent/linux/utils.py:159 +#: neutron/agent/linux/dhcp.py:265 neutron/agent/linux/utils.py:164 #, python-format msgid "Unable to access %s" msgstr "" @@ -1156,19 +1156,19 @@ msgstr "" msgid "Interval between checks of child process liveness (seconds)" msgstr "" -#: neutron/agent/linux/interface.py:37 +#: neutron/agent/linux/interface.py:39 msgid "Name of Open vSwitch bridge to use" msgstr "" -#: neutron/agent/linux/interface.py:40 +#: neutron/agent/linux/interface.py:42 msgid "Uses veth for an interface or not" msgstr "" -#: neutron/agent/linux/interface.py:42 +#: neutron/agent/linux/interface.py:44 msgid "MTU setting for device." msgstr "" -#: neutron/agent/linux/interface.py:44 +#: neutron/agent/linux/interface.py:46 msgid "" "Mapping between flavor and LinuxInterfaceDriver. It is specific to " "MetaInterfaceDriver used with admin_user, admin_password, " @@ -1176,58 +1176,58 @@ msgid "" "endpoint_type." msgstr "" -#: neutron/agent/linux/interface.py:50 +#: neutron/agent/linux/interface.py:52 msgid "Admin username" msgstr "" -#: neutron/agent/linux/interface.py:52 neutron/agent/metadata/agent.py:52 +#: neutron/agent/linux/interface.py:54 neutron/agent/metadata/agent.py:52 #: neutron/plugins/metaplugin/common/config.py:65 msgid "Admin password" msgstr "" -#: neutron/agent/linux/interface.py:55 neutron/agent/metadata/agent.py:55 +#: neutron/agent/linux/interface.py:57 neutron/agent/metadata/agent.py:55 #: neutron/plugins/metaplugin/common/config.py:68 msgid "Admin tenant name" msgstr "" -#: neutron/agent/linux/interface.py:57 neutron/agent/metadata/agent.py:57 +#: neutron/agent/linux/interface.py:59 neutron/agent/metadata/agent.py:57 #: neutron/plugins/metaplugin/common/config.py:70 msgid "Authentication URL" msgstr "" -#: neutron/agent/linux/interface.py:59 neutron/agent/metadata/agent.py:59 +#: neutron/agent/linux/interface.py:61 neutron/agent/metadata/agent.py:59 #: neutron/common/config.py:47 neutron/plugins/metaplugin/common/config.py:72 msgid "The type of authentication to use" msgstr "" -#: neutron/agent/linux/interface.py:61 neutron/agent/metadata/agent.py:61 +#: neutron/agent/linux/interface.py:63 neutron/agent/metadata/agent.py:61 #: neutron/plugins/metaplugin/common/config.py:74 msgid "Authentication region" msgstr "" -#: neutron/agent/linux/interface.py:64 neutron/agent/metadata/agent.py:71 +#: neutron/agent/linux/interface.py:66 neutron/agent/metadata/agent.py:71 msgid "Network service endpoint type to pull from the keystone catalog" msgstr "" -#: neutron/agent/linux/interface.py:222 neutron/agent/linux/interface.py:276 -#: neutron/agent/linux/interface.py:338 neutron/agent/linux/interface.py:387 +#: neutron/agent/linux/interface.py:265 neutron/agent/linux/interface.py:320 +#: neutron/agent/linux/interface.py:383 neutron/agent/linux/interface.py:430 #, python-format msgid "Device %s already exists" msgstr "" -#: neutron/agent/linux/interface.py:240 neutron/agent/linux/interface.py:287 -#: neutron/agent/linux/interface.py:350 neutron/agent/linux/interface.py:394 +#: neutron/agent/linux/interface.py:283 neutron/agent/linux/interface.py:331 +#: neutron/agent/linux/interface.py:395 neutron/agent/linux/interface.py:437 #, python-format msgid "Unplugged interface '%s'" msgstr "" -#: neutron/agent/linux/interface.py:242 neutron/agent/linux/interface.py:286 -#: neutron/agent/linux/interface.py:352 neutron/agent/linux/interface.py:396 +#: neutron/agent/linux/interface.py:285 neutron/agent/linux/interface.py:330 +#: neutron/agent/linux/interface.py:397 neutron/agent/linux/interface.py:439 #, python-format msgid "Failed unplugging interface '%s'" msgstr "" -#: neutron/agent/linux/interface.py:455 +#: neutron/agent/linux/interface.py:498 #, python-format msgid "Driver location: %s" msgstr "" @@ -1425,7 +1425,7 @@ msgstr "" msgid "Running command: %s" msgstr "" -#: neutron/agent/linux/utils.py:69 +#: neutron/agent/linux/utils.py:70 #, python-format msgid "" "\n" @@ -1505,26 +1505,26 @@ msgid "" "usually occurs when shared secrets do not match." msgstr "" -#: neutron/agent/metadata/agent.py:240 -#: neutron/agent/metadata/namespace_proxy.py:118 +#: neutron/agent/metadata/agent.py:242 +#: neutron/agent/metadata/namespace_proxy.py:120 msgid "Remote metadata server experienced an internal server error." msgstr "" -#: neutron/agent/metadata/agent.py:246 -#: neutron/agent/metadata/namespace_proxy.py:124 +#: neutron/agent/metadata/agent.py:248 +#: neutron/agent/metadata/namespace_proxy.py:126 #, python-format msgid "Unexpected response code: %s" msgstr "" -#: neutron/agent/metadata/agent.py:306 +#: neutron/agent/metadata/agent.py:308 msgid "Location for Metadata Proxy UNIX domain socket" msgstr "" -#: neutron/agent/metadata/agent.py:309 +#: neutron/agent/metadata/agent.py:311 msgid "Number of separate worker processes for metadata server" msgstr "" -#: neutron/agent/metadata/agent.py:313 +#: neutron/agent/metadata/agent.py:315 msgid "Number of backlog requests to configure the metadata server socket with" msgstr "" @@ -1532,24 +1532,24 @@ msgstr "" msgid "network_id and router_id are None. One must be provided." msgstr "" -#: neutron/agent/metadata/namespace_proxy.py:147 +#: neutron/agent/metadata/namespace_proxy.py:149 msgid "Network that will have instance metadata proxied." msgstr "" -#: neutron/agent/metadata/namespace_proxy.py:150 +#: neutron/agent/metadata/namespace_proxy.py:152 msgid "Router that will have connected instances' metadata proxied." msgstr "" -#: neutron/agent/metadata/namespace_proxy.py:153 +#: neutron/agent/metadata/namespace_proxy.py:155 #: neutron/tests/functional/agent/linux/simple_daemon.py:42 msgid "Location of pid file of this process." msgstr "" -#: neutron/agent/metadata/namespace_proxy.py:156 +#: neutron/agent/metadata/namespace_proxy.py:158 msgid "Run as daemon." msgstr "" -#: neutron/agent/metadata/namespace_proxy.py:159 +#: neutron/agent/metadata/namespace_proxy.py:161 msgid "TCP Port to listen for metadata server requests." msgstr "" @@ -1581,7 +1581,7 @@ msgid "" " and '%(desc)s'" msgstr "" -#: neutron/api/api_common.py:315 neutron/api/v2/base.py:595 +#: neutron/api/api_common.py:315 neutron/api/v2/base.py:599 #, python-format msgid "Unable to find '%s' in request body" msgstr "" @@ -2062,60 +2062,60 @@ msgstr "" msgid "Invalid format: %s" msgstr "" -#: neutron/api/v2/base.py:550 +#: neutron/api/v2/base.py:554 msgid "" "Specifying 'tenant_id' other than authenticated tenant in request " "requires admin privileges" msgstr "" -#: neutron/api/v2/base.py:558 +#: neutron/api/v2/base.py:562 msgid "Running without keystone AuthN requires that tenant_id is specified" msgstr "" -#: neutron/api/v2/base.py:576 +#: neutron/api/v2/base.py:580 msgid "Resource body required" msgstr "" -#: neutron/api/v2/base.py:578 +#: neutron/api/v2/base.py:582 #, python-format msgid "Request body: %(body)s" msgstr "" -#: neutron/api/v2/base.py:581 +#: neutron/api/v2/base.py:585 msgid "Bulk operation not supported" msgstr "" -#: neutron/api/v2/base.py:584 +#: neutron/api/v2/base.py:588 msgid "Resources required" msgstr "" -#: neutron/api/v2/base.py:606 +#: neutron/api/v2/base.py:610 #, python-format msgid "Failed to parse request. Required attribute '%s' not specified" msgstr "" -#: neutron/api/v2/base.py:613 +#: neutron/api/v2/base.py:617 #, python-format msgid "Attribute '%s' not allowed in POST" msgstr "" -#: neutron/api/v2/base.py:618 +#: neutron/api/v2/base.py:622 #, python-format msgid "Cannot update read-only attribute %s" msgstr "" -#: neutron/api/v2/base.py:636 +#: neutron/api/v2/base.py:640 #, python-format msgid "Invalid input for %(attr)s. Reason: %(reason)s." msgstr "" -#: neutron/api/v2/base.py:645 neutron/extensions/allowedaddresspairs.py:75 +#: neutron/api/v2/base.py:649 neutron/extensions/allowedaddresspairs.py:75 #: neutron/extensions/multiprovidernet.py:45 #, python-format msgid "Unrecognized attribute(s) '%s'" msgstr "" -#: neutron/api/v2/base.py:664 +#: neutron/api/v2/base.py:668 #, python-format msgid "Tenant %(tenant_id)s not allowed to create %(resource)s on this network" msgstr "" @@ -3095,20 +3095,20 @@ msgstr "" msgid "Centralizing distributed router %s is not supported" msgstr "" -#: neutron/db/l3_dvr_db.py:424 +#: neutron/db/l3_dvr_db.py:427 #, python-format msgid "Agent Gateway port does not exist, so create one: %s" msgstr "" -#: neutron/db/l3_dvr_db.py:439 +#: neutron/db/l3_dvr_db.py:442 msgid "Unable to create the Agent Gateway Port" msgstr "" -#: neutron/db/l3_dvr_db.py:465 +#: neutron/db/l3_dvr_db.py:468 msgid "Unable to create the SNAT Interface Port" msgstr "" -#: neutron/db/l3_dvr_db.py:489 +#: neutron/db/l3_dvr_db.py:492 #, python-format msgid "SNAT interface port list does not exist, so create one: %s" msgstr "" @@ -3143,7 +3143,7 @@ msgstr "" msgid "%s must implement get_port_from_device." msgstr "" -#: neutron/db/securitygroups_rpc_base.py:343 +#: neutron/db/securitygroups_rpc_base.py:344 #, python-format msgid "No valid gateway port on subnet %s is found for IPv6 RA" msgstr "" @@ -3160,96 +3160,89 @@ msgid "" "sort '%(resource)s'" msgstr "" -#: neutron/db/firewall/firewall_db.py:258 -#: neutron/plugins/vmware/plugins/service.py:907 +#: neutron/db/firewall/firewall_db.py:267 #: neutron/services/firewall/fwaas_plugin.py:216 msgid "create_firewall() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:279 -#: neutron/plugins/vmware/plugins/service.py:941 +#: neutron/db/firewall/firewall_db.py:288 #: neutron/services/firewall/fwaas_plugin.py:230 msgid "update_firewall() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:288 -#: neutron/plugins/vmware/plugins/service.py:967 +#: neutron/db/firewall/firewall_db.py:297 #: neutron/services/firewall/fwaas_plugin.py:245 msgid "delete_firewall() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:297 +#: neutron/db/firewall/firewall_db.py:306 msgid "get_firewall() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:302 +#: neutron/db/firewall/firewall_db.py:311 msgid "get_firewalls() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:308 +#: neutron/db/firewall/firewall_db.py:317 msgid "get_firewalls_count() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:313 +#: neutron/db/firewall/firewall_db.py:322 msgid "create_firewall_policy() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:328 -#: neutron/plugins/vmware/plugins/service.py:1029 +#: neutron/db/firewall/firewall_db.py:337 #: neutron/services/firewall/fwaas_plugin.py:254 msgid "update_firewall_policy() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:344 +#: neutron/db/firewall/firewall_db.py:353 msgid "delete_firewall_policy() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:356 +#: neutron/db/firewall/firewall_db.py:365 msgid "get_firewall_policy() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:361 +#: neutron/db/firewall/firewall_db.py:370 msgid "get_firewall_policies() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:367 +#: neutron/db/firewall/firewall_db.py:376 msgid "get_firewall_policies_count() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:372 +#: neutron/db/firewall/firewall_db.py:381 msgid "create_firewall_rule() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:404 -#: neutron/plugins/vmware/plugins/service.py:1003 +#: neutron/db/firewall/firewall_db.py:413 #: neutron/services/firewall/fwaas_plugin.py:262 msgid "update_firewall_rule() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:436 +#: neutron/db/firewall/firewall_db.py:449 msgid "delete_firewall_rule() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:444 +#: neutron/db/firewall/firewall_db.py:457 msgid "get_firewall_rule() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:449 +#: neutron/db/firewall/firewall_db.py:462 msgid "get_firewall_rules() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:455 +#: neutron/db/firewall/firewall_db.py:468 msgid "get_firewall_rules_count() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:464 -#: neutron/plugins/vmware/plugins/service.py:1056 +#: neutron/db/firewall/firewall_db.py:477 #: neutron/services/firewall/fwaas_plugin.py:272 msgid "insert_rule() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:508 -#: neutron/plugins/vmware/plugins/service.py:1085 +#: neutron/db/firewall/firewall_db.py:523 #: neutron/services/firewall/fwaas_plugin.py:280 msgid "remove_rule() called" msgstr "" @@ -3649,32 +3642,39 @@ msgstr "" msgid "%(driver)s: Internal driver error." msgstr "" -#: neutron/extensions/firewall.py:176 +#: neutron/extensions/firewall.py:138 +#, python-format +msgid "" +"Operation cannot be performed since Firewall Rule %(firewall_rule_id)s is" +" not shared and belongs to another tenant %(tenant_id)s" +msgstr "" + +#: neutron/extensions/firewall.py:189 #, python-format msgid "Port '%s' is not a valid number" msgstr "" -#: neutron/extensions/firewall.py:180 +#: neutron/extensions/firewall.py:193 #, python-format msgid "Invalid port '%s'" msgstr "" -#: neutron/extensions/firewall.py:194 +#: neutron/extensions/firewall.py:207 #, python-format msgid "%(msg_ip)s and %(msg_subnet)s" msgstr "" -#: neutron/extensions/firewall.py:315 +#: neutron/extensions/firewall.py:328 msgid "Number of firewalls allowed per tenant. A negative value means unlimited." msgstr "" -#: neutron/extensions/firewall.py:319 +#: neutron/extensions/firewall.py:332 msgid "" "Number of firewall policies allowed per tenant. A negative value means " "unlimited." msgstr "" -#: neutron/extensions/firewall.py:323 +#: neutron/extensions/firewall.py:336 msgid "" "Number of firewall rules allowed per tenant. A negative value means " "unlimited." @@ -4907,7 +4907,7 @@ msgstr "" #: neutron/plugins/bigswitch/agent/restproxy_agent.py:160 #: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:223 -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:1011 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:1010 #: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1461 #: neutron/plugins/ryu/agent/ryu_neutron_agent.py:276 #: neutron/plugins/sriovnicagent/sriov_nic_agent.py:285 @@ -4971,35 +4971,35 @@ msgstr "" msgid "Duplicate router rules (src,dst) found '%s'" msgstr "" -#: neutron/plugins/brocade/NeutronPlugin.py:60 +#: neutron/plugins/brocade/NeutronPlugin.py:59 #: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:31 #: neutron/services/l3_router/brocade/l3_router_plugin.py:36 msgid "The address of the host to SSH to" msgstr "" -#: neutron/plugins/brocade/NeutronPlugin.py:62 +#: neutron/plugins/brocade/NeutronPlugin.py:61 #: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:33 #: neutron/services/l3_router/brocade/l3_router_plugin.py:38 msgid "The SSH username to use" msgstr "" -#: neutron/plugins/brocade/NeutronPlugin.py:64 +#: neutron/plugins/brocade/NeutronPlugin.py:63 #: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:35 #: neutron/services/l3_router/brocade/l3_router_plugin.py:40 msgid "The SSH password to use" msgstr "" -#: neutron/plugins/brocade/NeutronPlugin.py:66 +#: neutron/plugins/brocade/NeutronPlugin.py:65 msgid "Currently unused" msgstr "" -#: neutron/plugins/brocade/NeutronPlugin.py:70 +#: neutron/plugins/brocade/NeutronPlugin.py:69 msgid "The network interface to use when creatinga port" msgstr "" -#: neutron/plugins/brocade/NeutronPlugin.py:92 +#: neutron/plugins/brocade/NeutronPlugin.py:91 #: neutron/plugins/hyperv/rpc_callbacks.py:41 -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:71 +#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:69 #: neutron/plugins/mlnx/rpc_callbacks.py:37 #: neutron/plugins/openvswitch/ovs_neutron_plugin.py:80 #, python-format @@ -5010,9 +5010,9 @@ msgstr "" #: neutron/plugins/brocade/NeutronPlugin.py:133 #: neutron/plugins/hyperv/rpc_callbacks.py:57 #: neutron/plugins/hyperv/rpc_callbacks.py:86 -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:95 -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:132 -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:155 +#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:93 +#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:130 +#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:153 #: neutron/plugins/mlnx/rpc_callbacks.py:60 #: neutron/plugins/mlnx/rpc_callbacks.py:90 #: neutron/plugins/mlnx/rpc_callbacks.py:106 @@ -6307,16 +6307,16 @@ msgid "No policy profile populated from VSM" msgstr "" #: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:207 -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:342 -#: neutron/plugins/mlnx/mlnx_plugin.py:226 neutron/plugins/nuage/plugin.py:415 +#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:340 +#: neutron/plugins/mlnx/mlnx_plugin.py:223 neutron/plugins/nuage/plugin.py:419 #: neutron/plugins/openvswitch/ovs_neutron_plugin.py:414 msgid "provider:network_type required" msgstr "" #: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:211 #: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:225 -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:352 -#: neutron/plugins/mlnx/mlnx_plugin.py:256 neutron/plugins/nuage/plugin.py:425 +#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:350 +#: neutron/plugins/mlnx/mlnx_plugin.py:253 neutron/plugins/nuage/plugin.py:429 #: neutron/plugins/openvswitch/ovs_neutron_plugin.py:424 #: neutron/plugins/openvswitch/ovs_neutron_plugin.py:443 msgid "provider:segmentation_id required" @@ -6335,24 +6335,24 @@ msgid "provider:segmentation_id out of range (5000+)" msgstr "" #: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:232 -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:374 -#: neutron/plugins/mlnx/mlnx_plugin.py:242 +#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:372 +#: neutron/plugins/mlnx/mlnx_plugin.py:239 #: neutron/plugins/openvswitch/ovs_neutron_plugin.py:459 #, python-format msgid "provider:network_type %s not supported" msgstr "" #: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:243 -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:380 -#: neutron/plugins/mlnx/mlnx_plugin.py:282 +#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:378 +#: neutron/plugins/mlnx/mlnx_plugin.py:279 #: neutron/plugins/openvswitch/ovs_neutron_plugin.py:465 #, python-format msgid "Unknown provider:physical_network %s" msgstr "" #: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:247 -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:386 -#: neutron/plugins/mlnx/mlnx_plugin.py:288 neutron/plugins/nuage/plugin.py:422 +#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:384 +#: neutron/plugins/mlnx/mlnx_plugin.py:285 neutron/plugins/nuage/plugin.py:426 #: neutron/plugins/openvswitch/ovs_neutron_plugin.py:471 msgid "provider:physical_network required" msgstr "" @@ -6511,7 +6511,7 @@ msgstr "" #: neutron/plugins/hyperv/hyperv_neutron_plugin.py:254 #: neutron/plugins/ibm/sdnve_neutron_plugin.py:196 #: neutron/plugins/metaplugin/meta_neutron_plugin.py:226 -#: neutron/plugins/mlnx/mlnx_plugin.py:369 +#: neutron/plugins/mlnx/mlnx_plugin.py:366 #: neutron/plugins/openvswitch/ovs_neutron_plugin.py:519 #, python-format msgid "Created network: %s" @@ -6847,9 +6847,9 @@ msgid "Invalid tenant_network_type: %s. Agent terminated!" msgstr "" #: neutron/plugins/hyperv/hyperv_neutron_plugin.py:203 -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:303 +#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:301 #: neutron/plugins/ml2/drivers/type_vlan.py:96 -#: neutron/plugins/mlnx/mlnx_plugin.py:187 +#: neutron/plugins/mlnx/mlnx_plugin.py:184 #: neutron/plugins/openvswitch/ovs_neutron_plugin.py:366 #, python-format msgid "Network VLAN ranges: %s" @@ -6861,7 +6861,7 @@ msgid "Network type %s not supported" msgstr "" #: neutron/plugins/hyperv/rpc_callbacks.py:75 -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:114 +#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:112 #: neutron/plugins/mlnx/rpc_callbacks.py:77 #: neutron/plugins/openvswitch/ovs_neutron_plugin.py:117 #, python-format @@ -7015,7 +7015,7 @@ msgid "Removing port failed for device %(device)s: %(e)s" msgstr "" #: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:434 -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:994 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:993 #: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1353 #: neutron/plugins/sriovnicagent/sriov_nic_agent.py:254 msgid "Agent out of sync with plugin!" @@ -7038,7 +7038,7 @@ msgstr "" #: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:470 #: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:266 -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:1035 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:1034 #: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1545 #: neutron/plugins/sriovnicagent/sriov_nic_agent.py:350 msgid "Agent initialized successfully, now running... " @@ -7684,8 +7684,8 @@ msgstr "" msgid "The input does not contain nececessary info: %(msg)s" msgstr "" -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:123 -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:147 +#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:121 +#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:145 #: neutron/plugins/ml2/rpc.py:130 neutron/plugins/ml2/rpc.py:154 #: neutron/plugins/openvswitch/ovs_neutron_plugin.py:125 #: neutron/plugins/openvswitch/ovs_neutron_plugin.py:150 @@ -7693,259 +7693,259 @@ msgstr "" msgid "Device %(device)s not bound to the agent host %(host)s" msgstr "" -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:140 +#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:138 #: neutron/plugins/openvswitch/ovs_neutron_plugin.py:144 #, python-format msgid "Device %(device)s up on %(agent_id)s" msgstr "" -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:261 -#: neutron/plugins/mlnx/mlnx_plugin.py:207 +#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:259 +#: neutron/plugins/mlnx/mlnx_plugin.py:204 #, python-format msgid "Invalid tenant_network_type: %s. Service terminated!" msgstr "" -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:272 +#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:270 msgid "Linux Bridge Plugin initialization complete" msgstr "" -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:301 +#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:299 #, python-format msgid "%s. Agent terminated!" msgstr "" -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:346 -#: neutron/plugins/mlnx/mlnx_plugin.py:251 +#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:344 +#: neutron/plugins/mlnx/mlnx_plugin.py:248 #: neutron/plugins/openvswitch/ovs_neutron_plugin.py:418 msgid "provider:segmentation_id specified for flat network" msgstr "" -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:355 -#: neutron/plugins/mlnx/mlnx_plugin.py:259 +#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:353 +#: neutron/plugins/mlnx/mlnx_plugin.py:256 #: neutron/plugins/openvswitch/ovs_neutron_plugin.py:427 #, python-format msgid "provider:segmentation_id out of range (%(min_id)s through %(max_id)s)" msgstr "" -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:362 -#: neutron/plugins/mlnx/mlnx_plugin.py:267 +#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:360 +#: neutron/plugins/mlnx/mlnx_plugin.py:264 #: neutron/plugins/openvswitch/ovs_neutron_plugin.py:447 msgid "provider:physical_network specified for local network" msgstr "" -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:368 -#: neutron/plugins/mlnx/mlnx_plugin.py:271 +#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:366 +#: neutron/plugins/mlnx/mlnx_plugin.py:268 #: neutron/plugins/openvswitch/ovs_neutron_plugin.py:453 msgid "provider:segmentation_id specified for local network" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:82 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:81 msgid "VXLAN is enabled, a valid local_ip must be provided" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:96 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:95 msgid "Invalid Network ID, will lead to incorrect bridgename" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:103 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:102 msgid "Invalid VLAN ID, will lead to incorrect subinterface name" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:110 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:109 msgid "Invalid Interface ID, will lead to incorrect tap device name" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:119 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:118 #, python-format msgid "Invalid Segmentation ID: %s, will lead to incorrect vxlan device name" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:182 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:181 #, python-format msgid "Failed creating vxlan interface for %(segmentation_id)s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:214 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:213 #, python-format msgid "" "Creating subinterface %(interface)s for VLAN %(vlan_id)s on interface " "%(physical_interface)s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:227 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:226 #, python-format msgid "Done creating subinterface %s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:234 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:233 #, python-format msgid "Creating vxlan interface %(interface)s for VNI %(segmentation_id)s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:249 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:248 #, python-format msgid "Done creating vxlan interface %s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:303 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:302 #, python-format msgid "Starting bridge %(bridge_name)s for subinterface %(interface)s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:318 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:317 #, python-format msgid "Done starting bridge %(bridge_name)s for subinterface %(interface)s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:340 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:339 #, python-format msgid "Unable to add %(interface)s to %(bridge_name)s! Exception: %(e)s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:353 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:352 #, python-format msgid "Unable to add vxlan interface for network %s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:360 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:359 #, python-format msgid "No mapping for physical network %s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:369 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:368 #, python-format msgid "Unknown network_type %(network_type)s for network %(network_id)s." msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:381 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:380 #, python-format msgid "Tap device: %s does not exist on this host, skipped" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:399 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:398 #, python-format msgid "Adding device %(tap_device_name)s to bridge %(bridge_name)s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:408 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:407 #, python-format msgid "%(tap_device_name)s already exists on bridge %(bridge_name)s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:446 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:445 #, python-format msgid "Deleting bridge %s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:453 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:452 #, python-format msgid "Done deleting bridge %s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:456 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:455 #, python-format msgid "Cannot delete bridge %s, does not exist" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:470 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:469 #, python-format msgid "Removing device %(interface_name)s from bridge %(bridge_name)s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:477 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:476 #, python-format msgid "Done removing device %(interface_name)s from bridge %(bridge_name)s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:483 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:482 #, python-format msgid "" "Cannot remove device %(interface_name)s bridge %(bridge_name)s does not " "exist" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:491 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:490 #, python-format msgid "Deleting subinterface %s for vlan" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:498 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:497 #, python-format msgid "Done deleting subinterface %s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:502 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:501 #, python-format msgid "Deleting vxlan interface %s for vlan" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:507 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:506 #, python-format msgid "Done deleting vxlan interface %s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:521 -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:555 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:520 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:554 #, python-format msgid "" "Option \"%(option)s\" must be supported by command \"%(command)s\" to " "enable %(mode)s mode" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:532 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:531 msgid "No valid Segmentation ID to perform UCAST test." msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:549 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:548 msgid "" "VXLAN muticast group must be provided in vxlan_group option to enable " "VXLAN MCAST mode" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:574 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:573 msgid "" "Linux kernel vxlan module and iproute2 3.8 or above are required to " "enable VXLAN." msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:584 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:583 #, python-format msgid "Using %s VXLAN mode" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:661 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:660 #: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:163 #: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:300 msgid "network_delete received" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:675 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:674 #: neutron/plugins/sriovnicagent/sriov_nic_agent.py:66 #, python-format msgid "port_update RPC received for port: %s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:678 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:677 msgid "fdb_add received" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:700 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:699 msgid "fdb_remove received" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:722 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:721 msgid "update chg_ip received" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:747 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:746 msgid "fdb_update received" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:804 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:803 msgid "Unable to obtain MAC address for unique ID. Agent terminated!" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:808 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:807 #: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:220 #: neutron/plugins/nec/agent/nec_neutron_agent.py:142 #: neutron/plugins/oneconvergence/agent/nvsd_neutron_agent.py:107 @@ -7954,15 +7954,15 @@ msgstr "" msgid "RPC agent_id: %s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:879 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:878 #: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1103 #: neutron/plugins/sriovnicagent/sriov_nic_agent.py:213 #, python-format msgid "Port %(device)s updated. Details: %(details)s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:912 -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:933 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:911 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:932 #: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:354 #: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1129 #: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1190 @@ -7971,21 +7971,21 @@ msgstr "" msgid "Device %s not defined on plugin" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:919 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:918 #: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1158 #: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1175 #, python-format msgid "Attachment %s removed" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:927 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:926 #: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1165 #: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1182 #, python-format msgid "port_removed failed for %(device)s: %(e)s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:931 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:930 #: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:352 #: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1187 #: neutron/plugins/sriovnicagent/sriov_nic_agent.py:238 @@ -7993,29 +7993,29 @@ msgstr "" msgid "Port %s updated." msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:984 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:983 msgid "LinuxBridge Agent RPC Daemon Started!" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:998 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:997 #: neutron/plugins/sriovnicagent/sriov_nic_agent.py:267 #, python-format msgid "Agent loop found changes! %s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:1002 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:1001 #: neutron/plugins/sriovnicagent/sriov_nic_agent.py:273 #, python-format msgid "Error in agent loop. Devices info: %s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:1025 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:1024 #: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:407 #, python-format msgid "Parsing physical_interface_mappings failed: %s. Agent terminated!" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:1028 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:1027 #: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:410 #, python-format msgid "Interface mappings: %s" @@ -8742,7 +8742,7 @@ msgid "Added segment %(id)s of type %(network_type)s for network %(network_id)s" msgstr "" #: neutron/plugins/ml2/db.py:197 neutron/plugins/ml2/db.py:249 -#: neutron/plugins/ml2/plugin.py:1029 +#: neutron/plugins/ml2/plugin.py:1046 #, python-format msgid "Multiple ports have port_id starting with %s" msgstr "" @@ -8894,163 +8894,163 @@ msgstr "" msgid "Extended port dict for driver '%(drv)s'" msgstr "" -#: neutron/plugins/ml2/plugin.py:138 +#: neutron/plugins/ml2/plugin.py:135 msgid "Modular L2 Plugin initialization complete" msgstr "" -#: neutron/plugins/ml2/plugin.py:197 +#: neutron/plugins/ml2/plugin.py:205 msgid "binding:profile value too large" msgstr "" -#: neutron/plugins/ml2/plugin.py:253 +#: neutron/plugins/ml2/plugin.py:261 #, python-format msgid "Failed to commit binding results for %(port)s after %(max)s tries" msgstr "" -#: neutron/plugins/ml2/plugin.py:259 +#: neutron/plugins/ml2/plugin.py:267 #, python-format msgid "Attempt %(count)s to bind port %(port)s" msgstr "" -#: neutron/plugins/ml2/plugin.py:385 +#: neutron/plugins/ml2/plugin.py:393 #, python-format msgid "Serialized vif_details DB value '%(value)s' for port %(port)s is invalid" msgstr "" -#: neutron/plugins/ml2/plugin.py:396 +#: neutron/plugins/ml2/plugin.py:404 #, python-format msgid "Serialized profile DB value '%(value)s' for port %(port)s is invalid" msgstr "" -#: neutron/plugins/ml2/plugin.py:465 +#: neutron/plugins/ml2/plugin.py:473 #, python-format msgid "" "In _notify_port_updated(), no bound segment for port %(port_id)s on " "network %(network_id)s" msgstr "" -#: neutron/plugins/ml2/plugin.py:499 +#: neutron/plugins/ml2/plugin.py:507 #, python-format msgid "mechanism_manager.create_network_postcommit failed, deleting network '%s'" msgstr "" -#: neutron/plugins/ml2/plugin.py:562 +#: neutron/plugins/ml2/plugin.py:570 #, python-format msgid "Deleting network %s" msgstr "" -#: neutron/plugins/ml2/plugin.py:583 +#: neutron/plugins/ml2/plugin.py:591 #, python-format msgid "Ports to auto-delete: %s" msgstr "" -#: neutron/plugins/ml2/plugin.py:589 neutron/plugins/ml2/plugin.py:717 +#: neutron/plugins/ml2/plugin.py:597 neutron/plugins/ml2/plugin.py:725 msgid "Tenant-owned ports exist" msgstr "" -#: neutron/plugins/ml2/plugin.py:597 +#: neutron/plugins/ml2/plugin.py:605 #, python-format msgid "Subnets to auto-delete: %s" msgstr "" -#: neutron/plugins/ml2/plugin.py:609 +#: neutron/plugins/ml2/plugin.py:617 #, python-format msgid "Deleting network record %s" msgstr "" -#: neutron/plugins/ml2/plugin.py:614 neutron/plugins/ml2/plugin.py:729 +#: neutron/plugins/ml2/plugin.py:622 neutron/plugins/ml2/plugin.py:737 msgid "Committing transaction" msgstr "" -#: neutron/plugins/ml2/plugin.py:620 +#: neutron/plugins/ml2/plugin.py:628 msgid "A concurrent port creation has occurred" msgstr "" -#: neutron/plugins/ml2/plugin.py:629 -#, python-format -msgid "Exception auto-deleting port %s" -msgstr "" - #: neutron/plugins/ml2/plugin.py:637 #, python-format +msgid "Exception auto-deleting port %s" +msgstr "" + +#: neutron/plugins/ml2/plugin.py:645 +#, python-format msgid "Exception auto-deleting subnet %s" msgstr "" -#: neutron/plugins/ml2/plugin.py:646 +#: neutron/plugins/ml2/plugin.py:654 msgid "mechanism_manager.delete_network_postcommit failed" msgstr "" -#: neutron/plugins/ml2/plugin.py:662 +#: neutron/plugins/ml2/plugin.py:670 #, python-format msgid "mechanism_manager.create_subnet_postcommit failed, deleting subnet '%s'" msgstr "" -#: neutron/plugins/ml2/plugin.py:694 +#: neutron/plugins/ml2/plugin.py:702 #, python-format msgid "Deleting subnet %s" msgstr "" -#: neutron/plugins/ml2/plugin.py:711 +#: neutron/plugins/ml2/plugin.py:719 #, python-format msgid "Ports to auto-deallocate: %s" msgstr "" -#: neutron/plugins/ml2/plugin.py:726 +#: neutron/plugins/ml2/plugin.py:734 msgid "Deleting subnet record" msgstr "" -#: neutron/plugins/ml2/plugin.py:745 +#: neutron/plugins/ml2/plugin.py:753 #, python-format msgid "Exception deleting fixed_ip from port %s" msgstr "" -#: neutron/plugins/ml2/plugin.py:755 +#: neutron/plugins/ml2/plugin.py:763 msgid "mechanism_manager.delete_subnet_postcommit failed" msgstr "" -#: neutron/plugins/ml2/plugin.py:787 -#, python-format -msgid "mechanism_manager.create_port_postcommit failed, deleting port '%s'" -msgstr "" - #: neutron/plugins/ml2/plugin.py:799 #, python-format +msgid "mechanism_manager.create_port_postcommit failed, deleting port '%s'" +msgstr "" + +#: neutron/plugins/ml2/plugin.py:811 +#, python-format msgid "_bind_port_if_needed failed, deleting port '%s'" msgstr "" -#: neutron/plugins/ml2/plugin.py:881 +#: neutron/plugins/ml2/plugin.py:897 #, python-format msgid "No Host supplied to bind DVR Port %s" msgstr "" -#: neutron/plugins/ml2/plugin.py:945 -#: neutron/tests/unit/ml2/test_ml2_plugin.py:144 +#: neutron/plugins/ml2/plugin.py:961 +#: neutron/tests/unit/ml2/test_ml2_plugin.py:146 #, python-format msgid "Deleting port %s" msgstr "" -#: neutron/plugins/ml2/plugin.py:965 -#: neutron/tests/unit/ml2/test_ml2_plugin.py:145 +#: neutron/plugins/ml2/plugin.py:981 +#: neutron/tests/unit/ml2/test_ml2_plugin.py:147 #, python-format msgid "The port '%s' was deleted" msgstr "" -#: neutron/plugins/ml2/plugin.py:1014 +#: neutron/plugins/ml2/plugin.py:1031 #, python-format msgid "mechanism_manager.delete_port_postcommit failed for port %s" msgstr "" -#: neutron/plugins/ml2/plugin.py:1038 +#: neutron/plugins/ml2/plugin.py:1055 #, python-format msgid "Binding info for DVR port %s not found" msgstr "" -#: neutron/plugins/ml2/plugin.py:1064 +#: neutron/plugins/ml2/plugin.py:1081 #, python-format msgid "Port %(port)s updated up by agent not found" msgstr "" -#: neutron/plugins/ml2/plugin.py:1094 +#: neutron/plugins/ml2/plugin.py:1111 #, python-format msgid "Port %s not found during update" msgstr "" @@ -9095,7 +9095,6 @@ msgid "" msgstr "" #: neutron/plugins/ml2/drivers/mech_agent.py:54 -#: neutron/plugins/ml2/drivers/mechanism_odl.py:325 #, python-format msgid "Attempting to bind port %(port)s on network %(network)s" msgstr "" @@ -9111,7 +9110,6 @@ msgid "Checking agent: %s" msgstr "" #: neutron/plugins/ml2/drivers/mech_agent.py:70 -#: neutron/plugins/ml2/drivers/mechanism_odl.py:335 #, python-format msgid "Bound using segment: %s" msgstr "" @@ -9140,56 +9138,28 @@ msgid "HTTP URL of Tail-f NCS REST interface." msgstr "" #: neutron/plugins/ml2/drivers/mechanism_ncs.py:31 -#: neutron/plugins/ml2/drivers/mechanism_odl.py:44 +#: neutron/plugins/ml2/drivers/mechanism_odl.py:41 msgid "HTTP username for authentication" msgstr "" #: neutron/plugins/ml2/drivers/mechanism_ncs.py:33 -#: neutron/plugins/ml2/drivers/mechanism_odl.py:46 +#: neutron/plugins/ml2/drivers/mechanism_odl.py:43 msgid "HTTP password for authentication" msgstr "" #: neutron/plugins/ml2/drivers/mechanism_ncs.py:35 -#: neutron/plugins/ml2/drivers/mechanism_odl.py:48 +#: neutron/plugins/ml2/drivers/mechanism_odl.py:45 msgid "HTTP timeout in seconds." msgstr "" -#: neutron/plugins/ml2/drivers/mechanism_odl.py:42 +#: neutron/plugins/ml2/drivers/mechanism_odl.py:39 msgid "HTTP URL of OpenDaylight REST interface." msgstr "" -#: neutron/plugins/ml2/drivers/mechanism_odl.py:50 +#: neutron/plugins/ml2/drivers/mechanism_odl.py:47 msgid "Tomcat session timeout in minutes." msgstr "" -#: neutron/plugins/ml2/drivers/mechanism_odl.py:100 -#, python-format -msgid "Failed to authenticate with OpenDaylight: %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/mechanism_odl.py:103 -#, python-format -msgid "Authentication Timed Out: %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/mechanism_odl.py:313 -#, python-format -msgid "ODL-----> sending URL (%s) <-----ODL" -msgstr "" - -#: neutron/plugins/ml2/drivers/mechanism_odl.py:314 -#, python-format -msgid "ODL-----> sending JSON (%s) <-----ODL" -msgstr "" - -#: neutron/plugins/ml2/drivers/mechanism_odl.py:338 -#: neutron/plugins/ml2/drivers/mech_nuage/driver.py:91 -#, python-format -msgid "" -"Refusing to bind port for segment ID %(id)s, segment %(seg)s, phys net " -"%(physnet)s, and network type %(nettype)s" -msgstr "" - #: neutron/plugins/ml2/drivers/type_flat.py:31 msgid "" "List of physical_network names with which flat networks can be created. " @@ -10032,6 +10002,13 @@ msgstr "" msgid "Expired cache entry for host %s" msgstr "" +#: neutron/plugins/ml2/drivers/mech_nuage/driver.py:91 +#, python-format +msgid "" +"Refusing to bind port for segment ID %(id)s, segment %(seg)s, phys net " +"%(physnet)s, and network type %(nettype)s" +msgstr "" + #: neutron/plugins/ml2/drivers/mech_sriov/mech_driver.py:31 msgid "" "Supported PCI vendor devices, defined by vendor_id:product_id according " @@ -10084,60 +10061,60 @@ msgstr "" msgid "Sending update port message" msgstr "" -#: neutron/plugins/mlnx/mlnx_plugin.py:121 +#: neutron/plugins/mlnx/mlnx_plugin.py:118 msgid "Mellanox Embedded Switch Plugin initialisation complete" msgstr "" -#: neutron/plugins/mlnx/mlnx_plugin.py:161 +#: neutron/plugins/mlnx/mlnx_plugin.py:158 #, python-format msgid "Invalid physical network type %(type)s.Server terminated!" msgstr "" -#: neutron/plugins/mlnx/mlnx_plugin.py:168 +#: neutron/plugins/mlnx/mlnx_plugin.py:165 #, python-format msgid "Parsing physical_network_type failed: %s. Server terminated!" msgstr "" -#: neutron/plugins/mlnx/mlnx_plugin.py:173 +#: neutron/plugins/mlnx/mlnx_plugin.py:170 #, python-format msgid "" "Invalid physical network type %(type)s for network %(net)s. Server " "terminated!" msgstr "" -#: neutron/plugins/mlnx/mlnx_plugin.py:177 +#: neutron/plugins/mlnx/mlnx_plugin.py:174 #, python-format msgid "Physical Network type mappings: %s" msgstr "" -#: neutron/plugins/mlnx/mlnx_plugin.py:185 +#: neutron/plugins/mlnx/mlnx_plugin.py:182 #: neutron/plugins/openvswitch/ovs_neutron_plugin.py:364 #, python-format msgid "%s. Server terminated!" msgstr "" -#: neutron/plugins/mlnx/mlnx_plugin.py:323 +#: neutron/plugins/mlnx/mlnx_plugin.py:320 #, python-format msgid "Unsupported vnic type %(vnic_type)s for physical network type %(net_type)s" msgstr "" -#: neutron/plugins/mlnx/mlnx_plugin.py:327 +#: neutron/plugins/mlnx/mlnx_plugin.py:324 msgid "Invalid vnic_type on port_create" msgstr "" -#: neutron/plugins/mlnx/mlnx_plugin.py:329 +#: neutron/plugins/mlnx/mlnx_plugin.py:326 msgid "vnic_type is not defined in port profile" msgstr "" -#: neutron/plugins/mlnx/mlnx_plugin.py:373 +#: neutron/plugins/mlnx/mlnx_plugin.py:370 msgid "Update network" msgstr "" -#: neutron/plugins/mlnx/mlnx_plugin.py:386 +#: neutron/plugins/mlnx/mlnx_plugin.py:383 msgid "Delete network" msgstr "" -#: neutron/plugins/mlnx/mlnx_plugin.py:434 +#: neutron/plugins/mlnx/mlnx_plugin.py:431 #, python-format msgid "create_port with %s" msgstr "" @@ -10910,145 +10887,145 @@ msgid "" "or clear protocol before changing ether type." msgstr "" -#: neutron/plugins/nuage/plugin.py:110 +#: neutron/plugins/nuage/plugin.py:113 #, python-format msgid "%(resource)s with id %(resource_id)s does not exist" msgstr "" -#: neutron/plugins/nuage/plugin.py:119 +#: neutron/plugins/nuage/plugin.py:122 #, python-format msgid "" "Either %(resource)s %(req_resource)s not found or you dont have " "credential to access it" msgstr "" -#: neutron/plugins/nuage/plugin.py:125 +#: neutron/plugins/nuage/plugin.py:128 #, python-format msgid "" "More than one entry found for %(resource)s %(req_resource)s. Use id " "instead" msgstr "" -#: neutron/plugins/nuage/plugin.py:155 +#: neutron/plugins/nuage/plugin.py:158 #, python-format msgid "Router for subnet %s not found " msgstr "" -#: neutron/plugins/nuage/plugin.py:272 +#: neutron/plugins/nuage/plugin.py:275 #, python-format msgid "Subnet %s not found on VSD" msgstr "" -#: neutron/plugins/nuage/plugin.py:418 +#: neutron/plugins/nuage/plugin.py:422 #, python-format msgid "provider:network_type %s not supported in VSP" msgstr "" -#: neutron/plugins/nuage/plugin.py:463 +#: neutron/plugins/nuage/plugin.py:469 msgid "External network with subnets can not be changed to non-external network" msgstr "" -#: neutron/plugins/nuage/plugin.py:541 +#: neutron/plugins/nuage/plugin.py:530 msgid "" "Either net_partition is not provided with subnet OR default net_partition" " is not created at the start" msgstr "" -#: neutron/plugins/nuage/plugin.py:558 +#: neutron/plugins/nuage/plugin.py:547 #, python-format msgid "Only one subnet is allowed per Provider network %s" msgstr "" -#: neutron/plugins/nuage/plugin.py:569 +#: neutron/plugins/nuage/plugin.py:558 #, python-format msgid "Only one subnet is allowed per external network %s" msgstr "" -#: neutron/plugins/nuage/plugin.py:705 +#: neutron/plugins/nuage/plugin.py:694 #, python-format msgid "" "Unable to complete operation on subnet %s.One or more ports have an IP " "allocation from this subnet." msgstr "" -#: neutron/plugins/nuage/plugin.py:732 +#: neutron/plugins/nuage/plugin.py:721 #, python-format msgid "" "Router %s does not hold default zone OR domain in VSD. Router-IF add " "failed" msgstr "" -#: neutron/plugins/nuage/plugin.py:744 +#: neutron/plugins/nuage/plugin.py:733 #, python-format msgid "Subnet %s does not hold Nuage VSD reference. Router-IF add failed" msgstr "" -#: neutron/plugins/nuage/plugin.py:754 +#: neutron/plugins/nuage/plugin.py:743 #, python-format msgid "" "Subnet %(subnet)s and Router %(router)s belong to different net_partition" " Router-IF add not permitted" msgstr "" -#: neutron/plugins/nuage/plugin.py:765 +#: neutron/plugins/nuage/plugin.py:754 #, python-format msgid "Subnet %s has one or more active VMs Router-IF add not permitted" msgstr "" -#: neutron/plugins/nuage/plugin.py:817 neutron/plugins/nuage/plugin.py:822 -#: neutron/plugins/nuage/plugin.py:828 +#: neutron/plugins/nuage/plugin.py:806 neutron/plugins/nuage/plugin.py:811 +#: neutron/plugins/nuage/plugin.py:817 #, python-format msgid "No router interface found for Router %s. Router-IF delete failed" msgstr "" -#: neutron/plugins/nuage/plugin.py:844 +#: neutron/plugins/nuage/plugin.py:833 #, python-format msgid "Subnet %s has one or more active VMs Router-IF delete not permitted" msgstr "" -#: neutron/plugins/nuage/plugin.py:853 +#: neutron/plugins/nuage/plugin.py:842 #, python-format msgid "" "Router %s does not hold net_partition assoc on Nuage VSD. Router-IF " "delete failed" msgstr "" -#: neutron/plugins/nuage/plugin.py:894 +#: neutron/plugins/nuage/plugin.py:883 msgid "" "Either net_partition is not provided with router OR default net_partition" " is not created at the start" msgstr "" -#: neutron/plugins/nuage/plugin.py:935 +#: neutron/plugins/nuage/plugin.py:924 msgid "for same subnet, multiple static routes not allowed" msgstr "" -#: neutron/plugins/nuage/plugin.py:952 +#: neutron/plugins/nuage/plugin.py:941 #, python-format msgid "Router %s does not hold net-partition assoc on VSD. extra-route failed" msgstr "" -#: neutron/plugins/nuage/plugin.py:1069 +#: neutron/plugins/nuage/plugin.py:1057 #, python-format msgid "One or more router still attached to net_partition %s." msgstr "" -#: neutron/plugins/nuage/plugin.py:1074 +#: neutron/plugins/nuage/plugin.py:1062 #, python-format msgid "NetPartition with %s does not exist" msgstr "" -#: neutron/plugins/nuage/plugin.py:1116 +#: neutron/plugins/nuage/plugin.py:1104 #, python-format msgid "sharedresource %s not found on VSD" msgstr "" -#: neutron/plugins/nuage/plugin.py:1123 neutron/plugins/nuage/plugin.py:1273 +#: neutron/plugins/nuage/plugin.py:1111 neutron/plugins/nuage/plugin.py:1261 #, python-format msgid "router %s is not associated with any net-partition" msgstr "" -#: neutron/plugins/nuage/plugin.py:1156 +#: neutron/plugins/nuage/plugin.py:1144 msgid "Floating IP can not be associated to VM in different router context" msgstr "" @@ -11645,16 +11622,16 @@ msgstr "" #: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1029 #: neutron/tests/unit/ofagent/test_ofa_neutron_agent.py:799 -#: neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py:1271 +#: neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py:1274 msgid "ofport should have a value that can be interpreted as an integer" msgstr "" #: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1032 #: neutron/tests/unit/ofagent/test_ofa_neutron_agent.py:782 #: neutron/tests/unit/ofagent/test_ofa_neutron_agent.py:802 -#: neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py:1254 -#: neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py:1274 -#: neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py:1291 +#: neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py:1257 +#: neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py:1277 +#: neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py:1294 #, python-format msgid "Failed to set-up %(type)s tunnel port to %(ip)s" msgstr "" @@ -13555,11 +13532,6 @@ msgstr "" msgid "Unable to process default l2 gw service:%s" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:248 -#, python-format -msgid "Created NSX router port:%s" -msgstr "" - #: neutron/plugins/vmware/plugins/base.py:250 #: neutron/plugins/vmware/plugins/service.py:439 #, python-format @@ -13573,11 +13545,6 @@ msgid "" "router %(nsx_router_id)s" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:332 -#, python-format -msgid "Attached %(att)s to NSX router port %(port)s" -msgstr "" - #: neutron/plugins/vmware/plugins/base.py:338 #, python-format msgid "" @@ -13612,13 +13579,6 @@ msgid "" "%s will be down." msgstr "" -#: neutron/plugins/vmware/plugins/base.py:463 -#, python-format -msgid "" -"_nsx_create_port completed for port %(name)s on network %(network_id)s. " -"The new port id is %(id)s." -msgstr "" - #: neutron/plugins/vmware/plugins/base.py:474 #, python-format msgid "" @@ -13626,21 +13586,6 @@ msgid "" "to be rolled back for Neutron port: %(neutron_id)s" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:486 -#, python-format -msgid "NSX Port %s already gone" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:501 -#, python-format -msgid "Port '%s' was already deleted on NSX platform" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:508 -#, python-format -msgid "_nsx_delete_port completed for port %(port_id)s on network %(net_id)s" -msgstr "" - #: neutron/plugins/vmware/plugins/base.py:513 #, python-format msgid "Port %s not found in NSX" @@ -13668,13 +13613,6 @@ msgid "" "as '%s'" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:574 -#, python-format -msgid "" -"_nsx_create_router_port completed for port %(name)s on network " -"%(network_id)s. The new port id is %(id)s." -msgstr "" - #: neutron/plugins/vmware/plugins/base.py:587 #, python-format msgid "" @@ -13687,13 +13625,6 @@ msgstr "" msgid "The gateway port for the NSX router %s was not found on the backend" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:638 -#, python-format -msgid "" -"_nsx_create_ext_gw_port completed on external network %(ext_net_id)s, " -"attached to router:%(router_id)s. NSX port id is %(nsx_port_id)s" -msgstr "" - #: neutron/plugins/vmware/plugins/base.py:673 #: neutron/plugins/vmware/plugins/base.py:1749 #, python-format @@ -13705,20 +13636,6 @@ msgstr "" msgid "Unable to update logical routeron NSX Platform" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:679 -#, python-format -msgid "" -"_nsx_delete_ext_gw_port completed on external network %(ext_net_id)s, " -"attached to NSX router:%(router_id)s" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:721 -#, python-format -msgid "" -"_nsx_create_l2_gw_port completed for port %(name)s on network " -"%(network_id)s. The new port id is %(id)s." -msgstr "" - #: neutron/plugins/vmware/plugins/base.py:765 #, python-format msgid "%s required" @@ -13743,11 +13660,6 @@ msgstr "" msgid "%(net_type_param)s %(net_type_value)s not supported" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:849 -#, python-format -msgid "No switch has available ports (%d checked)" -msgstr "" - #: neutron/plugins/vmware/plugins/base.py:883 #, python-format msgid "Maximum number of logical ports reached for logical network %s" @@ -13781,11 +13693,6 @@ msgid "" "id:%(net_id)s; NSX lswitch id:%(lswitch_id)s;Error:%(error)s" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1148 -#, python-format -msgid "port created on NSX backend for tenant %(tenant_id)s: (%(id)s)" -msgstr "" - #: neutron/plugins/vmware/plugins/base.py:1151 #, python-format msgid "Logical switch for network %s was not found in NSX." @@ -13795,11 +13702,6 @@ msgstr "" msgid "Unable to create port or set port attachment in NSX." msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1250 -#, python-format -msgid "Updating port: %s" -msgstr "" - #: neutron/plugins/vmware/plugins/base.py:1285 #, python-format msgid "Unable to update port id: %s." @@ -13885,13 +13787,6 @@ msgid "" "the following exception:%(d_exc)s" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1686 -#, python-format -msgid "" -"Add_router_interface completed for subnet:%(subnet_id)s and " -"router:%(router_id)s" -msgstr "" - #: neutron/plugins/vmware/plugins/base.py:1785 #, python-format msgid "" @@ -13914,11 +13809,6 @@ msgstr "" msgid "Failed to update NAT rules for floatingip update" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1977 -#, python-format -msgid "The port '%s' is not associated with floating IPs" -msgstr "" - #: neutron/plugins/vmware/plugins/base.py:1980 #, python-format msgid "Nat rules not found in nsx for port: %s" @@ -13940,14 +13830,6 @@ msgstr "" msgid "Unable to update name on NSX backend for network gateway: %s" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:2144 -#: neutron/plugins/vmware/plugins/base.py:2182 -#, python-format -msgid "" -"Neutron gateway device: %(neutron_id)s; NSX transport node identifier: " -"%(nsx_id)s; Operational status: %(status)s." -msgstr "" - #: neutron/plugins/vmware/plugins/base.py:2279 #, python-format msgid "" @@ -13994,24 +13876,6 @@ msgstr "" msgid "Port values not valid for protocol: %s" msgstr "" -#: neutron/plugins/vmware/plugins/service.py:144 -#, python-format -msgid "EDGE: router = %s" -msgstr "" - -#: neutron/plugins/vmware/plugins/service.py:175 -msgid "EDGE: _vcns_create_ext_gw_port" -msgstr "" - -#: neutron/plugins/vmware/plugins/service.py:184 -msgid "EDGE: _vcns_delete_ext_gw_port" -msgstr "" - -#: neutron/plugins/vmware/plugins/service.py:339 -#, python-format -msgid "VCNS: delete default gateway %s" -msgstr "" - #: neutron/plugins/vmware/plugins/service.py:424 #, python-format msgid "An exception occurred while creating a port on lswitch %s" @@ -14087,10 +13951,6 @@ msgstr "" msgid "Failed to create pool on vshield edge" msgstr "" -#: neutron/plugins/vmware/plugins/service.py:1223 -msgid "create_vip() called" -msgstr "" - #: neutron/plugins/vmware/plugins/service.py:1231 #, python-format msgid "router_id: %s is not an advanced router!" @@ -14160,70 +14020,16 @@ msgid "" "%(vpnservice_id)s on vShield Edge: %(edge_id)s" msgstr "" -#: neutron/plugins/vmware/plugins/service.py:1611 -msgid "create_vpnservice() called" -msgstr "" - #: neutron/plugins/vmware/plugins/service.py:1619 #, python-format msgid "a vpnservice is already associated with the router: %s" msgstr "" -#: neutron/plugins/vmware/plugins/service.py:1732 -#, python-format -msgid "Start deploying %(edge_id)s for router %(name)s" -msgstr "" - #: neutron/plugins/vmware/plugins/service.py:1756 #, python-format msgid "Router %s not found" msgstr "" -#: neutron/plugins/vmware/plugins/service.py:1759 -#, python-format -msgid "Successfully deployed %(edge_id)s for router %(name)s" -msgstr "" - -#: neutron/plugins/vmware/plugins/service.py:1775 -#, python-format -msgid "Failed to deploy Edge for router %s" -msgstr "" - -#: neutron/plugins/vmware/plugins/service.py:1791 -#, python-format -msgid "interface_update_result %d" -msgstr "" - -#: neutron/plugins/vmware/plugins/service.py:1794 -#, python-format -msgid "snat_create_result %d" -msgstr "" - -#: neutron/plugins/vmware/plugins/service.py:1797 -#, python-format -msgid "snat_delete_result %d" -msgstr "" - -#: neutron/plugins/vmware/plugins/service.py:1800 -#, python-format -msgid "dnat_create_result %d" -msgstr "" - -#: neutron/plugins/vmware/plugins/service.py:1803 -#, python-format -msgid "dnat_delete_result %d" -msgstr "" - -#: neutron/plugins/vmware/plugins/service.py:1806 -#, python-format -msgid "routes_update_result %d" -msgstr "" - -#: neutron/plugins/vmware/plugins/service.py:1809 -#, python-format -msgid "nat_update_result %d" -msgstr "" - #: neutron/plugins/vmware/shell/commands.py:24 #, python-format msgid "" @@ -14266,11 +14072,6 @@ msgid "" "%s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:159 -#, python-format -msgid "VCNS: start updating vnic %s" -msgstr "" - #: neutron/plugins/vmware/vshield/edge_appliance_driver.py:164 #, python-format msgid "" @@ -14283,26 +14084,11 @@ msgstr "" msgid "VCNS: Failed to update vnic %d" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:178 -#, python-format -msgid "VCNS: update vnic %(index)d: %(addr)s %(netmask)s" -msgstr "" - #: neutron/plugins/vmware/vshield/edge_appliance_driver.py:187 #, python-format msgid "Vnic %d currently not supported" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:208 -#, python-format -msgid "VCNS: start deploying edge %s" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:216 -#, python-format -msgid "VCNS: deploying edge %s" -msgstr "" - #: neutron/plugins/vmware/vshield/edge_appliance_driver.py:221 #, python-format msgid "VCNS: deploy edge failed for router %s." @@ -14323,26 +14109,11 @@ msgstr "" msgid "VCNS: Unable to retrieve edge %s status. Abort." msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:256 -#, python-format -msgid "VCNS: Edge %s status" -msgstr "" - #: neutron/plugins/vmware/vshield/edge_appliance_driver.py:263 #, python-format msgid "VCNS: Failed to deploy edge %(edge_id)s for %(name)s, status %(status)d" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:270 -#, python-format -msgid "VCNS: Edge %(edge_id)s deployed for router %(name)s" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:277 -#, python-format -msgid "VCNS: start destroying edge %s" -msgstr "" - #: neutron/plugins/vmware/vshield/edge_appliance_driver.py:285 #, python-format msgid "" @@ -14369,11 +14140,6 @@ msgid "" "%s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:386 -#, python-format -msgid "VCNS: start creating nat rules: %s" -msgstr "" - #: neutron/plugins/vmware/vshield/edge_appliance_driver.py:402 #: neutron/plugins/vmware/vshield/edge_appliance_driver.py:527 #, python-format @@ -14382,16 +14148,6 @@ msgid "" "%s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:410 -#, python-format -msgid "VCNS: create snat rule %(src)s/%(translated)s" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:433 -#, python-format -msgid "VCNS: start deleting %(type)s rules: %(addr)s" -msgstr "" - #: neutron/plugins/vmware/vshield/edge_appliance_driver.py:444 #, python-format msgid "" @@ -14399,39 +14155,6 @@ msgid "" "%s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:451 -#, python-format -msgid "VCNS: delete snat rule %s" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:469 -#, python-format -msgid "VCNS: create dnat rule %(dst)s/%(translated)s" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:490 -#, python-format -msgid "VCNS: delete dnat rule %s" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:514 -#, python-format -msgid "VCNS: start updating nat rules: %s" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:535 -#, python-format -msgid "" -"VCNS: update nat rule\n" -"SNAT:%(snat)s\n" -"DNAT:%(dnat)s\n" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:573 -#, python-format -msgid "VCNS: start updating routes for %s" -msgstr "" - #: neutron/plugins/vmware/vshield/edge_appliance_driver.py:597 #, python-format msgid "" @@ -14660,21 +14383,6 @@ msgstr "" msgid "Failed to delete monitor" msgstr "" -#: neutron/plugins/vmware/vshield/vcns.py:52 -#, python-format -msgid "VcnsApiHelper('%(method)s', '%(uri)s', '%(body)s')" -msgstr "" - -#: neutron/plugins/vmware/vshield/vcns.py:60 -#, python-format -msgid "Header: '%s'" -msgstr "" - -#: neutron/plugins/vmware/vshield/vcns.py:61 -#, python-format -msgid "Content: '%s'" -msgstr "" - #: neutron/plugins/vmware/vshield/common/exceptions.py:33 #, python-format msgid "%(resource)s not found: %(msg)s" @@ -14742,12 +14450,6 @@ msgstr "" msgid "Task %(task)s encountered exception in %(cb)s" msgstr "" -#: neutron/plugins/vmware/vshield/tasks/tasks.py:194 -#: neutron/plugins/vmware/vshield/tasks/tasks.py:213 -#, python-format -msgid "Task %(task)s return %(status)s" -msgstr "" - #: neutron/plugins/vmware/vshield/tasks/tasks.py:296 msgid "Stopping TaskManager" msgstr "" diff --git a/neutron/locale/es/LC_MESSAGES/neutron-log-error.po b/neutron/locale/es/LC_MESSAGES/neutron-log-error.po index 5719fb678b1..2eea2c308bd 100644 --- a/neutron/locale/es/LC_MESSAGES/neutron-log-error.po +++ b/neutron/locale/es/LC_MESSAGES/neutron-log-error.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Neutron\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-15 06:11+0000\n" +"POT-Creation-Date: 2014-09-29 06:04+0000\n" "PO-Revision-Date: 2014-06-30 20:07+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: Spanish (http://www.transifex.com/projects/p/neutron/language/" @@ -19,14 +19,14 @@ msgstr "" "Generated-By: Babel 1.3\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: neutron/policy.py:115 +#: neutron/policy.py:119 #, python-format msgid "" "Backward compatibility unavailable for deprecated policy %s. The policy will " "not be enforced" msgstr "" -#: neutron/policy.py:280 +#: neutron/policy.py:311 #, python-format msgid "Policy check error while calling %s!" msgstr "" @@ -36,22 +36,32 @@ msgstr "" msgid "Unable to process HA router %s without ha port" msgstr "" -#: neutron/agent/linux/external_process.py:230 +#: neutron/agent/linux/external_process.py:229 #, python-format msgid "" "%(service)s for %(resource_type)s with uuid %(uuid)s not found. The process " "should not have died" msgstr "" -#: neutron/agent/linux/external_process.py:250 +#: neutron/agent/linux/external_process.py:249 #, python-format msgid "respawning %(service)s for uuid %(uuid)s" msgstr "" -#: neutron/agent/linux/external_process.py:256 +#: neutron/agent/linux/external_process.py:255 msgid "Exiting agent as programmed in check_child_processes_actions" msgstr "" +#: neutron/agent/linux/interface.py:154 +#, python-format +msgid "Failed deleting ingress connection state of floatingip %s" +msgstr "" + +#: neutron/agent/linux/interface.py:163 +#, python-format +msgid "Failed deleting egress connection state of floatingip %s" +msgstr "" + #: neutron/cmd/sanity_check.py:58 msgid "" "Nova notifications are enabled, but novaclient is not installed. Either " @@ -81,40 +91,40 @@ msgstr "Excepción durante limpieza de rpc." msgid "Unhandled exception" msgstr "Excepción no controlada" -#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:283 +#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:279 #, python-format msgid "Unable to delete port '%(pname)s' on switch. Exception: %(exp)s" msgstr "" -#: neutron/plugins/ml2/drivers/type_gre.py:80 +#: neutron/plugins/ml2/drivers/type_gre.py:86 #, python-format msgid "Skipping unreasonable gre ID range %(tun_min)s:%(tun_max)s" msgstr "" -#: neutron/plugins/ml2/drivers/type_vxlan.py:87 +#: neutron/plugins/ml2/drivers/type_vxlan.py:92 #, python-format msgid "Skipping unreasonable VXLAN VNI range %(tun_min)s:%(tun_max)s" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:112 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:110 msgid "APIC service agent: failed in reporting state" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:207 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:205 #, python-format msgid "No such interface (ignored): %s" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:257 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:255 msgid "APIC service agent: exception in LLDP parsing" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:312 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:310 #, python-format msgid "APIC service agent: can not get MACaddr for %s" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:328 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:326 msgid "APIC host agent: failed in reporting state" msgstr "" @@ -122,7 +132,7 @@ msgstr "" msgid "Error in agent event loop" msgstr "" -#: neutron/plugins/nuage/syncmanager.py:56 +#: neutron/plugins/nuage/syncmanager.py:55 #, python-format msgid "Cannot complete the sync between Neutron and VSD because of error:%s" msgstr "" @@ -199,7 +209,7 @@ msgstr "" msgid "Error while processing VIF ports" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:2089 +#: neutron/plugins/vmware/plugins/base.py:2099 #, python-format msgid "" "Rolling back database changes for gateway device %s because of an error in " diff --git a/neutron/locale/fr/LC_MESSAGES/neutron-log-error.po b/neutron/locale/fr/LC_MESSAGES/neutron-log-error.po index 6a9e66cdac3..07d9323a1b3 100644 --- a/neutron/locale/fr/LC_MESSAGES/neutron-log-error.po +++ b/neutron/locale/fr/LC_MESSAGES/neutron-log-error.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Neutron\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-15 06:11+0000\n" +"POT-Creation-Date: 2014-09-29 06:04+0000\n" "PO-Revision-Date: 2014-06-30 20:07+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: French (http://www.transifex.com/projects/p/neutron/language/" @@ -19,14 +19,14 @@ msgstr "" "Generated-By: Babel 1.3\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: neutron/policy.py:115 +#: neutron/policy.py:119 #, python-format msgid "" "Backward compatibility unavailable for deprecated policy %s. The policy will " "not be enforced" msgstr "" -#: neutron/policy.py:280 +#: neutron/policy.py:311 #, python-format msgid "Policy check error while calling %s!" msgstr "" @@ -36,22 +36,32 @@ msgstr "" msgid "Unable to process HA router %s without ha port" msgstr "" -#: neutron/agent/linux/external_process.py:230 +#: neutron/agent/linux/external_process.py:229 #, python-format msgid "" "%(service)s for %(resource_type)s with uuid %(uuid)s not found. The process " "should not have died" msgstr "" -#: neutron/agent/linux/external_process.py:250 +#: neutron/agent/linux/external_process.py:249 #, python-format msgid "respawning %(service)s for uuid %(uuid)s" msgstr "" -#: neutron/agent/linux/external_process.py:256 +#: neutron/agent/linux/external_process.py:255 msgid "Exiting agent as programmed in check_child_processes_actions" msgstr "" +#: neutron/agent/linux/interface.py:154 +#, python-format +msgid "Failed deleting ingress connection state of floatingip %s" +msgstr "" + +#: neutron/agent/linux/interface.py:163 +#, python-format +msgid "Failed deleting egress connection state of floatingip %s" +msgstr "" + #: neutron/cmd/sanity_check.py:58 msgid "" "Nova notifications are enabled, but novaclient is not installed. Either " @@ -81,40 +91,40 @@ msgstr "Exception pendant le nettoyage rpc." msgid "Unhandled exception" msgstr "Exception non gérée" -#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:283 +#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:279 #, python-format msgid "Unable to delete port '%(pname)s' on switch. Exception: %(exp)s" msgstr "" -#: neutron/plugins/ml2/drivers/type_gre.py:80 +#: neutron/plugins/ml2/drivers/type_gre.py:86 #, python-format msgid "Skipping unreasonable gre ID range %(tun_min)s:%(tun_max)s" msgstr "" -#: neutron/plugins/ml2/drivers/type_vxlan.py:87 +#: neutron/plugins/ml2/drivers/type_vxlan.py:92 #, python-format msgid "Skipping unreasonable VXLAN VNI range %(tun_min)s:%(tun_max)s" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:112 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:110 msgid "APIC service agent: failed in reporting state" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:207 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:205 #, python-format msgid "No such interface (ignored): %s" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:257 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:255 msgid "APIC service agent: exception in LLDP parsing" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:312 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:310 #, python-format msgid "APIC service agent: can not get MACaddr for %s" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:328 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:326 msgid "APIC host agent: failed in reporting state" msgstr "" @@ -122,7 +132,7 @@ msgstr "" msgid "Error in agent event loop" msgstr "" -#: neutron/plugins/nuage/syncmanager.py:56 +#: neutron/plugins/nuage/syncmanager.py:55 #, python-format msgid "Cannot complete the sync between Neutron and VSD because of error:%s" msgstr "" @@ -199,7 +209,7 @@ msgstr "" msgid "Error while processing VIF ports" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:2089 +#: neutron/plugins/vmware/plugins/base.py:2099 #, python-format msgid "" "Rolling back database changes for gateway device %s because of an error in " diff --git a/neutron/locale/it/LC_MESSAGES/neutron-log-error.po b/neutron/locale/it/LC_MESSAGES/neutron-log-error.po index 5d96c45fe15..76b5ed800ce 100644 --- a/neutron/locale/it/LC_MESSAGES/neutron-log-error.po +++ b/neutron/locale/it/LC_MESSAGES/neutron-log-error.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Neutron\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-15 06:11+0000\n" +"POT-Creation-Date: 2014-09-29 06:04+0000\n" "PO-Revision-Date: 2014-07-06 03:50+0000\n" "Last-Translator: PierAlberto \n" "Language-Team: Italian (http://www.transifex.com/projects/p/neutron/language/" @@ -20,14 +20,14 @@ msgstr "" "Generated-By: Babel 1.3\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: neutron/policy.py:115 +#: neutron/policy.py:119 #, python-format msgid "" "Backward compatibility unavailable for deprecated policy %s. The policy will " "not be enforced" msgstr "" -#: neutron/policy.py:280 +#: neutron/policy.py:311 #, python-format msgid "Policy check error while calling %s!" msgstr "" @@ -37,22 +37,32 @@ msgstr "" msgid "Unable to process HA router %s without ha port" msgstr "" -#: neutron/agent/linux/external_process.py:230 +#: neutron/agent/linux/external_process.py:229 #, python-format msgid "" "%(service)s for %(resource_type)s with uuid %(uuid)s not found. The process " "should not have died" msgstr "" -#: neutron/agent/linux/external_process.py:250 +#: neutron/agent/linux/external_process.py:249 #, python-format msgid "respawning %(service)s for uuid %(uuid)s" msgstr "" -#: neutron/agent/linux/external_process.py:256 +#: neutron/agent/linux/external_process.py:255 msgid "Exiting agent as programmed in check_child_processes_actions" msgstr "" +#: neutron/agent/linux/interface.py:154 +#, python-format +msgid "Failed deleting ingress connection state of floatingip %s" +msgstr "" + +#: neutron/agent/linux/interface.py:163 +#, python-format +msgid "Failed deleting egress connection state of floatingip %s" +msgstr "" + #: neutron/cmd/sanity_check.py:58 msgid "" "Nova notifications are enabled, but novaclient is not installed. Either " @@ -82,40 +92,40 @@ msgstr "Eccezioni durante pulitura rpc." msgid "Unhandled exception" msgstr "Eccezione non gestita" -#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:283 +#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:279 #, python-format msgid "Unable to delete port '%(pname)s' on switch. Exception: %(exp)s" msgstr "" -#: neutron/plugins/ml2/drivers/type_gre.py:80 +#: neutron/plugins/ml2/drivers/type_gre.py:86 #, python-format msgid "Skipping unreasonable gre ID range %(tun_min)s:%(tun_max)s" msgstr "" -#: neutron/plugins/ml2/drivers/type_vxlan.py:87 +#: neutron/plugins/ml2/drivers/type_vxlan.py:92 #, python-format msgid "Skipping unreasonable VXLAN VNI range %(tun_min)s:%(tun_max)s" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:112 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:110 msgid "APIC service agent: failed in reporting state" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:207 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:205 #, python-format msgid "No such interface (ignored): %s" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:257 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:255 msgid "APIC service agent: exception in LLDP parsing" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:312 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:310 #, python-format msgid "APIC service agent: can not get MACaddr for %s" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:328 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:326 msgid "APIC host agent: failed in reporting state" msgstr "" @@ -123,7 +133,7 @@ msgstr "" msgid "Error in agent event loop" msgstr "" -#: neutron/plugins/nuage/syncmanager.py:56 +#: neutron/plugins/nuage/syncmanager.py:55 #, python-format msgid "Cannot complete the sync between Neutron and VSD because of error:%s" msgstr "" @@ -200,7 +210,7 @@ msgstr "" msgid "Error while processing VIF ports" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:2089 +#: neutron/plugins/vmware/plugins/base.py:2099 #, python-format msgid "" "Rolling back database changes for gateway device %s because of an error in " diff --git a/neutron/locale/ja/LC_MESSAGES/neutron-log-error.po b/neutron/locale/ja/LC_MESSAGES/neutron-log-error.po index d82c5993625..b663457d8e8 100644 --- a/neutron/locale/ja/LC_MESSAGES/neutron-log-error.po +++ b/neutron/locale/ja/LC_MESSAGES/neutron-log-error.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Neutron\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-15 06:11+0000\n" +"POT-Creation-Date: 2014-09-29 06:04+0000\n" "PO-Revision-Date: 2014-06-30 20:07+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: Japanese (http://www.transifex.com/projects/p/neutron/" @@ -19,14 +19,14 @@ msgstr "" "Generated-By: Babel 1.3\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: neutron/policy.py:115 +#: neutron/policy.py:119 #, python-format msgid "" "Backward compatibility unavailable for deprecated policy %s. The policy will " "not be enforced" msgstr "" -#: neutron/policy.py:280 +#: neutron/policy.py:311 #, python-format msgid "Policy check error while calling %s!" msgstr "" @@ -36,22 +36,32 @@ msgstr "" msgid "Unable to process HA router %s without ha port" msgstr "" -#: neutron/agent/linux/external_process.py:230 +#: neutron/agent/linux/external_process.py:229 #, python-format msgid "" "%(service)s for %(resource_type)s with uuid %(uuid)s not found. The process " "should not have died" msgstr "" -#: neutron/agent/linux/external_process.py:250 +#: neutron/agent/linux/external_process.py:249 #, python-format msgid "respawning %(service)s for uuid %(uuid)s" msgstr "" -#: neutron/agent/linux/external_process.py:256 +#: neutron/agent/linux/external_process.py:255 msgid "Exiting agent as programmed in check_child_processes_actions" msgstr "" +#: neutron/agent/linux/interface.py:154 +#, python-format +msgid "Failed deleting ingress connection state of floatingip %s" +msgstr "" + +#: neutron/agent/linux/interface.py:163 +#, python-format +msgid "Failed deleting egress connection state of floatingip %s" +msgstr "" + #: neutron/cmd/sanity_check.py:58 msgid "" "Nova notifications are enabled, but novaclient is not installed. Either " @@ -81,40 +91,40 @@ msgstr "RPCクリーンアップ中に例外が発生" msgid "Unhandled exception" msgstr "未処理例外" -#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:283 +#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:279 #, python-format msgid "Unable to delete port '%(pname)s' on switch. Exception: %(exp)s" msgstr "" -#: neutron/plugins/ml2/drivers/type_gre.py:80 +#: neutron/plugins/ml2/drivers/type_gre.py:86 #, python-format msgid "Skipping unreasonable gre ID range %(tun_min)s:%(tun_max)s" msgstr "" -#: neutron/plugins/ml2/drivers/type_vxlan.py:87 +#: neutron/plugins/ml2/drivers/type_vxlan.py:92 #, python-format msgid "Skipping unreasonable VXLAN VNI range %(tun_min)s:%(tun_max)s" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:112 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:110 msgid "APIC service agent: failed in reporting state" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:207 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:205 #, python-format msgid "No such interface (ignored): %s" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:257 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:255 msgid "APIC service agent: exception in LLDP parsing" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:312 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:310 #, python-format msgid "APIC service agent: can not get MACaddr for %s" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:328 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:326 msgid "APIC host agent: failed in reporting state" msgstr "" @@ -122,7 +132,7 @@ msgstr "" msgid "Error in agent event loop" msgstr "" -#: neutron/plugins/nuage/syncmanager.py:56 +#: neutron/plugins/nuage/syncmanager.py:55 #, python-format msgid "Cannot complete the sync between Neutron and VSD because of error:%s" msgstr "" @@ -199,7 +209,7 @@ msgstr "" msgid "Error while processing VIF ports" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:2089 +#: neutron/plugins/vmware/plugins/base.py:2099 #, python-format msgid "" "Rolling back database changes for gateway device %s because of an error in " diff --git a/neutron/locale/ko_KR/LC_MESSAGES/neutron-log-error.po b/neutron/locale/ko_KR/LC_MESSAGES/neutron-log-error.po index 64590d5049f..709138e6f40 100644 --- a/neutron/locale/ko_KR/LC_MESSAGES/neutron-log-error.po +++ b/neutron/locale/ko_KR/LC_MESSAGES/neutron-log-error.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Neutron\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-15 06:11+0000\n" +"POT-Creation-Date: 2014-09-29 06:04+0000\n" "PO-Revision-Date: 2014-06-30 20:07+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: Korean (Korea) (http://www.transifex.com/projects/p/neutron/" @@ -19,14 +19,14 @@ msgstr "" "Generated-By: Babel 1.3\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: neutron/policy.py:115 +#: neutron/policy.py:119 #, python-format msgid "" "Backward compatibility unavailable for deprecated policy %s. The policy will " "not be enforced" msgstr "" -#: neutron/policy.py:280 +#: neutron/policy.py:311 #, python-format msgid "Policy check error while calling %s!" msgstr "" @@ -36,22 +36,32 @@ msgstr "" msgid "Unable to process HA router %s without ha port" msgstr "" -#: neutron/agent/linux/external_process.py:230 +#: neutron/agent/linux/external_process.py:229 #, python-format msgid "" "%(service)s for %(resource_type)s with uuid %(uuid)s not found. The process " "should not have died" msgstr "" -#: neutron/agent/linux/external_process.py:250 +#: neutron/agent/linux/external_process.py:249 #, python-format msgid "respawning %(service)s for uuid %(uuid)s" msgstr "" -#: neutron/agent/linux/external_process.py:256 +#: neutron/agent/linux/external_process.py:255 msgid "Exiting agent as programmed in check_child_processes_actions" msgstr "" +#: neutron/agent/linux/interface.py:154 +#, python-format +msgid "Failed deleting ingress connection state of floatingip %s" +msgstr "" + +#: neutron/agent/linux/interface.py:163 +#, python-format +msgid "Failed deleting egress connection state of floatingip %s" +msgstr "" + #: neutron/cmd/sanity_check.py:58 msgid "" "Nova notifications are enabled, but novaclient is not installed. Either " @@ -81,40 +91,40 @@ msgstr "" msgid "Unhandled exception" msgstr "처리되지 않은 예외" -#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:283 +#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:279 #, python-format msgid "Unable to delete port '%(pname)s' on switch. Exception: %(exp)s" msgstr "" -#: neutron/plugins/ml2/drivers/type_gre.py:80 +#: neutron/plugins/ml2/drivers/type_gre.py:86 #, python-format msgid "Skipping unreasonable gre ID range %(tun_min)s:%(tun_max)s" msgstr "" -#: neutron/plugins/ml2/drivers/type_vxlan.py:87 +#: neutron/plugins/ml2/drivers/type_vxlan.py:92 #, python-format msgid "Skipping unreasonable VXLAN VNI range %(tun_min)s:%(tun_max)s" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:112 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:110 msgid "APIC service agent: failed in reporting state" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:207 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:205 #, python-format msgid "No such interface (ignored): %s" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:257 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:255 msgid "APIC service agent: exception in LLDP parsing" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:312 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:310 #, python-format msgid "APIC service agent: can not get MACaddr for %s" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:328 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:326 msgid "APIC host agent: failed in reporting state" msgstr "" @@ -122,7 +132,7 @@ msgstr "" msgid "Error in agent event loop" msgstr "" -#: neutron/plugins/nuage/syncmanager.py:56 +#: neutron/plugins/nuage/syncmanager.py:55 #, python-format msgid "Cannot complete the sync between Neutron and VSD because of error:%s" msgstr "" @@ -199,7 +209,7 @@ msgstr "" msgid "Error while processing VIF ports" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:2089 +#: neutron/plugins/vmware/plugins/base.py:2099 #, python-format msgid "" "Rolling back database changes for gateway device %s because of an error in " diff --git a/neutron/locale/neutron-log-error.pot b/neutron/locale/neutron-log-error.pot index 0cab0890c3e..5d83aeb7592 100644 --- a/neutron/locale/neutron-log-error.pot +++ b/neutron/locale/neutron-log-error.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: neutron 2014.2.dev123.g62ae82d\n" +"Project-Id-Version: neutron 2014.2.dev246.gff9745c\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-15 06:11+0000\n" +"POT-Creation-Date: 2014-09-29 06:04+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,14 +17,14 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" -#: neutron/policy.py:115 +#: neutron/policy.py:119 #, python-format msgid "" "Backward compatibility unavailable for deprecated policy %s. The policy " "will not be enforced" msgstr "" -#: neutron/policy.py:280 +#: neutron/policy.py:311 #, python-format msgid "Policy check error while calling %s!" msgstr "" @@ -34,22 +34,32 @@ msgstr "" msgid "Unable to process HA router %s without ha port" msgstr "" -#: neutron/agent/linux/external_process.py:230 +#: neutron/agent/linux/external_process.py:229 #, python-format msgid "" "%(service)s for %(resource_type)s with uuid %(uuid)s not found. The " "process should not have died" msgstr "" -#: neutron/agent/linux/external_process.py:250 +#: neutron/agent/linux/external_process.py:249 #, python-format msgid "respawning %(service)s for uuid %(uuid)s" msgstr "" -#: neutron/agent/linux/external_process.py:256 +#: neutron/agent/linux/external_process.py:255 msgid "Exiting agent as programmed in check_child_processes_actions" msgstr "" +#: neutron/agent/linux/interface.py:154 +#, python-format +msgid "Failed deleting ingress connection state of floatingip %s" +msgstr "" + +#: neutron/agent/linux/interface.py:163 +#, python-format +msgid "Failed deleting egress connection state of floatingip %s" +msgstr "" + #: neutron/cmd/sanity_check.py:58 msgid "" "Nova notifications are enabled, but novaclient is not installed. Either " @@ -79,40 +89,40 @@ msgstr "" msgid "Unhandled exception" msgstr "" -#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:283 +#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:279 #, python-format msgid "Unable to delete port '%(pname)s' on switch. Exception: %(exp)s" msgstr "" -#: neutron/plugins/ml2/drivers/type_gre.py:80 +#: neutron/plugins/ml2/drivers/type_gre.py:86 #, python-format msgid "Skipping unreasonable gre ID range %(tun_min)s:%(tun_max)s" msgstr "" -#: neutron/plugins/ml2/drivers/type_vxlan.py:87 +#: neutron/plugins/ml2/drivers/type_vxlan.py:92 #, python-format msgid "Skipping unreasonable VXLAN VNI range %(tun_min)s:%(tun_max)s" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:112 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:110 msgid "APIC service agent: failed in reporting state" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:207 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:205 #, python-format msgid "No such interface (ignored): %s" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:257 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:255 msgid "APIC service agent: exception in LLDP parsing" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:312 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:310 #, python-format msgid "APIC service agent: can not get MACaddr for %s" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:328 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:326 msgid "APIC host agent: failed in reporting state" msgstr "" @@ -120,7 +130,7 @@ msgstr "" msgid "Error in agent event loop" msgstr "" -#: neutron/plugins/nuage/syncmanager.py:56 +#: neutron/plugins/nuage/syncmanager.py:55 #, python-format msgid "Cannot complete the sync between Neutron and VSD because of error:%s" msgstr "" @@ -198,7 +208,7 @@ msgstr "" msgid "Error while processing VIF ports" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:2089 +#: neutron/plugins/vmware/plugins/base.py:2099 #, python-format msgid "" "Rolling back database changes for gateway device %s because of an error " diff --git a/neutron/locale/neutron.pot b/neutron/locale/neutron.pot index 57df3729cab..2c4713bf9c4 100644 --- a/neutron/locale/neutron.pot +++ b/neutron/locale/neutron.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: neutron 2014.2.dev190.ga76af4a\n" +"Project-Id-Version: neutron 2014.2.dev246.gff9745c\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-22 06:06+0000\n" +"POT-Creation-Date: 2014-09-29 06:03+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -88,48 +88,48 @@ msgstr "" msgid "Successfully loaded %(type)s plugin. Description: %(desc)s" msgstr "" -#: neutron/policy.py:87 +#: neutron/policy.py:91 #, python-format msgid "Loading policies from file: %s" msgstr "" -#: neutron/policy.py:142 +#: neutron/policy.py:160 #, python-format msgid "" "Attribute type descriptor is not a dict. Unable to generate any sub-attr " "policy rule for %s." msgstr "" -#: neutron/policy.py:215 +#: neutron/policy.py:246 #, python-format msgid "" "Unable to identify a target field from:%s.match should be in the form " "%%()s" msgstr "" -#: neutron/policy.py:241 +#: neutron/policy.py:272 #, python-format msgid "Unable to find ':' as separator in %s." msgstr "" -#: neutron/policy.py:245 +#: neutron/policy.py:276 #, python-format msgid "Unable to find resource name in %s" msgstr "" -#: neutron/policy.py:254 +#: neutron/policy.py:285 #, python-format msgid "" "Unable to verify match:%(match)s as the parent resource: %(res)s was not " "found" msgstr "" -#: neutron/policy.py:312 +#: neutron/policy.py:343 #, python-format msgid "Unable to find requested field: %(field)s in target: %(target_dict)s" msgstr "" -#: neutron/policy.py:370 +#: neutron/policy.py:401 #, python-format msgid "Failed policy check for '%s'" msgstr "" @@ -329,7 +329,7 @@ msgid "You must implement __call__" msgstr "" #: neutron/wsgi.py:1024 neutron/api/v2/base.py:191 neutron/api/v2/base.py:332 -#: neutron/api/v2/base.py:472 neutron/api/v2/base.py:527 +#: neutron/api/v2/base.py:472 neutron/api/v2/base.py:531 #: neutron/extensions/l3agentscheduler.py:50 #: neutron/extensions/l3agentscheduler.py:93 msgid "The resource could not be found." @@ -409,7 +409,7 @@ msgid "Number of threads to use during sync process." msgstr "" #: neutron/agent/dhcp_agent.py:65 neutron/agent/l3_agent.py:496 -#: neutron/agent/metadata/namespace_proxy.py:163 +#: neutron/agent/metadata/namespace_proxy.py:165 msgid "Location of Metadata Proxy UNIX domain socket" msgstr "" @@ -488,8 +488,8 @@ msgid "" "port %(port_id)s, for router %(router_id)s will be considered" msgstr "" -#: neutron/agent/dhcp_agent.py:582 neutron/agent/l3_agent.py:1984 -#: neutron/agent/metadata/agent.py:361 +#: neutron/agent/dhcp_agent.py:582 neutron/agent/l3_agent.py:1987 +#: neutron/agent/metadata/agent.py:363 #: neutron/plugins/cisco/cfg_agent/cfg_agent.py:326 #: neutron/services/metering/agents/metering_agent.py:270 msgid "" @@ -497,10 +497,10 @@ msgid "" " will be disabled." msgstr "" -#: neutron/agent/dhcp_agent.py:588 neutron/agent/l3_agent.py:1989 -#: neutron/agent/metadata/agent.py:366 +#: neutron/agent/dhcp_agent.py:588 neutron/agent/l3_agent.py:1992 +#: neutron/agent/metadata/agent.py:368 #: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:108 -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:794 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:793 #: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:216 #: neutron/plugins/nec/agent/nec_neutron_agent.py:180 #: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:264 @@ -515,7 +515,7 @@ msgstr "" msgid "Agent updated: %(payload)s" msgstr "" -#: neutron/agent/dhcp_agent.py:597 neutron/agent/l3_agent.py:1994 +#: neutron/agent/dhcp_agent.py:597 neutron/agent/l3_agent.py:1997 #: neutron/services/metering/agents/metering_agent.py:278 #, python-format msgid "agent_updated by server side %s!" @@ -650,103 +650,103 @@ msgstr "" msgid "Unable to configure IP address for floating IP: %s" msgstr "" -#: neutron/agent/l3_agent.py:1178 +#: neutron/agent/l3_agent.py:1181 #, python-format msgid "Failed sending gratuitous ARP: %s" msgstr "" -#: neutron/agent/l3_agent.py:1240 +#: neutron/agent/l3_agent.py:1243 msgid "DVR: no map match_port found!" msgstr "" -#: neutron/agent/l3_agent.py:1444 +#: neutron/agent/l3_agent.py:1447 msgid "DVR: error adding redirection logic" msgstr "" -#: neutron/agent/l3_agent.py:1456 +#: neutron/agent/l3_agent.py:1459 msgid "DVR: removed snat failed" msgstr "" -#: neutron/agent/l3_agent.py:1557 +#: neutron/agent/l3_agent.py:1560 msgid "Missing subnet/agent_gateway_port" msgstr "" -#: neutron/agent/l3_agent.py:1678 +#: neutron/agent/l3_agent.py:1681 #, python-format msgid "Got router deleted notification for %s" msgstr "" -#: neutron/agent/l3_agent.py:1699 +#: neutron/agent/l3_agent.py:1702 msgid "DVR: Failed updating arp entry" msgstr "" -#: neutron/agent/l3_agent.py:1726 +#: neutron/agent/l3_agent.py:1729 #, python-format msgid "Got routers updated notification :%s" msgstr "" -#: neutron/agent/l3_agent.py:1736 +#: neutron/agent/l3_agent.py:1739 #, python-format msgid "Got router removed from agent :%r" msgstr "" -#: neutron/agent/l3_agent.py:1742 +#: neutron/agent/l3_agent.py:1745 #, python-format msgid "Got router added to agent :%r" msgstr "" -#: neutron/agent/l3_agent.py:1749 +#: neutron/agent/l3_agent.py:1752 #, python-format msgid "The external network bridge '%s' does not exist" msgstr "" -#: neutron/agent/l3_agent.py:1801 +#: neutron/agent/l3_agent.py:1804 #, python-format msgid "Failed to fetch router information for '%s'" msgstr "" -#: neutron/agent/l3_agent.py:1840 +#: neutron/agent/l3_agent.py:1843 #, python-format msgid "Starting _sync_routers_task - fullsync:%s" msgstr "" -#: neutron/agent/l3_agent.py:1860 +#: neutron/agent/l3_agent.py:1863 #, python-format msgid "Processing :%r" msgstr "" -#: neutron/agent/l3_agent.py:1868 +#: neutron/agent/l3_agent.py:1871 msgid "_sync_routers_task successfully completed" msgstr "" -#: neutron/agent/l3_agent.py:1870 +#: neutron/agent/l3_agent.py:1873 msgid "Failed synchronizing routers due to RPC error" msgstr "" -#: neutron/agent/l3_agent.py:1873 +#: neutron/agent/l3_agent.py:1876 #: neutron/services/metering/agents/metering_agent.py:59 msgid "Failed synchronizing routers" msgstr "" -#: neutron/agent/l3_agent.py:1896 +#: neutron/agent/l3_agent.py:1899 msgid "L3 agent started" msgstr "" -#: neutron/agent/l3_agent.py:1915 +#: neutron/agent/l3_agent.py:1918 #, python-format msgid "Added route entry is '%s'" msgstr "" -#: neutron/agent/l3_agent.py:1923 +#: neutron/agent/l3_agent.py:1926 #, python-format msgid "Removed route entry is '%s'" msgstr "" -#: neutron/agent/l3_agent.py:1957 +#: neutron/agent/l3_agent.py:1960 msgid "Report state task started" msgstr "" -#: neutron/agent/l3_agent.py:1981 +#: neutron/agent/l3_agent.py:1984 msgid "Report state task successfully completed" msgstr "" @@ -792,7 +792,7 @@ msgid "" msgstr "" #: neutron/agent/ovs_cleanup_util.py:73 -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:664 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:663 #: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:302 #, python-format msgid "Delete %s" @@ -1048,17 +1048,17 @@ msgstr "" msgid "No DHCP started for %s" msgstr "" -#: neutron/agent/linux/dhcp.py:256 neutron/agent/linux/utils.py:150 +#: neutron/agent/linux/dhcp.py:256 neutron/agent/linux/utils.py:155 #, python-format msgid "Error while reading %s" msgstr "" -#: neutron/agent/linux/dhcp.py:263 neutron/agent/linux/utils.py:157 +#: neutron/agent/linux/dhcp.py:263 neutron/agent/linux/utils.py:162 #, python-format msgid "Unable to convert value in %s" msgstr "" -#: neutron/agent/linux/dhcp.py:265 neutron/agent/linux/utils.py:159 +#: neutron/agent/linux/dhcp.py:265 neutron/agent/linux/utils.py:164 #, python-format msgid "Unable to access %s" msgstr "" @@ -1155,19 +1155,19 @@ msgstr "" msgid "Interval between checks of child process liveness (seconds)" msgstr "" -#: neutron/agent/linux/interface.py:37 +#: neutron/agent/linux/interface.py:39 msgid "Name of Open vSwitch bridge to use" msgstr "" -#: neutron/agent/linux/interface.py:40 +#: neutron/agent/linux/interface.py:42 msgid "Uses veth for an interface or not" msgstr "" -#: neutron/agent/linux/interface.py:42 +#: neutron/agent/linux/interface.py:44 msgid "MTU setting for device." msgstr "" -#: neutron/agent/linux/interface.py:44 +#: neutron/agent/linux/interface.py:46 msgid "" "Mapping between flavor and LinuxInterfaceDriver. It is specific to " "MetaInterfaceDriver used with admin_user, admin_password, " @@ -1175,58 +1175,58 @@ msgid "" "endpoint_type." msgstr "" -#: neutron/agent/linux/interface.py:50 +#: neutron/agent/linux/interface.py:52 msgid "Admin username" msgstr "" -#: neutron/agent/linux/interface.py:52 neutron/agent/metadata/agent.py:52 +#: neutron/agent/linux/interface.py:54 neutron/agent/metadata/agent.py:52 #: neutron/plugins/metaplugin/common/config.py:65 msgid "Admin password" msgstr "" -#: neutron/agent/linux/interface.py:55 neutron/agent/metadata/agent.py:55 +#: neutron/agent/linux/interface.py:57 neutron/agent/metadata/agent.py:55 #: neutron/plugins/metaplugin/common/config.py:68 msgid "Admin tenant name" msgstr "" -#: neutron/agent/linux/interface.py:57 neutron/agent/metadata/agent.py:57 +#: neutron/agent/linux/interface.py:59 neutron/agent/metadata/agent.py:57 #: neutron/plugins/metaplugin/common/config.py:70 msgid "Authentication URL" msgstr "" -#: neutron/agent/linux/interface.py:59 neutron/agent/metadata/agent.py:59 +#: neutron/agent/linux/interface.py:61 neutron/agent/metadata/agent.py:59 #: neutron/common/config.py:47 neutron/plugins/metaplugin/common/config.py:72 msgid "The type of authentication to use" msgstr "" -#: neutron/agent/linux/interface.py:61 neutron/agent/metadata/agent.py:61 +#: neutron/agent/linux/interface.py:63 neutron/agent/metadata/agent.py:61 #: neutron/plugins/metaplugin/common/config.py:74 msgid "Authentication region" msgstr "" -#: neutron/agent/linux/interface.py:64 neutron/agent/metadata/agent.py:71 +#: neutron/agent/linux/interface.py:66 neutron/agent/metadata/agent.py:71 msgid "Network service endpoint type to pull from the keystone catalog" msgstr "" -#: neutron/agent/linux/interface.py:222 neutron/agent/linux/interface.py:276 -#: neutron/agent/linux/interface.py:338 neutron/agent/linux/interface.py:387 +#: neutron/agent/linux/interface.py:265 neutron/agent/linux/interface.py:320 +#: neutron/agent/linux/interface.py:383 neutron/agent/linux/interface.py:430 #, python-format msgid "Device %s already exists" msgstr "" -#: neutron/agent/linux/interface.py:240 neutron/agent/linux/interface.py:287 -#: neutron/agent/linux/interface.py:350 neutron/agent/linux/interface.py:394 +#: neutron/agent/linux/interface.py:283 neutron/agent/linux/interface.py:331 +#: neutron/agent/linux/interface.py:395 neutron/agent/linux/interface.py:437 #, python-format msgid "Unplugged interface '%s'" msgstr "" -#: neutron/agent/linux/interface.py:242 neutron/agent/linux/interface.py:286 -#: neutron/agent/linux/interface.py:352 neutron/agent/linux/interface.py:396 +#: neutron/agent/linux/interface.py:285 neutron/agent/linux/interface.py:330 +#: neutron/agent/linux/interface.py:397 neutron/agent/linux/interface.py:439 #, python-format msgid "Failed unplugging interface '%s'" msgstr "" -#: neutron/agent/linux/interface.py:455 +#: neutron/agent/linux/interface.py:498 #, python-format msgid "Driver location: %s" msgstr "" @@ -1424,7 +1424,7 @@ msgstr "" msgid "Running command: %s" msgstr "" -#: neutron/agent/linux/utils.py:69 +#: neutron/agent/linux/utils.py:70 #, python-format msgid "" "\n" @@ -1504,26 +1504,26 @@ msgid "" "usually occurs when shared secrets do not match." msgstr "" -#: neutron/agent/metadata/agent.py:240 -#: neutron/agent/metadata/namespace_proxy.py:118 +#: neutron/agent/metadata/agent.py:242 +#: neutron/agent/metadata/namespace_proxy.py:120 msgid "Remote metadata server experienced an internal server error." msgstr "" -#: neutron/agent/metadata/agent.py:246 -#: neutron/agent/metadata/namespace_proxy.py:124 +#: neutron/agent/metadata/agent.py:248 +#: neutron/agent/metadata/namespace_proxy.py:126 #, python-format msgid "Unexpected response code: %s" msgstr "" -#: neutron/agent/metadata/agent.py:306 +#: neutron/agent/metadata/agent.py:308 msgid "Location for Metadata Proxy UNIX domain socket" msgstr "" -#: neutron/agent/metadata/agent.py:309 +#: neutron/agent/metadata/agent.py:311 msgid "Number of separate worker processes for metadata server" msgstr "" -#: neutron/agent/metadata/agent.py:313 +#: neutron/agent/metadata/agent.py:315 msgid "Number of backlog requests to configure the metadata server socket with" msgstr "" @@ -1531,24 +1531,24 @@ msgstr "" msgid "network_id and router_id are None. One must be provided." msgstr "" -#: neutron/agent/metadata/namespace_proxy.py:147 +#: neutron/agent/metadata/namespace_proxy.py:149 msgid "Network that will have instance metadata proxied." msgstr "" -#: neutron/agent/metadata/namespace_proxy.py:150 +#: neutron/agent/metadata/namespace_proxy.py:152 msgid "Router that will have connected instances' metadata proxied." msgstr "" -#: neutron/agent/metadata/namespace_proxy.py:153 +#: neutron/agent/metadata/namespace_proxy.py:155 #: neutron/tests/functional/agent/linux/simple_daemon.py:42 msgid "Location of pid file of this process." msgstr "" -#: neutron/agent/metadata/namespace_proxy.py:156 +#: neutron/agent/metadata/namespace_proxy.py:158 msgid "Run as daemon." msgstr "" -#: neutron/agent/metadata/namespace_proxy.py:159 +#: neutron/agent/metadata/namespace_proxy.py:161 msgid "TCP Port to listen for metadata server requests." msgstr "" @@ -1580,7 +1580,7 @@ msgid "" " and '%(desc)s'" msgstr "" -#: neutron/api/api_common.py:315 neutron/api/v2/base.py:595 +#: neutron/api/api_common.py:315 neutron/api/v2/base.py:599 #, python-format msgid "Unable to find '%s' in request body" msgstr "" @@ -2061,60 +2061,60 @@ msgstr "" msgid "Invalid format: %s" msgstr "" -#: neutron/api/v2/base.py:550 +#: neutron/api/v2/base.py:554 msgid "" "Specifying 'tenant_id' other than authenticated tenant in request " "requires admin privileges" msgstr "" -#: neutron/api/v2/base.py:558 +#: neutron/api/v2/base.py:562 msgid "Running without keystone AuthN requires that tenant_id is specified" msgstr "" -#: neutron/api/v2/base.py:576 +#: neutron/api/v2/base.py:580 msgid "Resource body required" msgstr "" -#: neutron/api/v2/base.py:578 +#: neutron/api/v2/base.py:582 #, python-format msgid "Request body: %(body)s" msgstr "" -#: neutron/api/v2/base.py:581 +#: neutron/api/v2/base.py:585 msgid "Bulk operation not supported" msgstr "" -#: neutron/api/v2/base.py:584 +#: neutron/api/v2/base.py:588 msgid "Resources required" msgstr "" -#: neutron/api/v2/base.py:606 +#: neutron/api/v2/base.py:610 #, python-format msgid "Failed to parse request. Required attribute '%s' not specified" msgstr "" -#: neutron/api/v2/base.py:613 +#: neutron/api/v2/base.py:617 #, python-format msgid "Attribute '%s' not allowed in POST" msgstr "" -#: neutron/api/v2/base.py:618 +#: neutron/api/v2/base.py:622 #, python-format msgid "Cannot update read-only attribute %s" msgstr "" -#: neutron/api/v2/base.py:636 +#: neutron/api/v2/base.py:640 #, python-format msgid "Invalid input for %(attr)s. Reason: %(reason)s." msgstr "" -#: neutron/api/v2/base.py:645 neutron/extensions/allowedaddresspairs.py:75 +#: neutron/api/v2/base.py:649 neutron/extensions/allowedaddresspairs.py:75 #: neutron/extensions/multiprovidernet.py:45 #, python-format msgid "Unrecognized attribute(s) '%s'" msgstr "" -#: neutron/api/v2/base.py:664 +#: neutron/api/v2/base.py:668 #, python-format msgid "Tenant %(tenant_id)s not allowed to create %(resource)s on this network" msgstr "" @@ -3094,20 +3094,20 @@ msgstr "" msgid "Centralizing distributed router %s is not supported" msgstr "" -#: neutron/db/l3_dvr_db.py:424 +#: neutron/db/l3_dvr_db.py:427 #, python-format msgid "Agent Gateway port does not exist, so create one: %s" msgstr "" -#: neutron/db/l3_dvr_db.py:439 +#: neutron/db/l3_dvr_db.py:442 msgid "Unable to create the Agent Gateway Port" msgstr "" -#: neutron/db/l3_dvr_db.py:465 +#: neutron/db/l3_dvr_db.py:468 msgid "Unable to create the SNAT Interface Port" msgstr "" -#: neutron/db/l3_dvr_db.py:489 +#: neutron/db/l3_dvr_db.py:492 #, python-format msgid "SNAT interface port list does not exist, so create one: %s" msgstr "" @@ -3142,7 +3142,7 @@ msgstr "" msgid "%s must implement get_port_from_device." msgstr "" -#: neutron/db/securitygroups_rpc_base.py:343 +#: neutron/db/securitygroups_rpc_base.py:344 #, python-format msgid "No valid gateway port on subnet %s is found for IPv6 RA" msgstr "" @@ -3159,96 +3159,89 @@ msgid "" "sort '%(resource)s'" msgstr "" -#: neutron/db/firewall/firewall_db.py:258 -#: neutron/plugins/vmware/plugins/service.py:907 +#: neutron/db/firewall/firewall_db.py:267 #: neutron/services/firewall/fwaas_plugin.py:216 msgid "create_firewall() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:279 -#: neutron/plugins/vmware/plugins/service.py:941 +#: neutron/db/firewall/firewall_db.py:288 #: neutron/services/firewall/fwaas_plugin.py:230 msgid "update_firewall() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:288 -#: neutron/plugins/vmware/plugins/service.py:967 +#: neutron/db/firewall/firewall_db.py:297 #: neutron/services/firewall/fwaas_plugin.py:245 msgid "delete_firewall() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:297 +#: neutron/db/firewall/firewall_db.py:306 msgid "get_firewall() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:302 +#: neutron/db/firewall/firewall_db.py:311 msgid "get_firewalls() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:308 +#: neutron/db/firewall/firewall_db.py:317 msgid "get_firewalls_count() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:313 +#: neutron/db/firewall/firewall_db.py:322 msgid "create_firewall_policy() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:328 -#: neutron/plugins/vmware/plugins/service.py:1029 +#: neutron/db/firewall/firewall_db.py:337 #: neutron/services/firewall/fwaas_plugin.py:254 msgid "update_firewall_policy() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:344 +#: neutron/db/firewall/firewall_db.py:353 msgid "delete_firewall_policy() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:356 +#: neutron/db/firewall/firewall_db.py:365 msgid "get_firewall_policy() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:361 +#: neutron/db/firewall/firewall_db.py:370 msgid "get_firewall_policies() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:367 +#: neutron/db/firewall/firewall_db.py:376 msgid "get_firewall_policies_count() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:372 +#: neutron/db/firewall/firewall_db.py:381 msgid "create_firewall_rule() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:404 -#: neutron/plugins/vmware/plugins/service.py:1003 +#: neutron/db/firewall/firewall_db.py:413 #: neutron/services/firewall/fwaas_plugin.py:262 msgid "update_firewall_rule() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:436 +#: neutron/db/firewall/firewall_db.py:449 msgid "delete_firewall_rule() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:444 +#: neutron/db/firewall/firewall_db.py:457 msgid "get_firewall_rule() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:449 +#: neutron/db/firewall/firewall_db.py:462 msgid "get_firewall_rules() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:455 +#: neutron/db/firewall/firewall_db.py:468 msgid "get_firewall_rules_count() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:464 -#: neutron/plugins/vmware/plugins/service.py:1056 +#: neutron/db/firewall/firewall_db.py:477 #: neutron/services/firewall/fwaas_plugin.py:272 msgid "insert_rule() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:508 -#: neutron/plugins/vmware/plugins/service.py:1085 +#: neutron/db/firewall/firewall_db.py:523 #: neutron/services/firewall/fwaas_plugin.py:280 msgid "remove_rule() called" msgstr "" @@ -3648,32 +3641,39 @@ msgstr "" msgid "%(driver)s: Internal driver error." msgstr "" -#: neutron/extensions/firewall.py:176 +#: neutron/extensions/firewall.py:138 +#, python-format +msgid "" +"Operation cannot be performed since Firewall Rule %(firewall_rule_id)s is" +" not shared and belongs to another tenant %(tenant_id)s" +msgstr "" + +#: neutron/extensions/firewall.py:189 #, python-format msgid "Port '%s' is not a valid number" msgstr "" -#: neutron/extensions/firewall.py:180 +#: neutron/extensions/firewall.py:193 #, python-format msgid "Invalid port '%s'" msgstr "" -#: neutron/extensions/firewall.py:194 +#: neutron/extensions/firewall.py:207 #, python-format msgid "%(msg_ip)s and %(msg_subnet)s" msgstr "" -#: neutron/extensions/firewall.py:315 +#: neutron/extensions/firewall.py:328 msgid "Number of firewalls allowed per tenant. A negative value means unlimited." msgstr "" -#: neutron/extensions/firewall.py:319 +#: neutron/extensions/firewall.py:332 msgid "" "Number of firewall policies allowed per tenant. A negative value means " "unlimited." msgstr "" -#: neutron/extensions/firewall.py:323 +#: neutron/extensions/firewall.py:336 msgid "" "Number of firewall rules allowed per tenant. A negative value means " "unlimited." @@ -4906,7 +4906,7 @@ msgstr "" #: neutron/plugins/bigswitch/agent/restproxy_agent.py:160 #: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:223 -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:1011 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:1010 #: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1461 #: neutron/plugins/ryu/agent/ryu_neutron_agent.py:276 #: neutron/plugins/sriovnicagent/sriov_nic_agent.py:285 @@ -4970,35 +4970,35 @@ msgstr "" msgid "Duplicate router rules (src,dst) found '%s'" msgstr "" -#: neutron/plugins/brocade/NeutronPlugin.py:60 +#: neutron/plugins/brocade/NeutronPlugin.py:59 #: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:31 #: neutron/services/l3_router/brocade/l3_router_plugin.py:36 msgid "The address of the host to SSH to" msgstr "" -#: neutron/plugins/brocade/NeutronPlugin.py:62 +#: neutron/plugins/brocade/NeutronPlugin.py:61 #: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:33 #: neutron/services/l3_router/brocade/l3_router_plugin.py:38 msgid "The SSH username to use" msgstr "" -#: neutron/plugins/brocade/NeutronPlugin.py:64 +#: neutron/plugins/brocade/NeutronPlugin.py:63 #: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:35 #: neutron/services/l3_router/brocade/l3_router_plugin.py:40 msgid "The SSH password to use" msgstr "" -#: neutron/plugins/brocade/NeutronPlugin.py:66 +#: neutron/plugins/brocade/NeutronPlugin.py:65 msgid "Currently unused" msgstr "" -#: neutron/plugins/brocade/NeutronPlugin.py:70 +#: neutron/plugins/brocade/NeutronPlugin.py:69 msgid "The network interface to use when creatinga port" msgstr "" -#: neutron/plugins/brocade/NeutronPlugin.py:92 +#: neutron/plugins/brocade/NeutronPlugin.py:91 #: neutron/plugins/hyperv/rpc_callbacks.py:41 -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:71 +#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:69 #: neutron/plugins/mlnx/rpc_callbacks.py:37 #: neutron/plugins/openvswitch/ovs_neutron_plugin.py:80 #, python-format @@ -5009,9 +5009,9 @@ msgstr "" #: neutron/plugins/brocade/NeutronPlugin.py:133 #: neutron/plugins/hyperv/rpc_callbacks.py:57 #: neutron/plugins/hyperv/rpc_callbacks.py:86 -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:95 -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:132 -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:155 +#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:93 +#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:130 +#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:153 #: neutron/plugins/mlnx/rpc_callbacks.py:60 #: neutron/plugins/mlnx/rpc_callbacks.py:90 #: neutron/plugins/mlnx/rpc_callbacks.py:106 @@ -6306,16 +6306,16 @@ msgid "No policy profile populated from VSM" msgstr "" #: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:207 -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:342 -#: neutron/plugins/mlnx/mlnx_plugin.py:226 neutron/plugins/nuage/plugin.py:415 +#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:340 +#: neutron/plugins/mlnx/mlnx_plugin.py:223 neutron/plugins/nuage/plugin.py:419 #: neutron/plugins/openvswitch/ovs_neutron_plugin.py:414 msgid "provider:network_type required" msgstr "" #: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:211 #: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:225 -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:352 -#: neutron/plugins/mlnx/mlnx_plugin.py:256 neutron/plugins/nuage/plugin.py:425 +#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:350 +#: neutron/plugins/mlnx/mlnx_plugin.py:253 neutron/plugins/nuage/plugin.py:429 #: neutron/plugins/openvswitch/ovs_neutron_plugin.py:424 #: neutron/plugins/openvswitch/ovs_neutron_plugin.py:443 msgid "provider:segmentation_id required" @@ -6334,24 +6334,24 @@ msgid "provider:segmentation_id out of range (5000+)" msgstr "" #: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:232 -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:374 -#: neutron/plugins/mlnx/mlnx_plugin.py:242 +#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:372 +#: neutron/plugins/mlnx/mlnx_plugin.py:239 #: neutron/plugins/openvswitch/ovs_neutron_plugin.py:459 #, python-format msgid "provider:network_type %s not supported" msgstr "" #: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:243 -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:380 -#: neutron/plugins/mlnx/mlnx_plugin.py:282 +#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:378 +#: neutron/plugins/mlnx/mlnx_plugin.py:279 #: neutron/plugins/openvswitch/ovs_neutron_plugin.py:465 #, python-format msgid "Unknown provider:physical_network %s" msgstr "" #: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:247 -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:386 -#: neutron/plugins/mlnx/mlnx_plugin.py:288 neutron/plugins/nuage/plugin.py:422 +#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:384 +#: neutron/plugins/mlnx/mlnx_plugin.py:285 neutron/plugins/nuage/plugin.py:426 #: neutron/plugins/openvswitch/ovs_neutron_plugin.py:471 msgid "provider:physical_network required" msgstr "" @@ -6510,7 +6510,7 @@ msgstr "" #: neutron/plugins/hyperv/hyperv_neutron_plugin.py:254 #: neutron/plugins/ibm/sdnve_neutron_plugin.py:196 #: neutron/plugins/metaplugin/meta_neutron_plugin.py:226 -#: neutron/plugins/mlnx/mlnx_plugin.py:369 +#: neutron/plugins/mlnx/mlnx_plugin.py:366 #: neutron/plugins/openvswitch/ovs_neutron_plugin.py:519 #, python-format msgid "Created network: %s" @@ -6846,9 +6846,9 @@ msgid "Invalid tenant_network_type: %s. Agent terminated!" msgstr "" #: neutron/plugins/hyperv/hyperv_neutron_plugin.py:203 -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:303 +#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:301 #: neutron/plugins/ml2/drivers/type_vlan.py:96 -#: neutron/plugins/mlnx/mlnx_plugin.py:187 +#: neutron/plugins/mlnx/mlnx_plugin.py:184 #: neutron/plugins/openvswitch/ovs_neutron_plugin.py:366 #, python-format msgid "Network VLAN ranges: %s" @@ -6860,7 +6860,7 @@ msgid "Network type %s not supported" msgstr "" #: neutron/plugins/hyperv/rpc_callbacks.py:75 -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:114 +#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:112 #: neutron/plugins/mlnx/rpc_callbacks.py:77 #: neutron/plugins/openvswitch/ovs_neutron_plugin.py:117 #, python-format @@ -7014,7 +7014,7 @@ msgid "Removing port failed for device %(device)s: %(e)s" msgstr "" #: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:434 -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:994 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:993 #: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1353 #: neutron/plugins/sriovnicagent/sriov_nic_agent.py:254 msgid "Agent out of sync with plugin!" @@ -7037,7 +7037,7 @@ msgstr "" #: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:470 #: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:266 -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:1035 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:1034 #: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1545 #: neutron/plugins/sriovnicagent/sriov_nic_agent.py:350 msgid "Agent initialized successfully, now running... " @@ -7683,8 +7683,8 @@ msgstr "" msgid "The input does not contain nececessary info: %(msg)s" msgstr "" -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:123 -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:147 +#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:121 +#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:145 #: neutron/plugins/ml2/rpc.py:130 neutron/plugins/ml2/rpc.py:154 #: neutron/plugins/openvswitch/ovs_neutron_plugin.py:125 #: neutron/plugins/openvswitch/ovs_neutron_plugin.py:150 @@ -7692,259 +7692,259 @@ msgstr "" msgid "Device %(device)s not bound to the agent host %(host)s" msgstr "" -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:140 +#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:138 #: neutron/plugins/openvswitch/ovs_neutron_plugin.py:144 #, python-format msgid "Device %(device)s up on %(agent_id)s" msgstr "" -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:261 -#: neutron/plugins/mlnx/mlnx_plugin.py:207 +#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:259 +#: neutron/plugins/mlnx/mlnx_plugin.py:204 #, python-format msgid "Invalid tenant_network_type: %s. Service terminated!" msgstr "" -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:272 +#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:270 msgid "Linux Bridge Plugin initialization complete" msgstr "" -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:301 +#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:299 #, python-format msgid "%s. Agent terminated!" msgstr "" -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:346 -#: neutron/plugins/mlnx/mlnx_plugin.py:251 +#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:344 +#: neutron/plugins/mlnx/mlnx_plugin.py:248 #: neutron/plugins/openvswitch/ovs_neutron_plugin.py:418 msgid "provider:segmentation_id specified for flat network" msgstr "" -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:355 -#: neutron/plugins/mlnx/mlnx_plugin.py:259 +#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:353 +#: neutron/plugins/mlnx/mlnx_plugin.py:256 #: neutron/plugins/openvswitch/ovs_neutron_plugin.py:427 #, python-format msgid "provider:segmentation_id out of range (%(min_id)s through %(max_id)s)" msgstr "" -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:362 -#: neutron/plugins/mlnx/mlnx_plugin.py:267 +#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:360 +#: neutron/plugins/mlnx/mlnx_plugin.py:264 #: neutron/plugins/openvswitch/ovs_neutron_plugin.py:447 msgid "provider:physical_network specified for local network" msgstr "" -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:368 -#: neutron/plugins/mlnx/mlnx_plugin.py:271 +#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:366 +#: neutron/plugins/mlnx/mlnx_plugin.py:268 #: neutron/plugins/openvswitch/ovs_neutron_plugin.py:453 msgid "provider:segmentation_id specified for local network" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:82 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:81 msgid "VXLAN is enabled, a valid local_ip must be provided" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:96 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:95 msgid "Invalid Network ID, will lead to incorrect bridgename" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:103 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:102 msgid "Invalid VLAN ID, will lead to incorrect subinterface name" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:110 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:109 msgid "Invalid Interface ID, will lead to incorrect tap device name" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:119 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:118 #, python-format msgid "Invalid Segmentation ID: %s, will lead to incorrect vxlan device name" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:182 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:181 #, python-format msgid "Failed creating vxlan interface for %(segmentation_id)s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:214 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:213 #, python-format msgid "" "Creating subinterface %(interface)s for VLAN %(vlan_id)s on interface " "%(physical_interface)s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:227 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:226 #, python-format msgid "Done creating subinterface %s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:234 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:233 #, python-format msgid "Creating vxlan interface %(interface)s for VNI %(segmentation_id)s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:249 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:248 #, python-format msgid "Done creating vxlan interface %s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:303 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:302 #, python-format msgid "Starting bridge %(bridge_name)s for subinterface %(interface)s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:318 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:317 #, python-format msgid "Done starting bridge %(bridge_name)s for subinterface %(interface)s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:340 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:339 #, python-format msgid "Unable to add %(interface)s to %(bridge_name)s! Exception: %(e)s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:353 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:352 #, python-format msgid "Unable to add vxlan interface for network %s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:360 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:359 #, python-format msgid "No mapping for physical network %s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:369 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:368 #, python-format msgid "Unknown network_type %(network_type)s for network %(network_id)s." msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:381 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:380 #, python-format msgid "Tap device: %s does not exist on this host, skipped" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:399 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:398 #, python-format msgid "Adding device %(tap_device_name)s to bridge %(bridge_name)s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:408 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:407 #, python-format msgid "%(tap_device_name)s already exists on bridge %(bridge_name)s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:446 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:445 #, python-format msgid "Deleting bridge %s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:453 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:452 #, python-format msgid "Done deleting bridge %s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:456 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:455 #, python-format msgid "Cannot delete bridge %s, does not exist" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:470 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:469 #, python-format msgid "Removing device %(interface_name)s from bridge %(bridge_name)s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:477 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:476 #, python-format msgid "Done removing device %(interface_name)s from bridge %(bridge_name)s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:483 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:482 #, python-format msgid "" "Cannot remove device %(interface_name)s bridge %(bridge_name)s does not " "exist" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:491 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:490 #, python-format msgid "Deleting subinterface %s for vlan" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:498 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:497 #, python-format msgid "Done deleting subinterface %s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:502 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:501 #, python-format msgid "Deleting vxlan interface %s for vlan" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:507 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:506 #, python-format msgid "Done deleting vxlan interface %s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:521 -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:555 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:520 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:554 #, python-format msgid "" "Option \"%(option)s\" must be supported by command \"%(command)s\" to " "enable %(mode)s mode" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:532 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:531 msgid "No valid Segmentation ID to perform UCAST test." msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:549 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:548 msgid "" "VXLAN muticast group must be provided in vxlan_group option to enable " "VXLAN MCAST mode" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:574 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:573 msgid "" "Linux kernel vxlan module and iproute2 3.8 or above are required to " "enable VXLAN." msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:584 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:583 #, python-format msgid "Using %s VXLAN mode" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:661 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:660 #: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:163 #: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:300 msgid "network_delete received" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:675 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:674 #: neutron/plugins/sriovnicagent/sriov_nic_agent.py:66 #, python-format msgid "port_update RPC received for port: %s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:678 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:677 msgid "fdb_add received" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:700 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:699 msgid "fdb_remove received" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:722 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:721 msgid "update chg_ip received" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:747 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:746 msgid "fdb_update received" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:804 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:803 msgid "Unable to obtain MAC address for unique ID. Agent terminated!" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:808 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:807 #: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:220 #: neutron/plugins/nec/agent/nec_neutron_agent.py:142 #: neutron/plugins/oneconvergence/agent/nvsd_neutron_agent.py:107 @@ -7953,15 +7953,15 @@ msgstr "" msgid "RPC agent_id: %s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:879 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:878 #: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1103 #: neutron/plugins/sriovnicagent/sriov_nic_agent.py:213 #, python-format msgid "Port %(device)s updated. Details: %(details)s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:912 -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:933 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:911 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:932 #: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:354 #: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1129 #: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1190 @@ -7970,21 +7970,21 @@ msgstr "" msgid "Device %s not defined on plugin" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:919 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:918 #: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1158 #: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1175 #, python-format msgid "Attachment %s removed" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:927 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:926 #: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1165 #: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1182 #, python-format msgid "port_removed failed for %(device)s: %(e)s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:931 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:930 #: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:352 #: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1187 #: neutron/plugins/sriovnicagent/sriov_nic_agent.py:238 @@ -7992,29 +7992,29 @@ msgstr "" msgid "Port %s updated." msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:984 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:983 msgid "LinuxBridge Agent RPC Daemon Started!" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:998 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:997 #: neutron/plugins/sriovnicagent/sriov_nic_agent.py:267 #, python-format msgid "Agent loop found changes! %s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:1002 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:1001 #: neutron/plugins/sriovnicagent/sriov_nic_agent.py:273 #, python-format msgid "Error in agent loop. Devices info: %s" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:1025 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:1024 #: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:407 #, python-format msgid "Parsing physical_interface_mappings failed: %s. Agent terminated!" msgstr "" -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:1028 +#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:1027 #: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:410 #, python-format msgid "Interface mappings: %s" @@ -8741,7 +8741,7 @@ msgid "Added segment %(id)s of type %(network_type)s for network %(network_id)s" msgstr "" #: neutron/plugins/ml2/db.py:197 neutron/plugins/ml2/db.py:249 -#: neutron/plugins/ml2/plugin.py:1029 +#: neutron/plugins/ml2/plugin.py:1046 #, python-format msgid "Multiple ports have port_id starting with %s" msgstr "" @@ -8893,163 +8893,163 @@ msgstr "" msgid "Extended port dict for driver '%(drv)s'" msgstr "" -#: neutron/plugins/ml2/plugin.py:138 +#: neutron/plugins/ml2/plugin.py:135 msgid "Modular L2 Plugin initialization complete" msgstr "" -#: neutron/plugins/ml2/plugin.py:197 +#: neutron/plugins/ml2/plugin.py:205 msgid "binding:profile value too large" msgstr "" -#: neutron/plugins/ml2/plugin.py:253 +#: neutron/plugins/ml2/plugin.py:261 #, python-format msgid "Failed to commit binding results for %(port)s after %(max)s tries" msgstr "" -#: neutron/plugins/ml2/plugin.py:259 +#: neutron/plugins/ml2/plugin.py:267 #, python-format msgid "Attempt %(count)s to bind port %(port)s" msgstr "" -#: neutron/plugins/ml2/plugin.py:385 +#: neutron/plugins/ml2/plugin.py:393 #, python-format msgid "Serialized vif_details DB value '%(value)s' for port %(port)s is invalid" msgstr "" -#: neutron/plugins/ml2/plugin.py:396 +#: neutron/plugins/ml2/plugin.py:404 #, python-format msgid "Serialized profile DB value '%(value)s' for port %(port)s is invalid" msgstr "" -#: neutron/plugins/ml2/plugin.py:465 +#: neutron/plugins/ml2/plugin.py:473 #, python-format msgid "" "In _notify_port_updated(), no bound segment for port %(port_id)s on " "network %(network_id)s" msgstr "" -#: neutron/plugins/ml2/plugin.py:499 +#: neutron/plugins/ml2/plugin.py:507 #, python-format msgid "mechanism_manager.create_network_postcommit failed, deleting network '%s'" msgstr "" -#: neutron/plugins/ml2/plugin.py:562 +#: neutron/plugins/ml2/plugin.py:570 #, python-format msgid "Deleting network %s" msgstr "" -#: neutron/plugins/ml2/plugin.py:583 +#: neutron/plugins/ml2/plugin.py:591 #, python-format msgid "Ports to auto-delete: %s" msgstr "" -#: neutron/plugins/ml2/plugin.py:589 neutron/plugins/ml2/plugin.py:717 +#: neutron/plugins/ml2/plugin.py:597 neutron/plugins/ml2/plugin.py:725 msgid "Tenant-owned ports exist" msgstr "" -#: neutron/plugins/ml2/plugin.py:597 +#: neutron/plugins/ml2/plugin.py:605 #, python-format msgid "Subnets to auto-delete: %s" msgstr "" -#: neutron/plugins/ml2/plugin.py:609 +#: neutron/plugins/ml2/plugin.py:617 #, python-format msgid "Deleting network record %s" msgstr "" -#: neutron/plugins/ml2/plugin.py:614 neutron/plugins/ml2/plugin.py:729 +#: neutron/plugins/ml2/plugin.py:622 neutron/plugins/ml2/plugin.py:737 msgid "Committing transaction" msgstr "" -#: neutron/plugins/ml2/plugin.py:620 +#: neutron/plugins/ml2/plugin.py:628 msgid "A concurrent port creation has occurred" msgstr "" -#: neutron/plugins/ml2/plugin.py:629 -#, python-format -msgid "Exception auto-deleting port %s" -msgstr "" - #: neutron/plugins/ml2/plugin.py:637 #, python-format +msgid "Exception auto-deleting port %s" +msgstr "" + +#: neutron/plugins/ml2/plugin.py:645 +#, python-format msgid "Exception auto-deleting subnet %s" msgstr "" -#: neutron/plugins/ml2/plugin.py:646 +#: neutron/plugins/ml2/plugin.py:654 msgid "mechanism_manager.delete_network_postcommit failed" msgstr "" -#: neutron/plugins/ml2/plugin.py:662 +#: neutron/plugins/ml2/plugin.py:670 #, python-format msgid "mechanism_manager.create_subnet_postcommit failed, deleting subnet '%s'" msgstr "" -#: neutron/plugins/ml2/plugin.py:694 +#: neutron/plugins/ml2/plugin.py:702 #, python-format msgid "Deleting subnet %s" msgstr "" -#: neutron/plugins/ml2/plugin.py:711 +#: neutron/plugins/ml2/plugin.py:719 #, python-format msgid "Ports to auto-deallocate: %s" msgstr "" -#: neutron/plugins/ml2/plugin.py:726 +#: neutron/plugins/ml2/plugin.py:734 msgid "Deleting subnet record" msgstr "" -#: neutron/plugins/ml2/plugin.py:745 +#: neutron/plugins/ml2/plugin.py:753 #, python-format msgid "Exception deleting fixed_ip from port %s" msgstr "" -#: neutron/plugins/ml2/plugin.py:755 +#: neutron/plugins/ml2/plugin.py:763 msgid "mechanism_manager.delete_subnet_postcommit failed" msgstr "" -#: neutron/plugins/ml2/plugin.py:787 -#, python-format -msgid "mechanism_manager.create_port_postcommit failed, deleting port '%s'" -msgstr "" - #: neutron/plugins/ml2/plugin.py:799 #, python-format +msgid "mechanism_manager.create_port_postcommit failed, deleting port '%s'" +msgstr "" + +#: neutron/plugins/ml2/plugin.py:811 +#, python-format msgid "_bind_port_if_needed failed, deleting port '%s'" msgstr "" -#: neutron/plugins/ml2/plugin.py:881 +#: neutron/plugins/ml2/plugin.py:897 #, python-format msgid "No Host supplied to bind DVR Port %s" msgstr "" -#: neutron/plugins/ml2/plugin.py:945 -#: neutron/tests/unit/ml2/test_ml2_plugin.py:144 +#: neutron/plugins/ml2/plugin.py:961 +#: neutron/tests/unit/ml2/test_ml2_plugin.py:146 #, python-format msgid "Deleting port %s" msgstr "" -#: neutron/plugins/ml2/plugin.py:965 -#: neutron/tests/unit/ml2/test_ml2_plugin.py:145 +#: neutron/plugins/ml2/plugin.py:981 +#: neutron/tests/unit/ml2/test_ml2_plugin.py:147 #, python-format msgid "The port '%s' was deleted" msgstr "" -#: neutron/plugins/ml2/plugin.py:1014 +#: neutron/plugins/ml2/plugin.py:1031 #, python-format msgid "mechanism_manager.delete_port_postcommit failed for port %s" msgstr "" -#: neutron/plugins/ml2/plugin.py:1038 +#: neutron/plugins/ml2/plugin.py:1055 #, python-format msgid "Binding info for DVR port %s not found" msgstr "" -#: neutron/plugins/ml2/plugin.py:1064 +#: neutron/plugins/ml2/plugin.py:1081 #, python-format msgid "Port %(port)s updated up by agent not found" msgstr "" -#: neutron/plugins/ml2/plugin.py:1094 +#: neutron/plugins/ml2/plugin.py:1111 #, python-format msgid "Port %s not found during update" msgstr "" @@ -9094,7 +9094,6 @@ msgid "" msgstr "" #: neutron/plugins/ml2/drivers/mech_agent.py:54 -#: neutron/plugins/ml2/drivers/mechanism_odl.py:325 #, python-format msgid "Attempting to bind port %(port)s on network %(network)s" msgstr "" @@ -9110,7 +9109,6 @@ msgid "Checking agent: %s" msgstr "" #: neutron/plugins/ml2/drivers/mech_agent.py:70 -#: neutron/plugins/ml2/drivers/mechanism_odl.py:335 #, python-format msgid "Bound using segment: %s" msgstr "" @@ -9139,56 +9137,28 @@ msgid "HTTP URL of Tail-f NCS REST interface." msgstr "" #: neutron/plugins/ml2/drivers/mechanism_ncs.py:31 -#: neutron/plugins/ml2/drivers/mechanism_odl.py:44 +#: neutron/plugins/ml2/drivers/mechanism_odl.py:41 msgid "HTTP username for authentication" msgstr "" #: neutron/plugins/ml2/drivers/mechanism_ncs.py:33 -#: neutron/plugins/ml2/drivers/mechanism_odl.py:46 +#: neutron/plugins/ml2/drivers/mechanism_odl.py:43 msgid "HTTP password for authentication" msgstr "" #: neutron/plugins/ml2/drivers/mechanism_ncs.py:35 -#: neutron/plugins/ml2/drivers/mechanism_odl.py:48 +#: neutron/plugins/ml2/drivers/mechanism_odl.py:45 msgid "HTTP timeout in seconds." msgstr "" -#: neutron/plugins/ml2/drivers/mechanism_odl.py:42 +#: neutron/plugins/ml2/drivers/mechanism_odl.py:39 msgid "HTTP URL of OpenDaylight REST interface." msgstr "" -#: neutron/plugins/ml2/drivers/mechanism_odl.py:50 +#: neutron/plugins/ml2/drivers/mechanism_odl.py:47 msgid "Tomcat session timeout in minutes." msgstr "" -#: neutron/plugins/ml2/drivers/mechanism_odl.py:100 -#, python-format -msgid "Failed to authenticate with OpenDaylight: %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/mechanism_odl.py:103 -#, python-format -msgid "Authentication Timed Out: %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/mechanism_odl.py:313 -#, python-format -msgid "ODL-----> sending URL (%s) <-----ODL" -msgstr "" - -#: neutron/plugins/ml2/drivers/mechanism_odl.py:314 -#, python-format -msgid "ODL-----> sending JSON (%s) <-----ODL" -msgstr "" - -#: neutron/plugins/ml2/drivers/mechanism_odl.py:338 -#: neutron/plugins/ml2/drivers/mech_nuage/driver.py:91 -#, python-format -msgid "" -"Refusing to bind port for segment ID %(id)s, segment %(seg)s, phys net " -"%(physnet)s, and network type %(nettype)s" -msgstr "" - #: neutron/plugins/ml2/drivers/type_flat.py:31 msgid "" "List of physical_network names with which flat networks can be created. " @@ -10031,6 +10001,13 @@ msgstr "" msgid "Expired cache entry for host %s" msgstr "" +#: neutron/plugins/ml2/drivers/mech_nuage/driver.py:91 +#, python-format +msgid "" +"Refusing to bind port for segment ID %(id)s, segment %(seg)s, phys net " +"%(physnet)s, and network type %(nettype)s" +msgstr "" + #: neutron/plugins/ml2/drivers/mech_sriov/mech_driver.py:31 msgid "" "Supported PCI vendor devices, defined by vendor_id:product_id according " @@ -10083,60 +10060,60 @@ msgstr "" msgid "Sending update port message" msgstr "" -#: neutron/plugins/mlnx/mlnx_plugin.py:121 +#: neutron/plugins/mlnx/mlnx_plugin.py:118 msgid "Mellanox Embedded Switch Plugin initialisation complete" msgstr "" -#: neutron/plugins/mlnx/mlnx_plugin.py:161 +#: neutron/plugins/mlnx/mlnx_plugin.py:158 #, python-format msgid "Invalid physical network type %(type)s.Server terminated!" msgstr "" -#: neutron/plugins/mlnx/mlnx_plugin.py:168 +#: neutron/plugins/mlnx/mlnx_plugin.py:165 #, python-format msgid "Parsing physical_network_type failed: %s. Server terminated!" msgstr "" -#: neutron/plugins/mlnx/mlnx_plugin.py:173 +#: neutron/plugins/mlnx/mlnx_plugin.py:170 #, python-format msgid "" "Invalid physical network type %(type)s for network %(net)s. Server " "terminated!" msgstr "" -#: neutron/plugins/mlnx/mlnx_plugin.py:177 +#: neutron/plugins/mlnx/mlnx_plugin.py:174 #, python-format msgid "Physical Network type mappings: %s" msgstr "" -#: neutron/plugins/mlnx/mlnx_plugin.py:185 +#: neutron/plugins/mlnx/mlnx_plugin.py:182 #: neutron/plugins/openvswitch/ovs_neutron_plugin.py:364 #, python-format msgid "%s. Server terminated!" msgstr "" -#: neutron/plugins/mlnx/mlnx_plugin.py:323 +#: neutron/plugins/mlnx/mlnx_plugin.py:320 #, python-format msgid "Unsupported vnic type %(vnic_type)s for physical network type %(net_type)s" msgstr "" -#: neutron/plugins/mlnx/mlnx_plugin.py:327 +#: neutron/plugins/mlnx/mlnx_plugin.py:324 msgid "Invalid vnic_type on port_create" msgstr "" -#: neutron/plugins/mlnx/mlnx_plugin.py:329 +#: neutron/plugins/mlnx/mlnx_plugin.py:326 msgid "vnic_type is not defined in port profile" msgstr "" -#: neutron/plugins/mlnx/mlnx_plugin.py:373 +#: neutron/plugins/mlnx/mlnx_plugin.py:370 msgid "Update network" msgstr "" -#: neutron/plugins/mlnx/mlnx_plugin.py:386 +#: neutron/plugins/mlnx/mlnx_plugin.py:383 msgid "Delete network" msgstr "" -#: neutron/plugins/mlnx/mlnx_plugin.py:434 +#: neutron/plugins/mlnx/mlnx_plugin.py:431 #, python-format msgid "create_port with %s" msgstr "" @@ -10909,145 +10886,145 @@ msgid "" "or clear protocol before changing ether type." msgstr "" -#: neutron/plugins/nuage/plugin.py:110 +#: neutron/plugins/nuage/plugin.py:113 #, python-format msgid "%(resource)s with id %(resource_id)s does not exist" msgstr "" -#: neutron/plugins/nuage/plugin.py:119 +#: neutron/plugins/nuage/plugin.py:122 #, python-format msgid "" "Either %(resource)s %(req_resource)s not found or you dont have " "credential to access it" msgstr "" -#: neutron/plugins/nuage/plugin.py:125 +#: neutron/plugins/nuage/plugin.py:128 #, python-format msgid "" "More than one entry found for %(resource)s %(req_resource)s. Use id " "instead" msgstr "" -#: neutron/plugins/nuage/plugin.py:155 +#: neutron/plugins/nuage/plugin.py:158 #, python-format msgid "Router for subnet %s not found " msgstr "" -#: neutron/plugins/nuage/plugin.py:272 +#: neutron/plugins/nuage/plugin.py:275 #, python-format msgid "Subnet %s not found on VSD" msgstr "" -#: neutron/plugins/nuage/plugin.py:418 +#: neutron/plugins/nuage/plugin.py:422 #, python-format msgid "provider:network_type %s not supported in VSP" msgstr "" -#: neutron/plugins/nuage/plugin.py:463 +#: neutron/plugins/nuage/plugin.py:469 msgid "External network with subnets can not be changed to non-external network" msgstr "" -#: neutron/plugins/nuage/plugin.py:541 +#: neutron/plugins/nuage/plugin.py:530 msgid "" "Either net_partition is not provided with subnet OR default net_partition" " is not created at the start" msgstr "" -#: neutron/plugins/nuage/plugin.py:558 +#: neutron/plugins/nuage/plugin.py:547 #, python-format msgid "Only one subnet is allowed per Provider network %s" msgstr "" -#: neutron/plugins/nuage/plugin.py:569 +#: neutron/plugins/nuage/plugin.py:558 #, python-format msgid "Only one subnet is allowed per external network %s" msgstr "" -#: neutron/plugins/nuage/plugin.py:705 +#: neutron/plugins/nuage/plugin.py:694 #, python-format msgid "" "Unable to complete operation on subnet %s.One or more ports have an IP " "allocation from this subnet." msgstr "" -#: neutron/plugins/nuage/plugin.py:732 +#: neutron/plugins/nuage/plugin.py:721 #, python-format msgid "" "Router %s does not hold default zone OR domain in VSD. Router-IF add " "failed" msgstr "" -#: neutron/plugins/nuage/plugin.py:744 +#: neutron/plugins/nuage/plugin.py:733 #, python-format msgid "Subnet %s does not hold Nuage VSD reference. Router-IF add failed" msgstr "" -#: neutron/plugins/nuage/plugin.py:754 +#: neutron/plugins/nuage/plugin.py:743 #, python-format msgid "" "Subnet %(subnet)s and Router %(router)s belong to different net_partition" " Router-IF add not permitted" msgstr "" -#: neutron/plugins/nuage/plugin.py:765 +#: neutron/plugins/nuage/plugin.py:754 #, python-format msgid "Subnet %s has one or more active VMs Router-IF add not permitted" msgstr "" -#: neutron/plugins/nuage/plugin.py:817 neutron/plugins/nuage/plugin.py:822 -#: neutron/plugins/nuage/plugin.py:828 +#: neutron/plugins/nuage/plugin.py:806 neutron/plugins/nuage/plugin.py:811 +#: neutron/plugins/nuage/plugin.py:817 #, python-format msgid "No router interface found for Router %s. Router-IF delete failed" msgstr "" -#: neutron/plugins/nuage/plugin.py:844 +#: neutron/plugins/nuage/plugin.py:833 #, python-format msgid "Subnet %s has one or more active VMs Router-IF delete not permitted" msgstr "" -#: neutron/plugins/nuage/plugin.py:853 +#: neutron/plugins/nuage/plugin.py:842 #, python-format msgid "" "Router %s does not hold net_partition assoc on Nuage VSD. Router-IF " "delete failed" msgstr "" -#: neutron/plugins/nuage/plugin.py:894 +#: neutron/plugins/nuage/plugin.py:883 msgid "" "Either net_partition is not provided with router OR default net_partition" " is not created at the start" msgstr "" -#: neutron/plugins/nuage/plugin.py:935 +#: neutron/plugins/nuage/plugin.py:924 msgid "for same subnet, multiple static routes not allowed" msgstr "" -#: neutron/plugins/nuage/plugin.py:952 +#: neutron/plugins/nuage/plugin.py:941 #, python-format msgid "Router %s does not hold net-partition assoc on VSD. extra-route failed" msgstr "" -#: neutron/plugins/nuage/plugin.py:1069 +#: neutron/plugins/nuage/plugin.py:1057 #, python-format msgid "One or more router still attached to net_partition %s." msgstr "" -#: neutron/plugins/nuage/plugin.py:1074 +#: neutron/plugins/nuage/plugin.py:1062 #, python-format msgid "NetPartition with %s does not exist" msgstr "" -#: neutron/plugins/nuage/plugin.py:1116 +#: neutron/plugins/nuage/plugin.py:1104 #, python-format msgid "sharedresource %s not found on VSD" msgstr "" -#: neutron/plugins/nuage/plugin.py:1123 neutron/plugins/nuage/plugin.py:1273 +#: neutron/plugins/nuage/plugin.py:1111 neutron/plugins/nuage/plugin.py:1261 #, python-format msgid "router %s is not associated with any net-partition" msgstr "" -#: neutron/plugins/nuage/plugin.py:1156 +#: neutron/plugins/nuage/plugin.py:1144 msgid "Floating IP can not be associated to VM in different router context" msgstr "" @@ -11644,16 +11621,16 @@ msgstr "" #: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1029 #: neutron/tests/unit/ofagent/test_ofa_neutron_agent.py:799 -#: neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py:1271 +#: neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py:1274 msgid "ofport should have a value that can be interpreted as an integer" msgstr "" #: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1032 #: neutron/tests/unit/ofagent/test_ofa_neutron_agent.py:782 #: neutron/tests/unit/ofagent/test_ofa_neutron_agent.py:802 -#: neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py:1254 -#: neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py:1274 -#: neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py:1291 +#: neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py:1257 +#: neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py:1277 +#: neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py:1294 #, python-format msgid "Failed to set-up %(type)s tunnel port to %(ip)s" msgstr "" @@ -13554,11 +13531,6 @@ msgstr "" msgid "Unable to process default l2 gw service:%s" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:248 -#, python-format -msgid "Created NSX router port:%s" -msgstr "" - #: neutron/plugins/vmware/plugins/base.py:250 #: neutron/plugins/vmware/plugins/service.py:439 #, python-format @@ -13572,11 +13544,6 @@ msgid "" "router %(nsx_router_id)s" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:332 -#, python-format -msgid "Attached %(att)s to NSX router port %(port)s" -msgstr "" - #: neutron/plugins/vmware/plugins/base.py:338 #, python-format msgid "" @@ -13611,13 +13578,6 @@ msgid "" "%s will be down." msgstr "" -#: neutron/plugins/vmware/plugins/base.py:463 -#, python-format -msgid "" -"_nsx_create_port completed for port %(name)s on network %(network_id)s. " -"The new port id is %(id)s." -msgstr "" - #: neutron/plugins/vmware/plugins/base.py:474 #, python-format msgid "" @@ -13625,21 +13585,6 @@ msgid "" "to be rolled back for Neutron port: %(neutron_id)s" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:486 -#, python-format -msgid "NSX Port %s already gone" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:501 -#, python-format -msgid "Port '%s' was already deleted on NSX platform" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:508 -#, python-format -msgid "_nsx_delete_port completed for port %(port_id)s on network %(net_id)s" -msgstr "" - #: neutron/plugins/vmware/plugins/base.py:513 #, python-format msgid "Port %s not found in NSX" @@ -13667,13 +13612,6 @@ msgid "" "as '%s'" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:574 -#, python-format -msgid "" -"_nsx_create_router_port completed for port %(name)s on network " -"%(network_id)s. The new port id is %(id)s." -msgstr "" - #: neutron/plugins/vmware/plugins/base.py:587 #, python-format msgid "" @@ -13686,13 +13624,6 @@ msgstr "" msgid "The gateway port for the NSX router %s was not found on the backend" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:638 -#, python-format -msgid "" -"_nsx_create_ext_gw_port completed on external network %(ext_net_id)s, " -"attached to router:%(router_id)s. NSX port id is %(nsx_port_id)s" -msgstr "" - #: neutron/plugins/vmware/plugins/base.py:673 #: neutron/plugins/vmware/plugins/base.py:1749 #, python-format @@ -13704,20 +13635,6 @@ msgstr "" msgid "Unable to update logical routeron NSX Platform" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:679 -#, python-format -msgid "" -"_nsx_delete_ext_gw_port completed on external network %(ext_net_id)s, " -"attached to NSX router:%(router_id)s" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:721 -#, python-format -msgid "" -"_nsx_create_l2_gw_port completed for port %(name)s on network " -"%(network_id)s. The new port id is %(id)s." -msgstr "" - #: neutron/plugins/vmware/plugins/base.py:765 #, python-format msgid "%s required" @@ -13742,11 +13659,6 @@ msgstr "" msgid "%(net_type_param)s %(net_type_value)s not supported" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:849 -#, python-format -msgid "No switch has available ports (%d checked)" -msgstr "" - #: neutron/plugins/vmware/plugins/base.py:883 #, python-format msgid "Maximum number of logical ports reached for logical network %s" @@ -13780,11 +13692,6 @@ msgid "" "id:%(net_id)s; NSX lswitch id:%(lswitch_id)s;Error:%(error)s" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1148 -#, python-format -msgid "port created on NSX backend for tenant %(tenant_id)s: (%(id)s)" -msgstr "" - #: neutron/plugins/vmware/plugins/base.py:1151 #, python-format msgid "Logical switch for network %s was not found in NSX." @@ -13794,11 +13701,6 @@ msgstr "" msgid "Unable to create port or set port attachment in NSX." msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1250 -#, python-format -msgid "Updating port: %s" -msgstr "" - #: neutron/plugins/vmware/plugins/base.py:1285 #, python-format msgid "Unable to update port id: %s." @@ -13884,13 +13786,6 @@ msgid "" "the following exception:%(d_exc)s" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1686 -#, python-format -msgid "" -"Add_router_interface completed for subnet:%(subnet_id)s and " -"router:%(router_id)s" -msgstr "" - #: neutron/plugins/vmware/plugins/base.py:1785 #, python-format msgid "" @@ -13913,11 +13808,6 @@ msgstr "" msgid "Failed to update NAT rules for floatingip update" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1977 -#, python-format -msgid "The port '%s' is not associated with floating IPs" -msgstr "" - #: neutron/plugins/vmware/plugins/base.py:1980 #, python-format msgid "Nat rules not found in nsx for port: %s" @@ -13939,14 +13829,6 @@ msgstr "" msgid "Unable to update name on NSX backend for network gateway: %s" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:2144 -#: neutron/plugins/vmware/plugins/base.py:2182 -#, python-format -msgid "" -"Neutron gateway device: %(neutron_id)s; NSX transport node identifier: " -"%(nsx_id)s; Operational status: %(status)s." -msgstr "" - #: neutron/plugins/vmware/plugins/base.py:2279 #, python-format msgid "" @@ -13993,24 +13875,6 @@ msgstr "" msgid "Port values not valid for protocol: %s" msgstr "" -#: neutron/plugins/vmware/plugins/service.py:144 -#, python-format -msgid "EDGE: router = %s" -msgstr "" - -#: neutron/plugins/vmware/plugins/service.py:175 -msgid "EDGE: _vcns_create_ext_gw_port" -msgstr "" - -#: neutron/plugins/vmware/plugins/service.py:184 -msgid "EDGE: _vcns_delete_ext_gw_port" -msgstr "" - -#: neutron/plugins/vmware/plugins/service.py:339 -#, python-format -msgid "VCNS: delete default gateway %s" -msgstr "" - #: neutron/plugins/vmware/plugins/service.py:424 #, python-format msgid "An exception occurred while creating a port on lswitch %s" @@ -14086,10 +13950,6 @@ msgstr "" msgid "Failed to create pool on vshield edge" msgstr "" -#: neutron/plugins/vmware/plugins/service.py:1223 -msgid "create_vip() called" -msgstr "" - #: neutron/plugins/vmware/plugins/service.py:1231 #, python-format msgid "router_id: %s is not an advanced router!" @@ -14159,70 +14019,16 @@ msgid "" "%(vpnservice_id)s on vShield Edge: %(edge_id)s" msgstr "" -#: neutron/plugins/vmware/plugins/service.py:1611 -msgid "create_vpnservice() called" -msgstr "" - #: neutron/plugins/vmware/plugins/service.py:1619 #, python-format msgid "a vpnservice is already associated with the router: %s" msgstr "" -#: neutron/plugins/vmware/plugins/service.py:1732 -#, python-format -msgid "Start deploying %(edge_id)s for router %(name)s" -msgstr "" - #: neutron/plugins/vmware/plugins/service.py:1756 #, python-format msgid "Router %s not found" msgstr "" -#: neutron/plugins/vmware/plugins/service.py:1759 -#, python-format -msgid "Successfully deployed %(edge_id)s for router %(name)s" -msgstr "" - -#: neutron/plugins/vmware/plugins/service.py:1775 -#, python-format -msgid "Failed to deploy Edge for router %s" -msgstr "" - -#: neutron/plugins/vmware/plugins/service.py:1791 -#, python-format -msgid "interface_update_result %d" -msgstr "" - -#: neutron/plugins/vmware/plugins/service.py:1794 -#, python-format -msgid "snat_create_result %d" -msgstr "" - -#: neutron/plugins/vmware/plugins/service.py:1797 -#, python-format -msgid "snat_delete_result %d" -msgstr "" - -#: neutron/plugins/vmware/plugins/service.py:1800 -#, python-format -msgid "dnat_create_result %d" -msgstr "" - -#: neutron/plugins/vmware/plugins/service.py:1803 -#, python-format -msgid "dnat_delete_result %d" -msgstr "" - -#: neutron/plugins/vmware/plugins/service.py:1806 -#, python-format -msgid "routes_update_result %d" -msgstr "" - -#: neutron/plugins/vmware/plugins/service.py:1809 -#, python-format -msgid "nat_update_result %d" -msgstr "" - #: neutron/plugins/vmware/shell/commands.py:24 #, python-format msgid "" @@ -14265,11 +14071,6 @@ msgid "" "%s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:159 -#, python-format -msgid "VCNS: start updating vnic %s" -msgstr "" - #: neutron/plugins/vmware/vshield/edge_appliance_driver.py:164 #, python-format msgid "" @@ -14282,26 +14083,11 @@ msgstr "" msgid "VCNS: Failed to update vnic %d" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:178 -#, python-format -msgid "VCNS: update vnic %(index)d: %(addr)s %(netmask)s" -msgstr "" - #: neutron/plugins/vmware/vshield/edge_appliance_driver.py:187 #, python-format msgid "Vnic %d currently not supported" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:208 -#, python-format -msgid "VCNS: start deploying edge %s" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:216 -#, python-format -msgid "VCNS: deploying edge %s" -msgstr "" - #: neutron/plugins/vmware/vshield/edge_appliance_driver.py:221 #, python-format msgid "VCNS: deploy edge failed for router %s." @@ -14322,26 +14108,11 @@ msgstr "" msgid "VCNS: Unable to retrieve edge %s status. Abort." msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:256 -#, python-format -msgid "VCNS: Edge %s status" -msgstr "" - #: neutron/plugins/vmware/vshield/edge_appliance_driver.py:263 #, python-format msgid "VCNS: Failed to deploy edge %(edge_id)s for %(name)s, status %(status)d" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:270 -#, python-format -msgid "VCNS: Edge %(edge_id)s deployed for router %(name)s" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:277 -#, python-format -msgid "VCNS: start destroying edge %s" -msgstr "" - #: neutron/plugins/vmware/vshield/edge_appliance_driver.py:285 #, python-format msgid "" @@ -14368,11 +14139,6 @@ msgid "" "%s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:386 -#, python-format -msgid "VCNS: start creating nat rules: %s" -msgstr "" - #: neutron/plugins/vmware/vshield/edge_appliance_driver.py:402 #: neutron/plugins/vmware/vshield/edge_appliance_driver.py:527 #, python-format @@ -14381,16 +14147,6 @@ msgid "" "%s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:410 -#, python-format -msgid "VCNS: create snat rule %(src)s/%(translated)s" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:433 -#, python-format -msgid "VCNS: start deleting %(type)s rules: %(addr)s" -msgstr "" - #: neutron/plugins/vmware/vshield/edge_appliance_driver.py:444 #, python-format msgid "" @@ -14398,39 +14154,6 @@ msgid "" "%s" msgstr "" -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:451 -#, python-format -msgid "VCNS: delete snat rule %s" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:469 -#, python-format -msgid "VCNS: create dnat rule %(dst)s/%(translated)s" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:490 -#, python-format -msgid "VCNS: delete dnat rule %s" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:514 -#, python-format -msgid "VCNS: start updating nat rules: %s" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:535 -#, python-format -msgid "" -"VCNS: update nat rule\n" -"SNAT:%(snat)s\n" -"DNAT:%(dnat)s\n" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:573 -#, python-format -msgid "VCNS: start updating routes for %s" -msgstr "" - #: neutron/plugins/vmware/vshield/edge_appliance_driver.py:597 #, python-format msgid "" @@ -14659,21 +14382,6 @@ msgstr "" msgid "Failed to delete monitor" msgstr "" -#: neutron/plugins/vmware/vshield/vcns.py:52 -#, python-format -msgid "VcnsApiHelper('%(method)s', '%(uri)s', '%(body)s')" -msgstr "" - -#: neutron/plugins/vmware/vshield/vcns.py:60 -#, python-format -msgid "Header: '%s'" -msgstr "" - -#: neutron/plugins/vmware/vshield/vcns.py:61 -#, python-format -msgid "Content: '%s'" -msgstr "" - #: neutron/plugins/vmware/vshield/common/exceptions.py:33 #, python-format msgid "%(resource)s not found: %(msg)s" @@ -14741,12 +14449,6 @@ msgstr "" msgid "Task %(task)s encountered exception in %(cb)s" msgstr "" -#: neutron/plugins/vmware/vshield/tasks/tasks.py:194 -#: neutron/plugins/vmware/vshield/tasks/tasks.py:213 -#, python-format -msgid "Task %(task)s return %(status)s" -msgstr "" - #: neutron/plugins/vmware/vshield/tasks/tasks.py:296 msgid "Stopping TaskManager" msgstr "" diff --git a/neutron/locale/pt_BR/LC_MESSAGES/neutron-log-error.po b/neutron/locale/pt_BR/LC_MESSAGES/neutron-log-error.po index 3d75808b74d..9de0d70b820 100644 --- a/neutron/locale/pt_BR/LC_MESSAGES/neutron-log-error.po +++ b/neutron/locale/pt_BR/LC_MESSAGES/neutron-log-error.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Neutron\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-15 06:11+0000\n" +"POT-Creation-Date: 2014-09-29 06:04+0000\n" "PO-Revision-Date: 2014-08-26 11:11+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/" @@ -19,7 +19,7 @@ msgstr "" "Generated-By: Babel 1.3\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: neutron/policy.py:115 +#: neutron/policy.py:119 #, python-format msgid "" "Backward compatibility unavailable for deprecated policy %s. The policy will " @@ -28,7 +28,7 @@ msgstr "" "Retro compatibilidade não disponível para política deprecada %s. A política " "não será garantida" -#: neutron/policy.py:280 +#: neutron/policy.py:311 #, python-format msgid "Policy check error while calling %s!" msgstr "Erro de verificação de políticas enquanto chamando %s!" @@ -38,22 +38,32 @@ msgstr "Erro de verificação de políticas enquanto chamando %s!" msgid "Unable to process HA router %s without ha port" msgstr "" -#: neutron/agent/linux/external_process.py:230 +#: neutron/agent/linux/external_process.py:229 #, python-format msgid "" "%(service)s for %(resource_type)s with uuid %(uuid)s not found. The process " "should not have died" msgstr "" -#: neutron/agent/linux/external_process.py:250 +#: neutron/agent/linux/external_process.py:249 #, python-format msgid "respawning %(service)s for uuid %(uuid)s" msgstr "" -#: neutron/agent/linux/external_process.py:256 +#: neutron/agent/linux/external_process.py:255 msgid "Exiting agent as programmed in check_child_processes_actions" msgstr "" +#: neutron/agent/linux/interface.py:154 +#, python-format +msgid "Failed deleting ingress connection state of floatingip %s" +msgstr "" + +#: neutron/agent/linux/interface.py:163 +#, python-format +msgid "Failed deleting egress connection state of floatingip %s" +msgstr "" + #: neutron/cmd/sanity_check.py:58 msgid "" "Nova notifications are enabled, but novaclient is not installed. Either " @@ -83,40 +93,40 @@ msgstr "Exceção durante limpeza de RPC." msgid "Unhandled exception" msgstr "Exceção não tratada" -#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:283 +#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:279 #, python-format msgid "Unable to delete port '%(pname)s' on switch. Exception: %(exp)s" msgstr "" -#: neutron/plugins/ml2/drivers/type_gre.py:80 +#: neutron/plugins/ml2/drivers/type_gre.py:86 #, python-format msgid "Skipping unreasonable gre ID range %(tun_min)s:%(tun_max)s" msgstr "Pulando faixa irracional do ID GRE %(tun_min)s:%(tun_max)s" -#: neutron/plugins/ml2/drivers/type_vxlan.py:87 +#: neutron/plugins/ml2/drivers/type_vxlan.py:92 #, python-format msgid "Skipping unreasonable VXLAN VNI range %(tun_min)s:%(tun_max)s" msgstr "Pulando faixa irracional do VXLAN VNI %(tun_min)s:%(tun_max)s" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:112 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:110 msgid "APIC service agent: failed in reporting state" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:207 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:205 #, python-format msgid "No such interface (ignored): %s" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:257 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:255 msgid "APIC service agent: exception in LLDP parsing" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:312 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:310 #, python-format msgid "APIC service agent: can not get MACaddr for %s" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:328 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:326 msgid "APIC host agent: failed in reporting state" msgstr "" @@ -124,7 +134,7 @@ msgstr "" msgid "Error in agent event loop" msgstr "Erro no loop de eventos do agente" -#: neutron/plugins/nuage/syncmanager.py:56 +#: neutron/plugins/nuage/syncmanager.py:55 #, python-format msgid "Cannot complete the sync between Neutron and VSD because of error:%s" msgstr "" @@ -201,7 +211,7 @@ msgstr "" msgid "Error while processing VIF ports" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:2089 +#: neutron/plugins/vmware/plugins/base.py:2099 #, python-format msgid "" "Rolling back database changes for gateway device %s because of an error in " diff --git a/neutron/locale/te_IN/LC_MESSAGES/neutron-log-error.po b/neutron/locale/te_IN/LC_MESSAGES/neutron-log-error.po index 4be8143f26b..e19394f5a7b 100644 --- a/neutron/locale/te_IN/LC_MESSAGES/neutron-log-error.po +++ b/neutron/locale/te_IN/LC_MESSAGES/neutron-log-error.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Neutron\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-15 06:11+0000\n" +"POT-Creation-Date: 2014-09-29 06:04+0000\n" "PO-Revision-Date: 2014-08-12 21:24+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: Telugu (India) (http://www.transifex.com/projects/p/neutron/" @@ -20,14 +20,14 @@ msgstr "" "Generated-By: Babel 1.3\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: neutron/policy.py:115 +#: neutron/policy.py:119 #, python-format msgid "" "Backward compatibility unavailable for deprecated policy %s. The policy will " "not be enforced" msgstr "నిరాశపర్చింది విధానం %s కోసం అందుబాటులో వెనుకబడిన అనుకూలత. విధానం అమలు చేయబడదు" -#: neutron/policy.py:280 +#: neutron/policy.py:311 #, python-format msgid "Policy check error while calling %s!" msgstr "పాలసీ చెక్ లోపం %s కాల్ఐంది !" @@ -37,22 +37,32 @@ msgstr "పాలసీ చెక్ లోపం %s కాల్ఐంది !" msgid "Unable to process HA router %s without ha port" msgstr "" -#: neutron/agent/linux/external_process.py:230 +#: neutron/agent/linux/external_process.py:229 #, python-format msgid "" "%(service)s for %(resource_type)s with uuid %(uuid)s not found. The process " "should not have died" msgstr "" -#: neutron/agent/linux/external_process.py:250 +#: neutron/agent/linux/external_process.py:249 #, python-format msgid "respawning %(service)s for uuid %(uuid)s" msgstr "" -#: neutron/agent/linux/external_process.py:256 +#: neutron/agent/linux/external_process.py:255 msgid "Exiting agent as programmed in check_child_processes_actions" msgstr "" +#: neutron/agent/linux/interface.py:154 +#, python-format +msgid "Failed deleting ingress connection state of floatingip %s" +msgstr "" + +#: neutron/agent/linux/interface.py:163 +#, python-format +msgid "Failed deleting egress connection state of floatingip %s" +msgstr "" + #: neutron/cmd/sanity_check.py:58 msgid "" "Nova notifications are enabled, but novaclient is not installed. Either " @@ -84,40 +94,40 @@ msgstr "RPC క్లీనప్ సమయంలో మినహాయింప msgid "Unhandled exception" msgstr "నిర్వహించని మినహాయింపు" -#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:283 +#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:279 #, python-format msgid "Unable to delete port '%(pname)s' on switch. Exception: %(exp)s" msgstr "" -#: neutron/plugins/ml2/drivers/type_gre.py:80 +#: neutron/plugins/ml2/drivers/type_gre.py:86 #, python-format msgid "Skipping unreasonable gre ID range %(tun_min)s:%(tun_max)s" msgstr "" -#: neutron/plugins/ml2/drivers/type_vxlan.py:87 +#: neutron/plugins/ml2/drivers/type_vxlan.py:92 #, python-format msgid "Skipping unreasonable VXLAN VNI range %(tun_min)s:%(tun_max)s" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:112 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:110 msgid "APIC service agent: failed in reporting state" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:207 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:205 #, python-format msgid "No such interface (ignored): %s" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:257 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:255 msgid "APIC service agent: exception in LLDP parsing" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:312 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:310 #, python-format msgid "APIC service agent: can not get MACaddr for %s" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:328 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:326 msgid "APIC host agent: failed in reporting state" msgstr "" @@ -125,7 +135,7 @@ msgstr "" msgid "Error in agent event loop" msgstr "" -#: neutron/plugins/nuage/syncmanager.py:56 +#: neutron/plugins/nuage/syncmanager.py:55 #, python-format msgid "Cannot complete the sync between Neutron and VSD because of error:%s" msgstr "" @@ -202,7 +212,7 @@ msgstr "" msgid "Error while processing VIF ports" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:2089 +#: neutron/plugins/vmware/plugins/base.py:2099 #, python-format msgid "" "Rolling back database changes for gateway device %s because of an error in " diff --git a/neutron/locale/zh_CN/LC_MESSAGES/neutron-log-error.po b/neutron/locale/zh_CN/LC_MESSAGES/neutron-log-error.po index 3a542fad8ed..d23531a4196 100644 --- a/neutron/locale/zh_CN/LC_MESSAGES/neutron-log-error.po +++ b/neutron/locale/zh_CN/LC_MESSAGES/neutron-log-error.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Neutron\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-15 06:11+0000\n" +"POT-Creation-Date: 2014-09-29 06:04+0000\n" "PO-Revision-Date: 2014-07-21 17:03+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: Chinese (China) (http://www.transifex.com/projects/p/neutron/" @@ -19,14 +19,14 @@ msgstr "" "Generated-By: Babel 1.3\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: neutron/policy.py:115 +#: neutron/policy.py:119 #, python-format msgid "" "Backward compatibility unavailable for deprecated policy %s. The policy will " "not be enforced" msgstr "被废弃的策略%s不支持功能回退,这个策略将不再被使用" -#: neutron/policy.py:280 +#: neutron/policy.py:311 #, python-format msgid "Policy check error while calling %s!" msgstr "" @@ -36,22 +36,32 @@ msgstr "" msgid "Unable to process HA router %s without ha port" msgstr "" -#: neutron/agent/linux/external_process.py:230 +#: neutron/agent/linux/external_process.py:229 #, python-format msgid "" "%(service)s for %(resource_type)s with uuid %(uuid)s not found. The process " "should not have died" msgstr "" -#: neutron/agent/linux/external_process.py:250 +#: neutron/agent/linux/external_process.py:249 #, python-format msgid "respawning %(service)s for uuid %(uuid)s" msgstr "" -#: neutron/agent/linux/external_process.py:256 +#: neutron/agent/linux/external_process.py:255 msgid "Exiting agent as programmed in check_child_processes_actions" msgstr "" +#: neutron/agent/linux/interface.py:154 +#, python-format +msgid "Failed deleting ingress connection state of floatingip %s" +msgstr "" + +#: neutron/agent/linux/interface.py:163 +#, python-format +msgid "Failed deleting egress connection state of floatingip %s" +msgstr "" + #: neutron/cmd/sanity_check.py:58 msgid "" "Nova notifications are enabled, but novaclient is not installed. Either " @@ -81,40 +91,40 @@ msgstr "在RPC清除期间发生异常。" msgid "Unhandled exception" msgstr "存在未处理的异常" -#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:283 +#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:279 #, python-format msgid "Unable to delete port '%(pname)s' on switch. Exception: %(exp)s" msgstr "" -#: neutron/plugins/ml2/drivers/type_gre.py:80 +#: neutron/plugins/ml2/drivers/type_gre.py:86 #, python-format msgid "Skipping unreasonable gre ID range %(tun_min)s:%(tun_max)s" msgstr "" -#: neutron/plugins/ml2/drivers/type_vxlan.py:87 +#: neutron/plugins/ml2/drivers/type_vxlan.py:92 #, python-format msgid "Skipping unreasonable VXLAN VNI range %(tun_min)s:%(tun_max)s" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:112 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:110 msgid "APIC service agent: failed in reporting state" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:207 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:205 #, python-format msgid "No such interface (ignored): %s" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:257 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:255 msgid "APIC service agent: exception in LLDP parsing" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:312 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:310 #, python-format msgid "APIC service agent: can not get MACaddr for %s" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:328 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:326 msgid "APIC host agent: failed in reporting state" msgstr "" @@ -122,7 +132,7 @@ msgstr "" msgid "Error in agent event loop" msgstr "" -#: neutron/plugins/nuage/syncmanager.py:56 +#: neutron/plugins/nuage/syncmanager.py:55 #, python-format msgid "Cannot complete the sync between Neutron and VSD because of error:%s" msgstr "" @@ -199,7 +209,7 @@ msgstr "" msgid "Error while processing VIF ports" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:2089 +#: neutron/plugins/vmware/plugins/base.py:2099 #, python-format msgid "" "Rolling back database changes for gateway device %s because of an error in " From ea3a0a428fac308f9ab65d0beb733de380cace56 Mon Sep 17 00:00:00 2001 From: Koteswara Rao Kelam Date: Fri, 26 Sep 2014 04:34:11 -0700 Subject: [PATCH 042/128] Disallow unsharing used firewall policy When admin policy p1 is shared and is used by firewall f1 of different tenant, then updating p1 with shared=False should not be allowed as it is in use. Change-Id: I7c753f9d8a25a7edc40233316398475c8ad3efe9 Closes-bug: #1334994 --- neutron/db/firewall/firewall_db.py | 6 ++++++ neutron/tests/unit/db/firewall/test_db_firewall.py | 10 ++++++++++ 2 files changed, 16 insertions(+) diff --git a/neutron/db/firewall/firewall_db.py b/neutron/db/firewall/firewall_db.py index 7321d1d126f..9c8ce696ac9 100644 --- a/neutron/db/firewall/firewall_db.py +++ b/neutron/db/firewall/firewall_db.py @@ -338,6 +338,12 @@ class Firewall_db_mixin(firewall.FirewallPluginBase, base_db.CommonDbMixin): fwp = firewall_policy['firewall_policy'] with context.session.begin(subtransactions=True): fwp_db = self._get_firewall_policy(context, id) + # check tenant ids are same for fw and fwp or not + if not fwp.get('shared', True) and fwp_db.firewalls: + for fw in fwp_db['firewalls']: + if fwp_db['tenant_id'] != fw['tenant_id']: + raise firewall.FirewallPolicyInUse( + firewall_policy_id=id) # check any existing rules are not shared if 'shared' in fwp and 'firewall_rules' not in fwp: self._check_unshared_rules_for_policy(fwp_db, fwp) diff --git a/neutron/tests/unit/db/firewall/test_db_firewall.py b/neutron/tests/unit/db/firewall/test_db_firewall.py index 0dd6f42aac0..c25ba330506 100644 --- a/neutron/tests/unit/db/firewall/test_db_firewall.py +++ b/neutron/tests/unit/db/firewall/test_db_firewall.py @@ -573,6 +573,16 @@ class TestFirewallDBPlugin(FirewallPluginDbTestCase): res = req.get_response(self.ext_api) self.assertEqual(webob.exc.HTTPConflict.code, res.status_int) + def test_update_firewall_policy_assoc_with_other_tenant_firewall(self): + with self.firewall_policy(shared=True, tenant_id='tenant1') as fwp: + fwp_id = fwp['firewall_policy']['id'] + with self.firewall(firewall_policy_id=fwp_id): + data = {'firewall_policy': {'shared': False}} + req = self.new_update_request('firewall_policies', data, + fwp['firewall_policy']['id']) + res = req.get_response(self.ext_api) + self.assertEqual(webob.exc.HTTPConflict.code, res.status_int) + def test_delete_firewall_policy(self): ctx = context.get_admin_context() with self.firewall_policy(do_delete=False) as fwp: From 2abb77b4dadd4150f554f134ec99b07c2b28900f Mon Sep 17 00:00:00 2001 From: johndavidge Date: Fri, 8 Aug 2014 04:48:59 -0700 Subject: [PATCH 043/128] Do not assume order of report list elements This fixes the test_report_multiple_services unit test that breaks with a randomized PYTHONHASHSEED (see the bug report). The test assumed that the report list from self.driver.report_status() had elements in a particular order. Found with PYTHONHASHSEED=2455351445. The fix refactors the test case to handle an unsorted report list by sorting it before checking equality. Partial-bug: #1348818 Note: There are several other unrelated unit tests that also break with a randomized PYTHONHASHSEED, but they are not addressed here. They will be addressed in separate patches. Change-Id: I542c3818821fa2f6e460fd254a3842530ecea8d9 --- .../unit/services/vpn/device_drivers/test_cisco_ipsec.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/neutron/tests/unit/services/vpn/device_drivers/test_cisco_ipsec.py b/neutron/tests/unit/services/vpn/device_drivers/test_cisco_ipsec.py index f08364894ca..fe373055c61 100644 --- a/neutron/tests/unit/services/vpn/device_drivers/test_cisco_ipsec.py +++ b/neutron/tests/unit/services/vpn/device_drivers/test_cisco_ipsec.py @@ -14,6 +14,7 @@ import copy import httplib +import operator import mock @@ -1530,7 +1531,8 @@ class TestCiscoCsrIPsecDeviceDriverSyncStatuses(base.BaseTestCase): u'4': {u'status': constants.ACTIVE, u'updated_pending_status': True}} }] - self.assertEqual(expected_report, report) + self.assertEqual(expected_report, + sorted(report, key=operator.itemgetter('id'))) # Check that service and connection statuses are updated self.assertEqual(constants.ACTIVE, vpn_service1.last_status) self.assertEqual(constants.ACTIVE, From c048d3fb480cbd9033152c745802691876b7ba0d Mon Sep 17 00:00:00 2001 From: John Kasperski Date: Thu, 25 Sep 2014 10:38:45 -0500 Subject: [PATCH 044/128] Update migration scripts to support DB2 Three of the migration scripts are causing failures with DB2. - DB2 doesn't support nullable column in primary key - Hard coded SQL statements which use False/True as Boolean arguments are not compatible with DB2. In DB2, Boolean columns are created as small integer with a constraint to allow only 0 & 1. - Hardcoded update rows from other table sql is not compatible with DB2 - Foreign key constraints require additional handling Co-authored-by: Rahul Priyadarshi Change-Id: I82e2d1c522b81fed90a1e5cc6f2321f80797cf7b Closes-Bug: #1328019 --- ...1d7f831a591_add_constraint_for_routerid.py | 107 +++++++++++++----- ...7f7f7c456_l3_extension_distributed_mode.py | 12 +- ...cbf1c_unify_nsx_router_extra_attributes.py | 7 ++ 3 files changed, 95 insertions(+), 31 deletions(-) diff --git a/neutron/db/migration/alembic_migrations/versions/31d7f831a591_add_constraint_for_routerid.py b/neutron/db/migration/alembic_migrations/versions/31d7f831a591_add_constraint_for_routerid.py index 7deebe0edeb..0ba5f58be7d 100644 --- a/neutron/db/migration/alembic_migrations/versions/31d7f831a591_add_constraint_for_routerid.py +++ b/neutron/db/migration/alembic_migrations/versions/31d7f831a591_add_constraint_for_routerid.py @@ -27,6 +27,7 @@ down_revision = '37f322991f59' from alembic import op import sqlalchemy as sa +from sqlalchemy.engine import reflection TABLE_NAME = 'routerl3agentbindings' PK_NAME = 'pk_routerl3agentbindings' @@ -49,7 +50,7 @@ def upgrade(): # and all the duplicate records which violate the PK # constraint need to be removed. context = op.get_context() - if context.bind.dialect.name == 'postgresql': + if context.bind.dialect.name in ('postgresql', 'ibm_db_sa'): op.execute('DELETE FROM %(table)s WHERE id in (' 'SELECT %(table)s.id FROM %(table)s LEFT OUTER JOIN ' '(SELECT MIN(id) as id, router_id, l3_agent_id ' @@ -65,6 +66,19 @@ def upgrade(): op.drop_column(TABLE_NAME, 'id') + # DB2 doesn't support nullable column in primary key + if context.bind.dialect.name == 'ibm_db_sa': + op.alter_column( + table_name=TABLE_NAME, + column_name='router_id', + nullable=False + ) + op.alter_column( + table_name=TABLE_NAME, + column_name='l3_agent_id', + nullable=False + ) + op.create_primary_key( name=PK_NAME, table_name=TABLE_NAME, @@ -79,16 +93,32 @@ def downgrade(): # Drop the existed foreign key constraints # In order to perform primary key changes - op.drop_constraint( - name=fk_names[dialect]['l3_agent_id'], - table_name=TABLE_NAME, - type_='foreignkey' - ) - op.drop_constraint( - name=fk_names[dialect]['router_id'], - table_name=TABLE_NAME, - type_='foreignkey' - ) + db2fks = {} + if dialect == 'ibm_db_sa': + # NOTE(mriedem): In DB2 the foreign key names are randomly generated + # if you didn't originally explicitly name them, so the name is like + # SQLxxxxx where the suffix is a random integer. Therefore we go + # through and just drop all of the foreign keys and save them so we + # can re-create them later after the primary key is dropped. + inspector = reflection.Inspector.from_engine(op.get_bind().engine) + db2fks = inspector.get_foreign_keys(TABLE_NAME) + for fk in db2fks: + op.drop_constraint( + name=fk.get('name'), + table_name=TABLE_NAME, + type_='foreignkey' + ) + else: + op.drop_constraint( + name=fk_names[dialect]['l3_agent_id'], + table_name=TABLE_NAME, + type_='foreignkey' + ) + op.drop_constraint( + name=fk_names[dialect]['router_id'], + table_name=TABLE_NAME, + type_='foreignkey' + ) op.drop_constraint( name=PK_NAME, @@ -101,27 +131,46 @@ def downgrade(): sa.Column('id', sa.String(32)) ) - # Restore the foreign key constraints - op.create_foreign_key( - name=fk_names[dialect]['router_id'], - source=TABLE_NAME, - referent='routers', - local_cols=['router_id'], - remote_cols=['id'], - ondelete='CASCADE' - ) - - op.create_foreign_key( - name=fk_names[dialect]['l3_agent_id'], - source=TABLE_NAME, - referent='agents', - local_cols=['l3_agent_id'], - remote_cols=['id'], - ondelete='CASCADE' - ) + if dialect == 'ibm_db_sa': + # DB2 doesn't support nullable column in primary key + op.alter_column( + table_name=TABLE_NAME, + column_name='id', + nullable=False + ) op.create_primary_key( name=PK_NAME, table_name=TABLE_NAME, cols=['id'] ) + + # Restore the foreign key constraints + if dialect == 'ibm_db_sa': + for fk in db2fks: + op.create_foreign_key( + name=fk.get('name'), + source=TABLE_NAME, + referent=fk.get('referred_table'), + local_cols=fk.get('constrained_columns'), + remote_cols=fk.get('referred_columns'), + ondelete='CASCADE' + ) + else: + op.create_foreign_key( + name=fk_names[dialect]['router_id'], + source=TABLE_NAME, + referent='routers', + local_cols=['router_id'], + remote_cols=['id'], + ondelete='CASCADE' + ) + + op.create_foreign_key( + name=fk_names[dialect]['l3_agent_id'], + source=TABLE_NAME, + referent='agents', + local_cols=['l3_agent_id'], + remote_cols=['id'], + ondelete='CASCADE' + ) diff --git a/neutron/db/migration/alembic_migrations/versions/3927f7f7c456_l3_extension_distributed_mode.py b/neutron/db/migration/alembic_migrations/versions/3927f7f7c456_l3_extension_distributed_mode.py index 1dc8456aeb0..c4c8cf9db55 100644 --- a/neutron/db/migration/alembic_migrations/versions/3927f7f7c456_l3_extension_distributed_mode.py +++ b/neutron/db/migration/alembic_migrations/versions/3927f7f7c456_l3_extension_distributed_mode.py @@ -29,6 +29,7 @@ import sqlalchemy as sa def upgrade(): + context = op.get_context() op.create_table( 'router_extra_attributes', sa.Column('router_id', sa.String(length=36), nullable=False), @@ -38,8 +39,15 @@ def upgrade(): ['router_id'], ['routers.id'], ondelete='CASCADE'), sa.PrimaryKeyConstraint('router_id') ) - op.execute("INSERT INTO router_extra_attributes SELECT id as router_id, " - "False as distributed from routers") + if context.bind.dialect.name == 'ibm_db_sa': + # NOTE(mriedem): DB2 stores booleans as 0 and 1. + op.execute("INSERT INTO router_extra_attributes " + "SELECT id as router_id, " + "0 as distributed from routers") + else: + op.execute("INSERT INTO router_extra_attributes " + "SELECT id as router_id, " + "False as distributed from routers") def downgrade(): diff --git a/neutron/db/migration/alembic_migrations/versions/884573acbf1c_unify_nsx_router_extra_attributes.py b/neutron/db/migration/alembic_migrations/versions/884573acbf1c_unify_nsx_router_extra_attributes.py index 15e6e670d30..5b5846299e4 100644 --- a/neutron/db/migration/alembic_migrations/versions/884573acbf1c_unify_nsx_router_extra_attributes.py +++ b/neutron/db/migration/alembic_migrations/versions/884573acbf1c_unify_nsx_router_extra_attributes.py @@ -38,6 +38,13 @@ def _migrate_data(old_table, new_table): "FROM %(old_table)s old_t " "WHERE new_t.router_id = old_t.router_id") % {'new_table': new_table, 'old_table': old_table}) + elif engine.name == 'ibm_db_sa': + op.execute(("UPDATE %(new_table)s new_t " + "SET (distributed, service_router) = " + "(SELECT old_t.distributed, old_t.service_router " + "FROM %(old_table)s old_t " + "WHERE new_t.router_id = old_t.router_id)") % + {'new_table': new_table, 'old_table': old_table}) else: op.execute(("UPDATE %(new_table)s new_t " "INNER JOIN %(old_table)s as old_t " From 302331b2197d7adcc7eb0d501718b7c28311acbc Mon Sep 17 00:00:00 2001 From: OpenStack Proposal Bot Date: Tue, 30 Sep 2014 06:49:06 +0000 Subject: [PATCH 045/128] Imported Translations from Transifex Change-Id: Ie7ba4679ca128ff636b6bd841072dfd4b7e4236f --- neutron/locale/en_US/LC_MESSAGES/neutron.po | 104 +++++++++---------- neutron/locale/neutron.pot | 106 ++++++++++---------- 2 files changed, 105 insertions(+), 105 deletions(-) diff --git a/neutron/locale/en_US/LC_MESSAGES/neutron.po b/neutron/locale/en_US/LC_MESSAGES/neutron.po index 57f9fbd29e9..09f3575f817 100644 --- a/neutron/locale/en_US/LC_MESSAGES/neutron.po +++ b/neutron/locale/en_US/LC_MESSAGES/neutron.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Neutron\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-29 06:03+0000\n" +"POT-Creation-Date: 2014-09-30 06:48+0000\n" "PO-Revision-Date: 2013-01-28 21:54+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: English (United States) " @@ -186,7 +186,7 @@ msgid "Seconds between running periodic tasks" msgstr "" #: neutron/service.py:43 -msgid "Number of separate worker processes for service" +msgid "Number of separate API worker processes for service" msgstr "" #: neutron/service.py:46 @@ -288,102 +288,102 @@ msgstr "" msgid "Could not bind to %(host)s:%(port)s after trying for %(time)d seconds" msgstr "" -#: neutron/wsgi.py:342 +#: neutron/wsgi.py:340 msgid "Missing Content-Type" msgstr "" -#: neutron/wsgi.py:531 +#: neutron/wsgi.py:529 #, python-format msgid "Data %(data)s type is %(type)s" msgstr "" -#: neutron/wsgi.py:614 +#: neutron/wsgi.py:612 msgid "Cannot understand JSON" msgstr "" -#: neutron/wsgi.py:627 neutron/wsgi.py:630 +#: neutron/wsgi.py:625 neutron/wsgi.py:628 msgid "Inline DTD forbidden" msgstr "" -#: neutron/wsgi.py:711 +#: neutron/wsgi.py:709 msgid "Cannot understand XML" msgstr "" -#: neutron/wsgi.py:820 +#: neutron/wsgi.py:818 msgid "Unrecognized Content-Type provided in request" msgstr "" -#: neutron/wsgi.py:824 +#: neutron/wsgi.py:822 msgid "No Content-Type provided in request" msgstr "" -#: neutron/wsgi.py:828 +#: neutron/wsgi.py:826 msgid "Empty body provided in request" msgstr "" -#: neutron/wsgi.py:835 +#: neutron/wsgi.py:833 msgid "Unable to deserialize body as provided Content-Type" msgstr "" -#: neutron/wsgi.py:931 +#: neutron/wsgi.py:929 msgid "You must implement __call__" msgstr "" -#: neutron/wsgi.py:1024 neutron/api/v2/base.py:191 neutron/api/v2/base.py:332 +#: neutron/wsgi.py:1022 neutron/api/v2/base.py:191 neutron/api/v2/base.py:332 #: neutron/api/v2/base.py:472 neutron/api/v2/base.py:531 #: neutron/extensions/l3agentscheduler.py:50 #: neutron/extensions/l3agentscheduler.py:93 msgid "The resource could not be found." msgstr "" -#: neutron/wsgi.py:1071 +#: neutron/wsgi.py:1069 #, python-format msgid "%(method)s %(url)s" msgstr "" -#: neutron/wsgi.py:1077 +#: neutron/wsgi.py:1075 msgid "Unsupported Content-Type" msgstr "" -#: neutron/wsgi.py:1078 +#: neutron/wsgi.py:1076 #, python-format msgid "InvalidContentType: %s" msgstr "" -#: neutron/wsgi.py:1082 +#: neutron/wsgi.py:1080 msgid "Malformed request body" msgstr "" -#: neutron/wsgi.py:1083 +#: neutron/wsgi.py:1081 #, python-format msgid "MalformedRequestBody: %s" msgstr "" -#: neutron/wsgi.py:1090 +#: neutron/wsgi.py:1088 #, python-format msgid "HTTP exception thrown: %s" msgstr "" -#: neutron/wsgi.py:1095 +#: neutron/wsgi.py:1093 msgid "Internal error" msgstr "" -#: neutron/wsgi.py:1110 neutron/wsgi.py:1212 +#: neutron/wsgi.py:1108 neutron/wsgi.py:1210 #, python-format msgid "%(url)s returned with HTTP %(status)d" msgstr "" -#: neutron/wsgi.py:1113 +#: neutron/wsgi.py:1111 #, python-format msgid "%(url)s returned a fault: %(exception)s" msgstr "" -#: neutron/wsgi.py:1231 +#: neutron/wsgi.py:1229 #, python-format msgid "The requested content type %s is invalid." msgstr "" -#: neutron/wsgi.py:1290 +#: neutron/wsgi.py:1288 msgid "Could not deserialize data" msgstr "" @@ -490,7 +490,7 @@ msgid "" msgstr "" #: neutron/agent/dhcp_agent.py:582 neutron/agent/l3_agent.py:1987 -#: neutron/agent/metadata/agent.py:363 +#: neutron/agent/metadata/agent.py:354 #: neutron/plugins/cisco/cfg_agent/cfg_agent.py:326 #: neutron/services/metering/agents/metering_agent.py:270 msgid "" @@ -499,7 +499,7 @@ msgid "" msgstr "" #: neutron/agent/dhcp_agent.py:588 neutron/agent/l3_agent.py:1992 -#: neutron/agent/metadata/agent.py:368 +#: neutron/agent/metadata/agent.py:359 #: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:108 #: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:793 #: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:216 @@ -1180,32 +1180,32 @@ msgstr "" msgid "Admin username" msgstr "" -#: neutron/agent/linux/interface.py:54 neutron/agent/metadata/agent.py:52 +#: neutron/agent/linux/interface.py:54 neutron/agent/metadata/agent.py:51 #: neutron/plugins/metaplugin/common/config.py:65 msgid "Admin password" msgstr "" -#: neutron/agent/linux/interface.py:57 neutron/agent/metadata/agent.py:55 +#: neutron/agent/linux/interface.py:57 neutron/agent/metadata/agent.py:54 #: neutron/plugins/metaplugin/common/config.py:68 msgid "Admin tenant name" msgstr "" -#: neutron/agent/linux/interface.py:59 neutron/agent/metadata/agent.py:57 +#: neutron/agent/linux/interface.py:59 neutron/agent/metadata/agent.py:56 #: neutron/plugins/metaplugin/common/config.py:70 msgid "Authentication URL" msgstr "" -#: neutron/agent/linux/interface.py:61 neutron/agent/metadata/agent.py:59 +#: neutron/agent/linux/interface.py:61 neutron/agent/metadata/agent.py:58 #: neutron/common/config.py:47 neutron/plugins/metaplugin/common/config.py:72 msgid "The type of authentication to use" msgstr "" -#: neutron/agent/linux/interface.py:63 neutron/agent/metadata/agent.py:61 +#: neutron/agent/linux/interface.py:63 neutron/agent/metadata/agent.py:60 #: neutron/plugins/metaplugin/common/config.py:74 msgid "Authentication region" msgstr "" -#: neutron/agent/linux/interface.py:66 neutron/agent/metadata/agent.py:71 +#: neutron/agent/linux/interface.py:66 neutron/agent/metadata/agent.py:70 msgid "Network service endpoint type to pull from the keystone catalog" msgstr "" @@ -1435,96 +1435,96 @@ msgid "" "Stderr: %(stderr)r" msgstr "" -#: neutron/agent/metadata/agent.py:50 +#: neutron/agent/metadata/agent.py:49 #: neutron/plugins/metaplugin/common/config.py:63 msgid "Admin user" msgstr "" -#: neutron/agent/metadata/agent.py:64 +#: neutron/agent/metadata/agent.py:63 msgid "Turn off verification of the certificate for ssl" msgstr "" -#: neutron/agent/metadata/agent.py:67 +#: neutron/agent/metadata/agent.py:66 msgid "Certificate Authority public key (CA cert) file for ssl" msgstr "" -#: neutron/agent/metadata/agent.py:74 +#: neutron/agent/metadata/agent.py:73 msgid "IP address used by Nova metadata server." msgstr "" -#: neutron/agent/metadata/agent.py:77 +#: neutron/agent/metadata/agent.py:76 msgid "TCP Port used by Nova metadata server." msgstr "" -#: neutron/agent/metadata/agent.py:80 +#: neutron/agent/metadata/agent.py:79 #: neutron/plugins/vmware/dhcp_meta/nsx.py:63 msgid "Shared secret to sign instance-id request" msgstr "" -#: neutron/agent/metadata/agent.py:85 +#: neutron/agent/metadata/agent.py:84 msgid "Protocol to access nova metadata, http or https" msgstr "" -#: neutron/agent/metadata/agent.py:87 +#: neutron/agent/metadata/agent.py:86 msgid "Allow to perform insecure SSL (https) requests to nova metadata" msgstr "" -#: neutron/agent/metadata/agent.py:91 +#: neutron/agent/metadata/agent.py:90 msgid "Client certificate for nova metadata api server." msgstr "" -#: neutron/agent/metadata/agent.py:94 +#: neutron/agent/metadata/agent.py:93 msgid "Private key of client certificate." msgstr "" -#: neutron/agent/metadata/agent.py:124 +#: neutron/agent/metadata/agent.py:123 #: neutron/agent/metadata/namespace_proxy.py:66 #, python-format msgid "Request: %s" msgstr "" -#: neutron/agent/metadata/agent.py:133 +#: neutron/agent/metadata/agent.py:132 #: neutron/agent/metadata/namespace_proxy.py:74 msgid "Unexpected error." msgstr "" -#: neutron/agent/metadata/agent.py:134 +#: neutron/agent/metadata/agent.py:133 #: neutron/agent/metadata/namespace_proxy.py:75 msgid "An unknown error has occurred. Please try your request again." msgstr "" -#: neutron/agent/metadata/agent.py:180 +#: neutron/agent/metadata/agent.py:179 msgid "" "Either one of parameter network_id or router_id must be passed to " "_get_ports method." msgstr "" -#: neutron/agent/metadata/agent.py:229 +#: neutron/agent/metadata/agent.py:228 msgid "" "The remote metadata server responded with Forbidden. This response " "usually occurs when shared secrets do not match." msgstr "" -#: neutron/agent/metadata/agent.py:242 +#: neutron/agent/metadata/agent.py:241 #: neutron/agent/metadata/namespace_proxy.py:120 msgid "Remote metadata server experienced an internal server error." msgstr "" -#: neutron/agent/metadata/agent.py:248 +#: neutron/agent/metadata/agent.py:247 #: neutron/agent/metadata/namespace_proxy.py:126 #, python-format msgid "Unexpected response code: %s" msgstr "" -#: neutron/agent/metadata/agent.py:308 +#: neutron/agent/metadata/agent.py:299 msgid "Location for Metadata Proxy UNIX domain socket" msgstr "" -#: neutron/agent/metadata/agent.py:311 +#: neutron/agent/metadata/agent.py:302 msgid "Number of separate worker processes for metadata server" msgstr "" -#: neutron/agent/metadata/agent.py:315 +#: neutron/agent/metadata/agent.py:306 msgid "Number of backlog requests to configure the metadata server socket with" msgstr "" diff --git a/neutron/locale/neutron.pot b/neutron/locale/neutron.pot index 2c4713bf9c4..6d3cb95c413 100644 --- a/neutron/locale/neutron.pot +++ b/neutron/locale/neutron.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: neutron 2014.2.dev246.gff9745c\n" +"Project-Id-Version: neutron 2014.2.dev251.gdd238d0\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-29 06:03+0000\n" +"POT-Creation-Date: 2014-09-30 06:48+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -185,7 +185,7 @@ msgid "Seconds between running periodic tasks" msgstr "" #: neutron/service.py:43 -msgid "Number of separate worker processes for service" +msgid "Number of separate API worker processes for service" msgstr "" #: neutron/service.py:46 @@ -287,102 +287,102 @@ msgstr "" msgid "Could not bind to %(host)s:%(port)s after trying for %(time)d seconds" msgstr "" -#: neutron/wsgi.py:342 +#: neutron/wsgi.py:340 msgid "Missing Content-Type" msgstr "" -#: neutron/wsgi.py:531 +#: neutron/wsgi.py:529 #, python-format msgid "Data %(data)s type is %(type)s" msgstr "" -#: neutron/wsgi.py:614 +#: neutron/wsgi.py:612 msgid "Cannot understand JSON" msgstr "" -#: neutron/wsgi.py:627 neutron/wsgi.py:630 +#: neutron/wsgi.py:625 neutron/wsgi.py:628 msgid "Inline DTD forbidden" msgstr "" -#: neutron/wsgi.py:711 +#: neutron/wsgi.py:709 msgid "Cannot understand XML" msgstr "" -#: neutron/wsgi.py:820 +#: neutron/wsgi.py:818 msgid "Unrecognized Content-Type provided in request" msgstr "" -#: neutron/wsgi.py:824 +#: neutron/wsgi.py:822 msgid "No Content-Type provided in request" msgstr "" -#: neutron/wsgi.py:828 +#: neutron/wsgi.py:826 msgid "Empty body provided in request" msgstr "" -#: neutron/wsgi.py:835 +#: neutron/wsgi.py:833 msgid "Unable to deserialize body as provided Content-Type" msgstr "" -#: neutron/wsgi.py:931 +#: neutron/wsgi.py:929 msgid "You must implement __call__" msgstr "" -#: neutron/wsgi.py:1024 neutron/api/v2/base.py:191 neutron/api/v2/base.py:332 +#: neutron/wsgi.py:1022 neutron/api/v2/base.py:191 neutron/api/v2/base.py:332 #: neutron/api/v2/base.py:472 neutron/api/v2/base.py:531 #: neutron/extensions/l3agentscheduler.py:50 #: neutron/extensions/l3agentscheduler.py:93 msgid "The resource could not be found." msgstr "" -#: neutron/wsgi.py:1071 +#: neutron/wsgi.py:1069 #, python-format msgid "%(method)s %(url)s" msgstr "" -#: neutron/wsgi.py:1077 +#: neutron/wsgi.py:1075 msgid "Unsupported Content-Type" msgstr "" -#: neutron/wsgi.py:1078 +#: neutron/wsgi.py:1076 #, python-format msgid "InvalidContentType: %s" msgstr "" -#: neutron/wsgi.py:1082 +#: neutron/wsgi.py:1080 msgid "Malformed request body" msgstr "" -#: neutron/wsgi.py:1083 +#: neutron/wsgi.py:1081 #, python-format msgid "MalformedRequestBody: %s" msgstr "" -#: neutron/wsgi.py:1090 +#: neutron/wsgi.py:1088 #, python-format msgid "HTTP exception thrown: %s" msgstr "" -#: neutron/wsgi.py:1095 +#: neutron/wsgi.py:1093 msgid "Internal error" msgstr "" -#: neutron/wsgi.py:1110 neutron/wsgi.py:1212 +#: neutron/wsgi.py:1108 neutron/wsgi.py:1210 #, python-format msgid "%(url)s returned with HTTP %(status)d" msgstr "" -#: neutron/wsgi.py:1113 +#: neutron/wsgi.py:1111 #, python-format msgid "%(url)s returned a fault: %(exception)s" msgstr "" -#: neutron/wsgi.py:1231 +#: neutron/wsgi.py:1229 #, python-format msgid "The requested content type %s is invalid." msgstr "" -#: neutron/wsgi.py:1290 +#: neutron/wsgi.py:1288 msgid "Could not deserialize data" msgstr "" @@ -489,7 +489,7 @@ msgid "" msgstr "" #: neutron/agent/dhcp_agent.py:582 neutron/agent/l3_agent.py:1987 -#: neutron/agent/metadata/agent.py:363 +#: neutron/agent/metadata/agent.py:354 #: neutron/plugins/cisco/cfg_agent/cfg_agent.py:326 #: neutron/services/metering/agents/metering_agent.py:270 msgid "" @@ -498,7 +498,7 @@ msgid "" msgstr "" #: neutron/agent/dhcp_agent.py:588 neutron/agent/l3_agent.py:1992 -#: neutron/agent/metadata/agent.py:368 +#: neutron/agent/metadata/agent.py:359 #: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:108 #: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:793 #: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:216 @@ -1179,32 +1179,32 @@ msgstr "" msgid "Admin username" msgstr "" -#: neutron/agent/linux/interface.py:54 neutron/agent/metadata/agent.py:52 +#: neutron/agent/linux/interface.py:54 neutron/agent/metadata/agent.py:51 #: neutron/plugins/metaplugin/common/config.py:65 msgid "Admin password" msgstr "" -#: neutron/agent/linux/interface.py:57 neutron/agent/metadata/agent.py:55 +#: neutron/agent/linux/interface.py:57 neutron/agent/metadata/agent.py:54 #: neutron/plugins/metaplugin/common/config.py:68 msgid "Admin tenant name" msgstr "" -#: neutron/agent/linux/interface.py:59 neutron/agent/metadata/agent.py:57 +#: neutron/agent/linux/interface.py:59 neutron/agent/metadata/agent.py:56 #: neutron/plugins/metaplugin/common/config.py:70 msgid "Authentication URL" msgstr "" -#: neutron/agent/linux/interface.py:61 neutron/agent/metadata/agent.py:59 +#: neutron/agent/linux/interface.py:61 neutron/agent/metadata/agent.py:58 #: neutron/common/config.py:47 neutron/plugins/metaplugin/common/config.py:72 msgid "The type of authentication to use" msgstr "" -#: neutron/agent/linux/interface.py:63 neutron/agent/metadata/agent.py:61 +#: neutron/agent/linux/interface.py:63 neutron/agent/metadata/agent.py:60 #: neutron/plugins/metaplugin/common/config.py:74 msgid "Authentication region" msgstr "" -#: neutron/agent/linux/interface.py:66 neutron/agent/metadata/agent.py:71 +#: neutron/agent/linux/interface.py:66 neutron/agent/metadata/agent.py:70 msgid "Network service endpoint type to pull from the keystone catalog" msgstr "" @@ -1434,96 +1434,96 @@ msgid "" "Stderr: %(stderr)r" msgstr "" -#: neutron/agent/metadata/agent.py:50 +#: neutron/agent/metadata/agent.py:49 #: neutron/plugins/metaplugin/common/config.py:63 msgid "Admin user" msgstr "" -#: neutron/agent/metadata/agent.py:64 +#: neutron/agent/metadata/agent.py:63 msgid "Turn off verification of the certificate for ssl" msgstr "" -#: neutron/agent/metadata/agent.py:67 +#: neutron/agent/metadata/agent.py:66 msgid "Certificate Authority public key (CA cert) file for ssl" msgstr "" -#: neutron/agent/metadata/agent.py:74 +#: neutron/agent/metadata/agent.py:73 msgid "IP address used by Nova metadata server." msgstr "" -#: neutron/agent/metadata/agent.py:77 +#: neutron/agent/metadata/agent.py:76 msgid "TCP Port used by Nova metadata server." msgstr "" -#: neutron/agent/metadata/agent.py:80 +#: neutron/agent/metadata/agent.py:79 #: neutron/plugins/vmware/dhcp_meta/nsx.py:63 msgid "Shared secret to sign instance-id request" msgstr "" -#: neutron/agent/metadata/agent.py:85 +#: neutron/agent/metadata/agent.py:84 msgid "Protocol to access nova metadata, http or https" msgstr "" -#: neutron/agent/metadata/agent.py:87 +#: neutron/agent/metadata/agent.py:86 msgid "Allow to perform insecure SSL (https) requests to nova metadata" msgstr "" -#: neutron/agent/metadata/agent.py:91 +#: neutron/agent/metadata/agent.py:90 msgid "Client certificate for nova metadata api server." msgstr "" -#: neutron/agent/metadata/agent.py:94 +#: neutron/agent/metadata/agent.py:93 msgid "Private key of client certificate." msgstr "" -#: neutron/agent/metadata/agent.py:124 +#: neutron/agent/metadata/agent.py:123 #: neutron/agent/metadata/namespace_proxy.py:66 #, python-format msgid "Request: %s" msgstr "" -#: neutron/agent/metadata/agent.py:133 +#: neutron/agent/metadata/agent.py:132 #: neutron/agent/metadata/namespace_proxy.py:74 msgid "Unexpected error." msgstr "" -#: neutron/agent/metadata/agent.py:134 +#: neutron/agent/metadata/agent.py:133 #: neutron/agent/metadata/namespace_proxy.py:75 msgid "An unknown error has occurred. Please try your request again." msgstr "" -#: neutron/agent/metadata/agent.py:180 +#: neutron/agent/metadata/agent.py:179 msgid "" "Either one of parameter network_id or router_id must be passed to " "_get_ports method." msgstr "" -#: neutron/agent/metadata/agent.py:229 +#: neutron/agent/metadata/agent.py:228 msgid "" "The remote metadata server responded with Forbidden. This response " "usually occurs when shared secrets do not match." msgstr "" -#: neutron/agent/metadata/agent.py:242 +#: neutron/agent/metadata/agent.py:241 #: neutron/agent/metadata/namespace_proxy.py:120 msgid "Remote metadata server experienced an internal server error." msgstr "" -#: neutron/agent/metadata/agent.py:248 +#: neutron/agent/metadata/agent.py:247 #: neutron/agent/metadata/namespace_proxy.py:126 #, python-format msgid "Unexpected response code: %s" msgstr "" -#: neutron/agent/metadata/agent.py:308 +#: neutron/agent/metadata/agent.py:299 msgid "Location for Metadata Proxy UNIX domain socket" msgstr "" -#: neutron/agent/metadata/agent.py:311 +#: neutron/agent/metadata/agent.py:302 msgid "Number of separate worker processes for metadata server" msgstr "" -#: neutron/agent/metadata/agent.py:315 +#: neutron/agent/metadata/agent.py:306 msgid "Number of backlog requests to configure the metadata server socket with" msgstr "" From 5247f5cdf15bad4c62bbf854e30716fcf00a1d2a Mon Sep 17 00:00:00 2001 From: Ann Kamyshnikova Date: Wed, 19 Feb 2014 15:39:19 +0400 Subject: [PATCH 046/128] Implement ModelsMigrationsSync test from oslo.db Add tests to verify that database migrations produce the same schema as the database models. Also for MySQL, check that all tables are configured to use InnoDB as the storage engine. These tests make use of the ModelsMigrationsSync test class from oslo.db and the load_tests protocol from Python unittest. Closes-bug: #1346444 Change-Id: Ic0e7eb37c30cc5e94cbdbddf07a6dc1ebf377c17 --- doc/source/devref/db_layer.rst | 9 + .../db/migration/alembic_migrations/env.py | 1 + neutron/db/migration/cli.py | 12 +- neutron/tests/unit/db/test_migration.py | 343 ++++++++++++++++++ test-requirements.txt | 4 + 5 files changed, 365 insertions(+), 4 deletions(-) create mode 100644 neutron/tests/unit/db/test_migration.py diff --git a/doc/source/devref/db_layer.rst b/doc/source/devref/db_layer.rst index 54eff65b785..bacd7731600 100644 --- a/doc/source/devref/db_layer.rst +++ b/doc/source/devref/db_layer.rst @@ -1,2 +1,11 @@ Neutron Database Layer ====================== + + +Testing database and models sync +-------------------------------- + +.. automodule:: neutron.tests.unit.db.test_migration + +.. autoclass:: _TestModelsMigrations + :members: diff --git a/neutron/db/migration/alembic_migrations/env.py b/neutron/db/migration/alembic_migrations/env.py index 363667ff817..bd731b96f84 100644 --- a/neutron/db/migration/alembic_migrations/env.py +++ b/neutron/db/migration/alembic_migrations/env.py @@ -100,6 +100,7 @@ def run_migrations_online(): context.run_migrations() finally: connection.close() + engine.dispose() if context.is_offline_mode(): diff --git a/neutron/db/migration/cli.py b/neutron/db/migration/cli.py index ae47562cd26..ca83ecdf2ad 100644 --- a/neutron/db/migration/cli.py +++ b/neutron/db/migration/cli.py @@ -159,12 +159,16 @@ command_opt = cfg.SubCommandOpt('command', CONF.register_cli_opt(command_opt) -def main(): - config = alembic_config.Config( - os.path.join(os.path.dirname(__file__), 'alembic.ini') - ) +def get_alembic_config(): + config = alembic_config.Config(os.path.join(os.path.dirname(__file__), + 'alembic.ini')) config.set_main_option('script_location', 'neutron.db.migration:alembic_migrations') + return config + + +def main(): + config = get_alembic_config() # attach the Neutron conf to the Alembic conf config.neutron_config = CONF diff --git a/neutron/tests/unit/db/test_migration.py b/neutron/tests/unit/db/test_migration.py new file mode 100644 index 00000000000..3e699df2eca --- /dev/null +++ b/neutron/tests/unit/db/test_migration.py @@ -0,0 +1,343 @@ +# Copyright 2014 OpenStack Foundation +# +# 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. + +import collections +import logging +import pprint + +import alembic +import alembic.autogenerate +import alembic.migration +import mock +from oslo.config import cfg +from oslo.db.sqlalchemy import test_base +from oslo.db.sqlalchemy import test_migrations +from oslo.db.sqlalchemy import utils +import pkg_resources as pkg +import sqlalchemy +import sqlalchemy.sql.expression as expr +import testscenarios + +from neutron.db.migration import cli as migration +from neutron.db.migration.models import head as head_models +from neutron.openstack.common.fixture import config + +LOG = logging.getLogger(__name__) + + +cfg.CONF.import_opt('core_plugin', 'neutron.common.config') +cfg.CONF.import_opt('service_plugins', 'neutron.common.config') + + +def _discover_plugins(plugin_type): + return [ + '%s.%s' % (entrypoint.module_name, entrypoint.attrs[0]) + for entrypoint in + pkg.iter_entry_points(plugin_type) + ] + +SERVICE_PLUGINS = _discover_plugins("neutron.service_plugins") +CORE_PLUGINS = _discover_plugins('neutron.core_plugins') + + +class _TestModelsMigrations(test_migrations.ModelsMigrationsSync): + '''Test for checking of equality models state and migrations. + + For the opportunistic testing you need to set up a db named + 'openstack_citest' with user 'openstack_citest' and password + 'openstack_citest' on localhost. + The test will then use that db and user/password combo to run the tests. + + For PostgreSQL on Ubuntu this can be done with the following commands:: + + sudo -u postgres psql + postgres=# create user openstack_citest with createdb login password + 'openstack_citest'; + postgres=# create database openstack_citest with owner + openstack_citest; + + For MySQL on Ubuntu this can be done with the following commands:: + + mysql -u root + >create database openstack_citest; + >grant all privileges on openstack_citest.* to + openstack_citest@localhost identified by 'openstack_citest'; + + Output is a list that contains information about differences between db and + models. Output example:: + + [('add_table', + Table('bat', MetaData(bind=None), + Column('info', String(), table=), schema=None)), + ('remove_table', + Table(u'bar', MetaData(bind=None), + Column(u'data', VARCHAR(), table=), schema=None)), + ('add_column', + None, + 'foo', + Column('data', Integer(), table=)), + ('remove_column', + None, + 'foo', + Column(u'old_data', VARCHAR(), table=None)), + [('modify_nullable', + None, + 'foo', + u'x', + {'existing_server_default': None, + 'existing_type': INTEGER()}, + True, + False)]] + + * ``remove_*`` means that there is extra table/column/constraint in db; + + * ``add_*`` means that it is missing in db; + + * ``modify_*`` means that on column in db is set wrong + type/nullable/server_default. Element contains information: + * what should be modified, + * schema, + * table, + * column, + * existing correct column parameters, + * right value, + * wrong value. + + ''' + + def setUp(self): + patch = mock.patch.dict('sys.modules', { + 'ryu': mock.MagicMock(), + 'ryu.app': mock.MagicMock(), + 'heleosapi': mock.MagicMock(), + 'midonetclient': mock.MagicMock(), + 'midonetclient.neutron': mock.MagicMock(), + }) + patch.start() + self.addCleanup(patch.stop) + super(_TestModelsMigrations, self).setUp() + self.cfg = self.useFixture(config.Config()) + self.cfg.config(service_plugins=SERVICE_PLUGINS, + core_plugin=self.core_plugin) + self.alembic_config = migration.get_alembic_config() + self.alembic_config.neutron_config = cfg.CONF + + def db_sync(self, engine): + cfg.CONF.set_override('connection', engine.url, group='database') + migration.do_alembic_command(self.alembic_config, 'upgrade', 'head') + cfg.CONF.clear_override('connection', group='database') + + def get_engine(self): + return self.engine + + def get_metadata(self): + return head_models.get_metadata() + + def include_object(self, object_, name, type_, reflected, compare_to): + if type_ == 'table' and name == 'alembic_version': + return False + + return super(_TestModelsMigrations, self).include_object( + object_, name, type_, reflected, compare_to) + + def compare_server_default(self, ctxt, ins_col, meta_col, + insp_def, meta_def, rendered_meta_def): + return self._compare_server_default(ctxt.bind, meta_col, insp_def, + meta_def) + + # TODO(akamyshnikova):remove _compare_server_default methods when it + # appears in oslo.db(version>1.0.0) + @utils.DialectFunctionDispatcher.dispatch_for_dialect("*") + def _compare_server_default(bind, meta_col, insp_def, meta_def): + pass + + @_compare_server_default.dispatch_for('mysql') + def _compare_server_default(bind, meta_col, insp_def, meta_def): + if isinstance(meta_col.type, sqlalchemy.Boolean): + if meta_def is None or insp_def is None: + return meta_def != insp_def + return not ( + isinstance(meta_def.arg, expr.True_) and insp_def == "'1'" or + isinstance(meta_def.arg, expr.False_) and insp_def == "'0'" + ) + + if isinstance(meta_col.type, sqlalchemy.Integer): + if meta_def is None or insp_def is None: + return meta_def != insp_def + return meta_def.arg == insp_def + + @_compare_server_default.dispatch_for('postgresql') + def _compare_server_default(bind, meta_col, insp_def, meta_def): + if isinstance(meta_col.type, sqlalchemy.Enum): + if meta_def is None or insp_def is None: + return meta_def != insp_def + return insp_def != "'%s'::%s" % (meta_def.arg, meta_col.type.name) + elif isinstance(meta_col.type, sqlalchemy.String): + if meta_def is None or insp_def is None: + return meta_def != insp_def + return insp_def != "'%s'::character varying" % meta_def.arg + + def test_models_sync(self): + # drop all tables after a test run + self.addCleanup(self._cleanup) + + # run migration scripts + self.db_sync(self.get_engine()) + + with self.get_engine().connect() as conn: + opts = { + 'include_object': self.include_object, + 'compare_type': self.compare_type, + 'compare_server_default': self.compare_server_default, + } + mc = alembic.migration.MigrationContext.configure(conn, opts=opts) + + # compare schemas and fail with diff, if it's not empty + diff1 = alembic.autogenerate.compare_metadata(mc, + self.get_metadata()) + insp = sqlalchemy.engine.reflection.Inspector.from_engine( + self.get_engine()) + dialect = self.get_engine().dialect.name + self.check_mysql_engine(dialect, insp) + diff2 = self.compare_foreign_keys(self.get_metadata(), + self.get_engine()) + + result = filter(self.remove_unrelated_errors, diff1 + diff2) + if result: + msg = pprint.pformat(result, indent=2, width=20) + + self.fail("Models and migration scripts aren't in sync:\n%s" % msg) + + def check_mysql_engine(self, dialect, insp): + if dialect != 'mysql': + return + + # Test that table creation on mysql only builds InnoDB tables + tables = insp.get_table_names() + self.assertTrue(len(tables) > 0, + "No tables found. Wrong schema?") + noninnodb = [table for table in tables if + insp.get_table_options(table)['mysql_engine'] != 'InnoDB' + and table != 'alembic_version'] + self.assertEqual(0, len(noninnodb), "%s non InnoDB tables created" % + noninnodb) + + FKInfo = collections.namedtuple('FKInfo', ['constrained_columns', + 'referred_table', + 'referred_columns']) + + def compare_foreign_keys(self, metadata, bind): + """Compare foreign keys between model and db table. + + Returns a list that contains information about: + * should be a new key added or removed existing, + * name of that key, + * source table, + * referred table, + * constrained columns, + * referred columns + + Output:: + + [('drop_key', + 'testtbl_fk_check_fkey', + 'testtbl', + fk_info(constrained_columns=(u'fk_check',), + referred_table=u'table', + referred_columns=(u'fk_check',)))] + + """ + + diff = [] + insp = sqlalchemy.engine.reflection.Inspector.from_engine(bind) + # Get all tables from db + db_tables = insp.get_table_names() + # Get all tables from models + model_tables = metadata.tables + for table in db_tables: + if table not in model_tables: + continue + # Get all necessary information about key of current table from db + fk_db = dict((self._get_fk_info_from_db(i), i['name']) + for i in insp.get_foreign_keys(table)) + fk_db_set = set(fk_db.keys()) + # Get all necessary information about key of current table from + # models + fk_models = dict((self._get_fk_info_from_model(fk), fk) + for fk in model_tables[table].foreign_keys) + fk_models_set = set(fk_models.keys()) + for key in (fk_db_set - fk_models_set): + diff.append(('drop_key', fk_db[key], table, key)) + LOG.info(("Detected removed foreign key %(fk)r on " + "table %(table)r"), {'fk': fk_db[key], + 'table': table}) + for key in (fk_models_set - fk_db_set): + diff.append(('add_key', fk_models[key], key)) + LOG.info(( + "Detected added foreign key for column %(fk)r on table " + "%(table)r"), {'fk': fk_models[key].column.name, + 'table': table}) + return diff + + def _get_fk_info_from_db(self, fk): + return self.FKInfo(tuple(fk['constrained_columns']), + fk['referred_table'], + tuple(fk['referred_columns'])) + + def _get_fk_info_from_model(self, fk): + return self.FKInfo((fk.parent.name,), fk.column.table.name, + (fk.column.name,)) + + # Remove some difference that are not mistakes just specific of + # dialects, etc + def remove_unrelated_errors(self, element): + insp = sqlalchemy.engine.reflection.Inspector.from_engine( + self.get_engine()) + dialect = self.get_engine().dialect.name + if isinstance(element, tuple): + if dialect == 'mysql' and element[0] == 'remove_index': + table_name = element[1].table.name + for fk in insp.get_foreign_keys(table_name): + if fk['name'] == element[1].name: + return False + cols = [c.name for c in element[1].expressions] + for col in cols: + if col in insp.get_pk_constraint( + table_name)['constrained_columns']: + return False + else: + for modified, _, table, column, _, _, new in element: + if modified == 'modify_default' and dialect == 'mysql': + constrained = insp.get_pk_constraint(table) + if column in constrained['constrained_columns']: + return False + return True + +load_tests = testscenarios.load_tests_apply_scenarios + +_scenarios = [] +for plugin in CORE_PLUGINS: + plugin_name = plugin.split('.')[-1] + class_name = plugin_name + _scenarios.append((class_name, {'core_plugin': plugin})) + + +class TestModelsMigrationsMysql(_TestModelsMigrations, + test_base.MySQLOpportunisticTestCase): + scenarios = _scenarios + + +class TestModelsMigrationsPsql(_TestModelsMigrations, + test_base.PostgreSQLOpportunisticTestCase): + scenarios = _scenarios diff --git a/test-requirements.txt b/test-requirements.txt index aa8596daf4e..22375e3b6e5 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -15,4 +15,8 @@ sphinx>=1.1.2,!=1.2.0,<1.3 oslosphinx>=2.2.0.0a2 testrepository>=0.0.18 testtools>=0.9.34 +testscenarios>=0.4 WebTest>=2.0 +oslotest>=1.1.0 +psycopg2 +MySQL-python From eacd1fc6b2cb3175f603cdd80d7b59dbe9b0719b Mon Sep 17 00:00:00 2001 From: Robert Pothier Date: Wed, 3 Sep 2014 11:09:15 -0400 Subject: [PATCH 047/128] ML2 Cisco Nexus MD: Fix UT to send one create vlan message With the commit of https://review.openstack.org/#/c/113009, test_nexus_add_trunk needs to have the device_id set to a unique value. Combining test_nexus_add_trunk and test_nexus_enable_vlan_cmd to reduce duplicate code, which fixes the original issue. Change-Id: I4191a6880ec0f43365aacb638a92a0dd3e1e80aa Closes-Bug: 1364976 --- .../drivers/cisco/nexus/test_cisco_mech.py | 72 ++++++++----------- 1 file changed, 28 insertions(+), 44 deletions(-) diff --git a/neutron/tests/unit/ml2/drivers/cisco/nexus/test_cisco_mech.py b/neutron/tests/unit/ml2/drivers/cisco/nexus/test_cisco_mech.py index e7d7d45835f..2f355f6a371 100644 --- a/neutron/tests/unit/ml2/drivers/cisco/nexus/test_cisco_mech.py +++ b/neutron/tests/unit/ml2/drivers/cisco/nexus/test_cisco_mech.py @@ -354,61 +354,45 @@ class TestCiscoPortsV2(CiscoML2MechanismTestCase, def test_nexus_enable_vlan_cmd(self): """Verify the syntax of the command to enable a vlan on an intf. + Test of the following ml2_conf_cisco_ini config: + [ml2_mech_cisco_nexus:1.1.1.1] + hostA=1/1 + hostB=1/2 (second pass only) + where vlan_id = 100 + Confirm that for the first VLAN configured on a Nexus interface, the command string sent to the switch does not contain the keyword 'add'. Confirm that for the second VLAN configured on a Nexus interface, - the command string sent to the switch contains the keyword 'add'. + the command string sent to the switch contains the keyword 'add' + if it is on the same host. Confirm it does not contain the + keyword 'add' when on different hosts. """ - # First vlan should be configured without 'add' keyword - with self._create_resources(): - self.assertTrue(self._is_vlan_configured( - vlan_creation_expected=True, - add_keyword_expected=False)) - self.mock_ncclient.reset_mock() - self.mock_bound_segment.return_value = BOUND_SEGMENT2 - - # Second vlan should be configured with 'add' keyword - with self._create_resources(name=NETWORK_NAME_2, - device_id=DEVICE_ID_2, - cidr=CIDR_2): + hosts = [COMP_HOST_NAME, COMP_HOST_NAME_2] + for host in hosts: + # First vlan should be configured without 'add' keyword + with self._create_resources(): self.assertTrue(self._is_vlan_configured( vlan_creation_expected=True, - add_keyword_expected=True)) + add_keyword_expected=False)) + self.mock_ncclient.reset_mock() + self.mock_bound_segment.return_value = BOUND_SEGMENT2 - # Return to first segment for delete port calls. - self.mock_bound_segment.return_value = BOUND_SEGMENT1 + # Second vlan should be configured with 'add' keyword + # when on a single host. + with self._create_resources(name=NETWORK_NAME_2, + device_id=DEVICE_ID_2, + cidr=CIDR_2, + host_id=host): + self.assertTrue(self._is_vlan_configured( + vlan_creation_expected=True, + add_keyword_expected=(host == COMP_HOST_NAME) + )) - def test_nexus_add_trunk(self): - """Verify syntax to enable a vlan on an interface. - - Test also verifies that the vlan interface is not created. - - Test of the following ml2_conf_cisco_ini config: - [ml2_mech_cisco_nexus:1.1.1.1] - hostA=1/1 - hostB=1/2 - where vlan_id = 100 - - Confirm that for the first host configured on a Nexus interface, - the command string sent to the switch does not contain the - keyword 'add'. - - Confirm that for the second host configured on a Nexus interface, - the command staring sent to the switch contains does not contain - the keyword 'name' [signifies vlan intf creation]. - - """ - with self._create_resources(name='net1', cidr=CIDR_1): - self.assertTrue(self._is_in_last_nexus_cfg(['allowed', 'vlan'])) - self.assertFalse(self._is_in_last_nexus_cfg(['add'])) - with self._create_resources(name='net2', - cidr=CIDR_2, host_id=COMP_HOST_NAME_2): - self.assertTrue( - self._is_in_last_nexus_cfg(['allowed', 'vlan'])) - self.assertFalse(self._is_in_last_nexus_cfg(['name'])) + # Return to first segment for delete port calls. + self.mock_bound_segment.return_value = BOUND_SEGMENT1 def test_ncclient_version_detect(self): """Test ability to handle connection to old and new-style ncclient. From 7b2ca045e846f0580de3d43ffd4595e66ebd6f4e Mon Sep 17 00:00:00 2001 From: Thierry Carrez Date: Tue, 30 Sep 2014 16:46:54 +0200 Subject: [PATCH 048/128] Open Kilo development Bump pre-version to 2015.1 to formally open master branch to Kilo development. Change-Id: Ia48ad29dc1b31b1fbcb14dfffad571659ec66700 --- setup.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.cfg b/setup.cfg index ad30b077586..42ca2971b65 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = neutron -version = 2014.2 +version = 2015.1 summary = OpenStack Networking description-file = README.rst From 36e8cbb34e78ff367cb501b8c494d9a02228251d Mon Sep 17 00:00:00 2001 From: Kevin Benton Date: Mon, 29 Sep 2014 20:21:23 -0700 Subject: [PATCH 049/128] ML2: move L3 cleanup out of network transaction Move _process_l3_delete out of the delete_network transaction to eliminate the semaphore deadlock that occurs when it tries to delete the ports associated with existing floating IPs. It makes more sense to live outside of the transaction anyway because the operations it performs cannot be rolled back only in the database if the L3 plugin makes external calls for floating IP creation/deletion. e.g. if delete_floatingip is successful, it may have deleted external resources and restoring the DB records would make things inconsistent. If a failure to delete the network does occur, any cleanup done by _process_l3_delete will not be reversed. Closes-Bug: #1374573 Change-Id: I3ae7bb269df9b9dcef94f48f13f1bde1e4106a80 --- neutron/plugins/ml2/plugin.py | 8 +++++++- neutron/tests/unit/ml2/test_ml2_plugin.py | 17 +++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/neutron/plugins/ml2/plugin.py b/neutron/plugins/ml2/plugin.py index 6ef4d107c76..422cbff86ed 100644 --- a/neutron/plugins/ml2/plugin.py +++ b/neutron/plugins/ml2/plugin.py @@ -580,9 +580,15 @@ class Ml2Plugin(db_base_plugin_v2.NeutronDbPluginV2, # to prevent deadlock waiting to acquire a DB lock # held by another thread in the same process, leading # to 'lock wait timeout' errors. + # + # Process L3 first, since, depending on the L3 plugin, it may + # involve locking the db-access semaphore, sending RPC + # notifications, and/or calling delete_port on this plugin. + # Additionally, a rollback may not be enough to undo the + # deletion of a floating IP with certain L3 backends. + self._process_l3_delete(context, id) with contextlib.nested(lockutils.lock('db-access'), session.begin(subtransactions=True)): - self._process_l3_delete(context, id) # Get ports to auto-delete. ports = (session.query(models_v2.Port). enable_eagerloads(False). diff --git a/neutron/tests/unit/ml2/test_ml2_plugin.py b/neutron/tests/unit/ml2/test_ml2_plugin.py index be987827c11..5cb6df44bcf 100644 --- a/neutron/tests/unit/ml2/test_ml2_plugin.py +++ b/neutron/tests/unit/ml2/test_ml2_plugin.py @@ -24,6 +24,7 @@ from neutron.common import exceptions as exc from neutron.common import utils from neutron import context from neutron.db import db_base_plugin_v2 as base_plugin +from neutron.extensions import external_net as external_net from neutron.extensions import multiprovidernet as mpnet from neutron.extensions import portbindings from neutron.extensions import providernet as pnet @@ -147,6 +148,22 @@ class TestMl2PortsV2(test_plugin.TestPortsV2, Ml2PluginV2TestCase): mock.call(_("The port '%s' was deleted"), 'invalid-uuid') ]) + def test_l3_cleanup_on_net_delete(self): + l3plugin = manager.NeutronManager.get_service_plugins().get( + service_constants.L3_ROUTER_NAT) + kwargs = {'arg_list': (external_net.EXTERNAL,), + external_net.EXTERNAL: True} + with self.network(**kwargs) as n: + with self.subnet(network=n, cidr='200.0.0.0/22'): + l3plugin.create_floatingip( + context.get_admin_context(), + {'floatingip': {'floating_network_id': n['network']['id'], + 'tenant_id': n['network']['tenant_id']}} + ) + self._delete('networks', n['network']['id']) + flips = l3plugin.get_floatingips(context.get_admin_context()) + self.assertFalse(flips) + def test_delete_port_no_notify_in_disassociate_floatingips(self): ctx = context.get_admin_context() plugin = manager.NeutronManager.get_plugin() From cf92bbead9b25ee40a3336bd76110b3733a4f7ee Mon Sep 17 00:00:00 2001 From: Erik Colnick Date: Wed, 18 Jun 2014 11:31:52 -0600 Subject: [PATCH 050/128] Add admin tenant name to nova notifier This change introduces the ability to use the nova admin tenant name with the nova notifier in place of the nova admin tenant id which may not be available when the neutron service is being configured as is the case with tripleo installations where the neutron service is configured and started before the nova admin tenant has been configured in keystone and thus does not have a known id. DocImpact Introduces the nova_admin_tenant_name configuration entry as an optional configurable value in neutron.conf. If the nova_admin_tenant_name is configured and the nova_admin_tenanat_id is not configured, a performance impact may be seen because keystone will become involved in communication between neutron and nova. Change-Id: I33701d4dc9bf61595e44a49050c405ebca779091 Closes-Bug: #1331566 --- etc/neutron.conf | 5 +++++ neutron/common/config.py | 2 ++ neutron/notifiers/nova.py | 10 +++++++--- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/etc/neutron.conf b/etc/neutron.conf index 0836626424a..1c7042a3f7d 100644 --- a/etc/neutron.conf +++ b/etc/neutron.conf @@ -251,6 +251,11 @@ lock_path = $state_path/lock # The uuid of the admin nova tenant # nova_admin_tenant_id = +# The name of the admin nova tenant. If the uuid of the admin nova tenant +# is set, this is optional. Useful for cases where the uuid of the admin +# nova tenant is not available when configuration is being done. +# nova_admin_tenant_name = + # Password for connection to nova in admin context. # nova_admin_password = diff --git a/neutron/common/config.py b/neutron/common/config.py index cda8d0503bb..7f60851a607 100644 --- a/neutron/common/config.py +++ b/neutron/common/config.py @@ -101,6 +101,8 @@ core_opts = [ secret=True), cfg.StrOpt('nova_admin_tenant_id', help=_('The uuid of the admin nova tenant')), + cfg.StrOpt('nova_admin_tenant_name', + help=_('The name of the admin nova tenant')), cfg.StrOpt('nova_admin_auth_url', default='http://localhost:5000/v2.0', help=_('Authorization URL for connecting to nova in admin ' diff --git a/neutron/notifiers/nova.py b/neutron/notifiers/nova.py index aa4f1b53e11..2b2bab63d1b 100644 --- a/neutron/notifiers/nova.py +++ b/neutron/notifiers/nova.py @@ -41,12 +41,16 @@ class Notifier(object): def __init__(self): # TODO(arosen): we need to cache the endpoints and figure out # how to deal with different regions here.... - bypass_url = "%s/%s" % (cfg.CONF.nova_url, - cfg.CONF.nova_admin_tenant_id) + if cfg.CONF.nova_admin_tenant_id: + bypass_url = "%s/%s" % (cfg.CONF.nova_url, + cfg.CONF.nova_admin_tenant_id) + else: + bypass_url = None + self.nclient = nclient.Client( username=cfg.CONF.nova_admin_username, api_key=cfg.CONF.nova_admin_password, - project_id=None, + project_id=cfg.CONF.nova_admin_tenant_name, tenant_id=cfg.CONF.nova_admin_tenant_id, auth_url=cfg.CONF.nova_admin_auth_url, cacert=cfg.CONF.nova_ca_certificates_file, From 8e36ba8d24c198cb5e6c0e4ddc29a08904e3e10c Mon Sep 17 00:00:00 2001 From: Samer Deeb Date: Wed, 1 Oct 2014 09:55:21 +0300 Subject: [PATCH 051/128] Fix sleep function call Remove time.sleep method reference in class and use time.sleep directly. Change-Id: Ib4c02061b29c0d584d603746a78ab50922f781c3 Closes-Bug: 1375698 --- neutron/plugins/mlnx/common/comm_utils.py | 3 +-- neutron/tests/unit/mlnx/test_mlnx_comm_utils.py | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/neutron/plugins/mlnx/common/comm_utils.py b/neutron/plugins/mlnx/common/comm_utils.py index 834b5a2cb12..f426908f282 100644 --- a/neutron/plugins/mlnx/common/comm_utils.py +++ b/neutron/plugins/mlnx/common/comm_utils.py @@ -35,7 +35,6 @@ class RetryDecorator(object): :param retries: number of times to try before giving up :raises: exceptionToCheck """ - sleep_fn = time.sleep def __init__(self, exceptionToCheck, interval=cfg.CONF.ESWITCH.request_timeout / 1000, @@ -56,7 +55,7 @@ class RetryDecorator(object): except self.exc: LOG.debug(_("Request timeout - call again after " "%s seconds"), sleep_interval) - RetryDecorator.sleep_fn(sleep_interval) + time.sleep(sleep_interval) num_of_iter -= 1 sleep_interval *= self.backoff_rate diff --git a/neutron/tests/unit/mlnx/test_mlnx_comm_utils.py b/neutron/tests/unit/mlnx/test_mlnx_comm_utils.py index bb8bdcced71..49f2eaceea7 100644 --- a/neutron/tests/unit/mlnx/test_mlnx_comm_utils.py +++ b/neutron/tests/unit/mlnx/test_mlnx_comm_utils.py @@ -29,8 +29,7 @@ class WrongException(Exception): class TestRetryDecorator(base.BaseTestCase): def setUp(self): super(TestRetryDecorator, self).setUp() - self.sleep_fn_p = mock.patch.object(comm_utils.RetryDecorator, - 'sleep_fn') + self.sleep_fn_p = mock.patch("time.sleep") self.sleep_fn = self.sleep_fn_p.start() def test_no_retry_required(self): From c7baaa068ed1d3c8b02717232edef60ba1b655f6 Mon Sep 17 00:00:00 2001 From: Kevin Benton Date: Wed, 18 Jun 2014 12:03:01 -0700 Subject: [PATCH 052/128] Allow reading a tenant router's external IP Adds an external IPs field to the external gateway information for a router so the external IP address of the router can be read by the tenant. DocImpact Closes-Bug: #1255142 Change-Id: If4e77c445e9b855ff77deea6c8df4a0b3cf249d4 --- neutron/db/l3_db.py | 6 +++++- neutron/db/l3_gwmode_db.py | 8 +++++++- neutron/extensions/l3.py | 16 +++++++++++++++- neutron/extensions/l3_ext_gw_mode.py | 8 +++++++- neutron/tests/unit/test_extension_ext_gw_mode.py | 11 ++++++++--- neutron/tests/unit/test_l3_plugin.py | 10 ++++++++-- 6 files changed, 50 insertions(+), 9 deletions(-) diff --git a/neutron/db/l3_db.py b/neutron/db/l3_db.py index afc01a33bbd..709c99cb0dd 100644 --- a/neutron/db/l3_db.py +++ b/neutron/db/l3_db.py @@ -101,7 +101,11 @@ class L3_NAT_dbonly_mixin(l3.RouterPluginBase): def _make_router_dict(self, router, fields=None, process_extensions=True): res = dict((key, router[key]) for key in CORE_ROUTER_ATTRS) if router['gw_port_id']: - ext_gw_info = {'network_id': router.gw_port['network_id']} + ext_gw_info = { + 'network_id': router.gw_port['network_id'], + 'external_fixed_ips': [{'subnet_id': ip["subnet_id"], + 'ip_address': ip["ip_address"]} + for ip in router.gw_port['fixed_ips']]} else: ext_gw_info = None res.update({ diff --git a/neutron/db/l3_gwmode_db.py b/neutron/db/l3_gwmode_db.py index dce6cafe90f..e9f081f6fce 100644 --- a/neutron/db/l3_gwmode_db.py +++ b/neutron/db/l3_gwmode_db.py @@ -43,7 +43,13 @@ class L3_NAT_dbonly_mixin(l3_db.L3_NAT_dbonly_mixin): nw_id = router_db.gw_port['network_id'] router_res[EXTERNAL_GW_INFO] = { 'network_id': nw_id, - 'enable_snat': router_db.enable_snat} + 'enable_snat': router_db.enable_snat, + 'external_fixed_ips': [ + {'subnet_id': ip["subnet_id"], + 'ip_address': ip["ip_address"]} + for ip in router_db.gw_port['fixed_ips'] + ] + } def _update_router_gw_info(self, context, router_id, info, router=None): # Load the router only if necessary diff --git a/neutron/extensions/l3.py b/neutron/extensions/l3.py index b02c9337b6d..1497d9fb45c 100644 --- a/neutron/extensions/l3.py +++ b/neutron/extensions/l3.py @@ -100,7 +100,20 @@ RESOURCE_ATTRIBUTE_MAP = { 'is_visible': True}, EXTERNAL_GW_INFO: {'allow_post': True, 'allow_put': True, 'is_visible': True, 'default': None, - 'enforce_policy': True} + 'enforce_policy': True, + 'validate': { + 'type:dict_or_nodata': { + 'network_id': {'type:uuid': None, + 'required': True}, + 'external_fixed_ips': { + 'convert_list_to': + attr.convert_kvp_list_to_dict, + 'type:fixed_ips': None, + 'default': None, + 'required': False, + } + } + }} }, 'floatingips': { 'id': {'allow_post': False, 'allow_put': False, @@ -174,6 +187,7 @@ class L3(extensions.ExtensionDescriptor): """Returns Ext Resources.""" plural_mappings = resource_helper.build_plural_mappings( {}, RESOURCE_ATTRIBUTE_MAP) + plural_mappings['external_fixed_ips'] = 'external_fixed_ip' attr.PLURALS.update(plural_mappings) action_map = {'router': {'add_router_interface': 'PUT', 'remove_router_interface': 'PUT'}} diff --git a/neutron/extensions/l3_ext_gw_mode.py b/neutron/extensions/l3_ext_gw_mode.py index 31c943a9c88..ae0ab1d54b9 100644 --- a/neutron/extensions/l3_ext_gw_mode.py +++ b/neutron/extensions/l3_ext_gw_mode.py @@ -29,7 +29,13 @@ EXTENDED_ATTRIBUTES_2_0 = { {'type:dict_or_nodata': {'network_id': {'type:uuid': None, 'required': True}, 'enable_snat': {'type:boolean': None, 'required': False, - 'convert_to': attrs.convert_to_boolean}} + 'convert_to': attrs.convert_to_boolean}, + 'external_fixed_ips': { + 'convert_list_to': attrs.convert_kvp_list_to_dict, + 'validate': {'type:fixed_ips': None}, + 'default': None, + 'required': False} + } }}}} diff --git a/neutron/tests/unit/test_extension_ext_gw_mode.py b/neutron/tests/unit/test_extension_ext_gw_mode.py index c119470d390..502fd1c0f9f 100644 --- a/neutron/tests/unit/test_extension_ext_gw_mode.py +++ b/neutron/tests/unit/test_extension_ext_gw_mode.py @@ -245,14 +245,16 @@ class TestL3GwModeMixin(testlib_api.SqlTestCase, def test_make_router_dict_with_ext_gw(self): router_dict = self.target_object._make_router_dict(self.router) self.assertEqual({'network_id': self.ext_net_id, - 'enable_snat': True}, + 'enable_snat': True, + 'external_fixed_ips': []}, router_dict[l3.EXTERNAL_GW_INFO]) def test_make_router_dict_with_ext_gw_snat_disabled(self): self.router.enable_snat = False router_dict = self.target_object._make_router_dict(self.router) self.assertEqual({'network_id': self.ext_net_id, - 'enable_snat': False}, + 'enable_snat': False, + 'external_fixed_ips': []}, router_dict[l3.EXTERNAL_GW_INFO]) def test_build_routers_list_no_ext_gw(self): @@ -364,7 +366,10 @@ class ExtGwModeIntTestCase(test_db_plugin.NeutronDbPluginV2TestCase, ('admin_state_up', True), ('status', 'ACTIVE'), ('external_gateway_info', {'network_id': ext_net_id, - 'enable_snat': snat_expected_value})] + 'enable_snat': snat_expected_value, + 'external_fixed_ips': [{ + 'ip_address': mock.ANY, + 'subnet_id': s['subnet']['id']}]})] with self.router( name=name, admin_state_up=True, tenant_id=tenant_id, external_gateway_info=input_value) as router: diff --git a/neutron/tests/unit/test_l3_plugin.py b/neutron/tests/unit/test_l3_plugin.py index 19838c3ec6f..950e35588c4 100644 --- a/neutron/tests/unit/test_l3_plugin.py +++ b/neutron/tests/unit/test_l3_plugin.py @@ -1094,11 +1094,17 @@ class L3NatTestCaseBase(L3NatTestCaseMixin): 'remove', tenant_router['router']['id'], s['subnet']['id'], None, tenant_id='tenant_a') - def test_router_add_gateway_invalid_network_returns_404(self): + def test_router_add_gateway_invalid_network_returns_400(self): with self.router() as r: self._add_external_gateway_to_router( r['router']['id'], - "foobar", expected_code=exc.HTTPNotFound.code) + "foobar", expected_code=exc.HTTPBadRequest.code) + + def test_router_add_gateway_non_existent_network_returns_404(self): + with self.router() as r: + self._add_external_gateway_to_router( + r['router']['id'], + _uuid(), expected_code=exc.HTTPNotFound.code) def test_router_add_gateway_net_not_external_returns_400(self): with self.router() as r: From 91683ffeb75fe8899a2925b5490c7c57ffa5f10a Mon Sep 17 00:00:00 2001 From: Mark McClain Date: Wed, 24 Sep 2014 01:50:06 +0000 Subject: [PATCH 053/128] remove linuxbridge plugin This changeset removes the linuxbridge plugin, but retains the agent for ML2. The database models were not removed since operators will need to migrate the data. Additionally, the ml2 migration script was altered to support Juno. For testing, a user must either run the migration against the icehouse scheme or run the update, manually change alembic_version to juno and then run the migration script. Once the juno migration is added, this manually step will not be required. Change-Id: I70689b4247947e6dc08e80fd9b31da9dc691d259 Partial-Bug: 1323729 --- neutron/db/migration/migrate_to_ml2.py | 38 +- neutron/plugins/linuxbridge/README | 125 +--- .../plugins/linuxbridge/db/l2network_db_v2.py | 238 -------- .../plugins/linuxbridge/lb_neutron_plugin.py | 544 ------------------ .../unit/linuxbridge/test_agent_scheduler.py | 34 -- neutron/tests/unit/linuxbridge/test_lb_db.py | 169 ------ .../linuxbridge/test_lb_security_group.py | 97 ---- .../linuxbridge/test_linuxbridge_plugin.py | 127 ---- neutron/tests/unit/linuxbridge/test_rpcapi.py | 143 ----- neutron/tests/unit/test_quota_ext.py | 3 +- setup.cfg | 1 - 11 files changed, 33 insertions(+), 1486 deletions(-) delete mode 100644 neutron/plugins/linuxbridge/db/l2network_db_v2.py delete mode 100644 neutron/plugins/linuxbridge/lb_neutron_plugin.py delete mode 100644 neutron/tests/unit/linuxbridge/test_agent_scheduler.py delete mode 100644 neutron/tests/unit/linuxbridge/test_lb_db.py delete mode 100644 neutron/tests/unit/linuxbridge/test_lb_security_group.py delete mode 100644 neutron/tests/unit/linuxbridge/test_linuxbridge_plugin.py delete mode 100644 neutron/tests/unit/linuxbridge/test_rpcapi.py diff --git a/neutron/db/migration/migrate_to_ml2.py b/neutron/db/migration/migrate_to_ml2.py index 9c854582f14..97a18701532 100755 --- a/neutron/db/migration/migrate_to_ml2.py +++ b/neutron/db/migration/migrate_to_ml2.py @@ -75,9 +75,10 @@ OPENVSWITCH = 'openvswitch' # Releases ICEHOUSE = 'icehouse' +JUNO = 'juno' -SUPPORTED_SCHEMA_VERSIONS = [ICEHOUSE] +SUPPORTED_SCHEMA_VERSIONS = [ICEHOUSE, JUNO] def check_db_schema_version(engine, metadata): @@ -115,7 +116,7 @@ def interpret_vlan_id(vlan_id): return (p_const.TYPE_VLAN, vlan_id) -class BaseMigrateToMl2_Icehouse(object): +class BaseMigrateToMl2(object): def __init__(self, vif_type, driver_type, segment_table_name, vlan_allocation_table_name, old_tables): @@ -210,6 +211,13 @@ class BaseMigrateToMl2_Icehouse(object): ml2_port_bindings = metadata.tables['ml2_port_bindings'] engine.execute(ml2_port_bindings.insert(), ml2_bindings) + +class BaseMigrateToMl2_IcehouseMixin(object): + """A mixin to ensure ml2 database schema state for Icehouse. + + This classes the missing tables for Icehouse schema revisions. In Juno, + the schema state has been healed, so we do not need to run these. + """ def drop_old_tables(self, engine, save_tables=False): if save_tables: return @@ -351,10 +359,10 @@ class BaseMigrateToMl2_Icehouse(object): ) -class MigrateLinuxBridgeToMl2_Icehouse(BaseMigrateToMl2_Icehouse): +class MigrateLinuxBridgeToMl2_Juno(BaseMigrateToMl2): def __init__(self): - super(MigrateLinuxBridgeToMl2_Icehouse, self).__init__( + super(MigrateLinuxBridgeToMl2_Juno, self).__init__( vif_type=portbindings.VIF_TYPE_BRIDGE, driver_type=LINUXBRIDGE, segment_table_name='network_bindings', @@ -362,7 +370,7 @@ class MigrateLinuxBridgeToMl2_Icehouse(BaseMigrateToMl2_Icehouse): old_tables=['portbindingports']) def migrate_segment_dict(self, binding): - super(MigrateLinuxBridgeToMl2_Icehouse, self).migrate_segment_dict( + super(MigrateLinuxBridgeToMl2_Juno, self).migrate_segment_dict( binding) vlan_id = binding.pop('vlan_id') network_type, segmentation_id = interpret_vlan_id(vlan_id) @@ -370,10 +378,10 @@ class MigrateLinuxBridgeToMl2_Icehouse(BaseMigrateToMl2_Icehouse): binding['segmentation_id'] = segmentation_id -class MigrateOpenvswitchToMl2_Icehouse(BaseMigrateToMl2_Icehouse): +class MigrateOpenvswitchToMl2_Juno(BaseMigrateToMl2): def __init__(self): - super(MigrateOpenvswitchToMl2_Icehouse, self).__init__( + super(MigrateOpenvswitchToMl2_Juno, self).__init__( vif_type=portbindings.VIF_TYPE_OVS, driver_type=OPENVSWITCH, segment_table_name='ovs_network_bindings', @@ -415,11 +423,25 @@ class MigrateOpenvswitchToMl2_Icehouse(BaseMigrateToMl2_Icehouse): raise ValueError(_('Unknown tunnel type: %s') % tunnel_type) +class MigrateLinuxBridgeToMl2_Icehouse(MigrateLinuxBridgeToMl2_Juno, + BaseMigrateToMl2_IcehouseMixin): + pass + + +class MigrateOpenvswitchToMl2_Icehouse(MigrateOpenvswitchToMl2_Juno, + BaseMigrateToMl2_IcehouseMixin): + pass + + migrate_map = { ICEHOUSE: { OPENVSWITCH: MigrateOpenvswitchToMl2_Icehouse, LINUXBRIDGE: MigrateLinuxBridgeToMl2_Icehouse, }, + JUNO: { + OPENVSWITCH: MigrateOpenvswitchToMl2_Juno, + LINUXBRIDGE: MigrateLinuxBridgeToMl2_Juno, + }, } @@ -436,7 +458,7 @@ def main(): OPENVSWITCH) parser.add_argument('--vxlan-udp-port', default=None, type=int, help=_('The UDP port to use for VXLAN tunnels.')) - parser.add_argument('--release', default=ICEHOUSE, choices=[ICEHOUSE]) + parser.add_argument('--release', default=JUNO, choices=[ICEHOUSE, JUNO]) parser.add_argument('--save-tables', default=False, action='store_true', help=_("Retain the old plugin's tables")) #TODO(marun) Provide a verbose option diff --git a/neutron/plugins/linuxbridge/README b/neutron/plugins/linuxbridge/README index 9f7f5d7c5ae..89eb5ece637 100644 --- a/neutron/plugins/linuxbridge/README +++ b/neutron/plugins/linuxbridge/README @@ -1,128 +1,7 @@ # -- Background -The Neutron Linux Bridge plugin is a plugin that allows you to manage -connectivity between VMs on hosts that are capable of running a Linux Bridge. - -The Neutron Linux Bridge plugin consists of three components: - -1) The plugin itself: The plugin uses a database backend (mysql for - now) to store configuration and mappings that are used by the - agent. The mysql server runs on a central server (often the same - host as nova itself). - -2) The neutron service host which will be running neutron. This can - be run on the server running nova. - -3) An agent which runs on the host and communicates with the host operating - system. The agent gathers the configuration and mappings from - the mysql database running on the neutron host. - -The sections below describe how to configure and run the neutron -service with the Linux Bridge plugin. - -# -- Python library dependencies - - Make sure you have the following package(s) installed on neutron server - host as well as any hosts which run the agent: - bridge-utils - python-mysqldb - sqlite3 - -# -- Nova configuration (controller node) - -1) Ensure that the neutron network manager is configured in the - nova.conf on the node that will be running nova-network. - -network_manager=nova.network.neutron.manager.NeutronManager - -# -- Nova configuration (compute node(s)) - -1) Configure the vif driver, and libvirt/vif type - -connection_type=libvirt -libvirt_type=qemu -libvirt_vif_type=ethernet -libvirt_vif_driver=nova.virt.libvirt.vif.NeutronLinuxBridgeVIFDriver -linuxnet_interface_driver=nova.network.linux_net.NeutronLinuxBridgeInterfaceDriver - -2) If you want a DHCP server to be run for the VMs to acquire IPs, - add the following flag to your nova.conf file: - -neutron_use_dhcp=true - -(Note: For more details on how to work with Neutron using Nova, i.e. how to create networks and such, - please refer to the top level Neutron README which points to the relevant documentation.) - -# -- Neutron configuration - -Make the Linux Bridge plugin the current neutron plugin - -- edit neutron.conf and change the core_plugin - -core_plugin = neutron.plugins.linuxbridge.lb_neutron_plugin.LinuxBridgePluginV2 - -# -- Database config. - -(Note: The plugin ships with a default SQLite in-memory database configuration, - and can be used to run tests without performing the suggested DB config below.) - -The Linux Bridge neutron plugin requires access to a mysql database in order -to store configuration and mappings that will be used by the agent. Here is -how to set up the database on the host that you will be running the neutron -service on. - -MySQL should be installed on the host, and all plugins and clients -must be configured with access to the database. - -To prep mysql, run: - -$ mysql -u root -p -e "create database neutron_linux_bridge" - -# log in to mysql service -$ mysql -u root -p -# The Linux Bridge Neutron agent running on each compute node must be able to -# make a mysql connection back to the main database server. -mysql> GRANT USAGE ON *.* to root@'yourremotehost' IDENTIFIED BY 'newpassword'; -# force update of authorization changes -mysql> FLUSH PRIVILEGES; - -(Note: If the remote connection fails to MySQL, you might need to add the IP address, - and/or fully-qualified hostname, and/or unqualified hostname in the above GRANT sql - command. Also, you might need to specify "ALL" instead of "USAGE".) - -# -- Plugin configuration - -- Edit the configuration file: - etc/neutron/plugins/linuxbridge/linuxbridge_conf.ini - Make sure it matches your mysql configuration. This file must be updated - with the addresses and credentials to access the database. - - Note: debug and logging information should be updated in etc/neutron.conf - - Note: When running the tests, set the connection type to sqlite, and when - actually running the server set it to mysql. At any given time, only one - of these should be active in the conf file (you can comment out the other). - -- On the neutron server, network_vlan_ranges must be configured in - linuxbridge_conf.ini to specify the names of the physical networks - managed by the linuxbridge plugin, along with the ranges of VLAN IDs - available on each physical network for allocation to virtual - networks. An entry of the form - "::" specifies a VLAN range on - the named physical network. An entry of the form - "" specifies a named network without making a - range of VLANs available for allocation. Networks specified using - either form are available for adminstrators to create provider flat - networks and provider VLANs. Multiple VLAN ranges can be specified - for the same physical network. - - The following example linuxbridge_conf.ini entry shows three - physical networks that can be used to create provider networks, with - ranges of VLANs available for allocation on two of them: - - [VLANS] - network_vlan_ranges = physnet1:1000:2999,physnet1:3000:3999,physnet2,physnet3:1:4094 - +The Neutron Linux Bridge plugin has removed from the tree in Juno. You must +migrate to ML2 using the script in: neutron/db/migration/migrate_to_ml2.py # -- Agent configuration diff --git a/neutron/plugins/linuxbridge/db/l2network_db_v2.py b/neutron/plugins/linuxbridge/db/l2network_db_v2.py deleted file mode 100644 index 416bd2f593e..00000000000 --- a/neutron/plugins/linuxbridge/db/l2network_db_v2.py +++ /dev/null @@ -1,238 +0,0 @@ -# Copyright (c) 2012 OpenStack Foundation. -# -# 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. - -from six import moves -from sqlalchemy.orm import exc - -from neutron.common import exceptions as n_exc -import neutron.db.api as db -from neutron.db import models_v2 -from neutron.db import securitygroups_db as sg_db -from neutron import manager -from neutron.openstack.common import log as logging -from neutron.plugins.linuxbridge.common import config # noqa -from neutron.plugins.linuxbridge.common import constants -from neutron.plugins.linuxbridge.db import l2network_models_v2 - -LOG = logging.getLogger(__name__) - - -def sync_network_states(network_vlan_ranges): - """Synchronize network_states table with current configured VLAN ranges.""" - - session = db.get_session() - with session.begin(): - # get existing allocations for all physical networks - allocations = dict() - states = (session.query(l2network_models_v2.NetworkState). - all()) - for state in states: - if state.physical_network not in allocations: - allocations[state.physical_network] = set() - allocations[state.physical_network].add(state) - - # process vlan ranges for each configured physical network - for physical_network, vlan_ranges in network_vlan_ranges.iteritems(): - # determine current configured allocatable vlans for this - # physical network - vlan_ids = set() - for vlan_range in vlan_ranges: - vlan_ids |= set(moves.xrange(vlan_range[0], vlan_range[1] + 1)) - - # remove from table unallocated vlans not currently allocatable - if physical_network in allocations: - for state in allocations[physical_network]: - try: - # see if vlan is allocatable - vlan_ids.remove(state.vlan_id) - except KeyError: - # it's not allocatable, so check if its allocated - if not state.allocated: - # it's not, so remove it from table - LOG.debug(_("Removing vlan %(vlan_id)s on " - "physical network %(physical_network)s" - " from pool"), - {'vlan_id': state.vlan_id, - 'physical_network': physical_network}) - session.delete(state) - del allocations[physical_network] - - # add missing allocatable vlans to table - for vlan_id in sorted(vlan_ids): - state = l2network_models_v2.NetworkState(physical_network, - vlan_id) - session.add(state) - - # remove from table unallocated vlans for any unconfigured physical - # networks - for states in allocations.itervalues(): - for state in states: - if not state.allocated: - LOG.debug(_("Removing vlan %(vlan_id)s on physical " - "network %(physical_network)s" - " from pool"), - {'vlan_id': state.vlan_id, - 'physical_network': state.physical_network}) - session.delete(state) - - -def get_network_state(physical_network, vlan_id): - """Get state of specified network.""" - - session = db.get_session() - try: - state = (session.query(l2network_models_v2.NetworkState). - filter_by(physical_network=physical_network, - vlan_id=vlan_id). - one()) - return state - except exc.NoResultFound: - return None - - -def reserve_network(session): - with session.begin(subtransactions=True): - state = (session.query(l2network_models_v2.NetworkState). - filter_by(allocated=False). - with_lockmode('update'). - first()) - if not state: - raise n_exc.NoNetworkAvailable() - LOG.debug(_("Reserving vlan %(vlan_id)s on physical network " - "%(physical_network)s from pool"), - {'vlan_id': state.vlan_id, - 'physical_network': state.physical_network}) - state.allocated = True - return (state.physical_network, state.vlan_id) - - -def reserve_specific_network(session, physical_network, vlan_id): - with session.begin(subtransactions=True): - try: - state = (session.query(l2network_models_v2.NetworkState). - filter_by(physical_network=physical_network, - vlan_id=vlan_id). - with_lockmode('update'). - one()) - if state.allocated: - if vlan_id == constants.FLAT_VLAN_ID: - raise n_exc.FlatNetworkInUse( - physical_network=physical_network) - else: - raise n_exc.VlanIdInUse(vlan_id=vlan_id, - physical_network=physical_network) - LOG.debug(_("Reserving specific vlan %(vlan_id)s on physical " - "network %(physical_network)s from pool"), - {'vlan_id': vlan_id, - 'physical_network': physical_network}) - state.allocated = True - except exc.NoResultFound: - LOG.debug(_("Reserving specific vlan %(vlan_id)s on physical " - "network %(physical_network)s outside pool"), - {'vlan_id': vlan_id, - 'physical_network': physical_network}) - state = l2network_models_v2.NetworkState(physical_network, vlan_id) - state.allocated = True - session.add(state) - - -def release_network(session, physical_network, vlan_id, network_vlan_ranges): - with session.begin(subtransactions=True): - try: - state = (session.query(l2network_models_v2.NetworkState). - filter_by(physical_network=physical_network, - vlan_id=vlan_id). - with_lockmode('update'). - one()) - state.allocated = False - inside = False - for vlan_range in network_vlan_ranges.get(physical_network, []): - if vlan_id >= vlan_range[0] and vlan_id <= vlan_range[1]: - inside = True - break - if inside: - LOG.debug(_("Releasing vlan %(vlan_id)s on physical network " - "%(physical_network)s to pool"), - {'vlan_id': vlan_id, - 'physical_network': physical_network}) - else: - LOG.debug(_("Releasing vlan %(vlan_id)s on physical network " - "%(physical_network)s outside pool"), - {'vlan_id': vlan_id, - 'physical_network': physical_network}) - session.delete(state) - except exc.NoResultFound: - LOG.warning(_("vlan_id %(vlan_id)s on physical network " - "%(physical_network)s not found"), - {'vlan_id': vlan_id, - 'physical_network': physical_network}) - - -def add_network_binding(session, network_id, physical_network, vlan_id): - with session.begin(subtransactions=True): - binding = l2network_models_v2.NetworkBinding(network_id, - physical_network, vlan_id) - session.add(binding) - - -def get_network_binding(session, network_id): - try: - binding = (session.query(l2network_models_v2.NetworkBinding). - filter_by(network_id=network_id). - one()) - return binding - except exc.NoResultFound: - return - - -def get_port_from_device(device): - """Get port from database.""" - LOG.debug(_("get_port_from_device() called")) - session = db.get_session() - sg_binding_port = sg_db.SecurityGroupPortBinding.port_id - - query = session.query(models_v2.Port, - sg_db.SecurityGroupPortBinding.security_group_id) - query = query.outerjoin(sg_db.SecurityGroupPortBinding, - models_v2.Port.id == sg_binding_port) - query = query.filter(models_v2.Port.id.startswith(device)) - port_and_sgs = query.all() - if not port_and_sgs: - return - port = port_and_sgs[0][0] - plugin = manager.NeutronManager.get_plugin() - port_dict = plugin._make_port_dict(port) - port_dict['security_groups'] = [] - for port_in_db, sg_id in port_and_sgs: - if sg_id: - port_dict['security_groups'].append(sg_id) - port_dict['security_group_rules'] = [] - port_dict['security_group_source_groups'] = [] - port_dict['fixed_ips'] = [ip['ip_address'] - for ip in port['fixed_ips']] - return port_dict - - -def set_port_status(port_id, status): - """Set the port status.""" - LOG.debug(_("set_port_status as %s called"), status) - session = db.get_session() - try: - port = session.query(models_v2.Port).filter_by(id=port_id).one() - port['status'] = status - session.merge(port) - session.flush() - except exc.NoResultFound: - raise n_exc.PortNotFound(port_id=port_id) diff --git a/neutron/plugins/linuxbridge/lb_neutron_plugin.py b/neutron/plugins/linuxbridge/lb_neutron_plugin.py deleted file mode 100644 index a692bbcfb96..00000000000 --- a/neutron/plugins/linuxbridge/lb_neutron_plugin.py +++ /dev/null @@ -1,544 +0,0 @@ -# Copyright (c) 2012 OpenStack Foundation. -# -# 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. - -import sys - -from oslo.config import cfg - -from neutron.agent import securitygroups_rpc as sg_rpc -from neutron.api.rpc.agentnotifiers import dhcp_rpc_agent_api -from neutron.api.rpc.agentnotifiers import l3_rpc_agent_api -from neutron.api.rpc.handlers import dhcp_rpc -from neutron.api.rpc.handlers import l3_rpc -from neutron.api.rpc.handlers import securitygroups_rpc -from neutron.api.v2 import attributes -from neutron.common import constants as q_const -from neutron.common import exceptions as n_exc -from neutron.common import rpc as n_rpc -from neutron.common import topics -from neutron.common import utils -from neutron.db import agents_db -from neutron.db import agentschedulers_db -from neutron.db import api as db_api -from neutron.db import db_base_plugin_v2 -from neutron.db import external_net_db -from neutron.db import extraroute_db -from neutron.db import l3_agentschedulers_db -from neutron.db import l3_gwmode_db -from neutron.db import portbindings_db -from neutron.db import quota_db # noqa -from neutron.db import securitygroups_rpc_base as sg_db_rpc -from neutron.extensions import portbindings -from neutron.extensions import providernet as provider -from neutron import manager -from neutron.openstack.common import importutils -from neutron.openstack.common import log as logging -from neutron.plugins.common import constants as svc_constants -from neutron.plugins.common import utils as plugin_utils -from neutron.plugins.linuxbridge.common import constants -from neutron.plugins.linuxbridge.db import l2network_db_v2 as db - - -LOG = logging.getLogger(__name__) - - -class LinuxBridgeRpcCallbacks(n_rpc.RpcCallback): - - # Device names start with "tap" - # history - # 1.1 Support Security Group RPC - # 1.2 Support get_devices_details_list - RPC_API_VERSION = '1.2' - - def get_device_details(self, rpc_context, **kwargs): - """Agent requests device details.""" - agent_id = kwargs.get('agent_id') - device = kwargs.get('device') - LOG.debug(_("Device %(device)s details requested from %(agent_id)s"), - {'device': device, 'agent_id': agent_id}) - plugin = manager.NeutronManager.get_plugin() - port = plugin.get_port_from_device(device) - if port: - binding = db.get_network_binding(db_api.get_session(), - port['network_id']) - (network_type, - segmentation_id) = constants.interpret_vlan_id(binding.vlan_id) - entry = {'device': device, - 'network_type': network_type, - 'physical_network': binding.physical_network, - 'segmentation_id': segmentation_id, - 'network_id': port['network_id'], - 'port_id': port['id'], - 'admin_state_up': port['admin_state_up']} - if cfg.CONF.AGENT.rpc_support_old_agents: - entry['vlan_id'] = binding.vlan_id - new_status = (q_const.PORT_STATUS_ACTIVE if port['admin_state_up'] - else q_const.PORT_STATUS_DOWN) - if port['status'] != new_status: - db.set_port_status(port['id'], new_status) - else: - entry = {'device': device} - LOG.debug(_("%s can not be found in database"), device) - return entry - - def get_devices_details_list(self, rpc_context, **kwargs): - return [ - self.get_device_details( - rpc_context, - device=device, - **kwargs - ) - for device in kwargs.pop('devices', []) - ] - - def update_device_down(self, rpc_context, **kwargs): - """Device no longer exists on agent.""" - # TODO(garyk) - live migration and port status - agent_id = kwargs.get('agent_id') - device = kwargs.get('device') - host = kwargs.get('host') - LOG.debug(_("Device %(device)s no longer exists on %(agent_id)s"), - {'device': device, 'agent_id': agent_id}) - plugin = manager.NeutronManager.get_plugin() - port = plugin.get_port_from_device(device) - if port: - entry = {'device': device, - 'exists': True} - if (host and not - plugin.get_port_host(rpc_context, port['id']) == host): - LOG.debug(_("Device %(device)s not bound to the" - " agent host %(host)s"), - {'device': device, 'host': host}) - elif port['status'] != q_const.PORT_STATUS_DOWN: - # Set port status to DOWN - db.set_port_status(port['id'], q_const.PORT_STATUS_DOWN) - else: - entry = {'device': device, - 'exists': False} - LOG.debug(_("%s can not be found in database"), device) - return entry - - def update_device_up(self, rpc_context, **kwargs): - """Device is up on agent.""" - agent_id = kwargs.get('agent_id') - device = kwargs.get('device') - host = kwargs.get('host') - LOG.debug(_("Device %(device)s up on %(agent_id)s"), - {'device': device, 'agent_id': agent_id}) - plugin = manager.NeutronManager.get_plugin() - port = plugin.get_port_from_device(device) - if port: - if (host and - not plugin.get_port_host(rpc_context, port['id']) == host): - LOG.debug(_("Device %(device)s not bound to the" - " agent host %(host)s"), - {'device': device, 'host': host}) - return - elif port['status'] != q_const.PORT_STATUS_ACTIVE: - db.set_port_status(port['id'], - q_const.PORT_STATUS_ACTIVE) - else: - LOG.debug(_("%s can not be found in database"), device) - - -class AgentNotifierApi(n_rpc.RpcProxy, - sg_rpc.SecurityGroupAgentRpcApiMixin): - '''Agent side of the linux bridge rpc API. - - API version history: - 1.0 - Initial version. - 1.1 - Added get_active_networks_info, create_dhcp_port, - and update_dhcp_port methods. - - - ''' - - BASE_RPC_API_VERSION = '1.1' - - def __init__(self, topic): - super(AgentNotifierApi, self).__init__( - topic=topic, default_version=self.BASE_RPC_API_VERSION) - self.topic = topic - self.topic_network_delete = topics.get_topic_name(topic, - topics.NETWORK, - topics.DELETE) - self.topic_port_update = topics.get_topic_name(topic, - topics.PORT, - topics.UPDATE) - - def network_delete(self, context, network_id): - self.fanout_cast(context, - self.make_msg('network_delete', - network_id=network_id), - topic=self.topic_network_delete) - - def port_update(self, context, port, physical_network, vlan_id): - network_type, segmentation_id = constants.interpret_vlan_id(vlan_id) - kwargs = {'port': port, - 'network_type': network_type, - 'physical_network': physical_network, - 'segmentation_id': segmentation_id} - if cfg.CONF.AGENT.rpc_support_old_agents: - kwargs['vlan_id'] = vlan_id - msg = self.make_msg('port_update', **kwargs) - self.fanout_cast(context, msg, - topic=self.topic_port_update) - - -class LinuxBridgePluginV2(db_base_plugin_v2.NeutronDbPluginV2, - external_net_db.External_net_db_mixin, - extraroute_db.ExtraRoute_db_mixin, - l3_gwmode_db.L3_NAT_db_mixin, - sg_db_rpc.SecurityGroupServerRpcMixin, - l3_agentschedulers_db.L3AgentSchedulerDbMixin, - agentschedulers_db.DhcpAgentSchedulerDbMixin, - portbindings_db.PortBindingMixin): - """Implement the Neutron abstractions using Linux bridging. - - A new VLAN is created for each network. An agent is relied upon - to perform the actual Linux bridge configuration on each host. - - The provider extension is also supported. As discussed in - https://bugs.launchpad.net/neutron/+bug/1023156, this class could - be simplified, and filtering on extended attributes could be - handled, by adding support for extended attributes to the - NeutronDbPluginV2 base class. When that occurs, this class should - be updated to take advantage of it. - - The port binding extension enables an external application relay - information to and from the plugin. - """ - - # This attribute specifies whether the plugin supports or not - # bulk/pagination/sorting operations. Name mangling is used in - # order to ensure it is qualified by class - __native_bulk_support = True - __native_pagination_support = True - __native_sorting_support = True - - _supported_extension_aliases = ["provider", "external-net", "router", - "ext-gw-mode", "binding", "quotas", - "security-group", "agent", "extraroute", - "l3_agent_scheduler", - "dhcp_agent_scheduler"] - - @property - def supported_extension_aliases(self): - if not hasattr(self, '_aliases'): - aliases = self._supported_extension_aliases[:] - sg_rpc.disable_security_group_extension_by_config(aliases) - self._aliases = aliases - return self._aliases - - def __init__(self): - super(LinuxBridgePluginV2, self).__init__() - self.base_binding_dict = { - portbindings.VIF_TYPE: portbindings.VIF_TYPE_BRIDGE, - portbindings.VIF_DETAILS: { - # TODO(rkukura): Replace with new VIF security details - portbindings.CAP_PORT_FILTER: - 'security-group' in self.supported_extension_aliases}} - self._parse_network_vlan_ranges() - db.sync_network_states(self.network_vlan_ranges) - self.tenant_network_type = cfg.CONF.VLANS.tenant_network_type - if self.tenant_network_type not in [svc_constants.TYPE_LOCAL, - svc_constants.TYPE_VLAN, - svc_constants.TYPE_NONE]: - LOG.error(_("Invalid tenant_network_type: %s. " - "Service terminated!"), - self.tenant_network_type) - sys.exit(1) - self._setup_rpc() - self.network_scheduler = importutils.import_object( - cfg.CONF.network_scheduler_driver - ) - self.router_scheduler = importutils.import_object( - cfg.CONF.router_scheduler_driver - ) - LOG.debug(_("Linux Bridge Plugin initialization complete")) - - def _setup_rpc(self): - # RPC support - self.service_topics = {svc_constants.CORE: topics.PLUGIN, - svc_constants.L3_ROUTER_NAT: topics.L3PLUGIN} - self.conn = n_rpc.create_connection(new=True) - self.endpoints = [LinuxBridgeRpcCallbacks(), - securitygroups_rpc.SecurityGroupServerRpcCallback(), - dhcp_rpc.DhcpRpcCallback(), - l3_rpc.L3RpcCallback(), - agents_db.AgentExtRpcCallback()] - for svc_topic in self.service_topics.values(): - self.conn.create_consumer(svc_topic, self.endpoints, fanout=False) - # Consume from all consumers in threads - self.conn.consume_in_threads() - self.notifier = AgentNotifierApi(topics.AGENT) - self.agent_notifiers[q_const.AGENT_TYPE_DHCP] = ( - dhcp_rpc_agent_api.DhcpAgentNotifyAPI() - ) - self.agent_notifiers[q_const.AGENT_TYPE_L3] = ( - l3_rpc_agent_api.L3AgentNotifyAPI() - ) - - def _parse_network_vlan_ranges(self): - try: - self.network_vlan_ranges = plugin_utils.parse_network_vlan_ranges( - cfg.CONF.VLANS.network_vlan_ranges) - except Exception as ex: - LOG.error(_("%s. Agent terminated!"), ex) - sys.exit(1) - LOG.info(_("Network VLAN ranges: %s"), self.network_vlan_ranges) - - def _add_network_vlan_range(self, physical_network, vlan_min, vlan_max): - self._add_network(physical_network) - self.network_vlan_ranges[physical_network].append((vlan_min, vlan_max)) - - def _add_network(self, physical_network): - if physical_network not in self.network_vlan_ranges: - self.network_vlan_ranges[physical_network] = [] - - def _extend_network_dict_provider(self, context, network): - binding = db.get_network_binding(context.session, network['id']) - if binding.vlan_id == constants.FLAT_VLAN_ID: - network[provider.NETWORK_TYPE] = svc_constants.TYPE_FLAT - network[provider.PHYSICAL_NETWORK] = binding.physical_network - network[provider.SEGMENTATION_ID] = None - elif binding.vlan_id == constants.LOCAL_VLAN_ID: - network[provider.NETWORK_TYPE] = svc_constants.TYPE_LOCAL - network[provider.PHYSICAL_NETWORK] = None - network[provider.SEGMENTATION_ID] = None - else: - network[provider.NETWORK_TYPE] = svc_constants.TYPE_VLAN - network[provider.PHYSICAL_NETWORK] = binding.physical_network - network[provider.SEGMENTATION_ID] = binding.vlan_id - - def _process_provider_create(self, context, attrs): - network_type = attrs.get(provider.NETWORK_TYPE) - physical_network = attrs.get(provider.PHYSICAL_NETWORK) - segmentation_id = attrs.get(provider.SEGMENTATION_ID) - - network_type_set = attributes.is_attr_set(network_type) - physical_network_set = attributes.is_attr_set(physical_network) - segmentation_id_set = attributes.is_attr_set(segmentation_id) - - if not (network_type_set or physical_network_set or - segmentation_id_set): - return (None, None, None) - - if not network_type_set: - msg = _("provider:network_type required") - raise n_exc.InvalidInput(error_message=msg) - elif network_type == svc_constants.TYPE_FLAT: - if segmentation_id_set: - msg = _("provider:segmentation_id specified for flat network") - raise n_exc.InvalidInput(error_message=msg) - else: - segmentation_id = constants.FLAT_VLAN_ID - elif network_type == svc_constants.TYPE_VLAN: - if not segmentation_id_set: - msg = _("provider:segmentation_id required") - raise n_exc.InvalidInput(error_message=msg) - if not utils.is_valid_vlan_tag(segmentation_id): - msg = (_("provider:segmentation_id out of range " - "(%(min_id)s through %(max_id)s)") % - {'min_id': q_const.MIN_VLAN_TAG, - 'max_id': q_const.MAX_VLAN_TAG}) - raise n_exc.InvalidInput(error_message=msg) - elif network_type == svc_constants.TYPE_LOCAL: - if physical_network_set: - msg = _("provider:physical_network specified for local " - "network") - raise n_exc.InvalidInput(error_message=msg) - else: - physical_network = None - if segmentation_id_set: - msg = _("provider:segmentation_id specified for local " - "network") - raise n_exc.InvalidInput(error_message=msg) - else: - segmentation_id = constants.LOCAL_VLAN_ID - else: - msg = _("provider:network_type %s not supported") % network_type - raise n_exc.InvalidInput(error_message=msg) - - if network_type in [svc_constants.TYPE_VLAN, svc_constants.TYPE_FLAT]: - if physical_network_set: - if physical_network not in self.network_vlan_ranges: - msg = (_("Unknown provider:physical_network %s") % - physical_network) - raise n_exc.InvalidInput(error_message=msg) - elif 'default' in self.network_vlan_ranges: - physical_network = 'default' - else: - msg = _("provider:physical_network required") - raise n_exc.InvalidInput(error_message=msg) - - return (network_type, physical_network, segmentation_id) - - def create_network(self, context, network): - (network_type, physical_network, - vlan_id) = self._process_provider_create(context, - network['network']) - - session = context.session - with session.begin(subtransactions=True): - #set up default security groups - tenant_id = self._get_tenant_id_for_create( - context, network['network']) - self._ensure_default_security_group(context, tenant_id) - - if not network_type: - # tenant network - network_type = self.tenant_network_type - if network_type == svc_constants.TYPE_NONE: - raise n_exc.TenantNetworksDisabled() - elif network_type == svc_constants.TYPE_VLAN: - physical_network, vlan_id = db.reserve_network(session) - else: # TYPE_LOCAL - vlan_id = constants.LOCAL_VLAN_ID - else: - # provider network - if network_type in [svc_constants.TYPE_VLAN, - svc_constants.TYPE_FLAT]: - db.reserve_specific_network(session, physical_network, - vlan_id) - # no reservation needed for TYPE_LOCAL - net = super(LinuxBridgePluginV2, self).create_network(context, - network) - db.add_network_binding(session, net['id'], - physical_network, vlan_id) - self._process_l3_create(context, net, network['network']) - self._extend_network_dict_provider(context, net) - # note - exception will rollback entire transaction - return net - - def update_network(self, context, id, network): - provider._raise_if_updates_provider_attributes(network['network']) - - session = context.session - with session.begin(subtransactions=True): - net = super(LinuxBridgePluginV2, self).update_network(context, id, - network) - self._process_l3_update(context, net, network['network']) - self._extend_network_dict_provider(context, net) - return net - - def delete_network(self, context, id): - session = context.session - with session.begin(subtransactions=True): - binding = db.get_network_binding(session, id) - self._process_l3_delete(context, id) - super(LinuxBridgePluginV2, self).delete_network(context, id) - if binding.vlan_id != constants.LOCAL_VLAN_ID: - db.release_network(session, binding.physical_network, - binding.vlan_id, self.network_vlan_ranges) - # the network_binding record is deleted via cascade from - # the network record, so explicit removal is not necessary - self.notifier.network_delete(context, id) - - def get_network(self, context, id, fields=None): - session = context.session - with session.begin(subtransactions=True): - net = super(LinuxBridgePluginV2, self).get_network(context, - id, None) - self._extend_network_dict_provider(context, net) - return self._fields(net, fields) - - def get_networks(self, context, filters=None, fields=None, - sorts=None, limit=None, marker=None, page_reverse=False): - session = context.session - with session.begin(subtransactions=True): - nets = super(LinuxBridgePluginV2, - self).get_networks(context, filters, None, sorts, - limit, marker, page_reverse) - for net in nets: - self._extend_network_dict_provider(context, net) - - return [self._fields(net, fields) for net in nets] - - def create_port(self, context, port): - session = context.session - port_data = port['port'] - with session.begin(subtransactions=True): - self._ensure_default_security_group_on_port(context, port) - sgids = self._get_security_groups_on_port(context, port) - # Set port status as 'DOWN'. This will be updated by agent - port['port']['status'] = q_const.PORT_STATUS_DOWN - - port = super(LinuxBridgePluginV2, - self).create_port(context, port) - self._process_portbindings_create_and_update(context, - port_data, - port) - self._process_port_create_security_group( - context, port, sgids) - self.notify_security_groups_member_updated(context, port) - return port - - def update_port(self, context, id, port): - original_port = self.get_port(context, id) - session = context.session - need_port_update_notify = False - - with session.begin(subtransactions=True): - updated_port = super(LinuxBridgePluginV2, self).update_port( - context, id, port) - self._process_portbindings_create_and_update(context, - port['port'], - updated_port) - need_port_update_notify = self.update_security_group_on_port( - context, id, port, original_port, updated_port) - - need_port_update_notify |= self.is_security_group_member_updated( - context, original_port, updated_port) - - if original_port['admin_state_up'] != updated_port['admin_state_up']: - need_port_update_notify = True - - if need_port_update_notify: - self._notify_port_updated(context, updated_port) - return updated_port - - def delete_port(self, context, id, l3_port_check=True): - - # if needed, check to see if this is a port owned by - # and l3-router. If so, we should prevent deletion. - if l3_port_check: - self.prevent_l3_port_deletion(context, id) - - session = context.session - with session.begin(subtransactions=True): - router_ids = self.disassociate_floatingips( - context, id, do_notify=False) - port = self.get_port(context, id) - self._delete_port_security_group_bindings(context, id) - super(LinuxBridgePluginV2, self).delete_port(context, id) - - # now that we've left db transaction, we are safe to notify - self.notify_routers_updated(context, router_ids) - self.notify_security_groups_member_updated(context, port) - - def _notify_port_updated(self, context, port): - binding = db.get_network_binding(context.session, - port['network_id']) - self.notifier.port_update(context, port, - binding.physical_network, - binding.vlan_id) - - @classmethod - def get_port_from_device(cls, device): - port = db.get_port_from_device(device[len(q_const.TAP_DEVICE_PREFIX):]) - if port: - port['device'] = device - return port diff --git a/neutron/tests/unit/linuxbridge/test_agent_scheduler.py b/neutron/tests/unit/linuxbridge/test_agent_scheduler.py deleted file mode 100644 index 397baaf5c2e..00000000000 --- a/neutron/tests/unit/linuxbridge/test_agent_scheduler.py +++ /dev/null @@ -1,34 +0,0 @@ -# Copyright (c) 2013 OpenStack Foundation. -# -# 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. - -from neutron.tests.unit.linuxbridge import test_linuxbridge_plugin -from neutron.tests.unit.openvswitch import test_agent_scheduler - - -class LbAgentSchedulerTestCase( - test_agent_scheduler.OvsAgentSchedulerTestCase): - plugin_str = test_linuxbridge_plugin.PLUGIN_NAME - l3_plugin = None - - -class LbL3AgentNotifierTestCase( - test_agent_scheduler.OvsL3AgentNotifierTestCase): - plugin_str = test_linuxbridge_plugin.PLUGIN_NAME - l3_plugin = None - - -class LbDhcpAgentNotifierTestCase( - test_agent_scheduler.OvsDhcpAgentNotifierTestCase): - plugin_str = test_linuxbridge_plugin.PLUGIN_NAME diff --git a/neutron/tests/unit/linuxbridge/test_lb_db.py b/neutron/tests/unit/linuxbridge/test_lb_db.py deleted file mode 100644 index f432482103f..00000000000 --- a/neutron/tests/unit/linuxbridge/test_lb_db.py +++ /dev/null @@ -1,169 +0,0 @@ -# Copyright (c) 2012 OpenStack Foundation. -# -# 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. - -from oslo.config import cfg -from six import moves -import testtools -from testtools import matchers - -from neutron.common import exceptions as n_exc -from neutron.db import api as db -from neutron.plugins.linuxbridge.db import l2network_db_v2 as lb_db -from neutron.tests.unit import test_db_plugin as test_plugin -from neutron.tests.unit import testlib_api - -PHYS_NET = 'physnet1' -PHYS_NET_2 = 'physnet2' -VLAN_MIN = 10 -VLAN_MAX = 19 -VLAN_RANGES = {PHYS_NET: [(VLAN_MIN, VLAN_MAX)]} -UPDATED_VLAN_RANGES = {PHYS_NET: [(VLAN_MIN + 5, VLAN_MAX + 5)], - PHYS_NET_2: [(VLAN_MIN + 20, VLAN_MAX + 20)]} - -PLUGIN_NAME = ('neutron.plugins.linuxbridge.' - 'lb_neutron_plugin.LinuxBridgePluginV2') - - -class NetworkStatesTest(testlib_api.SqlTestCase): - def setUp(self): - super(NetworkStatesTest, self).setUp() - lb_db.sync_network_states(VLAN_RANGES) - self.session = db.get_session() - - def test_sync_network_states(self): - self.assertIsNone(lb_db.get_network_state(PHYS_NET, - VLAN_MIN - 1)) - self.assertFalse(lb_db.get_network_state(PHYS_NET, - VLAN_MIN).allocated) - self.assertFalse(lb_db.get_network_state(PHYS_NET, - VLAN_MIN + 1).allocated) - self.assertFalse(lb_db.get_network_state(PHYS_NET, - VLAN_MAX - 1).allocated) - self.assertFalse(lb_db.get_network_state(PHYS_NET, - VLAN_MAX).allocated) - self.assertIsNone(lb_db.get_network_state(PHYS_NET, - VLAN_MAX + 1)) - - lb_db.sync_network_states(UPDATED_VLAN_RANGES) - - self.assertIsNone(lb_db.get_network_state(PHYS_NET, - VLAN_MIN + 5 - 1)) - self.assertFalse(lb_db.get_network_state(PHYS_NET, - VLAN_MIN + 5).allocated) - self.assertFalse(lb_db.get_network_state(PHYS_NET, - VLAN_MIN + 5 + 1).allocated) - self.assertFalse(lb_db.get_network_state(PHYS_NET, - VLAN_MAX + 5 - 1).allocated) - self.assertFalse(lb_db.get_network_state(PHYS_NET, - VLAN_MAX + 5).allocated) - self.assertIsNone(lb_db.get_network_state(PHYS_NET, - VLAN_MAX + 5 + 1)) - - self.assertIsNone(lb_db.get_network_state(PHYS_NET_2, - VLAN_MIN + 20 - 1)) - self.assertFalse(lb_db.get_network_state(PHYS_NET_2, - VLAN_MIN + 20).allocated) - self.assertFalse(lb_db.get_network_state(PHYS_NET_2, - VLAN_MIN + 20 + 1).allocated) - self.assertFalse(lb_db.get_network_state(PHYS_NET_2, - VLAN_MAX + 20 - 1).allocated) - self.assertFalse(lb_db.get_network_state(PHYS_NET_2, - VLAN_MAX + 20).allocated) - self.assertIsNone(lb_db.get_network_state(PHYS_NET_2, - VLAN_MAX + 20 + 1)) - - lb_db.sync_network_states(VLAN_RANGES) - - self.assertIsNone(lb_db.get_network_state(PHYS_NET, - VLAN_MIN - 1)) - self.assertFalse(lb_db.get_network_state(PHYS_NET, - VLAN_MIN).allocated) - self.assertFalse(lb_db.get_network_state(PHYS_NET, - VLAN_MIN + 1).allocated) - self.assertFalse(lb_db.get_network_state(PHYS_NET, - VLAN_MAX - 1).allocated) - self.assertFalse(lb_db.get_network_state(PHYS_NET, - VLAN_MAX).allocated) - self.assertIsNone(lb_db.get_network_state(PHYS_NET, - VLAN_MAX + 1)) - - self.assertIsNone(lb_db.get_network_state(PHYS_NET_2, - VLAN_MIN + 20)) - self.assertIsNone(lb_db.get_network_state(PHYS_NET_2, - VLAN_MAX + 20)) - - def test_network_pool(self): - vlan_ids = set() - for x in moves.xrange(VLAN_MIN, VLAN_MAX + 1): - physical_network, vlan_id = lb_db.reserve_network(self.session) - self.assertEqual(physical_network, PHYS_NET) - self.assertThat(vlan_id, matchers.GreaterThan(VLAN_MIN - 1)) - self.assertThat(vlan_id, matchers.LessThan(VLAN_MAX + 1)) - vlan_ids.add(vlan_id) - - with testtools.ExpectedException(n_exc.NoNetworkAvailable): - physical_network, vlan_id = lb_db.reserve_network(self.session) - - for vlan_id in vlan_ids: - lb_db.release_network(self.session, PHYS_NET, vlan_id, VLAN_RANGES) - - def test_specific_network_inside_pool(self): - vlan_id = VLAN_MIN + 5 - self.assertFalse(lb_db.get_network_state(PHYS_NET, - vlan_id).allocated) - lb_db.reserve_specific_network(self.session, PHYS_NET, vlan_id) - self.assertTrue(lb_db.get_network_state(PHYS_NET, - vlan_id).allocated) - - with testtools.ExpectedException(n_exc.VlanIdInUse): - lb_db.reserve_specific_network(self.session, PHYS_NET, vlan_id) - - lb_db.release_network(self.session, PHYS_NET, vlan_id, VLAN_RANGES) - self.assertFalse(lb_db.get_network_state(PHYS_NET, - vlan_id).allocated) - - def test_specific_network_outside_pool(self): - vlan_id = VLAN_MAX + 5 - self.assertIsNone(lb_db.get_network_state(PHYS_NET, vlan_id)) - lb_db.reserve_specific_network(self.session, PHYS_NET, vlan_id) - self.assertTrue(lb_db.get_network_state(PHYS_NET, - vlan_id).allocated) - - with testtools.ExpectedException(n_exc.VlanIdInUse): - lb_db.reserve_specific_network(self.session, PHYS_NET, vlan_id) - - lb_db.release_network(self.session, PHYS_NET, vlan_id, VLAN_RANGES) - self.assertIsNone(lb_db.get_network_state(PHYS_NET, vlan_id)) - - -class NetworkBindingsTest(test_plugin.NeutronDbPluginV2TestCase): - def setUp(self): - cfg.CONF.set_override('network_vlan_ranges', ['physnet1:1000:2999'], - group='VLANS') - super(NetworkBindingsTest, self).setUp(plugin=PLUGIN_NAME) - self.session = db.get_session() - - def test_add_network_binding(self): - params = {'provider:network_type': 'vlan', - 'provider:physical_network': PHYS_NET, - 'provider:segmentation_id': 1234} - params['arg_list'] = tuple(params.keys()) - with self.network(**params) as network: - TEST_NETWORK_ID = network['network']['id'] - binding = lb_db.get_network_binding(self.session, TEST_NETWORK_ID) - self.assertIsNotNone(binding) - self.assertEqual(binding.network_id, TEST_NETWORK_ID) - self.assertEqual(binding.physical_network, PHYS_NET) - self.assertEqual(binding.vlan_id, 1234) diff --git a/neutron/tests/unit/linuxbridge/test_lb_security_group.py b/neutron/tests/unit/linuxbridge/test_lb_security_group.py deleted file mode 100644 index e930092dbc7..00000000000 --- a/neutron/tests/unit/linuxbridge/test_lb_security_group.py +++ /dev/null @@ -1,97 +0,0 @@ -# Copyright 2012, Nachi Ueno, NTT MCL, Inc. -# All Rights Reserved. -# -# 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. - -import mock - -from neutron.api.v2 import attributes -from neutron.extensions import securitygroup as ext_sg -from neutron.plugins.linuxbridge.db import l2network_db_v2 as lb_db -from neutron.tests.unit import test_extension_security_group as test_sg -from neutron.tests.unit import test_security_groups_rpc as test_sg_rpc - - -PLUGIN_NAME = ('neutron.plugins.linuxbridge.' - 'lb_neutron_plugin.LinuxBridgePluginV2') -NOTIFIER = ('neutron.plugins.linuxbridge.' - 'lb_neutron_plugin.AgentNotifierApi') - - -class LinuxBridgeSecurityGroupsTestCase(test_sg.SecurityGroupDBTestCase): - _plugin_name = PLUGIN_NAME - - def setUp(self, plugin=None): - test_sg_rpc.set_firewall_driver(test_sg_rpc.FIREWALL_IPTABLES_DRIVER) - notifier_p = mock.patch(NOTIFIER) - notifier_cls = notifier_p.start() - self.notifier = mock.Mock() - notifier_cls.return_value = self.notifier - self._attribute_map_bk_ = {} - for item in attributes.RESOURCE_ATTRIBUTE_MAP: - self._attribute_map_bk_[item] = (attributes. - RESOURCE_ATTRIBUTE_MAP[item]. - copy()) - super(LinuxBridgeSecurityGroupsTestCase, self).setUp(PLUGIN_NAME) - - def tearDown(self): - attributes.RESOURCE_ATTRIBUTE_MAP = self._attribute_map_bk_ - super(LinuxBridgeSecurityGroupsTestCase, self).tearDown() - - -class TestLinuxBridgeSecurityGroups(LinuxBridgeSecurityGroupsTestCase, - test_sg.TestSecurityGroups, - test_sg_rpc.SGNotificationTestMixin): - pass - - -class TestLinuxBridgeSecurityGroupsXML(TestLinuxBridgeSecurityGroups): - fmt = 'xml' - - -class TestLinuxBridgeSecurityGroupsDB(LinuxBridgeSecurityGroupsTestCase): - def test_security_group_get_port_from_device(self): - with self.network() as n: - with self.subnet(n): - with self.security_group() as sg: - security_group_id = sg['security_group']['id'] - res = self._create_port(self.fmt, n['network']['id']) - port = self.deserialize(self.fmt, res) - fixed_ips = port['port']['fixed_ips'] - data = {'port': {'fixed_ips': fixed_ips, - 'name': port['port']['name'], - ext_sg.SECURITYGROUPS: - [security_group_id]}} - - req = self.new_update_request('ports', data, - port['port']['id']) - res = self.deserialize(self.fmt, - req.get_response(self.api)) - port_id = res['port']['id'] - device_id = port_id[:8] - port_dict = lb_db.get_port_from_device(device_id) - self.assertEqual(port_id, port_dict['id']) - self.assertEqual([security_group_id], - port_dict[ext_sg.SECURITYGROUPS]) - self.assertEqual([], port_dict['security_group_rules']) - self.assertEqual([fixed_ips[0]['ip_address']], - port_dict['fixed_ips']) - self._delete('ports', port['port']['id']) - - def test_security_group_get_port_from_device_with_no_port(self): - port_dict = lb_db.get_port_from_device('bad_device_id') - self.assertIsNone(port_dict) - - -class TestLinuxBridgeSecurityGroupsDBXML(TestLinuxBridgeSecurityGroupsDB): - fmt = 'xml' diff --git a/neutron/tests/unit/linuxbridge/test_linuxbridge_plugin.py b/neutron/tests/unit/linuxbridge/test_linuxbridge_plugin.py deleted file mode 100644 index 0572336af53..00000000000 --- a/neutron/tests/unit/linuxbridge/test_linuxbridge_plugin.py +++ /dev/null @@ -1,127 +0,0 @@ -# Copyright (c) 2012 OpenStack Foundation. -# -# 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. - -import mock -from oslo.config import cfg - -from neutron.common import constants as q_const -from neutron.extensions import portbindings -from neutron import manager -from neutron.plugins.linuxbridge import lb_neutron_plugin -from neutron.tests.unit import _test_extension_portbindings as test_bindings -from neutron.tests.unit import test_db_plugin as test_plugin -from neutron.tests.unit import test_security_groups_rpc as test_sg_rpc - -PLUGIN_NAME = ('neutron.plugins.linuxbridge.' - 'lb_neutron_plugin.LinuxBridgePluginV2') - - -class LinuxBridgePluginV2TestCase(test_plugin.NeutronDbPluginV2TestCase): - _plugin_name = PLUGIN_NAME - - def setUp(self): - super(LinuxBridgePluginV2TestCase, self).setUp(PLUGIN_NAME) - self.port_create_status = 'DOWN' - - -class TestLinuxBridgeBasicGet(test_plugin.TestBasicGet, - LinuxBridgePluginV2TestCase): - pass - - -class TestLinuxBridgeV2HTTPResponse(test_plugin.TestV2HTTPResponse, - LinuxBridgePluginV2TestCase): - pass - - -class TestLinuxBridgeNetworksV2(test_plugin.TestNetworksV2, - LinuxBridgePluginV2TestCase): - pass - - -class TestLinuxBridgePortsV2(test_plugin.TestPortsV2, - LinuxBridgePluginV2TestCase): - - def test_update_port_status_build(self): - with self.port() as port: - self.assertEqual(port['port']['status'], 'DOWN') - self.assertEqual(self.port_create_status, 'DOWN') - - -class TestLinuxBridgePortBinding(LinuxBridgePluginV2TestCase, - test_bindings.PortBindingsTestCase): - VIF_TYPE = portbindings.VIF_TYPE_BRIDGE - HAS_PORT_FILTER = True - ENABLE_SG = True - FIREWALL_DRIVER = test_sg_rpc.FIREWALL_IPTABLES_DRIVER - - def setUp(self): - test_sg_rpc.set_firewall_driver(self.FIREWALL_DRIVER) - cfg.CONF.set_override( - 'enable_security_group', self.ENABLE_SG, - group='SECURITYGROUP') - super(TestLinuxBridgePortBinding, self).setUp() - - -class TestLinuxBridgePortBindingNoSG(TestLinuxBridgePortBinding): - HAS_PORT_FILTER = False - ENABLE_SG = False - FIREWALL_DRIVER = test_sg_rpc.FIREWALL_NOOP_DRIVER - - -class TestLinuxBridgePortBindingHost( - LinuxBridgePluginV2TestCase, - test_bindings.PortBindingsHostTestCaseMixin): - pass - - -class TestLinuxBridgePluginRpcCallbacks(test_plugin.NeutronDbPluginV2TestCase): - def setUp(self): - super(TestLinuxBridgePluginRpcCallbacks, self).setUp(PLUGIN_NAME) - self.callbacks = lb_neutron_plugin.LinuxBridgeRpcCallbacks() - - def test_update_device_down(self): - with mock.patch.object(manager.NeutronManager, "get_plugin") as gp: - plugin = gp.return_value - plugin.get_port_from_device.return_value = None - self.assertEqual( - self.callbacks.update_device_down("fake_context", - agent_id="123", - device="device", - host="host"), - {'device': 'device', 'exists': False} - ) - plugin.get_port_from_device.return_value = { - 'id': 'fakeid', - 'status': q_const.PORT_STATUS_ACTIVE} - self.assertEqual( - self.callbacks.update_device_down("fake_context", - agent_id="123", - device="device", - host="host"), - {'device': 'device', 'exists': True} - ) - - def test_update_device_up(self): - with mock.patch.object(manager.NeutronManager, "get_plugin") as gp: - plugin = gp.return_value - plugin.get_port_from_device.return_value = { - 'id': 'fakeid', - 'status': q_const.PORT_STATUS_ACTIVE} - self.callbacks.update_device_up("fake_context", - agent_id="123", - device="device", - host="host") - plugin.get_port_from_device.assert_called_once_with('device') diff --git a/neutron/tests/unit/linuxbridge/test_rpcapi.py b/neutron/tests/unit/linuxbridge/test_rpcapi.py deleted file mode 100644 index ee2972f67e6..00000000000 --- a/neutron/tests/unit/linuxbridge/test_rpcapi.py +++ /dev/null @@ -1,143 +0,0 @@ -# Copyright 2012, Red Hat, 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. - -""" -Unit Tests for linuxbridge rpc -""" - -import fixtures -from oslo.config import cfg - -from neutron.agent import rpc as agent_rpc -from neutron.common import topics -from neutron.openstack.common import context -from neutron.plugins.linuxbridge import lb_neutron_plugin as plb -from neutron.tests import base - - -class rpcApiTestCase(base.BaseTestCase): - def _test_lb_api(self, rpcapi, topic, method, rpc_method, - expected_msg=None, **kwargs): - ctxt = context.RequestContext('fake_user', 'fake_project') - expected_retval = 'foo' if method == 'call' else None - expected_kwargs = {} - if topic: - expected_kwargs['topic'] = topic - if 'version' in kwargs: - expected_kwargs['version'] = kwargs.pop('version') - if not expected_msg: - expected_msg = rpcapi.make_msg(method, **kwargs) - if rpc_method == 'cast' and method == 'run_instance': - kwargs['call'] = False - - self.fake_args = None - self.fake_kwargs = None - - def _fake_rpc_method(*args, **kwargs): - self.fake_args = args - self.fake_kwargs = kwargs - if expected_retval: - return expected_retval - - self.useFixture(fixtures.MonkeyPatch( - 'neutron.common.rpc.RpcProxy.' + rpc_method, - _fake_rpc_method)) - - retval = getattr(rpcapi, method)(ctxt, **kwargs) - - self.assertEqual(expected_retval, retval) - expected_args = [ctxt, expected_msg] - - # skip the first argument which is 'self' - for arg, expected_arg in zip(self.fake_args[1:], expected_args): - self.assertEqual(expected_arg, arg) - self.assertEqual(expected_kwargs, self.fake_kwargs) - - def test_delete_network(self): - rpcapi = plb.AgentNotifierApi(topics.AGENT) - self._test_lb_api(rpcapi, - topics.get_topic_name(topics.AGENT, - topics.NETWORK, - topics.DELETE), - 'network_delete', rpc_method='fanout_cast', - network_id='fake_request_spec') - - def test_port_update(self): - cfg.CONF.set_override('rpc_support_old_agents', False, 'AGENT') - rpcapi = plb.AgentNotifierApi(topics.AGENT) - expected_msg = rpcapi.make_msg('port_update', - port='fake_port', - network_type='vlan', - physical_network='fake_net', - segmentation_id='fake_vlan_id') - self._test_lb_api(rpcapi, - topics.get_topic_name(topics.AGENT, - topics.PORT, - topics.UPDATE), - 'port_update', rpc_method='fanout_cast', - expected_msg=expected_msg, - port='fake_port', - physical_network='fake_net', - vlan_id='fake_vlan_id') - - def test_port_update_old_agent(self): - cfg.CONF.set_override('rpc_support_old_agents', True, 'AGENT') - rpcapi = plb.AgentNotifierApi(topics.AGENT) - expected_msg = rpcapi.make_msg('port_update', - port='fake_port', - network_type='vlan', - physical_network='fake_net', - segmentation_id='fake_vlan_id', - vlan_id='fake_vlan_id') - self._test_lb_api(rpcapi, - topics.get_topic_name(topics.AGENT, - topics.PORT, - topics.UPDATE), - 'port_update', rpc_method='fanout_cast', - expected_msg=expected_msg, - port='fake_port', - physical_network='fake_net', - vlan_id='fake_vlan_id') - - def test_device_details(self): - rpcapi = agent_rpc.PluginApi(topics.PLUGIN) - self._test_lb_api(rpcapi, None, - 'get_device_details', rpc_method='call', - device='fake_device', - agent_id='fake_agent_id', - host='fake_host') - - def test_devices_details_list(self): - rpcapi = agent_rpc.PluginApi(topics.PLUGIN) - self._test_lb_api(rpcapi, None, - 'get_devices_details_list', rpc_method='call', - devices=['fake_device1', 'fake_device2'], - agent_id='fake_agent_id', host='fake_host', - version='1.3') - - def test_update_device_down(self): - rpcapi = agent_rpc.PluginApi(topics.PLUGIN) - self._test_lb_api(rpcapi, None, - 'update_device_down', rpc_method='call', - device='fake_device', - agent_id='fake_agent_id', - host='fake_host') - - def test_update_device_up(self): - rpcapi = agent_rpc.PluginApi(topics.PLUGIN) - self._test_lb_api(rpcapi, None, - 'update_device_up', rpc_method='call', - device='fake_device', - agent_id='fake_agent_id', - host='fake_host') diff --git a/neutron/tests/unit/test_quota_ext.py b/neutron/tests/unit/test_quota_ext.py index 262fb044115..ac46711a250 100644 --- a/neutron/tests/unit/test_quota_ext.py +++ b/neutron/tests/unit/test_quota_ext.py @@ -32,8 +32,7 @@ from neutron.tests.unit import test_api_v2 from neutron.tests.unit import testlib_api from neutron.tests.unit import testlib_plugin -TARGET_PLUGIN = ('neutron.plugins.linuxbridge.lb_neutron_plugin' - '.LinuxBridgePluginV2') +TARGET_PLUGIN = 'neutron.plugins.ml2.plugin.Ml2Plugin' _get_path = test_api_v2._get_path diff --git a/setup.cfg b/setup.cfg index 4f0697c80e7..38965899257 100644 --- a/setup.cfg +++ b/setup.cfg @@ -133,7 +133,6 @@ neutron.core_plugins = embrane = neutron.plugins.embrane.plugins.embrane_ml2_plugin:EmbraneMl2Plugin hyperv = neutron.plugins.hyperv.hyperv_neutron_plugin:HyperVNeutronPlugin ibm = neutron.plugins.ibm.sdnve_neutron_plugin:SdnvePluginV2 - linuxbridge = neutron.plugins.linuxbridge.lb_neutron_plugin:LinuxBridgePluginV2 midonet = neutron.plugins.midonet.plugin:MidonetPluginV2 ml2 = neutron.plugins.ml2.plugin:Ml2Plugin mlnx = neutron.plugins.mlnx.mlnx_plugin:MellanoxEswitchPlugin From 239b2d94339574f63afe0c6df120bfea2974ef7f Mon Sep 17 00:00:00 2001 From: Ed Bak Date: Mon, 29 Sep 2014 14:15:52 -0600 Subject: [PATCH 054/128] Don't fail when trying to unbind a router If a router is already unbound from an l3 agent, don't fail. Log the condition and go on. This is harmless since it can happen due to a delete race condition between multiple neutron-server processes. One delete request can determine that it needs to unbind the router. A second process may also determine that it needs to unbind the router. The exception thrown will result in a port delete failure and cause nova to mark a deleted instance as ERROR. Change-Id: Ia667ea77a0a483deff8acfdcf90ca84cd3adf44f Closes-Bug: 1367892 --- neutron/plugins/ml2/plugin.py | 12 ++++++++--- neutron/tests/unit/ml2/test_ml2_plugin.py | 25 +++++++++++++++++++++++ 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/neutron/plugins/ml2/plugin.py b/neutron/plugins/ml2/plugin.py index 422cbff86ed..d744f19fe1f 100644 --- a/neutron/plugins/ml2/plugin.py +++ b/neutron/plugins/ml2/plugin.py @@ -45,6 +45,7 @@ from neutron.db import quota_db # noqa from neutron.db import securitygroups_rpc_base as sg_db_rpc from neutron.extensions import allowedaddresspairs as addr_pair from neutron.extensions import extra_dhcp_opt as edo_ext +from neutron.extensions import l3agentscheduler from neutron.extensions import portbindings from neutron.extensions import providernet as provider from neutron import manager @@ -1019,9 +1020,14 @@ class Ml2Plugin(db_base_plugin_v2.NeutronDbPluginV2, if l3plugin: l3plugin.notify_routers_updated(context, router_ids) for router in removed_routers: - l3plugin.remove_router_from_l3_agent( - context, router['agent_id'], router['router_id']) - + try: + l3plugin.remove_router_from_l3_agent( + context, router['agent_id'], router['router_id']) + except l3agentscheduler.RouterNotHostedByL3Agent: + # router may have been removed by another process + LOG.debug("Router %(id)s not hosted by L3 agent %(agent)s", + {'id': router['router_id'], + 'agent': router['agent_id']}) try: # for both normal and DVR Interface ports, only one invocation of # delete_port_postcommit. We use gather/scatter technique for DVR diff --git a/neutron/tests/unit/ml2/test_ml2_plugin.py b/neutron/tests/unit/ml2/test_ml2_plugin.py index 5cb6df44bcf..0d43145d2c9 100644 --- a/neutron/tests/unit/ml2/test_ml2_plugin.py +++ b/neutron/tests/unit/ml2/test_ml2_plugin.py @@ -25,6 +25,7 @@ from neutron.common import utils from neutron import context from neutron.db import db_base_plugin_v2 as base_plugin from neutron.extensions import external_net as external_net +from neutron.extensions import l3agentscheduler from neutron.extensions import multiprovidernet as mpnet from neutron.extensions import portbindings from neutron.extensions import providernet as pnet @@ -267,6 +268,30 @@ class TestMl2DvrPortsV2(TestMl2PortsV2): self._test_delete_dvr_serviced_port(device_owner='compute:None', floating_ip=True) + def test_delete_vm_port_namespace_already_deleted(self): + ns_to_delete = {'host': 'myhost', + 'agent_id': 'vm_l3_agent', + 'router_id': 'my_router'} + + with contextlib.nested( + mock.patch.object(manager.NeutronManager, + 'get_service_plugins', + return_value=self.service_plugins), + self.port(do_delete=False, + device_owner='compute:None'), + mock.patch.object(self.l3plugin, 'dvr_deletens_if_no_port', + return_value=[ns_to_delete]), + mock.patch.object(self.l3plugin, 'remove_router_from_l3_agent', + side_effect=l3agentscheduler.RouterNotHostedByL3Agent( + router_id=ns_to_delete['router_id'], + agent_id=ns_to_delete['agent_id'])) + ) as (get_service_plugin, port, dvr_delns_ifno_port, + remove_router_from_l3_agent): + + self.plugin.delete_port(self.context, port['port']['id']) + remove_router_from_l3_agent.assert_called_once_with(self.context, + ns_to_delete['agent_id'], ns_to_delete['router_id']) + def test_delete_lbaas_vip_port(self): self._test_delete_dvr_serviced_port( device_owner=constants.DEVICE_OWNER_LOADBALANCER) From 20dbbab61c1159a3dc6ef838ec65b04f7e9cf560 Mon Sep 17 00:00:00 2001 From: Miguel Angel Ajo Date: Wed, 1 Oct 2014 15:16:19 +0200 Subject: [PATCH 055/128] Fix pid file location to avoid I->J changes that break metadata Changes in commit 7f8ae630b87392193974dd9cb198c1165cdec93b moved pid files handled by agent/linux/external_process.py from $state_path/external/.pid to $state_path/external//pid that breaks the neutron-ns-metadata-proxy respawn after upgrades becase the l3 or dhcp agent can't find the old pid file so they try to start a new neutron-ns-metadata-proxy which won't succeed, because the old one is holding the port already. Closes-Bug: #1376128 Change-Id: Id166ec8e508aaab8eea35d89d010a5a0b7fdba1f --- neutron/agent/linux/utils.py | 24 +++++++++---------- .../tests/unit/test_linux_external_process.py | 8 +++---- 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/neutron/agent/linux/utils.py b/neutron/agent/linux/utils.py index e0a66f843ca..8243468919a 100644 --- a/neutron/agent/linux/utils.py +++ b/neutron/agent/linux/utils.py @@ -14,9 +14,9 @@ # under the License. import fcntl +import glob import os import shlex -import shutil import socket import struct import tempfile @@ -134,19 +134,19 @@ def find_child_pids(pid): return [x.strip() for x in raw_pids.split('\n') if x.strip()] -def _get_conf_dir(cfg_root, uuid, ensure_conf_dir): - confs_dir = os.path.abspath(os.path.normpath(cfg_root)) - conf_dir = os.path.join(confs_dir, uuid) +def _get_conf_base(cfg_root, uuid, ensure_conf_dir): + conf_dir = os.path.abspath(os.path.normpath(cfg_root)) + conf_base = os.path.join(conf_dir, uuid) if ensure_conf_dir: if not os.path.isdir(conf_dir): os.makedirs(conf_dir, 0o755) - return conf_dir + return conf_base def get_conf_file_name(cfg_root, uuid, cfg_file, ensure_conf_dir=False): """Returns the file name for a given kind of config file.""" - conf_dir = _get_conf_dir(cfg_root, uuid, ensure_conf_dir) - return os.path.join(conf_dir, cfg_file) + conf_base = _get_conf_base(cfg_root, uuid, ensure_conf_dir) + return "%s.%s" % (conf_base, cfg_file) def get_value_from_conf_file(cfg_root, uuid, cfg_file, converter=None): @@ -168,15 +168,13 @@ def get_value_from_conf_file(cfg_root, uuid, cfg_file, converter=None): def remove_conf_files(cfg_root, uuid): - conf_dir = _get_conf_dir(cfg_root, uuid, False) - shutil.rmtree(conf_dir, ignore_errors=True) + conf_base = _get_conf_base(cfg_root, uuid, False) + for file_path in glob.iglob("%s.*" % conf_base): + os.unlink(file_path) def remove_conf_file(cfg_root, uuid, cfg_file): - """Remove a config file. Remove the directory if this is the last file.""" + """Remove a config file.""" conf_file = get_conf_file_name(cfg_root, uuid, cfg_file) if os.path.exists(conf_file): os.unlink(conf_file) - conf_dir = _get_conf_dir(cfg_root, uuid, False) - if not os.listdir(conf_dir): - shutil.rmtree(conf_dir, ignore_errors=True) diff --git a/neutron/tests/unit/test_linux_external_process.py b/neutron/tests/unit/test_linux_external_process.py index 88f4bc075bc..b16b681e930 100644 --- a/neutron/tests/unit/test_linux_external_process.py +++ b/neutron/tests/unit/test_linux_external_process.py @@ -123,7 +123,7 @@ class TestProcessManager(base.BaseTestCase): isdir.return_value = True manager = ep.ProcessManager(self.conf, 'uuid') retval = manager.get_pid_file_name(ensure_pids_dir=True) - self.assertEqual(retval, '/var/path/uuid/pid') + self.assertEqual(retval, '/var/path/uuid.pid') def test_get_pid_file_name_not_existing(self): with mock.patch.object(ep.utils.os.path, 'isdir') as isdir: @@ -131,15 +131,15 @@ class TestProcessManager(base.BaseTestCase): isdir.return_value = False manager = ep.ProcessManager(self.conf, 'uuid') retval = manager.get_pid_file_name(ensure_pids_dir=True) - self.assertEqual(retval, '/var/path/uuid/pid') - makedirs.assert_called_once_with('/var/path/uuid', 0o755) + self.assertEqual(retval, '/var/path/uuid.pid') + makedirs.assert_called_once_with('/var/path', 0o755) def test_get_pid_file_name_default(self): with mock.patch.object(ep.utils.os.path, 'isdir') as isdir: isdir.return_value = True manager = ep.ProcessManager(self.conf, 'uuid') retval = manager.get_pid_file_name(ensure_pids_dir=False) - self.assertEqual(retval, '/var/path/uuid/pid') + self.assertEqual(retval, '/var/path/uuid.pid') self.assertFalse(isdir.called) def test_pid(self): From 205162f58050fcb94db53cd51b674d2093dfe700 Mon Sep 17 00:00:00 2001 From: Mark McClain Date: Wed, 24 Sep 2014 04:00:54 +0000 Subject: [PATCH 056/128] remove openvswitch plugin This changeset removes the openvswitch plugin, but retains the agent for ML2 The database models were not removed since operators will need to migrate the data. Change-Id: I8b519cb2bbebcbec2c78bb0ec9325716970736cf Closes-Bug: 1323729 --- neutron/plugins/openvswitch/README | 8 +- neutron/plugins/openvswitch/ovs_db_v2.py | 396 ----------- .../plugins/openvswitch/ovs_neutron_plugin.py | 651 ------------------ .../tests/unit/nec/test_agent_scheduler.py | 2 + .../unit/openvswitch/test_agent_scheduler.py | 30 +- .../openvswitch/test_openvswitch_plugin.py | 159 ----- neutron/tests/unit/openvswitch/test_ovs_db.py | 315 --------- .../openvswitch/test_ovs_neutron_agent.py | 3 +- .../tests/unit/openvswitch/test_ovs_rpcapi.py | 134 ---- .../openvswitch/test_ovs_security_group.py | 101 --- .../loadbalancer/test_agent_scheduler.py | 3 +- .../unit/test_extension_extended_attribute.py | 4 +- neutron/tests/unit/test_l3_plugin.py | 8 + 13 files changed, 33 insertions(+), 1781 deletions(-) delete mode 100644 neutron/plugins/openvswitch/ovs_db_v2.py delete mode 100644 neutron/plugins/openvswitch/ovs_neutron_plugin.py delete mode 100644 neutron/tests/unit/openvswitch/test_openvswitch_plugin.py delete mode 100644 neutron/tests/unit/openvswitch/test_ovs_db.py delete mode 100644 neutron/tests/unit/openvswitch/test_ovs_rpcapi.py delete mode 100644 neutron/tests/unit/openvswitch/test_ovs_security_group.py diff --git a/neutron/plugins/openvswitch/README b/neutron/plugins/openvswitch/README index b8991ad0a27..005aca36fdd 100644 --- a/neutron/plugins/openvswitch/README +++ b/neutron/plugins/openvswitch/README @@ -1,6 +1,4 @@ -The Open vSwitch (OVS) Neutron plugin is a simple plugin to manage OVS -features using a local agent running on each hypervisor. +The Open vSwitch (OVS) Neutron plugin has been removed and replaced by ML2. You +must run the migration manually to upgrade to Juno. -For details on how to configure and use the plugin, see: - -http://openvswitch.org/openstack/documentation/ +See neutron/db/migration/migrate_to_ml2.py diff --git a/neutron/plugins/openvswitch/ovs_db_v2.py b/neutron/plugins/openvswitch/ovs_db_v2.py deleted file mode 100644 index c9820ce3bb0..00000000000 --- a/neutron/plugins/openvswitch/ovs_db_v2.py +++ /dev/null @@ -1,396 +0,0 @@ -# Copyright 2011 VMware, Inc. -# All Rights Reserved. -# -# 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. - -from oslo.db import exception as db_exc -from six import moves -from sqlalchemy import func -from sqlalchemy.orm import exc - -from neutron.common import exceptions as n_exc -import neutron.db.api as db -from neutron.db import models_v2 -from neutron.db import securitygroups_db as sg_db -from neutron.extensions import securitygroup as ext_sg -from neutron import manager -from neutron.openstack.common import log as logging -from neutron.plugins.openvswitch.common import constants -from neutron.plugins.openvswitch import ovs_models_v2 - -LOG = logging.getLogger(__name__) - - -def get_network_binding(session, network_id): - session = session or db.get_session() - try: - binding = (session.query(ovs_models_v2.NetworkBinding). - filter_by(network_id=network_id). - one()) - return binding - except exc.NoResultFound: - return - - -def add_network_binding(session, network_id, network_type, - physical_network, segmentation_id): - with session.begin(subtransactions=True): - binding = ovs_models_v2.NetworkBinding(network_id, network_type, - physical_network, - segmentation_id) - session.add(binding) - return binding - - -def sync_vlan_allocations(network_vlan_ranges): - """Synchronize vlan_allocations table with configured VLAN ranges.""" - - session = db.get_session() - with session.begin(): - # get existing allocations for all physical networks - allocations = dict() - allocs = (session.query(ovs_models_v2.VlanAllocation). - all()) - for alloc in allocs: - if alloc.physical_network not in allocations: - allocations[alloc.physical_network] = set() - allocations[alloc.physical_network].add(alloc) - - # process vlan ranges for each configured physical network - for physical_network, vlan_ranges in network_vlan_ranges.iteritems(): - # determine current configured allocatable vlans for this - # physical network - vlan_ids = set() - for vlan_range in vlan_ranges: - vlan_ids |= set(moves.xrange(vlan_range[0], vlan_range[1] + 1)) - - # remove from table unallocated vlans not currently allocatable - if physical_network in allocations: - for alloc in allocations[physical_network]: - try: - # see if vlan is allocatable - vlan_ids.remove(alloc.vlan_id) - except KeyError: - # it's not allocatable, so check if its allocated - if not alloc.allocated: - # it's not, so remove it from table - LOG.debug(_("Removing vlan %(vlan_id)s on " - "physical network " - "%(physical_network)s from pool"), - {'vlan_id': alloc.vlan_id, - 'physical_network': physical_network}) - session.delete(alloc) - del allocations[physical_network] - - # add missing allocatable vlans to table - for vlan_id in sorted(vlan_ids): - alloc = ovs_models_v2.VlanAllocation(physical_network, vlan_id) - session.add(alloc) - - # remove from table unallocated vlans for any unconfigured physical - # networks - for allocs in allocations.itervalues(): - for alloc in allocs: - if not alloc.allocated: - LOG.debug(_("Removing vlan %(vlan_id)s on physical " - "network %(physical_network)s from pool"), - {'vlan_id': alloc.vlan_id, - 'physical_network': alloc.physical_network}) - session.delete(alloc) - - -def get_vlan_allocation(physical_network, vlan_id): - session = db.get_session() - try: - alloc = (session.query(ovs_models_v2.VlanAllocation). - filter_by(physical_network=physical_network, - vlan_id=vlan_id). - one()) - return alloc - except exc.NoResultFound: - return - - -def reserve_vlan(session): - with session.begin(subtransactions=True): - alloc = (session.query(ovs_models_v2.VlanAllocation). - filter_by(allocated=False). - with_lockmode('update'). - first()) - if alloc: - LOG.debug(_("Reserving vlan %(vlan_id)s on physical network " - "%(physical_network)s from pool"), - {'vlan_id': alloc.vlan_id, - 'physical_network': alloc.physical_network}) - alloc.allocated = True - return (alloc.physical_network, alloc.vlan_id) - raise n_exc.NoNetworkAvailable() - - -def reserve_specific_vlan(session, physical_network, vlan_id): - with session.begin(subtransactions=True): - try: - alloc = (session.query(ovs_models_v2.VlanAllocation). - filter_by(physical_network=physical_network, - vlan_id=vlan_id). - with_lockmode('update'). - one()) - if alloc.allocated: - if vlan_id == constants.FLAT_VLAN_ID: - raise n_exc.FlatNetworkInUse( - physical_network=physical_network) - else: - raise n_exc.VlanIdInUse(vlan_id=vlan_id, - physical_network=physical_network) - LOG.debug(_("Reserving specific vlan %(vlan_id)s on physical " - "network %(physical_network)s from pool"), - {'vlan_id': vlan_id, - 'physical_network': physical_network}) - alloc.allocated = True - except exc.NoResultFound: - LOG.debug(_("Reserving specific vlan %(vlan_id)s on physical " - "network %(physical_network)s outside pool"), - {'vlan_id': vlan_id, - 'physical_network': physical_network}) - alloc = ovs_models_v2.VlanAllocation(physical_network, vlan_id) - alloc.allocated = True - session.add(alloc) - - -def release_vlan(session, physical_network, vlan_id, network_vlan_ranges): - with session.begin(subtransactions=True): - try: - alloc = (session.query(ovs_models_v2.VlanAllocation). - filter_by(physical_network=physical_network, - vlan_id=vlan_id). - with_lockmode('update'). - one()) - alloc.allocated = False - inside = False - for vlan_range in network_vlan_ranges.get(physical_network, []): - if vlan_id >= vlan_range[0] and vlan_id <= vlan_range[1]: - inside = True - break - if not inside: - session.delete(alloc) - LOG.debug(_("Releasing vlan %(vlan_id)s on physical network " - "%(physical_network)s outside pool"), - {'vlan_id': vlan_id, - 'physical_network': physical_network}) - else: - LOG.debug(_("Releasing vlan %(vlan_id)s on physical network " - "%(physical_network)s to pool"), - {'vlan_id': vlan_id, - 'physical_network': physical_network}) - except exc.NoResultFound: - LOG.warning(_("vlan_id %(vlan_id)s on physical network " - "%(physical_network)s not found"), - {'vlan_id': vlan_id, - 'physical_network': physical_network}) - - -def sync_tunnel_allocations(tunnel_id_ranges): - """Synchronize tunnel_allocations table with configured tunnel ranges.""" - - # determine current configured allocatable tunnels - tunnel_ids = set() - for tunnel_id_range in tunnel_id_ranges: - tun_min, tun_max = tunnel_id_range - if tun_max + 1 - tun_min > 1000000: - LOG.error(_("Skipping unreasonable tunnel ID range " - "%(tun_min)s:%(tun_max)s"), - {'tun_min': tun_min, 'tun_max': tun_max}) - else: - tunnel_ids |= set(moves.xrange(tun_min, tun_max + 1)) - - session = db.get_session() - with session.begin(): - # remove from table unallocated tunnels not currently allocatable - allocs = (session.query(ovs_models_v2.TunnelAllocation). - all()) - for alloc in allocs: - try: - # see if tunnel is allocatable - tunnel_ids.remove(alloc.tunnel_id) - except KeyError: - # it's not allocatable, so check if its allocated - if not alloc.allocated: - # it's not, so remove it from table - LOG.debug(_("Removing tunnel %s from pool"), - alloc.tunnel_id) - session.delete(alloc) - - # add missing allocatable tunnels to table - for tunnel_id in sorted(tunnel_ids): - alloc = ovs_models_v2.TunnelAllocation(tunnel_id) - session.add(alloc) - - -def get_tunnel_allocation(tunnel_id): - session = db.get_session() - try: - alloc = (session.query(ovs_models_v2.TunnelAllocation). - filter_by(tunnel_id=tunnel_id). - with_lockmode('update'). - one()) - return alloc - except exc.NoResultFound: - return - - -def reserve_tunnel(session): - with session.begin(subtransactions=True): - alloc = (session.query(ovs_models_v2.TunnelAllocation). - filter_by(allocated=False). - with_lockmode('update'). - first()) - if alloc: - LOG.debug(_("Reserving tunnel %s from pool"), alloc.tunnel_id) - alloc.allocated = True - return alloc.tunnel_id - raise n_exc.NoNetworkAvailable() - - -def reserve_specific_tunnel(session, tunnel_id): - with session.begin(subtransactions=True): - try: - alloc = (session.query(ovs_models_v2.TunnelAllocation). - filter_by(tunnel_id=tunnel_id). - with_lockmode('update'). - one()) - if alloc.allocated: - raise n_exc.TunnelIdInUse(tunnel_id=tunnel_id) - LOG.debug(_("Reserving specific tunnel %s from pool"), tunnel_id) - alloc.allocated = True - except exc.NoResultFound: - LOG.debug(_("Reserving specific tunnel %s outside pool"), - tunnel_id) - alloc = ovs_models_v2.TunnelAllocation(tunnel_id) - alloc.allocated = True - session.add(alloc) - - -def release_tunnel(session, tunnel_id, tunnel_id_ranges): - with session.begin(subtransactions=True): - try: - alloc = (session.query(ovs_models_v2.TunnelAllocation). - filter_by(tunnel_id=tunnel_id). - with_lockmode('update'). - one()) - alloc.allocated = False - inside = False - for tunnel_id_range in tunnel_id_ranges: - if (tunnel_id >= tunnel_id_range[0] - and tunnel_id <= tunnel_id_range[1]): - inside = True - break - if not inside: - session.delete(alloc) - LOG.debug(_("Releasing tunnel %s outside pool"), tunnel_id) - else: - LOG.debug(_("Releasing tunnel %s to pool"), tunnel_id) - except exc.NoResultFound: - LOG.warning(_("tunnel_id %s not found"), tunnel_id) - - -def get_port(port_id): - session = db.get_session() - try: - port = session.query(models_v2.Port).filter_by(id=port_id).one() - except exc.NoResultFound: - port = None - return port - - -def get_port_from_device(port_id): - """Get port from database.""" - LOG.debug(_("get_port_with_securitygroups() called:port_id=%s"), port_id) - session = db.get_session() - sg_binding_port = sg_db.SecurityGroupPortBinding.port_id - - query = session.query(models_v2.Port, - sg_db.SecurityGroupPortBinding.security_group_id) - query = query.outerjoin(sg_db.SecurityGroupPortBinding, - models_v2.Port.id == sg_binding_port) - query = query.filter(models_v2.Port.id == port_id) - port_and_sgs = query.all() - if not port_and_sgs: - return None - port = port_and_sgs[0][0] - plugin = manager.NeutronManager.get_plugin() - port_dict = plugin._make_port_dict(port) - port_dict[ext_sg.SECURITYGROUPS] = [ - sg_id for port_, sg_id in port_and_sgs if sg_id] - port_dict['security_group_rules'] = [] - port_dict['security_group_source_groups'] = [] - port_dict['fixed_ips'] = [ip['ip_address'] - for ip in port['fixed_ips']] - return port_dict - - -def set_port_status(port_id, status): - session = db.get_session() - try: - port = session.query(models_v2.Port).filter_by(id=port_id).one() - port['status'] = status - session.merge(port) - session.flush() - except exc.NoResultFound: - raise n_exc.PortNotFound(port_id=port_id) - - -def get_tunnel_endpoints(): - session = db.get_session() - - tunnels = session.query(ovs_models_v2.TunnelEndpoint) - return [{'id': tunnel.id, - 'ip_address': tunnel.ip_address} for tunnel in tunnels] - - -def _generate_tunnel_id(session): - max_tunnel_id = session.query( - func.max(ovs_models_v2.TunnelEndpoint.id)).scalar() or 0 - return max_tunnel_id + 1 - - -def add_tunnel_endpoint(ip, max_retries=10): - """Return the endpoint of the given IP address or generate a new one.""" - - # NOTE(rpodolyaka): generation of a new tunnel endpoint must be put into a - # repeatedly executed transactional block to ensure it - # doesn't conflict with any other concurrently executed - # DB transactions in spite of the specified transactions - # isolation level value - for i in moves.xrange(max_retries): - LOG.debug(_('Adding a tunnel endpoint for %s'), ip) - try: - session = db.get_session() - with session.begin(subtransactions=True): - tunnel = (session.query(ovs_models_v2.TunnelEndpoint). - filter_by(ip_address=ip).with_lockmode('update'). - first()) - - if tunnel is None: - tunnel_id = _generate_tunnel_id(session) - tunnel = ovs_models_v2.TunnelEndpoint(ip, tunnel_id) - session.add(tunnel) - - return tunnel - except db_exc.DBDuplicateEntry: - # a concurrent transaction has been committed, try again - LOG.debug(_('Adding a tunnel endpoint failed due to a concurrent' - 'transaction had been committed (%s attempts left)'), - max_retries - (i + 1)) - - raise n_exc.NeutronException( - message=_('Unable to generate a new tunnel id')) diff --git a/neutron/plugins/openvswitch/ovs_neutron_plugin.py b/neutron/plugins/openvswitch/ovs_neutron_plugin.py deleted file mode 100644 index 7dad9b66d9a..00000000000 --- a/neutron/plugins/openvswitch/ovs_neutron_plugin.py +++ /dev/null @@ -1,651 +0,0 @@ -# Copyright 2011 VMware, Inc. -# All Rights Reserved. -# -# 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. - -import sys - -from oslo.config import cfg - -from neutron.agent import securitygroups_rpc as sg_rpc -from neutron.api.rpc.agentnotifiers import dhcp_rpc_agent_api -from neutron.api.rpc.agentnotifiers import l3_rpc_agent_api -from neutron.api.rpc.handlers import dhcp_rpc -from neutron.api.rpc.handlers import l3_rpc -from neutron.api.rpc.handlers import securitygroups_rpc -from neutron.api.v2 import attributes -from neutron.common import constants as q_const -from neutron.common import exceptions as n_exc -from neutron.common import rpc as n_rpc -from neutron.common import topics -from neutron.common import utils -from neutron.db import agents_db -from neutron.db import agentschedulers_db -from neutron.db import allowedaddresspairs_db as addr_pair_db -from neutron.db import db_base_plugin_v2 -from neutron.db import external_net_db -from neutron.db import extradhcpopt_db -from neutron.db import extraroute_db -from neutron.db import l3_agentschedulers_db -from neutron.db import l3_gwmode_db -from neutron.db import portbindings_db -from neutron.db import quota_db # noqa -from neutron.db import securitygroups_rpc_base as sg_db_rpc -from neutron.extensions import allowedaddresspairs as addr_pair -from neutron.extensions import extra_dhcp_opt as edo_ext -from neutron.extensions import portbindings -from neutron.extensions import providernet as provider -from neutron.extensions import securitygroup as ext_sg -from neutron import manager -from neutron.openstack.common import importutils -from neutron.openstack.common import log as logging -from neutron.plugins.common import constants as svc_constants -from neutron.plugins.common import utils as plugin_utils -from neutron.plugins.openvswitch.common import config # noqa -from neutron.plugins.openvswitch.common import constants -from neutron.plugins.openvswitch import ovs_db_v2 - - -LOG = logging.getLogger(__name__) - - -class OVSRpcCallbacks(n_rpc.RpcCallback): - - # history - # 1.0 Initial version - # 1.1 Support Security Group RPC - # 1.2 Support get_devices_details_list - - RPC_API_VERSION = '1.2' - - def __init__(self, notifier, tunnel_type): - super(OVSRpcCallbacks, self).__init__() - self.notifier = notifier - self.tunnel_type = tunnel_type - - def get_device_details(self, rpc_context, **kwargs): - """Agent requests device details.""" - agent_id = kwargs.get('agent_id') - device = kwargs.get('device') - LOG.debug(_("Device %(device)s details requested from %(agent_id)s"), - {'device': device, 'agent_id': agent_id}) - port = ovs_db_v2.get_port(device) - if port: - binding = ovs_db_v2.get_network_binding(None, port['network_id']) - entry = {'device': device, - 'network_id': port['network_id'], - 'port_id': port['id'], - 'admin_state_up': port['admin_state_up'], - 'network_type': binding.network_type, - 'segmentation_id': binding.segmentation_id, - 'physical_network': binding.physical_network} - new_status = (q_const.PORT_STATUS_ACTIVE if port['admin_state_up'] - else q_const.PORT_STATUS_DOWN) - if port['status'] != new_status: - ovs_db_v2.set_port_status(port['id'], new_status) - else: - entry = {'device': device} - LOG.debug(_("%s can not be found in database"), device) - return entry - - def get_devices_details_list(self, rpc_context, **kwargs): - return [ - self.get_device_details( - rpc_context, - device=device, - **kwargs - ) - for device in kwargs.pop('devices', []) - ] - - def update_device_down(self, rpc_context, **kwargs): - """Device no longer exists on agent.""" - agent_id = kwargs.get('agent_id') - device = kwargs.get('device') - host = kwargs.get('host') - port = ovs_db_v2.get_port(device) - LOG.debug(_("Device %(device)s no longer exists on %(agent_id)s"), - {'device': device, 'agent_id': agent_id}) - if port: - entry = {'device': device, - 'exists': True} - plugin = manager.NeutronManager.get_plugin() - if (host and - not plugin.get_port_host(rpc_context, port['id']) == host): - LOG.debug(_("Device %(device)s not bound to the" - " agent host %(host)s"), - {'device': device, 'host': host}) - elif port['status'] != q_const.PORT_STATUS_DOWN: - # Set port status to DOWN - ovs_db_v2.set_port_status(port['id'], - q_const.PORT_STATUS_DOWN) - else: - entry = {'device': device, - 'exists': False} - LOG.debug(_("%s can not be found in database"), device) - return entry - - def update_device_up(self, rpc_context, **kwargs): - """Device is up on agent.""" - agent_id = kwargs.get('agent_id') - device = kwargs.get('device') - host = kwargs.get('host') - port = ovs_db_v2.get_port(device) - LOG.debug(_("Device %(device)s up on %(agent_id)s"), - {'device': device, 'agent_id': agent_id}) - plugin = manager.NeutronManager.get_plugin() - if port: - if (host and - not plugin.get_port_host(rpc_context, port['id']) == host): - LOG.debug(_("Device %(device)s not bound to the" - " agent host %(host)s"), - {'device': device, 'host': host}) - return - elif port['status'] != q_const.PORT_STATUS_ACTIVE: - ovs_db_v2.set_port_status(port['id'], - q_const.PORT_STATUS_ACTIVE) - else: - LOG.debug(_("%s can not be found in database"), device) - - def tunnel_sync(self, rpc_context, **kwargs): - """Update new tunnel. - - Updates the datbase with the tunnel IP. All listening agents will also - be notified about the new tunnel IP. - """ - tunnel_ip = kwargs.get('tunnel_ip') - # Update the database with the IP - tunnel = ovs_db_v2.add_tunnel_endpoint(tunnel_ip) - tunnels = ovs_db_v2.get_tunnel_endpoints() - entry = dict() - entry['tunnels'] = tunnels - # Notify all other listening agents - self.notifier.tunnel_update(rpc_context, tunnel.ip_address, - tunnel.id, self.tunnel_type) - # Return the list of tunnels IP's to the agent - return entry - - -class SecurityGroupServerRpcMixin(sg_db_rpc.SecurityGroupServerRpcMixin): - - @classmethod - def get_port_from_device(cls, device): - port = ovs_db_v2.get_port_from_device(device) - if port: - port['device'] = device - return port - - -class AgentNotifierApi(n_rpc.RpcProxy, - sg_rpc.SecurityGroupAgentRpcApiMixin): - '''Agent side of the openvswitch rpc API. - - API version history: - 1.0 - Initial version. - - ''' - - BASE_RPC_API_VERSION = '1.0' - - def __init__(self, topic): - super(AgentNotifierApi, self).__init__( - topic=topic, default_version=self.BASE_RPC_API_VERSION) - self.topic_network_delete = topics.get_topic_name(topic, - topics.NETWORK, - topics.DELETE) - self.topic_port_update = topics.get_topic_name(topic, - topics.PORT, - topics.UPDATE) - self.topic_tunnel_update = topics.get_topic_name(topic, - constants.TUNNEL, - topics.UPDATE) - - def network_delete(self, context, network_id): - self.fanout_cast(context, - self.make_msg('network_delete', - network_id=network_id), - topic=self.topic_network_delete) - - def port_update(self, context, port, network_type, segmentation_id, - physical_network): - self.fanout_cast(context, - self.make_msg('port_update', - port=port, - network_type=network_type, - segmentation_id=segmentation_id, - physical_network=physical_network), - topic=self.topic_port_update) - - def tunnel_update(self, context, tunnel_ip, tunnel_id, tunnel_type): - self.fanout_cast(context, - self.make_msg('tunnel_update', - tunnel_ip=tunnel_ip, - tunnel_id=tunnel_id, - tunnel_type=tunnel_type), - topic=self.topic_tunnel_update) - - -class OVSNeutronPluginV2(db_base_plugin_v2.NeutronDbPluginV2, - external_net_db.External_net_db_mixin, - extraroute_db.ExtraRoute_db_mixin, - l3_gwmode_db.L3_NAT_db_mixin, - SecurityGroupServerRpcMixin, - l3_agentschedulers_db.L3AgentSchedulerDbMixin, - agentschedulers_db.DhcpAgentSchedulerDbMixin, - portbindings_db.PortBindingMixin, - extradhcpopt_db.ExtraDhcpOptMixin, - addr_pair_db.AllowedAddressPairsMixin): - - """Implement the Neutron abstractions using Open vSwitch. - - Depending on whether tunneling is enabled, either a GRE, VXLAN tunnel or - a new VLAN is created for each network. An agent is relied upon to - perform the actual OVS configuration on each host. - - The provider extension is also supported. As discussed in - https://bugs.launchpad.net/neutron/+bug/1023156, this class could - be simplified, and filtering on extended attributes could be - handled, by adding support for extended attributes to the - NeutronDbPluginV2 base class. When that occurs, this class should - be updated to take advantage of it. - - The port binding extension enables an external application relay - information to and from the plugin. - """ - - # This attribute specifies whether the plugin supports or not - # bulk/pagination/sorting operations. Name mangling is used in - # order to ensure it is qualified by class - __native_bulk_support = True - __native_pagination_support = True - __native_sorting_support = True - - _supported_extension_aliases = ["provider", "external-net", "router", - "ext-gw-mode", "binding", "quotas", - "security-group", "agent", "extraroute", - "l3_agent_scheduler", - "dhcp_agent_scheduler", - "extra_dhcp_opt", - "allowed-address-pairs"] - - @property - def supported_extension_aliases(self): - if not hasattr(self, '_aliases'): - aliases = self._supported_extension_aliases[:] - sg_rpc.disable_security_group_extension_by_config(aliases) - self._aliases = aliases - return self._aliases - - db_base_plugin_v2.NeutronDbPluginV2.register_dict_extend_funcs( - attributes.NETWORKS, ['_extend_network_dict_provider_ovs']) - - def __init__(self, configfile=None): - super(OVSNeutronPluginV2, self).__init__() - self.base_binding_dict = { - portbindings.VIF_TYPE: portbindings.VIF_TYPE_OVS, - portbindings.VIF_DETAILS: { - # TODO(rkukura): Replace with new VIF security details - portbindings.CAP_PORT_FILTER: - 'security-group' in self.supported_extension_aliases, - portbindings.OVS_HYBRID_PLUG: True}} - self._parse_network_vlan_ranges() - ovs_db_v2.sync_vlan_allocations(self.network_vlan_ranges) - self.tenant_network_type = cfg.CONF.OVS.tenant_network_type - if self.tenant_network_type not in [svc_constants.TYPE_LOCAL, - svc_constants.TYPE_VLAN, - svc_constants.TYPE_GRE, - svc_constants.TYPE_VXLAN, - svc_constants.TYPE_NONE]: - LOG.error(_("Invalid tenant_network_type: %s. " - "Server terminated!"), - self.tenant_network_type) - sys.exit(1) - self.enable_tunneling = cfg.CONF.OVS.enable_tunneling - self.tunnel_type = None - if self.enable_tunneling: - self.tunnel_type = (cfg.CONF.OVS.tunnel_type or - svc_constants.TYPE_GRE) - elif cfg.CONF.OVS.tunnel_type: - self.tunnel_type = cfg.CONF.OVS.tunnel_type - self.enable_tunneling = True - self.tunnel_id_ranges = [] - if self.enable_tunneling: - self._parse_tunnel_id_ranges() - ovs_db_v2.sync_tunnel_allocations(self.tunnel_id_ranges) - elif self.tenant_network_type in constants.TUNNEL_NETWORK_TYPES: - LOG.error(_("Tunneling disabled but tenant_network_type is '%s'. " - "Server terminated!"), self.tenant_network_type) - sys.exit(1) - self.setup_rpc() - self.network_scheduler = importutils.import_object( - cfg.CONF.network_scheduler_driver - ) - self.router_scheduler = importutils.import_object( - cfg.CONF.router_scheduler_driver - ) - - def setup_rpc(self): - # RPC support - self.service_topics = {svc_constants.CORE: topics.PLUGIN, - svc_constants.L3_ROUTER_NAT: topics.L3PLUGIN} - self.conn = n_rpc.create_connection(new=True) - self.notifier = AgentNotifierApi(topics.AGENT) - self.agent_notifiers[q_const.AGENT_TYPE_DHCP] = ( - dhcp_rpc_agent_api.DhcpAgentNotifyAPI() - ) - self.agent_notifiers[q_const.AGENT_TYPE_L3] = ( - l3_rpc_agent_api.L3AgentNotifyAPI() - ) - self.endpoints = [OVSRpcCallbacks(self.notifier, self.tunnel_type), - securitygroups_rpc.SecurityGroupServerRpcCallback(), - dhcp_rpc.DhcpRpcCallback(), - l3_rpc.L3RpcCallback(), - agents_db.AgentExtRpcCallback()] - for svc_topic in self.service_topics.values(): - self.conn.create_consumer(svc_topic, self.endpoints, fanout=False) - # Consume from all consumers in threads - self.conn.consume_in_threads() - - def _parse_network_vlan_ranges(self): - try: - self.network_vlan_ranges = plugin_utils.parse_network_vlan_ranges( - cfg.CONF.OVS.network_vlan_ranges) - except Exception as ex: - LOG.error(_("%s. Server terminated!"), ex) - sys.exit(1) - LOG.info(_("Network VLAN ranges: %s"), self.network_vlan_ranges) - - def _parse_tunnel_id_ranges(self): - for entry in cfg.CONF.OVS.tunnel_id_ranges: - entry = entry.strip() - try: - tun_min, tun_max = entry.split(':') - self.tunnel_id_ranges.append((int(tun_min), int(tun_max))) - except ValueError as ex: - LOG.error(_("Invalid tunnel ID range: " - "'%(range)s' - %(e)s. Server terminated!"), - {'range': entry, 'e': ex}) - sys.exit(1) - LOG.info(_("Tunnel ID ranges: %s"), self.tunnel_id_ranges) - - def _extend_network_dict_provider_ovs(self, network, net_db, - net_binding=None): - # this method used in two cases: when binding is provided explicitly - # and when it is a part of db model object - binding = net_db.binding if net_db else net_binding - network[provider.NETWORK_TYPE] = binding.network_type - if binding.network_type in constants.TUNNEL_NETWORK_TYPES: - network[provider.PHYSICAL_NETWORK] = None - network[provider.SEGMENTATION_ID] = binding.segmentation_id - elif binding.network_type == svc_constants.TYPE_FLAT: - network[provider.PHYSICAL_NETWORK] = binding.physical_network - network[provider.SEGMENTATION_ID] = None - elif binding.network_type == svc_constants.TYPE_VLAN: - network[provider.PHYSICAL_NETWORK] = binding.physical_network - network[provider.SEGMENTATION_ID] = binding.segmentation_id - elif binding.network_type == svc_constants.TYPE_LOCAL: - network[provider.PHYSICAL_NETWORK] = None - network[provider.SEGMENTATION_ID] = None - - def _process_provider_create(self, context, attrs): - network_type = attrs.get(provider.NETWORK_TYPE) - physical_network = attrs.get(provider.PHYSICAL_NETWORK) - segmentation_id = attrs.get(provider.SEGMENTATION_ID) - - network_type_set = attributes.is_attr_set(network_type) - physical_network_set = attributes.is_attr_set(physical_network) - segmentation_id_set = attributes.is_attr_set(segmentation_id) - - if not (network_type_set or physical_network_set or - segmentation_id_set): - return (None, None, None) - - if not network_type_set: - msg = _("provider:network_type required") - raise n_exc.InvalidInput(error_message=msg) - elif network_type == svc_constants.TYPE_FLAT: - if segmentation_id_set: - msg = _("provider:segmentation_id specified for flat network") - raise n_exc.InvalidInput(error_message=msg) - else: - segmentation_id = constants.FLAT_VLAN_ID - elif network_type == svc_constants.TYPE_VLAN: - if not segmentation_id_set: - msg = _("provider:segmentation_id required") - raise n_exc.InvalidInput(error_message=msg) - if not utils.is_valid_vlan_tag(segmentation_id): - msg = (_("provider:segmentation_id out of range " - "(%(min_id)s through %(max_id)s)") % - {'min_id': q_const.MIN_VLAN_TAG, - 'max_id': q_const.MAX_VLAN_TAG}) - raise n_exc.InvalidInput(error_message=msg) - elif network_type in constants.TUNNEL_NETWORK_TYPES: - if not self.enable_tunneling: - msg = _("%s networks are not enabled") % network_type - raise n_exc.InvalidInput(error_message=msg) - if physical_network_set: - msg = _("provider:physical_network specified for %s " - "network") % network_type - raise n_exc.InvalidInput(error_message=msg) - else: - physical_network = None - if not segmentation_id_set: - msg = _("provider:segmentation_id required") - raise n_exc.InvalidInput(error_message=msg) - elif network_type == svc_constants.TYPE_LOCAL: - if physical_network_set: - msg = _("provider:physical_network specified for local " - "network") - raise n_exc.InvalidInput(error_message=msg) - else: - physical_network = None - if segmentation_id_set: - msg = _("provider:segmentation_id specified for local " - "network") - raise n_exc.InvalidInput(error_message=msg) - else: - segmentation_id = None - else: - msg = _("provider:network_type %s not supported") % network_type - raise n_exc.InvalidInput(error_message=msg) - - if network_type in [svc_constants.TYPE_VLAN, svc_constants.TYPE_FLAT]: - if physical_network_set: - if physical_network not in self.network_vlan_ranges: - msg = _("Unknown provider:physical_network " - "%s") % physical_network - raise n_exc.InvalidInput(error_message=msg) - elif 'default' in self.network_vlan_ranges: - physical_network = 'default' - else: - msg = _("provider:physical_network required") - raise n_exc.InvalidInput(error_message=msg) - - return (network_type, physical_network, segmentation_id) - - def create_network(self, context, network): - (network_type, physical_network, - segmentation_id) = self._process_provider_create(context, - network['network']) - - session = context.session - #set up default security groups - tenant_id = self._get_tenant_id_for_create( - context, network['network']) - self._ensure_default_security_group(context, tenant_id) - - with session.begin(subtransactions=True): - if not network_type: - # tenant network - network_type = self.tenant_network_type - if network_type == svc_constants.TYPE_NONE: - raise n_exc.TenantNetworksDisabled() - elif network_type == svc_constants.TYPE_VLAN: - (physical_network, - segmentation_id) = ovs_db_v2.reserve_vlan(session) - elif network_type in constants.TUNNEL_NETWORK_TYPES: - segmentation_id = ovs_db_v2.reserve_tunnel(session) - # no reservation needed for TYPE_LOCAL - else: - # provider network - if network_type in [svc_constants.TYPE_VLAN, - svc_constants.TYPE_FLAT]: - ovs_db_v2.reserve_specific_vlan(session, physical_network, - segmentation_id) - elif network_type in constants.TUNNEL_NETWORK_TYPES: - ovs_db_v2.reserve_specific_tunnel(session, segmentation_id) - # no reservation needed for TYPE_LOCAL - net = super(OVSNeutronPluginV2, self).create_network(context, - network) - binding = ovs_db_v2.add_network_binding(session, net['id'], - network_type, - physical_network, - segmentation_id) - - self._process_l3_create(context, net, network['network']) - # passing None as db model to use binding object - self._extend_network_dict_provider_ovs(net, None, binding) - # note - exception will rollback entire transaction - LOG.debug(_("Created network: %s"), net['id']) - return net - - def update_network(self, context, id, network): - provider._raise_if_updates_provider_attributes(network['network']) - - session = context.session - with session.begin(subtransactions=True): - net = super(OVSNeutronPluginV2, self).update_network(context, id, - network) - self._process_l3_update(context, net, network['network']) - return net - - def delete_network(self, context, id): - session = context.session - with session.begin(subtransactions=True): - binding = ovs_db_v2.get_network_binding(session, id) - self._process_l3_delete(context, id) - super(OVSNeutronPluginV2, self).delete_network(context, id) - if binding.network_type in constants.TUNNEL_NETWORK_TYPES: - ovs_db_v2.release_tunnel(session, binding.segmentation_id, - self.tunnel_id_ranges) - elif binding.network_type in [svc_constants.TYPE_VLAN, - svc_constants.TYPE_FLAT]: - ovs_db_v2.release_vlan(session, binding.physical_network, - binding.segmentation_id, - self.network_vlan_ranges) - # the network_binding record is deleted via cascade from - # the network record, so explicit removal is not necessary - self.notifier.network_delete(context, id) - - def get_network(self, context, id, fields=None): - session = context.session - with session.begin(subtransactions=True): - net = super(OVSNeutronPluginV2, self).get_network(context, - id, None) - return self._fields(net, fields) - - def get_networks(self, context, filters=None, fields=None, - sorts=None, - limit=None, marker=None, page_reverse=False): - session = context.session - with session.begin(subtransactions=True): - nets = super(OVSNeutronPluginV2, - self).get_networks(context, filters, None, sorts, - limit, marker, page_reverse) - - return [self._fields(net, fields) for net in nets] - - def create_port(self, context, port): - # Set port status as 'DOWN'. This will be updated by agent - port['port']['status'] = q_const.PORT_STATUS_DOWN - port_data = port['port'] - session = context.session - with session.begin(subtransactions=True): - self._ensure_default_security_group_on_port(context, port) - sgids = self._get_security_groups_on_port(context, port) - dhcp_opts = port['port'].get(edo_ext.EXTRADHCPOPTS, []) - port = super(OVSNeutronPluginV2, self).create_port(context, port) - self._process_portbindings_create_and_update(context, - port_data, port) - self._process_port_create_security_group(context, port, sgids) - self._process_port_create_extra_dhcp_opts(context, port, - dhcp_opts) - port[addr_pair.ADDRESS_PAIRS] = ( - self._process_create_allowed_address_pairs( - context, port, - port_data.get(addr_pair.ADDRESS_PAIRS))) - self.notify_security_groups_member_updated(context, port) - return port - - def update_port(self, context, id, port): - session = context.session - need_port_update_notify = False - with session.begin(subtransactions=True): - original_port = super(OVSNeutronPluginV2, self).get_port( - context, id) - updated_port = super(OVSNeutronPluginV2, self).update_port( - context, id, port) - if addr_pair.ADDRESS_PAIRS in port['port']: - need_port_update_notify |= ( - self.update_address_pairs_on_port(context, id, port, - original_port, - updated_port)) - need_port_update_notify |= self.update_security_group_on_port( - context, id, port, original_port, updated_port) - self._process_portbindings_create_and_update(context, - port['port'], - updated_port) - need_port_update_notify |= self._update_extra_dhcp_opts_on_port( - context, id, port, updated_port) - - secgrp_member_updated = self.is_security_group_member_updated( - context, original_port, updated_port) - need_port_update_notify |= secgrp_member_updated - if original_port['admin_state_up'] != updated_port['admin_state_up']: - need_port_update_notify = True - - if need_port_update_notify: - binding = ovs_db_v2.get_network_binding(None, - updated_port['network_id']) - self.notifier.port_update(context, updated_port, - binding.network_type, - binding.segmentation_id, - binding.physical_network) - - if secgrp_member_updated: - old_set = set(original_port.get(ext_sg.SECURITYGROUPS)) - new_set = set(updated_port.get(ext_sg.SECURITYGROUPS)) - self.notifier.security_groups_member_updated( - context, - old_set ^ new_set) - - return updated_port - - def delete_port(self, context, id, l3_port_check=True): - - # if needed, check to see if this is a port owned by - # and l3-router. If so, we should prevent deletion. - if l3_port_check: - self.prevent_l3_port_deletion(context, id) - - session = context.session - with session.begin(subtransactions=True): - router_ids = self.disassociate_floatingips( - context, id, do_notify=False) - port = self.get_port(context, id) - self._delete_port_security_group_bindings(context, id) - super(OVSNeutronPluginV2, self).delete_port(context, id) - - # now that we've left db transaction, we are safe to notify - self.notify_routers_updated(context, router_ids) - self.notify_security_groups_member_updated(context, port) diff --git a/neutron/tests/unit/nec/test_agent_scheduler.py b/neutron/tests/unit/nec/test_agent_scheduler.py index 7e1b24db30f..70f4f1e7ca6 100644 --- a/neutron/tests/unit/nec/test_agent_scheduler.py +++ b/neutron/tests/unit/nec/test_agent_scheduler.py @@ -41,6 +41,7 @@ class NecDhcpAgentNotifierTestCase( test_nec_plugin.NecPluginV2TestCaseBase): plugin_str = test_nec_plugin.PLUGIN_NAME + l3_plugin = None def setUp(self): self.setup_nec_plugin_base() @@ -64,6 +65,7 @@ class NecL3AgentSchedulerWithOpenFlowRouter( test_nec_plugin.NecPluginV2TestCaseBase): plugin_str = test_nec_plugin.PLUGIN_NAME + l3_plugin = None def setUp(self): self.setup_nec_plugin_base() diff --git a/neutron/tests/unit/openvswitch/test_agent_scheduler.py b/neutron/tests/unit/openvswitch/test_agent_scheduler.py index ed4f44023b9..f73866f4e66 100644 --- a/neutron/tests/unit/openvswitch/test_agent_scheduler.py +++ b/neutron/tests/unit/openvswitch/test_agent_scheduler.py @@ -202,9 +202,9 @@ class OvsAgentSchedulerTestCaseBase(test_l3_plugin.L3NatTestCaseMixin, AgentSchedulerTestMixIn, test_plugin.NeutronDbPluginV2TestCase): fmt = 'json' - plugin_str = ('neutron.plugins.openvswitch.' - 'ovs_neutron_plugin.OVSNeutronPluginV2') - l3_plugin = None + plugin_str = 'neutron.plugins.ml2.plugin.Ml2Plugin' + l3_plugin = ('neutron.tests.unit.test_l3_plugin.' + 'TestL3NatAgentSchedulingServicePlugin') def setUp(self): # Save the global RESOURCE_ATTRIBUTE_MAP before loading plugin @@ -1105,8 +1105,7 @@ class OvsDhcpAgentNotifierTestCase(test_l3_plugin.L3NatTestCaseMixin, test_agent_ext_plugin.AgentDBTestMixIn, AgentSchedulerTestMixIn, test_plugin.NeutronDbPluginV2TestCase): - plugin_str = ('neutron.plugins.openvswitch.' - 'ovs_neutron_plugin.OVSNeutronPluginV2') + plugin_str = 'neutron.plugins.ml2.plugin.Ml2Plugin' def setUp(self): # Save the global RESOURCE_ATTRIBUTE_MAP before loading plugin @@ -1271,9 +1270,9 @@ class OvsL3AgentNotifierTestCase(test_l3_plugin.L3NatTestCaseMixin, test_agent_ext_plugin.AgentDBTestMixIn, AgentSchedulerTestMixIn, test_plugin.NeutronDbPluginV2TestCase): - plugin_str = ('neutron.plugins.openvswitch.' - 'ovs_neutron_plugin.OVSNeutronPluginV2') - l3_plugin = None + plugin_str = 'neutron.plugins.ml2.plugin.Ml2Plugin' + l3_plugin = ('neutron.tests.unit.test_l3_plugin.' + 'TestL3NatAgentSchedulingServicePlugin') def setUp(self): self.dhcp_notifier_cls_p = mock.patch( @@ -1309,8 +1308,9 @@ class OvsL3AgentNotifierTestCase(test_l3_plugin.L3NatTestCaseMixin, attributes.RESOURCE_ATTRIBUTE_MAP = self.saved_attr_map def test_router_add_to_l3_agent_notification(self): - plugin = manager.NeutronManager.get_plugin() - l3_notifier = plugin.agent_notifiers[constants.AGENT_TYPE_L3] + l3_plugin = (manager.NeutronManager.get_service_plugins() + [service_constants.L3_ROUTER_NAT]) + l3_notifier = l3_plugin.agent_notifiers[constants.AGENT_TYPE_L3] with mock.patch.object(l3_notifier, 'cast') as mock_l3: with self.router() as router1: self._register_agent_states() @@ -1330,8 +1330,9 @@ class OvsL3AgentNotifierTestCase(test_l3_plugin.L3NatTestCaseMixin, self._assert_notify(notifications, expected_event_type) def test_router_remove_from_l3_agent_notification(self): - plugin = manager.NeutronManager.get_plugin() - l3_notifier = plugin.agent_notifiers[constants.AGENT_TYPE_L3] + l3_plugin = (manager.NeutronManager.get_service_plugins() + [service_constants.L3_ROUTER_NAT]) + l3_notifier = l3_plugin.agent_notifiers[constants.AGENT_TYPE_L3] with mock.patch.object(l3_notifier, 'cast') as mock_l3: with self.router() as router1: self._register_agent_states() @@ -1351,8 +1352,9 @@ class OvsL3AgentNotifierTestCase(test_l3_plugin.L3NatTestCaseMixin, self._assert_notify(notifications, expected_event_type) def test_agent_updated_l3_agent_notification(self): - plugin = manager.NeutronManager.get_plugin() - l3_notifier = plugin.agent_notifiers[constants.AGENT_TYPE_L3] + l3_plugin = (manager.NeutronManager.get_service_plugins() + [service_constants.L3_ROUTER_NAT]) + l3_notifier = l3_plugin.agent_notifiers[constants.AGENT_TYPE_L3] with mock.patch.object(l3_notifier, 'cast') as mock_l3: self._register_agent_states() hosta_id = self._get_agent_id(constants.AGENT_TYPE_L3, diff --git a/neutron/tests/unit/openvswitch/test_openvswitch_plugin.py b/neutron/tests/unit/openvswitch/test_openvswitch_plugin.py deleted file mode 100644 index af1c1d0425f..00000000000 --- a/neutron/tests/unit/openvswitch/test_openvswitch_plugin.py +++ /dev/null @@ -1,159 +0,0 @@ -# Copyright (c) 2012 OpenStack Foundation. -# -# 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. - -from oslo.config import cfg - -from neutron import context -from neutron.extensions import portbindings -from neutron.extensions import securitygroup as ext_sg -from neutron.plugins.openvswitch import ovs_neutron_plugin -from neutron.tests.unit import _test_extension_portbindings as test_bindings -from neutron.tests.unit import test_db_plugin as test_plugin -from neutron.tests.unit import test_extension_allowedaddresspairs as test_pair -from neutron.tests.unit import test_security_groups_rpc as test_sg_rpc - -import mock - - -class OpenvswitchPluginV2TestCase(test_plugin.NeutronDbPluginV2TestCase): - - _plugin_name = ('neutron.plugins.openvswitch.' - 'ovs_neutron_plugin.OVSNeutronPluginV2') - - def setUp(self): - super(OpenvswitchPluginV2TestCase, self).setUp(self._plugin_name) - self.port_create_status = 'DOWN' - - -class TestOpenvswitchBasicGet(test_plugin.TestBasicGet, - OpenvswitchPluginV2TestCase): - pass - - -class TestOpenvswitchV2HTTPResponse(test_plugin.TestV2HTTPResponse, - OpenvswitchPluginV2TestCase): - pass - - -class TestOpenvswitchPortsV2(test_plugin.TestPortsV2, - OpenvswitchPluginV2TestCase): - - def test_update_port_status_build(self): - with self.port() as port: - self.assertEqual(port['port']['status'], 'DOWN') - self.assertEqual(self.port_create_status, 'DOWN') - - -class TestOpenvswitchNetworksV2(test_plugin.TestNetworksV2, - OpenvswitchPluginV2TestCase): - pass - - -class TestOpenvswitchPortBinding(OpenvswitchPluginV2TestCase, - test_bindings.PortBindingsTestCase): - VIF_TYPE = portbindings.VIF_TYPE_OVS - HAS_PORT_FILTER = True - ENABLE_SG = True - FIREWALL_DRIVER = test_sg_rpc.FIREWALL_HYBRID_DRIVER - - def setUp(self, firewall_driver=None): - test_sg_rpc.set_firewall_driver(self.FIREWALL_DRIVER) - cfg.CONF.set_override( - 'enable_security_group', self.ENABLE_SG, - group='SECURITYGROUP') - super(TestOpenvswitchPortBinding, self).setUp() - - -class TestOpenvswitchPortBindingNoSG(TestOpenvswitchPortBinding): - HAS_PORT_FILTER = False - ENABLE_SG = False - FIREWALL_DRIVER = test_sg_rpc.FIREWALL_NOOP_DRIVER - - -class TestOpenvswitchPortBindingHost( - OpenvswitchPluginV2TestCase, - test_bindings.PortBindingsHostTestCaseMixin): - pass - - -class TestOpenvswitchAllowedAddressPairs(OpenvswitchPluginV2TestCase, - test_pair.TestAllowedAddressPairs): - pass - - -class TestOpenvswitchUpdatePort(OpenvswitchPluginV2TestCase, - ovs_neutron_plugin.OVSNeutronPluginV2): - - def test_update_port_add_remove_security_group(self): - get_port_func = ( - 'neutron.db.db_base_plugin_v2.' - 'NeutronDbPluginV2.get_port' - ) - with mock.patch(get_port_func) as mock_get_port: - mock_get_port.return_value = { - ext_sg.SECURITYGROUPS: ["sg1", "sg2"], - "admin_state_up": True, - "fixed_ips": "fake_ip", - "network_id": "fake_id"} - - update_port_func = ( - 'neutron.db.db_base_plugin_v2.' - 'NeutronDbPluginV2.update_port' - ) - with mock.patch(update_port_func) as mock_update_port: - mock_update_port.return_value = { - ext_sg.SECURITYGROUPS: ["sg2", "sg3"], - "admin_state_up": True, - "fixed_ips": "fake_ip", - "network_id": "fake_id"} - - fake_func = ( - 'neutron.plugins.openvswitch.' - 'ovs_db_v2.get_network_binding' - ) - with mock.patch(fake_func) as mock_func: - class MockBinding: - network_type = "fake" - segmentation_id = "fake" - physical_network = "fake" - - mock_func.return_value = MockBinding() - - ctx = context.Context('', 'somebody') - self.update_port(ctx, "id", { - "port": { - ext_sg.SECURITYGROUPS: [ - "sg2", "sg3"]}}) - - sgmu = self.notifier.security_groups_member_updated - sgmu.assert_called_with(ctx, set(['sg1', 'sg3'])) - - def setUp(self): - super(TestOpenvswitchUpdatePort, self).setUp() - self.update_security_group_on_port = mock.MagicMock(return_value=True) - self._process_portbindings_create_and_update = mock.MagicMock( - return_value=True) - self._update_extra_dhcp_opts_on_port = mock.MagicMock( - return_value=True) - self.update_address_pairs_on_port = mock.MagicMock( - return_value=True) - - class MockNotifier: - def __init__(self): - self.port_update = mock.MagicMock(return_value=True) - self.security_groups_member_updated = mock.MagicMock( - return_value=True) - - self.notifier = MockNotifier() diff --git a/neutron/tests/unit/openvswitch/test_ovs_db.py b/neutron/tests/unit/openvswitch/test_ovs_db.py deleted file mode 100644 index a82f546b126..00000000000 --- a/neutron/tests/unit/openvswitch/test_ovs_db.py +++ /dev/null @@ -1,315 +0,0 @@ -# Copyright (c) 2012 OpenStack Foundation. -# -# 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. - -import mock -from oslo.config import cfg -from oslo.db import exception as db_exc -from oslo.db.sqlalchemy import session -from six import moves -import testtools -from testtools import matchers - -from neutron.common import exceptions as n_exc -from neutron.db import api as db -from neutron.plugins.openvswitch import ovs_db_v2 -from neutron.plugins.openvswitch import ovs_models_v2 as ovs_models -from neutron.tests.unit import test_db_plugin as test_plugin -from neutron.tests.unit import testlib_api - -PHYS_NET = 'physnet1' -PHYS_NET_2 = 'physnet2' -VLAN_MIN = 10 -VLAN_MAX = 19 -VLAN_RANGES = {PHYS_NET: [(VLAN_MIN, VLAN_MAX)]} -UPDATED_VLAN_RANGES = {PHYS_NET: [(VLAN_MIN + 5, VLAN_MAX + 5)], - PHYS_NET_2: [(VLAN_MIN + 20, VLAN_MAX + 20)]} -TUN_MIN = 100 -TUN_MAX = 109 -TUNNEL_RANGES = [(TUN_MIN, TUN_MAX)] -UPDATED_TUNNEL_RANGES = [(TUN_MIN + 5, TUN_MAX + 5)] - -PLUGIN_NAME = ('neutron.plugins.openvswitch.' - 'ovs_neutron_plugin.OVSNeutronPluginV2') - - -class VlanAllocationsTest(testlib_api.SqlTestCase): - def setUp(self): - super(VlanAllocationsTest, self).setUp() - ovs_db_v2.sync_vlan_allocations(VLAN_RANGES) - self.session = db.get_session() - - def test_sync_vlan_allocations(self): - self.assertIsNone(ovs_db_v2.get_vlan_allocation(PHYS_NET, - VLAN_MIN - 1)) - self.assertFalse(ovs_db_v2.get_vlan_allocation(PHYS_NET, - VLAN_MIN).allocated) - self.assertFalse(ovs_db_v2.get_vlan_allocation(PHYS_NET, - VLAN_MIN + 1).allocated) - self.assertFalse(ovs_db_v2.get_vlan_allocation(PHYS_NET, - VLAN_MAX - 1).allocated) - self.assertFalse(ovs_db_v2.get_vlan_allocation(PHYS_NET, - VLAN_MAX).allocated) - self.assertIsNone(ovs_db_v2.get_vlan_allocation(PHYS_NET, - VLAN_MAX + 1)) - - ovs_db_v2.sync_vlan_allocations(UPDATED_VLAN_RANGES) - - self.assertIsNone(ovs_db_v2.get_vlan_allocation(PHYS_NET, - VLAN_MIN + 5 - 1)) - self.assertFalse(ovs_db_v2.get_vlan_allocation(PHYS_NET, - VLAN_MIN + 5). - allocated) - self.assertFalse(ovs_db_v2.get_vlan_allocation(PHYS_NET, - VLAN_MIN + 5 + 1). - allocated) - self.assertFalse(ovs_db_v2.get_vlan_allocation(PHYS_NET, - VLAN_MAX + 5 - 1). - allocated) - self.assertFalse(ovs_db_v2.get_vlan_allocation(PHYS_NET, - VLAN_MAX + 5). - allocated) - self.assertIsNone(ovs_db_v2.get_vlan_allocation(PHYS_NET, - VLAN_MAX + 5 + 1)) - - self.assertIsNone(ovs_db_v2.get_vlan_allocation(PHYS_NET_2, - VLAN_MIN + 20 - 1)) - self.assertFalse(ovs_db_v2.get_vlan_allocation(PHYS_NET_2, - VLAN_MIN + 20). - allocated) - self.assertFalse(ovs_db_v2.get_vlan_allocation(PHYS_NET_2, - VLAN_MIN + 20 + 1). - allocated) - self.assertFalse(ovs_db_v2.get_vlan_allocation(PHYS_NET_2, - VLAN_MAX + 20 - 1). - allocated) - self.assertFalse(ovs_db_v2.get_vlan_allocation(PHYS_NET_2, - VLAN_MAX + 20). - allocated) - self.assertIsNone(ovs_db_v2.get_vlan_allocation(PHYS_NET_2, - VLAN_MAX + 20 + 1)) - - ovs_db_v2.sync_vlan_allocations(VLAN_RANGES) - - self.assertIsNone(ovs_db_v2.get_vlan_allocation(PHYS_NET, - VLAN_MIN - 1)) - self.assertFalse(ovs_db_v2.get_vlan_allocation(PHYS_NET, - VLAN_MIN).allocated) - self.assertFalse(ovs_db_v2.get_vlan_allocation(PHYS_NET, - VLAN_MIN + 1).allocated) - self.assertFalse(ovs_db_v2.get_vlan_allocation(PHYS_NET, - VLAN_MAX - 1).allocated) - self.assertFalse(ovs_db_v2.get_vlan_allocation(PHYS_NET, - VLAN_MAX).allocated) - self.assertIsNone(ovs_db_v2.get_vlan_allocation(PHYS_NET, - VLAN_MAX + 1)) - - self.assertIsNone(ovs_db_v2.get_vlan_allocation(PHYS_NET_2, - VLAN_MIN + 20)) - self.assertIsNone(ovs_db_v2.get_vlan_allocation(PHYS_NET_2, - VLAN_MAX + 20)) - - def test_vlan_pool(self): - vlan_ids = set() - for x in moves.xrange(VLAN_MIN, VLAN_MAX + 1): - physical_network, vlan_id = ovs_db_v2.reserve_vlan(self.session) - self.assertEqual(physical_network, PHYS_NET) - self.assertThat(vlan_id, matchers.GreaterThan(VLAN_MIN - 1)) - self.assertThat(vlan_id, matchers.LessThan(VLAN_MAX + 1)) - vlan_ids.add(vlan_id) - - with testtools.ExpectedException(n_exc.NoNetworkAvailable): - physical_network, vlan_id = ovs_db_v2.reserve_vlan(self.session) - - ovs_db_v2.release_vlan(self.session, PHYS_NET, vlan_ids.pop(), - VLAN_RANGES) - physical_network, vlan_id = ovs_db_v2.reserve_vlan(self.session) - self.assertEqual(physical_network, PHYS_NET) - self.assertThat(vlan_id, matchers.GreaterThan(VLAN_MIN - 1)) - self.assertThat(vlan_id, matchers.LessThan(VLAN_MAX + 1)) - vlan_ids.add(vlan_id) - - for vlan_id in vlan_ids: - ovs_db_v2.release_vlan(self.session, PHYS_NET, vlan_id, - VLAN_RANGES) - - def test_specific_vlan_inside_pool(self): - vlan_id = VLAN_MIN + 5 - self.assertFalse(ovs_db_v2.get_vlan_allocation(PHYS_NET, - vlan_id).allocated) - ovs_db_v2.reserve_specific_vlan(self.session, PHYS_NET, vlan_id) - self.assertTrue(ovs_db_v2.get_vlan_allocation(PHYS_NET, - vlan_id).allocated) - - with testtools.ExpectedException(n_exc.VlanIdInUse): - ovs_db_v2.reserve_specific_vlan(self.session, PHYS_NET, vlan_id) - - ovs_db_v2.release_vlan(self.session, PHYS_NET, vlan_id, VLAN_RANGES) - self.assertFalse(ovs_db_v2.get_vlan_allocation(PHYS_NET, - vlan_id).allocated) - - def test_specific_vlan_outside_pool(self): - vlan_id = VLAN_MAX + 5 - self.assertIsNone(ovs_db_v2.get_vlan_allocation(PHYS_NET, vlan_id)) - ovs_db_v2.reserve_specific_vlan(self.session, PHYS_NET, vlan_id) - self.assertTrue(ovs_db_v2.get_vlan_allocation(PHYS_NET, - vlan_id).allocated) - - with testtools.ExpectedException(n_exc.VlanIdInUse): - ovs_db_v2.reserve_specific_vlan(self.session, PHYS_NET, vlan_id) - - ovs_db_v2.release_vlan(self.session, PHYS_NET, vlan_id, VLAN_RANGES) - self.assertIsNone(ovs_db_v2.get_vlan_allocation(PHYS_NET, vlan_id)) - - def test_sync_with_allocated_false(self): - vlan_ids = set() - for x in moves.xrange(VLAN_MIN, VLAN_MAX + 1): - physical_network, vlan_id = ovs_db_v2.reserve_vlan(self.session) - self.assertEqual(physical_network, PHYS_NET) - self.assertThat(vlan_id, matchers.GreaterThan(VLAN_MIN - 1)) - self.assertThat(vlan_id, matchers.LessThan(VLAN_MAX + 1)) - vlan_ids.add(vlan_id) - - ovs_db_v2.release_vlan(self.session, PHYS_NET, vlan_ids.pop(), - VLAN_RANGES) - ovs_db_v2.sync_vlan_allocations({}) - - -class TunnelAllocationsTest(testlib_api.SqlTestCase): - def setUp(self): - super(TunnelAllocationsTest, self).setUp() - ovs_db_v2.sync_tunnel_allocations(TUNNEL_RANGES) - self.session = db.get_session() - - def test_sync_tunnel_allocations(self): - self.assertIsNone(ovs_db_v2.get_tunnel_allocation(TUN_MIN - 1)) - self.assertFalse(ovs_db_v2.get_tunnel_allocation(TUN_MIN).allocated) - self.assertFalse(ovs_db_v2.get_tunnel_allocation(TUN_MIN + 1). - allocated) - self.assertFalse(ovs_db_v2.get_tunnel_allocation(TUN_MAX - 1). - allocated) - self.assertFalse(ovs_db_v2.get_tunnel_allocation(TUN_MAX).allocated) - self.assertIsNone(ovs_db_v2.get_tunnel_allocation(TUN_MAX + 1)) - - ovs_db_v2.sync_tunnel_allocations(UPDATED_TUNNEL_RANGES) - - self.assertIsNone(ovs_db_v2.get_tunnel_allocation(TUN_MIN + 5 - 1)) - self.assertFalse(ovs_db_v2.get_tunnel_allocation(TUN_MIN + 5). - allocated) - self.assertFalse(ovs_db_v2.get_tunnel_allocation(TUN_MIN + 5 + 1). - allocated) - self.assertFalse(ovs_db_v2.get_tunnel_allocation(TUN_MAX + 5 - 1). - allocated) - self.assertFalse(ovs_db_v2.get_tunnel_allocation(TUN_MAX + 5). - allocated) - self.assertIsNone(ovs_db_v2.get_tunnel_allocation(TUN_MAX + 5 + 1)) - - def test_tunnel_pool(self): - tunnel_ids = set() - for x in moves.xrange(TUN_MIN, TUN_MAX + 1): - tunnel_id = ovs_db_v2.reserve_tunnel(self.session) - self.assertThat(tunnel_id, matchers.GreaterThan(TUN_MIN - 1)) - self.assertThat(tunnel_id, matchers.LessThan(TUN_MAX + 1)) - tunnel_ids.add(tunnel_id) - - with testtools.ExpectedException(n_exc.NoNetworkAvailable): - tunnel_id = ovs_db_v2.reserve_tunnel(self.session) - - ovs_db_v2.release_tunnel(self.session, tunnel_ids.pop(), TUNNEL_RANGES) - tunnel_id = ovs_db_v2.reserve_tunnel(self.session) - self.assertThat(tunnel_id, matchers.GreaterThan(TUN_MIN - 1)) - self.assertThat(tunnel_id, matchers.LessThan(TUN_MAX + 1)) - tunnel_ids.add(tunnel_id) - - for tunnel_id in tunnel_ids: - ovs_db_v2.release_tunnel(self.session, tunnel_id, TUNNEL_RANGES) - - def test_add_tunnel_endpoints(self): - tun_1 = ovs_db_v2.add_tunnel_endpoint('192.168.0.1') - tun_2 = ovs_db_v2.add_tunnel_endpoint('192.168.0.2') - self.assertEqual(1, tun_1.id) - self.assertEqual('192.168.0.1', tun_1.ip_address) - self.assertEqual(2, tun_2.id) - self.assertEqual('192.168.0.2', tun_2.ip_address) - - def test_specific_tunnel_inside_pool(self): - tunnel_id = TUN_MIN + 5 - self.assertFalse(ovs_db_v2.get_tunnel_allocation(tunnel_id).allocated) - ovs_db_v2.reserve_specific_tunnel(self.session, tunnel_id) - self.assertTrue(ovs_db_v2.get_tunnel_allocation(tunnel_id).allocated) - - with testtools.ExpectedException(n_exc.TunnelIdInUse): - ovs_db_v2.reserve_specific_tunnel(self.session, tunnel_id) - - ovs_db_v2.release_tunnel(self.session, tunnel_id, TUNNEL_RANGES) - self.assertFalse(ovs_db_v2.get_tunnel_allocation(tunnel_id).allocated) - - def test_specific_tunnel_outside_pool(self): - tunnel_id = TUN_MAX + 5 - self.assertIsNone(ovs_db_v2.get_tunnel_allocation(tunnel_id)) - ovs_db_v2.reserve_specific_tunnel(self.session, tunnel_id) - self.assertTrue(ovs_db_v2.get_tunnel_allocation(tunnel_id).allocated) - - with testtools.ExpectedException(n_exc.TunnelIdInUse): - ovs_db_v2.reserve_specific_tunnel(self.session, tunnel_id) - - ovs_db_v2.release_tunnel(self.session, tunnel_id, TUNNEL_RANGES) - self.assertIsNone(ovs_db_v2.get_tunnel_allocation(tunnel_id)) - - def test_add_tunnel_endpoint_create_new_endpoint(self): - addr = '10.0.0.1' - ovs_db_v2.add_tunnel_endpoint(addr) - self.assertIsNotNone(self.session.query(ovs_models.TunnelEndpoint). - filter_by(ip_address=addr).first()) - - def test_add_tunnel_endpoint_retrieve_an_existing_endpoint(self): - addr = '10.0.0.1' - self.session.add(ovs_models.TunnelEndpoint(ip_address=addr, id=1)) - self.session.flush() - - tunnel = ovs_db_v2.add_tunnel_endpoint(addr) - self.assertEqual(tunnel.id, 1) - self.assertEqual(tunnel.ip_address, addr) - - def test_add_tunnel_endpoint_handle_duplicate_error(self): - with mock.patch.object(session.Session, 'query') as query_mock: - error = db_exc.DBDuplicateEntry(['id']) - query_mock.side_effect = error - - with testtools.ExpectedException(n_exc.NeutronException): - ovs_db_v2.add_tunnel_endpoint('10.0.0.1', 5) - self.assertEqual(query_mock.call_count, 5) - - -class NetworkBindingsTest(test_plugin.NeutronDbPluginV2TestCase): - def setUp(self): - cfg.CONF.set_override('network_vlan_ranges', ['physnet1:1000:2999'], - group='OVS') - super(NetworkBindingsTest, self).setUp(plugin=PLUGIN_NAME) - self.session = db.get_session() - - def test_add_network_binding(self): - params = {'provider:network_type': 'vlan', - 'provider:physical_network': PHYS_NET, - 'provider:segmentation_id': 1234} - params['arg_list'] = tuple(params.keys()) - with self.network(**params) as network: - TEST_NETWORK_ID = network['network']['id'] - binding = ovs_db_v2.get_network_binding(self.session, - TEST_NETWORK_ID) - self.assertIsNotNone(binding) - self.assertEqual(binding.network_id, TEST_NETWORK_ID) - self.assertEqual(binding.network_type, 'vlan') - self.assertEqual(binding.physical_network, PHYS_NET) - self.assertEqual(binding.segmentation_id, 1234) diff --git a/neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py b/neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py index 3013761bab1..64ba72a9058 100644 --- a/neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py +++ b/neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py @@ -32,8 +32,7 @@ from neutron.plugins.openvswitch.common import constants from neutron.tests import base -NOTIFIER = ('neutron.plugins.openvswitch.' - 'ovs_neutron_plugin.AgentNotifierApi') +NOTIFIER = 'neutron.plugins.ml2.rpc.AgentNotifierApi' OVS_LINUX_KERN_VERS_WITHOUT_VXLAN = "3.12.0" FAKE_MAC = '00:11:22:33:44:55' diff --git a/neutron/tests/unit/openvswitch/test_ovs_rpcapi.py b/neutron/tests/unit/openvswitch/test_ovs_rpcapi.py deleted file mode 100644 index c443d6cd988..00000000000 --- a/neutron/tests/unit/openvswitch/test_ovs_rpcapi.py +++ /dev/null @@ -1,134 +0,0 @@ -# Copyright 2012, Red Hat, 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. - -""" -Unit Tests for openvswitch rpc -""" - -import fixtures - -from neutron.agent import rpc as agent_rpc -from neutron.common import topics -from neutron.openstack.common import context -from neutron.plugins.openvswitch.common import constants -from neutron.plugins.openvswitch import ovs_neutron_plugin as povs -from neutron.tests import base - - -class rpcApiTestCase(base.BaseTestCase): - - def _test_ovs_api(self, rpcapi, topic, method, rpc_method, **kwargs): - ctxt = context.RequestContext('fake_user', 'fake_project') - expected_retval = 'foo' if method == 'call' else None - expected_kwargs = {} - if topic: - expected_kwargs['topic'] = topic - if 'version' in kwargs: - expected_kwargs['version'] = kwargs.pop('version') - expected_msg = rpcapi.make_msg(method, **kwargs) - if rpc_method == 'cast' and method == 'run_instance': - kwargs['call'] = False - - self.fake_args = None - self.fake_kwargs = None - - def _fake_rpc_method(*args, **kwargs): - self.fake_args = args - self.fake_kwargs = kwargs - if expected_retval: - return expected_retval - - self.useFixture(fixtures.MonkeyPatch( - 'neutron.common.rpc.RpcProxy.' + rpc_method, - _fake_rpc_method)) - - retval = getattr(rpcapi, method)(ctxt, **kwargs) - - self.assertEqual(retval, expected_retval) - expected_args = [ctxt, expected_msg] - - # skip the first argument which is 'self' - for arg, expected_arg in zip(self.fake_args[1:], expected_args): - self.assertEqual(arg, expected_arg) - self.assertEqual(expected_kwargs, self.fake_kwargs) - - def test_delete_network(self): - rpcapi = povs.AgentNotifierApi(topics.AGENT) - self._test_ovs_api(rpcapi, - topics.get_topic_name(topics.AGENT, - topics.NETWORK, - topics.DELETE), - 'network_delete', rpc_method='fanout_cast', - network_id='fake_request_spec') - - def test_port_update(self): - rpcapi = povs.AgentNotifierApi(topics.AGENT) - self._test_ovs_api(rpcapi, - topics.get_topic_name(topics.AGENT, - topics.PORT, - topics.UPDATE), - 'port_update', rpc_method='fanout_cast', - port='fake_port', - network_type='fake_network_type', - segmentation_id='fake_segmentation_id', - physical_network='fake_physical_network') - - def test_tunnel_update(self): - rpcapi = povs.AgentNotifierApi(topics.AGENT) - self._test_ovs_api(rpcapi, - topics.get_topic_name(topics.AGENT, - constants.TUNNEL, - topics.UPDATE), - 'tunnel_update', rpc_method='fanout_cast', - tunnel_ip='fake_ip', tunnel_id='fake_id', - tunnel_type=None) - - def test_device_details(self): - rpcapi = agent_rpc.PluginApi(topics.PLUGIN) - self._test_ovs_api(rpcapi, None, - 'get_device_details', rpc_method='call', - device='fake_device', - agent_id='fake_agent_id', - host='fake_host') - - def test_devices_details_list(self): - rpcapi = agent_rpc.PluginApi(topics.PLUGIN) - self._test_ovs_api(rpcapi, None, - 'get_devices_details_list', rpc_method='call', - devices=['fake_device1', 'fake_device2'], - agent_id='fake_agent_id', host='fake_host', - version='1.3') - - def test_update_device_down(self): - rpcapi = agent_rpc.PluginApi(topics.PLUGIN) - self._test_ovs_api(rpcapi, None, - 'update_device_down', rpc_method='call', - device='fake_device', - agent_id='fake_agent_id', - host='fake_host') - - def test_tunnel_sync(self): - rpcapi = agent_rpc.PluginApi(topics.PLUGIN) - self._test_ovs_api(rpcapi, None, - 'tunnel_sync', rpc_method='call', - tunnel_ip='fake_tunnel_ip', - tunnel_type=None) - - def test_update_device_up(self): - rpcapi = agent_rpc.PluginApi(topics.PLUGIN) - self._test_ovs_api(rpcapi, None, - 'update_device_up', rpc_method='call', - device='fake_device', - agent_id='fake_agent_id', - host='fake_host') diff --git a/neutron/tests/unit/openvswitch/test_ovs_security_group.py b/neutron/tests/unit/openvswitch/test_ovs_security_group.py deleted file mode 100644 index 83f91cb7b90..00000000000 --- a/neutron/tests/unit/openvswitch/test_ovs_security_group.py +++ /dev/null @@ -1,101 +0,0 @@ -# Copyright 2013, Nachi Ueno, NTT MCL, Inc. -# All Rights Reserved. -# -# 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. - -import mock - -from neutron.api.v2 import attributes -from neutron.extensions import securitygroup as ext_sg -from neutron import manager -from neutron.tests.unit import test_extension_security_group as test_sg -from neutron.tests.unit import test_security_groups_rpc as test_sg_rpc - -PLUGIN_NAME = ('neutron.plugins.openvswitch.' - 'ovs_neutron_plugin.OVSNeutronPluginV2') -NOTIFIER = ('neutron.plugins.openvswitch.' - 'ovs_neutron_plugin.AgentNotifierApi') - - -class OpenvswitchSecurityGroupsTestCase(test_sg.SecurityGroupDBTestCase): - _plugin_name = PLUGIN_NAME - - def setUp(self, plugin=None): - test_sg_rpc.set_firewall_driver(test_sg_rpc.FIREWALL_HYBRID_DRIVER) - notifier_p = mock.patch(NOTIFIER) - notifier_cls = notifier_p.start() - self.notifier = mock.Mock() - notifier_cls.return_value = self.notifier - self._attribute_map_bk_ = {} - for item in attributes.RESOURCE_ATTRIBUTE_MAP: - self._attribute_map_bk_[item] = (attributes. - RESOURCE_ATTRIBUTE_MAP[item]. - copy()) - super(OpenvswitchSecurityGroupsTestCase, self).setUp(PLUGIN_NAME) - - def tearDown(self): - super(OpenvswitchSecurityGroupsTestCase, self).tearDown() - attributes.RESOURCE_ATTRIBUTE_MAP = self._attribute_map_bk_ - - -class TestOpenvswitchSGServerRpcCallBack( - OpenvswitchSecurityGroupsTestCase, - test_sg_rpc.SGServerRpcCallBackTestCase): - pass - - -class TestOpenvswitchSGServerRpcCallBackXML( - OpenvswitchSecurityGroupsTestCase, - test_sg_rpc.SGServerRpcCallBackTestCaseXML): - pass - - -class TestOpenvswitchSecurityGroups(OpenvswitchSecurityGroupsTestCase, - test_sg.TestSecurityGroups, - test_sg_rpc.SGNotificationTestMixin): - def test_security_group_get_port_from_device(self): - with self.network() as n: - with self.subnet(n): - with self.security_group() as sg: - security_group_id = sg['security_group']['id'] - res = self._create_port(self.fmt, n['network']['id']) - port = self.deserialize(self.fmt, res) - fixed_ips = port['port']['fixed_ips'] - data = {'port': {'fixed_ips': fixed_ips, - 'name': port['port']['name'], - ext_sg.SECURITYGROUPS: - [security_group_id]}} - - req = self.new_update_request('ports', data, - port['port']['id']) - res = self.deserialize(self.fmt, - req.get_response(self.api)) - port_id = res['port']['id'] - plugin = manager.NeutronManager.get_plugin() - port_dict = plugin.get_port_from_device(port_id) - self.assertEqual(port_id, port_dict['id']) - self.assertEqual([security_group_id], - port_dict[ext_sg.SECURITYGROUPS]) - self.assertEqual([], port_dict['security_group_rules']) - self.assertEqual([fixed_ips[0]['ip_address']], - port_dict['fixed_ips']) - self._delete('ports', port_id) - - def test_security_group_get_port_from_device_with_no_port(self): - plugin = manager.NeutronManager.get_plugin() - port_dict = plugin.get_port_from_device('bad_device_id') - self.assertIsNone(port_dict) - - -class TestOpenvswitchSecurityGroupsXML(TestOpenvswitchSecurityGroups): - fmt = 'xml' diff --git a/neutron/tests/unit/services/loadbalancer/test_agent_scheduler.py b/neutron/tests/unit/services/loadbalancer/test_agent_scheduler.py index 1d78c03d2fb..7d083922f65 100644 --- a/neutron/tests/unit/services/loadbalancer/test_agent_scheduler.py +++ b/neutron/tests/unit/services/loadbalancer/test_agent_scheduler.py @@ -61,8 +61,7 @@ class LBaaSAgentSchedulerTestCase(test_agent_ext_plugin.AgentDBTestMixIn, test_db_loadbalancer.LoadBalancerTestMixin, test_plugin.NeutronDbPluginV2TestCase): fmt = 'json' - plugin_str = ('neutron.plugins.openvswitch.' - 'ovs_neutron_plugin.OVSNeutronPluginV2') + plugin_str = 'neutron.plugins.ml2.plugin.Ml2Plugin' def setUp(self): # Save the global RESOURCE_ATTRIBUTE_MAP diff --git a/neutron/tests/unit/test_extension_extended_attribute.py b/neutron/tests/unit/test_extension_extended_attribute.py index 49f7dc32de4..5b008c346c8 100644 --- a/neutron/tests/unit/test_extension_extended_attribute.py +++ b/neutron/tests/unit/test_extension_extended_attribute.py @@ -26,7 +26,7 @@ from neutron.api.v2 import attributes from neutron.common import config from neutron import manager from neutron.plugins.common import constants -from neutron.plugins.openvswitch import ovs_neutron_plugin +from neutron.plugins.ml2 import plugin as ml2_plugin from neutron import quota from neutron.tests import base from neutron.tests.unit.extensions import extendedattribute as extattr @@ -41,7 +41,7 @@ extensions_path = ':'.join(neutron.tests.unit.extensions.__path__) class ExtensionExtendedAttributeTestPlugin( - ovs_neutron_plugin.OVSNeutronPluginV2): + ml2_plugin.Ml2Plugin): supported_extension_aliases = [ 'ext-obj-test', "extended-ext-attr" diff --git a/neutron/tests/unit/test_l3_plugin.py b/neutron/tests/unit/test_l3_plugin.py index 19838c3ec6f..ecb1ead448c 100644 --- a/neutron/tests/unit/test_l3_plugin.py +++ b/neutron/tests/unit/test_l3_plugin.py @@ -22,6 +22,7 @@ import netaddr from oslo.config import cfg from webob import exc +from neutron.api.rpc.agentnotifiers import l3_rpc_agent_api from neutron.api.rpc.handlers import l3_rpc from neutron.api.v2 import attributes from neutron.common import constants as l3_constants @@ -307,6 +308,13 @@ class TestL3NatAgentSchedulingServicePlugin(TestL3NatServicePlugin, supported_extension_aliases = ["router", "l3_agent_scheduler"] + def __init__(self): + super(TestL3NatAgentSchedulingServicePlugin, self).__init__() + self.router_scheduler = importutils.import_object( + cfg.CONF.router_scheduler_driver) + self.agent_notifiers.update( + {l3_constants.AGENT_TYPE_L3: l3_rpc_agent_api.L3AgentNotifyAPI()}) + class L3NATdbonlyMixinTestCase(base.BaseTestCase): From 623aa30b33692f8b1d1d12859281d23163829835 Mon Sep 17 00:00:00 2001 From: Kevin Benton Date: Thu, 2 Oct 2014 01:16:46 -0700 Subject: [PATCH 057/128] Fix setup of Neutron core plugin in VPNaaS UT One of the VPNaaS unit test setup routines creates and extension manager but passes it a class but it should be passing an instance of that class. Change-Id: I589cdda0674fdf8fa20d92c2609e1ba6966125d8 --- neutron/tests/unit/db/vpn/test_db_vpnaas.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/neutron/tests/unit/db/vpn/test_db_vpnaas.py b/neutron/tests/unit/db/vpn/test_db_vpnaas.py index 979240ed157..7b9404f02f7 100644 --- a/neutron/tests/unit/db/vpn/test_db_vpnaas.py +++ b/neutron/tests/unit/db/vpn/test_db_vpnaas.py @@ -434,7 +434,7 @@ class VPNPluginDbTestCase(VPNTestMixin, service_plugins=service_plugins ) self._subnet_id = uuidutils.generate_uuid() - self.core_plugin = TestVpnCorePlugin + self.core_plugin = TestVpnCorePlugin() self.plugin = vpn_plugin.VPNPlugin() ext_mgr = api_extensions.PluginAwareExtensionManager( extensions_path, From e90d6d6c833db51964037afd1c4aa1f521ee380a Mon Sep 17 00:00:00 2001 From: John Schwarz Date: Thu, 18 Sep 2014 11:24:53 +0300 Subject: [PATCH 058/128] Iterate over same port_id if more than one exists In certain cases where multiple ports can have the same external_ids:iface_id property, the ovs agent will arbitrarily choose one and ignore the rest. In case the chosen port isn't on the integration bridge the ovs agent is managing, an error is returned to the calling function. This is faulty since one of the other ports may belong to the correct bridge and it should be chosen instead. This is interesting for future L3 HA integration tests, where 2 different instances of l3 agents are needed to run on the same machine. In this case, both agents will register ports which have the same iface_id property, but obviously only one of the ports is relevant for each agent. Closes-bug: #1370914 Related-bug: #1374947 Change-Id: I05d70417e0f78ae51a9ce377fc93a3f12046b313 --- neutron/agent/linux/ovs_lib.py | 46 +++++++++---------- .../tests/unit/agent/linux/test_ovs_lib.py | 45 ++++++++++++++---- 2 files changed, 59 insertions(+), 32 deletions(-) diff --git a/neutron/agent/linux/ovs_lib.py b/neutron/agent/linux/ovs_lib.py index 2013ba170c6..64cf4eebbba 100644 --- a/neutron/agent/linux/ovs_lib.py +++ b/neutron/agent/linux/ovs_lib.py @@ -22,6 +22,7 @@ from neutron.agent.linux import ip_lib from neutron.agent.linux import utils from neutron.common import exceptions from neutron.openstack.common import excutils +from neutron.openstack.common.gettextutils import _LI, _LW from neutron.openstack.common import jsonutils from neutron.openstack.common import log as logging from neutron.plugins.common import constants @@ -401,29 +402,28 @@ class OVSBridge(BaseOVS): # an exeception which will be captured in this block. # We won't deal with the possibility of ovs-vsctl return multiple # rows since the interface identifier is unique - data = json_result['data'][0] - port_name = data[name_idx] - switch = get_bridge_for_iface(self.root_helper, port_name) - if switch != self.br_name: - LOG.info(_("Port: %(port_name)s is on %(switch)s," - " not on %(br_name)s"), {'port_name': port_name, - 'switch': switch, - 'br_name': self.br_name}) - return - ofport = data[ofport_idx] - # ofport must be integer otherwise return None - if not isinstance(ofport, int) or ofport == -1: - LOG.warn(_("ofport: %(ofport)s for VIF: %(vif)s is not a " - "positive integer"), {'ofport': ofport, - 'vif': port_id}) - return - # Find VIF's mac address in external ids - ext_id_dict = dict((item[0], item[1]) for item in - data[ext_ids_idx][1]) - vif_mac = ext_id_dict['attached-mac'] - return VifPort(port_name, ofport, port_id, vif_mac, self) - except Exception as e: - LOG.warn(_("Unable to parse interface details. Exception: %s"), e) + for data in json_result['data']: + port_name = data[name_idx] + switch = get_bridge_for_iface(self.root_helper, port_name) + if switch != self.br_name: + continue + ofport = data[ofport_idx] + # ofport must be integer otherwise return None + if not isinstance(ofport, int) or ofport == -1: + LOG.warn(_LW("ofport: %(ofport)s for VIF: %(vif)s is not a" + " positive integer"), {'ofport': ofport, + 'vif': port_id}) + return + # Find VIF's mac address in external ids + ext_id_dict = dict((item[0], item[1]) for item in + data[ext_ids_idx][1]) + vif_mac = ext_id_dict['attached-mac'] + return VifPort(port_name, ofport, port_id, vif_mac, self) + LOG.info(_LI("Port %(port_id)s not present in bridge %(br_name)s"), + {'port_id': port_id, 'br_name': self.br_name}) + except Exception as error: + LOG.warn(_LW("Unable to parse interface details. Exception: %s"), + error) return def delete_ports(self, all_ports=False): diff --git a/neutron/tests/unit/agent/linux/test_ovs_lib.py b/neutron/tests/unit/agent/linux/test_ovs_lib.py index 8d2444acce9..5af128cd9bc 100644 --- a/neutron/tests/unit/agent/linux/test_ovs_lib.py +++ b/neutron/tests/unit/agent/linux/test_ovs_lib.py @@ -822,8 +822,10 @@ class OVS_Lib_Test(base.BaseTestCase): with testtools.ExpectedException(Exception): self.br.get_local_port_mac() - def _test_get_vif_port_by_id(self, iface_id, data, br_name=None): + def _test_get_vif_port_by_id(self, iface_id, data, br_name=None, + extra_calls_and_values=None): headings = ['external_ids', 'name', 'ofport'] + # Each element is a tuple of (expected mock call, return_value) expected_calls_and_values = [ (mock.call(["ovs-vsctl", self.TO, "--format=json", @@ -836,9 +838,15 @@ class OVS_Lib_Test(base.BaseTestCase): if not br_name: br_name = self.BR_NAME + # Only the last information list in 'data' is used, so if more + # than one vif is described in data, the rest must be declared + # in the argument 'expected_calls_and_values'. + if extra_calls_and_values: + expected_calls_and_values.extend(extra_calls_and_values) + expected_calls_and_values.append( (mock.call(["ovs-vsctl", self.TO, - "iface-to-br", data[0][headings.index('name')]], + "iface-to-br", data[-1][headings.index('name')]], root_helper=self.root_helper), br_name)) tools.setup_mock_calls(self.execute, expected_calls_and_values) @@ -847,6 +855,15 @@ class OVS_Lib_Test(base.BaseTestCase): tools.verify_mock_calls(self.execute, expected_calls_and_values) return vif_port + def _assert_vif_port(self, vif_port, ofport=None, mac=None): + if not ofport or ofport == -1 or not mac: + self.assertIsNone(vif_port) + return + self.assertEqual('tap99id', vif_port.vif_id) + self.assertEqual(mac, vif_port.vif_mac) + self.assertEqual('tap99', vif_port.port_name) + self.assertEqual(ofport, vif_port.ofport) + def _test_get_vif_port_by_id_with_data(self, ofport=None, mac=None): external_ids = [["iface-id", "tap99id"], ["iface-status", "active"]] @@ -855,13 +872,7 @@ class OVS_Lib_Test(base.BaseTestCase): data = [[["map", external_ids], "tap99", ofport if ofport else '["set",[]]']] vif_port = self._test_get_vif_port_by_id('tap99id', data) - if not ofport or ofport == -1 or not mac: - self.assertIsNone(vif_port) - return - self.assertEqual(vif_port.vif_id, 'tap99id') - self.assertEqual(vif_port.vif_mac, 'aa:bb:cc:dd:ee:ff') - self.assertEqual(vif_port.port_name, 'tap99') - self.assertEqual(vif_port.ofport, ofport) + self._assert_vif_port(vif_port, ofport, mac) def test_get_vif_by_port_id_with_ofport(self): self._test_get_vif_port_by_id_with_data( @@ -887,6 +898,22 @@ class OVS_Lib_Test(base.BaseTestCase): self.assertIsNone(self._test_get_vif_port_by_id('tap99id', data, "br-ext")) + def test_get_vif_by_port_id_multiple_vifs(self): + external_ids = [["iface-id", "tap99id"], + ["iface-status", "active"], + ["attached-mac", "de:ad:be:ef:13:37"]] + data = [[["map", external_ids], "dummytap", 1], + [["map", external_ids], "tap99", 1337]] + extra_calls_and_values = [ + (mock.call(["ovs-vsctl", self.TO, + "iface-to-br", "dummytap"], + root_helper=self.root_helper), + "br-ext")] + + vif_port = self._test_get_vif_port_by_id( + 'tap99id', data, extra_calls_and_values=extra_calls_and_values) + self._assert_vif_port(vif_port, ofport=1337, mac="de:ad:be:ef:13:37") + class TestDeferredOVSBridge(base.BaseTestCase): From 28660b19f5ef861d7d2ceba04faa7f263bdf8a37 Mon Sep 17 00:00:00 2001 From: John Schwarz Date: Mon, 29 Sep 2014 16:28:18 +0300 Subject: [PATCH 059/128] L3 agent should always use a unique CONF object The l3 agent accepts an oslo configuration in its constructor and uses it throughout the code, but there are some references to the global configuration object held by the oslo library. Since HA functional tests need to create two agents, the configuration should be consistent throughout the code. The important difference between the agents is their 'host' value so that they create different namespaces, and 'state_path' value so the agents get their own filesystem root. Co-Authored-By: Assaf Muller Related-bug: #1374946 Change-Id: I3326889482681dd631ca59271ebd6a5d5129ae70 --- neutron/agent/l3_agent.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/neutron/agent/l3_agent.py b/neutron/agent/l3_agent.py index 308ab57edc3..9580b4561f7 100644 --- a/neutron/agent/l3_agent.py +++ b/neutron/agent/l3_agent.py @@ -776,7 +776,7 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback, def _get_metadata_proxy_callback(self, router_id): def callback(pid_file): - metadata_proxy_socket = cfg.CONF.metadata_proxy_socket + metadata_proxy_socket = self.conf.metadata_proxy_socket proxy_cmd = ['neutron-ns-metadata-proxy', '--pid_file=%s' % pid_file, '--metadata_proxy_socket=%s' % metadata_proxy_socket, @@ -784,7 +784,7 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback, '--state_path=%s' % self.conf.state_path, '--metadata_port=%s' % self.conf.metadata_port] proxy_cmd.extend(config.get_log_args( - cfg.CONF, 'neutron-ns-metadata-proxy-%s.log' % + self.conf, 'neutron-ns-metadata-proxy-%s.log' % router_id)) return proxy_cmd @@ -1949,7 +1949,7 @@ class L3NATAgentWithStateReport(L3NATAgent): 'interface_driver': self.conf.interface_driver}, 'start_flag': True, 'agent_type': l3_constants.AGENT_TYPE_L3} - report_interval = cfg.CONF.AGENT.report_interval + report_interval = self.conf.AGENT.report_interval self.use_call = True if report_interval: self.heartbeat = loopingcall.FixedIntervalLoopingCall( From 54c0c950b28cb0e9857e84d7a241b7c89ebc5ba5 Mon Sep 17 00:00:00 2001 From: mathieu-rohon Date: Thu, 2 Oct 2014 17:25:16 +0200 Subject: [PATCH 060/128] nit : missing a "%s" in a log message Change-Id: I171cc14d7d9b3917dea90cd36dfec7e58afaf626 --- .../plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py b/neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py index ffda751c28f..5cd6a1eac9b 100644 --- a/neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py +++ b/neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py @@ -316,7 +316,7 @@ class N1kvTrunkingPlugDriver(plug.PluginSidePluggingDriver): except exception_type: resource_ids.remove(item_id) except n_exc.NeutronException as e: - LOG.error(_('Failed to delete %(resource_name) %(net_id)s ' + LOG.error(_('Failed to delete %(resource_name)s %(net_id)s ' 'for service vm due to %(err)s'), {'resource_name': name, 'net_id': item_id, 'err': e}) From ea202faec972d55b169f1c596209b4129aa64caf Mon Sep 17 00:00:00 2001 From: Kevin Benton Date: Fri, 9 May 2014 21:54:39 -0700 Subject: [PATCH 061/128] Add comments to iptables rules to help debugging Adds comments to some of the iptables rules generated by neutron to assist with debugging. DocImpact Partial-Bug: #1265493 Change-Id: I7d9e37b9a43589dd7b142869b86fa15cb3fb329c --- etc/neutron.conf | 4 + neutron/agent/common/config.py | 9 + neutron/agent/linux/iptables_comments.py | 34 ++ neutron/agent/linux/iptables_firewall.py | 57 +- neutron/agent/linux/iptables_manager.py | 32 +- neutron/tests/unit/test_iptables_firewall.py | 556 ++++++++++++------ neutron/tests/unit/test_iptables_manager.py | 111 +++- .../tests/unit/test_security_groups_rpc.py | 2 + 8 files changed, 585 insertions(+), 220 deletions(-) create mode 100644 neutron/agent/linux/iptables_comments.py diff --git a/etc/neutron.conf b/etc/neutron.conf index 0836626424a..fadbeb3a089 100644 --- a/etc/neutron.conf +++ b/etc/neutron.conf @@ -545,6 +545,10 @@ lock_path = $state_path/lock # Change to "sudo" to skip the filtering and just run the comand directly # root_helper = sudo +# Set to true to add comments to generated iptables rules that describe +# each rule's purpose. (System must support the iptables comments module.) +# comment_iptables_rules = True + # =========== items for agent management extension ============= # seconds between nodes reporting state to server; should be less than # agent_down_time, best if it is half or less than agent_down_time diff --git a/neutron/agent/common/config.py b/neutron/agent/common/config.py index d9395609038..3ee41dde851 100644 --- a/neutron/agent/common/config.py +++ b/neutron/agent/common/config.py @@ -46,6 +46,11 @@ USE_NAMESPACES_OPTS = [ help=_("Allow overlapping IP.")), ] +IPTABLES_OPTS = [ + cfg.BoolOpt('comment_iptables_rules', default=True, + help=_("Add comments to iptables rules.")), +] + def get_log_args(conf, log_file_name): cmd_args = [] @@ -92,6 +97,10 @@ def register_use_namespaces_opts_helper(conf): conf.register_opts(USE_NAMESPACES_OPTS) +def register_iptables_opts(conf): + conf.register_opts(IPTABLES_OPTS, 'AGENT') + + def get_root_helper(conf): root_helper = conf.AGENT.root_helper if root_helper != 'sudo': diff --git a/neutron/agent/linux/iptables_comments.py b/neutron/agent/linux/iptables_comments.py new file mode 100644 index 00000000000..641b2ef8652 --- /dev/null +++ b/neutron/agent/linux/iptables_comments.py @@ -0,0 +1,34 @@ +# Copyright 2014 OpenStack Foundation +# +# 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. + +"""iptables comments""" + +# Do not translate these comments. These comments cannot contain a quote or +# an escape character because they will end up in a call to iptables and +# could interfere with other parameters. + +SNAT_OUT = 'Perform source NAT on outgoing traffic.' +UNMATCH_DROP = 'Default drop rule for unmatched traffic.' +VM_INT_SG = 'Direct traffic from the VM interface to the security group chain.' +SG_TO_VM_SG = 'Jump to the VM specific chain.' +INPUT_TO_SG = 'Direct incoming traffic from VM to the security group chain.' +PAIR_ALLOW = 'Allow traffic from defined IP/MAC pairs.' +PAIR_DROP = 'Drop traffic without an IP/MAC allow rule.' +DHCP_CLIENT = 'Allow DHCP client traffic.' +DHCP_SPOOF = 'Prevent DHCP Spoofing by VM.' +UNMATCHED = 'Send unmatched traffic to the fallback chain.' +STATELESS_DROP = 'Drop packets that are not associated with a state.' +ALLOW_ASSOC = ('Direct packets associated with a known session to the RETURN ' + 'chain.') +IPV6_RA_ALLOW = 'Allow IPv6 ICMP traffic to allow RA packets.' diff --git a/neutron/agent/linux/iptables_firewall.py b/neutron/agent/linux/iptables_firewall.py index 5f050b91aa3..54b39afbbce 100644 --- a/neutron/agent/linux/iptables_firewall.py +++ b/neutron/agent/linux/iptables_firewall.py @@ -18,6 +18,7 @@ from oslo.config import cfg from neutron.agent import firewall from neutron.agent.linux import ipset_manager +from neutron.agent.linux import iptables_comments as ic from neutron.agent.linux import iptables_manager from neutron.common import constants from neutron.common import ipv6_utils @@ -40,6 +41,7 @@ LINUX_DEV_LEN = 14 IPSET_CHAIN_LEN = 20 IPSET_CHANGE_BULK_THRESHOLD = 10 IPSET_ADD_BULK_THRESHOLD = 5 +comment_rule = iptables_manager.comment_rule class IptablesFirewallDriver(firewall.FirewallDriver): @@ -146,9 +148,11 @@ class IptablesFirewallDriver(firewall.FirewallDriver): def _add_fallback_chain_v4v6(self): self.iptables.ipv4['filter'].add_chain('sg-fallback') - self.iptables.ipv4['filter'].add_rule('sg-fallback', '-j DROP') + self.iptables.ipv4['filter'].add_rule('sg-fallback', '-j DROP', + comment=ic.UNMATCH_DROP) self.iptables.ipv6['filter'].add_chain('sg-fallback') - self.iptables.ipv6['filter'].add_rule('sg-fallback', '-j DROP') + self.iptables.ipv6['filter'].add_rule('sg-fallback', '-j DROP', + comment=ic.UNMATCH_DROP) def _add_chain_by_name_v4v6(self, chain_name): self.iptables.ipv6['filter'].add_chain(chain_name) @@ -158,12 +162,15 @@ class IptablesFirewallDriver(firewall.FirewallDriver): self.iptables.ipv4['filter'].ensure_remove_chain(chain_name) self.iptables.ipv6['filter'].ensure_remove_chain(chain_name) - def _add_rule_to_chain_v4v6(self, chain_name, ipv4_rules, ipv6_rules): + def _add_rule_to_chain_v4v6(self, chain_name, ipv4_rules, ipv6_rules, + comment=None): for rule in ipv4_rules: - self.iptables.ipv4['filter'].add_rule(chain_name, rule) + self.iptables.ipv4['filter'].add_rule(chain_name, rule, + comment=comment) for rule in ipv6_rules: - self.iptables.ipv6['filter'].add_rule(chain_name, rule) + self.iptables.ipv6['filter'].add_rule(chain_name, rule, + comment=comment) def _get_device_name(self, port): return port['device'] @@ -183,17 +190,20 @@ class IptablesFirewallDriver(firewall.FirewallDriver): '-j $%s' % (self.IPTABLES_DIRECTION[direction], device, SG_CHAIN)] - self._add_rule_to_chain_v4v6('FORWARD', jump_rule, jump_rule) + self._add_rule_to_chain_v4v6('FORWARD', jump_rule, jump_rule, + comment=ic.VM_INT_SG) # jump to the chain based on the device jump_rule = ['-m physdev --%s %s --physdev-is-bridged ' '-j $%s' % (self.IPTABLES_DIRECTION[direction], device, chain_name)] - self._add_rule_to_chain_v4v6(SG_CHAIN, jump_rule, jump_rule) + self._add_rule_to_chain_v4v6(SG_CHAIN, jump_rule, jump_rule, + comment=ic.SG_TO_VM_SG) if direction == EGRESS_DIRECTION: - self._add_rule_to_chain_v4v6('INPUT', jump_rule, jump_rule) + self._add_rule_to_chain_v4v6('INPUT', jump_rule, jump_rule, + comment=ic.INPUT_TO_SG) def _split_sgr_by_ethertype(self, security_group_rules): ipv4_sg_rules = [] @@ -222,12 +232,12 @@ class IptablesFirewallDriver(firewall.FirewallDriver): # of the list after the allowed_address_pair rules. table.add_rule(chain_name, '-m mac --mac-source %s -j RETURN' - % mac) + % mac, comment=ic.PAIR_ALLOW) else: table.add_rule(chain_name, '-m mac --mac-source %s -s %s -j RETURN' - % (mac, ip)) - table.add_rule(chain_name, '-j DROP') + % (mac, ip), comment=ic.PAIR_ALLOW) + table.add_rule(chain_name, '-j DROP', comment=ic.PAIR_DROP) rules.append('-j $%s' % chain_name) def _build_ipv4v6_mac_ip_list(self, mac, ip_address, mac_ipv4_pairs, @@ -239,9 +249,12 @@ class IptablesFirewallDriver(firewall.FirewallDriver): def _spoofing_rule(self, port, ipv4_rules, ipv6_rules): #Note(nati) allow dhcp or RA packet - ipv4_rules += ['-p udp -m udp --sport 68 --dport 67 -j RETURN'] - ipv6_rules += ['-p icmpv6 -j RETURN'] - ipv6_rules += ['-p udp -m udp --sport 546 --dport 547 -j RETURN'] + ipv4_rules += [comment_rule('-p udp -m udp --sport 68 --dport 67 ' + '-j RETURN', comment=ic.DHCP_CLIENT)] + ipv6_rules += [comment_rule('-p icmpv6 -j RETURN', + comment=ic.IPV6_RA_ALLOW)] + ipv6_rules += [comment_rule('-p udp -m udp --sport 546 --dport 547 ' + '-j RETURN', comment=None)] mac_ipv4_pairs = [] mac_ipv6_pairs = [] @@ -266,8 +279,10 @@ class IptablesFirewallDriver(firewall.FirewallDriver): def _drop_dhcp_rule(self, ipv4_rules, ipv6_rules): #Note(nati) Drop dhcp packet from VM - ipv4_rules += ['-p udp -m udp --sport 67 --dport 68 -j DROP'] - ipv6_rules += ['-p udp -m udp --sport 547 --dport 546 -j DROP'] + ipv4_rules += [comment_rule('-p udp -m udp --sport 67 --dport 68 ' + '-j DROP', comment=ic.DHCP_SPOOF)] + ipv6_rules += [comment_rule('-p udp -m udp --sport 547 --dport 546 ' + '-j DROP', comment=None)] def _accept_inbound_icmpv6(self): # Allow multicast listener, neighbor solicitation and @@ -454,18 +469,22 @@ class IptablesFirewallDriver(firewall.FirewallDriver): args += ['-j RETURN'] iptables_rules += [' '.join(args)] - iptables_rules += ['-j $sg-fallback'] + iptables_rules += [comment_rule('-j $sg-fallback', + comment=ic.UNMATCHED)] return iptables_rules def _drop_invalid_packets(self, iptables_rules): # Always drop invalid packets - iptables_rules += ['-m state --state ' 'INVALID -j DROP'] + iptables_rules += [comment_rule('-m state --state ' 'INVALID -j DROP', + comment=ic.STATELESS_DROP)] return iptables_rules def _allow_established(self, iptables_rules): # Allow established connections - iptables_rules += ['-m state --state RELATED,ESTABLISHED -j RETURN'] + iptables_rules += [comment_rule( + '-m state --state RELATED,ESTABLISHED -j RETURN', + comment=ic.ALLOW_ASSOC)] return iptables_rules def _protocol_arg(self, protocol): diff --git a/neutron/agent/linux/iptables_manager.py b/neutron/agent/linux/iptables_manager.py index 613a929cab6..6af69ad32ed 100644 --- a/neutron/agent/linux/iptables_manager.py +++ b/neutron/agent/linux/iptables_manager.py @@ -22,6 +22,10 @@ import inspect import os import re +from oslo.config import cfg + +from neutron.agent.common import config +from neutron.agent.linux import iptables_comments as ic from neutron.agent.linux import utils as linux_utils from neutron.common import utils from neutron.openstack.common import excutils @@ -51,6 +55,12 @@ MAX_CHAIN_LEN_NOWRAP = 28 IPTABLES_ERROR_LINES_OF_CONTEXT = 5 +def comment_rule(rule, comment): + if not cfg.CONF.AGENT.comment_iptables_rules or not comment: + return rule + return '%s -m comment --comment "%s"' % (rule, comment) + + def get_chain_name(chain_name, wrap=True): if wrap: return chain_name[:MAX_CHAIN_LEN_WRAP] @@ -67,13 +77,14 @@ class IptablesRule(object): """ def __init__(self, chain, rule, wrap=True, top=False, - binary_name=binary_name, tag=None): + binary_name=binary_name, tag=None, comment=None): self.chain = get_chain_name(chain, wrap) self.rule = rule self.wrap = wrap self.top = top self.wrap_name = binary_name[:16] self.tag = tag + self.comment = comment def __eq__(self, other): return ((self.chain == other.chain) and @@ -89,7 +100,7 @@ class IptablesRule(object): chain = '%s-%s' % (self.wrap_name, self.chain) else: chain = self.chain - return '-A %s %s' % (chain, self.rule) + return comment_rule('-A %s %s' % (chain, self.rule), self.comment) class IptablesTable(object): @@ -182,7 +193,8 @@ class IptablesTable(object): self.rules = [r for r in self.rules if jump_snippet not in r.rule] - def add_rule(self, chain, rule, wrap=True, top=False, tag=None): + def add_rule(self, chain, rule, wrap=True, top=False, tag=None, + comment=None): """Add a rule to the table. This is just like what you'd feed to iptables, just without @@ -202,7 +214,7 @@ class IptablesTable(object): self._wrap_target_chain(e, wrap) for e in rule.split(' ')) self.rules.append(IptablesRule(chain, rule, wrap, top, self.wrap_name, - tag)) + tag, comment)) def _wrap_target_chain(self, s, wrap): if s.startswith('$'): @@ -210,7 +222,7 @@ class IptablesTable(object): return s - def remove_rule(self, chain, rule, wrap=True, top=False): + def remove_rule(self, chain, rule, wrap=True, top=False, comment=None): """Remove a rule from a chain. Note: The rule must be exactly identical to the one that was added. @@ -225,10 +237,12 @@ class IptablesTable(object): self._wrap_target_chain(e, wrap) for e in rule.split(' ')) self.rules.remove(IptablesRule(chain, rule, wrap, top, - self.wrap_name)) + self.wrap_name, + comment=comment)) if not wrap: self.remove_rules.append(IptablesRule(chain, rule, wrap, top, - self.wrap_name)) + self.wrap_name, + comment=comment)) except ValueError: LOG.warn(_('Tried to remove rule that was not there:' ' %(chain)r %(rule)r %(wrap)r %(top)r'), @@ -288,6 +302,7 @@ class IptablesManager(object): else: self.execute = linux_utils.execute + config.register_iptables_opts(cfg.CONF) self.use_ipv6 = use_ipv6 self.root_helper = root_helper self.namespace = namespace @@ -351,7 +366,8 @@ class IptablesManager(object): # chain so that it's applied last. self.ipv4['nat'].add_chain('snat') self.ipv4['nat'].add_rule('neutron-postrouting-bottom', - '-j $snat', wrap=False) + '-j $snat', wrap=False, + comment=ic.SNAT_OUT) # And then we add a float-snat chain and jump to first thing in # the snat chain. diff --git a/neutron/tests/unit/test_iptables_firewall.py b/neutron/tests/unit/test_iptables_firewall.py index d94da9aac83..c4c0cafb250 100644 --- a/neutron/tests/unit/test_iptables_firewall.py +++ b/neutron/tests/unit/test_iptables_firewall.py @@ -19,6 +19,7 @@ import mock from oslo.config import cfg from neutron.agent.common import config as a_cfg +from neutron.agent.linux import iptables_comments as ic from neutron.agent.linux import iptables_firewall from neutron.agent import securitygroups_rpc as sg_cfg from neutron.common import constants @@ -42,6 +43,8 @@ class BaseIptablesFirewallTestCase(base.BaseTestCase): super(BaseIptablesFirewallTestCase, self).setUp() cfg.CONF.register_opts(a_cfg.ROOT_HELPER_OPTS, 'AGENT') cfg.CONF.register_opts(sg_cfg.security_group_opts, 'SECURITYGROUP') + cfg.CONF.register_opts(a_cfg.IPTABLES_OPTS, 'AGENT') + cfg.CONF.set_override('comment_iptables_rules', False, 'AGENT') self.utils_exec_p = mock.patch( 'neutron.agent.linux.utils.execute') self.utils_exec = self.utils_exec_p.start() @@ -71,55 +74,74 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): port = self._fake_port() self.firewall.prepare_port_filter(port) calls = [mock.call.add_chain('sg-fallback'), - mock.call.add_rule('sg-fallback', '-j DROP'), + mock.call.add_rule( + 'sg-fallback', '-j DROP', + comment=ic.UNMATCH_DROP), mock.call.ensure_remove_chain('sg-chain'), mock.call.add_chain('sg-chain'), mock.call.add_chain('ifake_dev'), mock.call.add_rule('FORWARD', '-m physdev --physdev-out tapfake_dev ' '--physdev-is-bridged ' - '-j $sg-chain'), + '-j $sg-chain', comment=ic.VM_INT_SG), mock.call.add_rule('sg-chain', '-m physdev --physdev-out tapfake_dev ' '--physdev-is-bridged ' - '-j $ifake_dev'), - mock.call.add_rule( - 'ifake_dev', '-m state --state INVALID -j DROP'), + '-j $ifake_dev', + comment=ic.SG_TO_VM_SG), mock.call.add_rule( 'ifake_dev', - '-m state --state RELATED,ESTABLISHED -j RETURN'), - mock.call.add_rule('ifake_dev', '-j $sg-fallback'), + '-m state --state INVALID -j DROP', + comment=None), + mock.call.add_rule( + 'ifake_dev', + '-m state --state RELATED,ESTABLISHED -j RETURN', + comment=None), + mock.call.add_rule( + 'ifake_dev', + '-j $sg-fallback', comment=None), mock.call.add_chain('ofake_dev'), mock.call.add_rule('FORWARD', '-m physdev --physdev-in tapfake_dev ' '--physdev-is-bridged ' - '-j $sg-chain'), + '-j $sg-chain', comment=ic.VM_INT_SG), mock.call.add_rule('sg-chain', '-m physdev --physdev-in tapfake_dev ' - '--physdev-is-bridged ' - '-j $ofake_dev'), + '--physdev-is-bridged -j $ofake_dev', + comment=ic.SG_TO_VM_SG), mock.call.add_rule('INPUT', '-m physdev --physdev-in tapfake_dev ' - '--physdev-is-bridged ' - '-j $ofake_dev'), + '--physdev-is-bridged -j $ofake_dev', + comment=ic.INPUT_TO_SG), mock.call.add_chain('sfake_dev'), mock.call.add_rule( 'sfake_dev', '-m mac --mac-source ff:ff:ff:ff:ff:ff ' - '-s 10.0.0.1 -j RETURN'), - mock.call.add_rule('sfake_dev', '-j DROP'), + '-s 10.0.0.1 -j RETURN', + comment=ic.PAIR_ALLOW), + mock.call.add_rule( + 'sfake_dev', '-j DROP', + comment=ic.PAIR_DROP), mock.call.add_rule( 'ofake_dev', - '-p udp -m udp --sport 68 --dport 67 -j RETURN'), - mock.call.add_rule('ofake_dev', '-j $sfake_dev'), + '-p udp -m udp --sport 68 --dport 67 -j RETURN', + comment=None), + mock.call.add_rule('ofake_dev', '-j $sfake_dev', + comment=None), mock.call.add_rule( 'ofake_dev', - '-p udp -m udp --sport 67 --dport 68 -j DROP'), - mock.call.add_rule( - 'ofake_dev', '-m state --state INVALID -j DROP'), + '-p udp -m udp --sport 67 --dport 68 -j DROP', + comment=None), mock.call.add_rule( 'ofake_dev', - '-m state --state RELATED,ESTABLISHED -j RETURN'), - mock.call.add_rule('ofake_dev', '-j $sg-fallback'), + '-m state --state INVALID -j DROP', comment=None), + mock.call.add_rule( + 'ofake_dev', + '-m state --state RELATED,ESTABLISHED -j RETURN', + comment=None), + mock.call.add_rule( + 'ofake_dev', + '-j $sg-fallback', + comment=None), mock.call.add_rule('sg-chain', '-j ACCEPT')] self.v4filter_inst.assert_has_calls(calls) @@ -127,7 +149,8 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): def test_filter_ipv4_ingress(self): rule = {'ethertype': 'IPv4', 'direction': 'ingress'} - ingress = mock.call.add_rule('ifake_dev', '-j RETURN') + ingress = mock.call.add_rule('ifake_dev', '-j RETURN', + comment=None) egress = None self._test_prepare_port_filter(rule, ingress, egress) @@ -136,7 +159,8 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): rule = {'ethertype': 'IPv4', 'direction': 'ingress', 'source_ip_prefix': prefix} - ingress = mock.call.add_rule('ifake_dev', '-s %s -j RETURN' % prefix) + ingress = mock.call.add_rule( + 'ifake_dev', '-s %s -j RETURN' % prefix, comment=None) egress = None self._test_prepare_port_filter(rule, ingress, egress) @@ -144,7 +168,8 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): rule = {'ethertype': 'IPv4', 'direction': 'ingress', 'protocol': 'tcp'} - ingress = mock.call.add_rule('ifake_dev', '-p tcp -m tcp -j RETURN') + ingress = mock.call.add_rule( + 'ifake_dev', '-p tcp -m tcp -j RETURN', comment=None) egress = None self._test_prepare_port_filter(rule, ingress, egress) @@ -155,7 +180,8 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): 'protocol': 'tcp', 'source_ip_prefix': prefix} ingress = mock.call.add_rule('ifake_dev', - '-s %s -p tcp -m tcp -j RETURN' % prefix) + '-s %s -p tcp -m tcp -j RETURN' % prefix, + comment=None) egress = None self._test_prepare_port_filter(rule, ingress, egress) @@ -163,7 +189,8 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): rule = {'ethertype': 'IPv4', 'direction': 'ingress', 'protocol': 'icmp'} - ingress = mock.call.add_rule('ifake_dev', '-p icmp -j RETURN') + ingress = mock.call.add_rule('ifake_dev', '-p icmp -j RETURN', + comment=None) egress = None self._test_prepare_port_filter(rule, ingress, egress) @@ -174,7 +201,8 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): 'protocol': 'icmp', 'source_ip_prefix': prefix} ingress = mock.call.add_rule( - 'ifake_dev', '-s %s -p icmp -j RETURN' % prefix) + 'ifake_dev', '-s %s -p icmp -j RETURN' % prefix, + comment=None) egress = None self._test_prepare_port_filter(rule, ingress, egress) @@ -185,7 +213,8 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): 'port_range_min': 10, 'port_range_max': 10} ingress = mock.call.add_rule('ifake_dev', - '-p tcp -m tcp --dport 10 -j RETURN') + '-p tcp -m tcp --dport 10 -j RETURN', + comment=None) egress = None self._test_prepare_port_filter(rule, ingress, egress) @@ -197,7 +226,8 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): 'port_range_max': 100} ingress = mock.call.add_rule( 'ifake_dev', - '-p tcp -m tcp -m multiport --dports 10:100 -j RETURN') + '-p tcp -m tcp -m multiport --dports 10:100 -j RETURN', + comment=None) egress = None self._test_prepare_port_filter(rule, ingress, egress) @@ -212,7 +242,7 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): ingress = mock.call.add_rule( 'ifake_dev', '-s %s -p tcp -m tcp -m multiport --dports 10:100 ' - '-j RETURN' % prefix) + '-j RETURN' % prefix, comment=None) egress = None self._test_prepare_port_filter(rule, ingress, egress) @@ -220,7 +250,8 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): rule = {'ethertype': 'IPv4', 'direction': 'ingress', 'protocol': 'udp'} - ingress = mock.call.add_rule('ifake_dev', '-p udp -m udp -j RETURN') + ingress = mock.call.add_rule( + 'ifake_dev', '-p udp -m udp -j RETURN', comment=None) egress = None self._test_prepare_port_filter(rule, ingress, egress) @@ -231,7 +262,8 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): 'protocol': 'udp', 'source_ip_prefix': prefix} ingress = mock.call.add_rule('ifake_dev', - '-s %s -p udp -m udp -j RETURN' % prefix) + '-s %s -p udp -m udp -j RETURN' % prefix, + comment=None) egress = None self._test_prepare_port_filter(rule, ingress, egress) @@ -242,7 +274,8 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): 'port_range_min': 10, 'port_range_max': 10} ingress = mock.call.add_rule('ifake_dev', - '-p udp -m udp --dport 10 -j RETURN') + '-p udp -m udp --dport 10 -j RETURN', + comment=None) egress = None self._test_prepare_port_filter(rule, ingress, egress) @@ -254,7 +287,8 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): 'port_range_max': 100} ingress = mock.call.add_rule( 'ifake_dev', - '-p udp -m udp -m multiport --dports 10:100 -j RETURN') + '-p udp -m udp -m multiport --dports 10:100 -j RETURN', + comment=None) egress = None self._test_prepare_port_filter(rule, ingress, egress) @@ -269,14 +303,14 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): ingress = mock.call.add_rule( 'ifake_dev', '-s %s -p udp -m udp -m multiport --dports 10:100 ' - '-j RETURN' % prefix) + '-j RETURN' % prefix, comment=None) egress = None self._test_prepare_port_filter(rule, ingress, egress) def test_filter_ipv4_egress(self): rule = {'ethertype': 'IPv4', 'direction': 'egress'} - egress = mock.call.add_rule('ofake_dev', '-j RETURN') + egress = mock.call.add_rule('ofake_dev', '-j RETURN', comment=None) ingress = None self._test_prepare_port_filter(rule, ingress, egress) @@ -285,7 +319,8 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): rule = {'ethertype': 'IPv4', 'direction': 'egress', 'source_ip_prefix': prefix} - egress = mock.call.add_rule('ofake_dev', '-s %s -j RETURN' % prefix) + egress = mock.call.add_rule( + 'ofake_dev', '-s %s -j RETURN' % prefix, comment=None) ingress = None self._test_prepare_port_filter(rule, ingress, egress) @@ -293,7 +328,8 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): rule = {'ethertype': 'IPv4', 'direction': 'egress', 'protocol': 'tcp'} - egress = mock.call.add_rule('ofake_dev', '-p tcp -m tcp -j RETURN') + egress = mock.call.add_rule( + 'ofake_dev', '-p tcp -m tcp -j RETURN', comment=None) ingress = None self._test_prepare_port_filter(rule, ingress, egress) @@ -304,7 +340,8 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): 'protocol': 'tcp', 'source_ip_prefix': prefix} egress = mock.call.add_rule('ofake_dev', - '-s %s -p tcp -m tcp -j RETURN' % prefix) + '-s %s -p tcp -m tcp -j RETURN' % prefix, + comment=None) ingress = None self._test_prepare_port_filter(rule, ingress, egress) @@ -312,7 +349,8 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): rule = {'ethertype': 'IPv4', 'direction': 'egress', 'protocol': 'icmp'} - egress = mock.call.add_rule('ofake_dev', '-p icmp -j RETURN') + egress = mock.call.add_rule('ofake_dev', '-p icmp -j RETURN', + comment=None) ingress = None self._test_prepare_port_filter(rule, ingress, egress) @@ -323,7 +361,8 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): 'protocol': 'icmp', 'source_ip_prefix': prefix} egress = mock.call.add_rule( - 'ofake_dev', '-s %s -p icmp -j RETURN' % prefix) + 'ofake_dev', '-s %s -p icmp -j RETURN' % prefix, + comment=None) ingress = None self._test_prepare_port_filter(rule, ingress, egress) @@ -336,7 +375,8 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): 'source_ip_prefix': prefix} egress = mock.call.add_rule( 'ofake_dev', - '-s %s -p icmp --icmp-type 8 -j RETURN' % prefix) + '-s %s -p icmp --icmp-type 8 -j RETURN' % prefix, + comment=None) ingress = None self._test_prepare_port_filter(rule, ingress, egress) @@ -349,7 +389,8 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): 'source_ip_prefix': prefix} egress = mock.call.add_rule( 'ofake_dev', - '-s %s -p icmp --icmp-type echo-request -j RETURN' % prefix) + '-s %s -p icmp --icmp-type echo-request -j RETURN' % prefix, + comment=None) ingress = None self._test_prepare_port_filter(rule, ingress, egress) @@ -363,7 +404,8 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): 'source_ip_prefix': prefix} egress = mock.call.add_rule( 'ofake_dev', - '-s %s -p icmp --icmp-type 8/0 -j RETURN' % prefix) + '-s %s -p icmp --icmp-type 8/0 -j RETURN' % prefix, + comment=None) ingress = None self._test_prepare_port_filter(rule, ingress, egress) @@ -374,7 +416,8 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): 'port_range_min': 10, 'port_range_max': 10} egress = mock.call.add_rule('ofake_dev', - '-p tcp -m tcp --dport 10 -j RETURN') + '-p tcp -m tcp --dport 10 -j RETURN', + comment=None) ingress = None self._test_prepare_port_filter(rule, ingress, egress) @@ -386,7 +429,8 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): 'port_range_max': 100} egress = mock.call.add_rule( 'ofake_dev', - '-p tcp -m tcp -m multiport --dports 10:100 -j RETURN') + '-p tcp -m tcp -m multiport --dports 10:100 -j RETURN', + comment=None) ingress = None self._test_prepare_port_filter(rule, ingress, egress) @@ -401,7 +445,7 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): egress = mock.call.add_rule( 'ofake_dev', '-s %s -p tcp -m tcp -m multiport --dports 10:100 ' - '-j RETURN' % prefix) + '-j RETURN' % prefix, comment=None) ingress = None self._test_prepare_port_filter(rule, ingress, egress) @@ -409,7 +453,8 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): rule = {'ethertype': 'IPv4', 'direction': 'egress', 'protocol': 'udp'} - egress = mock.call.add_rule('ofake_dev', '-p udp -m udp -j RETURN') + egress = mock.call.add_rule( + 'ofake_dev', '-p udp -m udp -j RETURN', comment=None) ingress = None self._test_prepare_port_filter(rule, ingress, egress) @@ -420,7 +465,8 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): 'protocol': 'udp', 'source_ip_prefix': prefix} egress = mock.call.add_rule('ofake_dev', - '-s %s -p udp -m udp -j RETURN' % prefix) + '-s %s -p udp -m udp -j RETURN' % prefix, + comment=None) ingress = None self._test_prepare_port_filter(rule, ingress, egress) @@ -431,7 +477,8 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): 'port_range_min': 10, 'port_range_max': 10} egress = mock.call.add_rule('ofake_dev', - '-p udp -m udp --dport 10 -j RETURN') + '-p udp -m udp --dport 10 -j RETURN', + comment=None) ingress = None self._test_prepare_port_filter(rule, ingress, egress) @@ -443,7 +490,8 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): 'port_range_max': 100} egress = mock.call.add_rule( 'ofake_dev', - '-p udp -m udp -m multiport --dports 10:100 -j RETURN') + '-p udp -m udp -m multiport --dports 10:100 -j RETURN', + comment=None) ingress = None self._test_prepare_port_filter(rule, ingress, egress) @@ -458,14 +506,15 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): egress = mock.call.add_rule( 'ofake_dev', '-s %s -p udp -m udp -m multiport --dports 10:100 ' - '-j RETURN' % prefix) + '-j RETURN' % prefix, comment=None) ingress = None self._test_prepare_port_filter(rule, ingress, egress) def test_filter_ipv6_ingress(self): rule = {'ethertype': 'IPv6', 'direction': 'ingress'} - ingress = mock.call.add_rule('ifake_dev', '-j RETURN') + ingress = mock.call.add_rule('ifake_dev', '-j RETURN', + comment=None) egress = None self._test_prepare_port_filter(rule, ingress, egress) @@ -474,7 +523,8 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): rule = {'ethertype': 'IPv6', 'direction': 'ingress', 'source_ip_prefix': prefix} - ingress = mock.call.add_rule('ifake_dev', '-s %s -j RETURN' % prefix) + ingress = mock.call.add_rule( + 'ifake_dev', '-s %s -j RETURN' % prefix, comment=None) egress = None self._test_prepare_port_filter(rule, ingress, egress) @@ -482,7 +532,8 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): rule = {'ethertype': 'IPv6', 'direction': 'ingress', 'protocol': 'tcp'} - ingress = mock.call.add_rule('ifake_dev', '-p tcp -m tcp -j RETURN') + ingress = mock.call.add_rule( + 'ifake_dev', '-p tcp -m tcp -j RETURN', comment=None) egress = None self._test_prepare_port_filter(rule, ingress, egress) @@ -493,7 +544,8 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): 'protocol': 'tcp', 'source_ip_prefix': prefix} ingress = mock.call.add_rule('ifake_dev', - '-s %s -p tcp -m tcp -j RETURN' % prefix) + '-s %s -p tcp -m tcp -j RETURN' % prefix, + comment=None) egress = None self._test_prepare_port_filter(rule, ingress, egress) @@ -504,7 +556,8 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): 'port_range_min': 10, 'port_range_max': 10} ingress = mock.call.add_rule('ifake_dev', - '-p tcp -m tcp --dport 10 -j RETURN') + '-p tcp -m tcp --dport 10 -j RETURN', + comment=None) egress = None self._test_prepare_port_filter(rule, ingress, egress) @@ -512,7 +565,8 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): rule = {'ethertype': 'IPv6', 'direction': 'ingress', 'protocol': 'icmp'} - ingress = mock.call.add_rule('ifake_dev', '-p icmpv6 -j RETURN') + ingress = mock.call.add_rule( + 'ifake_dev', '-p icmpv6 -j RETURN', comment=None) egress = None self._test_prepare_port_filter(rule, ingress, egress) @@ -523,7 +577,8 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): 'protocol': 'icmp', 'source_ip_prefix': prefix} ingress = mock.call.add_rule( - 'ifake_dev', '-s %s -p icmpv6 -j RETURN' % prefix) + 'ifake_dev', '-s %s -p icmpv6 -j RETURN' % prefix, + comment=None) egress = None self._test_prepare_port_filter(rule, ingress, egress) @@ -535,7 +590,8 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): 'port_range_max': 100} ingress = mock.call.add_rule( 'ifake_dev', - '-p tcp -m tcp -m multiport --dports 10:100 -j RETURN') + '-p tcp -m tcp -m multiport --dports 10:100 -j RETURN', + comment=None) egress = None self._test_prepare_port_filter(rule, ingress, egress) @@ -550,7 +606,7 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): ingress = mock.call.add_rule( 'ifake_dev', '-s %s -p tcp -m tcp -m multiport --dports 10:100 ' - '-j RETURN' % prefix) + '-j RETURN' % prefix, comment=None) egress = None self._test_prepare_port_filter(rule, ingress, egress) @@ -558,7 +614,8 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): rule = {'ethertype': 'IPv6', 'direction': 'ingress', 'protocol': 'udp'} - ingress = mock.call.add_rule('ifake_dev', '-p udp -m udp -j RETURN') + ingress = mock.call.add_rule( + 'ifake_dev', '-p udp -m udp -j RETURN', comment=None) egress = None self._test_prepare_port_filter(rule, ingress, egress) @@ -569,7 +626,8 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): 'protocol': 'udp', 'source_ip_prefix': prefix} ingress = mock.call.add_rule('ifake_dev', - '-s %s -p udp -m udp -j RETURN' % prefix) + '-s %s -p udp -m udp -j RETURN' % prefix, + comment=None) egress = None self._test_prepare_port_filter(rule, ingress, egress) @@ -580,7 +638,8 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): 'port_range_min': 10, 'port_range_max': 10} ingress = mock.call.add_rule('ifake_dev', - '-p udp -m udp --dport 10 -j RETURN') + '-p udp -m udp --dport 10 -j RETURN', + comment=None) egress = None self._test_prepare_port_filter(rule, ingress, egress) @@ -592,7 +651,8 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): 'port_range_max': 100} ingress = mock.call.add_rule( 'ifake_dev', - '-p udp -m udp -m multiport --dports 10:100 -j RETURN') + '-p udp -m udp -m multiport --dports 10:100 -j RETURN', + comment=None) egress = None self._test_prepare_port_filter(rule, ingress, egress) @@ -607,14 +667,14 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): ingress = mock.call.add_rule( 'ifake_dev', '-s %s -p udp -m udp -m multiport --dports 10:100 ' - '-j RETURN' % prefix) + '-j RETURN' % prefix, comment=None) egress = None self._test_prepare_port_filter(rule, ingress, egress) def test_filter_ipv6_egress(self): rule = {'ethertype': 'IPv6', 'direction': 'egress'} - egress = mock.call.add_rule('ofake_dev', '-j RETURN') + egress = mock.call.add_rule('ofake_dev', '-j RETURN', comment=None) ingress = None self._test_prepare_port_filter(rule, ingress, egress) @@ -623,7 +683,8 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): rule = {'ethertype': 'IPv6', 'direction': 'egress', 'source_ip_prefix': prefix} - egress = mock.call.add_rule('ofake_dev', '-s %s -j RETURN' % prefix) + egress = mock.call.add_rule( + 'ofake_dev', '-s %s -j RETURN' % prefix, comment=None) ingress = None self._test_prepare_port_filter(rule, ingress, egress) @@ -631,7 +692,8 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): rule = {'ethertype': 'IPv6', 'direction': 'egress', 'protocol': 'tcp'} - egress = mock.call.add_rule('ofake_dev', '-p tcp -m tcp -j RETURN') + egress = mock.call.add_rule( + 'ofake_dev', '-p tcp -m tcp -j RETURN', comment=None) ingress = None self._test_prepare_port_filter(rule, ingress, egress) @@ -642,7 +704,8 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): 'protocol': 'tcp', 'source_ip_prefix': prefix} egress = mock.call.add_rule('ofake_dev', - '-s %s -p tcp -m tcp -j RETURN' % prefix) + '-s %s -p tcp -m tcp -j RETURN' % prefix, + comment=None) ingress = None self._test_prepare_port_filter(rule, ingress, egress) @@ -650,7 +713,8 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): rule = {'ethertype': 'IPv6', 'direction': 'egress', 'protocol': 'icmp'} - egress = mock.call.add_rule('ofake_dev', '-p icmpv6 -j RETURN') + egress = mock.call.add_rule( + 'ofake_dev', '-p icmpv6 -j RETURN', comment=None) ingress = None self._test_prepare_port_filter(rule, ingress, egress) @@ -661,7 +725,8 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): 'protocol': 'icmp', 'source_ip_prefix': prefix} egress = mock.call.add_rule( - 'ofake_dev', '-s %s -p icmpv6 -j RETURN' % prefix) + 'ofake_dev', '-s %s -p icmpv6 -j RETURN' % prefix, + comment=None) ingress = None self._test_prepare_port_filter(rule, ingress, egress) @@ -674,7 +739,8 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): 'source_ip_prefix': prefix} egress = mock.call.add_rule( 'ofake_dev', - '-s %s -p icmpv6 --icmpv6-type 8 -j RETURN' % prefix) + '-s %s -p icmpv6 --icmpv6-type 8 -j RETURN' % prefix, + comment=None) ingress = None self._test_prepare_port_filter(rule, ingress, egress) @@ -687,7 +753,8 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): 'source_ip_prefix': prefix} egress = mock.call.add_rule( 'ofake_dev', - '-s %s -p icmpv6 --icmpv6-type echo-request -j RETURN' % prefix) + '-s %s -p icmpv6 --icmpv6-type echo-request -j RETURN' % prefix, + comment=None) ingress = None self._test_prepare_port_filter(rule, ingress, egress) @@ -701,7 +768,8 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): 'source_ip_prefix': prefix} egress = mock.call.add_rule( 'ofake_dev', - '-s %s -p icmpv6 --icmpv6-type 8/0 -j RETURN' % prefix) + '-s %s -p icmpv6 --icmpv6-type 8/0 -j RETURN' % prefix, + comment=None) ingress = None self._test_prepare_port_filter(rule, ingress, egress) @@ -712,7 +780,8 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): 'port_range_min': 10, 'port_range_max': 10} egress = mock.call.add_rule('ofake_dev', - '-p tcp -m tcp --dport 10 -j RETURN') + '-p tcp -m tcp --dport 10 -j RETURN', + comment=None) ingress = None self._test_prepare_port_filter(rule, ingress, egress) @@ -724,7 +793,8 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): 'port_range_max': 100} egress = mock.call.add_rule( 'ofake_dev', - '-p tcp -m tcp -m multiport --dports 10:100 -j RETURN') + '-p tcp -m tcp -m multiport --dports 10:100 -j RETURN', + comment=None) ingress = None self._test_prepare_port_filter(rule, ingress, egress) @@ -739,7 +809,7 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): egress = mock.call.add_rule( 'ofake_dev', '-s %s -p tcp -m tcp -m multiport --dports 10:100 ' - '-j RETURN' % prefix) + '-j RETURN' % prefix, comment=None) ingress = None self._test_prepare_port_filter(rule, ingress, egress) @@ -747,7 +817,8 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): rule = {'ethertype': 'IPv6', 'direction': 'egress', 'protocol': 'udp'} - egress = mock.call.add_rule('ofake_dev', '-p udp -m udp -j RETURN') + egress = mock.call.add_rule( + 'ofake_dev', '-p udp -m udp -j RETURN', comment=None) ingress = None self._test_prepare_port_filter(rule, ingress, egress) @@ -758,7 +829,8 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): 'protocol': 'udp', 'source_ip_prefix': prefix} egress = mock.call.add_rule('ofake_dev', - '-s %s -p udp -m udp -j RETURN' % prefix) + '-s %s -p udp -m udp -j RETURN' % prefix, + comment=None) ingress = None self._test_prepare_port_filter(rule, ingress, egress) @@ -769,7 +841,8 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): 'port_range_min': 10, 'port_range_max': 10} egress = mock.call.add_rule('ofake_dev', - '-p udp -m udp --dport 10 -j RETURN') + '-p udp -m udp --dport 10 -j RETURN', + comment=None) ingress = None self._test_prepare_port_filter(rule, ingress, egress) @@ -781,7 +854,8 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): 'port_range_max': 100} egress = mock.call.add_rule( 'ofake_dev', - '-p udp -m udp -m multiport --dports 10:100 -j RETURN') + '-p udp -m udp -m multiport --dports 10:100 -j RETURN', + comment=None) ingress = None self._test_prepare_port_filter(rule, ingress, egress) @@ -796,7 +870,7 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): egress = mock.call.add_rule( 'ofake_dev', '-s %s -p udp -m udp -m multiport --dports 10:100 ' - '-j RETURN' % prefix) + '-j RETURN' % prefix, comment=None) ingress = None self._test_prepare_port_filter(rule, ingress, egress) @@ -810,89 +884,113 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): filter_inst = self.v4filter_inst dhcp_rule = [mock.call.add_rule( 'ofake_dev', - '-p udp -m udp --sport 68 --dport 67 -j RETURN')] + '-p udp -m udp --sport 68 --dport 67 -j RETURN', + comment=None)] if ethertype == 'IPv6': filter_inst = self.v6filter_inst dhcp_rule = [mock.call.add_rule('ofake_dev', - '-p icmpv6 -j RETURN'), + '-p icmpv6 -j RETURN', + comment=None), mock.call.add_rule('ofake_dev', '-p udp -m udp ' '--sport 546 --dport 547 ' - '-j RETURN')] + '-j RETURN', comment=None)] sg = [rule] port['security_group_rules'] = sg self.firewall.prepare_port_filter(port) calls = [mock.call.add_chain('sg-fallback'), - mock.call.add_rule('sg-fallback', '-j DROP'), + mock.call.add_rule( + 'sg-fallback', + '-j DROP', + comment=ic.UNMATCH_DROP), mock.call.ensure_remove_chain('sg-chain'), mock.call.add_chain('sg-chain'), mock.call.add_chain('ifake_dev'), mock.call.add_rule('FORWARD', '-m physdev --physdev-out tapfake_dev ' '--physdev-is-bridged ' - '-j $sg-chain'), + '-j $sg-chain', comment=ic.VM_INT_SG), mock.call.add_rule('sg-chain', '-m physdev --physdev-out tapfake_dev ' '--physdev-is-bridged ' - '-j $ifake_dev'), + '-j $ifake_dev', + comment=ic.SG_TO_VM_SG), ] if ethertype == 'IPv6': for icmp6_type in constants.ICMPV6_ALLOWED_TYPES: calls.append( mock.call.add_rule('ifake_dev', '-p icmpv6 --icmpv6-type %s -j RETURN' % - icmp6_type)) - calls += [mock.call.add_rule('ifake_dev', - '-m state --state INVALID -j DROP'), - mock.call.add_rule( - 'ifake_dev', - '-m state --state RELATED,ESTABLISHED -j RETURN')] + icmp6_type, comment=None)) + calls += [ + mock.call.add_rule( + 'ifake_dev', + '-m state --state INVALID -j DROP', comment=None + ), + mock.call.add_rule( + 'ifake_dev', + '-m state --state RELATED,ESTABLISHED -j RETURN', + comment=None + ) + ] if ingress_expected_call: calls.append(ingress_expected_call) - calls += [mock.call.add_rule('ifake_dev', '-j $sg-fallback'), + calls += [mock.call.add_rule('ifake_dev', + '-j $sg-fallback', comment=None), mock.call.add_chain('ofake_dev'), mock.call.add_rule('FORWARD', '-m physdev --physdev-in tapfake_dev ' '--physdev-is-bridged ' - '-j $sg-chain'), + '-j $sg-chain', comment=ic.VM_INT_SG), mock.call.add_rule('sg-chain', '-m physdev --physdev-in tapfake_dev ' - '--physdev-is-bridged ' - '-j $ofake_dev'), + '--physdev-is-bridged -j $ofake_dev', + comment=ic.SG_TO_VM_SG), mock.call.add_rule('INPUT', '-m physdev --physdev-in tapfake_dev ' - '--physdev-is-bridged ' - '-j $ofake_dev'), + '--physdev-is-bridged -j $ofake_dev', + comment=ic.INPUT_TO_SG), mock.call.add_chain('sfake_dev'), mock.call.add_rule( 'sfake_dev', '-m mac --mac-source ff:ff:ff:ff:ff:ff -s %s -j RETURN' - % prefix), - mock.call.add_rule('sfake_dev', '-j DROP')] + % prefix, + comment=ic.PAIR_ALLOW), + mock.call.add_rule( + 'sfake_dev', '-j DROP', + comment=ic.PAIR_DROP)] calls += dhcp_rule - calls.append(mock.call.add_rule('ofake_dev', '-j $sfake_dev')) + calls.append(mock.call.add_rule('ofake_dev', '-j $sfake_dev', + comment=None)) if ethertype == 'IPv4': calls.append(mock.call.add_rule( 'ofake_dev', - '-p udp -m udp --sport 67 --dport 68 -j DROP')) + '-p udp -m udp --sport 67 --dport 68 -j DROP', + comment=None)) if ethertype == 'IPv6': calls.append(mock.call.add_rule( 'ofake_dev', - '-p udp -m udp --sport 547 --dport 546 -j DROP')) + '-p udp -m udp --sport 547 --dport 546 -j DROP', + comment=None)) - calls += [mock.call.add_rule( - 'ofake_dev', '-m state --state INVALID -j DROP'), - mock.call.add_rule( - 'ofake_dev', - '-m state --state RELATED,ESTABLISHED -j RETURN')] + calls += [ + mock.call.add_rule( + 'ofake_dev', + '-m state --state INVALID -j DROP', comment=None), + mock.call.add_rule( + 'ofake_dev', + '-m state --state RELATED,ESTABLISHED -j RETURN', + comment=None), + ] if egress_expected_call: calls.append(egress_expected_call) - calls += [mock.call.add_rule('ofake_dev', '-j $sg-fallback'), + calls += [mock.call.add_rule('ofake_dev', + '-j $sg-fallback', comment=None), mock.call.add_rule('sg-chain', '-j ACCEPT')] filter_inst.assert_has_calls(calls) @@ -909,57 +1007,80 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): self.firewall.remove_port_filter(port) self.firewall.remove_port_filter({'device': 'no-exist-device'}) calls = [mock.call.add_chain('sg-fallback'), - mock.call.add_rule('sg-fallback', '-j DROP'), + mock.call.add_rule( + 'sg-fallback', + '-j DROP', + comment=ic.UNMATCH_DROP), mock.call.ensure_remove_chain('sg-chain'), mock.call.add_chain('sg-chain'), mock.call.add_chain('ifake_dev'), mock.call.add_rule( 'FORWARD', '-m physdev --physdev-out tapfake_dev ' - '--physdev-is-bridged -j $sg-chain'), + '--physdev-is-bridged -j $sg-chain', + comment=ic.VM_INT_SG), mock.call.add_rule( 'sg-chain', '-m physdev --physdev-out tapfake_dev ' - '--physdev-is-bridged -j $ifake_dev'), - mock.call.add_rule( - 'ifake_dev', '-m state --state INVALID -j DROP'), + '--physdev-is-bridged -j $ifake_dev', + comment=ic.SG_TO_VM_SG), mock.call.add_rule( 'ifake_dev', - '-m state --state RELATED,ESTABLISHED -j RETURN'), - mock.call.add_rule('ifake_dev', '-j RETURN'), - mock.call.add_rule('ifake_dev', '-j $sg-fallback'), + '-m state --state INVALID -j DROP', comment=None), + mock.call.add_rule( + 'ifake_dev', + '-m state --state RELATED,ESTABLISHED -j RETURN', + comment=None), + mock.call.add_rule('ifake_dev', '-j RETURN', + comment=None), + mock.call.add_rule( + 'ifake_dev', + '-j $sg-fallback', comment=None), mock.call.add_chain('ofake_dev'), mock.call.add_rule( 'FORWARD', '-m physdev --physdev-in tapfake_dev ' - '--physdev-is-bridged -j $sg-chain'), + '--physdev-is-bridged -j $sg-chain', + comment=ic.VM_INT_SG), mock.call.add_rule( 'sg-chain', '-m physdev --physdev-in tapfake_dev ' - '--physdev-is-bridged -j $ofake_dev'), + '--physdev-is-bridged -j $ofake_dev', + comment=ic.SG_TO_VM_SG), mock.call.add_rule( 'INPUT', '-m physdev --physdev-in tapfake_dev ' - '--physdev-is-bridged -j $ofake_dev'), + '--physdev-is-bridged -j $ofake_dev', + comment=ic.INPUT_TO_SG), mock.call.add_chain('sfake_dev'), mock.call.add_rule( 'sfake_dev', '-m mac --mac-source ff:ff:ff:ff:ff:ff -s 10.0.0.1 ' - '-j RETURN'), - mock.call.add_rule('sfake_dev', '-j DROP'), + '-j RETURN', + comment=ic.PAIR_ALLOW), + mock.call.add_rule( + 'sfake_dev', '-j DROP', + comment=ic.PAIR_DROP), mock.call.add_rule( 'ofake_dev', - '-p udp -m udp --sport 68 --dport 67 -j RETURN'), - mock.call.add_rule('ofake_dev', '-j $sfake_dev'), + '-p udp -m udp --sport 68 --dport 67 -j RETURN', + comment=None), + mock.call.add_rule('ofake_dev', '-j $sfake_dev', + comment=None), mock.call.add_rule( 'ofake_dev', - '-p udp -m udp --sport 67 --dport 68 -j DROP'), + '-p udp -m udp --sport 67 --dport 68 -j DROP', + comment=None), mock.call.add_rule( - 'ofake_dev', '-m state --state INVALID -j DROP'), + 'ofake_dev', '-m state --state INVALID -j DROP', + comment=None), mock.call.add_rule( 'ofake_dev', - '-m state --state RELATED,ESTABLISHED -j RETURN'), - mock.call.add_rule('ofake_dev', '-j $sg-fallback'), + '-m state --state RELATED,ESTABLISHED -j RETURN', + comment=None), + mock.call.add_rule( + 'ofake_dev', + '-j $sg-fallback', comment=None), mock.call.add_rule('sg-chain', '-j ACCEPT'), mock.call.ensure_remove_chain('ifake_dev'), mock.call.ensure_remove_chain('ofake_dev'), @@ -970,51 +1091,70 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): mock.call.add_rule( 'FORWARD', '-m physdev --physdev-out tapfake_dev ' - '--physdev-is-bridged -j $sg-chain'), + '--physdev-is-bridged -j $sg-chain', + comment=ic.VM_INT_SG), mock.call.add_rule( 'sg-chain', '-m physdev --physdev-out tapfake_dev ' - '--physdev-is-bridged -j $ifake_dev'), + '--physdev-is-bridged -j $ifake_dev', + comment=ic.SG_TO_VM_SG), mock.call.add_rule( 'ifake_dev', - '-m state --state INVALID -j DROP'), + '-m state --state INVALID -j DROP', comment=None), mock.call.add_rule( 'ifake_dev', - '-m state --state RELATED,ESTABLISHED -j RETURN'), - mock.call.add_rule('ifake_dev', '-j $sg-fallback'), + '-m state --state RELATED,ESTABLISHED -j RETURN', + comment=None), + mock.call.add_rule( + 'ifake_dev', + '-j $sg-fallback', comment=None), mock.call.add_chain('ofake_dev'), mock.call.add_rule( 'FORWARD', '-m physdev --physdev-in tapfake_dev ' - '--physdev-is-bridged -j $sg-chain'), + '--physdev-is-bridged -j $sg-chain', + comment=ic.VM_INT_SG), mock.call.add_rule( 'sg-chain', '-m physdev --physdev-in tapfake_dev ' - '--physdev-is-bridged -j $ofake_dev'), + '--physdev-is-bridged -j $ofake_dev', + comment=ic.SG_TO_VM_SG), mock.call.add_rule( 'INPUT', '-m physdev --physdev-in tapfake_dev ' - '--physdev-is-bridged -j $ofake_dev'), + '--physdev-is-bridged -j $ofake_dev', + comment=ic.INPUT_TO_SG), mock.call.add_chain('sfake_dev'), mock.call.add_rule( 'sfake_dev', '-m mac --mac-source ff:ff:ff:ff:ff:ff -s 10.0.0.1 ' - '-j RETURN'), - mock.call.add_rule('sfake_dev', '-j DROP'), + '-j RETURN', + comment=ic.PAIR_ALLOW), + mock.call.add_rule( + 'sfake_dev', '-j DROP', + comment=ic.PAIR_DROP), mock.call.add_rule( 'ofake_dev', - '-p udp -m udp --sport 68 --dport 67 -j RETURN'), - mock.call.add_rule('ofake_dev', '-j $sfake_dev'), + '-p udp -m udp --sport 68 --dport 67 -j RETURN', + comment=None), + mock.call.add_rule('ofake_dev', '-j $sfake_dev', + comment=None), mock.call.add_rule( 'ofake_dev', - '-p udp -m udp --sport 67 --dport 68 -j DROP'), - mock.call.add_rule( - 'ofake_dev', '-m state --state INVALID -j DROP'), + '-p udp -m udp --sport 67 --dport 68 -j DROP', + comment=None), mock.call.add_rule( 'ofake_dev', - '-m state --state RELATED,ESTABLISHED -j RETURN'), - mock.call.add_rule('ofake_dev', '-j RETURN'), - mock.call.add_rule('ofake_dev', '-j $sg-fallback'), + '-m state --state INVALID -j DROP', comment=None), + mock.call.add_rule( + 'ofake_dev', + '-m state --state RELATED,ESTABLISHED -j RETURN', + comment=None), + mock.call.add_rule('ofake_dev', '-j RETURN', + comment=None), + mock.call.add_rule('ofake_dev', + '-j $sg-fallback', + comment=None), mock.call.add_rule('sg-chain', '-j ACCEPT'), mock.call.ensure_remove_chain('ifake_dev'), mock.call.ensure_remove_chain('ofake_dev'), @@ -1116,60 +1256,76 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): 'fixed_ips': ['10.0.0.1', 'fe80::1', '10.0.0.2']} self.firewall.prepare_port_filter(port) calls = [mock.call.add_chain('sg-fallback'), - mock.call.add_rule('sg-fallback', '-j DROP'), + mock.call.add_rule( + 'sg-fallback', '-j DROP', + comment=ic.UNMATCH_DROP), mock.call.ensure_remove_chain('sg-chain'), mock.call.add_chain('sg-chain'), mock.call.add_chain('ifake_dev'), mock.call.add_rule('FORWARD', '-m physdev --physdev-out tapfake_dev ' '--physdev-is-bridged ' - '-j $sg-chain'), + '-j $sg-chain', comment=ic.VM_INT_SG), mock.call.add_rule('sg-chain', '-m physdev --physdev-out tapfake_dev ' '--physdev-is-bridged ' - '-j $ifake_dev'), - mock.call.add_rule( - 'ifake_dev', '-m state --state INVALID -j DROP'), + '-j $ifake_dev', + comment=ic.SG_TO_VM_SG), mock.call.add_rule( 'ifake_dev', - '-m state --state RELATED,ESTABLISHED -j RETURN'), - mock.call.add_rule('ifake_dev', '-j $sg-fallback'), + '-m state --state INVALID -j DROP', comment=None), + mock.call.add_rule( + 'ifake_dev', + '-m state --state RELATED,ESTABLISHED -j RETURN', + comment=None), + mock.call.add_rule('ifake_dev', + '-j $sg-fallback', comment=None), mock.call.add_chain('ofake_dev'), mock.call.add_rule('FORWARD', '-m physdev --physdev-in tapfake_dev ' '--physdev-is-bridged ' - '-j $sg-chain'), + '-j $sg-chain', comment=ic.VM_INT_SG), mock.call.add_rule('sg-chain', '-m physdev --physdev-in tapfake_dev ' - '--physdev-is-bridged ' - '-j $ofake_dev'), + '--physdev-is-bridged -j $ofake_dev', + comment=ic.SG_TO_VM_SG), mock.call.add_rule('INPUT', '-m physdev --physdev-in tapfake_dev ' - '--physdev-is-bridged ' - '-j $ofake_dev'), + '--physdev-is-bridged -j $ofake_dev', + comment=ic.INPUT_TO_SG), mock.call.add_chain('sfake_dev'), mock.call.add_rule( 'sfake_dev', '-m mac --mac-source ff:ff:ff:ff:ff:ff -s 10.0.0.1 ' - '-j RETURN'), + '-j RETURN', + comment=ic.PAIR_ALLOW), mock.call.add_rule( 'sfake_dev', '-m mac --mac-source ff:ff:ff:ff:ff:ff -s 10.0.0.2 ' - '-j RETURN'), - mock.call.add_rule('sfake_dev', '-j DROP'), + '-j RETURN', + comment=ic.PAIR_ALLOW), + mock.call.add_rule( + 'sfake_dev', '-j DROP', + comment=ic.PAIR_DROP), mock.call.add_rule( 'ofake_dev', - '-p udp -m udp --sport 68 --dport 67 -j RETURN'), - mock.call.add_rule('ofake_dev', '-j $sfake_dev'), + '-p udp -m udp --sport 68 --dport 67 -j RETURN', + comment=None), + mock.call.add_rule('ofake_dev', '-j $sfake_dev', + comment=None), mock.call.add_rule( 'ofake_dev', - '-p udp -m udp --sport 67 --dport 68 -j DROP'), - mock.call.add_rule( - 'ofake_dev', '-m state --state INVALID -j DROP'), + '-p udp -m udp --sport 67 --dport 68 -j DROP', + comment=None), mock.call.add_rule( 'ofake_dev', - '-m state --state RELATED,ESTABLISHED -j RETURN'), - mock.call.add_rule('ofake_dev', '-j $sg-fallback'), + '-m state --state INVALID -j DROP', comment=None), + mock.call.add_rule( + 'ofake_dev', + '-m state --state RELATED,ESTABLISHED -j RETURN', + comment=None), + mock.call.add_rule('ofake_dev', + '-j $sg-fallback', comment=None), mock.call.add_rule('sg-chain', '-j ACCEPT')] self.v4filter_inst.assert_has_calls(calls) @@ -1179,55 +1335,71 @@ class IptablesFirewallTestCase(BaseIptablesFirewallTestCase): 'fixed_ips': []} self.firewall.prepare_port_filter(port) calls = [mock.call.add_chain('sg-fallback'), - mock.call.add_rule('sg-fallback', '-j DROP'), + mock.call.add_rule( + 'sg-fallback', '-j DROP', + comment=ic.UNMATCH_DROP), mock.call.ensure_remove_chain('sg-chain'), mock.call.add_chain('sg-chain'), mock.call.add_chain('ifake_dev'), mock.call.add_rule('FORWARD', '-m physdev --physdev-out tapfake_dev ' '--physdev-is-bridged ' - '-j $sg-chain'), + '-j $sg-chain', comment=ic.VM_INT_SG), mock.call.add_rule('sg-chain', '-m physdev --physdev-out tapfake_dev ' '--physdev-is-bridged ' - '-j $ifake_dev'), - mock.call.add_rule( - 'ifake_dev', '-m state --state INVALID -j DROP'), + '-j $ifake_dev', + comment=ic.SG_TO_VM_SG), mock.call.add_rule( 'ifake_dev', - '-m state --state RELATED,ESTABLISHED -j RETURN'), - mock.call.add_rule('ifake_dev', '-j $sg-fallback'), + '-m state --state INVALID -j DROP', comment=None), + mock.call.add_rule( + 'ifake_dev', + '-m state --state RELATED,ESTABLISHED -j RETURN', + comment=None), + mock.call.add_rule('ifake_dev', '-j $sg-fallback', + comment=None), mock.call.add_chain('ofake_dev'), mock.call.add_rule('FORWARD', '-m physdev --physdev-in tapfake_dev ' '--physdev-is-bridged ' - '-j $sg-chain'), + '-j $sg-chain', comment=ic.VM_INT_SG), mock.call.add_rule('sg-chain', '-m physdev --physdev-in tapfake_dev ' - '--physdev-is-bridged ' - '-j $ofake_dev'), + '--physdev-is-bridged -j $ofake_dev', + comment=ic.SG_TO_VM_SG), mock.call.add_rule('INPUT', '-m physdev --physdev-in tapfake_dev ' - '--physdev-is-bridged ' - '-j $ofake_dev'), + '--physdev-is-bridged -j $ofake_dev', + comment=ic.INPUT_TO_SG), mock.call.add_chain('sfake_dev'), mock.call.add_rule( 'sfake_dev', - '-m mac --mac-source ff:ff:ff:ff:ff:ff -j RETURN'), - mock.call.add_rule('sfake_dev', '-j DROP'), + '-m mac --mac-source ff:ff:ff:ff:ff:ff -j RETURN', + comment=ic.PAIR_ALLOW), + mock.call.add_rule( + 'sfake_dev', '-j DROP', + comment=ic.PAIR_DROP), mock.call.add_rule( 'ofake_dev', - '-p udp -m udp --sport 68 --dport 67 -j RETURN'), - mock.call.add_rule('ofake_dev', '-j $sfake_dev'), + '-p udp -m udp --sport 68 --dport 67 -j RETURN', + comment=None), + mock.call.add_rule('ofake_dev', '-j $sfake_dev', + comment=None), mock.call.add_rule( 'ofake_dev', - '-p udp -m udp --sport 67 --dport 68 -j DROP'), - mock.call.add_rule( - 'ofake_dev', '-m state --state INVALID -j DROP'), + '-p udp -m udp --sport 67 --dport 68 -j DROP', + comment=None), mock.call.add_rule( 'ofake_dev', - '-m state --state RELATED,ESTABLISHED -j RETURN'), - mock.call.add_rule('ofake_dev', '-j $sg-fallback'), + '-m state --state INVALID -j DROP', + comment=None), + mock.call.add_rule( + 'ofake_dev', + '-m state --state RELATED,ESTABLISHED -j RETURN', + comment=None), + mock.call.add_rule('ofake_dev', '-j $sg-fallback', + comment=None), mock.call.add_rule('sg-chain', '-j ACCEPT')] self.v4filter_inst.assert_has_calls(calls) diff --git a/neutron/tests/unit/test_iptables_manager.py b/neutron/tests/unit/test_iptables_manager.py index ac0f9ad8c0f..54380401d74 100644 --- a/neutron/tests/unit/test_iptables_manager.py +++ b/neutron/tests/unit/test_iptables_manager.py @@ -17,13 +17,17 @@ import inspect import os import mock +from oslo.config import cfg +from neutron.agent.common import config as a_cfg +from neutron.agent.linux import iptables_comments as ic from neutron.agent.linux import iptables_manager from neutron.tests import base from neutron.tests import tools -IPTABLES_ARG = {'bn': iptables_manager.binary_name} +IPTABLES_ARG = {'bn': iptables_manager.binary_name, + 'snat_out_comment': ic.SNAT_OUT} NAT_DUMP = ('# Generated by iptables_manager\n' '*nat\n' @@ -59,6 +63,107 @@ FILTER_DUMP = ('# Generated by iptables_manager\n' 'COMMIT\n' '# Completed by iptables_manager\n' % IPTABLES_ARG) +COMMENTED_NAT_DUMP = ( + '# Generated by iptables_manager\n' + '*nat\n' + ':neutron-postrouting-bottom - [0:0]\n' + ':%(bn)s-OUTPUT - [0:0]\n' + ':%(bn)s-POSTROUTING - [0:0]\n' + ':%(bn)s-PREROUTING - [0:0]\n' + ':%(bn)s-float-snat - [0:0]\n' + ':%(bn)s-snat - [0:0]\n' + '[0:0] -A PREROUTING -j %(bn)s-PREROUTING\n' + '[0:0] -A OUTPUT -j %(bn)s-OUTPUT\n' + '[0:0] -A POSTROUTING -j %(bn)s-POSTROUTING\n' + '[0:0] -A POSTROUTING -j neutron-postrouting-bottom\n' + '[0:0] -A neutron-postrouting-bottom -j %(bn)s-snat ' + '-m comment --comment "%(snat_out_comment)s"\n' + '[0:0] -A %(bn)s-snat -j ' + '%(bn)s-float-snat\n' + 'COMMIT\n' + '# Completed by iptables_manager\n' % IPTABLES_ARG) + + +class IptablesCommentsTestCase(base.BaseTestCase): + + def setUp(self): + super(IptablesCommentsTestCase, self).setUp() + cfg.CONF.register_opts(a_cfg.IPTABLES_OPTS, 'AGENT') + cfg.CONF.set_override('comment_iptables_rules', True, 'AGENT') + self.root_helper = 'sudo' + self.iptables = (iptables_manager. + IptablesManager(root_helper=self.root_helper)) + self.execute = mock.patch.object(self.iptables, "execute").start() + + def test_comments_short_enough(self): + for attr in dir(ic): + if not attr.startswith('__') and len(getattr(ic, attr)) > 255: + self.fail("Iptables comment %s is longer than 255 characters." + % attr) + + def test_add_filter_rule(self): + filter_dump_mod = ('# Generated by iptables_manager\n' + '*filter\n' + ':neutron-filter-top - [0:0]\n' + ':%(bn)s-FORWARD - [0:0]\n' + ':%(bn)s-INPUT - [0:0]\n' + ':%(bn)s-OUTPUT - [0:0]\n' + ':%(bn)s-filter - [0:0]\n' + ':%(bn)s-local - [0:0]\n' + '[0:0] -A FORWARD -j neutron-filter-top\n' + '[0:0] -A OUTPUT -j neutron-filter-top\n' + '[0:0] -A neutron-filter-top -j %(bn)s-local\n' + '[0:0] -A INPUT -j %(bn)s-INPUT\n' + '[0:0] -A OUTPUT -j %(bn)s-OUTPUT\n' + '[0:0] -A FORWARD -j %(bn)s-FORWARD\n' + '[0:0] -A %(bn)s-filter -j DROP\n' + '[0:0] -A %(bn)s-INPUT -s 0/0 -d 192.168.0.2 -j ' + '%(bn)s-filter\n' + 'COMMIT\n' + '# Completed by iptables_manager\n' + % IPTABLES_ARG) + + raw_dump = _generate_raw_dump(IPTABLES_ARG) + + expected_calls_and_values = [ + (mock.call(['iptables-save', '-c'], + root_helper=self.root_helper), + ''), + (mock.call(['iptables-restore', '-c'], + process_input=( + raw_dump + COMMENTED_NAT_DUMP + filter_dump_mod), + root_helper=self.root_helper), + None), + (mock.call(['iptables-save', '-c'], + root_helper=self.root_helper), + ''), + (mock.call(['iptables-restore', '-c'], + process_input=( + raw_dump + COMMENTED_NAT_DUMP + FILTER_DUMP), + root_helper=self.root_helper + ), + None), + ] + tools.setup_mock_calls(self.execute, expected_calls_and_values) + + self.iptables.ipv4['filter'].add_chain('filter') + self.iptables.ipv4['filter'].add_rule('filter', '-j DROP') + self.iptables.ipv4['filter'].add_rule('INPUT', + '-s 0/0 -d 192.168.0.2 -j' + ' %(bn)s-filter' % IPTABLES_ARG) + self.iptables.apply() + + self.iptables.ipv4['filter'].remove_rule('filter', '-j DROP') + self.iptables.ipv4['filter'].remove_rule('INPUT', + '-s 0/0 -d 192.168.0.2 -j' + ' %(bn)s-filter' + % IPTABLES_ARG) + self.iptables.ipv4['filter'].remove_chain('filter') + + self.iptables.apply() + + tools.verify_mock_calls(self.execute, expected_calls_and_values) + def _generate_raw_dump(iptables_args): return ('# Generated by iptables_manager\n' @@ -77,6 +182,8 @@ class IptablesManagerStateFulTestCase(base.BaseTestCase): def setUp(self): super(IptablesManagerStateFulTestCase, self).setUp() + cfg.CONF.register_opts(a_cfg.IPTABLES_OPTS, 'AGENT') + cfg.CONF.set_override('comment_iptables_rules', False, 'AGENT') self.root_helper = 'sudo' self.iptables = iptables_manager.IptablesManager( root_helper=self.root_helper) @@ -936,6 +1043,8 @@ class IptablesManagerStateLessTestCase(base.BaseTestCase): def setUp(self): super(IptablesManagerStateLessTestCase, self).setUp() + cfg.CONF.register_opts(a_cfg.IPTABLES_OPTS, 'AGENT') + cfg.CONF.set_override('comment_iptables_rules', False, 'AGENT') self.iptables = (iptables_manager.IptablesManager(state_less=True)) def test_nat_not_found(self): diff --git a/neutron/tests/unit/test_security_groups_rpc.py b/neutron/tests/unit/test_security_groups_rpc.py index 5a1d5dc97ed..af5ec53861a 100644 --- a/neutron/tests/unit/test_security_groups_rpc.py +++ b/neutron/tests/unit/test_security_groups_rpc.py @@ -2254,11 +2254,13 @@ class TestSecurityGroupAgentWithIptables(base.BaseTestCase): def setUp(self, defer_refresh_firewall=False, test_rpc_v1_1=True): super(TestSecurityGroupAgentWithIptables, self).setUp() config.register_root_helper(cfg.CONF) + config.register_iptables_opts(cfg.CONF) cfg.CONF.set_override( 'lock_path', '$state_path/lock') set_firewall_driver(self.FIREWALL_DRIVER) cfg.CONF.set_override('enable_ipset', False, group='SECURITYGROUP') + cfg.CONF.set_override('comment_iptables_rules', False, group='AGENT') self.agent = sg_rpc.SecurityGroupAgentRpcMixin() self.agent.context = None From 467bd9476defbb028f0fbfa26f01f76c32b701cd Mon Sep 17 00:00:00 2001 From: John Schwarz Date: Tue, 23 Sep 2014 14:41:54 +0300 Subject: [PATCH 062/128] L3 Agent should generate ns_name in a single place Currently the l3 agent has 2 places where it allows generating ns_name of specific router_ids (ie. qrouter-): in the RouterInfo's constructor, and in _cleanup_namespaces. This patch proposes a unification of this creation code with a property which lives in RouterInfo's namespace. A simpler fix was also made for snat_ns_name. This patch also offers a single way to initialize a new RouterInfo. Related-bug: #1374946 Related-bug: #1374947 Change-Id: Ia028236b73a22ff534acee00b46c86b134dc987e --- neutron/agent/l3_agent.py | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/neutron/agent/l3_agent.py b/neutron/agent/l3_agent.py index 308ab57edc3..4e73a0ee61e 100644 --- a/neutron/agent/l3_agent.py +++ b/neutron/agent/l3_agent.py @@ -254,7 +254,6 @@ class RouterInfo(l3_ha_agent.RouterMixin): self.use_namespaces = use_namespaces # Invoke the setter for establishing initial SNAT action self.router = router - self.ns_name = NS_PREFIX + router_id if use_namespaces else None self.iptables_manager = iptables_manager.IptablesManager( root_helper=root_helper, use_ipv6=use_ipv6, @@ -287,6 +286,10 @@ class RouterInfo(l3_ha_agent.RouterMixin): # Gateway port was removed, remove rules self._snat_action = 'remove_rules' + @property + def ns_name(self): + return NS_PREFIX + self.router_id if self.use_namespaces else None + def perform_snat_action(self, snat_callback, *args): # Process SNAT rules for attached subnets if self._snat_action: @@ -554,6 +557,14 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback, self.target_ex_net_id = None self.use_ipv6 = ipv6_utils.is_enabled() + def _get_router_info(self, router_id, router): + return RouterInfo( + router_id=router_id, + root_helper=self.root_helper, + use_namespaces=self.conf.use_namespaces, + router=router, + use_ipv6=self.use_ipv6) + def _check_config_params(self): """Check items in configuration files. @@ -591,13 +602,14 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback, def _cleanup_namespaces(self, router_namespaces, router_ids): """Destroy stale router namespaces on host when L3 agent restarts - This routine is called when self._clean_stale_namespaces is True. + This routine is called when self._clean_stale_namespaces is True. The argument router_namespaces is the list of all routers namespaces The argument router_ids is the list of ids for known routers. """ - ns_to_ignore = set(NS_PREFIX + id for id in router_ids) - ns_to_ignore.update(SNAT_NS_PREFIX + id for id in router_ids) + ns_to_ignore = set(self._get_router_info(id, router=None).ns_name + for id in router_ids) + ns_to_ignore.update(self.get_snat_ns_name(id) for id in router_ids) ns_to_destroy = router_namespaces - ns_to_ignore self._destroy_stale_router_namespaces(ns_to_destroy) @@ -727,9 +739,7 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback, raise Exception(msg) def _router_added(self, router_id, router): - ri = RouterInfo(router_id, self.root_helper, - self.conf.use_namespaces, router, - use_ipv6=self.use_ipv6) + ri = self._get_router_info(router_id, router) self.router_info[router_id] = ri if self.conf.use_namespaces: self._create_router_namespace(ri) From dea795263eb2968519d4235a8de98329c329e0e8 Mon Sep 17 00:00:00 2001 From: John Schwarz Date: Tue, 23 Sep 2014 15:24:47 +0300 Subject: [PATCH 063/128] Divide _cleanup_namespaces for easy extensibility This division of the function to 2 different functions allows for easier overwriting in the l3 test agent used by the HA functional tests, and later by the integration tests. Related-bug: #1374947 Change-Id: I8f277759747c8a142f5c023aa3511b00a886348c --- neutron/agent/l3_agent.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/neutron/agent/l3_agent.py b/neutron/agent/l3_agent.py index 4e73a0ee61e..59c68cf8de2 100644 --- a/neutron/agent/l3_agent.py +++ b/neutron/agent/l3_agent.py @@ -599,6 +599,12 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback, 'for namespace cleanup.')) return set() + def _get_routers_namespaces(self, router_ids): + namespaces = set(self._get_router_info(id, router=None).ns_name + for id in router_ids) + namespaces.update(self.get_snat_ns_name(id) for id in router_ids) + return namespaces + def _cleanup_namespaces(self, router_namespaces, router_ids): """Destroy stale router namespaces on host when L3 agent restarts @@ -607,9 +613,9 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback, The argument router_namespaces is the list of all routers namespaces The argument router_ids is the list of ids for known routers. """ - ns_to_ignore = set(self._get_router_info(id, router=None).ns_name - for id in router_ids) - ns_to_ignore.update(self.get_snat_ns_name(id) for id in router_ids) + # Don't destroy namespaces of routers this agent handles. + ns_to_ignore = self._get_routers_namespaces(router_ids) + ns_to_destroy = router_namespaces - ns_to_ignore self._destroy_stale_router_namespaces(ns_to_destroy) From d81856cc608660232005b5620f2378249f25e107 Mon Sep 17 00:00:00 2001 From: Julien Danjou Date: Tue, 7 Oct 2014 11:16:49 +0200 Subject: [PATCH 064/128] Remove sslutils from openstack.common This module has been imported but is not used. Let's remove it. Change-Id: I0cafdb7ddc00ce58b0724cee293f5dad6f4a1817 --- neutron/openstack/common/sslutils.py | 98 ---------------------------- openstack-common.conf | 1 - 2 files changed, 99 deletions(-) delete mode 100644 neutron/openstack/common/sslutils.py diff --git a/neutron/openstack/common/sslutils.py b/neutron/openstack/common/sslutils.py deleted file mode 100644 index 1d07937949e..00000000000 --- a/neutron/openstack/common/sslutils.py +++ /dev/null @@ -1,98 +0,0 @@ -# Copyright 2013 IBM Corp. -# -# 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. - -import os -import ssl - -from oslo.config import cfg - -from neutron.openstack.common.gettextutils import _ - - -ssl_opts = [ - cfg.StrOpt('ca_file', - default=None, - help="CA certificate file to use to verify " - "connecting clients"), - cfg.StrOpt('cert_file', - default=None, - help="Certificate file to use when starting " - "the server securely"), - cfg.StrOpt('key_file', - default=None, - help="Private key file to use when starting " - "the server securely"), -] - - -CONF = cfg.CONF -CONF.register_opts(ssl_opts, "ssl") - - -def is_enabled(): - cert_file = CONF.ssl.cert_file - key_file = CONF.ssl.key_file - ca_file = CONF.ssl.ca_file - use_ssl = cert_file or key_file - - if cert_file and not os.path.exists(cert_file): - raise RuntimeError(_("Unable to find cert_file : %s") % cert_file) - - if ca_file and not os.path.exists(ca_file): - raise RuntimeError(_("Unable to find ca_file : %s") % ca_file) - - if key_file and not os.path.exists(key_file): - raise RuntimeError(_("Unable to find key_file : %s") % key_file) - - if use_ssl and (not cert_file or not key_file): - raise RuntimeError(_("When running server in SSL mode, you must " - "specify both a cert_file and key_file " - "option value in your configuration file")) - - return use_ssl - - -def wrap(sock): - ssl_kwargs = { - 'server_side': True, - 'certfile': CONF.ssl.cert_file, - 'keyfile': CONF.ssl.key_file, - 'cert_reqs': ssl.CERT_NONE, - } - - if CONF.ssl.ca_file: - ssl_kwargs['ca_certs'] = CONF.ssl.ca_file - ssl_kwargs['cert_reqs'] = ssl.CERT_REQUIRED - - return ssl.wrap_socket(sock, **ssl_kwargs) - - -_SSL_PROTOCOLS = { - "tlsv1": ssl.PROTOCOL_TLSv1, - "sslv23": ssl.PROTOCOL_SSLv23, - "sslv3": ssl.PROTOCOL_SSLv3 -} - -try: - _SSL_PROTOCOLS["sslv2"] = ssl.PROTOCOL_SSLv2 -except AttributeError: - pass - - -def validate_ssl_version(version): - key = version.lower() - try: - return _SSL_PROTOCOLS[key] - except KeyError: - raise RuntimeError(_("Invalid SSL version : %s") % version) diff --git a/openstack-common.conf b/openstack-common.conf index 6e6c64e9e6c..85c627c69ff 100644 --- a/openstack-common.conf +++ b/openstack-common.conf @@ -25,7 +25,6 @@ module=periodic_task module=policy module=processutils module=service -module=sslutils module=strutils module=systemd module=threadgroup From 24e4110eb284078775496501ff81630eb1619c11 Mon Sep 17 00:00:00 2001 From: Kevin Benton Date: Tue, 7 Oct 2014 04:34:41 -0700 Subject: [PATCH 065/128] Big Switch: Don't clear hash before sync This patch removes the step of clearing the consistency hash from the DB before a topology sync. This will ensure that inconsistency will be detected if the topology sync fails. This logic was originally there to make sure the hash header was not present on the topology sync call to the backend. However, the hash header is ignored by the backend in a sync call so it wasn't necessary. Closes-Bug: #1379510 Change-Id: I2d58fa2aea3b692834d64192d06ace727c7df8a0 --- neutron/plugins/bigswitch/servermanager.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/neutron/plugins/bigswitch/servermanager.py b/neutron/plugins/bigswitch/servermanager.py index 6fdbec36a6c..0a86ff43743 100644 --- a/neutron/plugins/bigswitch/servermanager.py +++ b/neutron/plugins/bigswitch/servermanager.py @@ -447,8 +447,6 @@ class ServerPool(object): if not self.get_topo_function: raise cfg.Error(_('Server requires synchronization, ' 'but no topology function was defined.')) - # The hash was incorrect so it needs to be removed - hash_handler.put_hash('') data = self.get_topo_function(**self.get_topo_function_args) active_server.rest_call('PUT', TOPOLOGY_PATH, data, timeout=None) From 8f05708eb6d6a5a9cae7a7656873e081aad61eca Mon Sep 17 00:00:00 2001 From: Miguel Angel Ajo Date: Fri, 19 Sep 2014 18:59:58 +0200 Subject: [PATCH 066/128] Modify the ProcessMonitor class to have one less config parameter It's a follow up patch, as agreed on the ProcessMonitor review patch to coalesce the check_child_processes parameter into check_child_process_interval. When this parameter is set to 0, the feature is disabled. Change-Id: I2d4d8c6a6b7c17d42d8455c98968f75bcefbb689 Closes-Bug: 1371705 --- neutron/agent/linux/external_process.py | 8 +++----- .../tests/functional/agent/linux/test_process_monitor.py | 1 - 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/neutron/agent/linux/external_process.py b/neutron/agent/linux/external_process.py index b9d581210a5..ffea1247ac3 100644 --- a/neutron/agent/linux/external_process.py +++ b/neutron/agent/linux/external_process.py @@ -30,14 +30,12 @@ OPTS = [ cfg.StrOpt('external_pids', default='$state_path/external/pids', help=_('Location to store child pid files')), - cfg.BoolOpt('check_child_processes', default=False, - help=_("Periodically check child processes")), cfg.StrOpt('check_child_processes_action', default='respawn', choices=['respawn', 'exit'], help=_('Action to be executed when a child process dies')), - cfg.IntOpt('check_child_processes_interval', default=60, + cfg.IntOpt('check_child_processes_interval', default=0, help=_('Interval between checks of child process liveness ' - '(seconds)')), + '(seconds), use 0 to disable')), ] @@ -156,7 +154,7 @@ class ProcessMonitor(object): self._process_managers = {} - if self._config.check_child_processes: + if self._config.check_child_processes_interval: self._spawn_checking_thread() def enable(self, uuid, cmd_callback, namespace=None, service=None, diff --git a/neutron/tests/functional/agent/linux/test_process_monitor.py b/neutron/tests/functional/agent/linux/test_process_monitor.py index 8327a38b1ef..4d3b69d279e 100644 --- a/neutron/tests/functional/agent/linux/test_process_monitor.py +++ b/neutron/tests/functional/agent/linux/test_process_monitor.py @@ -29,7 +29,6 @@ class BaseTestProcessMonitor(base.BaseSudoTestCase): def setUp(self): super(BaseTestProcessMonitor, self).setUp() self._exit_handler_called = False - cfg.CONF.set_override('check_child_processes', True) cfg.CONF.set_override('check_child_processes_interval', 1) self._child_processes = [] self._ext_processes = None From 076a5f27486319139d3d1dfac592284656ef7eb7 Mon Sep 17 00:00:00 2001 From: OpenStack Proposal Bot Date: Tue, 7 Oct 2014 19:13:11 +0000 Subject: [PATCH 067/128] Updated from global requirements Change-Id: I0e72933320ac6f49b55ef9782c6c19fb7e997bcb --- requirements.txt | 12 ++++++------ test-requirements.txt | 6 +++--- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/requirements.txt b/requirements.txt index 88835147d10..e9e2db153fd 100644 --- a/requirements.txt +++ b/requirements.txt @@ -12,7 +12,7 @@ Babel>=1.3 eventlet>=0.15.1 greenlet>=0.3.2 httplib2>=0.7.5 -requests>=1.2.1,!=2.4.0 +requests>=2.2.0,!=2.4.0 iso8601>=0.1.9 jsonrpclib Jinja2 @@ -24,10 +24,10 @@ WebOb>=1.2.3 python-keystoneclient>=0.10.0 alembic>=0.6.4 six>=1.7.0 -stevedore>=0.14 -oslo.config>=1.4.0.0a3 -oslo.db>=0.4.0 # Apache-2.0 -oslo.messaging>=1.4.0.0a3 -oslo.rootwrap>=1.3.0.0a1 +stevedore>=1.0.0 # Apache-2.0 +oslo.config>=1.4.0 # Apache-2.0 +oslo.db>=1.0.0 # Apache-2.0 +oslo.messaging>=1.4.0 +oslo.rootwrap>=1.3.0 python-novaclient>=2.18.0 diff --git a/test-requirements.txt b/test-requirements.txt index 22375e3b6e5..673a774f0f5 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -3,7 +3,7 @@ # process, which may cause wedges in the gate later. hacking>=0.9.2,<0.10 -cliff>=1.6.0 +cliff>=1.7.0 # Apache-2.0 coverage>=3.6 discover fixtures>=0.3.14 @@ -12,11 +12,11 @@ python-subunit>=0.0.18 ordereddict requests-mock>=0.4.0 # Apache-2.0 sphinx>=1.1.2,!=1.2.0,<1.3 -oslosphinx>=2.2.0.0a2 +oslosphinx>=2.2.0 # Apache-2.0 testrepository>=0.0.18 testtools>=0.9.34 testscenarios>=0.4 WebTest>=2.0 -oslotest>=1.1.0 +oslotest>=1.1.0 # Apache-2.0 psycopg2 MySQL-python From 29250949012e9c0a60b0ddb56ddbf18d7b68106b Mon Sep 17 00:00:00 2001 From: Brian Haley Date: Fri, 3 Oct 2014 17:32:01 -0400 Subject: [PATCH 068/128] Teach DHCP Agent about DVR router interfaces When DVR is enabled and enable_isolated_metadata=True, the DHCP agent should only inject a metadata host route when there is no port with the gateway IP address configured on the subnet. Add a check for DEVICE_OWNER_DVR_INTERFACE when we look at each port's device_owner field, otherwise it will always add this route to the opts file when DVR is enabled. Change-Id: I3ff3bb85105b8215b36535983016d8c0ff3d8cb7 Closes-bug: #1377307 --- neutron/agent/linux/dhcp.py | 3 +- neutron/tests/unit/test_dhcp_agent.py | 53 ++++++++++++++++++++++++--- neutron/tests/unit/test_linux_dhcp.py | 30 ++++++++++++++- 3 files changed, 79 insertions(+), 7 deletions(-) diff --git a/neutron/agent/linux/dhcp.py b/neutron/agent/linux/dhcp.py index aba75af5716..51e89913d48 100644 --- a/neutron/agent/linux/dhcp.py +++ b/neutron/agent/linux/dhcp.py @@ -730,7 +730,8 @@ class Dnsmasq(DhcpLocalProcess): subnets = dict((subnet.id, subnet) for subnet in network.subnets) for port in network.ports: - if port.device_owner != constants.DEVICE_OWNER_ROUTER_INTF: + if port.device_owner not in (constants.DEVICE_OWNER_ROUTER_INTF, + constants.DEVICE_OWNER_DVR_INTERFACE): continue for alloc in port.fixed_ips: if subnets[alloc.subnet_id].gateway_ip == alloc.ip_address: diff --git a/neutron/tests/unit/test_dhcp_agent.py b/neutron/tests/unit/test_dhcp_agent.py index c6f98643fe8..cae87c692b5 100644 --- a/neutron/tests/unit/test_dhcp_agent.py +++ b/neutron/tests/unit/test_dhcp_agent.py @@ -72,6 +72,8 @@ fake_meta_subnet = dhcp.DictModel(dict(id='bbbbbbbb-1111-2222-bbbbbbbbbbbb', fake_fixed_ip1 = dhcp.DictModel(dict(id='', subnet_id=fake_subnet1.id, ip_address='172.9.9.9')) +fake_fixed_ip2 = dhcp.DictModel(dict(id='', subnet_id=fake_subnet1.id, + ip_address='172.9.9.10')) fake_meta_fixed_ip = dhcp.DictModel(dict(id='', subnet=fake_meta_subnet, ip_address='169.254.169.254')) fake_allocation_pool_subnet1 = dhcp.DictModel(dict(id='', start='172.9.9.2', @@ -89,7 +91,7 @@ fake_port2 = dhcp.DictModel(dict(id='12345678-1234-aaaa-123456789000', device_owner='', mac_address='aa:bb:cc:dd:ee:99', network_id='12345678-1234-5678-1234567890ab', - fixed_ips=[])) + fixed_ips=[fake_fixed_ip2])) fake_meta_port = dhcp.DictModel(dict(id='12345678-1234-aaaa-1234567890ab', mac_address='aa:bb:cc:dd:ee:ff', @@ -98,6 +100,13 @@ fake_meta_port = dhcp.DictModel(dict(id='12345678-1234-aaaa-1234567890ab', device_id='forzanapoli', fixed_ips=[fake_meta_fixed_ip])) +fake_dist_port = dhcp.DictModel(dict(id='12345678-1234-aaaa-1234567890ab', + mac_address='aa:bb:cc:dd:ee:ff', + network_id='12345678-1234-5678-1234567890ab', + device_owner=const.DEVICE_OWNER_DVR_INTERFACE, + device_id='forzanapoli', + fixed_ips=[fake_meta_fixed_ip])) + fake_network = dhcp.NetModel(True, dict(id='12345678-1234-5678-1234567890ab', tenant_id='aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa', admin_state_up=True, @@ -112,6 +121,14 @@ isolated_network = dhcp.NetModel( subnets=[fake_subnet1], ports=[fake_port1])) +nonisolated_dist_network = dhcp.NetModel( + True, dict( + id='12345678-1234-5678-1234567890ab', + tenant_id='aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa', + admin_state_up=True, + subnets=[fake_subnet1], + ports=[fake_port1, fake_port2])) + empty_network = dhcp.NetModel( True, dict( id='12345678-1234-5678-1234567890ab', @@ -127,6 +144,13 @@ fake_meta_network = dhcp.NetModel( subnets=[fake_meta_subnet], ports=[fake_meta_port])) +fake_dist_network = dhcp.NetModel( + True, dict(id='12345678-1234-5678-1234567890ab', + tenant_id='aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa', + admin_state_up=True, + subnets=[fake_meta_subnet], + ports=[fake_meta_port, fake_dist_port])) + fake_down_network = dhcp.NetModel( True, dict(id='12345678-dddd-dddd-1234567890ab', tenant_id='aaaaaaaa-aaaa-aaaa-aaaaaaaaaaaa', @@ -540,13 +564,26 @@ class TestDhcpAgentEventHandler(base.BaseTestCase): def test_enable_dhcp_helper_enable_metadata_nonisolated_network(self): nonisolated_network = copy.deepcopy(isolated_network) - nonisolated_network.ports[0].device_owner = "network:router_interface" + nonisolated_network.ports[0].device_owner = ( + const.DEVICE_OWNER_ROUTER_INTF) nonisolated_network.ports[0].fixed_ips[0].ip_address = '172.9.9.1' self._enable_dhcp_helper(nonisolated_network, enable_isolated_metadata=True, is_isolated_network=False) + def test_enable_dhcp_helper_enable_metadata_nonisolated_dist_network(self): + nonisolated_dist_network.ports[0].device_owner = ( + const.DEVICE_OWNER_ROUTER_INTF) + nonisolated_dist_network.ports[0].fixed_ips[0].ip_address = '172.9.9.1' + nonisolated_dist_network.ports[1].device_owner = ( + const.DEVICE_OWNER_DVR_INTERFACE) + nonisolated_dist_network.ports[1].fixed_ips[0].ip_address = '172.9.9.1' + + self._enable_dhcp_helper(nonisolated_dist_network, + enable_isolated_metadata=True, + is_isolated_network=False) + def test_enable_dhcp_helper_enable_metadata_empty_network(self): self._enable_dhcp_helper(empty_network, enable_isolated_metadata=True, @@ -685,7 +722,7 @@ class TestDhcpAgentEventHandler(base.BaseTestCase): mock.call().disable() ]) - def test_enable_isolated_metadata_proxy_with_metadata_network(self): + def _test_metadata_network(self, network): cfg.CONF.set_override('enable_metadata_network', True) cfg.CONF.set_override('debug', True) cfg.CONF.set_override('verbose', False) @@ -695,7 +732,7 @@ class TestDhcpAgentEventHandler(base.BaseTestCase): # Ensure the mock is restored if this test fail try: with mock.patch(class_path) as ip_wrapper: - self.dhcp.enable_isolated_metadata_proxy(fake_meta_network) + self.dhcp.enable_isolated_metadata_proxy(network) ip_wrapper.assert_has_calls([mock.call( 'sudo', 'qdhcp-12345678-1234-5678-1234567890ab'), @@ -708,11 +745,17 @@ class TestDhcpAgentEventHandler(base.BaseTestCase): mock.ANY, '--debug', ('--log-file=neutron-ns-metadata-proxy-%s.log' % - fake_meta_network.id)], addl_env=None) + network.id)], addl_env=None) ]) finally: self.external_process_p.start() + def test_enable_isolated_metadata_proxy_with_metadata_network(self): + self._test_metadata_network(fake_meta_network) + + def test_enable_isolated_metadata_proxy_with_dist_network(self): + self._test_metadata_network(fake_dist_network) + def test_network_create_end(self): payload = dict(network=dict(id=fake_network.id)) diff --git a/neutron/tests/unit/test_linux_dhcp.py b/neutron/tests/unit/test_linux_dhcp.py index b3090e1b575..a0187369b82 100644 --- a/neutron/tests/unit/test_linux_dhcp.py +++ b/neutron/tests/unit/test_linux_dhcp.py @@ -130,8 +130,9 @@ class FakeRouterPort: 'dddddddd-dddd-dddd-dddd-dddddddddddd')] mac_address = '00:00:0f:rr:rr:rr' - def __init__(self): + def __init__(self, dev_owner=constants.DEVICE_OWNER_ROUTER_INTF): self.extra_dhcp_opts = [] + self.device_owner = dev_owner class FakePortMultipleAgents1: @@ -341,6 +342,13 @@ class FakeV4NetworkNoRouter: ports = [FakePort1()] +class FakeV4NetworkDistRouter: + id = 'cccccccc-cccc-cccc-cccc-cccccccccccc' + subnets = [FakeV4Subnet()] + ports = [FakePort1(), + FakeRouterPort(dev_owner=constants.DEVICE_OWNER_DVR_INTERFACE)] + + class FakeDualV4Pxe3Ports: id = 'cccccccc-cccc-cccc-cccc-cccccccccccc' subnets = [FakeV4Subnet(), FakeV4SubnetNoDHCP()] @@ -962,6 +970,26 @@ tag:tag0,option:router""".lstrip() self.safe.assert_called_once_with('/foo/opts', expected) + def test_output_opts_file_dist_neutron_router_on_subnet(self): + expected = ( + 'tag:tag0,option:dns-server,8.8.8.8\n' + 'tag:tag0,option:classless-static-route,20.0.0.1/24,20.0.0.1,' + '0.0.0.0/0,192.168.0.1\n' + 'tag:tag0,249,20.0.0.1/24,20.0.0.1,0.0.0.0/0,192.168.0.1\n' + 'tag:tag0,option:router,192.168.0.1').lstrip() + + with mock.patch.object(dhcp.Dnsmasq, 'get_conf_file_name') as conf_fn: + conf_fn.return_value = '/foo/opts' + dm = dhcp.Dnsmasq(self.conf, FakeV4NetworkDistRouter(), + version=dhcp.Dnsmasq.MINIMUM_VERSION) + with mock.patch.object(dm, '_make_subnet_interface_ip_map') as ipm: + ipm.return_value = {FakeV4Subnet.id: '192.168.0.1'} + + dm._output_opts_file() + self.assertTrue(ipm.called) + + self.safe.assert_called_once_with('/foo/opts', expected) + def test_output_opts_file_pxe_2port_1net(self): expected = ( 'tag:tag0,option:dns-server,8.8.8.8\n' From abe30e973442271b0093eaa61c59d171a68a2028 Mon Sep 17 00:00:00 2001 From: Assaf Muller Date: Tue, 7 Oct 2014 22:45:41 +0300 Subject: [PATCH 069/128] Forbid update of HA property of routers While the HA property is update-able, and resulting router-get invocations suggest that the router is HA, the migration itself fails on the agent. This is deceiving and confusing and should be blocked until the migration itself is fixed in a future patch. Change-Id: I4171ab481e3943e0110bd9a300d965bbebe44871 Related-Bug: #1365426 Closes-Bug: #1378525 --- neutron/extensions/l3_ext_ha_mode.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/neutron/extensions/l3_ext_ha_mode.py b/neutron/extensions/l3_ext_ha_mode.py index f8487bb5b9a..115a8db8140 100644 --- a/neutron/extensions/l3_ext_ha_mode.py +++ b/neutron/extensions/l3_ext_ha_mode.py @@ -21,7 +21,7 @@ from neutron.common import exceptions HA_INFO = 'ha' EXTENDED_ATTRIBUTES_2_0 = { 'routers': { - HA_INFO: {'allow_post': True, 'allow_put': True, + HA_INFO: {'allow_post': True, 'allow_put': False, 'default': attributes.ATTR_NOT_SPECIFIED, 'is_visible': True, 'enforce_policy': True, 'convert_to': attributes.convert_to_boolean_if_not_none} From edb26bfcddf9d9a0e95955a6590d11fa7245ea2b Mon Sep 17 00:00:00 2001 From: Carl Baldwin Date: Wed, 8 Oct 2014 03:22:49 +0000 Subject: [PATCH 070/128] Remove two sets that are not referenced The code no longer references the updated_routers and removed_routers sets. This should have been cleaned up before but was missed. Change-Id: I0396e13d2f7c3789928e0c6a4c0a071b02d5ff17 --- neutron/agent/l3_agent.py | 10 ---------- neutron/tests/unit/test_l3_agent.py | 19 ------------------- 2 files changed, 29 deletions(-) diff --git a/neutron/agent/l3_agent.py b/neutron/agent/l3_agent.py index 9f117635bb4..186516b3715 100644 --- a/neutron/agent/l3_agent.py +++ b/neutron/agent/l3_agent.py @@ -526,8 +526,6 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback, self.context = context.get_admin_context_without_session() self.plugin_rpc = L3PluginApi(topics.L3PLUGIN, host) self.fullsync = True - self.updated_routers = set() - self.removed_routers = set() self.sync_progress = False # Get the list of service plugins from Neutron Server @@ -1859,12 +1857,6 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback, while True: pool.spawn_n(self._process_router_update) - def _process_router_delete(self): - current_removed_routers = list(self.removed_routers) - for router_id in current_removed_routers: - self._router_removed(router_id) - self.removed_routers.remove(router_id) - def _router_ids(self): if not self.conf.use_namespaces: return [self.conf.router_id] @@ -1890,8 +1882,6 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback, try: router_ids = self._router_ids() - self.updated_routers.clear() - self.removed_routers.clear() timestamp = timeutils.utcnow() routers = self.plugin_rpc.get_routers( context, router_ids) diff --git a/neutron/tests/unit/test_l3_agent.py b/neutron/tests/unit/test_l3_agent.py index 3d2d33c52d2..8de7922d210 100644 --- a/neutron/tests/unit/test_l3_agent.py +++ b/neutron/tests/unit/test_l3_agent.py @@ -1765,25 +1765,6 @@ vrrp_instance VR_1 { agent.router_added_to_agent(None, [FAKE_ID]) agent._queue.add.assert_called_once() - def test_process_router_delete(self): - agent = l3_agent.L3NATAgent(HOSTNAME, self.conf) - ex_gw_port = {'id': _uuid(), - 'network_id': _uuid(), - 'fixed_ips': [{'ip_address': '19.4.4.4', - 'subnet_id': _uuid()}], - 'subnet': {'cidr': '19.4.4.0/24', - 'gateway_ip': '19.4.4.1'}} - router = { - 'id': _uuid(), - 'enable_snat': True, - 'routes': [], - 'gw_port': ex_gw_port} - router['distributed'] = False - agent._router_added(router['id'], router) - agent.router_deleted(None, router['id']) - agent._process_router_delete() - self.assertFalse(list(agent.removed_routers)) - def test_destroy_fip_namespace(self): class FakeDev(object): def __init__(self, name): From c6a095b5a9bb6927b8f8c1380b6b4ccf310ac0ea Mon Sep 17 00:00:00 2001 From: OpenStack Proposal Bot Date: Wed, 8 Oct 2014 06:10:06 +0000 Subject: [PATCH 071/128] Imported Translations from Transifex Change-Id: If47b1705e22a7c8b6a84991d6ae0e68d419cba26 --- .../de/LC_MESSAGES/neutron-log-error.po | 273 - .../locale/de/LC_MESSAGES/neutron-log-info.po | 9 +- .../de/LC_MESSAGES/neutron-log-warning.po | 156 - .../en_AU/LC_MESSAGES/neutron-log-error.po | 273 - .../en_AU/LC_MESSAGES/neutron-log-info.po | 9 +- .../en_AU/LC_MESSAGES/neutron-log-warning.po | 156 - .../en_GB/LC_MESSAGES/neutron-log-critical.po | 20 - .../en_GB/LC_MESSAGES/neutron-log-error.po | 278 - .../en_GB/LC_MESSAGES/neutron-log-info.po | 9 +- .../en_GB/LC_MESSAGES/neutron-log-warning.po | 159 - neutron/locale/en_US/LC_MESSAGES/neutron.po | 16406 ---------------- .../es/LC_MESSAGES/neutron-log-error.po | 273 - .../locale/es/LC_MESSAGES/neutron-log-info.po | 9 +- .../es/LC_MESSAGES/neutron-log-warning.po | 156 - .../fr/LC_MESSAGES/neutron-log-critical.po | 23 - .../fr/LC_MESSAGES/neutron-log-error.po | 273 - .../locale/fr/LC_MESSAGES/neutron-log-info.po | 9 +- .../fr/LC_MESSAGES/neutron-log-warning.po | 156 - .../it/LC_MESSAGES/neutron-log-error.po | 274 - .../locale/it/LC_MESSAGES/neutron-log-info.po | 9 +- .../it/LC_MESSAGES/neutron-log-warning.po | 156 - .../ja/LC_MESSAGES/neutron-log-error.po | 273 - .../locale/ja/LC_MESSAGES/neutron-log-info.po | 9 +- .../ja/LC_MESSAGES/neutron-log-warning.po | 156 - .../ko_KR/LC_MESSAGES/neutron-log-error.po | 273 - .../ko_KR/LC_MESSAGES/neutron-log-info.po | 9 +- .../ko_KR/LC_MESSAGES/neutron-log-warning.po | 156 - neutron/locale/neutron-log-info.pot | 11 +- neutron/locale/neutron-log-warning.pot | 64 +- neutron/locale/neutron.pot | 657 +- .../pt_BR/LC_MESSAGES/neutron-log-info.po | 9 +- .../pt_BR/LC_MESSAGES/neutron-log-warning.po | 159 - .../sr/LC_MESSAGES/neutron-log-warning.po | 157 - .../te_IN/LC_MESSAGES/neutron-log-critical.po | 21 - .../te_IN/LC_MESSAGES/neutron-log-error.po | 276 - .../te_IN/LC_MESSAGES/neutron-log-info.po | 9 +- .../te_IN/LC_MESSAGES/neutron-log-warning.po | 158 - .../vi_VN/LC_MESSAGES/neutron-log-info.po | 9 +- .../zh_CN/LC_MESSAGES/neutron-log-error.po | 273 - .../zh_CN/LC_MESSAGES/neutron-log-info.po | 9 +- .../zh_CN/LC_MESSAGES/neutron-log-warning.po | 156 - .../zh_TW/LC_MESSAGES/neutron-log-info.po | 9 +- .../zh_TW/LC_MESSAGES/neutron-log-warning.po | 156 - 43 files changed, 380 insertions(+), 21715 deletions(-) delete mode 100644 neutron/locale/de/LC_MESSAGES/neutron-log-error.po delete mode 100644 neutron/locale/de/LC_MESSAGES/neutron-log-warning.po delete mode 100644 neutron/locale/en_AU/LC_MESSAGES/neutron-log-error.po delete mode 100644 neutron/locale/en_AU/LC_MESSAGES/neutron-log-warning.po delete mode 100644 neutron/locale/en_GB/LC_MESSAGES/neutron-log-critical.po delete mode 100644 neutron/locale/en_GB/LC_MESSAGES/neutron-log-error.po delete mode 100644 neutron/locale/en_GB/LC_MESSAGES/neutron-log-warning.po delete mode 100644 neutron/locale/en_US/LC_MESSAGES/neutron.po delete mode 100644 neutron/locale/es/LC_MESSAGES/neutron-log-error.po delete mode 100644 neutron/locale/es/LC_MESSAGES/neutron-log-warning.po delete mode 100644 neutron/locale/fr/LC_MESSAGES/neutron-log-critical.po delete mode 100644 neutron/locale/fr/LC_MESSAGES/neutron-log-error.po delete mode 100644 neutron/locale/fr/LC_MESSAGES/neutron-log-warning.po delete mode 100644 neutron/locale/it/LC_MESSAGES/neutron-log-error.po delete mode 100644 neutron/locale/it/LC_MESSAGES/neutron-log-warning.po delete mode 100644 neutron/locale/ja/LC_MESSAGES/neutron-log-error.po delete mode 100644 neutron/locale/ja/LC_MESSAGES/neutron-log-warning.po delete mode 100644 neutron/locale/ko_KR/LC_MESSAGES/neutron-log-error.po delete mode 100644 neutron/locale/ko_KR/LC_MESSAGES/neutron-log-warning.po delete mode 100644 neutron/locale/pt_BR/LC_MESSAGES/neutron-log-warning.po delete mode 100644 neutron/locale/sr/LC_MESSAGES/neutron-log-warning.po delete mode 100644 neutron/locale/te_IN/LC_MESSAGES/neutron-log-critical.po delete mode 100644 neutron/locale/te_IN/LC_MESSAGES/neutron-log-error.po delete mode 100644 neutron/locale/te_IN/LC_MESSAGES/neutron-log-warning.po delete mode 100644 neutron/locale/zh_CN/LC_MESSAGES/neutron-log-error.po delete mode 100644 neutron/locale/zh_CN/LC_MESSAGES/neutron-log-warning.po delete mode 100644 neutron/locale/zh_TW/LC_MESSAGES/neutron-log-warning.po diff --git a/neutron/locale/de/LC_MESSAGES/neutron-log-error.po b/neutron/locale/de/LC_MESSAGES/neutron-log-error.po deleted file mode 100644 index 0e268f59a98..00000000000 --- a/neutron/locale/de/LC_MESSAGES/neutron-log-error.po +++ /dev/null @@ -1,273 +0,0 @@ -# Translations template for neutron. -# Copyright (C) 2014 ORGANIZATION -# This file is distributed under the same license as the neutron project. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Neutron\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-29 06:04+0000\n" -"PO-Revision-Date: 2014-06-30 20:07+0000\n" -"Last-Translator: openstackjenkins \n" -"Language-Team: German (http://www.transifex.com/projects/p/neutron/language/" -"de/)\n" -"Language: de\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: neutron/policy.py:119 -#, python-format -msgid "" -"Backward compatibility unavailable for deprecated policy %s. The policy will " -"not be enforced" -msgstr "" - -#: neutron/policy.py:311 -#, python-format -msgid "Policy check error while calling %s!" -msgstr "" - -#: neutron/agent/l3_ha_agent.py:136 -#, python-format -msgid "Unable to process HA router %s without ha port" -msgstr "" - -#: neutron/agent/linux/external_process.py:229 -#, python-format -msgid "" -"%(service)s for %(resource_type)s with uuid %(uuid)s not found. The process " -"should not have died" -msgstr "" - -#: neutron/agent/linux/external_process.py:249 -#, python-format -msgid "respawning %(service)s for uuid %(uuid)s" -msgstr "" - -#: neutron/agent/linux/external_process.py:255 -msgid "Exiting agent as programmed in check_child_processes_actions" -msgstr "" - -#: neutron/agent/linux/interface.py:154 -#, python-format -msgid "Failed deleting ingress connection state of floatingip %s" -msgstr "" - -#: neutron/agent/linux/interface.py:163 -#, python-format -msgid "Failed deleting egress connection state of floatingip %s" -msgstr "" - -#: neutron/cmd/sanity_check.py:58 -msgid "" -"Nova notifications are enabled, but novaclient is not installed. Either " -"disable nova notifications or install python-novaclient." -msgstr "" - -#: neutron/openstack/common/excutils.py:76 -#, python-format -msgid "Original exception being dropped: %s" -msgstr "Ursprüngliche Ausnahme wird gelöscht: %s" - -#: neutron/openstack/common/excutils.py:105 -#, python-format -msgid "Unexpected exception occurred %d time(s)... retrying." -msgstr "Unerwartete Ausnahme %d mal(e) aufgetreten... Neuversuch." - -#: neutron/openstack/common/periodic_task.py:202 -#, python-format -msgid "Error during %(full_task_name)s: %(e)s" -msgstr "Fehler bei %(full_task_name)s: %(e)s" - -#: neutron/openstack/common/service.py:188 -msgid "Exception during rpc cleanup." -msgstr "" - -#: neutron/openstack/common/service.py:277 -msgid "Unhandled exception" -msgstr "Nicht behandelte Ausnahme" - -#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:279 -#, python-format -msgid "Unable to delete port '%(pname)s' on switch. Exception: %(exp)s" -msgstr "" - -#: neutron/plugins/ml2/drivers/type_gre.py:86 -#, python-format -msgid "Skipping unreasonable gre ID range %(tun_min)s:%(tun_max)s" -msgstr "" - -#: neutron/plugins/ml2/drivers/type_vxlan.py:92 -#, python-format -msgid "Skipping unreasonable VXLAN VNI range %(tun_min)s:%(tun_max)s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:110 -msgid "APIC service agent: failed in reporting state" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:205 -#, python-format -msgid "No such interface (ignored): %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:255 -msgid "APIC service agent: exception in LLDP parsing" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:310 -#, python-format -msgid "APIC service agent: can not get MACaddr for %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:326 -msgid "APIC host agent: failed in reporting state" -msgstr "" - -#: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:386 -msgid "Error in agent event loop" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:55 -#, python-format -msgid "Cannot complete the sync between Neutron and VSD because of error:%s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:102 -msgid "Agent terminated!: Failed to get a datapath." -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:121 -msgid "Agent terminated" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:158 -msgid "Agent failed to create agent config map" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:283 -msgid "Failed reporting state!" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:449 -#, python-format -msgid "No local VLAN available for net-id=%s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:464 -#, python-format -msgid "" -"Cannot provision %(network_type)s network for net-id=%(net_uuid)s - " -"tunneling disabled" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:475 -#, python-format -msgid "" -"Cannot provision %(network_type)s network for net-id=%(net_uuid)s - no " -"bridge for physical_network %(physical_network)s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:485 -#, python-format -msgid "" -"Cannot provision unknown network type %(network_type)s for net-id=" -"%(net_uuid)s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:523 -#, python-format -msgid "" -"Cannot reclaim unknown network type %(network_type)s for net-id=%(net_uuid)s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:657 -#, python-format -msgid "" -"Bridge %(bridge)s for physical network %(physical_network)s does not exist. " -"Agent terminated!" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:735 -msgid "ofport should have a value that can be interpreted as an integer" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:738 -#, python-format -msgid "Failed to set-up %(type)s tunnel port to %(ip)s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:916 -msgid "Error while synchronizing tunnels" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:956 -msgid "Error while processing VIF ports" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:2099 -#, python-format -msgid "" -"Rolling back database changes for gateway device %s because of an error in " -"the NSX backend" -msgstr "" - -#: neutron/scheduler/l3_agent_scheduler.py:281 -#, python-format -msgid "Not enough candidates, a HA router needs at least %s agents" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:62 -#, python-format -msgid "Config file parse error: %s" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:76 -#, python-format -msgid "Ignoring Cisco CSR configuration entry - router IP %s is not valid" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:89 -#, python-format -msgid "Ignoring Cisco CSR for router %(router)s - missing %(field)s setting" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:97 -#, python-format -msgid "" -"Ignoring Cisco CSR for router %s - timeout is not a floating point number" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:113 -#, python-format -msgid "Ignoring Cisco CSR for router %s - local tunnel is not an IP address" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:119 -#, python-format -msgid "Malformed interface name for Cisco CSR router entry - %s" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:155 -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:202 -msgid "No routers found in INI file!" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:174 -#, python-format -msgid "Unable to lookup router ID based on router's public IP (%s) in INI file" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:177 -#, python-format -msgid "No matching routers on host %s" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:211 -#, python-format -msgid "Unable to find host for router %s" -msgstr "" diff --git a/neutron/locale/de/LC_MESSAGES/neutron-log-info.po b/neutron/locale/de/LC_MESSAGES/neutron-log-info.po index 8460729b68a..a437912b819 100644 --- a/neutron/locale/de/LC_MESSAGES/neutron-log-info.po +++ b/neutron/locale/de/LC_MESSAGES/neutron-log-info.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Neutron\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-22 06:06+0000\n" +"POT-Creation-Date: 2014-10-08 06:09+0000\n" "PO-Revision-Date: 2014-08-17 05:19+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: German (http://www.transifex.com/projects/p/neutron/language/" @@ -20,12 +20,17 @@ msgstr "" "Generated-By: Babel 1.3\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: neutron/policy.py:106 +#: neutron/policy.py:110 #, python-format msgid "" "Inserting policy:%(new_policy)s in place of deprecated policy:%(old_policy)s" msgstr "" +#: neutron/agent/linux/ovs_lib.py:422 +#, python-format +msgid "Port %(port_id)s not present in bridge %(br_name)s" +msgstr "" + #: neutron/common/ipv6_utils.py:62 msgid "IPv6 is not enabled on this system." msgstr "" diff --git a/neutron/locale/de/LC_MESSAGES/neutron-log-warning.po b/neutron/locale/de/LC_MESSAGES/neutron-log-warning.po deleted file mode 100644 index 7cc4dd7afd3..00000000000 --- a/neutron/locale/de/LC_MESSAGES/neutron-log-warning.po +++ /dev/null @@ -1,156 +0,0 @@ -# Translations template for neutron. -# Copyright (C) 2014 ORGANIZATION -# This file is distributed under the same license as the neutron project. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Neutron\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-14 06:11+0000\n" -"PO-Revision-Date: 2014-06-30 19:27+0000\n" -"Last-Translator: openstackjenkins \n" -"Language-Team: German (http://www.transifex.com/projects/p/neutron/language/" -"de/)\n" -"Language: de\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: neutron/policy.py:94 -#, python-format -msgid "" -"Found deprecated policy rule:%s. Please consider upgrading your policy " -"configuration file" -msgstr "" - -#: neutron/policy.py:137 -#, python-format -msgid "Unable to find data type descriptor for attribute %s" -msgstr "" - -#: neutron/agent/securitygroups_rpc.py:183 -msgid "" -"security_group_info_for_devices rpc call not supported by the server, " -"falling back to old security_group_rules_for_devices which scales worse." -msgstr "" - -#: neutron/agent/linux/keepalived.py:358 -msgid "" -"A previous instance of keepalived seems to be dead, unable to restart it, a " -"new instance will be spawned" -msgstr "" - -#: neutron/db/l3_agentschedulers_db.py:105 -msgid "" -"Time since last L3 agent reschedule check has exceeded the interval between " -"checks. Waiting before check to allow agents to send a heartbeat in case " -"there was a clock adjustment." -msgstr "" - -#: neutron/db/l3_agentschedulers_db.py:127 -#, python-format -msgid "" -"Rescheduling router %(router)s from agent %(agent)s because the agent did " -"not report to the server in the last %(dead_time)s seconds." -msgstr "" - -#: neutron/db/l3_hamode_db.py:404 -#, python-format -msgid "The router %(router_id)s is bound multiple times on the agent %(host)s" -msgstr "" - -#: neutron/openstack/common/service.py:364 -#, python-format -msgid "pid %d not in child list" -msgstr "PID %d nicht in Liste untergeordneter Elemente" - -#: neutron/plugins/ml2/drivers/type_tunnel.py:143 -#, python-format -msgid "%(type)s tunnel %(id)s not found" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_sync.py:68 -#, python-format -msgid "Create network postcommit failed for network %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_sync.py:78 -#, python-format -msgid "Create subnet postcommit failed for subnet %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_sync.py:91 -#, python-format -msgid "Create port postcommit failed for port %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_sync.py:110 -#, python-format -msgid "Add interface postcommit failed for port %s" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:299 -#, python-format -msgid "Subnet %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:317 -#, python-format -msgid "Router %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:329 -#, python-format -msgid "" -"Route with destination %(dest)s and nexthop %(hop)s not found in neutron for " -"sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:343 -#, python-format -msgid "Security group %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:354 -#, python-format -msgid "Security group rule %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:364 -#, python-format -msgid "Floating ip %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:376 -#, python-format -msgid "IP allocation for floating ip %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:387 -#, python-format -msgid "Net-partition %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:397 -#, python-format -msgid "VM port %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:290 -#, python-format -msgid "Unable to create tunnel port. Invalid remote IP: %s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:713 -#, python-format -msgid "" -"VIF port: %s has no ofport configured, and might not be able to transmit" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:820 -#, python-format -msgid "Device %s not defined on plugin" -msgstr "" diff --git a/neutron/locale/en_AU/LC_MESSAGES/neutron-log-error.po b/neutron/locale/en_AU/LC_MESSAGES/neutron-log-error.po deleted file mode 100644 index 54c192e9ffe..00000000000 --- a/neutron/locale/en_AU/LC_MESSAGES/neutron-log-error.po +++ /dev/null @@ -1,273 +0,0 @@ -# Translations template for neutron. -# Copyright (C) 2014 ORGANIZATION -# This file is distributed under the same license as the neutron project. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Neutron\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-29 06:04+0000\n" -"PO-Revision-Date: 2014-06-30 20:07+0000\n" -"Last-Translator: openstackjenkins \n" -"Language-Team: English (Australia) (http://www.transifex.com/projects/p/" -"neutron/language/en_AU/)\n" -"Language: en_AU\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: neutron/policy.py:119 -#, python-format -msgid "" -"Backward compatibility unavailable for deprecated policy %s. The policy will " -"not be enforced" -msgstr "" - -#: neutron/policy.py:311 -#, python-format -msgid "Policy check error while calling %s!" -msgstr "" - -#: neutron/agent/l3_ha_agent.py:136 -#, python-format -msgid "Unable to process HA router %s without ha port" -msgstr "" - -#: neutron/agent/linux/external_process.py:229 -#, python-format -msgid "" -"%(service)s for %(resource_type)s with uuid %(uuid)s not found. The process " -"should not have died" -msgstr "" - -#: neutron/agent/linux/external_process.py:249 -#, python-format -msgid "respawning %(service)s for uuid %(uuid)s" -msgstr "" - -#: neutron/agent/linux/external_process.py:255 -msgid "Exiting agent as programmed in check_child_processes_actions" -msgstr "" - -#: neutron/agent/linux/interface.py:154 -#, python-format -msgid "Failed deleting ingress connection state of floatingip %s" -msgstr "" - -#: neutron/agent/linux/interface.py:163 -#, python-format -msgid "Failed deleting egress connection state of floatingip %s" -msgstr "" - -#: neutron/cmd/sanity_check.py:58 -msgid "" -"Nova notifications are enabled, but novaclient is not installed. Either " -"disable nova notifications or install python-novaclient." -msgstr "" - -#: neutron/openstack/common/excutils.py:76 -#, python-format -msgid "Original exception being dropped: %s" -msgstr "Original exception being dropped: %s" - -#: neutron/openstack/common/excutils.py:105 -#, python-format -msgid "Unexpected exception occurred %d time(s)... retrying." -msgstr "Unexpected exception occurred %d time(s)... retrying." - -#: neutron/openstack/common/periodic_task.py:202 -#, python-format -msgid "Error during %(full_task_name)s: %(e)s" -msgstr "Error during %(full_task_name)s: %(e)s" - -#: neutron/openstack/common/service.py:188 -msgid "Exception during rpc cleanup." -msgstr "Exception during rpc cleanup." - -#: neutron/openstack/common/service.py:277 -msgid "Unhandled exception" -msgstr "Unhandled exception" - -#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:279 -#, python-format -msgid "Unable to delete port '%(pname)s' on switch. Exception: %(exp)s" -msgstr "" - -#: neutron/plugins/ml2/drivers/type_gre.py:86 -#, python-format -msgid "Skipping unreasonable gre ID range %(tun_min)s:%(tun_max)s" -msgstr "" - -#: neutron/plugins/ml2/drivers/type_vxlan.py:92 -#, python-format -msgid "Skipping unreasonable VXLAN VNI range %(tun_min)s:%(tun_max)s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:110 -msgid "APIC service agent: failed in reporting state" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:205 -#, python-format -msgid "No such interface (ignored): %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:255 -msgid "APIC service agent: exception in LLDP parsing" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:310 -#, python-format -msgid "APIC service agent: can not get MACaddr for %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:326 -msgid "APIC host agent: failed in reporting state" -msgstr "" - -#: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:386 -msgid "Error in agent event loop" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:55 -#, python-format -msgid "Cannot complete the sync between Neutron and VSD because of error:%s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:102 -msgid "Agent terminated!: Failed to get a datapath." -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:121 -msgid "Agent terminated" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:158 -msgid "Agent failed to create agent config map" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:283 -msgid "Failed reporting state!" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:449 -#, python-format -msgid "No local VLAN available for net-id=%s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:464 -#, python-format -msgid "" -"Cannot provision %(network_type)s network for net-id=%(net_uuid)s - " -"tunneling disabled" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:475 -#, python-format -msgid "" -"Cannot provision %(network_type)s network for net-id=%(net_uuid)s - no " -"bridge for physical_network %(physical_network)s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:485 -#, python-format -msgid "" -"Cannot provision unknown network type %(network_type)s for net-id=" -"%(net_uuid)s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:523 -#, python-format -msgid "" -"Cannot reclaim unknown network type %(network_type)s for net-id=%(net_uuid)s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:657 -#, python-format -msgid "" -"Bridge %(bridge)s for physical network %(physical_network)s does not exist. " -"Agent terminated!" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:735 -msgid "ofport should have a value that can be interpreted as an integer" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:738 -#, python-format -msgid "Failed to set-up %(type)s tunnel port to %(ip)s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:916 -msgid "Error while synchronizing tunnels" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:956 -msgid "Error while processing VIF ports" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:2099 -#, python-format -msgid "" -"Rolling back database changes for gateway device %s because of an error in " -"the NSX backend" -msgstr "" - -#: neutron/scheduler/l3_agent_scheduler.py:281 -#, python-format -msgid "Not enough candidates, a HA router needs at least %s agents" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:62 -#, python-format -msgid "Config file parse error: %s" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:76 -#, python-format -msgid "Ignoring Cisco CSR configuration entry - router IP %s is not valid" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:89 -#, python-format -msgid "Ignoring Cisco CSR for router %(router)s - missing %(field)s setting" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:97 -#, python-format -msgid "" -"Ignoring Cisco CSR for router %s - timeout is not a floating point number" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:113 -#, python-format -msgid "Ignoring Cisco CSR for router %s - local tunnel is not an IP address" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:119 -#, python-format -msgid "Malformed interface name for Cisco CSR router entry - %s" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:155 -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:202 -msgid "No routers found in INI file!" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:174 -#, python-format -msgid "Unable to lookup router ID based on router's public IP (%s) in INI file" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:177 -#, python-format -msgid "No matching routers on host %s" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:211 -#, python-format -msgid "Unable to find host for router %s" -msgstr "" diff --git a/neutron/locale/en_AU/LC_MESSAGES/neutron-log-info.po b/neutron/locale/en_AU/LC_MESSAGES/neutron-log-info.po index 37d101a0c0d..90f52faf597 100644 --- a/neutron/locale/en_AU/LC_MESSAGES/neutron-log-info.po +++ b/neutron/locale/en_AU/LC_MESSAGES/neutron-log-info.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Neutron\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-22 06:06+0000\n" +"POT-Creation-Date: 2014-10-08 06:09+0000\n" "PO-Revision-Date: 2014-07-18 20:49+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: English (Australia) (http://www.transifex.com/projects/p/" @@ -19,12 +19,17 @@ msgstr "" "Generated-By: Babel 1.3\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: neutron/policy.py:106 +#: neutron/policy.py:110 #, python-format msgid "" "Inserting policy:%(new_policy)s in place of deprecated policy:%(old_policy)s" msgstr "" +#: neutron/agent/linux/ovs_lib.py:422 +#, python-format +msgid "Port %(port_id)s not present in bridge %(br_name)s" +msgstr "" + #: neutron/common/ipv6_utils.py:62 msgid "IPv6 is not enabled on this system." msgstr "" diff --git a/neutron/locale/en_AU/LC_MESSAGES/neutron-log-warning.po b/neutron/locale/en_AU/LC_MESSAGES/neutron-log-warning.po deleted file mode 100644 index afc6e6ceed4..00000000000 --- a/neutron/locale/en_AU/LC_MESSAGES/neutron-log-warning.po +++ /dev/null @@ -1,156 +0,0 @@ -# Translations template for neutron. -# Copyright (C) 2014 ORGANIZATION -# This file is distributed under the same license as the neutron project. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Neutron\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-14 06:11+0000\n" -"PO-Revision-Date: 2014-06-30 19:27+0000\n" -"Last-Translator: openstackjenkins \n" -"Language-Team: English (Australia) (http://www.transifex.com/projects/p/" -"neutron/language/en_AU/)\n" -"Language: en_AU\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: neutron/policy.py:94 -#, python-format -msgid "" -"Found deprecated policy rule:%s. Please consider upgrading your policy " -"configuration file" -msgstr "" - -#: neutron/policy.py:137 -#, python-format -msgid "Unable to find data type descriptor for attribute %s" -msgstr "" - -#: neutron/agent/securitygroups_rpc.py:183 -msgid "" -"security_group_info_for_devices rpc call not supported by the server, " -"falling back to old security_group_rules_for_devices which scales worse." -msgstr "" - -#: neutron/agent/linux/keepalived.py:358 -msgid "" -"A previous instance of keepalived seems to be dead, unable to restart it, a " -"new instance will be spawned" -msgstr "" - -#: neutron/db/l3_agentschedulers_db.py:105 -msgid "" -"Time since last L3 agent reschedule check has exceeded the interval between " -"checks. Waiting before check to allow agents to send a heartbeat in case " -"there was a clock adjustment." -msgstr "" - -#: neutron/db/l3_agentschedulers_db.py:127 -#, python-format -msgid "" -"Rescheduling router %(router)s from agent %(agent)s because the agent did " -"not report to the server in the last %(dead_time)s seconds." -msgstr "" - -#: neutron/db/l3_hamode_db.py:404 -#, python-format -msgid "The router %(router_id)s is bound multiple times on the agent %(host)s" -msgstr "" - -#: neutron/openstack/common/service.py:364 -#, python-format -msgid "pid %d not in child list" -msgstr "pid %d not in child list" - -#: neutron/plugins/ml2/drivers/type_tunnel.py:143 -#, python-format -msgid "%(type)s tunnel %(id)s not found" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_sync.py:68 -#, python-format -msgid "Create network postcommit failed for network %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_sync.py:78 -#, python-format -msgid "Create subnet postcommit failed for subnet %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_sync.py:91 -#, python-format -msgid "Create port postcommit failed for port %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_sync.py:110 -#, python-format -msgid "Add interface postcommit failed for port %s" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:299 -#, python-format -msgid "Subnet %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:317 -#, python-format -msgid "Router %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:329 -#, python-format -msgid "" -"Route with destination %(dest)s and nexthop %(hop)s not found in neutron for " -"sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:343 -#, python-format -msgid "Security group %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:354 -#, python-format -msgid "Security group rule %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:364 -#, python-format -msgid "Floating ip %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:376 -#, python-format -msgid "IP allocation for floating ip %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:387 -#, python-format -msgid "Net-partition %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:397 -#, python-format -msgid "VM port %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:290 -#, python-format -msgid "Unable to create tunnel port. Invalid remote IP: %s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:713 -#, python-format -msgid "" -"VIF port: %s has no ofport configured, and might not be able to transmit" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:820 -#, python-format -msgid "Device %s not defined on plugin" -msgstr "" diff --git a/neutron/locale/en_GB/LC_MESSAGES/neutron-log-critical.po b/neutron/locale/en_GB/LC_MESSAGES/neutron-log-critical.po deleted file mode 100644 index f738cbcf0dc..00000000000 --- a/neutron/locale/en_GB/LC_MESSAGES/neutron-log-critical.po +++ /dev/null @@ -1,20 +0,0 @@ -# Translations template for neutron. -# Copyright (C) 2014 ORGANIZATION -# This file is distributed under the same license as the neutron project. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Neutron\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-08-01 06:06+0000\n" -"PO-Revision-Date: 2014-05-30 06:24+0000\n" -"Last-Translator: FULL NAME \n" -"Language-Team: English (United Kingdom) (http://www.transifex.com/projects/p/" -"neutron/language/en_GB/)\n" -"Language: en_GB\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" diff --git a/neutron/locale/en_GB/LC_MESSAGES/neutron-log-error.po b/neutron/locale/en_GB/LC_MESSAGES/neutron-log-error.po deleted file mode 100644 index 1205d68f301..00000000000 --- a/neutron/locale/en_GB/LC_MESSAGES/neutron-log-error.po +++ /dev/null @@ -1,278 +0,0 @@ -# Translations template for neutron. -# Copyright (C) 2014 ORGANIZATION -# This file is distributed under the same license as the neutron project. -# -# Translators: -# Andi Chandler , 2014 -msgid "" -msgstr "" -"Project-Id-Version: Neutron\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-29 06:04+0000\n" -"PO-Revision-Date: 2014-08-12 21:24+0000\n" -"Last-Translator: openstackjenkins \n" -"Language-Team: English (United Kingdom) (http://www.transifex.com/projects/p/" -"neutron/language/en_GB/)\n" -"Language: en_GB\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: neutron/policy.py:119 -#, python-format -msgid "" -"Backward compatibility unavailable for deprecated policy %s. The policy will " -"not be enforced" -msgstr "" -"Backward compatibility unavailable for deprecated policy %s. The policy will " -"not be enforced" - -#: neutron/policy.py:311 -#, python-format -msgid "Policy check error while calling %s!" -msgstr "Policy check error while calling %s!" - -#: neutron/agent/l3_ha_agent.py:136 -#, python-format -msgid "Unable to process HA router %s without ha port" -msgstr "" - -#: neutron/agent/linux/external_process.py:229 -#, python-format -msgid "" -"%(service)s for %(resource_type)s with uuid %(uuid)s not found. The process " -"should not have died" -msgstr "" - -#: neutron/agent/linux/external_process.py:249 -#, python-format -msgid "respawning %(service)s for uuid %(uuid)s" -msgstr "" - -#: neutron/agent/linux/external_process.py:255 -msgid "Exiting agent as programmed in check_child_processes_actions" -msgstr "" - -#: neutron/agent/linux/interface.py:154 -#, python-format -msgid "Failed deleting ingress connection state of floatingip %s" -msgstr "" - -#: neutron/agent/linux/interface.py:163 -#, python-format -msgid "Failed deleting egress connection state of floatingip %s" -msgstr "" - -#: neutron/cmd/sanity_check.py:58 -msgid "" -"Nova notifications are enabled, but novaclient is not installed. Either " -"disable nova notifications or install python-novaclient." -msgstr "" -"Nova notifications are enabled, but novaclient is not installed. Either " -"disable nova notifications or install python-novaclient." - -#: neutron/openstack/common/excutils.py:76 -#, python-format -msgid "Original exception being dropped: %s" -msgstr "Original exception being dropped: %s" - -#: neutron/openstack/common/excutils.py:105 -#, python-format -msgid "Unexpected exception occurred %d time(s)... retrying." -msgstr "Unexpected exception occurred %d time(s)... retrying." - -#: neutron/openstack/common/periodic_task.py:202 -#, python-format -msgid "Error during %(full_task_name)s: %(e)s" -msgstr "Error during %(full_task_name)s: %(e)s" - -#: neutron/openstack/common/service.py:188 -msgid "Exception during rpc cleanup." -msgstr "Exception during rpc cleanup." - -#: neutron/openstack/common/service.py:277 -msgid "Unhandled exception" -msgstr "Unhandled exception" - -#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:279 -#, python-format -msgid "Unable to delete port '%(pname)s' on switch. Exception: %(exp)s" -msgstr "" - -#: neutron/plugins/ml2/drivers/type_gre.py:86 -#, python-format -msgid "Skipping unreasonable gre ID range %(tun_min)s:%(tun_max)s" -msgstr "" - -#: neutron/plugins/ml2/drivers/type_vxlan.py:92 -#, python-format -msgid "Skipping unreasonable VXLAN VNI range %(tun_min)s:%(tun_max)s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:110 -msgid "APIC service agent: failed in reporting state" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:205 -#, python-format -msgid "No such interface (ignored): %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:255 -msgid "APIC service agent: exception in LLDP parsing" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:310 -#, python-format -msgid "APIC service agent: can not get MACaddr for %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:326 -msgid "APIC host agent: failed in reporting state" -msgstr "" - -#: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:386 -msgid "Error in agent event loop" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:55 -#, python-format -msgid "Cannot complete the sync between Neutron and VSD because of error:%s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:102 -msgid "Agent terminated!: Failed to get a datapath." -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:121 -msgid "Agent terminated" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:158 -msgid "Agent failed to create agent config map" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:283 -msgid "Failed reporting state!" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:449 -#, python-format -msgid "No local VLAN available for net-id=%s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:464 -#, python-format -msgid "" -"Cannot provision %(network_type)s network for net-id=%(net_uuid)s - " -"tunneling disabled" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:475 -#, python-format -msgid "" -"Cannot provision %(network_type)s network for net-id=%(net_uuid)s - no " -"bridge for physical_network %(physical_network)s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:485 -#, python-format -msgid "" -"Cannot provision unknown network type %(network_type)s for net-id=" -"%(net_uuid)s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:523 -#, python-format -msgid "" -"Cannot reclaim unknown network type %(network_type)s for net-id=%(net_uuid)s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:657 -#, python-format -msgid "" -"Bridge %(bridge)s for physical network %(physical_network)s does not exist. " -"Agent terminated!" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:735 -msgid "ofport should have a value that can be interpreted as an integer" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:738 -#, python-format -msgid "Failed to set-up %(type)s tunnel port to %(ip)s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:916 -msgid "Error while synchronizing tunnels" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:956 -msgid "Error while processing VIF ports" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:2099 -#, python-format -msgid "" -"Rolling back database changes for gateway device %s because of an error in " -"the NSX backend" -msgstr "" - -#: neutron/scheduler/l3_agent_scheduler.py:281 -#, python-format -msgid "Not enough candidates, a HA router needs at least %s agents" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:62 -#, python-format -msgid "Config file parse error: %s" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:76 -#, python-format -msgid "Ignoring Cisco CSR configuration entry - router IP %s is not valid" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:89 -#, python-format -msgid "Ignoring Cisco CSR for router %(router)s - missing %(field)s setting" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:97 -#, python-format -msgid "" -"Ignoring Cisco CSR for router %s - timeout is not a floating point number" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:113 -#, python-format -msgid "Ignoring Cisco CSR for router %s - local tunnel is not an IP address" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:119 -#, python-format -msgid "Malformed interface name for Cisco CSR router entry - %s" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:155 -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:202 -msgid "No routers found in INI file!" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:174 -#, python-format -msgid "Unable to lookup router ID based on router's public IP (%s) in INI file" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:177 -#, python-format -msgid "No matching routers on host %s" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:211 -#, python-format -msgid "Unable to find host for router %s" -msgstr "" diff --git a/neutron/locale/en_GB/LC_MESSAGES/neutron-log-info.po b/neutron/locale/en_GB/LC_MESSAGES/neutron-log-info.po index 362b701da77..4fc4c61038f 100644 --- a/neutron/locale/en_GB/LC_MESSAGES/neutron-log-info.po +++ b/neutron/locale/en_GB/LC_MESSAGES/neutron-log-info.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Neutron\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-22 06:06+0000\n" +"POT-Creation-Date: 2014-10-08 06:09+0000\n" "PO-Revision-Date: 2014-08-17 05:19+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: English (United Kingdom) (http://www.transifex.com/projects/p/" @@ -20,13 +20,18 @@ msgstr "" "Generated-By: Babel 1.3\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: neutron/policy.py:106 +#: neutron/policy.py:110 #, python-format msgid "" "Inserting policy:%(new_policy)s in place of deprecated policy:%(old_policy)s" msgstr "" "Inserting policy:%(new_policy)s in place of deprecated policy:%(old_policy)s" +#: neutron/agent/linux/ovs_lib.py:422 +#, python-format +msgid "Port %(port_id)s not present in bridge %(br_name)s" +msgstr "" + #: neutron/common/ipv6_utils.py:62 msgid "IPv6 is not enabled on this system." msgstr "" diff --git a/neutron/locale/en_GB/LC_MESSAGES/neutron-log-warning.po b/neutron/locale/en_GB/LC_MESSAGES/neutron-log-warning.po deleted file mode 100644 index 22ab5a5db3e..00000000000 --- a/neutron/locale/en_GB/LC_MESSAGES/neutron-log-warning.po +++ /dev/null @@ -1,159 +0,0 @@ -# Translations template for neutron. -# Copyright (C) 2014 ORGANIZATION -# This file is distributed under the same license as the neutron project. -# -# Translators: -# Andi Chandler , 2014 -msgid "" -msgstr "" -"Project-Id-Version: Neutron\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-14 06:11+0000\n" -"PO-Revision-Date: 2014-07-25 23:10+0000\n" -"Last-Translator: Andi Chandler \n" -"Language-Team: English (United Kingdom) (http://www.transifex.com/projects/p/" -"neutron/language/en_GB/)\n" -"Language: en_GB\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: neutron/policy.py:94 -#, python-format -msgid "" -"Found deprecated policy rule:%s. Please consider upgrading your policy " -"configuration file" -msgstr "" -"Found deprecated policy rule:%s. Please consider upgrading your policy " -"configuration file" - -#: neutron/policy.py:137 -#, python-format -msgid "Unable to find data type descriptor for attribute %s" -msgstr "Unable to find data type descriptor for attribute %s" - -#: neutron/agent/securitygroups_rpc.py:183 -msgid "" -"security_group_info_for_devices rpc call not supported by the server, " -"falling back to old security_group_rules_for_devices which scales worse." -msgstr "" - -#: neutron/agent/linux/keepalived.py:358 -msgid "" -"A previous instance of keepalived seems to be dead, unable to restart it, a " -"new instance will be spawned" -msgstr "" - -#: neutron/db/l3_agentschedulers_db.py:105 -msgid "" -"Time since last L3 agent reschedule check has exceeded the interval between " -"checks. Waiting before check to allow agents to send a heartbeat in case " -"there was a clock adjustment." -msgstr "" - -#: neutron/db/l3_agentschedulers_db.py:127 -#, python-format -msgid "" -"Rescheduling router %(router)s from agent %(agent)s because the agent did " -"not report to the server in the last %(dead_time)s seconds." -msgstr "" - -#: neutron/db/l3_hamode_db.py:404 -#, python-format -msgid "The router %(router_id)s is bound multiple times on the agent %(host)s" -msgstr "" - -#: neutron/openstack/common/service.py:364 -#, python-format -msgid "pid %d not in child list" -msgstr "pid %d not in child list" - -#: neutron/plugins/ml2/drivers/type_tunnel.py:143 -#, python-format -msgid "%(type)s tunnel %(id)s not found" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_sync.py:68 -#, python-format -msgid "Create network postcommit failed for network %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_sync.py:78 -#, python-format -msgid "Create subnet postcommit failed for subnet %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_sync.py:91 -#, python-format -msgid "Create port postcommit failed for port %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_sync.py:110 -#, python-format -msgid "Add interface postcommit failed for port %s" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:299 -#, python-format -msgid "Subnet %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:317 -#, python-format -msgid "Router %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:329 -#, python-format -msgid "" -"Route with destination %(dest)s and nexthop %(hop)s not found in neutron for " -"sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:343 -#, python-format -msgid "Security group %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:354 -#, python-format -msgid "Security group rule %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:364 -#, python-format -msgid "Floating ip %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:376 -#, python-format -msgid "IP allocation for floating ip %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:387 -#, python-format -msgid "Net-partition %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:397 -#, python-format -msgid "VM port %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:290 -#, python-format -msgid "Unable to create tunnel port. Invalid remote IP: %s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:713 -#, python-format -msgid "" -"VIF port: %s has no ofport configured, and might not be able to transmit" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:820 -#, python-format -msgid "Device %s not defined on plugin" -msgstr "" diff --git a/neutron/locale/en_US/LC_MESSAGES/neutron.po b/neutron/locale/en_US/LC_MESSAGES/neutron.po deleted file mode 100644 index 09f3575f817..00000000000 --- a/neutron/locale/en_US/LC_MESSAGES/neutron.po +++ /dev/null @@ -1,16406 +0,0 @@ -# English (United States) translations for neutron. -# Copyright (C) 2013 ORGANIZATION -# This file is distributed under the same license as the neutron project. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Neutron\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-30 06:48+0000\n" -"PO-Revision-Date: 2013-01-28 21:54+0000\n" -"Last-Translator: FULL NAME \n" -"Language-Team: English (United States) " -"(http://www.transifex.com/projects/p/openstack/language/en_US/)\n" -"Plural-Forms: nplurals=2; plural=(n != 1)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" - -#: neutron/auth.py:35 -msgid "X_USER_ID is not found in request" -msgstr "" - -#: neutron/context.py:82 -#, python-format -msgid "Arguments dropped when creating context: %s" -msgstr "" - -#: neutron/context.py:110 -#, python-format -msgid "read_deleted can only be one of 'no', 'yes' or 'only', not %r" -msgstr "" - -#: neutron/manager.py:71 -#, python-format -msgid "dhcp_agents_per_network must be >= 1. '%s' is invalid." -msgstr "" - -#: neutron/manager.py:83 -msgid "Neutron core_plugin not configured!" -msgstr "" - -#: neutron/manager.py:112 -#, python-format -msgid "Loading core plugin: %s" -msgstr "" - -#: neutron/manager.py:137 -#, python-format -msgid "Error loading plugin by name, %s" -msgstr "" - -#: neutron/manager.py:138 -#, python-format -msgid "Error loading plugin by class, %s" -msgstr "" - -#: neutron/manager.py:139 -msgid "Plugin not found." -msgstr "" - -#: neutron/manager.py:144 -msgid "Loading services supported by the core plugin" -msgstr "" - -#: neutron/manager.py:152 -#, python-format -msgid "Service %s is supported by the core plugin" -msgstr "" - -#: neutron/manager.py:165 -#, python-format -msgid "Loading service plugins: %s" -msgstr "" - -#: neutron/manager.py:170 -#, python-format -msgid "Loading Plugin: %s" -msgstr "" - -#: neutron/manager.py:178 -#, python-format -msgid "Multiple plugins for service %s were configured" -msgstr "" - -#: neutron/manager.py:190 -#, python-format -msgid "Successfully loaded %(type)s plugin. Description: %(desc)s" -msgstr "" - -#: neutron/policy.py:91 -#, python-format -msgid "Loading policies from file: %s" -msgstr "" - -#: neutron/policy.py:160 -#, python-format -msgid "" -"Attribute type descriptor is not a dict. Unable to generate any sub-attr " -"policy rule for %s." -msgstr "" - -#: neutron/policy.py:246 -#, python-format -msgid "" -"Unable to identify a target field from:%s.match should be in the form " -"%%()s" -msgstr "" - -#: neutron/policy.py:272 -#, python-format -msgid "Unable to find ':' as separator in %s." -msgstr "" - -#: neutron/policy.py:276 -#, python-format -msgid "Unable to find resource name in %s" -msgstr "" - -#: neutron/policy.py:285 -#, python-format -msgid "" -"Unable to verify match:%(match)s as the parent resource: %(res)s was not " -"found" -msgstr "" - -#: neutron/policy.py:343 -#, python-format -msgid "Unable to find requested field: %(field)s in target: %(target_dict)s" -msgstr "" - -#: neutron/policy.py:401 -#, python-format -msgid "Failed policy check for '%s'" -msgstr "" - -#: neutron/quota.py:34 -msgid "Resource name(s) that are supported in quota features" -msgstr "" - -#: neutron/quota.py:38 -msgid "" -"Default number of resource allowed per tenant. A negative value means " -"unlimited." -msgstr "" - -#: neutron/quota.py:42 -msgid "Number of networks allowed per tenant.A negative value means unlimited." -msgstr "" - -#: neutron/quota.py:46 -msgid "Number of subnets allowed per tenant, A negative value means unlimited." -msgstr "" - -#: neutron/quota.py:50 -msgid "Number of ports allowed per tenant. A negative value means unlimited." -msgstr "" - -#: neutron/quota.py:54 -msgid "Default driver to use for quota checks" -msgstr "" - -#: neutron/quota.py:148 neutron/quota.py:153 -msgid "Access to this resource was denied." -msgstr "" - -#: neutron/quota.py:226 -msgid "" -"ConfDriver is used as quota_driver because the loaded plugin does not " -"support 'quotas' table." -msgstr "" - -#: neutron/quota.py:231 -#, python-format -msgid "Loaded quota_driver: %s." -msgstr "" - -#: neutron/quota.py:240 -#, python-format -msgid "%s is already registered." -msgstr "" - -#: neutron/service.py:40 -msgid "Seconds between running periodic tasks" -msgstr "" - -#: neutron/service.py:43 -msgid "Number of separate API worker processes for service" -msgstr "" - -#: neutron/service.py:46 -msgid "Number of RPC worker processes for service" -msgstr "" - -#: neutron/service.py:49 -msgid "" -"Range of seconds to randomly delay when starting the periodic task " -"scheduler to reduce stampeding. (Disable by setting to 0)" -msgstr "" - -#: neutron/service.py:105 neutron/service.py:163 -msgid "Unrecoverable error: please check log for details." -msgstr "" - -#: neutron/service.py:144 -msgid "Active plugin doesn't implement start_rpc_listeners" -msgstr "" - -#: neutron/service.py:146 -#, python-format -msgid "'rpc_workers = %d' ignored because start_rpc_listeners is not implemented." -msgstr "" - -#: neutron/service.py:170 -msgid "No known API applications configured." -msgstr "" - -#: neutron/service.py:177 -#, python-format -msgid "Neutron service started, listening on %(host)s:%(port)s" -msgstr "" - -#: neutron/service.py:278 -msgid "Exception occurs when timer stops" -msgstr "" - -#: neutron/service.py:288 -msgid "Exception occurs when waiting for timer" -msgstr "" - -#: neutron/wsgi.py:51 -msgid "Number of backlog requests to configure the socket with" -msgstr "" - -#: neutron/wsgi.py:55 -msgid "" -"Sets the value of TCP_KEEPIDLE in seconds for each server socket. Not " -"supported on OS X." -msgstr "" - -#: neutron/wsgi.py:59 -msgid "Number of seconds to keep retrying to listen" -msgstr "" - -#: neutron/wsgi.py:62 -msgid "Max header line to accommodate large tokens" -msgstr "" - -#: neutron/wsgi.py:65 -msgid "Enable SSL on the API server" -msgstr "" - -#: neutron/wsgi.py:67 -msgid "CA certificate file to use to verify connecting clients" -msgstr "" - -#: neutron/wsgi.py:70 -msgid "Certificate file to use when starting the server securely" -msgstr "" - -#: neutron/wsgi.py:73 -msgid "Private key file to use when starting the server securely" -msgstr "" - -#: neutron/wsgi.py:132 -#, python-format -msgid "Unable to listen on %(host)s:%(port)s" -msgstr "" - -#: neutron/wsgi.py:138 -#, python-format -msgid "Unable to find ssl_cert_file : %s" -msgstr "" - -#: neutron/wsgi.py:144 -#, python-format -msgid "Unable to find ssl_key_file : %s" -msgstr "" - -#: neutron/wsgi.py:149 -#, python-format -msgid "Unable to find ssl_ca_file : %s" -msgstr "" - -#: neutron/wsgi.py:182 -#, python-format -msgid "Could not bind to %(host)s:%(port)s after trying for %(time)d seconds" -msgstr "" - -#: neutron/wsgi.py:340 -msgid "Missing Content-Type" -msgstr "" - -#: neutron/wsgi.py:529 -#, python-format -msgid "Data %(data)s type is %(type)s" -msgstr "" - -#: neutron/wsgi.py:612 -msgid "Cannot understand JSON" -msgstr "" - -#: neutron/wsgi.py:625 neutron/wsgi.py:628 -msgid "Inline DTD forbidden" -msgstr "" - -#: neutron/wsgi.py:709 -msgid "Cannot understand XML" -msgstr "" - -#: neutron/wsgi.py:818 -msgid "Unrecognized Content-Type provided in request" -msgstr "" - -#: neutron/wsgi.py:822 -msgid "No Content-Type provided in request" -msgstr "" - -#: neutron/wsgi.py:826 -msgid "Empty body provided in request" -msgstr "" - -#: neutron/wsgi.py:833 -msgid "Unable to deserialize body as provided Content-Type" -msgstr "" - -#: neutron/wsgi.py:929 -msgid "You must implement __call__" -msgstr "" - -#: neutron/wsgi.py:1022 neutron/api/v2/base.py:191 neutron/api/v2/base.py:332 -#: neutron/api/v2/base.py:472 neutron/api/v2/base.py:531 -#: neutron/extensions/l3agentscheduler.py:50 -#: neutron/extensions/l3agentscheduler.py:93 -msgid "The resource could not be found." -msgstr "" - -#: neutron/wsgi.py:1069 -#, python-format -msgid "%(method)s %(url)s" -msgstr "" - -#: neutron/wsgi.py:1075 -msgid "Unsupported Content-Type" -msgstr "" - -#: neutron/wsgi.py:1076 -#, python-format -msgid "InvalidContentType: %s" -msgstr "" - -#: neutron/wsgi.py:1080 -msgid "Malformed request body" -msgstr "" - -#: neutron/wsgi.py:1081 -#, python-format -msgid "MalformedRequestBody: %s" -msgstr "" - -#: neutron/wsgi.py:1088 -#, python-format -msgid "HTTP exception thrown: %s" -msgstr "" - -#: neutron/wsgi.py:1093 -msgid "Internal error" -msgstr "" - -#: neutron/wsgi.py:1108 neutron/wsgi.py:1210 -#, python-format -msgid "%(url)s returned with HTTP %(status)d" -msgstr "" - -#: neutron/wsgi.py:1111 -#, python-format -msgid "%(url)s returned a fault: %(exception)s" -msgstr "" - -#: neutron/wsgi.py:1229 -#, python-format -msgid "The requested content type %s is invalid." -msgstr "" - -#: neutron/wsgi.py:1288 -msgid "Could not deserialize data" -msgstr "" - -#: neutron/agent/dhcp_agent.py:51 -msgid "Interval to resync." -msgstr "" - -#: neutron/agent/dhcp_agent.py:54 -msgid "The driver used to manage the DHCP server." -msgstr "" - -#: neutron/agent/dhcp_agent.py:56 -msgid "Support Metadata requests on isolated networks." -msgstr "" - -#: neutron/agent/dhcp_agent.py:58 -msgid "" -"Allows for serving metadata requests from a dedicated network. Requires " -"enable_isolated_metadata = True" -msgstr "" - -#: neutron/agent/dhcp_agent.py:62 -msgid "Number of threads to use during sync process." -msgstr "" - -#: neutron/agent/dhcp_agent.py:65 neutron/agent/l3_agent.py:496 -#: neutron/agent/metadata/namespace_proxy.py:165 -msgid "Location of Metadata Proxy UNIX domain socket" -msgstr "" - -#: neutron/agent/dhcp_agent.py:102 -#, python-format -msgid "" -"The '%s' DHCP-driver does not support retrieving of a list of existing " -"networks" -msgstr "" - -#: neutron/agent/dhcp_agent.py:109 neutron/agent/dhcp_agent.py:600 -msgid "DHCP agent started" -msgstr "" - -#: neutron/agent/dhcp_agent.py:118 -#, python-format -msgid "Calling driver for network: %(net)s action: %(action)s" -msgstr "" - -#: neutron/agent/dhcp_agent.py:134 -#, python-format -msgid "" -"Unable to %(action)s dhcp for %(net_id)s: there is a conflict with its " -"current state; please check that the network and/or its subnet(s) still " -"exist." -msgstr "" - -#: neutron/agent/dhcp_agent.py:143 neutron/agent/dhcp_agent.py:202 -#, python-format -msgid "Network %s has been deleted." -msgstr "" - -#: neutron/agent/dhcp_agent.py:145 -#, python-format -msgid "Unable to %(action)s dhcp for %(net_id)s." -msgstr "" - -#: neutron/agent/dhcp_agent.py:155 -msgid "Synchronizing state" -msgstr "" - -#: neutron/agent/dhcp_agent.py:167 -#, python-format -msgid "Unable to sync network state on deleted network %s" -msgstr "" - -#: neutron/agent/dhcp_agent.py:173 -msgid "Synchronizing state complete" -msgstr "" - -#: neutron/agent/dhcp_agent.py:177 -msgid "Unable to sync network state." -msgstr "" - -#: neutron/agent/dhcp_agent.py:190 -#, python-format -msgid "resync: %(reason)s" -msgstr "" - -#: neutron/agent/dhcp_agent.py:206 -#, python-format -msgid "Network %s info call failed." -msgstr "" - -#: neutron/agent/dhcp_agent.py:219 -#, python-format -msgid "" -"Network %s may have been deleted and its resources may have already been " -"disposed." -msgstr "" - -#: neutron/agent/dhcp_agent.py:351 -#, python-format -msgid "" -"%(port_num)d router ports found on the metadata access network. Only the " -"port %(port_id)s, for router %(router_id)s will be considered" -msgstr "" - -#: neutron/agent/dhcp_agent.py:582 neutron/agent/l3_agent.py:1987 -#: neutron/agent/metadata/agent.py:354 -#: neutron/plugins/cisco/cfg_agent/cfg_agent.py:326 -#: neutron/services/metering/agents/metering_agent.py:270 -msgid "" -"Neutron server does not support state report. State report for this agent" -" will be disabled." -msgstr "" - -#: neutron/agent/dhcp_agent.py:588 neutron/agent/l3_agent.py:1992 -#: neutron/agent/metadata/agent.py:359 -#: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:108 -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:793 -#: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:216 -#: neutron/plugins/nec/agent/nec_neutron_agent.py:180 -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:264 -#: neutron/plugins/sriovnicagent/sriov_nic_agent.py:131 -#: neutron/services/loadbalancer/agent/agent_manager.py:119 -#: neutron/services/metering/agents/metering_agent.py:275 -msgid "Failed reporting state!" -msgstr "" - -#: neutron/agent/dhcp_agent.py:595 -#, python-format -msgid "Agent updated: %(payload)s" -msgstr "" - -#: neutron/agent/dhcp_agent.py:597 neutron/agent/l3_agent.py:1997 -#: neutron/services/metering/agents/metering_agent.py:278 -#, python-format -msgid "agent_updated by server side %s!" -msgstr "" - -#: neutron/agent/l3_agent.py:214 -msgid "Cannot allocate link local address" -msgstr "" - -#: neutron/agent/l3_agent.py:457 -msgid "" -"The working mode for the agent. Allowed modes are: 'legacy' - this " -"preserves the existing behavior where the L3 agent is deployed on a " -"centralized networking node to provide L3 services like DNAT, and SNAT. " -"Use this mode if you do not want to adopt DVR. 'dvr' - this mode enables " -"DVR functionality and must be used for an L3 agent that runs on a compute" -" host. 'dvr_snat' - this enables centralized SNAT support in conjunction " -"with DVR. This mode must be used for an L3 agent running on a " -"centralized node (or in single-host deployments, e.g. devstack)" -msgstr "" - -#: neutron/agent/l3_agent.py:470 neutron/debug/debug_agent.py:41 -msgid "Name of bridge used for external network traffic." -msgstr "" - -#: neutron/agent/l3_agent.py:474 -msgid "TCP Port used by Neutron metadata namespace proxy." -msgstr "" - -#: neutron/agent/l3_agent.py:478 -msgid "" -"Send this many gratuitous ARPs for HA setup, if less than or equal to 0, " -"the feature is disabled" -msgstr "" - -#: neutron/agent/l3_agent.py:481 -msgid "" -"If namespaces is disabled, the l3 agent can only configure a router that " -"has the matching router ID." -msgstr "" - -#: neutron/agent/l3_agent.py:486 -msgid "Agent should implement routers with no gateway" -msgstr "" - -#: neutron/agent/l3_agent.py:488 -msgid "UUID of external network for routers implemented by the agents." -msgstr "" - -#: neutron/agent/l3_agent.py:491 -msgid "Allow running metadata proxy." -msgstr "" - -#: neutron/agent/l3_agent.py:493 -msgid "Delete namespace after removing a router." -msgstr "" - -#: neutron/agent/l3_agent.py:516 -#, python-format -msgid "Error importing interface driver '%s'" -msgstr "" - -#: neutron/agent/l3_agent.py:533 -#, python-format -msgid "" -"l3-agent cannot check service plugins enabled at the neutron server when " -"startup due to RPC error. It happens when the server does not support " -"this RPC API. If the error is UnsupportedVersion you can ignore this " -"warning. Detail message: %s" -msgstr "" - -#: neutron/agent/l3_agent.py:564 neutron/agent/linux/dhcp.py:785 -#: neutron/services/metering/drivers/iptables/iptables_driver.py:90 -msgid "An interface driver must be specified" -msgstr "" - -#: neutron/agent/l3_agent.py:569 -msgid "Router id is required if not using namespaces." -msgstr "" - -#: neutron/agent/l3_agent.py:587 -msgid "RuntimeError in obtaining router list for namespace cleanup." -msgstr "" - -#: neutron/agent/l3_agent.py:617 -#, python-format -msgid "Failed to destroy stale router namespace %s" -msgstr "" - -#: neutron/agent/l3_agent.py:635 neutron/agent/linux/dhcp.py:235 -#, python-format -msgid "Failed trying to delete namespace: %s" -msgstr "" - -#: neutron/agent/l3_agent.py:723 -msgid "" -"The 'gateway_external_network_id' option must be configured for this " -"agent as Neutron has more than one external network." -msgstr "" - -#: neutron/agent/l3_agent.py:755 -#, python-format -msgid "Info for router %s were not found. Skipping router removal" -msgstr "" - -#: neutron/agent/l3_agent.py:830 -#: neutron/plugins/cisco/cfg_agent/service_helpers/routing_svc_helper.py:633 -#: neutron/services/firewall/agents/varmour/varmour_router.py:100 -#, python-format -msgid "Router port %s has no IP address" -msgstr "" - -#: neutron/agent/l3_agent.py:832 neutron/db/l3_db.py:954 -#: neutron/plugins/cisco/cfg_agent/service_helpers/routing_svc_helper.py:635 -#: neutron/services/firewall/agents/varmour/varmour_router.py:103 -#, python-format -msgid "Ignoring multiple IPs on router port %s" -msgstr "" - -#: neutron/agent/l3_agent.py:893 -#, python-format -msgid "Deleting stale internal router device: %s" -msgstr "" - -#: neutron/agent/l3_agent.py:930 -#, python-format -msgid "Deleting stale external router device: %s" -msgstr "" - -#: neutron/agent/l3_agent.py:1098 -#, python-format -msgid "Unable to configure IP address for floating IP: %s" -msgstr "" - -#: neutron/agent/l3_agent.py:1181 -#, python-format -msgid "Failed sending gratuitous ARP: %s" -msgstr "" - -#: neutron/agent/l3_agent.py:1243 -msgid "DVR: no map match_port found!" -msgstr "" - -#: neutron/agent/l3_agent.py:1447 -msgid "DVR: error adding redirection logic" -msgstr "" - -#: neutron/agent/l3_agent.py:1459 -msgid "DVR: removed snat failed" -msgstr "" - -#: neutron/agent/l3_agent.py:1560 -msgid "Missing subnet/agent_gateway_port" -msgstr "" - -#: neutron/agent/l3_agent.py:1681 -#, python-format -msgid "Got router deleted notification for %s" -msgstr "" - -#: neutron/agent/l3_agent.py:1702 -msgid "DVR: Failed updating arp entry" -msgstr "" - -#: neutron/agent/l3_agent.py:1729 -#, python-format -msgid "Got routers updated notification :%s" -msgstr "" - -#: neutron/agent/l3_agent.py:1739 -#, python-format -msgid "Got router removed from agent :%r" -msgstr "" - -#: neutron/agent/l3_agent.py:1745 -#, python-format -msgid "Got router added to agent :%r" -msgstr "" - -#: neutron/agent/l3_agent.py:1752 -#, python-format -msgid "The external network bridge '%s' does not exist" -msgstr "" - -#: neutron/agent/l3_agent.py:1804 -#, python-format -msgid "Failed to fetch router information for '%s'" -msgstr "" - -#: neutron/agent/l3_agent.py:1843 -#, python-format -msgid "Starting _sync_routers_task - fullsync:%s" -msgstr "" - -#: neutron/agent/l3_agent.py:1863 -#, python-format -msgid "Processing :%r" -msgstr "" - -#: neutron/agent/l3_agent.py:1871 -msgid "_sync_routers_task successfully completed" -msgstr "" - -#: neutron/agent/l3_agent.py:1873 -msgid "Failed synchronizing routers due to RPC error" -msgstr "" - -#: neutron/agent/l3_agent.py:1876 -#: neutron/services/metering/agents/metering_agent.py:59 -msgid "Failed synchronizing routers" -msgstr "" - -#: neutron/agent/l3_agent.py:1899 -msgid "L3 agent started" -msgstr "" - -#: neutron/agent/l3_agent.py:1918 -#, python-format -msgid "Added route entry is '%s'" -msgstr "" - -#: neutron/agent/l3_agent.py:1926 -#, python-format -msgid "Removed route entry is '%s'" -msgstr "" - -#: neutron/agent/l3_agent.py:1960 -msgid "Report state task started" -msgstr "" - -#: neutron/agent/l3_agent.py:1984 -msgid "Report state task successfully completed" -msgstr "" - -#: neutron/agent/l3_ha_agent.py:35 -msgid "Location to store keepalived/conntrackd config files" -msgstr "" - -#: neutron/agent/l3_ha_agent.py:39 -msgid "VRRP authentication type AH/PASS" -msgstr "" - -#: neutron/agent/l3_ha_agent.py:41 -msgid "VRRP authentication password" -msgstr "" - -#: neutron/agent/l3_ha_agent.py:45 -msgid "The advertisement interval in seconds" -msgstr "" - -#: neutron/agent/l3_ha_agent.py:56 -#, python-format -msgid "Router %s is not a HA router" -msgstr "" - -#: neutron/agent/netns_cleanup_util.py:59 -msgid "Delete the namespace by removing all devices." -msgstr "" - -#: neutron/agent/netns_cleanup_util.py:116 -#, python-format -msgid "Unable to find bridge for device: %s" -msgstr "" - -#: neutron/agent/netns_cleanup_util.py:140 -#, python-format -msgid "Error unable to destroy namespace: %s" -msgstr "" - -#: neutron/agent/ovs_cleanup_util.py:39 -msgid "" -"True to delete all ports on all the OpenvSwitch bridges. False to delete " -"ports created by Neutron on integration and external network bridges." -msgstr "" - -#: neutron/agent/ovs_cleanup_util.py:73 -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:663 -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:302 -#, python-format -msgid "Delete %s" -msgstr "" - -#: neutron/agent/ovs_cleanup_util.py:103 -#, python-format -msgid "Cleaning %s" -msgstr "" - -#: neutron/agent/ovs_cleanup_util.py:110 -msgid "OVS cleanup completed successfully" -msgstr "" - -#: neutron/agent/rpc.py:110 -msgid "DVR functionality requires a server upgrade." -msgstr "" - -#: neutron/agent/securitygroups_rpc.py:33 -msgid "Driver for security groups firewall in the L2 agent" -msgstr "" - -#: neutron/agent/securitygroups_rpc.py:37 -msgid "" -"Controls whether the neutron security group API is enabled in the server." -" It should be false when using no security groups or using the nova " -"security group API." -msgstr "" - -#: neutron/agent/securitygroups_rpc.py:44 -msgid "Use ipset to speed-up the iptables based security groups." -msgstr "" - -#: neutron/agent/securitygroups_rpc.py:64 -#: neutron/agent/securitygroups_rpc.py:156 -msgid "Driver configuration doesn't match with enable_security_group" -msgstr "" - -#: neutron/agent/securitygroups_rpc.py:77 -msgid "Disabled security-group extension." -msgstr "" - -#: neutron/agent/securitygroups_rpc.py:79 -msgid "Disabled allowed-address-pairs extension." -msgstr "" - -#: neutron/agent/securitygroups_rpc.py:87 -#, python-format -msgid "Get security group rules for devices via rpc %r" -msgstr "" - -#: neutron/agent/securitygroups_rpc.py:111 -msgid "" -"Security group agent binding currently not set. This should be set by the" -" end of the init process." -msgstr "" - -#: neutron/agent/securitygroups_rpc.py:122 -#, python-format -msgid "Security group rule updated on remote: %s" -msgstr "" - -#: neutron/agent/securitygroups_rpc.py:134 -#, python-format -msgid "Security group member updated on remote: %s" -msgstr "" - -#: neutron/agent/securitygroups_rpc.py:141 -#: neutron/agent/securitygroups_rpc.py:252 -msgid "Provider rule updated" -msgstr "" - -#: neutron/agent/securitygroups_rpc.py:154 -#, python-format -msgid "Init firewall settings (driver=%s)" -msgstr "" - -#: neutron/agent/securitygroups_rpc.py:193 -#, python-format -msgid "Preparing filters for devices %s" -msgstr "" - -#: neutron/agent/securitygroups_rpc.py:223 -#, python-format -msgid "Security group rule updated %r" -msgstr "" - -#: neutron/agent/securitygroups_rpc.py:230 -#, python-format -msgid "Security group member updated %r" -msgstr "" - -#: neutron/agent/securitygroups_rpc.py:244 -#, python-format -msgid "" -"Adding %s devices to the list of devices for which firewall needs to be " -"refreshed" -msgstr "" - -#: neutron/agent/securitygroups_rpc.py:264 -#, python-format -msgid "Remove device filter for %r" -msgstr "" - -#: neutron/agent/securitygroups_rpc.py:273 -msgid "Refresh firewall rules" -msgstr "" - -#: neutron/agent/securitygroups_rpc.py:277 -msgid "No ports here to refresh firewall" -msgstr "" - -#: neutron/agent/securitygroups_rpc.py:291 -#, python-format -msgid "Update port filter for %s" -msgstr "" - -#: neutron/agent/securitygroups_rpc.py:314 -#, python-format -msgid "Preparing device filters for %d new devices" -msgstr "" - -#: neutron/agent/securitygroups_rpc.py:327 -msgid "Refreshing firewall for all filtered devices" -msgstr "" - -#: neutron/agent/securitygroups_rpc.py:335 -#, python-format -msgid "Refreshing firewall for %d devices" -msgstr "" - -#: neutron/agent/common/config.py:29 -msgid "Root helper application." -msgstr "" - -#: neutron/agent/common/config.py:34 -msgid "" -"Seconds between nodes reporting state to server; should be less than " -"agent_down_time, best if it is half or less than agent_down_time." -msgstr "" - -#: neutron/agent/common/config.py:41 -msgid "The driver used to manage the virtual interface." -msgstr "" - -#: neutron/agent/common/config.py:46 -msgid "Allow overlapping IP." -msgstr "" - -#: neutron/agent/common/config.py:102 -msgid "" -"DEFAULT.root_helper is deprecated! Please move root_helper configuration " -"to [AGENT] section." -msgstr "" - -#: neutron/agent/common/config.py:113 -msgid "Top-level directory for maintaining dhcp state" -msgstr "" - -#: neutron/agent/linux/async_process.py:66 -msgid "respawn_interval must be >= 0 if provided." -msgstr "" - -#: neutron/agent/linux/async_process.py:80 -msgid "Process is already started" -msgstr "" - -#: neutron/agent/linux/async_process.py:82 -#, python-format -msgid "Launching async process [%s]." -msgstr "" - -#: neutron/agent/linux/async_process.py:88 -#, python-format -msgid "Halting async process [%s]." -msgstr "" - -#: neutron/agent/linux/async_process.py:91 -msgid "Process is not running." -msgstr "" - -#: neutron/agent/linux/async_process.py:163 -#, python-format -msgid "An error occurred while killing [%s]." -msgstr "" - -#: neutron/agent/linux/async_process.py:170 -#, python-format -msgid "Halting async process [%s] in response to an error." -msgstr "" - -#: neutron/agent/linux/async_process.py:176 -#, python-format -msgid "Respawning async process [%s]." -msgstr "" - -#: neutron/agent/linux/async_process.py:185 -#, python-format -msgid "An error occurred while communicating with async process [%s]." -msgstr "" - -#: neutron/agent/linux/daemon.py:35 -#, python-format -msgid "Error while handling pidfile: %s" -msgstr "" - -#: neutron/agent/linux/daemon.py:43 -msgid "Unable to unlock pid file" -msgstr "" - -#: neutron/agent/linux/daemon.py:92 -msgid "Fork failed" -msgstr "" - -#: neutron/agent/linux/daemon.py:134 -#, python-format -msgid "Pidfile %s already exist. Daemon already running?" -msgstr "" - -#: neutron/agent/linux/dhcp.py:43 -msgid "Location to store DHCP server config files" -msgstr "" - -#: neutron/agent/linux/dhcp.py:46 neutron/plugins/vmware/dhcp_meta/nsx.py:44 -msgid "Domain to use for building the hostnames" -msgstr "" - -#: neutron/agent/linux/dhcp.py:49 -msgid "Override the default dnsmasq settings with this file" -msgstr "" - -#: neutron/agent/linux/dhcp.py:51 -msgid "Comma-separated list of the DNS servers which will be used as forwarders." -msgstr "" - -#: neutron/agent/linux/dhcp.py:55 -msgid "Delete namespace after removing a dhcp server." -msgstr "" - -#: neutron/agent/linux/dhcp.py:59 -msgid "Limit number of leases to prevent a denial-of-service." -msgstr "" - -#: neutron/agent/linux/dhcp.py:217 -#, python-format -msgid "" -"DHCP for %(net_id)s is stale, pid %(pid)d does not exist, performing " -"cleanup" -msgstr "" - -#: neutron/agent/linux/dhcp.py:224 -#, python-format -msgid "No DHCP started for %s" -msgstr "" - -#: neutron/agent/linux/dhcp.py:256 neutron/agent/linux/utils.py:155 -#, python-format -msgid "Error while reading %s" -msgstr "" - -#: neutron/agent/linux/dhcp.py:263 neutron/agent/linux/utils.py:162 -#, python-format -msgid "Unable to convert value in %s" -msgstr "" - -#: neutron/agent/linux/dhcp.py:265 neutron/agent/linux/utils.py:164 -#, python-format -msgid "Unable to access %s" -msgstr "" - -#: neutron/agent/linux/dhcp.py:326 -#, python-format -msgid "" -"FAILED VERSION REQUIREMENT FOR DNSMASQ. DHCP AGENT MAY NOT RUN CORRECTLY!" -" Please ensure that its version is %s or above!" -msgstr "" - -#: neutron/agent/linux/dhcp.py:332 -#, python-format -msgid "" -"Unable to determine dnsmasq version. Please ensure that its version is %s" -" or above!" -msgstr "" - -#: neutron/agent/linux/dhcp.py:434 -#, python-format -msgid "Killing dhcpmasq for network since all subnets have turned off DHCP: %s" -msgstr "" - -#: neutron/agent/linux/dhcp.py:446 -#, python-format -msgid "Pid %d is stale, relaunching dnsmasq" -msgstr "" - -#: neutron/agent/linux/dhcp.py:447 -#, python-format -msgid "Reloading allocations for network: %s" -msgstr "" - -#: neutron/agent/linux/dhcp.py:498 -#, python-format -msgid "Building host file: %s" -msgstr "" - -#: neutron/agent/linux/dhcp.py:507 -#, python-format -msgid "Adding %(mac)s : %(name)s : %(ip)s" -msgstr "" - -#: neutron/agent/linux/dhcp.py:520 -#, python-format -msgid "Done building host file %s" -msgstr "" - -#: neutron/agent/linux/dhcp.py:792 -#, python-format -msgid "Error importing interface driver '%(driver)s': %(inner)s" -msgstr "" - -#: neutron/agent/linux/dhcp.py:832 -#, python-format -msgid "Setting gateway for dhcp netns on net %(n)s to %(ip)s" -msgstr "" - -#: neutron/agent/linux/dhcp.py:842 -#, python-format -msgid "Removing gateway for dhcp netns on net %s" -msgstr "" - -#: neutron/agent/linux/dhcp.py:886 -#, python-format -msgid "" -"DHCP port %(device_id)s on network %(network_id)s does not yet exist. " -"Checking for a reserved port." -msgstr "" - -#: neutron/agent/linux/dhcp.py:900 -#, python-format -msgid "DHCP port %(device_id)s on network %(network_id)s does not yet exist." -msgstr "" - -#: neutron/agent/linux/dhcp.py:935 neutron/debug/debug_agent.py:67 -#, python-format -msgid "Reusing existing device: %s." -msgstr "" - -#: neutron/agent/linux/external_process.py:32 -msgid "Location to store child pid files" -msgstr "" - -#: neutron/agent/linux/external_process.py:34 -msgid "Periodically check child processes" -msgstr "" - -#: neutron/agent/linux/external_process.py:37 -msgid "Action to be executed when a child process dies" -msgstr "" - -#: neutron/agent/linux/external_process.py:39 -msgid "Interval between checks of child process liveness (seconds)" -msgstr "" - -#: neutron/agent/linux/interface.py:39 -msgid "Name of Open vSwitch bridge to use" -msgstr "" - -#: neutron/agent/linux/interface.py:42 -msgid "Uses veth for an interface or not" -msgstr "" - -#: neutron/agent/linux/interface.py:44 -msgid "MTU setting for device." -msgstr "" - -#: neutron/agent/linux/interface.py:46 -msgid "" -"Mapping between flavor and LinuxInterfaceDriver. It is specific to " -"MetaInterfaceDriver used with admin_user, admin_password, " -"admin_tenant_name, admin_url, auth_strategy, auth_region and " -"endpoint_type." -msgstr "" - -#: neutron/agent/linux/interface.py:52 -msgid "Admin username" -msgstr "" - -#: neutron/agent/linux/interface.py:54 neutron/agent/metadata/agent.py:51 -#: neutron/plugins/metaplugin/common/config.py:65 -msgid "Admin password" -msgstr "" - -#: neutron/agent/linux/interface.py:57 neutron/agent/metadata/agent.py:54 -#: neutron/plugins/metaplugin/common/config.py:68 -msgid "Admin tenant name" -msgstr "" - -#: neutron/agent/linux/interface.py:59 neutron/agent/metadata/agent.py:56 -#: neutron/plugins/metaplugin/common/config.py:70 -msgid "Authentication URL" -msgstr "" - -#: neutron/agent/linux/interface.py:61 neutron/agent/metadata/agent.py:58 -#: neutron/common/config.py:47 neutron/plugins/metaplugin/common/config.py:72 -msgid "The type of authentication to use" -msgstr "" - -#: neutron/agent/linux/interface.py:63 neutron/agent/metadata/agent.py:60 -#: neutron/plugins/metaplugin/common/config.py:74 -msgid "Authentication region" -msgstr "" - -#: neutron/agent/linux/interface.py:66 neutron/agent/metadata/agent.py:70 -msgid "Network service endpoint type to pull from the keystone catalog" -msgstr "" - -#: neutron/agent/linux/interface.py:265 neutron/agent/linux/interface.py:320 -#: neutron/agent/linux/interface.py:383 neutron/agent/linux/interface.py:430 -#, python-format -msgid "Device %s already exists" -msgstr "" - -#: neutron/agent/linux/interface.py:283 neutron/agent/linux/interface.py:331 -#: neutron/agent/linux/interface.py:395 neutron/agent/linux/interface.py:437 -#, python-format -msgid "Unplugged interface '%s'" -msgstr "" - -#: neutron/agent/linux/interface.py:285 neutron/agent/linux/interface.py:330 -#: neutron/agent/linux/interface.py:397 neutron/agent/linux/interface.py:439 -#, python-format -msgid "Failed unplugging interface '%s'" -msgstr "" - -#: neutron/agent/linux/interface.py:498 -#, python-format -msgid "Driver location: %s" -msgstr "" - -#: neutron/agent/linux/ip_lib.py:26 -msgid "Force ip_lib calls to use the root helper" -msgstr "" - -#: neutron/agent/linux/iptables_firewall.py:85 -#, python-format -msgid "Preparing device (%s) filter" -msgstr "" - -#: neutron/agent/linux/iptables_firewall.py:93 -#, python-format -msgid "Updating device (%s) filter" -msgstr "" - -#: neutron/agent/linux/iptables_firewall.py:95 -#, python-format -msgid "Attempted to update port filter which is not filtered %s" -msgstr "" - -#: neutron/agent/linux/iptables_firewall.py:104 -#, python-format -msgid "Removing device (%s) filter" -msgstr "" - -#: neutron/agent/linux/iptables_firewall.py:106 -#, python-format -msgid "Attempted to remove port filter which is not filtered %r" -msgstr "" - -#: neutron/agent/linux/iptables_manager.py:156 -#, python-format -msgid "Attempted to remove chain %s which does not exist" -msgstr "" - -#: neutron/agent/linux/iptables_manager.py:198 -#, python-format -msgid "Unknown chain: %r" -msgstr "" - -#: neutron/agent/linux/iptables_manager.py:233 -#, python-format -msgid "" -"Tried to remove rule that was not there: %(chain)r %(rule)r %(wrap)r " -"%(top)r" -msgstr "" - -#: neutron/agent/linux/iptables_manager.py:388 -#, python-format -msgid "Got semaphore / lock \"%s\"" -msgstr "" - -#: neutron/agent/linux/iptables_manager.py:391 -#, python-format -msgid "Semaphore / lock released \"%s\"" -msgstr "" - -#: neutron/agent/linux/iptables_manager.py:442 -#: neutron/tests/unit/test_iptables_manager.py:751 -#: neutron/tests/unit/test_iptables_manager.py:785 -#, python-format -msgid "" -"IPTablesManager.apply failed to apply the following set of iptables " -"rules:\n" -"%s" -msgstr "" - -#: neutron/agent/linux/iptables_manager.py:445 -msgid "IPTablesManager.apply completed with success" -msgstr "" - -#: neutron/agent/linux/iptables_manager.py:455 -#, python-format -msgid "Unable to find table %s" -msgstr "" - -#: neutron/agent/linux/iptables_manager.py:659 -#, python-format -msgid "Attempted to get traffic counters of chain %s which does not exist" -msgstr "" - -#: neutron/agent/linux/keepalived.py:36 -#, python-format -msgid "Invalid instance state: %%(state)s, valid states are: %(valid_states)s" -msgstr "" - -#: neutron/agent/linux/keepalived.py:42 -#, python-format -msgid "" -"Invalid notify state: %%(state)s, valid states are: " -"%(valid_notify_states)s" -msgstr "" - -#: neutron/agent/linux/keepalived.py:48 -#, python-format -msgid "" -"Invalid authentication type: %%(auth_type)s, valid types are: " -"%(valid_auth_types)s" -msgstr "" - -#: neutron/agent/linux/ovs_lib.py:38 -msgid "Timeout in seconds for ovs-vsctl commands" -msgstr "" - -#: neutron/agent/linux/ovs_lib.py:72 neutron/agent/linux/ovs_lib.py:170 -#: neutron/agent/linux/ovs_lib.py:290 -#: neutron/plugins/bigswitch/agent/restproxy_agent.py:54 -#, python-format -msgid "Unable to execute %(cmd)s. Exception: %(exception)s" -msgstr "" - -#: neutron/agent/linux/ovs_lib.py:241 -msgid "" -"Unable to create VXLAN tunnel port. Please ensure that an openvswitch " -"version that supports VXLAN is installed." -msgstr "" - -#: neutron/agent/linux/ovs_lib.py:338 -#, python-format -msgid "Found not yet ready openvswitch port: %s" -msgstr "" - -#: neutron/agent/linux/ovs_lib.py:353 -#, python-format -msgid "Found failed openvswitch port: %s" -msgstr "" - -#: neutron/agent/linux/ovs_lib.py:408 -#, python-format -msgid "Port: %(port_name)s is on %(switch)s, not on %(br_name)s" -msgstr "" - -#: neutron/agent/linux/ovs_lib.py:416 -#, python-format -msgid "ofport: %(ofport)s for VIF: %(vif)s is not a positive integer" -msgstr "" - -#: neutron/agent/linux/ovs_lib.py:426 -#, python-format -msgid "Unable to parse interface details. Exception: %s" -msgstr "" - -#: neutron/agent/linux/ovs_lib.py:444 -#, python-format -msgid "Unable to determine mac address for %s" -msgstr "" - -#: neutron/agent/linux/ovs_lib.py:522 -#, python-format -msgid "OVS flows could not be applied on bridge %s" -msgstr "" - -#: neutron/agent/linux/ovs_lib.py:532 -#, python-format -msgid "Interface %s not found." -msgstr "" - -#: neutron/agent/linux/ovs_lib.py:543 -#, python-format -msgid "Unable to retrieve bridges. Exception: %s" -msgstr "" - -#: neutron/agent/linux/ovs_lib.py:552 -#, python-format -msgid "Bridge %s not found." -msgstr "" - -#: neutron/agent/linux/ovs_lib.py:568 -msgid "Cannot match priority on flow deletion or modification" -msgstr "" - -#: neutron/agent/linux/ovs_lib.py:573 -msgid "Must specify one or more actions on flow addition or modification" -msgstr "" - -#: neutron/agent/linux/ovsdb_monitor.py:44 -#, python-format -msgid "Output received from ovsdb monitor: %s" -msgstr "" - -#: neutron/agent/linux/ovsdb_monitor.py:50 -#, python-format -msgid "Error received from ovsdb monitor: %s" -msgstr "" - -#: neutron/agent/linux/ra.py:31 -msgid "Location to store IPv6 RA config files" -msgstr "" - -#: neutron/agent/linux/utils.py:46 -#, python-format -msgid "Running command: %s" -msgstr "" - -#: neutron/agent/linux/utils.py:70 -#, python-format -msgid "" -"\n" -"Command: %(cmd)s\n" -"Exit code: %(code)s\n" -"Stdout: %(stdout)r\n" -"Stderr: %(stderr)r" -msgstr "" - -#: neutron/agent/metadata/agent.py:49 -#: neutron/plugins/metaplugin/common/config.py:63 -msgid "Admin user" -msgstr "" - -#: neutron/agent/metadata/agent.py:63 -msgid "Turn off verification of the certificate for ssl" -msgstr "" - -#: neutron/agent/metadata/agent.py:66 -msgid "Certificate Authority public key (CA cert) file for ssl" -msgstr "" - -#: neutron/agent/metadata/agent.py:73 -msgid "IP address used by Nova metadata server." -msgstr "" - -#: neutron/agent/metadata/agent.py:76 -msgid "TCP Port used by Nova metadata server." -msgstr "" - -#: neutron/agent/metadata/agent.py:79 -#: neutron/plugins/vmware/dhcp_meta/nsx.py:63 -msgid "Shared secret to sign instance-id request" -msgstr "" - -#: neutron/agent/metadata/agent.py:84 -msgid "Protocol to access nova metadata, http or https" -msgstr "" - -#: neutron/agent/metadata/agent.py:86 -msgid "Allow to perform insecure SSL (https) requests to nova metadata" -msgstr "" - -#: neutron/agent/metadata/agent.py:90 -msgid "Client certificate for nova metadata api server." -msgstr "" - -#: neutron/agent/metadata/agent.py:93 -msgid "Private key of client certificate." -msgstr "" - -#: neutron/agent/metadata/agent.py:123 -#: neutron/agent/metadata/namespace_proxy.py:66 -#, python-format -msgid "Request: %s" -msgstr "" - -#: neutron/agent/metadata/agent.py:132 -#: neutron/agent/metadata/namespace_proxy.py:74 -msgid "Unexpected error." -msgstr "" - -#: neutron/agent/metadata/agent.py:133 -#: neutron/agent/metadata/namespace_proxy.py:75 -msgid "An unknown error has occurred. Please try your request again." -msgstr "" - -#: neutron/agent/metadata/agent.py:179 -msgid "" -"Either one of parameter network_id or router_id must be passed to " -"_get_ports method." -msgstr "" - -#: neutron/agent/metadata/agent.py:228 -msgid "" -"The remote metadata server responded with Forbidden. This response " -"usually occurs when shared secrets do not match." -msgstr "" - -#: neutron/agent/metadata/agent.py:241 -#: neutron/agent/metadata/namespace_proxy.py:120 -msgid "Remote metadata server experienced an internal server error." -msgstr "" - -#: neutron/agent/metadata/agent.py:247 -#: neutron/agent/metadata/namespace_proxy.py:126 -#, python-format -msgid "Unexpected response code: %s" -msgstr "" - -#: neutron/agent/metadata/agent.py:299 -msgid "Location for Metadata Proxy UNIX domain socket" -msgstr "" - -#: neutron/agent/metadata/agent.py:302 -msgid "Number of separate worker processes for metadata server" -msgstr "" - -#: neutron/agent/metadata/agent.py:306 -msgid "Number of backlog requests to configure the metadata server socket with" -msgstr "" - -#: neutron/agent/metadata/namespace_proxy.py:61 -msgid "network_id and router_id are None. One must be provided." -msgstr "" - -#: neutron/agent/metadata/namespace_proxy.py:149 -msgid "Network that will have instance metadata proxied." -msgstr "" - -#: neutron/agent/metadata/namespace_proxy.py:152 -msgid "Router that will have connected instances' metadata proxied." -msgstr "" - -#: neutron/agent/metadata/namespace_proxy.py:155 -#: neutron/tests/functional/agent/linux/simple_daemon.py:42 -msgid "Location of pid file of this process." -msgstr "" - -#: neutron/agent/metadata/namespace_proxy.py:158 -msgid "Run as daemon." -msgstr "" - -#: neutron/agent/metadata/namespace_proxy.py:161 -msgid "TCP Port to listen for metadata server requests." -msgstr "" - -#: neutron/api/api_common.py:101 -#, python-format -msgid "" -"Invalid value for pagination_max_limit: %s. It should be an integer " -"greater to 0" -msgstr "" - -#: neutron/api/api_common.py:115 -#, python-format -msgid "Limit must be an integer 0 or greater and not '%d'" -msgstr "" - -#: neutron/api/api_common.py:132 -msgid "The number of sort_keys and sort_dirs must be same" -msgstr "" - -#: neutron/api/api_common.py:137 -#, python-format -msgid "%s is invalid attribute for sort_keys" -msgstr "" - -#: neutron/api/api_common.py:141 -#, python-format -msgid "" -"%(invalid_dirs)s is invalid value for sort_dirs, valid value is '%(asc)s'" -" and '%(desc)s'" -msgstr "" - -#: neutron/api/api_common.py:315 neutron/api/v2/base.py:599 -#, python-format -msgid "Unable to find '%s' in request body" -msgstr "" - -#: neutron/api/api_common.py:322 -#, python-format -msgid "Failed to parse request. Parameter '%s' not specified" -msgstr "" - -#: neutron/api/extensions.py:253 -#, python-format -msgid "Extension with alias %s does not exist" -msgstr "" - -#: neutron/api/extensions.py:257 neutron/api/extensions.py:261 -msgid "Resource not found." -msgstr "" - -#: neutron/api/extensions.py:283 -#, python-format -msgid "Extended resource: %s" -msgstr "" - -#: neutron/api/extensions.py:305 -#, python-format -msgid "Extended action: %s" -msgstr "" - -#: neutron/api/extensions.py:313 -#, python-format -msgid "Extended request: %s" -msgstr "" - -#: neutron/api/extensions.py:403 -msgid "Initializing extension manager." -msgstr "" - -#: neutron/api/extensions.py:486 -#, python-format -msgid "Error fetching extended attributes for extension '%s'" -msgstr "" - -#: neutron/api/extensions.py:492 -#, python-format -msgid "" -"Extension '%s' provides no backward compatibility map for extended " -"attributes" -msgstr "" - -#: neutron/api/extensions.py:502 -#, python-format -msgid "" -"It was impossible to process the following extensions: %s because of " -"missing requirements." -msgstr "" - -#: neutron/api/extensions.py:513 -#, python-format -msgid "Ext name: %s" -msgstr "" - -#: neutron/api/extensions.py:514 -#, python-format -msgid "Ext alias: %s" -msgstr "" - -#: neutron/api/extensions.py:515 -#, python-format -msgid "Ext description: %s" -msgstr "" - -#: neutron/api/extensions.py:516 -#, python-format -msgid "Ext namespace: %s" -msgstr "" - -#: neutron/api/extensions.py:517 -#, python-format -msgid "Ext updated: %s" -msgstr "" - -#: neutron/api/extensions.py:519 -#, python-format -msgid "Exception loading extension: %s" -msgstr "" - -#: neutron/api/extensions.py:537 -#, python-format -msgid "Extension path '%s' doesn't exist!" -msgstr "" - -#: neutron/api/extensions.py:545 -#, python-format -msgid "Loading extension file: %s" -msgstr "" - -#: neutron/api/extensions.py:553 -#, python-format -msgid "Did not find expected name \"%(ext_name)s\" in %(file)s" -msgstr "" - -#: neutron/api/extensions.py:561 -#, python-format -msgid "Extension file %(f)s wasn't loaded due to %(exception)s" -msgstr "" - -#: neutron/api/extensions.py:570 -#, python-format -msgid "Loaded extension: %s" -msgstr "" - -#: neutron/api/extensions.py:601 -#, python-format -msgid "Extension %s not supported by any of loaded plugins" -msgstr "" - -#: neutron/api/extensions.py:612 -#, python-format -msgid "Loaded plugins do not implement extension %s interface" -msgstr "" - -#: neutron/api/versions.py:45 -msgid "Unknown API version specified" -msgstr "" - -#: neutron/api/rpc/agentnotifiers/dhcp_rpc_agent_api.py:65 -#, python-format -msgid "" -"Unable to schedule network %s: no agents available; will retry on " -"subsequent port creation events." -msgstr "" - -#: neutron/api/rpc/agentnotifiers/dhcp_rpc_agent_api.py:78 -#, python-format -msgid "" -"Only %(active)d of %(total)d DHCP agents associated with network " -"'%(net_id)s' are marked as active, so notifications may be sent to " -"inactive agents." -msgstr "" - -#: neutron/api/rpc/agentnotifiers/dhcp_rpc_agent_api.py:90 -#, python-format -msgid "" -"Will not send event %(method)s for network %(net_id)s: no agent " -"available. Payload: %(payload)s" -msgstr "" - -#: neutron/api/rpc/agentnotifiers/l3_rpc_agent_api.py:40 -#, python-format -msgid "Nofity agent at %(host)s the message %(method)s" -msgstr "" - -#: neutron/api/rpc/agentnotifiers/l3_rpc_agent_api.py:62 -#, python-format -msgid "Notify agent at %(topic)s.%(host)s the message %(method)s" -msgstr "" - -#: neutron/api/rpc/agentnotifiers/l3_rpc_agent_api.py:105 -#, python-format -msgid "" -"No plugin for L3 routing registered. Cannot notify agents with the " -"message %s" -msgstr "" - -#: neutron/api/rpc/agentnotifiers/l3_rpc_agent_api.py:123 -#, python-format -msgid "" -"Fanout notify agent at %(topic)s the message %(method)s on router " -"%(router_id)s" -msgstr "" - -#: neutron/api/rpc/agentnotifiers/metering_rpc_agent_api.py:47 -#, python-format -msgid "Notify metering agent at %(topic)s.%(host)s the message %(method)s" -msgstr "" - -#: neutron/api/rpc/agentnotifiers/metering_rpc_agent_api.py:62 -#, python-format -msgid "" -"Fanout notify metering agent at %(topic)s the message %(method)s on " -"router %(router_id)s" -msgstr "" - -#: neutron/api/rpc/handlers/dhcp_rpc.py:65 -msgid "Unrecognized action" -msgstr "" - -#: neutron/api/rpc/handlers/dhcp_rpc.py:82 -#, python-format -msgid "" -"Action %(action)s for network %(net_id)s could not complete successfully:" -" %(reason)s" -msgstr "" - -#: neutron/api/rpc/handlers/dhcp_rpc.py:92 -#, python-format -msgid "get_active_networks requested from %s" -msgstr "" - -#: neutron/api/rpc/handlers/dhcp_rpc.py:99 -#, python-format -msgid "get_active_networks_info from %s" -msgstr "" - -#: neutron/api/rpc/handlers/dhcp_rpc.py:119 -#, python-format -msgid "Network %(network_id)s requested from %(host)s" -msgstr "" - -#: neutron/api/rpc/handlers/dhcp_rpc.py:126 -#: neutron/api/rpc/handlers/dhcp_rpc.py:190 -#, python-format -msgid "Network %s could not be found, it might have been deleted concurrently." -msgstr "" - -#: neutron/api/rpc/handlers/dhcp_rpc.py:148 -#, python-format -msgid "Port %(device_id)s for %(network_id)s requested from %(host)s" -msgstr "" - -#: neutron/api/rpc/handlers/dhcp_rpc.py:182 -#, python-format -msgid "" -"DHCP port %(device_id)s on network %(network_id)s does not exist on " -"%(host)s" -msgstr "" - -#: neutron/api/rpc/handlers/dhcp_rpc.py:222 -#, python-format -msgid "DHCP port deletion for %(network_id)s request from %(host)s" -msgstr "" - -#: neutron/api/rpc/handlers/dhcp_rpc.py:235 -#, python-format -msgid "DHCP port remove fixed_ip for %(subnet_id)s request from %(host)s" -msgstr "" - -#: neutron/api/rpc/handlers/dhcp_rpc.py:259 -#, python-format -msgid "Updating lease expiration is now deprecated. Issued from host %s." -msgstr "" - -#: neutron/api/rpc/handlers/dhcp_rpc.py:270 -#, python-format -msgid "Create dhcp port %(port)s from %(host)s." -msgstr "" - -#: neutron/api/rpc/handlers/dhcp_rpc.py:287 -#, python-format -msgid "Update dhcp port %(port)s from %(host)s." -msgstr "" - -#: neutron/api/rpc/handlers/dvr_rpc.py:128 -msgid "DVR agent binding currently not set." -msgstr "" - -#: neutron/api/rpc/handlers/l3_rpc.py:70 -msgid "" -"No plugin for L3 routing registered! Will reply to l3 agent with empty " -"router dictionary." -msgstr "" - -#: neutron/api/rpc/handlers/l3_rpc.py:84 -#, python-format -msgid "" -"Routers returned to l3 agent:\n" -" %s" -msgstr "" - -#: neutron/api/rpc/handlers/l3_rpc.py:90 -#, python-format -msgid "Checking router: %(id)s for host: %(host)s" -msgstr "" - -#: neutron/api/rpc/handlers/l3_rpc.py:150 -#, python-format -msgid "External network ID returned to l3 agent: %s" -msgstr "" - -#: neutron/api/rpc/handlers/l3_rpc.py:162 -#, python-format -msgid "New status for floating IP %(floatingip_id)s: %(status)s" -msgstr "" - -#: neutron/api/rpc/handlers/l3_rpc.py:170 -#, python-format -msgid "Floating IP: %s no longer present." -msgstr "" - -#: neutron/api/v2/attributes.py:44 -#, python-format -msgid "" -"Invalid input. '%(target_dict)s' must be a dictionary with keys: " -"%(expected_keys)s" -msgstr "" - -#: neutron/api/v2/attributes.py:55 -#, python-format -msgid "" -"Validation of dictionary's keys failed.Expected keys: %(expected_keys)s " -"Provided keys: %(provided_keys)s" -msgstr "" - -#: neutron/api/v2/attributes.py:69 -#, python-format -msgid "'%(data)s' is not in %(valid_values)s" -msgstr "" - -#: neutron/api/v2/attributes.py:85 -#, python-format -msgid "'%s' Blank strings are not permitted" -msgstr "" - -#: neutron/api/v2/attributes.py:95 -#, python-format -msgid "'%s' is not a valid string" -msgstr "" - -#: neutron/api/v2/attributes.py:100 -#, python-format -msgid "'%(data)s' exceeds maximum length of %(max_len)s" -msgstr "" - -#: neutron/api/v2/attributes.py:110 -#, python-format -msgid "'%s' is not a valid boolean value" -msgstr "" - -#: neutron/api/v2/attributes.py:129 neutron/api/v2/attributes.py:454 -#, python-format -msgid "'%s' is not an integer" -msgstr "" - -#: neutron/api/v2/attributes.py:133 -#, python-format -msgid "'%(data)s' is too small - must be at least '%(limit)d'" -msgstr "" - -#: neutron/api/v2/attributes.py:138 -#, python-format -msgid "'%(data)s' is too large - must be no larger than '%(limit)d'" -msgstr "" - -#: neutron/api/v2/attributes.py:147 -#, python-format -msgid "'%s' contains whitespace" -msgstr "" - -#: neutron/api/v2/attributes.py:164 -#, python-format -msgid "'%s' is not a valid MAC address" -msgstr "" - -#: neutron/api/v2/attributes.py:179 -#, python-format -msgid "'%s' is not a valid IP address" -msgstr "" - -#: neutron/api/v2/attributes.py:190 -#, python-format -msgid "Invalid data format for IP pool: '%s'" -msgstr "" - -#: neutron/api/v2/attributes.py:209 neutron/api/v2/attributes.py:216 -#, python-format -msgid "Invalid data format for fixed IP: '%s'" -msgstr "" - -#: neutron/api/v2/attributes.py:224 -#, python-format -msgid "Duplicate IP address '%s'" -msgstr "" - -#: neutron/api/v2/attributes.py:240 -#, python-format -msgid "Invalid data format for nameserver: '%s'" -msgstr "" - -#: neutron/api/v2/attributes.py:251 -#, python-format -msgid "'%s' is not a valid nameserver" -msgstr "" - -#: neutron/api/v2/attributes.py:255 -#, python-format -msgid "Duplicate nameserver '%s'" -msgstr "" - -#: neutron/api/v2/attributes.py:263 -#, python-format -msgid "Invalid data format for hostroute: '%s'" -msgstr "" - -#: neutron/api/v2/attributes.py:283 -#, python-format -msgid "Duplicate hostroute '%s'" -msgstr "" - -#: neutron/api/v2/attributes.py:300 neutron/tests/unit/test_attributes.py:460 -#: neutron/tests/unit/test_attributes.py:474 -#: neutron/tests/unit/test_attributes.py:482 -#, python-format -msgid "'%(data)s' isn't a recognized IP subnet cidr, '%(cidr)s' is recommended" -msgstr "" - -#: neutron/api/v2/attributes.py:306 -#, python-format -msgid "'%s' is not a valid IP subnet" -msgstr "" - -#: neutron/api/v2/attributes.py:314 neutron/api/v2/attributes.py:367 -#, python-format -msgid "'%s' is not a list" -msgstr "" - -#: neutron/api/v2/attributes.py:319 neutron/api/v2/attributes.py:378 -#, python-format -msgid "Duplicate items in the list: '%s'" -msgstr "" - -#: neutron/api/v2/attributes.py:342 -#, python-format -msgid "'%s' is not a valid input" -msgstr "" - -#: neutron/api/v2/attributes.py:355 -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:529 -#, python-format -msgid "'%s' is not a valid UUID" -msgstr "" - -#: neutron/api/v2/attributes.py:398 -#, python-format -msgid "Validator '%s' does not exist." -msgstr "" - -#: neutron/api/v2/attributes.py:408 -#, python-format -msgid "'%s' is not a dictionary" -msgstr "" - -#: neutron/api/v2/attributes.py:459 -#, python-format -msgid "'%s' should be non-negative" -msgstr "" - -#: neutron/api/v2/attributes.py:478 -#, python-format -msgid "'%s' cannot be converted to boolean" -msgstr "" - -#: neutron/api/v2/attributes.py:491 -#: neutron/plugins/nec/extensions/packetfilter.py:72 -#, python-format -msgid "'%s' is not a integer" -msgstr "" - -#: neutron/api/v2/attributes.py:504 -#, python-format -msgid "'%s' is not of the form =[value]" -msgstr "" - -#: neutron/api/v2/base.py:87 -msgid "Native pagination depend on native sorting" -msgstr "" - -#: neutron/api/v2/base.py:90 -msgid "Allow sorting is enabled because native pagination requires native sorting" -msgstr "" - -#: neutron/api/v2/base.py:361 -#, python-format -msgid "Unable to undo add for %(resource)s %(id)s" -msgstr "" - -#: neutron/api/v2/base.py:493 -#, python-format -msgid "Invalid format: %s" -msgstr "" - -#: neutron/api/v2/base.py:554 -msgid "" -"Specifying 'tenant_id' other than authenticated tenant in request " -"requires admin privileges" -msgstr "" - -#: neutron/api/v2/base.py:562 -msgid "Running without keystone AuthN requires that tenant_id is specified" -msgstr "" - -#: neutron/api/v2/base.py:580 -msgid "Resource body required" -msgstr "" - -#: neutron/api/v2/base.py:582 -#, python-format -msgid "Request body: %(body)s" -msgstr "" - -#: neutron/api/v2/base.py:585 -msgid "Bulk operation not supported" -msgstr "" - -#: neutron/api/v2/base.py:588 -msgid "Resources required" -msgstr "" - -#: neutron/api/v2/base.py:610 -#, python-format -msgid "Failed to parse request. Required attribute '%s' not specified" -msgstr "" - -#: neutron/api/v2/base.py:617 -#, python-format -msgid "Attribute '%s' not allowed in POST" -msgstr "" - -#: neutron/api/v2/base.py:622 -#, python-format -msgid "Cannot update read-only attribute %s" -msgstr "" - -#: neutron/api/v2/base.py:640 -#, python-format -msgid "Invalid input for %(attr)s. Reason: %(reason)s." -msgstr "" - -#: neutron/api/v2/base.py:649 neutron/extensions/allowedaddresspairs.py:75 -#: neutron/extensions/multiprovidernet.py:45 -#, python-format -msgid "Unrecognized attribute(s) '%s'" -msgstr "" - -#: neutron/api/v2/base.py:668 -#, python-format -msgid "Tenant %(tenant_id)s not allowed to create %(resource)s on this network" -msgstr "" - -#: neutron/api/v2/resource.py:97 -#, python-format -msgid "%(action)s failed (client error): %(exc)s" -msgstr "" - -#: neutron/api/v2/resource.py:100 neutron/api/v2/resource.py:108 -#: neutron/api/v2/resource.py:128 -#, python-format -msgid "%s failed" -msgstr "" - -#: neutron/api/v2/resource.py:130 -#: neutron/tests/unit/test_api_v2_resource.py:296 -msgid "Request Failed: internal server error while processing your request." -msgstr "" - -#: neutron/cmd/sanity_check.py:39 -msgid "" -"Check for Open vSwitch VXLAN support failed. Please ensure that the " -"version of openvswitch being used has VXLAN support." -msgstr "" - -#: neutron/cmd/sanity_check.py:48 -msgid "" -"Check for Open vSwitch patch port support failed. Please ensure that the " -"version of openvswitch being used has patch port support or disable " -"features requiring patch ports (gre/vxlan, etc.)." -msgstr "" - -#: neutron/cmd/sanity_check.py:68 -msgid "" -"Check for Open vSwitch ARP responder support failed. Please ensure that " -"the version of openvswitch being used has ARP flows support." -msgstr "" - -#: neutron/cmd/sanity_check.py:77 -msgid "Check for vxlan support" -msgstr "" - -#: neutron/cmd/sanity_check.py:79 -msgid "Check for patch port support" -msgstr "" - -#: neutron/cmd/sanity_check.py:81 -msgid "Check for nova notification support" -msgstr "" - -#: neutron/cmd/sanity_check.py:83 -msgid "Check for ARP responder support" -msgstr "" - -#: neutron/cmd/sanity/checks.py:72 -#, python-format -msgid "Unexpected exception while checking supported feature via command: %s" -msgstr "" - -#: neutron/common/config.py:37 -msgid "The host IP to bind to" -msgstr "" - -#: neutron/common/config.py:39 -msgid "The port to bind to" -msgstr "" - -#: neutron/common/config.py:41 -msgid "The API paste config file to use" -msgstr "" - -#: neutron/common/config.py:43 -msgid "The path for API extensions" -msgstr "" - -#: neutron/common/config.py:45 -msgid "The policy file to use" -msgstr "" - -#: neutron/common/config.py:49 -msgid "The core plugin Neutron will use" -msgstr "" - -#: neutron/common/config.py:51 neutron/db/migration/cli.py:33 -msgid "The service plugins Neutron will use" -msgstr "" - -#: neutron/common/config.py:53 -msgid "The base MAC address Neutron will use for VIFs" -msgstr "" - -#: neutron/common/config.py:55 -msgid "How many times Neutron will retry MAC generation" -msgstr "" - -#: neutron/common/config.py:57 -msgid "Allow the usage of the bulk API" -msgstr "" - -#: neutron/common/config.py:59 -msgid "Allow the usage of the pagination" -msgstr "" - -#: neutron/common/config.py:61 -msgid "Allow the usage of the sorting" -msgstr "" - -#: neutron/common/config.py:63 -msgid "" -"The maximum number of items returned in a single response, value was " -"'infinite' or negative integer means no limit" -msgstr "" - -#: neutron/common/config.py:67 -msgid "Maximum number of DNS nameservers" -msgstr "" - -#: neutron/common/config.py:69 -msgid "Maximum number of host routes per subnet" -msgstr "" - -#: neutron/common/config.py:71 -msgid "Maximum number of fixed ips per port" -msgstr "" - -#: neutron/common/config.py:74 -msgid "" -"DHCP lease duration (in seconds). Use -1 to tell dnsmasq to use infinite " -"lease times." -msgstr "" - -#: neutron/common/config.py:77 -msgid "Allow sending resource operation notification to DHCP agent" -msgstr "" - -#: neutron/common/config.py:80 -msgid "Allow overlapping IP support in Neutron" -msgstr "" - -#: neutron/common/config.py:82 -msgid "The hostname Neutron is running on" -msgstr "" - -#: neutron/common/config.py:84 -msgid "" -"Ensure that configured gateway is on subnet. For IPv6, validate only if " -"gateway is not a link local address. Deprecated, to be removed during the" -" K release, at which point the check will be mandatory." -msgstr "" - -#: neutron/common/config.py:90 -msgid "Send notification to nova when port status changes" -msgstr "" - -#: neutron/common/config.py:92 -msgid "" -"Send notification to nova when port data (fixed_ips/floatingip) changes " -"so nova can update its cache." -msgstr "" - -#: neutron/common/config.py:96 -msgid "URL for connection to nova" -msgstr "" - -#: neutron/common/config.py:98 -msgid "Username for connecting to nova in admin context" -msgstr "" - -#: neutron/common/config.py:100 -msgid "Password for connection to nova in admin context" -msgstr "" - -#: neutron/common/config.py:103 -msgid "The uuid of the admin nova tenant" -msgstr "" - -#: neutron/common/config.py:106 -msgid "Authorization URL for connecting to nova in admin context" -msgstr "" - -#: neutron/common/config.py:109 -msgid "CA file for novaclient to verify server certificates" -msgstr "" - -#: neutron/common/config.py:111 -msgid "If True, ignore any SSL validation issues" -msgstr "" - -#: neutron/common/config.py:113 -msgid "" -"Name of nova region to use. Useful if keystone manages more than one " -"region." -msgstr "" - -#: neutron/common/config.py:116 -msgid "" -"Number of seconds between sending events to nova if there are any events " -"to send." -msgstr "" - -#: neutron/common/config.py:123 -msgid "" -"Where to store Neutron state files. This directory must be writable by " -"the agent." -msgstr "" - -#: neutron/common/config.py:156 -#, python-format -msgid "Base MAC: %s" -msgstr "" - -#: neutron/common/config.py:164 -msgid "Logging enabled!" -msgstr "" - -#: neutron/common/config.py:180 -#, python-format -msgid "Config paste file: %s" -msgstr "" - -#: neutron/common/config.py:185 -#, python-format -msgid "Unable to load %(app_name)s from configuration file %(config_path)s." -msgstr "" - -#: neutron/common/exceptions.py:30 -#: neutron/plugins/vmware/api_client/exception.py:27 -msgid "An unknown exception occurred." -msgstr "" - -#: neutron/common/exceptions.py:51 -#, python-format -msgid "Bad %(resource)s request: %(msg)s" -msgstr "" - -#: neutron/common/exceptions.py:63 -msgid "Not authorized." -msgstr "" - -#: neutron/common/exceptions.py:67 -msgid "The service is unavailable" -msgstr "" - -#: neutron/common/exceptions.py:71 -#, python-format -msgid "User does not have admin privileges: %(reason)s" -msgstr "" - -#: neutron/common/exceptions.py:75 -#, python-format -msgid "Policy doesn't allow %(action)s to be performed." -msgstr "" - -#: neutron/common/exceptions.py:79 -#, python-format -msgid "Network %(net_id)s could not be found" -msgstr "" - -#: neutron/common/exceptions.py:83 -#, python-format -msgid "Subnet %(subnet_id)s could not be found" -msgstr "" - -#: neutron/common/exceptions.py:87 -#, python-format -msgid "Port %(port_id)s could not be found" -msgstr "" - -#: neutron/common/exceptions.py:91 -#, python-format -msgid "Port %(port_id)s could not be found on network %(net_id)s" -msgstr "" - -#: neutron/common/exceptions.py:96 -msgid "Policy configuration policy.json could not be found" -msgstr "" - -#: neutron/common/exceptions.py:100 -#, python-format -msgid "Failed to init policy %(policy)s because %(reason)s" -msgstr "" - -#: neutron/common/exceptions.py:104 -#, python-format -msgid "Failed to check policy %(policy)s because %(reason)s" -msgstr "" - -#: neutron/common/exceptions.py:108 -#, python-format -msgid "Unsupported port state: %(port_state)s" -msgstr "" - -#: neutron/common/exceptions.py:112 -msgid "The resource is inuse" -msgstr "" - -#: neutron/common/exceptions.py:116 -#, python-format -msgid "" -"Unable to complete operation on network %(net_id)s. There are one or more" -" ports still in use on the network." -msgstr "" - -#: neutron/common/exceptions.py:121 -#, python-format -msgid "" -"Unable to complete operation on subnet %(subnet_id)s. One or more ports " -"have an IP allocation from this subnet." -msgstr "" - -#: neutron/common/exceptions.py:126 -#, python-format -msgid "" -"Unable to complete operation on port %(port_id)s for network %(net_id)s. " -"Port already has an attacheddevice %(device_id)s." -msgstr "" - -#: neutron/common/exceptions.py:132 -#, python-format -msgid "" -"Unable to complete operation for network %(net_id)s. The mac address " -"%(mac)s is in use." -msgstr "" - -#: neutron/common/exceptions.py:138 -#, python-format -msgid "" -"Unable to complete operation for %(subnet_id)s. The number of host routes" -" exceeds the limit %(quota)s." -msgstr "" - -#: neutron/common/exceptions.py:144 -#, python-format -msgid "" -"Unable to complete operation for %(subnet_id)s. The number of DNS " -"nameservers exceeds the limit %(quota)s." -msgstr "" - -#: neutron/common/exceptions.py:149 -#, python-format -msgid "" -"Unable to complete operation for network %(net_id)s. The IP address " -"%(ip_address)s is in use." -msgstr "" - -#: neutron/common/exceptions.py:154 -#, python-format -msgid "" -"Unable to create the network. The VLAN %(vlan_id)s on physical network " -"%(physical_network)s is in use." -msgstr "" - -#: neutron/common/exceptions.py:160 -#, python-format -msgid "" -"Unable to create the flat network. Physical network %(physical_network)s " -"is in use." -msgstr "" - -#: neutron/common/exceptions.py:165 -#, python-format -msgid "Unable to create the network. The tunnel ID %(tunnel_id)s is in use." -msgstr "" - -#: neutron/common/exceptions.py:170 -msgid "Tenant network creation is not enabled." -msgstr "" - -#: neutron/common/exceptions.py:178 -msgid "" -"Unable to create the network. No tenant network is available for " -"allocation." -msgstr "" - -#: neutron/common/exceptions.py:183 -msgid "" -"Unable to create the network. No available network found in maximum " -"allowed attempts." -msgstr "" - -#: neutron/common/exceptions.py:188 -#, python-format -msgid "" -"Subnet on port %(port_id)s does not match the requested subnet " -"%(subnet_id)s" -msgstr "" - -#: neutron/common/exceptions.py:193 -#, python-format -msgid "Malformed request body: %(reason)s" -msgstr "" - -#: neutron/common/exceptions.py:203 -#, python-format -msgid "Invalid input for operation: %(error_message)s." -msgstr "" - -#: neutron/common/exceptions.py:207 -#, python-format -msgid "The allocation pool %(pool)s is not valid." -msgstr "" - -#: neutron/common/exceptions.py:211 -#, python-format -msgid "" -"Found overlapping allocation pools:%(pool_1)s %(pool_2)s for subnet " -"%(subnet_cidr)s." -msgstr "" - -#: neutron/common/exceptions.py:216 -#, python-format -msgid "The allocation pool %(pool)s spans beyond the subnet cidr %(subnet_cidr)s." -msgstr "" - -#: neutron/common/exceptions.py:221 -#, python-format -msgid "Unable to generate unique mac on network %(net_id)s." -msgstr "" - -#: neutron/common/exceptions.py:225 -#, python-format -msgid "No more IP addresses available on network %(net_id)s." -msgstr "" - -#: neutron/common/exceptions.py:229 -#, python-format -msgid "Bridge %(bridge)s does not exist." -msgstr "" - -#: neutron/common/exceptions.py:233 -#, python-format -msgid "Creation failed. %(dev_name)s already exists." -msgstr "" - -#: neutron/common/exceptions.py:237 -msgid "Sudo privilege is required to run this command." -msgstr "" - -#: neutron/common/exceptions.py:241 -#, python-format -msgid "Unknown quota resources %(unknown)s." -msgstr "" - -#: neutron/common/exceptions.py:245 -#, python-format -msgid "Quota exceeded for resources: %(overs)s" -msgstr "" - -#: neutron/common/exceptions.py:249 -msgid "Tenant-id was missing from Quota request" -msgstr "" - -#: neutron/common/exceptions.py:253 -#, python-format -msgid "" -"Change would make usage less than 0 for the following resources: " -"%(unders)s" -msgstr "" - -#: neutron/common/exceptions.py:258 -#, python-format -msgid "" -"Unable to reconfigure sharing settings for network %(network)s. Multiple " -"tenants are using it" -msgstr "" - -#: neutron/common/exceptions.py:263 -#, python-format -msgid "Invalid extension environment: %(reason)s" -msgstr "" - -#: neutron/common/exceptions.py:267 -#, python-format -msgid "Extensions not found: %(extensions)s" -msgstr "" - -#: neutron/common/exceptions.py:271 -#, python-format -msgid "Invalid content type %(content_type)s" -msgstr "" - -#: neutron/common/exceptions.py:275 -#, python-format -msgid "Unable to find any IP address on external network %(net_id)s." -msgstr "" - -#: neutron/common/exceptions.py:280 -msgid "More than one external network exists" -msgstr "" - -#: neutron/common/exceptions.py:284 -#, python-format -msgid "An invalid value was provided for %(opt_name)s: %(opt_value)s" -msgstr "" - -#: neutron/common/exceptions.py:289 -#, python-format -msgid "Gateway ip %(ip_address)s conflicts with allocation pool %(pool)s" -msgstr "" - -#: neutron/common/exceptions.py:294 -#, python-format -msgid "" -"Current gateway ip %(ip_address)s already in use by port %(port_id)s. " -"Unable to update." -msgstr "" - -#: neutron/common/exceptions.py:299 -#, python-format -msgid "Invalid network VLAN range: '%(vlan_range)s' - '%(error)s'" -msgstr "" - -#: neutron/common/exceptions.py:309 -#, python-format -msgid "Invalid network Tunnel range: '%(tunnel_range)s' - %(error)s" -msgstr "" - -#: neutron/common/exceptions.py:320 -#, python-format -msgid "Invalid network VXLAN port range: '%(vxlan_range)s'" -msgstr "" - -#: neutron/common/exceptions.py:324 -msgid "VXLAN Network unsupported." -msgstr "" - -#: neutron/common/exceptions.py:328 -#, python-format -msgid "Found duplicate extension: %(alias)s" -msgstr "" - -#: neutron/common/exceptions.py:332 -#, python-format -msgid "" -"The following device_id %(device_id)s is not owned by your tenant or " -"matches another tenants router." -msgstr "" - -#: neutron/common/exceptions.py:337 -#, python-format -msgid "Invalid CIDR %(input)s given as IP prefix" -msgstr "" - -#: neutron/common/ipv6_utils.py:35 -msgid "Unable to generate IP address by EUI64 for IPv4 prefix" -msgstr "" - -#: neutron/common/ipv6_utils.py:42 -#, python-format -msgid "" -"Bad prefix or mac format for generating IPv6 address by EUI-64: " -"%(prefix)s, %(mac)s:" -msgstr "" - -#: neutron/common/ipv6_utils.py:46 -#, python-format -msgid "Bad prefix type for generate IPv6 address by EUI-64: %s" -msgstr "" - -#: neutron/common/utils.py:69 -#, python-format -msgid "" -"Method %(func_name)s cannot be cached due to unhashable parameters: args:" -" %(args)s, kwargs: %(kwargs)s" -msgstr "" - -#: neutron/common/utils.py:92 -#, python-format -msgid "" -"Instance of class %(module)s.%(class)s doesn't contain attribute _cache " -"therefore results cannot be cached for %(func_name)s." -msgstr "" - -#: neutron/common/utils.py:118 neutron/openstack/common/fileutils.py:63 -#, python-format -msgid "Reloading cached file %s" -msgstr "" - -#: neutron/common/utils.py:201 -#: neutron/plugins/sriovnicagent/common/config.py:36 -#, python-format -msgid "Invalid mapping: '%s'" -msgstr "" - -#: neutron/common/utils.py:204 -#: neutron/plugins/sriovnicagent/common/config.py:39 -#, python-format -msgid "Missing key in mapping: '%s'" -msgstr "" - -#: neutron/common/utils.py:207 -#, python-format -msgid "Missing value in mapping: '%s'" -msgstr "" - -#: neutron/common/utils.py:209 -#, python-format -msgid "Key %(key)s in mapping: '%(mapping)s' not unique" -msgstr "" - -#: neutron/common/utils.py:212 -#, python-format -msgid "Value %(value)s in mapping: '%(mapping)s' not unique" -msgstr "" - -#: neutron/db/agents_db.py:37 -msgid "" -"Seconds to regard the agent is down; should be at least twice " -"report_interval, to be sure the agent is down for good." -msgstr "" - -#: neutron/db/agents_db.py:98 -#, python-format -msgid "%(agent_type)s agent %(agent_id)s is not active" -msgstr "" - -#: neutron/db/agents_db.py:111 -#, python-format -msgid "Configuration for agent %(agent_type)s on host %(host)s is invalid." -msgstr "" - -#: neutron/db/agents_db.py:232 -msgid "Message with invalid timestamp received" -msgstr "" - -#: neutron/db/agentschedulers_db.py:37 -msgid "Driver to use for scheduling network to DHCP agent" -msgstr "" - -#: neutron/db/agentschedulers_db.py:39 -msgid "Allow auto scheduling networks to DHCP agent." -msgstr "" - -#: neutron/db/agentschedulers_db.py:41 -msgid "Number of DHCP agents scheduled to host a network." -msgstr "" - -#: neutron/db/common_db_mixin.py:117 -msgid "Cannot create resource for another tenant" -msgstr "" - -#: neutron/db/db_base_plugin_v2.py:141 -#, python-format -msgid "Generated mac for network %(network_id)s is %(mac_address)s" -msgstr "" - -#: neutron/db/db_base_plugin_v2.py:147 -#, python-format -msgid "Generated mac %(mac_address)s exists. Remaining attempts %(max_retries)s." -msgstr "" - -#: neutron/db/db_base_plugin_v2.py:151 -#, python-format -msgid "Unable to generate mac address after %s attempts" -msgstr "" - -#: neutron/db/db_base_plugin_v2.py:169 -#, python-format -msgid "Delete allocated IP %(ip_address)s (%(network_id)s/%(subnet_id)s)" -msgstr "" - -#: neutron/db/db_base_plugin_v2.py:266 -#, python-format -msgid "Rebuilding availability ranges for subnet %s" -msgstr "" - -#: neutron/db/db_base_plugin_v2.py:411 -msgid "IP allocation requires subnet_id or ip_address" -msgstr "" - -#: neutron/db/db_base_plugin_v2.py:423 -#, python-format -msgid "IP address %s is not a valid IP for the defined networks subnets" -msgstr "" - -#: neutron/db/db_base_plugin_v2.py:429 -#, python-format -msgid "" -"Failed to create port on network %(network_id)s, because fixed_ips " -"included invalid subnet %(subnet_id)s" -msgstr "" - -#: neutron/db/db_base_plugin_v2.py:449 -#, python-format -msgid "IP address %s is not a valid IP for the defined subnet" -msgstr "" - -#: neutron/db/db_base_plugin_v2.py:458 neutron/db/db_base_plugin_v2.py:491 -#: neutron/plugins/opencontrail/contrail_plugin.py:388 -msgid "Exceeded maximim amount of fixed ips per port" -msgstr "" - -#: neutron/db/db_base_plugin_v2.py:506 -#, python-format -msgid "Port update. Hold %s" -msgstr "" - -#: neutron/db/db_base_plugin_v2.py:513 -#, python-format -msgid "Port update. Adding %s" -msgstr "" - -#: neutron/db/db_base_plugin_v2.py:587 -msgid "0 is not allowed as CIDR prefix length" -msgstr "" - -#: neutron/db/db_base_plugin_v2.py:597 -#, python-format -msgid "" -"Requested subnet with cidr: %(cidr)s for network: %(network_id)s overlaps" -" with another subnet" -msgstr "" - -#: neutron/db/db_base_plugin_v2.py:602 -#, python-format -msgid "" -"Validation for CIDR: %(new_cidr)s failed - overlaps with subnet " -"%(subnet_id)s (CIDR: %(cidr)s)" -msgstr "" - -#: neutron/db/db_base_plugin_v2.py:622 -msgid "Performing IP validity checks on allocation pools" -msgstr "" - -#: neutron/db/db_base_plugin_v2.py:629 -#, python-format -msgid "Found invalid IP address in pool: %(start)s - %(end)s:" -msgstr "" - -#: neutron/db/db_base_plugin_v2.py:636 -msgid "Specified IP addresses do not match the subnet IP version" -msgstr "" - -#: neutron/db/db_base_plugin_v2.py:640 -#, python-format -msgid "Start IP (%(start)s) is greater than end IP (%(end)s)" -msgstr "" - -#: neutron/db/db_base_plugin_v2.py:645 -#, python-format -msgid "Found pool larger than subnet CIDR:%(start)s - %(end)s" -msgstr "" - -#: neutron/db/db_base_plugin_v2.py:658 -msgid "Checking for overlaps among allocation pools and gateway ip" -msgstr "" - -#: neutron/db/db_base_plugin_v2.py:669 -#, python-format -msgid "Found overlapping ranges: %(l_range)s and %(r_range)s" -msgstr "" - -#: neutron/db/db_base_plugin_v2.py:682 neutron/db/db_base_plugin_v2.py:686 -#, python-format -msgid "Invalid route: %s" -msgstr "" - -#: neutron/db/db_base_plugin_v2.py:764 -#, python-format -msgid "" -"ipv6_ra_mode set to '%(ra_mode)s' with ipv6_address_mode set to " -"'%(addr_mode)s' is not valid. If both attributes are set, they must be " -"the same value" -msgstr "" - -#: neutron/db/db_base_plugin_v2.py:772 -msgid "" -"ipv6_ra_mode or ipv6_address_mode cannot be set when enable_dhcp is set " -"to False." -msgstr "" - -#: neutron/db/db_base_plugin_v2.py:778 -msgid "Cannot disable enable_dhcp with ipv6 attributes set" -msgstr "" - -#: neutron/db/db_base_plugin_v2.py:870 -#, python-format -msgid "An exception occurred while creating the %(resource)s:%(item)s" -msgstr "" - -#: neutron/db/db_base_plugin_v2.py:967 -#, python-format -msgid "%(name)s '%(addr)s' does not match the ip_version '%(ip_version)s'" -msgstr "" - -#: neutron/db/db_base_plugin_v2.py:991 -msgid "Gateway is not valid on subnet" -msgstr "" - -#: neutron/db/db_base_plugin_v2.py:1011 neutron/db/db_base_plugin_v2.py:1025 -#: neutron/plugins/opencontrail/contrail_plugin.py:312 -msgid "new subnet" -msgstr "" - -#: neutron/db/db_base_plugin_v2.py:1018 -#, python-format -msgid "Error parsing dns address %s" -msgstr "" - -#: neutron/db/db_base_plugin_v2.py:1034 -msgid "ipv6_ra_mode is not valid when ip_version is 4" -msgstr "" - -#: neutron/db/db_base_plugin_v2.py:1038 -msgid "ipv6_address_mode is not valid when ip_version is 4" -msgstr "" - -#: neutron/db/db_base_plugin_v2.py:1406 -#, python-format -msgid "" -"Ignoring PortNotFound when deleting port '%s'. The port has already been " -"deleted." -msgstr "" - -#: neutron/db/dvr_mac_db.py:36 -msgid "The base mac address used for unique DVR instances by Neutron" -msgstr "" - -#: neutron/db/dvr_mac_db.py:96 -#, python-format -msgid "MAC generation error after %s attempts" -msgstr "" - -#: neutron/db/dvr_mac_db.py:168 -#, python-format -msgid "Could not retrieve gateway port for subnet %s" -msgstr "" - -#: neutron/db/extraroute_db.py:36 -msgid "Maximum number of routes" -msgstr "" - -#: neutron/db/extraroute_db.py:91 -msgid "the nexthop is not connected with router" -msgstr "" - -#: neutron/db/extraroute_db.py:96 -msgid "the nexthop is used by router" -msgstr "" - -#: neutron/db/extraroute_db.py:125 -#, python-format -msgid "Added routes are %s" -msgstr "" - -#: neutron/db/extraroute_db.py:133 -#, python-format -msgid "Removed routes are %s" -msgstr "" - -#: neutron/db/l3_agentschedulers_db.py:48 -msgid "Driver to use for scheduling router to a default L3 agent" -msgstr "" - -#: neutron/db/l3_agentschedulers_db.py:51 -msgid "Allow auto scheduling of routers to L3 agent." -msgstr "" - -#: neutron/db/l3_agentschedulers_db.py:53 -msgid "" -"Automatically reschedule routers from offline L3 agents to online L3 " -"agents." -msgstr "" - -#: neutron/db/l3_db.py:230 -#, python-format -msgid "No eligible l3 agent associated with external network %s found" -msgstr "" - -#: neutron/db/l3_db.py:251 -#, python-format -msgid "No IPs available for external network %s" -msgstr "" - -#: neutron/db/l3_db.py:265 -#, python-format -msgid "Network %s is not an external network" -msgstr "" - -#: neutron/db/l3_db.py:377 -#, python-format -msgid "Router already has a port on subnet %s" -msgstr "" - -#: neutron/db/l3_db.py:391 -#, python-format -msgid "" -"Cidr %(subnet_cidr)s of subnet %(subnet_id)s overlaps with cidr %(cidr)s " -"of subnet %(sub_id)s" -msgstr "" - -#: neutron/db/l3_db.py:407 neutron/db/l3_db.py:534 neutron/db/l3_dvr_db.py:230 -#: neutron/plugins/bigswitch/l3_router_plugin.py:170 -#: neutron/plugins/bigswitch/l3_router_plugin.py:179 -#: neutron/plugins/opencontrail/contrail_plugin.py:499 -msgid "Either subnet_id or port_id must be specified" -msgstr "" - -#: neutron/db/l3_db.py:410 neutron/plugins/opencontrail/contrail_plugin.py:509 -msgid "Cannot specify both subnet-id and port-id" -msgstr "" - -#: neutron/db/l3_db.py:423 -msgid "Router port must have exactly one fixed IP" -msgstr "" - -#: neutron/db/l3_db.py:437 -msgid "Subnet for router interface must have a gateway IP" -msgstr "" - -#: neutron/db/l3_db.py:580 neutron/plugins/nec/nec_router.py:195 -#, python-format -msgid "Cannot add floating IP to port on subnet %s which has no gateway_ip" -msgstr "" - -#: neutron/db/l3_db.py:616 -#, python-format -msgid "" -"Port %(port_id)s is associated with a different tenant than Floating IP " -"%(floatingip_id)s and therefore cannot be bound." -msgstr "" - -#: neutron/db/l3_db.py:620 -#, python-format -msgid "" -"Cannot create floating IP and bind it to Port %s, since that port is " -"owned by a different tenant." -msgstr "" - -#: neutron/db/l3_db.py:632 -#, python-format -msgid "Port %(id)s does not have fixed ip %(address)s" -msgstr "" - -#: neutron/db/l3_db.py:639 -#, python-format -msgid "Cannot add floating IP to port %s that hasno fixed IP addresses" -msgstr "" - -#: neutron/db/l3_db.py:643 -#, python-format -msgid "" -"Port %s has multiple fixed IPs. Must provide a specific IP when " -"assigning a floating IP" -msgstr "" - -#: neutron/db/l3_db.py:673 neutron/plugins/vmware/plugins/base.py:1814 -msgid "fixed_ip_address cannot be specified without a port_id" -msgstr "" - -#: neutron/db/l3_db.py:713 -#, python-format -msgid "Network %s is not a valid external network" -msgstr "" - -#: neutron/db/l3_db.py:846 -#, python-format -msgid "" -"Port %(port_id)s has owner %(port_owner)s, but no IP address, so it can " -"be deleted" -msgstr "" - -#: neutron/db/l3_db.py:960 -#, python-format -msgid "Skipping port %s as no IP is configure on it" -msgstr "" - -#: neutron/db/l3_dvr_db.py:42 -msgid "" -"System-wide flag to determine the type of router that tenants can create." -" Only admin can override." -msgstr "" - -#: neutron/db/l3_dvr_db.py:76 -#, python-format -msgid "Centralizing distributed router %s is not supported" -msgstr "" - -#: neutron/db/l3_dvr_db.py:427 -#, python-format -msgid "Agent Gateway port does not exist, so create one: %s" -msgstr "" - -#: neutron/db/l3_dvr_db.py:442 -msgid "Unable to create the Agent Gateway Port" -msgstr "" - -#: neutron/db/l3_dvr_db.py:468 -msgid "Unable to create the SNAT Interface Port" -msgstr "" - -#: neutron/db/l3_dvr_db.py:492 -#, python-format -msgid "SNAT interface port list does not exist, so create one: %s" -msgstr "" - -#: neutron/db/l3_dvrscheduler_db.py:296 -msgid "No active L3 agents found for SNAT" -msgstr "" - -#: neutron/db/l3_hamode_db.py:42 -msgid "Enable HA mode for virtual routers." -msgstr "" - -#: neutron/db/l3_hamode_db.py:45 -msgid "Maximum number of agents on which a router will be scheduled." -msgstr "" - -#: neutron/db/l3_hamode_db.py:49 -msgid "Minimum number of agents on which a router will be scheduled." -msgstr "" - -#: neutron/db/l3_hamode_db.py:53 -msgid "Subnet used for the l3 HA admin network." -msgstr "" - -#: neutron/db/routedserviceinsertion_db.py:34 -#, python-format -msgid "Resource type '%(resource_type)s' is longer than %(maxlen)d characters" -msgstr "" - -#: neutron/db/securitygroups_rpc_base.py:56 -#, python-format -msgid "%s must implement get_port_from_device." -msgstr "" - -#: neutron/db/securitygroups_rpc_base.py:344 -#, python-format -msgid "No valid gateway port on subnet %s is found for IPv6 RA" -msgstr "" - -#: neutron/db/sqlalchemyutils.py:73 -#, python-format -msgid "%s is invalid attribute for sort_key" -msgstr "" - -#: neutron/db/sqlalchemyutils.py:76 -#, python-format -msgid "" -"The attribute '%(attr)s' is reference to other resource, can't used by " -"sort '%(resource)s'" -msgstr "" - -#: neutron/db/firewall/firewall_db.py:267 -#: neutron/services/firewall/fwaas_plugin.py:216 -msgid "create_firewall() called" -msgstr "" - -#: neutron/db/firewall/firewall_db.py:288 -#: neutron/services/firewall/fwaas_plugin.py:230 -msgid "update_firewall() called" -msgstr "" - -#: neutron/db/firewall/firewall_db.py:297 -#: neutron/services/firewall/fwaas_plugin.py:245 -msgid "delete_firewall() called" -msgstr "" - -#: neutron/db/firewall/firewall_db.py:306 -msgid "get_firewall() called" -msgstr "" - -#: neutron/db/firewall/firewall_db.py:311 -msgid "get_firewalls() called" -msgstr "" - -#: neutron/db/firewall/firewall_db.py:317 -msgid "get_firewalls_count() called" -msgstr "" - -#: neutron/db/firewall/firewall_db.py:322 -msgid "create_firewall_policy() called" -msgstr "" - -#: neutron/db/firewall/firewall_db.py:337 -#: neutron/services/firewall/fwaas_plugin.py:254 -msgid "update_firewall_policy() called" -msgstr "" - -#: neutron/db/firewall/firewall_db.py:353 -msgid "delete_firewall_policy() called" -msgstr "" - -#: neutron/db/firewall/firewall_db.py:365 -msgid "get_firewall_policy() called" -msgstr "" - -#: neutron/db/firewall/firewall_db.py:370 -msgid "get_firewall_policies() called" -msgstr "" - -#: neutron/db/firewall/firewall_db.py:376 -msgid "get_firewall_policies_count() called" -msgstr "" - -#: neutron/db/firewall/firewall_db.py:381 -msgid "create_firewall_rule() called" -msgstr "" - -#: neutron/db/firewall/firewall_db.py:413 -#: neutron/services/firewall/fwaas_plugin.py:262 -msgid "update_firewall_rule() called" -msgstr "" - -#: neutron/db/firewall/firewall_db.py:449 -msgid "delete_firewall_rule() called" -msgstr "" - -#: neutron/db/firewall/firewall_db.py:457 -msgid "get_firewall_rule() called" -msgstr "" - -#: neutron/db/firewall/firewall_db.py:462 -msgid "get_firewall_rules() called" -msgstr "" - -#: neutron/db/firewall/firewall_db.py:468 -msgid "get_firewall_rules_count() called" -msgstr "" - -#: neutron/db/firewall/firewall_db.py:477 -#: neutron/services/firewall/fwaas_plugin.py:272 -msgid "insert_rule() called" -msgstr "" - -#: neutron/db/firewall/firewall_db.py:523 -#: neutron/services/firewall/fwaas_plugin.py:280 -msgid "remove_rule() called" -msgstr "" - -#: neutron/db/loadbalancer/loadbalancer_db.py:68 -#, python-format -msgid "The %(key)s field can not have negative value. Current value is %(value)d." -msgstr "" - -#: neutron/db/loadbalancer/loadbalancer_db.py:275 -msgid "'cookie_name' should be specified for this type of session persistence." -msgstr "" - -#: neutron/db/loadbalancer/loadbalancer_db.py:279 -msgid "'cookie_name' is not allowed for this type of session persistence" -msgstr "" - -#: neutron/db/metering/metering_rpc.py:44 -#, python-format -msgid "Unable to find agent %s." -msgstr "" - -#: neutron/db/migration/__init__.py:38 -#, python-format -msgid "%s cannot be called while in offline mode" -msgstr "" - -#: neutron/db/migration/cli.py:30 -msgid "Neutron plugin provider module" -msgstr "" - -#: neutron/db/migration/cli.py:39 -msgid "Neutron quota driver class" -msgstr "" - -#: neutron/db/migration/cli.py:47 -msgid "URL to database" -msgstr "" - -#: neutron/db/migration/cli.py:50 -msgid "Database engine" -msgstr "" - -#: neutron/db/migration/cli.py:73 -msgid "You must provide a revision or relative delta" -msgstr "" - -#: neutron/db/migration/cli.py:103 neutron/db/migration/cli.py:116 -msgid "Timeline branches unable to generate timeline" -msgstr "" - -#: neutron/db/migration/cli.py:110 -msgid "HEAD file does not match migration timeline head" -msgstr "" - -#: neutron/db/migration/cli.py:156 -msgid "Available commands" -msgstr "" - -#: neutron/db/migration/migrate_to_ml2.py:89 -msgid "Missing version in alembic_versions table" -msgstr "" - -#: neutron/db/migration/migrate_to_ml2.py:91 -#, python-format -msgid "Multiple versions in alembic_versions table: %s" -msgstr "" - -#: neutron/db/migration/migrate_to_ml2.py:95 -#, python-format -msgid "" -"Unsupported database schema %(current)s. Please migrate your database to " -"one of following versions: %(supported)s" -msgstr "" - -#: neutron/db/migration/migrate_to_ml2.py:415 -#, python-format -msgid "Unknown tunnel type: %s" -msgstr "" - -#: neutron/db/migration/migrate_to_ml2.py:429 -msgid "The plugin type whose database will be migrated" -msgstr "" - -#: neutron/db/migration/migrate_to_ml2.py:432 -msgid "The connection url for the target db" -msgstr "" - -#: neutron/db/migration/migrate_to_ml2.py:435 -#, python-format -msgid "The %s tunnel type to migrate from" -msgstr "" - -#: neutron/db/migration/migrate_to_ml2.py:438 -#: neutron/plugins/openvswitch/common/config.py:80 -msgid "The UDP port to use for VXLAN tunnels." -msgstr "" - -#: neutron/db/migration/migrate_to_ml2.py:441 -msgid "Retain the old plugin's tables" -msgstr "" - -#: neutron/db/migration/migrate_to_ml2.py:447 -#, python-format -msgid "" -"Tunnel args (tunnel-type and vxlan-udp-port) are not valid for the %s " -"plugin" -msgstr "" - -#: neutron/db/migration/migrate_to_ml2.py:454 -#, python-format -msgid "" -"Support for migrating %(plugin)s for release %(release)s is not yet " -"implemented" -msgstr "" - -#: neutron/db/migration/alembic_migrations/heal_script.py:228 -#, python-format -msgid "Detected removed foreign key %(fk)r on table %(table)r" -msgstr "" - -#: neutron/db/migration/alembic_migrations/heal_script.py:232 -#, python-format -msgid "Detected added foreign key for column %(fk)r on table %(table)r" -msgstr "" - -#: neutron/db/migration/alembic_migrations/heal_script.py:253 -#, python-format -msgid "Table %(old_t)r was renamed to %(new_t)r" -msgstr "" - -#: neutron/db/vpn/vpn_db.py:649 -#, python-format -msgid "vpnservice %s in db is already deleted" -msgstr "" - -#: neutron/debug/commands.py:33 -msgid "Unimplemented commands" -msgstr "" - -#: neutron/debug/commands.py:45 -msgid "ID of network to probe" -msgstr "" - -#: neutron/debug/commands.py:49 -msgid "Owner type of the device: network/compute" -msgstr "" - -#: neutron/debug/commands.py:57 -#, python-format -msgid "Probe created : %s " -msgstr "" - -#: neutron/debug/commands.py:69 -msgid "ID of probe port to delete" -msgstr "" - -#: neutron/debug/commands.py:76 -#, python-format -msgid "Probe %s deleted" -msgstr "" - -#: neutron/debug/commands.py:119 -msgid "ID of probe port to execute command" -msgstr "" - -#: neutron/debug/commands.py:124 -msgid "Command to execute" -msgstr "" - -#: neutron/debug/commands.py:144 -msgid "Ping timeout" -msgstr "" - -#: neutron/debug/commands.py:148 -msgid "ID of network" -msgstr "" - -#: neutron/debug/debug_agent.py:122 -#, python-format -msgid "Failed to delete namespace %s" -msgstr "" - -#: neutron/debug/shell.py:61 -msgid "Config file for interface driver (You may also use l3_agent.ini)" -msgstr "" - -#: neutron/debug/shell.py:69 -msgid "" -"You must provide a config file for bridge - either --config-file or " -"env[NEUTRON_TEST_CONFIG_FILE]" -msgstr "" - -#: neutron/extensions/agent.py:61 -#, python-format -msgid "Agent %(id)s could not be found" -msgstr "" - -#: neutron/extensions/agent.py:65 -#, python-format -msgid "Agent with agent_type=%(agent_type)s and host=%(host)s could not be found" -msgstr "" - -#: neutron/extensions/agent.py:70 -#, python-format -msgid "Multiple agents with agent_type=%(agent_type)s and host=%(host)s found" -msgstr "" - -#: neutron/extensions/allowedaddresspairs.py:24 -msgid "Maximum number of allowed address pairs" -msgstr "" - -#: neutron/extensions/allowedaddresspairs.py:31 -msgid "AllowedAddressPair must contain ip_address" -msgstr "" - -#: neutron/extensions/allowedaddresspairs.py:35 -msgid "" -"Port Security must be enabled in order to have allowed address pairs on a" -" port." -msgstr "" - -#: neutron/extensions/allowedaddresspairs.py:40 -#, python-format -msgid "" -"Request contains duplicate address pair: mac_address %(mac_address)s " -"ip_address %(ip_address)s." -msgstr "" - -#: neutron/extensions/allowedaddresspairs.py:45 -#, python-format -msgid "The number of allowed address pair exceeds the maximum %(quota)s." -msgstr "" - -#: neutron/extensions/dhcpagentscheduler.py:127 -#, python-format -msgid "Agent %(id)s is not a valid DHCP Agent or has been disabled" -msgstr "" - -#: neutron/extensions/dhcpagentscheduler.py:131 -#, python-format -msgid "" -"The network %(network_id)s has been already hosted by the DHCP Agent " -"%(agent_id)s." -msgstr "" - -#: neutron/extensions/dhcpagentscheduler.py:136 -#, python-format -msgid "The network %(network_id)s is not hosted by the DHCP agent %(agent_id)s." -msgstr "" - -#: neutron/extensions/dvr.py:37 -#, python-format -msgid "Distributed Virtual Router Mac Address for host %(host)s does not exist." -msgstr "" - -#: neutron/extensions/dvr.py:42 -#, python-format -msgid "Unable to generate unique DVR mac for host %(host)s." -msgstr "" - -#: neutron/extensions/external_net.py:23 -#, python-format -msgid "" -"External network %(net_id)s cannot be updated to be made non-external, " -"since it has existing gateway ports" -msgstr "" - -#: neutron/extensions/external_net.py:51 -msgid "Adds external network attribute to network resource." -msgstr "" - -#: neutron/extensions/extra_dhcp_opt.py:23 -#, python-format -msgid "ExtraDhcpOpt %(id)s could not be found" -msgstr "" - -#: neutron/extensions/extra_dhcp_opt.py:27 -#, python-format -msgid "Invalid data format for extra-dhcp-opt: %(data)s" -msgstr "" - -#: neutron/extensions/extraroute.py:23 -#, python-format -msgid "Invalid format for routes: %(routes)s, %(reason)s" -msgstr "" - -#: neutron/extensions/extraroute.py:27 -#, python-format -msgid "" -"Router interface for subnet %(subnet_id)s on router %(router_id)s cannot " -"be deleted, as it is required by one or more routes." -msgstr "" - -#: neutron/extensions/extraroute.py:33 -#, python-format -msgid "" -"Unable to complete operation for %(router_id)s. The number of routes " -"exceeds the maximum %(quota)s." -msgstr "" - -#: neutron/extensions/firewall.py:35 -#, python-format -msgid "Firewall %(firewall_id)s could not be found." -msgstr "" - -#: neutron/extensions/firewall.py:39 -#, python-format -msgid "Firewall %(firewall_id)s is still active." -msgstr "" - -#: neutron/extensions/firewall.py:43 -#, python-format -msgid "" -"Operation cannot be performed since associated Firewall %(firewall_id)s " -"is in %(pending_state)s." -msgstr "" - -#: neutron/extensions/firewall.py:48 -#, python-format -msgid "Firewall Policy %(firewall_policy_id)s could not be found." -msgstr "" - -#: neutron/extensions/firewall.py:52 -#, python-format -msgid "Firewall Policy %(firewall_policy_id)s is being used." -msgstr "" - -#: neutron/extensions/firewall.py:62 -#, python-format -msgid "" -"Operation cannot be performed since Firewall Policy " -"%(firewall_policy_id)s is shared but Firewall Rule %(firewall_rule_id)s " -"is not shared" -msgstr "" - -#: neutron/extensions/firewall.py:74 -#, python-format -msgid "" -"Operation cannot be performed. Before sharing Firewall Policy " -"%(firewall_policy_id)s, share associated Firewall Rule " -"%(firewall_rule_id)s" -msgstr "" - -#: neutron/extensions/firewall.py:80 -#, python-format -msgid "Firewall Rule %(firewall_rule_id)s could not be found." -msgstr "" - -#: neutron/extensions/firewall.py:84 -#, python-format -msgid "Firewall Rule %(firewall_rule_id)s is being used." -msgstr "" - -#: neutron/extensions/firewall.py:88 -#, python-format -msgid "" -"Firewall Rule %(firewall_rule_id)s is not associated with Firewall " -"Policy %(firewall_policy_id)s." -msgstr "" - -#: neutron/extensions/firewall.py:93 -#, python-format -msgid "" -"Firewall Rule protocol %(protocol)s is not supported. Only protocol " -"values %(values)s and their integer representation (0 to 255) are " -"supported." -msgstr "" - -#: neutron/extensions/firewall.py:99 -#, python-format -msgid "" -"Firewall rule action %(action)s is not supported. Only action values " -"%(values)s are supported." -msgstr "" - -#: neutron/extensions/firewall.py:104 -#, python-format -msgid "%(param)s are not allowed when protocol is set to ICMP." -msgstr "" - -#: neutron/extensions/firewall.py:109 -msgid "Source/destination port requires a protocol" -msgstr "" - -#: neutron/extensions/firewall.py:113 -#, python-format -msgid "Invalid value for port %(port)s." -msgstr "" - -#: neutron/extensions/firewall.py:117 -msgid "Missing rule info argument for insert/remove rule operation." -msgstr "" - -#: neutron/extensions/firewall.py:127 -#, python-format -msgid "%(driver)s: Internal driver error." -msgstr "" - -#: neutron/extensions/firewall.py:138 -#, python-format -msgid "" -"Operation cannot be performed since Firewall Rule %(firewall_rule_id)s is" -" not shared and belongs to another tenant %(tenant_id)s" -msgstr "" - -#: neutron/extensions/firewall.py:189 -#, python-format -msgid "Port '%s' is not a valid number" -msgstr "" - -#: neutron/extensions/firewall.py:193 -#, python-format -msgid "Invalid port '%s'" -msgstr "" - -#: neutron/extensions/firewall.py:207 -#, python-format -msgid "%(msg_ip)s and %(msg_subnet)s" -msgstr "" - -#: neutron/extensions/firewall.py:328 -msgid "Number of firewalls allowed per tenant. A negative value means unlimited." -msgstr "" - -#: neutron/extensions/firewall.py:332 -msgid "" -"Number of firewall policies allowed per tenant. A negative value means " -"unlimited." -msgstr "" - -#: neutron/extensions/firewall.py:336 -msgid "" -"Number of firewall rules allowed per tenant. A negative value means " -"unlimited." -msgstr "" - -#: neutron/extensions/l3.py:29 -#, python-format -msgid "Router %(router_id)s could not be found" -msgstr "" - -#: neutron/extensions/l3.py:33 -#, python-format -msgid "Router %(router_id)s still has ports" -msgstr "" - -#: neutron/extensions/l3.py:37 -#, python-format -msgid "Router %(router_id)s does not have an interface with id %(port_id)s" -msgstr "" - -#: neutron/extensions/l3.py:42 -#, python-format -msgid "Router %(router_id)s has no interface on subnet %(subnet_id)s" -msgstr "" - -#: neutron/extensions/l3.py:47 -#, python-format -msgid "" -"Router interface for subnet %(subnet_id)s on router %(router_id)s cannot " -"be deleted, as it is required by one or more floating IPs." -msgstr "" - -#: neutron/extensions/l3.py:53 -#, python-format -msgid "Floating IP %(floatingip_id)s could not be found" -msgstr "" - -#: neutron/extensions/l3.py:57 -#, python-format -msgid "" -"External network %(external_network_id)s is not reachable from subnet " -"%(subnet_id)s. Therefore, cannot associate Port %(port_id)s with a " -"Floating IP." -msgstr "" - -#: neutron/extensions/l3.py:63 -#, python-format -msgid "" -"Cannot associate floating IP %(floating_ip_address)s (%(fip_id)s) with " -"port %(port_id)s using fixed IP %(fixed_ip)s, as that fixed IP already " -"has a floating IP on external network %(net_id)s." -msgstr "" - -#: neutron/extensions/l3.py:70 -#, python-format -msgid "" -"Port %(port_id)s has owner %(device_owner)s and therefore cannot be " -"deleted directly via the port API." -msgstr "" - -#: neutron/extensions/l3.py:75 -#, python-format -msgid "" -"Gateway cannot be updated for router %(router_id)s, since a gateway to " -"external network %(net_id)s is required by one or more floating IPs." -msgstr "" - -#: neutron/extensions/l3.py:138 -msgid "Number of routers allowed per tenant. A negative value means unlimited." -msgstr "" - -#: neutron/extensions/l3.py:142 -msgid "" -"Number of floating IPs allowed per tenant. A negative value means " -"unlimited." -msgstr "" - -#: neutron/extensions/l3_ext_ha_mode.py:33 -msgid "Currenly distributed HA routers are not supported." -msgstr "" - -#: neutron/extensions/l3_ext_ha_mode.py:38 -#, python-format -msgid "" -"Failed to allocate a VRID in the network %(network_id)s for the router " -"%(router_id)s after %(max_tries)s tries." -msgstr "" - -#: neutron/extensions/l3_ext_ha_mode.py:43 -#, python-format -msgid "" -"No more Virtual Router Identifier (VRID) available when creating router " -"%(router_id)s. The limit of number of HA Routers per tenant is 254." -msgstr "" - -#: neutron/extensions/l3_ext_ha_mode.py:49 -#, python-format -msgid "" -"The HA Network CIDR specified in the configuration file isn't valid; " -"%(cidr)s." -msgstr "" - -#: neutron/extensions/l3_ext_ha_mode.py:54 -#, python-format -msgid "" -"Not enough l3 agents available to ensure HA. Minimum required " -"%(min_agents)s, available %(num_agents)s." -msgstr "" - -#: neutron/extensions/l3_ext_ha_mode.py:59 -#, python-format -msgid "" -"min_l3_agents_per_router config parameter is not valid. It has to be " -"equal to or more than %s for HA." -msgstr "" - -#: neutron/extensions/l3agentscheduler.py:48 -#: neutron/extensions/l3agentscheduler.py:91 -msgid "No plugin for L3 routing registered to handle router scheduling" -msgstr "" - -#: neutron/extensions/l3agentscheduler.py:157 -#, python-format -msgid "Agent %(id)s is not a L3 Agent or has been disabled" -msgstr "" - -#: neutron/extensions/l3agentscheduler.py:161 -#, python-format -msgid "" -"The router %(router_id)s has been already hosted by the L3 Agent " -"%(agent_id)s." -msgstr "" - -#: neutron/extensions/l3agentscheduler.py:166 -#, python-format -msgid "Failed scheduling router %(router_id)s to the L3 Agent %(agent_id)s." -msgstr "" - -#: neutron/extensions/l3agentscheduler.py:171 -#, python-format -msgid "Failed rescheduling router %(router_id)s: no eligible l3 agent found." -msgstr "" - -#: neutron/extensions/l3agentscheduler.py:176 -#, python-format -msgid "The router %(router_id)s is not hosted by L3 agent %(agent_id)s." -msgstr "" - -#: neutron/extensions/l3agentscheduler.py:181 -#, python-format -msgid "" -"Cannot host %(router_type)s router %(router_id)s on %(agent_mode)s L3 " -"agent %(agent_id)s." -msgstr "" - -#: neutron/extensions/lbaas_agentscheduler.py:116 -#, python-format -msgid "No eligible loadbalancer agent found for pool %(pool_id)s." -msgstr "" - -#: neutron/extensions/lbaas_agentscheduler.py:121 -#, python-format -msgid "No active loadbalancer agent found for pool %(pool_id)s." -msgstr "" - -#: neutron/extensions/loadbalancer.py:33 -msgid "Delay must be greater than or equal to timeout" -msgstr "" - -#: neutron/extensions/loadbalancer.py:37 -#, python-format -msgid "No eligible backend for pool %(pool_id)s" -msgstr "" - -#: neutron/extensions/loadbalancer.py:41 -#, python-format -msgid "Vip %(vip_id)s could not be found" -msgstr "" - -#: neutron/extensions/loadbalancer.py:45 -#, python-format -msgid "Another Vip already exists for pool %(pool_id)s" -msgstr "" - -#: neutron/extensions/loadbalancer.py:49 -#, python-format -msgid "Pool %(pool_id)s could not be found" -msgstr "" - -#: neutron/extensions/loadbalancer.py:53 -#, python-format -msgid "Member %(member_id)s could not be found" -msgstr "" - -#: neutron/extensions/loadbalancer.py:57 -#, python-format -msgid "Health_monitor %(monitor_id)s could not be found" -msgstr "" - -#: neutron/extensions/loadbalancer.py:61 -#, python-format -msgid "Monitor %(monitor_id)s is not associated with Pool %(pool_id)s" -msgstr "" - -#: neutron/extensions/loadbalancer.py:66 -#, python-format -msgid "health_monitor %(monitor_id)s is already associated with pool %(pool_id)s" -msgstr "" - -#: neutron/extensions/loadbalancer.py:71 -#, python-format -msgid "Invalid state %(state)s of Loadbalancer resource %(id)s" -msgstr "" - -#: neutron/extensions/loadbalancer.py:75 -#, python-format -msgid "Pool %(pool_id)s is still in use" -msgstr "" - -#: neutron/extensions/loadbalancer.py:79 -#, python-format -msgid "Health monitor %(monitor_id)s still has associations with pools" -msgstr "" - -#: neutron/extensions/loadbalancer.py:84 -#, python-format -msgid "Statistics of Pool %(pool_id)s could not be found" -msgstr "" - -#: neutron/extensions/loadbalancer.py:88 -#, python-format -msgid "Protocol %(vip_proto)s does not match pool protocol %(pool_proto)s" -msgstr "" - -#: neutron/extensions/loadbalancer.py:93 -#, python-format -msgid "" -"Member with address %(address)s and port %(port)s already present in pool" -" %(pool)s" -msgstr "" - -#: neutron/extensions/loadbalancer.py:309 -msgid "Number of vips allowed per tenant. A negative value means unlimited." -msgstr "" - -#: neutron/extensions/loadbalancer.py:313 -msgid "Number of pools allowed per tenant. A negative value means unlimited." -msgstr "" - -#: neutron/extensions/loadbalancer.py:317 -msgid "" -"Number of pool members allowed per tenant. A negative value means " -"unlimited." -msgstr "" - -#: neutron/extensions/loadbalancer.py:321 -msgid "" -"Number of health monitors allowed per tenant. A negative value means " -"unlimited." -msgstr "" - -#: neutron/extensions/metering.py:31 -#, python-format -msgid "Metering label %(label_id)s does not exist" -msgstr "" - -#: neutron/extensions/metering.py:35 -msgid "Duplicate Metering Rule in POST." -msgstr "" - -#: neutron/extensions/metering.py:39 -#, python-format -msgid "Metering label rule %(rule_id)s does not exist" -msgstr "" - -#: neutron/extensions/metering.py:43 -#, python-format -msgid "" -"Metering label rule with remote_ip_prefix %(remote_ip_prefix)s overlaps " -"another" -msgstr "" - -#: neutron/extensions/multiprovidernet.py:27 -msgid "Segments and provider values cannot both be set." -msgstr "" - -#: neutron/extensions/multiprovidernet.py:31 -msgid "Duplicate segment entry in request." -msgstr "" - -#: neutron/extensions/portsecurity.py:20 -msgid "" -"Port has security group associated. Cannot disable port security or ip " -"address until security group is removed" -msgstr "" - -#: neutron/extensions/portsecurity.py:25 -msgid "" -"Port security must be enabled and port must have an IP address in order " -"to use security groups." -msgstr "" - -#: neutron/extensions/portsecurity.py:30 -msgid "Port does not have port security binding." -msgstr "" - -#: neutron/extensions/providernet.py:54 -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:267 -msgid "Plugin does not support updating provider attributes" -msgstr "" - -#: neutron/extensions/quotasv2.py:67 -msgid "POST requests are not supported on this resource." -msgstr "" - -#: neutron/extensions/quotasv2.py:86 -msgid "Only admin is authorized to access quotas for another tenant" -msgstr "" - -#: neutron/extensions/quotasv2.py:91 -msgid "Only admin can view or configure quota" -msgstr "" - -#: neutron/extensions/securitygroup.py:34 -msgid "For TCP/UDP protocols, port_range_min must be <= port_range_max" -msgstr "" - -#: neutron/extensions/securitygroup.py:39 -#, python-format -msgid "Invalid value for port %(port)s" -msgstr "" - -#: neutron/extensions/securitygroup.py:43 -#, python-format -msgid "" -"Invalid value for ICMP %(field)s (%(attr)s) %(value)s. It must be 0 to " -"255." -msgstr "" - -#: neutron/extensions/securitygroup.py:48 -#, python-format -msgid "" -"ICMP code (port-range-max) %(value)s is provided but ICMP type (port-" -"range-min) is missing." -msgstr "" - -#: neutron/extensions/securitygroup.py:53 -#, python-format -msgid "Security Group %(id)s in use." -msgstr "" - -#: neutron/extensions/securitygroup.py:57 -msgid "Removing default security group not allowed." -msgstr "" - -#: neutron/extensions/securitygroup.py:61 -msgid "Updating default security group not allowed." -msgstr "" - -#: neutron/extensions/securitygroup.py:65 -msgid "Default security group already exists." -msgstr "" - -#: neutron/extensions/securitygroup.py:69 -#, python-format -msgid "" -"Security group rule protocol %(protocol)s not supported. Only protocol " -"values %(values)s and their integer representation (0 to 255) are " -"supported." -msgstr "" - -#: neutron/extensions/securitygroup.py:75 -msgid "Multiple tenant_ids in bulk security group rule create not allowed" -msgstr "" - -#: neutron/extensions/securitygroup.py:80 -msgid "Only remote_ip_prefix or remote_group_id may be provided." -msgstr "" - -#: neutron/extensions/securitygroup.py:85 -msgid "Must also specifiy protocol if port range is given." -msgstr "" - -#: neutron/extensions/securitygroup.py:89 -msgid "Only allowed to update rules for one security profile at a time" -msgstr "" - -#: neutron/extensions/securitygroup.py:94 -#, python-format -msgid "Security group %(id)s does not exist" -msgstr "" - -#: neutron/extensions/securitygroup.py:98 -#, python-format -msgid "Security group rule %(id)s does not exist" -msgstr "" - -#: neutron/extensions/securitygroup.py:102 -msgid "Duplicate Security Group Rule in POST." -msgstr "" - -#: neutron/extensions/securitygroup.py:106 -#, python-format -msgid "Security group rule already exists. Rule id is %(id)s." -msgstr "" - -#: neutron/extensions/securitygroup.py:110 -#, python-format -msgid "Conflicting value ethertype %(ethertype)s for CIDR %(cidr)s" -msgstr "" - -#: neutron/extensions/securitygroup.py:158 -#, python-format -msgid "'%s' is not an integer or uuid" -msgstr "" - -#: neutron/extensions/securitygroup.py:247 -msgid "" -"Number of security groups allowed per tenant. A negative value means " -"unlimited." -msgstr "" - -#: neutron/extensions/securitygroup.py:251 -msgid "" -"Number of security rules allowed per tenant. A negative value means " -"unlimited." -msgstr "" - -#: neutron/extensions/servicetype.py:49 -msgid "Neutron Service Type Management" -msgstr "" - -#: neutron/extensions/servicetype.py:57 -msgid "API for retrieving service providers for Neutron advanced services" -msgstr "" - -#: neutron/extensions/vpnaas.py:29 -#, python-format -msgid "VPNService %(vpnservice_id)s could not be found" -msgstr "" - -#: neutron/extensions/vpnaas.py:33 -#, python-format -msgid "ipsec_site_connection %(ipsec_site_conn_id)s not found" -msgstr "" - -#: neutron/extensions/vpnaas.py:37 -#, python-format -msgid "ipsec_site_connection %(attr)s is equal to or less than dpd_interval" -msgstr "" - -#: neutron/extensions/vpnaas.py:42 -#, python-format -msgid "ipsec_site_connection MTU %(mtu)d is too small for ipv%(version)s" -msgstr "" - -#: neutron/extensions/vpnaas.py:47 -#, python-format -msgid "IKEPolicy %(ikepolicy_id)s could not be found" -msgstr "" - -#: neutron/extensions/vpnaas.py:51 -#, python-format -msgid "IPsecPolicy %(ipsecpolicy_id)s could not be found" -msgstr "" - -#: neutron/extensions/vpnaas.py:55 -#, python-format -msgid "" -"IKEPolicy %(ikepolicy_id)s is in use by existing IPsecSiteConnection and " -"can't be updated or deleted" -msgstr "" - -#: neutron/extensions/vpnaas.py:60 -#, python-format -msgid "VPNService %(vpnservice_id)s is still in use" -msgstr "" - -#: neutron/extensions/vpnaas.py:64 -#, python-format -msgid "Router %(router_id)s is used by VPNService %(vpnservice_id)s" -msgstr "" - -#: neutron/extensions/vpnaas.py:68 -#, python-format -msgid "Invalid state %(state)s of vpnaas resource %(id)s for updating" -msgstr "" - -#: neutron/extensions/vpnaas.py:73 -#, python-format -msgid "" -"IPsecPolicy %(ipsecpolicy_id)s is in use by existing IPsecSiteConnection " -"and can't be updated or deleted" -msgstr "" - -#: neutron/extensions/vpnaas.py:78 -#, python-format -msgid "Can not load driver :%(device_driver)s" -msgstr "" - -#: neutron/extensions/vpnaas.py:82 -#, python-format -msgid "Subnet %(subnet_id)s is not connected to Router %(router_id)s" -msgstr "" - -#: neutron/extensions/vpnaas.py:87 -#, python-format -msgid "Router %(router_id)s has no external network gateway set" -msgstr "" - -#: neutron/notifiers/nova.py:165 -msgid "device_id is not set on port yet." -msgstr "" - -#: neutron/notifiers/nova.py:169 -msgid "Port ID not set! Nova will not be notified of port status change." -msgstr "" - -#: neutron/notifiers/nova.py:194 -#, python-format -msgid "" -"Ignoring state change previous_port_status: %(pre_status)s " -"current_port_status: %(cur_status)s port_id %(id)s" -msgstr "" - -#: neutron/notifiers/nova.py:220 -#, python-format -msgid "Sending events: %s" -msgstr "" - -#: neutron/notifiers/nova.py:225 -#, python-format -msgid "Nova returned NotFound for event: %s" -msgstr "" - -#: neutron/notifiers/nova.py:228 -#, python-format -msgid "Failed to notify nova on events: %s" -msgstr "" - -#: neutron/notifiers/nova.py:232 neutron/notifiers/nova.py:248 -#, python-format -msgid "Error response returned from nova: %s" -msgstr "" - -#: neutron/notifiers/nova.py:243 -#, python-format -msgid "Nova event: %s returned with failed status" -msgstr "" - -#: neutron/notifiers/nova.py:246 -#, python-format -msgid "Nova event response: %s" -msgstr "" - -#: neutron/openstack/common/eventlet_backdoor.py:140 -#, python-format -msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" -msgstr "" - -#: neutron/openstack/common/gettextutils.py:320 -msgid "Message objects do not support addition." -msgstr "" - -#: neutron/openstack/common/gettextutils.py:330 -msgid "" -"Message objects do not support str() because they may contain non-ascii " -"characters. Please use unicode() or translate() instead." -msgstr "" - -#: neutron/openstack/common/lockutils.py:103 -#, python-format -msgid "Could not release the acquired lock `%s`" -msgstr "" - -#: neutron/openstack/common/lockutils.py:168 -#, python-format -msgid "Got semaphore \"%(lock)s\"" -msgstr "" - -#: neutron/openstack/common/lockutils.py:177 -#, python-format -msgid "Attempting to grab file lock \"%(lock)s\"" -msgstr "" - -#: neutron/openstack/common/lockutils.py:187 -#, python-format -msgid "Created lock path: %s" -msgstr "" - -#: neutron/openstack/common/lockutils.py:205 -#, python-format -msgid "Got file lock \"%(lock)s\" at %(path)s" -msgstr "" - -#: neutron/openstack/common/lockutils.py:209 -#, python-format -msgid "Released file lock \"%(lock)s\" at %(path)s" -msgstr "" - -#: neutron/openstack/common/lockutils.py:247 -#, python-format -msgid "Got semaphore / lock \"%(function)s\"" -msgstr "" - -#: neutron/openstack/common/lockutils.py:251 -#, python-format -msgid "Semaphore / lock released \"%(function)s\"" -msgstr "" - -#: neutron/openstack/common/log.py:327 -#, python-format -msgid "Deprecated: %s" -msgstr "" - -#: neutron/openstack/common/log.py:436 -#, python-format -msgid "Error loading logging config %(log_config)s: %(err_msg)s" -msgstr "" - -#: neutron/openstack/common/log.py:486 -#, python-format -msgid "syslog facility must be one of: %s" -msgstr "" - -#: neutron/openstack/common/log.py:729 -#, python-format -msgid "Fatal call to deprecated config: %(msg)s" -msgstr "" - -#: neutron/openstack/common/loopingcall.py:82 -#, python-format -msgid "task run outlasted interval by %s sec" -msgstr "" - -#: neutron/openstack/common/loopingcall.py:89 -msgid "in fixed duration looping call" -msgstr "" - -#: neutron/openstack/common/loopingcall.py:129 -#, python-format -msgid "Dynamic looping call sleeping for %.02f seconds" -msgstr "" - -#: neutron/openstack/common/loopingcall.py:136 -msgid "in dynamic looping call" -msgstr "" - -#: neutron/openstack/common/periodic_task.py:40 -#, python-format -msgid "Unexpected argument for periodic task creation: %(arg)s." -msgstr "" - -#: neutron/openstack/common/policy.py:395 -#, python-format -msgid "Failed to understand rule %(rule)s" -msgstr "" - -#: neutron/openstack/common/policy.py:405 -#, python-format -msgid "No handler for matches of kind %s" -msgstr "" - -#: neutron/openstack/common/policy.py:680 -#, python-format -msgid "Failed to understand rule %(rule)r" -msgstr "" - -#: neutron/openstack/common/processutils.py:130 -#, python-format -msgid "Got unknown keyword args to utils.execute: %r" -msgstr "" - -#: neutron/openstack/common/processutils.py:145 -#, python-format -msgid "Running cmd (subprocess): %s" -msgstr "" - -#: neutron/openstack/common/processutils.py:169 -#: neutron/openstack/common/processutils.py:241 -#, python-format -msgid "Result was %s" -msgstr "" - -#: neutron/openstack/common/processutils.py:181 -#, python-format -msgid "%r failed. Retrying." -msgstr "" - -#: neutron/openstack/common/processutils.py:220 -#, python-format -msgid "Running cmd (SSH): %s" -msgstr "" - -#: neutron/openstack/common/processutils.py:222 -msgid "Environment not supported over SSH" -msgstr "" - -#: neutron/openstack/common/processutils.py:226 -msgid "process_input not supported over SSH" -msgstr "" - -#: neutron/openstack/common/sslutils.py:50 -#, python-format -msgid "Unable to find cert_file : %s" -msgstr "" - -#: neutron/openstack/common/sslutils.py:53 -#, python-format -msgid "Unable to find ca_file : %s" -msgstr "" - -#: neutron/openstack/common/sslutils.py:56 -#, python-format -msgid "Unable to find key_file : %s" -msgstr "" - -#: neutron/openstack/common/sslutils.py:59 -msgid "" -"When running server in SSL mode, you must specify both a cert_file and " -"key_file option value in your configuration file" -msgstr "" - -#: neutron/openstack/common/sslutils.py:98 -#, python-format -msgid "Invalid SSL version : %s" -msgstr "" - -#: neutron/openstack/common/strutils.py:92 -#, python-format -msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" -msgstr "" - -#: neutron/openstack/common/strutils.py:197 -#, python-format -msgid "Invalid unit system: \"%s\"" -msgstr "" - -#: neutron/openstack/common/strutils.py:206 -#, python-format -msgid "Invalid string format: %s" -msgstr "" - -#: neutron/openstack/common/versionutils.py:69 -#, python-format -msgid "" -"%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " -"may be removed in %(remove_in)s." -msgstr "" - -#: neutron/openstack/common/versionutils.py:73 -#, python-format -msgid "" -"%(what)s is deprecated as of %(as_of)s and may be removed in " -"%(remove_in)s. It will not be superseded." -msgstr "" - -#: neutron/openstack/common/middleware/catch_errors.py:40 -#, python-format -msgid "An error occurred during processing the request: %s" -msgstr "" - -#: neutron/openstack/common/middleware/sizelimit.py:55 -#: neutron/openstack/common/middleware/sizelimit.py:64 -#: neutron/openstack/common/middleware/sizelimit.py:75 -msgid "Request is too large." -msgstr "" - -#: neutron/plugins/bigswitch/config.py:28 -msgid "" -"A comma separated list of Big Switch or Floodlight servers and port " -"numbers. The plugin proxies the requests to the Big Switch/Floodlight " -"server, which performs the networking configuration. Only oneserver is " -"needed per deployment, but you may wish todeploy multiple servers to " -"support failover." -msgstr "" - -#: neutron/plugins/bigswitch/config.py:35 -msgid "" -"The username and password for authenticating against the Big Switch or " -"Floodlight controller." -msgstr "" - -#: neutron/plugins/bigswitch/config.py:38 -msgid "" -"If True, Use SSL when connecting to the Big Switch or Floodlight " -"controller." -msgstr "" - -#: neutron/plugins/bigswitch/config.py:41 -msgid "" -"Trust and store the first certificate received for each controller " -"address and use it to validate future connections to that address." -msgstr "" - -#: neutron/plugins/bigswitch/config.py:45 -msgid "Disables SSL certificate validation for controllers" -msgstr "" - -#: neutron/plugins/bigswitch/config.py:47 -msgid "Re-use HTTP/HTTPS connections to the controller." -msgstr "" - -#: neutron/plugins/bigswitch/config.py:50 -msgid "Directory containing ca_certs and host_certs certificate directories." -msgstr "" - -#: neutron/plugins/bigswitch/config.py:53 -msgid "Sync data on connect" -msgstr "" - -#: neutron/plugins/bigswitch/config.py:55 -msgid "" -"If neutron fails to create a resource because the backend controller " -"doesn't know of a dependency, the plugin automatically triggers a full " -"data synchronization to the controller." -msgstr "" - -#: neutron/plugins/bigswitch/config.py:60 -msgid "" -"Time between verifications that the backend controller database is " -"consistent with Neutron. (0 to disable)" -msgstr "" - -#: neutron/plugins/bigswitch/config.py:63 -msgid "" -"Maximum number of seconds to wait for proxy request to connect and " -"complete." -msgstr "" - -#: neutron/plugins/bigswitch/config.py:66 -msgid "" -"Maximum number of threads to spawn to handle large volumes of port " -"creations." -msgstr "" - -#: neutron/plugins/bigswitch/config.py:70 -msgid "User defined identifier for this Neutron deployment" -msgstr "" - -#: neutron/plugins/bigswitch/config.py:72 -msgid "" -"Flag to decide if a route to the metadata server should be injected into " -"the VM" -msgstr "" - -#: neutron/plugins/bigswitch/config.py:77 -msgid "" -"The default router rules installed in new tenant routers. Repeat the " -"config option for each rule. Format is " -"::: Use an * to specify default for " -"all tenants." -msgstr "" - -#: neutron/plugins/bigswitch/config.py:82 -msgid "Maximum number of router rules" -msgstr "" - -#: neutron/plugins/bigswitch/config.py:86 -msgid "Virtual interface type to configure on Nova compute nodes" -msgstr "" - -#: neutron/plugins/bigswitch/config.py:93 -#, python-format -msgid "Nova compute nodes to manually set VIF type to %s" -msgstr "" - -#: neutron/plugins/bigswitch/config.py:100 -msgid "List of allowed vif_type values." -msgstr "" - -#: neutron/plugins/bigswitch/config.py:104 -msgid "" -"Name of integration bridge on compute nodes used for security group " -"insertion." -msgstr "" - -#: neutron/plugins/bigswitch/config.py:107 -msgid "Seconds between agent checks for port changes" -msgstr "" - -#: neutron/plugins/bigswitch/config.py:109 -msgid "Virtual switch type." -msgstr "" - -#: neutron/plugins/bigswitch/l3_router_plugin.py:58 -msgid "L3 Router Service Plugin for Big Switch fabric" -msgstr "" - -#: neutron/plugins/bigswitch/l3_router_plugin.py:212 -#, python-format -msgid "NeutronRestProxyV2: Unable to create remote floating IP: %s" -msgstr "" - -#: neutron/plugins/bigswitch/l3_router_plugin.py:281 -msgid "NeutronRestProxyV2: too many external networks" -msgstr "" - -#: neutron/plugins/bigswitch/plugin.py:90 -msgid "Syntax error in server config file, aborting plugin" -msgstr "" - -#: neutron/plugins/bigswitch/plugin.py:124 neutron/plugins/ml2/db.py:212 -#, python-format -msgid "get_port_and_sgs() called for port_id %s" -msgstr "" - -#: neutron/plugins/bigswitch/plugin.py:234 -#, python-format -msgid "Unable to update remote topology: %s" -msgstr "" - -#: neutron/plugins/bigswitch/plugin.py:319 -#, python-format -msgid "" -"Setting admin_state_up=False is not supported in this plugin version. " -"Ignoring setting for resource: %s" -msgstr "" - -#: neutron/plugins/bigswitch/plugin.py:325 -#, python-format -msgid "" -"Operational status is internally set by the plugin. Ignoring setting " -"status=%s." -msgstr "" - -#: neutron/plugins/bigswitch/plugin.py:350 -#, python-format -msgid "Unrecognized vif_type in configuration [%s]. Defaulting to ovs." -msgstr "" - -#: neutron/plugins/bigswitch/plugin.py:398 -#: neutron/plugins/ml2/drivers/mech_bigswitch/driver.py:109 -msgid "Iconsistency with backend controller triggering full synchronization." -msgstr "" - -#: neutron/plugins/bigswitch/plugin.py:415 -#, python-format -msgid "NeutronRestProxyV2: Unable to create port: %s" -msgstr "" - -#: neutron/plugins/bigswitch/plugin.py:476 -#, python-format -msgid "NeutronRestProxy: Starting plugin. Version=%s" -msgstr "" - -#: neutron/plugins/bigswitch/plugin.py:503 -msgid "NeutronRestProxyV2: initialization done" -msgstr "" - -#: neutron/plugins/bigswitch/plugin.py:547 -msgid "NeutronRestProxyV2: create_network() called" -msgstr "" - -#: neutron/plugins/bigswitch/plugin.py:590 -msgid "NeutronRestProxyV2.update_network() called" -msgstr "" - -#: neutron/plugins/bigswitch/plugin.py:618 -msgid "NeutronRestProxyV2: delete_network() called" -msgstr "" - -#: neutron/plugins/bigswitch/plugin.py:656 -msgid "NeutronRestProxyV2: create_port() called" -msgstr "" - -#: neutron/plugins/bigswitch/plugin.py:748 -msgid "NeutronRestProxyV2: update_port() called" -msgstr "" - -#: neutron/plugins/bigswitch/plugin.py:808 -msgid "NeutronRestProxyV2: delete_port() called" -msgstr "" - -#: neutron/plugins/bigswitch/plugin.py:831 -msgid "NeutronRestProxyV2: create_subnet() called" -msgstr "" - -#: neutron/plugins/bigswitch/plugin.py:848 -msgid "NeutronRestProxyV2: update_subnet() called" -msgstr "" - -#: neutron/plugins/bigswitch/plugin.py:867 -msgid "NeutronRestProxyV2: delete_subnet() called" -msgstr "" - -#: neutron/plugins/bigswitch/plugin.py:891 -msgid "Adding host route: " -msgstr "" - -#: neutron/plugins/bigswitch/plugin.py:892 -#, python-format -msgid "Destination:%(dst)s nexthop:%(next)s" -msgstr "" - -#: neutron/plugins/bigswitch/routerrule_db.py:75 -msgid "No rules in router" -msgstr "" - -#: neutron/plugins/bigswitch/routerrule_db.py:89 -#, python-format -msgid "Updating router rules to %s" -msgstr "" - -#: neutron/plugins/bigswitch/servermanager.py:79 -#, python-format -msgid "Error in REST call to remote network controller: %(reason)s" -msgstr "" - -#: neutron/plugins/bigswitch/servermanager.py:118 -msgid "Couldn't retrieve capabilities. Newer API calls won't be supported." -msgstr "" - -#: neutron/plugins/bigswitch/servermanager.py:120 -#, python-format -msgid "The following capabilities were received for %(server)s: %(cap)s" -msgstr "" - -#: neutron/plugins/bigswitch/servermanager.py:148 -#, python-format -msgid "ServerProxy: server=%(server)s, port=%(port)d, ssl=%(ssl)r" -msgstr "" - -#: neutron/plugins/bigswitch/servermanager.py:151 -#, python-format -msgid "" -"ServerProxy: resource=%(resource)s, data=%(data)r, headers=%(headers)r, " -"action=%(action)s" -msgstr "" - -#: neutron/plugins/bigswitch/servermanager.py:172 -msgid "ServerProxy: Could not establish HTTPS connection" -msgstr "" - -#: neutron/plugins/bigswitch/servermanager.py:180 -msgid "ServerProxy: Could not establish HTTP connection" -msgstr "" - -#: neutron/plugins/bigswitch/servermanager.py:216 -#, python-format -msgid "ServerProxy: %(action)s failure, %(e)r" -msgstr "" - -#: neutron/plugins/bigswitch/servermanager.py:219 -#, python-format -msgid "" -"ServerProxy: status=%(status)d, reason=%(reason)r, ret=%(ret)s, " -"data=%(data)r" -msgstr "" - -#: neutron/plugins/bigswitch/servermanager.py:240 -msgid "ServerPool: initializing" -msgstr "" - -#: neutron/plugins/bigswitch/servermanager.py:263 -msgid "Servers not defined. Aborting server manager." -msgstr "" - -#: neutron/plugins/bigswitch/servermanager.py:270 -#, python-format -msgid "Servers must be defined as :. Configuration was %s" -msgstr "" - -#: neutron/plugins/bigswitch/servermanager.py:279 -msgid "ServerPool: initialization done" -msgstr "" - -#: neutron/plugins/bigswitch/servermanager.py:329 -#, python-format -msgid "ssl_cert_directory [%s] does not exist. Create it or disable ssl." -msgstr "" - -#: neutron/plugins/bigswitch/servermanager.py:346 -#, python-format -msgid "No certificates were found to verify controller %s" -msgstr "" - -#: neutron/plugins/bigswitch/servermanager.py:388 -#, python-format -msgid "" -"Could not retrieve initial certificate from controller %(server)s. Error " -"details: %(error)s" -msgstr "" - -#: neutron/plugins/bigswitch/servermanager.py:393 -#, python-format -msgid "Storing to certificate for host %(server)s at %(path)s" -msgstr "" - -#: neutron/plugins/bigswitch/servermanager.py:448 -msgid "Server requires synchronization, but no topology function was defined." -msgstr "" - -#: neutron/plugins/bigswitch/servermanager.py:465 -#, python-format -msgid "" -"ServerProxy: %(action)s failure for servers: %(server)r Response: " -"%(response)s" -msgstr "" - -#: neutron/plugins/bigswitch/servermanager.py:471 -#, python-format -msgid "" -"ServerProxy: Error details: status=%(status)d, reason=%(reason)r, " -"ret=%(ret)s, data=%(data)r" -msgstr "" - -#: neutron/plugins/bigswitch/servermanager.py:478 -#, python-format -msgid "ServerProxy: %(action)s failure for all servers: %(server)r" -msgstr "" - -#: neutron/plugins/bigswitch/servermanager.py:503 -#, python-format -msgid "" -"NeutronRestProxyV2: Received and ignored error code %(code)s on " -"%(action)s action to resource %(resource)s" -msgstr "" - -#: neutron/plugins/bigswitch/servermanager.py:513 -#, python-format -msgid "Unable to create remote router: %s" -msgstr "" - -#: neutron/plugins/bigswitch/servermanager.py:519 -#, python-format -msgid "Unable to update remote router: %s" -msgstr "" - -#: neutron/plugins/bigswitch/servermanager.py:524 -#, python-format -msgid "Unable to delete remote router: %s" -msgstr "" - -#: neutron/plugins/bigswitch/servermanager.py:530 -#, python-format -msgid "Unable to add router interface: %s" -msgstr "" - -#: neutron/plugins/bigswitch/servermanager.py:535 -#, python-format -msgid "Unable to delete remote intf: %s" -msgstr "" - -#: neutron/plugins/bigswitch/servermanager.py:541 -#, python-format -msgid "Unable to create remote network: %s" -msgstr "" - -#: neutron/plugins/bigswitch/servermanager.py:547 -#: neutron/plugins/bigswitch/servermanager.py:552 -#, python-format -msgid "Unable to update remote network: %s" -msgstr "" - -#: neutron/plugins/bigswitch/servermanager.py:561 -#, python-format -msgid "No device MAC attached to port %s. Skipping notification to controller." -msgstr "" - -#: neutron/plugins/bigswitch/servermanager.py:566 -#, python-format -msgid "Unable to create remote port: %s" -msgstr "" - -#: neutron/plugins/bigswitch/servermanager.py:571 -#, python-format -msgid "Unable to delete remote port: %s" -msgstr "" - -#: neutron/plugins/bigswitch/servermanager.py:581 -#, python-format -msgid "Unable to create floating IP: %s" -msgstr "" - -#: neutron/plugins/bigswitch/servermanager.py:586 -#, python-format -msgid "Unable to update floating IP: %s" -msgstr "" - -#: neutron/plugins/bigswitch/servermanager.py:591 -#, python-format -msgid "Unable to delete floating IP: %s" -msgstr "" - -#: neutron/plugins/bigswitch/servermanager.py:596 -#, python-format -msgid "Unable to retrieve switch: %s" -msgstr "" - -#: neutron/plugins/bigswitch/servermanager.py:601 -msgid "Backend server(s) do not support automated consitency checks." -msgstr "" - -#: neutron/plugins/bigswitch/servermanager.py:605 -#, python-format -msgid "Consistency watchdog disabled by polling interval setting of %s." -msgstr "" - -#: neutron/plugins/bigswitch/servermanager.py:617 -msgid "Encountered an error checking controller health." -msgstr "" - -#: neutron/plugins/bigswitch/agent/restproxy_agent.py:115 -#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:233 -msgid "Port update received" -msgstr "" - -#: neutron/plugins/bigswitch/agent/restproxy_agent.py:119 -#, python-format -msgid "Port %s is not present on this host." -msgstr "" - -#: neutron/plugins/bigswitch/agent/restproxy_agent.py:122 -#, python-format -msgid "Port %s found. Refreshing firewall." -msgstr "" - -#: neutron/plugins/bigswitch/agent/restproxy_agent.py:150 -#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:266 -msgid "Agent loop has new device" -msgstr "" - -#: neutron/plugins/bigswitch/agent/restproxy_agent.py:154 -#: neutron/plugins/nec/agent/nec_neutron_agent.py:223 -#: neutron/plugins/oneconvergence/agent/nvsd_neutron_agent.py:157 -#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:270 -msgid "Error in agent event loop" -msgstr "" - -#: neutron/plugins/bigswitch/agent/restproxy_agent.py:160 -#: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:223 -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:1010 -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1461 -#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:276 -#: neutron/plugins/sriovnicagent/sriov_nic_agent.py:285 -#, python-format -msgid "Loop iteration exceeded interval (%(polling_interval)s vs. %(elapsed)s)!" -msgstr "" - -#: neutron/plugins/bigswitch/db/consistency_db.py:69 -#, python-format -msgid "Consistency hash for group %(hash_id)s updated to %(hash)s" -msgstr "" - -#: neutron/plugins/bigswitch/db/porttracker_db.py:39 -msgid "No host_id in port request to track port location." -msgstr "" - -#: neutron/plugins/bigswitch/db/porttracker_db.py:42 -#, python-format -msgid "Received an empty port ID for host_id '%s'" -msgstr "" - -#: neutron/plugins/bigswitch/db/porttracker_db.py:45 -#, python-format -msgid "Received an empty host_id for port '%s'" -msgstr "" - -#: neutron/plugins/bigswitch/db/porttracker_db.py:47 -#, python-format -msgid "Logging port %(port)s on host_id %(host)s" -msgstr "" - -#: neutron/plugins/bigswitch/extensions/routerrule.py:26 -#, python-format -msgid "Invalid format for router rules: %(rule)s, %(reason)s" -msgstr "" - -#: neutron/plugins/bigswitch/extensions/routerrule.py:30 -#, python-format -msgid "" -"Unable to complete rules update for %(router_id)s. The number of rules " -"exceeds the maximum %(quota)s." -msgstr "" - -#: neutron/plugins/bigswitch/extensions/routerrule.py:47 -#, python-format -msgid "Invalid data format for router rule: '%s'" -msgstr "" - -#: neutron/plugins/bigswitch/extensions/routerrule.py:79 -#, python-format -msgid "Duplicate nexthop in rule '%s'" -msgstr "" - -#: neutron/plugins/bigswitch/extensions/routerrule.py:87 -#, python-format -msgid "Action must be either permit or deny. '%s' was provided" -msgstr "" - -#: neutron/plugins/bigswitch/extensions/routerrule.py:99 -#, python-format -msgid "Duplicate router rules (src,dst) found '%s'" -msgstr "" - -#: neutron/plugins/brocade/NeutronPlugin.py:59 -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:31 -#: neutron/services/l3_router/brocade/l3_router_plugin.py:36 -msgid "The address of the host to SSH to" -msgstr "" - -#: neutron/plugins/brocade/NeutronPlugin.py:61 -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:33 -#: neutron/services/l3_router/brocade/l3_router_plugin.py:38 -msgid "The SSH username to use" -msgstr "" - -#: neutron/plugins/brocade/NeutronPlugin.py:63 -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:35 -#: neutron/services/l3_router/brocade/l3_router_plugin.py:40 -msgid "The SSH password to use" -msgstr "" - -#: neutron/plugins/brocade/NeutronPlugin.py:65 -msgid "Currently unused" -msgstr "" - -#: neutron/plugins/brocade/NeutronPlugin.py:69 -msgid "The network interface to use when creatinga port" -msgstr "" - -#: neutron/plugins/brocade/NeutronPlugin.py:91 -#: neutron/plugins/hyperv/rpc_callbacks.py:41 -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:69 -#: neutron/plugins/mlnx/rpc_callbacks.py:37 -#: neutron/plugins/openvswitch/ovs_neutron_plugin.py:80 -#, python-format -msgid "Device %(device)s details requested from %(agent_id)s" -msgstr "" - -#: neutron/plugins/brocade/NeutronPlugin.py:106 -#: neutron/plugins/brocade/NeutronPlugin.py:133 -#: neutron/plugins/hyperv/rpc_callbacks.py:57 -#: neutron/plugins/hyperv/rpc_callbacks.py:86 -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:93 -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:130 -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:153 -#: neutron/plugins/mlnx/rpc_callbacks.py:60 -#: neutron/plugins/mlnx/rpc_callbacks.py:90 -#: neutron/plugins/mlnx/rpc_callbacks.py:106 -#: neutron/plugins/openvswitch/ovs_neutron_plugin.py:98 -#: neutron/plugins/openvswitch/ovs_neutron_plugin.py:135 -#: neutron/plugins/openvswitch/ovs_neutron_plugin.py:158 -#, python-format -msgid "%s can not be found in database" -msgstr "" - -#: neutron/plugins/brocade/NeutronPlugin.py:299 -#: neutron/plugins/brocade/NeutronPlugin.py:343 -#: neutron/plugins/brocade/NeutronPlugin.py:396 -#: neutron/plugins/brocade/NeutronPlugin.py:426 -msgid "Brocade NOS driver error" -msgstr "" - -#: neutron/plugins/brocade/NeutronPlugin.py:300 -#, python-format -msgid "Returning the allocated vlan (%d) to the pool" -msgstr "" - -#: neutron/plugins/brocade/NeutronPlugin.py:303 -#: neutron/plugins/brocade/NeutronPlugin.py:344 -#: neutron/plugins/brocade/NeutronPlugin.py:397 -#: neutron/plugins/brocade/NeutronPlugin.py:428 -msgid "Brocade plugin raised exception, check logs" -msgstr "" - -#: neutron/plugins/brocade/NeutronPlugin.py:309 -#, python-format -msgid "Allocated vlan (%d) from the pool" -msgstr "" - -#: neutron/plugins/brocade/nos/nosdriver.py:65 -#, python-format -msgid "Connect failed to switch: %s" -msgstr "" - -#: neutron/plugins/brocade/nos/nosdriver.py:67 -#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:86 -#, python-format -msgid "Connect success to host %(host)s:%(ssh_port)d" -msgstr "" - -#: neutron/plugins/brocade/nos/nosdriver.py:92 -#: neutron/plugins/brocade/nos/nosdriver.py:106 -#: neutron/plugins/brocade/nos/nosdriver.py:119 -#: neutron/plugins/brocade/nos/nosdriver.py:132 -#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:327 -#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:338 -#, python-format -msgid "NETCONF error: %s" -msgstr "" - -#: neutron/plugins/cisco/network_plugin.py:87 -msgid "Plugin initialization complete" -msgstr "" - -#: neutron/plugins/cisco/network_plugin.py:115 -#, python-format -msgid "'%(model)s' object has no attribute '%(name)s'" -msgstr "" - -#: neutron/plugins/cisco/network_plugin.py:132 -#: neutron/plugins/cisco/db/network_db_v2.py:30 -msgid "get_all_qoss() called" -msgstr "" - -#: neutron/plugins/cisco/network_plugin.py:138 -msgid "get_qos_details() called" -msgstr "" - -#: neutron/plugins/cisco/network_plugin.py:143 -msgid "create_qos() called" -msgstr "" - -#: neutron/plugins/cisco/network_plugin.py:149 -msgid "delete_qos() called" -msgstr "" - -#: neutron/plugins/cisco/network_plugin.py:154 -msgid "rename_qos() called" -msgstr "" - -#: neutron/plugins/cisco/network_plugin.py:159 -msgid "get_all_credentials() called" -msgstr "" - -#: neutron/plugins/cisco/network_plugin.py:165 -msgid "get_credential_details() called" -msgstr "" - -#: neutron/plugins/cisco/network_plugin.py:170 -msgid "rename_credential() called" -msgstr "" - -#: neutron/plugins/cisco/cfg_agent/cfg_agent.py:106 -msgid "" -"Interval when the process_services() loop executes in seconds. This is " -"when the config agent lets each service helper to process its neutron " -"resources." -msgstr "" - -#: neutron/plugins/cisco/cfg_agent/cfg_agent.py:113 -msgid "Path of the routing service helper class." -msgstr "" - -#: neutron/plugins/cisco/cfg_agent/cfg_agent.py:135 -#, python-format -msgid "" -"Error in loading routing service helper. Class specified is %(class)s. " -"Reason:%(reason)s" -msgstr "" - -#: neutron/plugins/cisco/cfg_agent/cfg_agent.py:146 -msgid "Cisco cfg agent started" -msgstr "" - -#: neutron/plugins/cisco/cfg_agent/cfg_agent.py:206 -msgid "No routing service helper loaded" -msgstr "" - -#: neutron/plugins/cisco/cfg_agent/cfg_agent.py:235 -#, python-format -msgid "" -"Invalid payload format for received RPC message " -"`hosting_devices_removed`. Error is %{error}s. Payload is %(payload)s" -msgstr "" - -#: neutron/plugins/cisco/cfg_agent/cfg_agent.py:279 -msgid "[Agent registration] Agent successfully registered" -msgstr "" - -#: neutron/plugins/cisco/cfg_agent/cfg_agent.py:283 -#, python-format -msgid "" -"[Agent registration] Neutron server said that device manager was not " -"ready. Retrying in %0.2f seconds " -msgstr "" - -#: neutron/plugins/cisco/cfg_agent/cfg_agent.py:288 -msgid "" -"[Agent registration] Neutron server said that no device manager was " -"found. Cannot continue. Exiting!" -msgstr "" - -#: neutron/plugins/cisco/cfg_agent/cfg_agent.py:292 -#, python-format -msgid "[Agent registration] %d unsuccessful registration attempts. Exiting!" -msgstr "" - -#: neutron/plugins/cisco/cfg_agent/cfg_agent.py:331 -msgid "Failed sending agent report!" -msgstr "" - -#: neutron/plugins/cisco/cfg_agent/cfg_exceptions.py:26 -msgid "" -"Critical device parameter missing. Failed initializing CSR1kv routing " -"driver." -msgstr "" - -#: neutron/plugins/cisco/cfg_agent/cfg_exceptions.py:32 -#, python-format -msgid "" -"Failed connecting to CSR1kv. Reason: %(reason)s. Connection params are " -"User:%(user)s, Host:%(host)s, Port:%(port)s, Device timeout:%(timeout)s." -msgstr "" - -#: neutron/plugins/cisco/cfg_agent/cfg_exceptions.py:39 -#, python-format -msgid "Error executing snippet:%(snippet)s. ErrorType:%(type)s ErrorTag:%(tag)s." -msgstr "" - -#: neutron/plugins/cisco/cfg_agent/cfg_exceptions.py:45 -#, python-format -msgid "" -"Data in attribute: %(attribute)s does not correspond to expected value. " -"Value received is %(value)s. " -msgstr "" - -#: neutron/plugins/cisco/cfg_agent/cfg_exceptions.py:50 -#, python-format -msgid "Driver %(driver)s does not exist." -msgstr "" - -#: neutron/plugins/cisco/cfg_agent/cfg_exceptions.py:54 -#, python-format -msgid "Driver not found for resource id:%(id)s." -msgstr "" - -#: neutron/plugins/cisco/cfg_agent/cfg_exceptions.py:58 -#, python-format -msgid "Driver cannot be set for missing parameter:%(p)s." -msgstr "" - -#: neutron/plugins/cisco/cfg_agent/device_status.py:28 -msgid "Time in seconds for connecting to a hosting device" -msgstr "" - -#: neutron/plugins/cisco/cfg_agent/device_status.py:30 -msgid "" -"The time in seconds until a backlogged hosting device is presumed dead. " -"This value should be set up high enough to recover from a period of " -"connectivity loss or high load when the device may not be responding." -msgstr "" - -#: neutron/plugins/cisco/cfg_agent/device_status.py:57 -#, python-format -msgid "Cannot ping ip address: %s" -msgstr "" - -#: neutron/plugins/cisco/cfg_agent/device_status.py:141 -#, python-format -msgid "" -"Hosting device: %(hd_id)s @ %(ip)s hasn't passed minimum boot time. " -"Skipping it. " -msgstr "" - -#: neutron/plugins/cisco/cfg_agent/device_status.py:145 -#, python-format -msgid "Checking hosting device: %(hd_id)s @ %(ip)s for reachability." -msgstr "" - -#: neutron/plugins/cisco/cfg_agent/device_status.py:152 -#, python-format -msgid "Hosting device: %(hd_id)s @ %(ip)s is now reachable. Adding it to response" -msgstr "" - -#: neutron/plugins/cisco/cfg_agent/device_status.py:156 -#, python-format -msgid "Hosting device: %(hd_id)s @ %(ip)s still not reachable " -msgstr "" - -#: neutron/plugins/cisco/cfg_agent/device_drivers/driver_mgr.py:79 -#, python-format -msgid "" -"Error loading cfg agent driver %(driver)s for hosting device template " -"%(t_name)s(%(t_id)s)" -msgstr "" - -#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:62 -#, python-format -msgid "Missing device parameter:%s. Aborting CSR1kvRoutingDriver initialization" -msgstr "" - -#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:228 -#, python-format -msgid "Unknown route command %s" -msgstr "" - -#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:320 -#, python-format -msgid "Interfaces:%s" -msgstr "" - -#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:335 -#, python-format -msgid "IP Address:%s" -msgstr "" - -#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:337 -#, python-format -msgid "Cannot find interface: %s" -msgstr "" - -#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:372 -#, python-format -msgid "Enabled interface %s " -msgstr "" - -#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:391 -#, python-format -msgid "VRFs:%s" -msgstr "" - -#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:436 -#, python-format -msgid "Mismatch in ACL configuration for %s" -msgstr "" - -#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:465 -#, python-format -msgid "VRF %s successfully created" -msgstr "" - -#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:467 -#, python-format -msgid "Failed creating VRF %s" -msgstr "" - -#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:475 -#, python-format -msgid "VRF %s removed" -msgstr "" - -#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:477 -#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:481 -#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:494 -#, python-format -msgid "VRF %s not present" -msgstr "" - -#: neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py:679 -#, python-format -msgid "%s successfully executed" -msgstr "" - -#: neutron/plugins/cisco/cfg_agent/service_helpers/routing_svc_helper.py:227 -msgid "Failed processing routers" -msgstr "" - -#: neutron/plugins/cisco/cfg_agent/service_helpers/routing_svc_helper.py:288 -msgid "RPC Error in fetching routers from plugin" -msgstr "" - -#: neutron/plugins/cisco/cfg_agent/service_helpers/routing_svc_helper.py:375 -#, python-format -msgid "Router: %(id)s is on an unreachable hosting device. " -msgstr "" - -#: neutron/plugins/cisco/cfg_agent/service_helpers/routing_svc_helper.py:384 -#, python-format -msgid "Key Error, missing key: %s" -msgstr "" - -#: neutron/plugins/cisco/cfg_agent/service_helpers/routing_svc_helper.py:388 -#, python-format -msgid "Driver Exception on router:%(id)s. Error is %(e)s" -msgstr "" - -#: neutron/plugins/cisco/cfg_agent/service_helpers/routing_svc_helper.py:399 -#, python-format -msgid "Exception in processing routers on device:%s" -msgstr "" - -#: neutron/plugins/cisco/cfg_agent/service_helpers/routing_svc_helper.py:542 -#, python-format -msgid "Info for router %s was not found. Skipping router removal" -msgstr "" - -#: neutron/plugins/cisco/cfg_agent/service_helpers/routing_svc_helper.py:557 -#, python-format -msgid "" -"Router remove for router_id: %s was incomplete. Adding the router to " -"removed_routers list" -msgstr "" - -#: neutron/plugins/cisco/common/cisco_exceptions.py:22 -#, python-format -msgid "Segmentation ID for network %(net_id)s is not found." -msgstr "" - -#: neutron/plugins/cisco/common/cisco_exceptions.py:27 -msgid "" -"Unable to complete operation. No more dynamic NICs are available in the " -"system." -msgstr "" - -#: neutron/plugins/cisco/common/cisco_exceptions.py:33 -#, python-format -msgid "" -"NetworkVlanBinding for %(vlan_id)s and network %(network_id)s already " -"exists." -msgstr "" - -#: neutron/plugins/cisco/common/cisco_exceptions.py:39 -#, python-format -msgid "Vlan ID %(vlan_id)s not found." -msgstr "" - -#: neutron/plugins/cisco/common/cisco_exceptions.py:44 -msgid "" -"Unable to complete operation. VLAN ID exists outside of the configured " -"network segment range." -msgstr "" - -#: neutron/plugins/cisco/common/cisco_exceptions.py:50 -msgid "No Vlan ID available." -msgstr "" - -#: neutron/plugins/cisco/common/cisco_exceptions.py:55 -#, python-format -msgid "QoS level %(qos_id)s could not be found for tenant %(tenant_id)s." -msgstr "" - -#: neutron/plugins/cisco/common/cisco_exceptions.py:61 -#, python-format -msgid "QoS level with name %(qos_name)s already exists for tenant %(tenant_id)s." -msgstr "" - -#: neutron/plugins/cisco/common/cisco_exceptions.py:67 -#: neutron/plugins/ml2/drivers/cisco/nexus/exceptions.py:23 -#, python-format -msgid "Credential %(credential_id)s could not be found." -msgstr "" - -#: neutron/plugins/cisco/common/cisco_exceptions.py:72 -#: neutron/plugins/ml2/drivers/cisco/nexus/exceptions.py:28 -#, python-format -msgid "Credential %(credential_name)s could not be found." -msgstr "" - -#: neutron/plugins/cisco/common/cisco_exceptions.py:77 -#, python-format -msgid "Credential %(credential_name)s already exists." -msgstr "" - -#: neutron/plugins/cisco/common/cisco_exceptions.py:82 -#, python-format -msgid "Provider network %s already exists" -msgstr "" - -#: neutron/plugins/cisco/common/cisco_exceptions.py:87 -#: neutron/plugins/ml2/drivers/cisco/nexus/exceptions.py:39 -#, python-format -msgid "Connection to %(host)s is not configured." -msgstr "" - -#: neutron/plugins/cisco/common/cisco_exceptions.py:92 -#: neutron/plugins/ml2/drivers/cisco/nexus/exceptions.py:44 -#, python-format -msgid "Unable to connect to Nexus %(nexus_host)s. Reason: %(exc)s." -msgstr "" - -#: neutron/plugins/cisco/common/cisco_exceptions.py:97 -#: neutron/plugins/ml2/drivers/cisco/nexus/exceptions.py:49 -#, python-format -msgid "Failed to configure Nexus: %(config)s. Reason: %(exc)s." -msgstr "" - -#: neutron/plugins/cisco/common/cisco_exceptions.py:102 -#, python-format -msgid "Nexus Port Binding (%(filters)s) is not present." -msgstr "" - -#: neutron/plugins/cisco/common/cisco_exceptions.py:111 -#: neutron/plugins/ml2/drivers/cisco/nexus/exceptions.py:69 -msgid "No usable Nexus switch found to create SVI interface." -msgstr "" - -#: neutron/plugins/cisco/common/cisco_exceptions.py:116 -#, python-format -msgid "PortVnic Binding %(port_id)s already exists." -msgstr "" - -#: neutron/plugins/cisco/common/cisco_exceptions.py:121 -#, python-format -msgid "PortVnic Binding %(port_id)s is not present." -msgstr "" - -#: neutron/plugins/cisco/common/cisco_exceptions.py:126 -#: neutron/plugins/ml2/drivers/cisco/nexus/exceptions.py:74 -msgid "No subnet_id specified for router gateway." -msgstr "" - -#: neutron/plugins/cisco/common/cisco_exceptions.py:131 -#: neutron/plugins/ml2/drivers/cisco/nexus/exceptions.py:79 -#, python-format -msgid "Subnet %(subnet_id)s has an interface on %(router_id)s." -msgstr "" - -#: neutron/plugins/cisco/common/cisco_exceptions.py:136 -#: neutron/plugins/ml2/drivers/cisco/nexus/exceptions.py:84 -msgid "Nexus hardware router gateway only uses Subnet Ids." -msgstr "" - -#: neutron/plugins/cisco/common/cisco_exceptions.py:140 -#, python-format -msgid "" -"Unable to unplug the attachment %(att_id)s from port %(port_id)s for " -"network %(net_id)s. The attachment %(att_id)s does not exist." -msgstr "" - -#: neutron/plugins/cisco/common/cisco_exceptions.py:147 -#, python-format -msgid "Policy Profile %(profile_id)s already exists." -msgstr "" - -#: neutron/plugins/cisco/common/cisco_exceptions.py:153 -#, python-format -msgid "Policy Profile %(profile_id)s could not be found." -msgstr "" - -#: neutron/plugins/cisco/common/cisco_exceptions.py:158 -#, python-format -msgid "Network Profile %(profile_id)s already exists." -msgstr "" - -#: neutron/plugins/cisco/common/cisco_exceptions.py:164 -#, python-format -msgid "Network Profile %(profile)s could not be found." -msgstr "" - -#: neutron/plugins/cisco/common/cisco_exceptions.py:169 -#, python-format -msgid "" -"One or more network segments belonging to network profile %(profile)s is " -"in use." -msgstr "" - -#: neutron/plugins/cisco/common/cisco_exceptions.py:175 -#, python-format -msgid "" -"No more segments available in network segment pool " -"%(network_profile_name)s." -msgstr "" - -#: neutron/plugins/cisco/common/cisco_exceptions.py:181 -#, python-format -msgid "VM Network %(name)s could not be found." -msgstr "" - -#: neutron/plugins/cisco/common/cisco_exceptions.py:186 -#, python-format -msgid "Unable to create the network. The VXLAN ID %(vxlan_id)s is in use." -msgstr "" - -#: neutron/plugins/cisco/common/cisco_exceptions.py:192 -#, python-format -msgid "Vxlan ID %(vxlan_id)s not found." -msgstr "" - -#: neutron/plugins/cisco/common/cisco_exceptions.py:197 -msgid "" -"Unable to complete operation. VXLAN ID exists outside of the configured " -"network segment range." -msgstr "" - -#: neutron/plugins/cisco/common/cisco_exceptions.py:203 -#, python-format -msgid "Connection to VSM failed: %(reason)s." -msgstr "" - -#: neutron/plugins/cisco/common/cisco_exceptions.py:208 -#, python-format -msgid "Internal VSM Error: %(reason)s." -msgstr "" - -#: neutron/plugins/cisco/common/cisco_exceptions.py:213 -#, python-format -msgid "Network Binding for network %(network_id)s could not be found." -msgstr "" - -#: neutron/plugins/cisco/common/cisco_exceptions.py:219 -#, python-format -msgid "Port Binding for port %(port_id)s could not be found." -msgstr "" - -#: neutron/plugins/cisco/common/cisco_exceptions.py:225 -#, python-format -msgid "Profile-Tenant binding for profile %(profile_id)s could not be found." -msgstr "" - -#: neutron/plugins/cisco/common/cisco_exceptions.py:231 -msgid "No service cluster found to perform multi-segment bridging." -msgstr "" - -#: neutron/plugins/cisco/common/cisco_faults.py:70 -msgid "Port not Found" -msgstr "" - -#: neutron/plugins/cisco/common/cisco_faults.py:71 -msgid "Unable to find a port with the specified identifier." -msgstr "" - -#: neutron/plugins/cisco/common/cisco_faults.py:85 -msgid "Credential Not Found" -msgstr "" - -#: neutron/plugins/cisco/common/cisco_faults.py:86 -msgid "Unable to find a Credential with the specified identifier." -msgstr "" - -#: neutron/plugins/cisco/common/cisco_faults.py:101 -msgid "QoS Not Found" -msgstr "" - -#: neutron/plugins/cisco/common/cisco_faults.py:102 -msgid "Unable to find a QoS with the specified identifier." -msgstr "" - -#: neutron/plugins/cisco/common/cisco_faults.py:117 -msgid "Nova tenant Not Found" -msgstr "" - -#: neutron/plugins/cisco/common/cisco_faults.py:118 -msgid "Unable to find a Novatenant with the specified identifier." -msgstr "" - -#: neutron/plugins/cisco/common/cisco_faults.py:133 -msgid "Requested State Invalid" -msgstr "" - -#: neutron/plugins/cisco/common/cisco_faults.py:134 -msgid "Unable to update port state with specified value." -msgstr "" - -#: neutron/plugins/cisco/common/config.py:22 -#: neutron/plugins/ml2/drivers/cisco/nexus/config.py:21 -msgid "VLAN Name prefix" -msgstr "" - -#: neutron/plugins/cisco/common/config.py:24 -msgid "VLAN Name prefix for provider vlans" -msgstr "" - -#: neutron/plugins/cisco/common/config.py:26 -msgid "Provider VLANs are automatically created as needed on the Nexus switch" -msgstr "" - -#: neutron/plugins/cisco/common/config.py:29 -msgid "" -"Provider VLANs are automatically trunked as needed on the ports of the " -"Nexus switch" -msgstr "" - -#: neutron/plugins/cisco/common/config.py:32 -msgid "Enable L3 support on the Nexus switches" -msgstr "" - -#: neutron/plugins/cisco/common/config.py:34 -#: neutron/plugins/ml2/drivers/cisco/nexus/config.py:23 -msgid "Distribute SVI interfaces over all switches" -msgstr "" - -#: neutron/plugins/cisco/common/config.py:38 -msgid "Model Class" -msgstr "" - -#: neutron/plugins/cisco/common/config.py:43 -msgid "N1K Integration Bridge" -msgstr "" - -#: neutron/plugins/cisco/common/config.py:45 -msgid "N1K Enable Tunneling" -msgstr "" - -#: neutron/plugins/cisco/common/config.py:47 -msgid "N1K Tunnel Bridge" -msgstr "" - -#: neutron/plugins/cisco/common/config.py:49 -msgid "N1K Local IP" -msgstr "" - -#: neutron/plugins/cisco/common/config.py:51 -msgid "N1K Tenant Network Type" -msgstr "" - -#: neutron/plugins/cisco/common/config.py:53 -msgid "N1K Bridge Mappings" -msgstr "" - -#: neutron/plugins/cisco/common/config.py:55 -msgid "N1K VXLAN ID Ranges" -msgstr "" - -#: neutron/plugins/cisco/common/config.py:57 -msgid "N1K Network VLAN Ranges" -msgstr "" - -#: neutron/plugins/cisco/common/config.py:59 -msgid "N1K default network profile" -msgstr "" - -#: neutron/plugins/cisco/common/config.py:61 -msgid "N1K default policy profile" -msgstr "" - -#: neutron/plugins/cisco/common/config.py:63 -msgid "N1K policy profile for network node" -msgstr "" - -#: neutron/plugins/cisco/common/config.py:65 -msgid "N1K Policy profile polling duration in seconds" -msgstr "" - -#: neutron/plugins/cisco/common/config.py:67 -msgid "Restrict the visibility of policy profiles to the tenants" -msgstr "" - -#: neutron/plugins/cisco/common/config.py:70 -msgid "Number of threads to use to make HTTP requests" -msgstr "" - -#: neutron/plugins/cisco/common/config.py:72 -msgid "N1K http timeout duration in seconds" -msgstr "" - -#: neutron/plugins/cisco/common/config.py:123 -#: neutron/plugins/ml2/drivers/cisco/nexus/config.py:58 -msgid "Some config files were not parsed properly" -msgstr "" - -#: neutron/plugins/cisco/db/n1kv_db_v2.py:325 -#, python-format -msgid "seg_min %(seg_min)s, seg_max %(seg_max)s" -msgstr "" - -#: neutron/plugins/cisco/db/n1kv_db_v2.py:556 -#, python-format -msgid "Reserving specific vlan %(vlan)s on physical network %(network)s from pool" -msgstr "" - -#: neutron/plugins/cisco/db/n1kv_db_v2.py:581 -#, python-format -msgid "vlan_id %(vlan)s on physical network %(network)s not found" -msgstr "" - -#: neutron/plugins/cisco/db/n1kv_db_v2.py:595 -#, python-format -msgid "Unreasonable vxlan ID range %(vxlan_min)s - %(vxlan_max)s" -msgstr "" - -#: neutron/plugins/cisco/db/n1kv_db_v2.py:637 -#, python-format -msgid "Reserving specific vxlan %s from pool" -msgstr "" - -#: neutron/plugins/cisco/db/n1kv_db_v2.py:658 -#, python-format -msgid "vxlan_id %s not found" -msgstr "" - -#: neutron/plugins/cisco/db/n1kv_db_v2.py:767 -msgid "create_network_profile()" -msgstr "" - -#: neutron/plugins/cisco/db/n1kv_db_v2.py:789 -msgid "delete_network_profile()" -msgstr "" - -#: neutron/plugins/cisco/db/n1kv_db_v2.py:803 -msgid "update_network_profile()" -msgstr "" - -#: neutron/plugins/cisco/db/n1kv_db_v2.py:812 -msgid "get_network_profile()" -msgstr "" - -#: neutron/plugins/cisco/db/n1kv_db_v2.py:837 -msgid "create_policy_profile()" -msgstr "" - -#: neutron/plugins/cisco/db/n1kv_db_v2.py:848 -msgid "delete_policy_profile()" -msgstr "" - -#: neutron/plugins/cisco/db/n1kv_db_v2.py:857 -msgid "update_policy_profile()" -msgstr "" - -#: neutron/plugins/cisco/db/n1kv_db_v2.py:866 -msgid "get_policy_profile()" -msgstr "" - -#: neutron/plugins/cisco/db/n1kv_db_v2.py:885 -#: neutron/plugins/cisco/db/n1kv_db_v2.py:939 -msgid "Invalid profile type" -msgstr "" - -#: neutron/plugins/cisco/db/n1kv_db_v2.py:903 -msgid "_profile_binding_exists()" -msgstr "" - -#: neutron/plugins/cisco/db/n1kv_db_v2.py:912 -msgid "get_profile_binding()" -msgstr "" - -#: neutron/plugins/cisco/db/n1kv_db_v2.py:922 -msgid "delete_profile_binding()" -msgstr "" - -#: neutron/plugins/cisco/db/n1kv_db_v2.py:929 -#, python-format -msgid "" -"Profile-Tenant binding missing for profile ID %(profile_id)s and tenant " -"ID %(tenant_id)s" -msgstr "" - -#: neutron/plugins/cisco/db/n1kv_db_v2.py:960 -msgid "_get_profile_bindings()" -msgstr "" - -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1116 -msgid "segment_range not required for TRUNK" -msgstr "" - -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1122 -msgid "multicast_ip_range not required" -msgstr "" - -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1249 -msgid "Invalid segment range. example range: 500-550" -msgstr "" - -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1262 -msgid "Invalid multicast ip address range. example range: 224.1.1.1-224.1.1.10" -msgstr "" - -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1269 -#, python-format -msgid "%s is not a valid multicast ip address" -msgstr "" - -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1273 -#, python-format -msgid "%s is reserved multicast ip address" -msgstr "" - -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1277 -#, python-format -msgid "%s is not a valid ip address" -msgstr "" - -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1281 -#, python-format -msgid "" -"Invalid multicast IP range '%(min_ip)s-%(max_ip)s': Range should be from " -"low address to high address" -msgstr "" - -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1294 -msgid "Arguments segment_type missing for network profile" -msgstr "" - -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1303 -msgid "segment_type should either be vlan, overlay, multi-segment or trunk" -msgstr "" - -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1309 -msgid "Argument physical_network missing for network profile" -msgstr "" - -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1315 -msgid "segment_range not required for trunk" -msgstr "" - -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1321 -msgid "Argument sub_type missing for network profile" -msgstr "" - -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1328 -msgid "Argument segment_range missing for network profile" -msgstr "" - -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1339 -msgid "Argument multicast_ip_range missing for VXLAN multicast network profile" -msgstr "" - -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1367 -#, python-format -msgid "Segment range is invalid, select from %(min)s-%(nmin)s, %(nmax)s-%(max)s" -msgstr "" - -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1385 -#, python-format -msgid "segment range is invalid. Valid range is : %(min)s-%(max)s" -msgstr "" - -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1399 -#, python-format -msgid "NetworkProfile name %s already exists" -msgstr "" - -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1416 -msgid "Segment range overlaps with another profile" -msgstr "" - -#: neutron/plugins/cisco/db/network_db_v2.py:38 -msgid "get_qos() called" -msgstr "" - -#: neutron/plugins/cisco/db/network_db_v2.py:51 -msgid "add_qos() called" -msgstr "" - -#: neutron/plugins/cisco/db/l3/device_handling_db.py:42 -msgid "Name of the L3 admin tenant." -msgstr "" - -#: neutron/plugins/cisco/db/l3/device_handling_db.py:44 -msgid "" -"Name of management network for device configuration. Default value is " -"osn_mgmt_nw" -msgstr "" - -#: neutron/plugins/cisco/db/l3/device_handling_db.py:47 -msgid "" -"Default security group applied on management port. Default value is " -"mgmt_sec_grp." -msgstr "" - -#: neutron/plugins/cisco/db/l3/device_handling_db.py:50 -msgid "Seconds of no status update until a cfg agent is considered down." -msgstr "" - -#: neutron/plugins/cisco/db/l3/device_handling_db.py:53 -msgid "Ensure that Nova is running before attempting to create any VM." -msgstr "" - -#: neutron/plugins/cisco/db/l3/device_handling_db.py:59 -msgid "Name of Glance image for CSR1kv." -msgstr "" - -#: neutron/plugins/cisco/db/l3/device_handling_db.py:61 -msgid "UUID of Nova flavor for CSR1kv." -msgstr "" - -#: neutron/plugins/cisco/db/l3/device_handling_db.py:65 -msgid "Plugging driver for CSR1kv." -msgstr "" - -#: neutron/plugins/cisco/db/l3/device_handling_db.py:69 -msgid "Hosting device driver for CSR1kv." -msgstr "" - -#: neutron/plugins/cisco/db/l3/device_handling_db.py:73 -msgid "Config agent driver for CSR1kv." -msgstr "" - -#: neutron/plugins/cisco/db/l3/device_handling_db.py:75 -msgid "Booting time in seconds before a CSR1kv becomes operational." -msgstr "" - -#: neutron/plugins/cisco/db/l3/device_handling_db.py:78 -msgid "Username to use for CSR1kv configurations." -msgstr "" - -#: neutron/plugins/cisco/db/l3/device_handling_db.py:80 -msgid "Password to use for CSR1kv configurations." -msgstr "" - -#: neutron/plugins/cisco/db/l3/device_handling_db.py:122 -#, python-format -msgid "No tenant with a name or ID of %s exists." -msgstr "" - -#: neutron/plugins/cisco/db/l3/device_handling_db.py:125 -#, python-format -msgid "Multiple tenants matches found for %s" -msgstr "" - -#: neutron/plugins/cisco/db/l3/device_handling_db.py:144 -msgid "The virtual management network has no subnet. Please assign one." -msgstr "" - -#: neutron/plugins/cisco/db/l3/device_handling_db.py:148 -#, python-format -msgid "The virtual management network has %d subnets. The first one will be used." -msgstr "" - -#: neutron/plugins/cisco/db/l3/device_handling_db.py:154 -msgid "" -"The virtual management network does not have unique name. Please ensure " -"that it is." -msgstr "" - -#: neutron/plugins/cisco/db/l3/device_handling_db.py:158 -msgid "There is no virtual management network. Please create one." -msgstr "" - -#: neutron/plugins/cisco/db/l3/device_handling_db.py:180 -msgid "" -"The security group for the virtual management network does not have " -"unique name. Please ensure that it is." -msgstr "" - -#: neutron/plugins/cisco/db/l3/device_handling_db.py:185 -msgid "" -"There is no security group for the virtual management network. Please " -"create one." -msgstr "" - -#: neutron/plugins/cisco/db/l3/device_handling_db.py:199 -msgid "Error loading hosting device driver" -msgstr "" - -#: neutron/plugins/cisco/db/l3/device_handling_db.py:212 -msgid "Error loading plugging driver" -msgstr "" - -#: neutron/plugins/cisco/db/l3/device_handling_db.py:328 -#, python-format -msgid "Cisco cfg agent %s is not alive" -msgstr "" - -#: neutron/plugins/cisco/db/l3/device_handling_db.py:365 -msgid "" -"Not all Nova services are up and running. Skipping this CSR1kv vm create " -"request." -msgstr "" - -#: neutron/plugins/cisco/db/l3/device_handling_db.py:402 -msgid "Created a CSR1kv hosting device VM" -msgstr "" - -#: neutron/plugins/cisco/db/l3/device_handling_db.py:420 -#, python-format -msgid "Failed to delete hosting device %s service VM. Will un-register it anyway." -msgstr "" - -#: neutron/plugins/cisco/db/l3/device_handling_db.py:461 -msgid "There are no active Cisco cfg agents" -msgstr "" - -#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:43 -msgid "" -"Time in seconds between renewed scheduling attempts of non-scheduled " -"routers." -msgstr "" - -#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:51 -msgid "Router could not be created due to internal error." -msgstr "" - -#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:55 -msgid "Internal error during router processing." -msgstr "" - -#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:59 -#, python-format -msgid "Could not get binding information for router %(router_id)s." -msgstr "" - -#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:314 -#, python-format -msgid "Attempting to schedule router %s." -msgstr "" - -#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:326 -#, python-format -msgid "Successfully scheduled router %(r_id)s to hosting device %(d_id)s" -msgstr "" - -#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:333 -#, python-format -msgid "Un-schedule router %s." -msgstr "" - -#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:346 -#, python-format -msgid "Backlogging router %s for renewed scheduling attempt later" -msgstr "" - -#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:353 -#, python-format -msgid "Router %s removed from backlog" -msgstr "" - -#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:363 -msgid "Processing router (scheduling) backlog" -msgstr "" - -#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:383 -msgid "Synchronizing router (scheduling) backlog" -msgstr "" - -#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:406 -#, python-format -msgid "DB inconsistency: No type and hosting info associated with router %s" -msgstr "" - -#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:411 -#, python-format -msgid "DB inconsistency: Multiple type and hosting info associated with router %s" -msgstr "" - -#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:434 -#, python-format -msgid "DB inconsistency: No hosting info associated with router %s" -msgstr "" - -#: neutron/plugins/cisco/db/l3/l3_router_appliance_db.py:511 -#, python-format -msgid "Failed to allocate hosting port for port %s" -msgstr "" - -#: neutron/plugins/cisco/l3/service_vm_lib.py:30 -msgid "Path to templates for hosting devices." -msgstr "" - -#: neutron/plugins/cisco/l3/service_vm_lib.py:33 -msgid "Path to config drive files for service VM instances." -msgstr "" - -#: neutron/plugins/cisco/l3/service_vm_lib.py:67 -#, python-format -msgid "Failure determining running Nova services: %s" -msgstr "" - -#: neutron/plugins/cisco/l3/service_vm_lib.py:84 -#, python-format -msgid "Failed to get status of service VM instance %(id)s, due to %(err)s" -msgstr "" - -#: neutron/plugins/cisco/l3/service_vm_lib.py:100 -#, python-format -msgid "Failure finding needed Nova resource: %s" -msgstr "" - -#: neutron/plugins/cisco/l3/service_vm_lib.py:122 -#, python-format -msgid "Failed to create service VM instance: %s" -msgstr "" - -#: neutron/plugins/cisco/l3/service_vm_lib.py:138 -#, python-format -msgid "Failed to delete service VM instance %(id)s, due to %(err)s" -msgstr "" - -#: neutron/plugins/cisco/l3/hosting_device_drivers/csr1kv_hd_driver.py:32 -msgid "CSR1kv configdrive template file." -msgstr "" - -#: neutron/plugins/cisco/l3/hosting_device_drivers/csr1kv_hd_driver.py:66 -#, python-format -msgid "Failed to create config file: %s. Trying toclean up." -msgstr "" - -#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:40 -msgid "Name of N1kv port profile for management ports." -msgstr "" - -#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:42 -msgid "" -"Name of N1kv port profile for T1 ports (i.e., ports carrying traffic from" -" VXLAN segmented networks)." -msgstr "" - -#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:45 -msgid "" -"Name of N1kv port profile for T2 ports (i.e., ports carrying traffic from" -" VLAN segmented networks)." -msgstr "" - -#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:48 -msgid "" -"Name of N1kv network profile for T1 networks (i.e., trunk networks for " -"VXLAN segmented traffic)." -msgstr "" - -#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:51 -msgid "" -"Name of N1kv network profile for T2 networks (i.e., trunk networks for " -"VLAN segmented traffic)." -msgstr "" - -#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:107 -#, python-format -msgid "" -"The %(resource)s %(name)s does not have unique name. Please refer to " -"admin guide and create one." -msgstr "" - -#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:112 -#, python-format -msgid "" -"There is no %(resource)s %(name)s. Please refer to admin guide and create" -" one." -msgstr "" - -#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:212 -#, python-format -msgid "Error %s when creating service VM resources. Cleaning up." -msgstr "" - -#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:283 -#, python-format -msgid "Aborting resource deletion after %d unsuccessful attempts" -msgstr "" - -#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:289 -#, python-format -msgid "Resource deletion attempt %d starting" -msgstr "" - -#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:308 -msgid "Resource deletion succeeded" -msgstr "" - -#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:319 -#, python-format -msgid "Failed to delete %(resource_name) %(net_id)s for service vm due to %(err)s" -msgstr "" - -#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:411 -#, python-format -msgid "Updating trunk: %(action)s VLAN %(tag)d for network_id %(id)s" -msgstr "" - -#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:451 -#, python-format -msgid "Hosting port DB inconsistency for hosting device %s" -msgstr "" - -#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:458 -#, python-format -msgid "" -"Attempt %(attempt)d to find trunk ports for hosting device %(hd_id)s " -"failed. Trying again in %(time)d seconds." -msgstr "" - -#: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:504 -#, python-format -msgid "Port trunk pair DB inconsistency for port %s" -msgstr "" - -#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:75 -#, python-format -msgid "%(module)s.%(name)s init done" -msgstr "" - -#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:116 -#, python-format -msgid "No %s Plugin loaded" -msgstr "" - -#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:117 -#, python-format -msgid "%(plugin_key)s: %(function_name)s with args %(args)s ignored" -msgstr "" - -#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:141 -msgid "create_network() called" -msgstr "" - -#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:154 -#, python-format -msgid "Provider network added to DB: %(network_id)s, %(vlan_id)s" -msgstr "" - -#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:165 -msgid "update_network() called" -msgstr "" - -#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:189 -#, python-format -msgid "Provider network removed from DB: %s" -msgstr "" - -#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:231 -msgid "create_port() called" -msgstr "" - -#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:257 -msgid "update_port() called" -msgstr "" - -#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:269 -msgid "delete_port() called" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_client.py:223 -msgid "Logical network" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_client.py:248 -msgid "network_segment_pool" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_client.py:295 -msgid "Invalid input for CIDR" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_client.py:437 -#, python-format -msgid "req: %s" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_client.py:447 -#, python-format -msgid "status_code %s" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_client.py:455 -#, python-format -msgid "VSM: %s" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:124 -msgid "_setup_vsm" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:143 -msgid "_populate_policy_profiles" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:170 -msgid "No policy profile populated from VSM" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:207 -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:340 -#: neutron/plugins/mlnx/mlnx_plugin.py:223 neutron/plugins/nuage/plugin.py:419 -#: neutron/plugins/openvswitch/ovs_neutron_plugin.py:414 -msgid "provider:network_type required" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:211 -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:225 -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:350 -#: neutron/plugins/mlnx/mlnx_plugin.py:253 neutron/plugins/nuage/plugin.py:429 -#: neutron/plugins/openvswitch/ovs_neutron_plugin.py:424 -#: neutron/plugins/openvswitch/ovs_neutron_plugin.py:443 -msgid "provider:segmentation_id required" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:214 -msgid "provider:segmentation_id out of range (1 through 4094)" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:219 -msgid "provider:physical_network specified for Overlay network" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:228 -msgid "provider:segmentation_id out of range (5000+)" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:232 -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:372 -#: neutron/plugins/mlnx/mlnx_plugin.py:239 -#: neutron/plugins/openvswitch/ovs_neutron_plugin.py:459 -#, python-format -msgid "provider:network_type %s not supported" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:243 -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:378 -#: neutron/plugins/mlnx/mlnx_plugin.py:279 -#: neutron/plugins/openvswitch/ovs_neutron_plugin.py:465 -#, python-format -msgid "Unknown provider:physical_network %s" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:247 -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:384 -#: neutron/plugins/mlnx/mlnx_plugin.py:285 neutron/plugins/nuage/plugin.py:426 -#: neutron/plugins/openvswitch/ovs_neutron_plugin.py:471 -msgid "provider:physical_network required" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:425 -#, python-format -msgid "_populate_member_segments %s" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:464 -msgid "Invalid pairing supplied" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:469 -#, python-format -msgid "Invalid UUID supplied in %s" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:470 -msgid "Invalid UUID supplied" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:499 -#, python-format -msgid "Cannot add a trunk segment '%s' as a member of another trunk segment" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:504 -#, python-format -msgid "Cannot add vlan segment '%s' as a member of a vxlan trunk segment" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:510 -#, python-format -msgid "Network UUID '%s' belongs to a different physical network" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:515 -#, python-format -msgid "Cannot add vxlan segment '%s' as a member of a vlan trunk segment" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:520 -#, python-format -msgid "Vlan tag '%s' is out of range" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:523 -#, python-format -msgid "Vlan tag '%s' is not an integer value" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:528 -#, python-format -msgid "%s is not a valid uuid" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:575 -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:578 -msgid "n1kv:profile_id does not exist" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:590 -msgid "_send_create_logical_network" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:613 -#, python-format -msgid "_send_create_network_profile_request: %s" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:623 -#, python-format -msgid "_send_update_network_profile_request: %s" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:633 -#, python-format -msgid "_send_delete_network_profile_request: %s" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:648 -#, python-format -msgid "_send_create_network_request: %s" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:680 -#, python-format -msgid "_send_update_network_request: %s" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:702 -#, python-format -msgid "add_segments=%s" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:703 -#, python-format -msgid "del_segments=%s" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:727 -#, python-format -msgid "_send_delete_network_request: %s" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:767 -#, python-format -msgid "_send_create_subnet_request: %s" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:777 -#, python-format -msgid "_send_update_subnet_request: %s" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:788 -#, python-format -msgid "_send_delete_subnet_request: %s" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:814 -#, python-format -msgid "_send_create_port_request: %s" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:831 -#, python-format -msgid "_send_update_port_request: %s" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:847 -#, python-format -msgid "_send_delete_port_request: %s" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:878 -#, python-format -msgid "Create network: profile_id=%s" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:886 -#, python-format -msgid "" -"Physical_network %(phy_net)s, seg_type %(net_type)s, seg_id %(seg_id)s, " -"multicast_ip %(multicast_ip)s" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:898 -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:908 -#, python-format -msgid "Seg list %s " -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:949 -#: neutron/plugins/hyperv/hyperv_neutron_plugin.py:254 -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:196 -#: neutron/plugins/metaplugin/meta_neutron_plugin.py:226 -#: neutron/plugins/mlnx/mlnx_plugin.py:366 -#: neutron/plugins/openvswitch/ovs_neutron_plugin.py:519 -#, python-format -msgid "Created network: %s" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1007 -#, python-format -msgid "Updated network: %s" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1021 -#, python-format -msgid "Cannot delete network '%s', delete the associated subnet first" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1025 -#, python-format -msgid "Cannot delete network '%s' that is member of a trunk segment" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1029 -#, python-format -msgid "Cannot delete network '%s' that is a member of a multi-segment network" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1057 -#, python-format -msgid "Get network: %s" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1079 -msgid "Get networks" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1130 -#, python-format -msgid "Create port: profile_id=%s" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1177 -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:303 -#, python-format -msgid "Created port: %s" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1188 -#, python-format -msgid "Update port: %s" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1251 -#, python-format -msgid "Get port: %s" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1271 -msgid "Get ports" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1287 -msgid "Create subnet" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1297 -#, python-format -msgid "Created subnet: %s" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1312 -msgid "Update subnet" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1327 -#, python-format -msgid "Delete subnet: %s" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1342 -#, python-format -msgid "Get subnet: %s" -msgstr "" - -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1362 -msgid "Get subnets" -msgstr "" - -#: neutron/plugins/common/utils.py:33 -#, python-format -msgid "%(id)s is not a valid %(type)s identifier" -msgstr "" - -#: neutron/plugins/common/utils.py:38 -msgid "End of tunnel range is less than start of tunnel range" -msgstr "" - -#: neutron/plugins/common/utils.py:48 -#, python-format -msgid "%s is not a valid VLAN tag" -msgstr "" - -#: neutron/plugins/common/utils.py:52 -msgid "End of VLAN range is less than start of VLAN range" -msgstr "" - -#: neutron/plugins/embrane/base_plugin.py:105 -#: neutron/plugins/embrane/agent/dispatcher.py:130 -#: neutron/services/loadbalancer/drivers/embrane/poller.py:54 -#: neutron/services/loadbalancer/drivers/embrane/agent/dispatcher.py:106 -msgid "Unhandled exception occurred" -msgstr "" - -#: neutron/plugins/embrane/base_plugin.py:170 -#: neutron/plugins/embrane/base_plugin.py:189 -#, python-format -msgid "The following routers have not physical match: %s" -msgstr "" - -#: neutron/plugins/embrane/base_plugin.py:175 -#, python-format -msgid "Requested router: %s" -msgstr "" - -#: neutron/plugins/embrane/base_plugin.py:227 -#, python-format -msgid "Deleting router=%s" -msgstr "" - -#: neutron/plugins/embrane/agent/operations/router_operations.py:95 -#, python-format -msgid "The router %s had no physical representation,likely already deleted" -msgstr "" - -#: neutron/plugins/embrane/agent/operations/router_operations.py:124 -#, python-format -msgid "Interface %s not found in the heleos back-end,likely already deleted" -msgstr "" - -#: neutron/plugins/embrane/common/config.py:21 -#: neutron/services/loadbalancer/drivers/embrane/config.py:23 -msgid "ESM management root address" -msgstr "" - -#: neutron/plugins/embrane/common/config.py:23 -#: neutron/services/loadbalancer/drivers/embrane/config.py:25 -msgid "ESM admin username." -msgstr "" - -#: neutron/plugins/embrane/common/config.py:26 -#: neutron/services/loadbalancer/drivers/embrane/config.py:28 -msgid "ESM admin password." -msgstr "" - -#: neutron/plugins/embrane/common/config.py:28 -msgid "Router image id (Embrane FW/VPN)" -msgstr "" - -#: neutron/plugins/embrane/common/config.py:30 -msgid "In band Security Zone id" -msgstr "" - -#: neutron/plugins/embrane/common/config.py:32 -msgid "Out of band Security Zone id" -msgstr "" - -#: neutron/plugins/embrane/common/config.py:34 -msgid "Management Security Zone id" -msgstr "" - -#: neutron/plugins/embrane/common/config.py:36 -msgid "Dummy user traffic Security Zone id" -msgstr "" - -#: neutron/plugins/embrane/common/config.py:38 -#: neutron/services/loadbalancer/drivers/embrane/config.py:40 -msgid "Shared resource pool id" -msgstr "" - -#: neutron/plugins/embrane/common/config.py:40 -#: neutron/services/loadbalancer/drivers/embrane/config.py:47 -msgid "Define if the requests have run asynchronously or not" -msgstr "" - -#: neutron/plugins/embrane/common/constants.py:47 -#: neutron/services/loadbalancer/drivers/embrane/constants.py:48 -#, python-format -msgid "Dva is pending for the following reason: %s" -msgstr "" - -#: neutron/plugins/embrane/common/constants.py:48 -msgid "" -"Dva can't be found to execute the operation, probably was cancelled " -"through the heleos UI" -msgstr "" - -#: neutron/plugins/embrane/common/constants.py:50 -#: neutron/services/loadbalancer/drivers/embrane/constants.py:51 -#, python-format -msgid "Dva seems to be broken for reason %s" -msgstr "" - -#: neutron/plugins/embrane/common/constants.py:51 -#, python-format -msgid "Dva interface seems to be broken for reason %s" -msgstr "" - -#: neutron/plugins/embrane/common/constants.py:53 -#: neutron/services/loadbalancer/drivers/embrane/constants.py:52 -#, python-format -msgid "Dva creation failed reason %s" -msgstr "" - -#: neutron/plugins/embrane/common/constants.py:54 -#: neutron/services/loadbalancer/drivers/embrane/constants.py:53 -#, python-format -msgid "Dva creation is in pending state for reason %s" -msgstr "" - -#: neutron/plugins/embrane/common/constants.py:56 -#: neutron/services/loadbalancer/drivers/embrane/constants.py:55 -#, python-format -msgid "Dva configuration failed for reason %s" -msgstr "" - -#: neutron/plugins/embrane/common/constants.py:57 -#, python-format -msgid "" -"Failed to delete the backend router for reason %s. Please remove it " -"manually through the heleos UI" -msgstr "" - -#: neutron/plugins/embrane/common/exceptions.py:20 -#, python-format -msgid "An unexpected error occurred:%(err_msg)s" -msgstr "" - -#: neutron/plugins/embrane/common/exceptions.py:24 -#, python-format -msgid "%(err_msg)s" -msgstr "" - -#: neutron/plugins/embrane/common/utils.py:43 -msgid "No ip allocation set" -msgstr "" - -#: neutron/plugins/embrane/l2base/support_exceptions.py:20 -#, python-format -msgid "Cannot retrieve utif info for the following reason: %(err_msg)s" -msgstr "" - -#: neutron/plugins/embrane/l2base/ml2/ml2_support.py:43 -#, python-format -msgid "" -"Network type %s not supported. Please be sure that tenant_network_type is" -" vlan" -msgstr "" - -#: neutron/plugins/hyperv/db.py:37 -#: neutron/plugins/linuxbridge/db/l2network_db_v2.py:113 -#: neutron/plugins/openvswitch/ovs_db_v2.py:131 -#, python-format -msgid "" -"Reserving vlan %(vlan_id)s on physical network %(physical_network)s from " -"pool" -msgstr "" - -#: neutron/plugins/hyperv/db.py:52 -#, python-format -msgid "Reserving flat physical network %(physical_network)s from pool" -msgstr "" - -#: neutron/plugins/hyperv/db.py:75 -#: neutron/plugins/linuxbridge/db/l2network_db_v2.py:136 -#: neutron/plugins/openvswitch/ovs_db_v2.py:155 -#, python-format -msgid "" -"Reserving specific vlan %(vlan_id)s on physical network " -"%(physical_network)s from pool" -msgstr "" - -#: neutron/plugins/hyperv/db.py:132 -#, python-format -msgid "Releasing vlan %(vlan_id)s on physical network %(physical_network)s" -msgstr "" - -#: neutron/plugins/hyperv/db.py:137 -#: neutron/plugins/linuxbridge/db/l2network_db_v2.py:177 -#: neutron/plugins/openvswitch/ovs_db_v2.py:196 -#, python-format -msgid "vlan_id %(vlan_id)s on physical network %(physical_network)s not found" -msgstr "" - -#: neutron/plugins/hyperv/db.py:162 neutron/plugins/hyperv/db.py:175 -#: neutron/plugins/linuxbridge/db/l2network_db_v2.py:64 -#: neutron/plugins/linuxbridge/db/l2network_db_v2.py:83 -#: neutron/plugins/ml2/drivers/type_vlan.py:130 -#: neutron/plugins/ml2/drivers/type_vlan.py:151 -#: neutron/plugins/openvswitch/ovs_db_v2.py:87 -#: neutron/plugins/openvswitch/ovs_db_v2.py:105 -#, python-format -msgid "" -"Removing vlan %(vlan_id)s on physical network %(physical_network)s from " -"pool" -msgstr "" - -#: neutron/plugins/hyperv/hyperv_neutron_plugin.py:45 -msgid "Network type for tenant networks (local, flat, vlan or none)" -msgstr "" - -#: neutron/plugins/hyperv/hyperv_neutron_plugin.py:49 -#: neutron/plugins/linuxbridge/common/config.py:30 -#: neutron/plugins/mlnx/common/config.py:30 -msgid "List of :: or " -msgstr "" - -#: neutron/plugins/hyperv/hyperv_neutron_plugin.py:77 -#: neutron/plugins/hyperv/hyperv_neutron_plugin.py:99 -#, python-format -msgid "segmentation_id specified for %s network" -msgstr "" - -#: neutron/plugins/hyperv/hyperv_neutron_plugin.py:84 -#, python-format -msgid "physical_network specified for %s network" -msgstr "" - -#: neutron/plugins/hyperv/hyperv_neutron_plugin.py:126 -msgid "physical_network not provided" -msgstr "" - -#: neutron/plugins/hyperv/hyperv_neutron_plugin.py:178 -#, python-format -msgid "Invalid tenant_network_type: %s. Agent terminated!" -msgstr "" - -#: neutron/plugins/hyperv/hyperv_neutron_plugin.py:203 -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:301 -#: neutron/plugins/ml2/drivers/type_vlan.py:96 -#: neutron/plugins/mlnx/mlnx_plugin.py:184 -#: neutron/plugins/openvswitch/ovs_neutron_plugin.py:366 -#, python-format -msgid "Network VLAN ranges: %s" -msgstr "" - -#: neutron/plugins/hyperv/hyperv_neutron_plugin.py:228 -#, python-format -msgid "Network type %s not supported" -msgstr "" - -#: neutron/plugins/hyperv/rpc_callbacks.py:75 -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:112 -#: neutron/plugins/mlnx/rpc_callbacks.py:77 -#: neutron/plugins/openvswitch/ovs_neutron_plugin.py:117 -#, python-format -msgid "Device %(device)s no longer exists on %(agent_id)s" -msgstr "" - -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:48 -msgid "" -"List of : where the physical networks can be " -"expressed with wildcards, e.g.: .\"*:external\"" -msgstr "" - -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:54 -msgid "Private vswitch name used for local networks" -msgstr "" - -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:56 -#: neutron/plugins/linuxbridge/common/config.py:61 -#: neutron/plugins/mlnx/common/config.py:67 -#: neutron/plugins/nec/common/config.py:28 -#: neutron/plugins/oneconvergence/lib/config.py:47 -#: neutron/plugins/openvswitch/common/config.py:66 -#: neutron/plugins/ryu/common/config.py:43 -#: neutron/plugins/sriovnicagent/common/config.py:58 -msgid "" -"The number of seconds the agent will wait between polling for local " -"device changes." -msgstr "" - -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:60 -msgid "" -"Enables metrics collections for switch ports by using Hyper-V's metric " -"APIs. Collected data can by retrieved by other apps and services, e.g.: " -"Ceilometer. Requires Hyper-V / Windows Server 2012 and above" -msgstr "" - -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:67 -msgid "" -"Specifies the maximum number of retries to enable Hyper-V's port metrics " -"collection. The agent will try to enable the feature once every " -"polling_interval period for at most metrics_max_retries or until it " -"succeedes." -msgstr "" - -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:149 -#, python-format -msgid "Failed reporting state! %s" -msgstr "" - -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:184 -#, python-format -msgid "Invalid physical network mapping: %s" -msgstr "" - -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:205 -#, python-format -msgid "network_delete received. Deleting network %s" -msgstr "" - -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:211 -#, python-format -msgid "Network %s not defined on agent." -msgstr "" - -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:214 -msgid "port_delete received" -msgstr "" - -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:219 -msgid "port_update received" -msgstr "" - -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:241 -#: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:130 -#, python-format -msgid "Provisioning network %s" -msgstr "" - -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:254 -#, python-format -msgid "" -"Cannot provision unknown network type %(network_type)s for network " -"%(net_uuid)s" -msgstr "" - -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:266 -#, python-format -msgid "Reclaiming local network %s" -msgstr "" - -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:274 -#, python-format -msgid "Binding port %s" -msgstr "" - -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:287 -#, python-format -msgid "Binding VLAN ID %(segmentation_id)s to switch port %(port_id)s" -msgstr "" - -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:300 -#: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:115 -#, python-format -msgid "Unsupported network type %s" -msgstr "" - -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:309 -#, python-format -msgid "Network %s is not avalailable on this agent" -msgstr "" - -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:313 -#, python-format -msgid "Unbinding port %s" -msgstr "" - -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:326 -#, python-format -msgid "Port metrics enabled for port: %s" -msgstr "" - -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:330 -#, python-format -msgid "Port metrics raw enabling for port: %s" -msgstr "" - -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:355 -#: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:294 -#, python-format -msgid "No port %s defined on agent." -msgstr "" - -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:372 -#, python-format -msgid "Adding port %s" -msgstr "" - -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:375 -#, python-format -msgid "Port %(device)s updated. Details: %(device_details)s" -msgstr "" - -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:401 -#, python-format -msgid "Removing port %s" -msgstr "" - -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:409 -#, python-format -msgid "Removing port failed for device %(device)s: %(e)s" -msgstr "" - -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:434 -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:993 -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1353 -#: neutron/plugins/sriovnicagent/sriov_nic_agent.py:254 -msgid "Agent out of sync with plugin!" -msgstr "" - -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:442 -msgid "Agent loop has new devices!" -msgstr "" - -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:449 -#, python-format -msgid "Error in agent event loop: %s" -msgstr "" - -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:457 -#: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:393 -#, python-format -msgid "Loop iteration exceeded interval (%(polling_interval)s vs. %(elapsed)s)" -msgstr "" - -#: neutron/plugins/hyperv/agent/hyperv_neutron_agent.py:470 -#: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:266 -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:1034 -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1545 -#: neutron/plugins/sriovnicagent/sriov_nic_agent.py:350 -msgid "Agent initialized successfully, now running... " -msgstr "" - -#: neutron/plugins/hyperv/agent/security_groups_driver.py:61 -#, python-format -msgid "Hyper-V Exception: %(hyperv_exeption)s while adding rule: %(rule)s" -msgstr "" - -#: neutron/plugins/hyperv/agent/security_groups_driver.py:71 -#, python-format -msgid "Hyper-V Exception: %(hyperv_exeption)s while removing rule: %(rule)s" -msgstr "" - -#: neutron/plugins/hyperv/agent/security_groups_driver.py:91 -msgid "Aplying port filter." -msgstr "" - -#: neutron/plugins/hyperv/agent/security_groups_driver.py:94 -msgid "Updating port rules." -msgstr "" - -#: neutron/plugins/hyperv/agent/security_groups_driver.py:107 -#, python-format -msgid "Creating %(new)s new rules, removing %(old)s old rules." -msgstr "" - -#: neutron/plugins/hyperv/agent/security_groups_driver.py:118 -msgid "Removing port filter" -msgstr "" - -#: neutron/plugins/hyperv/agent/utils.py:34 -#, python-format -msgid "HyperVException: %(msg)s" -msgstr "" - -#: neutron/plugins/hyperv/agent/utils.py:79 -#, python-format -msgid "Vnic not found: %s" -msgstr "" - -#: neutron/plugins/hyperv/agent/utils.py:114 -#, python-format -msgid "Job failed with error %d" -msgstr "" - -#: neutron/plugins/hyperv/agent/utils.py:133 -#, python-format -msgid "" -"WMI job failed with status %(job_state)d. Error details: %(err_sum_desc)s" -" - %(err_desc)s - Error code: %(err_code)d" -msgstr "" - -#: neutron/plugins/hyperv/agent/utils.py:142 -#, python-format -msgid "WMI job failed with status %(job_state)d. Error details: %(error)s" -msgstr "" - -#: neutron/plugins/hyperv/agent/utils.py:146 -#, python-format -msgid "WMI job failed with status %d. No error description available" -msgstr "" - -#: neutron/plugins/hyperv/agent/utils.py:151 -#, python-format -msgid "WMI job succeeded: %(desc)s, Elapsed=%(elap)s" -msgstr "" - -#: neutron/plugins/hyperv/agent/utils.py:165 -#, python-format -msgid "Failed creating port for %s" -msgstr "" - -#: neutron/plugins/hyperv/agent/utils.py:188 -#, python-format -msgid "" -"Failed to disconnect port %(switch_port_name)s from switch " -"%(vswitch_name)s with error %(ret_val)s" -msgstr "" - -#: neutron/plugins/hyperv/agent/utils.py:199 -#, python-format -msgid "" -"Failed to delete port %(switch_port_name)s from switch %(vswitch_name)s " -"with error %(ret_val)s" -msgstr "" - -#: neutron/plugins/hyperv/agent/utils.py:206 -#: neutron/plugins/hyperv/agent/utilsv2.py:133 -#, python-format -msgid "VSwitch not found: %s" -msgstr "" - -#: neutron/plugins/hyperv/agent/utils.py:247 -#: neutron/plugins/hyperv/agent/utils.py:251 -msgid "Metrics collection is not supported on this version of Hyper-V" -msgstr "" - -#: neutron/plugins/hyperv/agent/utilsfactory.py:31 -msgid "Force V1 WMI utility classes" -msgstr "" - -#: neutron/plugins/hyperv/agent/utilsfactory.py:60 -msgid "" -"V1 virtualization namespace no longer supported on Windows Server / " -"Hyper-V Server 2012 R2 or above." -msgstr "" - -#: neutron/plugins/hyperv/agent/utilsfactory.py:67 -#, python-format -msgid "Loading class: %(module_name)s.%(class_name)s" -msgstr "" - -#: neutron/plugins/hyperv/agent/utilsv2.py:156 -#: neutron/plugins/hyperv/agent/utilsv2.py:316 -#, python-format -msgid "Port Allocation not found: %s" -msgstr "" - -#: neutron/plugins/hyperv/agent/utilsv2.py:266 -#, python-format -msgid "Cannot get VM summary data for: %s" -msgstr "" - -#: neutron/plugins/ibm/sdnve_api.py:75 -#, python-format -msgid "The IP addr of available SDN-VE controllers: %s" -msgstr "" - -#: neutron/plugins/ibm/sdnve_api.py:78 -#, python-format -msgid "The SDN-VE controller IP address: %s" -msgstr "" - -#: neutron/plugins/ibm/sdnve_api.py:95 -#, python-format -msgid "unable to serialize object type: '%s'" -msgstr "" - -#: neutron/plugins/ibm/sdnve_api.py:162 -#, python-format -msgid "" -"Sending request to SDN-VE. url: %(myurl)s method: %(method)s body: " -"%(body)s header: %(header)s " -msgstr "" - -#: neutron/plugins/ibm/sdnve_api.py:175 -#, python-format -msgid "Error: Could not reach server: %(url)s Exception: %(excp)s." -msgstr "" - -#: neutron/plugins/ibm/sdnve_api.py:182 -#, python-format -msgid "Error message: %(reply)s -- Status: %(status)s" -msgstr "" - -#: neutron/plugins/ibm/sdnve_api.py:185 -#, python-format -msgid "Received response status: %s" -msgstr "" - -#: neutron/plugins/ibm/sdnve_api.py:192 -#, python-format -msgid "Deserialized body: %s" -msgstr "" - -#: neutron/plugins/ibm/sdnve_api.py:234 -msgid "Bad resource for forming a list request" -msgstr "" - -#: neutron/plugins/ibm/sdnve_api.py:244 -msgid "Bad resource for forming a show request" -msgstr "" - -#: neutron/plugins/ibm/sdnve_api.py:254 -msgid "Bad resource for forming a create request" -msgstr "" - -#: neutron/plugins/ibm/sdnve_api.py:266 -msgid "Bad resource for forming a update request" -msgstr "" - -#: neutron/plugins/ibm/sdnve_api.py:277 -msgid "Bad resource for forming a delete request" -msgstr "" - -#: neutron/plugins/ibm/sdnve_api.py:305 -#, python-format -msgid "Non matching tenant and network types: %(ttype)s %(ntype)s" -msgstr "" - -#: neutron/plugins/ibm/sdnve_api.py:367 -#, python-format -msgid "Did not find tenant: %r" -msgstr "" - -#: neutron/plugins/ibm/sdnve_api_fake.py:30 -msgid "Fake SDNVE controller initialized" -msgstr "" - -#: neutron/plugins/ibm/sdnve_api_fake.py:33 -msgid "Fake SDNVE controller: list" -msgstr "" - -#: neutron/plugins/ibm/sdnve_api_fake.py:37 -msgid "Fake SDNVE controller: show" -msgstr "" - -#: neutron/plugins/ibm/sdnve_api_fake.py:41 -msgid "Fake SDNVE controller: create" -msgstr "" - -#: neutron/plugins/ibm/sdnve_api_fake.py:45 -msgid "Fake SDNVE controller: update" -msgstr "" - -#: neutron/plugins/ibm/sdnve_api_fake.py:49 -msgid "Fake SDNVE controller: delete" -msgstr "" - -#: neutron/plugins/ibm/sdnve_api_fake.py:53 -msgid "Fake SDNVE controller: get tenant by id" -msgstr "" - -#: neutron/plugins/ibm/sdnve_api_fake.py:57 -msgid "Fake SDNVE controller: check and create tenant" -msgstr "" - -#: neutron/plugins/ibm/sdnve_api_fake.py:61 -msgid "Fake SDNVE controller: get controller" -msgstr "" - -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:150 -msgid "Set a new controller if needed." -msgstr "" - -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:156 -#, python-format -msgid "Set the controller to a new controller: %s" -msgstr "" - -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:164 -#, python-format -msgid "Original SDN-VE HTTP request: %(orig)s; New request: %(new)s" -msgstr "" - -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:174 -#, python-format -msgid "Create network in progress: %r" -msgstr "" - -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:183 -msgid "Create net failed: no SDN-VE tenant." -msgstr "" - -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:194 -#, python-format -msgid "Create net failed in SDN-VE: %s" -msgstr "" - -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:201 -#, python-format -msgid "Update network in progress: %r" -msgstr "" - -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:221 -#, python-format -msgid "Update net failed in SDN-VE: %s" -msgstr "" - -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:227 -#, python-format -msgid "Delete network in progress: %s" -msgstr "" - -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:237 -#, python-format -msgid "Delete net failed after deleting the network in DB: %s" -msgstr "" - -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:242 -#, python-format -msgid "Get network in progress: %s" -msgstr "" - -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:248 -msgid "Get networks in progress" -msgstr "" - -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:258 -#, python-format -msgid "Create port in progress: %r" -msgstr "" - -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:274 -msgid "Create port does not have tenant id info" -msgstr "" - -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:280 -#, python-format -msgid "Create port does not have tenant id info; obtained is: %s" -msgstr "" - -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:301 -#, python-format -msgid "Create port failed in SDN-VE: %s" -msgstr "" - -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:308 -#, python-format -msgid "Update port in progress: %r" -msgstr "" - -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:335 -#, python-format -msgid "Update port failed in SDN-VE: %s" -msgstr "" - -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:341 -#, python-format -msgid "Delete port in progress: %s" -msgstr "" - -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:354 -#, python-format -msgid "Delete port operation failed in SDN-VE after deleting the port from DB: %s" -msgstr "" - -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:363 -#, python-format -msgid "Create subnet in progress: %r" -msgstr "" - -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:375 -#, python-format -msgid "Create subnet failed in SDN-VE: %s" -msgstr "" - -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:377 -#, python-format -msgid "Subnet created: %s" -msgstr "" - -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:383 -#, python-format -msgid "Update subnet in progress: %r" -msgstr "" - -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:408 -#, python-format -msgid "Update subnet failed in SDN-VE: %s" -msgstr "" - -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:414 -#, python-format -msgid "Delete subnet in progress: %s" -msgstr "" - -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:419 -#, python-format -msgid "" -"Delete subnet operation failed in SDN-VE after deleting the subnet from " -"DB: %s" -msgstr "" - -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:428 -#, python-format -msgid "Create router in progress: %r" -msgstr "" - -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:431 -#, python-format -msgid "Ignoring admin_state_up=False for router=%r. Overriding with True" -msgstr "" - -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:441 -msgid "Create router failed: no SDN-VE tenant." -msgstr "" - -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:449 -#, python-format -msgid "Create router failed in SDN-VE: %s" -msgstr "" - -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:451 -#, python-format -msgid "Router created: %r" -msgstr "" - -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:456 -#, python-format -msgid "Update router in progress: id=%(id)s router=%(router)r" -msgstr "" - -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:463 -msgid "admin_state_up=False routers are not supported." -msgstr "" - -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:487 -#, python-format -msgid "Update router failed in SDN-VE: %s" -msgstr "" - -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:493 -#, python-format -msgid "Delete router in progress: %s" -msgstr "" - -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:500 -#, python-format -msgid "" -"Delete router operation failed in SDN-VE after deleting the router in DB:" -" %s" -msgstr "" - -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:505 -#, python-format -msgid "" -"Add router interface in progress: router_id=%(router_id)s " -"interface_info=%(interface_info)r" -msgstr "" - -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:513 -#, python-format -msgid "SdnvePluginV2.add_router_interface called. Port info: %s" -msgstr "" - -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:527 -#, python-format -msgid "Update router-add-interface failed in SDN-VE: %s" -msgstr "" - -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:530 -#, python-format -msgid "Added router interface: %r" -msgstr "" - -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:534 -#, python-format -msgid "" -"Add router interface only called: router_id=%(router_id)s " -"interface_info=%(interface_info)r" -msgstr "" - -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:544 -msgid "" -"SdnvePluginV2._add_router_interface_only: failed to add the interface in " -"the roll back. of a remove_router_interface operation" -msgstr "" - -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:550 -#, python-format -msgid "" -"Remove router interface in progress: router_id=%(router_id)s " -"interface_info=%(interface_info)r" -msgstr "" - -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:559 -msgid "No port ID" -msgstr "" - -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:561 -#, python-format -msgid "SdnvePluginV2.remove_router_interface port: %s" -msgstr "" - -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:565 -msgid "No fixed IP" -msgstr "" - -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:570 -#, python-format -msgid "SdnvePluginV2.remove_router_interface subnet_id: %s" -msgstr "" - -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:593 -#, python-format -msgid "Update router-remove-interface failed SDN-VE: %s" -msgstr "" - -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:614 -#, python-format -msgid "Create floatingip in progress: %r" -msgstr "" - -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:625 -#, python-format -msgid "Creating floating ip operation failed in SDN-VE controller: %s" -msgstr "" - -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:628 -#, python-format -msgid "Created floatingip : %r" -msgstr "" - -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:633 -#, python-format -msgid "Update floatingip in progress: %r" -msgstr "" - -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:653 -#, python-format -msgid "Update floating ip failed in SDN-VE: %s" -msgstr "" - -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:659 -#, python-format -msgid "Delete floatingip in progress: %s" -msgstr "" - -#: neutron/plugins/ibm/sdnve_neutron_plugin.py:664 -#, python-format -msgid "Delete floatingip failed in SDN-VE: %s" -msgstr "" - -#: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:136 -msgid "info_update received" -msgstr "" - -#: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:141 -#, python-format -msgid "info_update received. New controlleris to be set to: %s" -msgstr "" - -#: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:147 -msgid "info_update received. New controlleris set to be out of band" -msgstr "" - -#: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:192 -#, python-format -msgid "Mapping physical network %(physical_network)s to interface %(interface)s" -msgstr "" - -#: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:198 -#, python-format -msgid "" -"Interface %(interface)s for physical network %(physical_network)s does " -"not exist. Agent terminated!" -msgstr "" - -#: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:216 -msgid "Agent in the rpc loop." -msgstr "" - -#: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:238 -#, python-format -msgid "Controller IPs: %s" -msgstr "" - -#: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:260 -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1532 -#, python-format -msgid "%s Agent terminated!" -msgstr "" - -#: neutron/plugins/ibm/common/config.py:26 -msgid "Whether to use a fake controller." -msgstr "" - -#: neutron/plugins/ibm/common/config.py:28 -msgid "Base URL for SDN-VE controller REST API." -msgstr "" - -#: neutron/plugins/ibm/common/config.py:30 -msgid "List of IP addresses of SDN-VE controller(s)." -msgstr "" - -#: neutron/plugins/ibm/common/config.py:32 -msgid "SDN-VE RPC subject." -msgstr "" - -#: neutron/plugins/ibm/common/config.py:34 -msgid "SDN-VE controller port number." -msgstr "" - -#: neutron/plugins/ibm/common/config.py:36 -msgid "SDN-VE request/response format." -msgstr "" - -#: neutron/plugins/ibm/common/config.py:38 -msgid "SDN-VE administrator user ID." -msgstr "" - -#: neutron/plugins/ibm/common/config.py:40 -msgid "SDN-VE administrator password." -msgstr "" - -#: neutron/plugins/ibm/common/config.py:42 -#: neutron/plugins/nec/common/config.py:23 -#: neutron/plugins/openvswitch/common/config.py:29 -#: neutron/plugins/ryu/common/config.py:22 -msgid "Integration bridge to use." -msgstr "" - -#: neutron/plugins/ibm/common/config.py:44 -msgid "Whether to reset the integration bridge before use." -msgstr "" - -#: neutron/plugins/ibm/common/config.py:46 -msgid "Indicating if controller is out of band or not." -msgstr "" - -#: neutron/plugins/ibm/common/config.py:49 -msgid "List of : mappings." -msgstr "" - -#: neutron/plugins/ibm/common/config.py:52 -msgid "Tenant type: OVERLAY (default) or OF." -msgstr "" - -#: neutron/plugins/ibm/common/config.py:54 -msgid "" -"The string in tenant description that indicates the tenant is a OVERLAY " -"tenant." -msgstr "" - -#: neutron/plugins/ibm/common/config.py:57 -msgid "The string in tenant description that indicates the tenant is a OF tenant." -msgstr "" - -#: neutron/plugins/ibm/common/config.py:63 -msgid "Agent polling interval if necessary." -msgstr "" - -#: neutron/plugins/ibm/common/config.py:65 -msgid "Using root helper." -msgstr "" - -#: neutron/plugins/ibm/common/config.py:67 -msgid "Whether to use rpc." -msgstr "" - -#: neutron/plugins/ibm/common/exceptions.py:21 -#, python-format -msgid "" -"An unexpected error occurred in the SDN-VE Plugin. Here is the error " -"message: %(msg)s" -msgstr "" - -#: neutron/plugins/ibm/common/exceptions.py:26 -#, python-format -msgid "The input does not contain nececessary info: %(msg)s" -msgstr "" - -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:121 -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:145 -#: neutron/plugins/ml2/rpc.py:130 neutron/plugins/ml2/rpc.py:154 -#: neutron/plugins/openvswitch/ovs_neutron_plugin.py:125 -#: neutron/plugins/openvswitch/ovs_neutron_plugin.py:150 -#, python-format -msgid "Device %(device)s not bound to the agent host %(host)s" -msgstr "" - -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:138 -#: neutron/plugins/openvswitch/ovs_neutron_plugin.py:144 -#, python-format -msgid "Device %(device)s up on %(agent_id)s" -msgstr "" - -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:259 -#: neutron/plugins/mlnx/mlnx_plugin.py:204 -#, python-format -msgid "Invalid tenant_network_type: %s. Service terminated!" -msgstr "" - -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:270 -msgid "Linux Bridge Plugin initialization complete" -msgstr "" - -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:299 -#, python-format -msgid "%s. Agent terminated!" -msgstr "" - -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:344 -#: neutron/plugins/mlnx/mlnx_plugin.py:248 -#: neutron/plugins/openvswitch/ovs_neutron_plugin.py:418 -msgid "provider:segmentation_id specified for flat network" -msgstr "" - -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:353 -#: neutron/plugins/mlnx/mlnx_plugin.py:256 -#: neutron/plugins/openvswitch/ovs_neutron_plugin.py:427 -#, python-format -msgid "provider:segmentation_id out of range (%(min_id)s through %(max_id)s)" -msgstr "" - -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:360 -#: neutron/plugins/mlnx/mlnx_plugin.py:264 -#: neutron/plugins/openvswitch/ovs_neutron_plugin.py:447 -msgid "provider:physical_network specified for local network" -msgstr "" - -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:366 -#: neutron/plugins/mlnx/mlnx_plugin.py:268 -#: neutron/plugins/openvswitch/ovs_neutron_plugin.py:453 -msgid "provider:segmentation_id specified for local network" -msgstr "" - -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:81 -msgid "VXLAN is enabled, a valid local_ip must be provided" -msgstr "" - -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:95 -msgid "Invalid Network ID, will lead to incorrect bridgename" -msgstr "" - -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:102 -msgid "Invalid VLAN ID, will lead to incorrect subinterface name" -msgstr "" - -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:109 -msgid "Invalid Interface ID, will lead to incorrect tap device name" -msgstr "" - -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:118 -#, python-format -msgid "Invalid Segmentation ID: %s, will lead to incorrect vxlan device name" -msgstr "" - -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:181 -#, python-format -msgid "Failed creating vxlan interface for %(segmentation_id)s" -msgstr "" - -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:213 -#, python-format -msgid "" -"Creating subinterface %(interface)s for VLAN %(vlan_id)s on interface " -"%(physical_interface)s" -msgstr "" - -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:226 -#, python-format -msgid "Done creating subinterface %s" -msgstr "" - -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:233 -#, python-format -msgid "Creating vxlan interface %(interface)s for VNI %(segmentation_id)s" -msgstr "" - -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:248 -#, python-format -msgid "Done creating vxlan interface %s" -msgstr "" - -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:302 -#, python-format -msgid "Starting bridge %(bridge_name)s for subinterface %(interface)s" -msgstr "" - -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:317 -#, python-format -msgid "Done starting bridge %(bridge_name)s for subinterface %(interface)s" -msgstr "" - -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:339 -#, python-format -msgid "Unable to add %(interface)s to %(bridge_name)s! Exception: %(e)s" -msgstr "" - -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:352 -#, python-format -msgid "Unable to add vxlan interface for network %s" -msgstr "" - -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:359 -#, python-format -msgid "No mapping for physical network %s" -msgstr "" - -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:368 -#, python-format -msgid "Unknown network_type %(network_type)s for network %(network_id)s." -msgstr "" - -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:380 -#, python-format -msgid "Tap device: %s does not exist on this host, skipped" -msgstr "" - -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:398 -#, python-format -msgid "Adding device %(tap_device_name)s to bridge %(bridge_name)s" -msgstr "" - -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:407 -#, python-format -msgid "%(tap_device_name)s already exists on bridge %(bridge_name)s" -msgstr "" - -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:445 -#, python-format -msgid "Deleting bridge %s" -msgstr "" - -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:452 -#, python-format -msgid "Done deleting bridge %s" -msgstr "" - -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:455 -#, python-format -msgid "Cannot delete bridge %s, does not exist" -msgstr "" - -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:469 -#, python-format -msgid "Removing device %(interface_name)s from bridge %(bridge_name)s" -msgstr "" - -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:476 -#, python-format -msgid "Done removing device %(interface_name)s from bridge %(bridge_name)s" -msgstr "" - -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:482 -#, python-format -msgid "" -"Cannot remove device %(interface_name)s bridge %(bridge_name)s does not " -"exist" -msgstr "" - -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:490 -#, python-format -msgid "Deleting subinterface %s for vlan" -msgstr "" - -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:497 -#, python-format -msgid "Done deleting subinterface %s" -msgstr "" - -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:501 -#, python-format -msgid "Deleting vxlan interface %s for vlan" -msgstr "" - -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:506 -#, python-format -msgid "Done deleting vxlan interface %s" -msgstr "" - -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:520 -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:554 -#, python-format -msgid "" -"Option \"%(option)s\" must be supported by command \"%(command)s\" to " -"enable %(mode)s mode" -msgstr "" - -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:531 -msgid "No valid Segmentation ID to perform UCAST test." -msgstr "" - -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:548 -msgid "" -"VXLAN muticast group must be provided in vxlan_group option to enable " -"VXLAN MCAST mode" -msgstr "" - -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:573 -msgid "" -"Linux kernel vxlan module and iproute2 3.8 or above are required to " -"enable VXLAN." -msgstr "" - -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:583 -#, python-format -msgid "Using %s VXLAN mode" -msgstr "" - -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:660 -#: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:163 -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:300 -msgid "network_delete received" -msgstr "" - -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:674 -#: neutron/plugins/sriovnicagent/sriov_nic_agent.py:66 -#, python-format -msgid "port_update RPC received for port: %s" -msgstr "" - -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:677 -msgid "fdb_add received" -msgstr "" - -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:699 -msgid "fdb_remove received" -msgstr "" - -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:721 -msgid "update chg_ip received" -msgstr "" - -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:746 -msgid "fdb_update received" -msgstr "" - -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:803 -msgid "Unable to obtain MAC address for unique ID. Agent terminated!" -msgstr "" - -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:807 -#: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:220 -#: neutron/plugins/nec/agent/nec_neutron_agent.py:142 -#: neutron/plugins/oneconvergence/agent/nvsd_neutron_agent.py:107 -#: neutron/plugins/sriovnicagent/sriov_nic_agent.py:100 -#, python-format -msgid "RPC agent_id: %s" -msgstr "" - -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:878 -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1103 -#: neutron/plugins/sriovnicagent/sriov_nic_agent.py:213 -#, python-format -msgid "Port %(device)s updated. Details: %(details)s" -msgstr "" - -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:911 -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:932 -#: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:354 -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1129 -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1190 -#: neutron/plugins/sriovnicagent/sriov_nic_agent.py:240 -#, python-format -msgid "Device %s not defined on plugin" -msgstr "" - -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:918 -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1158 -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1175 -#, python-format -msgid "Attachment %s removed" -msgstr "" - -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:926 -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1165 -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1182 -#, python-format -msgid "port_removed failed for %(device)s: %(e)s" -msgstr "" - -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:930 -#: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:352 -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1187 -#: neutron/plugins/sriovnicagent/sriov_nic_agent.py:238 -#, python-format -msgid "Port %s updated." -msgstr "" - -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:983 -msgid "LinuxBridge Agent RPC Daemon Started!" -msgstr "" - -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:997 -#: neutron/plugins/sriovnicagent/sriov_nic_agent.py:267 -#, python-format -msgid "Agent loop found changes! %s" -msgstr "" - -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:1001 -#: neutron/plugins/sriovnicagent/sriov_nic_agent.py:273 -#, python-format -msgid "Error in agent loop. Devices info: %s" -msgstr "" - -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:1024 -#: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:407 -#, python-format -msgid "Parsing physical_interface_mappings failed: %s. Agent terminated!" -msgstr "" - -#: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:1027 -#: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:410 -#, python-format -msgid "Interface mappings: %s" -msgstr "" - -#: neutron/plugins/linuxbridge/common/config.py:26 -#: neutron/plugins/mlnx/common/config.py:26 -msgid "Network type for tenant networks (local, vlan, or none)" -msgstr "" - -#: neutron/plugins/linuxbridge/common/config.py:36 -msgid "" -"Enable VXLAN on the agent. Can be enabled when agent is managed by ml2 " -"plugin using linuxbridge mechanism driver" -msgstr "" - -#: neutron/plugins/linuxbridge/common/config.py:40 -msgid "TTL for vxlan interface protocol packets." -msgstr "" - -#: neutron/plugins/linuxbridge/common/config.py:42 -msgid "TOS for vxlan interface protocol packets." -msgstr "" - -#: neutron/plugins/linuxbridge/common/config.py:44 -msgid "Multicast group for vxlan interface." -msgstr "" - -#: neutron/plugins/linuxbridge/common/config.py:46 -msgid "Local IP address of the VXLAN endpoints." -msgstr "" - -#: neutron/plugins/linuxbridge/common/config.py:48 -msgid "" -"Extension to use alongside ml2 plugin's l2population mechanism driver. It" -" enables the plugin to populate VXLAN forwarding table." -msgstr "" - -#: neutron/plugins/linuxbridge/common/config.py:56 -#: neutron/plugins/mlnx/common/config.py:45 -#: neutron/plugins/ofagent/common/config.py:29 -msgid "List of :" -msgstr "" - -#: neutron/plugins/linuxbridge/common/config.py:64 -#: neutron/plugins/mlnx/common/config.py:70 -msgid "Enable server RPC compatibility with old agents" -msgstr "" - -#: neutron/plugins/linuxbridge/db/l2network_db_v2.py:142 -#: neutron/plugins/openvswitch/ovs_db_v2.py:161 -#, python-format -msgid "" -"Reserving specific vlan %(vlan_id)s on physical network " -"%(physical_network)s outside pool" -msgstr "" - -#: neutron/plugins/linuxbridge/db/l2network_db_v2.py:166 -#: neutron/plugins/openvswitch/ovs_db_v2.py:191 -#, python-format -msgid "" -"Releasing vlan %(vlan_id)s on physical network %(physical_network)s to " -"pool" -msgstr "" - -#: neutron/plugins/linuxbridge/db/l2network_db_v2.py:171 -#: neutron/plugins/openvswitch/ovs_db_v2.py:186 -#, python-format -msgid "" -"Releasing vlan %(vlan_id)s on physical network %(physical_network)s " -"outside pool" -msgstr "" - -#: neutron/plugins/linuxbridge/db/l2network_db_v2.py:202 -#: neutron/plugins/mlnx/db/mlnx_db_v2.py:212 -msgid "get_port_from_device() called" -msgstr "" - -#: neutron/plugins/linuxbridge/db/l2network_db_v2.py:230 -#, python-format -msgid "set_port_status as %s called" -msgstr "" - -#: neutron/plugins/metaplugin/meta_neutron_plugin.py:59 -#, python-format -msgid "Flavor %(flavor)s could not be found" -msgstr "" - -#: neutron/plugins/metaplugin/meta_neutron_plugin.py:63 -msgid "Failed to add flavor binding" -msgstr "" - -#: neutron/plugins/metaplugin/meta_neutron_plugin.py:72 -msgid "Start initializing metaplugin" -msgstr "" - -#: neutron/plugins/metaplugin/meta_neutron_plugin.py:121 -#, python-format -msgid "default_flavor %s is not plugin list" -msgstr "" - -#: neutron/plugins/metaplugin/meta_neutron_plugin.py:127 -#, python-format -msgid "default_l3_flavor %s is not plugin list" -msgstr "" - -#: neutron/plugins/metaplugin/meta_neutron_plugin.py:133 -#, python-format -msgid "rpc_flavor %s is not plugin list" -msgstr "" - -#: neutron/plugins/metaplugin/meta_neutron_plugin.py:165 -#, python-format -msgid "Plugin location: %s" -msgstr "" - -#: neutron/plugins/metaplugin/meta_neutron_plugin.py:216 -#, python-format -msgid "Created network: %(net_id)s with flavor %(flavor)s" -msgstr "" - -#: neutron/plugins/metaplugin/meta_neutron_plugin.py:222 -#: neutron/plugins/metaplugin/meta_neutron_plugin.py:366 -msgid "Failed to add flavor bindings" -msgstr "" - -#: neutron/plugins/metaplugin/meta_neutron_plugin.py:359 -#, python-format -msgid "Created router: %(router_id)s with flavor %(flavor)s" -msgstr "" - -#: neutron/plugins/metaplugin/meta_neutron_plugin.py:370 -#, python-format -msgid "Created router: %s" -msgstr "" - -#: neutron/plugins/metaplugin/proxy_neutron_plugin.py:66 -#, python-format -msgid "Update subnet failed: %s" -msgstr "" - -#: neutron/plugins/metaplugin/proxy_neutron_plugin.py:73 -msgid "Subnet in remote have already deleted" -msgstr "" - -#: neutron/plugins/metaplugin/proxy_neutron_plugin.py:94 -#, python-format -msgid "Update network failed: %s" -msgstr "" - -#: neutron/plugins/metaplugin/proxy_neutron_plugin.py:101 -msgid "Network in remote have already deleted" -msgstr "" - -#: neutron/plugins/metaplugin/proxy_neutron_plugin.py:122 -#, python-format -msgid "Update port failed: %s" -msgstr "" - -#: neutron/plugins/metaplugin/proxy_neutron_plugin.py:133 -msgid "Port in remote have already deleted" -msgstr "" - -#: neutron/plugins/metaplugin/common/config.py:23 -msgid "" -"Comma separated list of flavor:neutron_plugin for plugins to load. " -"Extension method is searched in the list order and the first one is used." -msgstr "" - -#: neutron/plugins/metaplugin/common/config.py:29 -msgid "" -"Comma separated list of flavor:neutron_plugin for L3 service plugins to " -"load. This is intended for specifying L2 plugins which support L3 " -"functions. If you use a router service plugin, set this blank." -msgstr "" - -#: neutron/plugins/metaplugin/common/config.py:36 -msgid "" -"Default flavor to use, when flavor:network is not specified at network " -"creation." -msgstr "" - -#: neutron/plugins/metaplugin/common/config.py:41 -msgid "" -"Default L3 flavor to use, when flavor:router is not specified at router " -"creation. Ignored if 'l3_plugin_list' is blank." -msgstr "" - -#: neutron/plugins/metaplugin/common/config.py:47 -msgid "Comma separated list of supported extension aliases." -msgstr "" - -#: neutron/plugins/metaplugin/common/config.py:51 -msgid "" -"Comma separated list of method:flavor to select specific plugin for a " -"method. This has priority over method search order based on " -"'plugin_list'." -msgstr "" - -#: neutron/plugins/metaplugin/common/config.py:57 -msgid "Specifies flavor for plugin to handle 'q-plugin' RPC requests." -msgstr "" - -#: neutron/plugins/midonet/midonet_lib.py:39 -#, python-format -msgid "MidoNet %(resource_type)s %(id)s could not be found" -msgstr "" - -#: neutron/plugins/midonet/midonet_lib.py:43 -#: neutron/plugins/midonet/plugin.py:80 -#, python-format -msgid "MidoNet API error: %(msg)s" -msgstr "" - -#: neutron/plugins/midonet/midonet_lib.py:77 -#, python-format -msgid "MidoClient.create_bridge called: kwargs=%(kwargs)s" -msgstr "" - -#: neutron/plugins/midonet/midonet_lib.py:87 -#, python-format -msgid "MidoClient.delete_bridge called: id=%(id)s" -msgstr "" - -#: neutron/plugins/midonet/midonet_lib.py:97 -#, python-format -msgid "MidoClient.get_bridge called: id=%s" -msgstr "" - -#: neutron/plugins/midonet/midonet_lib.py:111 -#, python-format -msgid "MidoClient.update_bridge called: id=%(id)s, kwargs=%(kwargs)s" -msgstr "" - -#: neutron/plugins/midonet/midonet_lib.py:131 -#, python-format -msgid "" -"MidoClient.create_dhcp called: bridge=%(bridge)s, cidr=%(cidr)s, " -"gateway_ip=%(gateway_ip)s, host_rts=%(host_rts)s, " -"dns_servers=%(dns_servers)s" -msgstr "" - -#: neutron/plugins/midonet/midonet_lib.py:149 -#, python-format -msgid "" -"MidoClient.add_dhcp_host called: bridge=%(bridge)s, cidr=%(cidr)s, " -"ip=%(ip)s, mac=%(mac)s" -msgstr "" - -#: neutron/plugins/midonet/midonet_lib.py:154 -msgid "Tried to add tonon-existent DHCP" -msgstr "" - -#: neutron/plugins/midonet/midonet_lib.py:168 -#, python-format -msgid "" -"MidoClient.remove_dhcp_host called: bridge=%(bridge)s, cidr=%(cidr)s, " -"ip=%(ip)s, mac=%(mac)s" -msgstr "" - -#: neutron/plugins/midonet/midonet_lib.py:173 -msgid "Tried to delete mapping from non-existent subnet" -msgstr "" - -#: neutron/plugins/midonet/midonet_lib.py:178 -#, python-format -msgid "MidoClient.remove_dhcp_host: Deleting %(dh)r" -msgstr "" - -#: neutron/plugins/midonet/midonet_lib.py:191 -#, python-format -msgid "" -"MidoClient.delete_dhcp_host called: bridge_id=%(bridge_id)s, " -"cidr=%(cidr)s, ip=%(ip)s, mac=%(mac)s" -msgstr "" - -#: neutron/plugins/midonet/midonet_lib.py:206 -#, python-format -msgid "MidoClient.delete_dhcp called: bridge=%(bridge)s, cidr=%(cidr)s" -msgstr "" - -#: neutron/plugins/midonet/midonet_lib.py:213 -msgid "Tried to delete non-existent DHCP" -msgstr "" - -#: neutron/plugins/midonet/midonet_lib.py:225 -#, python-format -msgid "MidoClient.delete_port called: id=%(id)s, delete_chains=%(delete_chains)s" -msgstr "" - -#: neutron/plugins/midonet/midonet_lib.py:240 -#, python-format -msgid "MidoClient.get_port called: id=%(id)s" -msgstr "" - -#: neutron/plugins/midonet/midonet_lib.py:254 -#, python-format -msgid "MidoClient.add_bridge_port called: bridge=%(bridge)s, kwargs=%(kwargs)s" -msgstr "" - -#: neutron/plugins/midonet/midonet_lib.py:266 -#, python-format -msgid "MidoClient.update_port called: id=%(id)s, kwargs=%(kwargs)s" -msgstr "" - -#: neutron/plugins/midonet/midonet_lib.py:291 -#, python-format -msgid "MidoClient.create_router called: kwargs=%(kwargs)s" -msgstr "" - -#: neutron/plugins/midonet/midonet_lib.py:301 -#, python-format -msgid "MidoClient.delete_router called: id=%(id)s" -msgstr "" - -#: neutron/plugins/midonet/midonet_lib.py:311 -#, python-format -msgid "MidoClient.get_router called: id=%(id)s" -msgstr "" - -#: neutron/plugins/midonet/midonet_lib.py:325 -#, python-format -msgid "MidoClient.update_router called: id=%(id)s, kwargs=%(kwargs)s" -msgstr "" - -#: neutron/plugins/midonet/midonet_lib.py:346 -#, python-format -msgid "" -"MidoClient.add_dhcp_route_option called: bridge=%(bridge)s, " -"cidr=%(cidr)s, gw_ip=%(gw_ip)sdst_ip=%(dst_ip)s" -msgstr "" - -#: neutron/plugins/midonet/midonet_lib.py:354 -msgid "Tried to access non-existent DHCP" -msgstr "" - -#: neutron/plugins/midonet/midonet_lib.py:386 -#, python-format -msgid "MidoClient.unlink called: port=%(port)s" -msgstr "" - -#: neutron/plugins/midonet/midonet_lib.py:391 -#, python-format -msgid "Attempted to unlink a port that was not linked. %s" -msgstr "" - -#: neutron/plugins/midonet/midonet_lib.py:397 -#, python-format -msgid "" -"MidoClient.remove_rules_by_property called: tenant_id=%(tenant_id)s, " -"chain_name=%(chain_name)skey=%(key)s, value=%(value)s" -msgstr "" - -#: neutron/plugins/midonet/midonet_lib.py:424 -#, python-format -msgid "" -"MidoClient.create_router_chains called: router=%(router)s, " -"inbound_chain_name=%(in_chain)s, outbound_chain_name=%(out_chain)s" -msgstr "" - -#: neutron/plugins/midonet/midonet_lib.py:447 -#, python-format -msgid "MidoClient.delete_router_chains called: id=%(id)s" -msgstr "" - -#: neutron/plugins/midonet/midonet_lib.py:462 -#, python-format -msgid "MidoClient.delete_port_chains called: id=%(id)s" -msgstr "" - -#: neutron/plugins/midonet/midonet_lib.py:474 -#, python-format -msgid "" -"MidoClient.get_link_port called: router=%(router)s, " -"peer_router_id=%(peer_router_id)s" -msgstr "" - -#: neutron/plugins/midonet/midonet_lib.py:513 -#, python-format -msgid "" -"MidoClient.add_static_nat called: tenant_id=%(tenant_id)s, " -"chain_name=%(chain_name)s, from_ip=%(from_ip)s, to_ip=%(to_ip)s, " -"port_id=%(port_id)s, nat_type=%(nat_type)s" -msgstr "" - -#: neutron/plugins/midonet/midonet_lib.py:521 -#, python-format -msgid "Invalid NAT type passed in %s" -msgstr "" - -#: neutron/plugins/midonet/midonet_lib.py:573 -#, python-format -msgid "MidoClient.remote_static_route called: router=%(router)s, ip=%(ip)s" -msgstr "" - -#: neutron/plugins/midonet/midonet_lib.py:584 -#, python-format -msgid "" -"MidoClient.update_port_chains called: " -"port=%(port)sinbound_chain_id=%(inbound_chain_id)s, " -"outbound_chain_id=%(outbound_chain_id)s" -msgstr "" - -#: neutron/plugins/midonet/midonet_lib.py:595 -#, python-format -msgid "MidoClient.create_chain called: tenant_id=%(tenant_id)s name=%(name)s" -msgstr "" - -#: neutron/plugins/midonet/midonet_lib.py:603 -#, python-format -msgid "MidoClient.delete_chain called: id=%(id)s" -msgstr "" - -#: neutron/plugins/midonet/midonet_lib.py:609 -#, python-format -msgid "" -"MidoClient.delete_chains_by_names called: tenant_id=%(tenant_id)s " -"names=%(names)s " -msgstr "" - -#: neutron/plugins/midonet/midonet_lib.py:620 -#, python-format -msgid "" -"MidoClient.get_chain_by_name called: tenant_id=%(tenant_id)s " -"name=%(name)s " -msgstr "" - -#: neutron/plugins/midonet/midonet_lib.py:631 -#, python-format -msgid "" -"MidoClient.get_port_group_by_name called: tenant_id=%(tenant_id)s " -"name=%(name)s " -msgstr "" - -#: neutron/plugins/midonet/midonet_lib.py:645 -#, python-format -msgid "MidoClient.create_port_group called: tenant_id=%(tenant_id)s name=%(name)s" -msgstr "" - -#: neutron/plugins/midonet/midonet_lib.py:654 -#, python-format -msgid "" -"MidoClient.delete_port_group_by_name called: tenant_id=%(tenant_id)s " -"name=%(name)s " -msgstr "" - -#: neutron/plugins/midonet/midonet_lib.py:660 -#, python-format -msgid "Deleting pg %(id)s" -msgstr "" - -#: neutron/plugins/midonet/midonet_lib.py:666 -#, python-format -msgid "" -"MidoClient.add_port_to_port_group_by_name called: tenant_id=%(tenant_id)s" -" name=%(name)s port_id=%(port_id)s" -msgstr "" - -#: neutron/plugins/midonet/midonet_lib.py:680 -#, python-format -msgid "MidoClient.remove_port_from_port_groups called: port_id=%(port_id)s" -msgstr "" - -#: neutron/plugins/midonet/plugin.py:94 -#, python-format -msgid "Invalid nat_type %s" -msgstr "" - -#: neutron/plugins/midonet/plugin.py:151 -#, python-format -msgid "Unrecognized direction %s" -msgstr "" - -#: neutron/plugins/midonet/plugin.py:185 -#, python-format -msgid "There is no %(name)s with ID %(id)s in MidoNet." -msgstr "" - -#: neutron/plugins/midonet/plugin.py:192 -#: neutron/plugins/ml2/drivers/arista/exceptions.py:23 -#: neutron/plugins/ml2/drivers/arista/exceptions.py:27 -#: neutron/plugins/ml2/drivers/arista/exceptions.py:31 -#: neutron/plugins/ml2/drivers/arista/exceptions.py:35 -#, python-format -msgid "%(msg)s" -msgstr "" - -#: neutron/plugins/midonet/plugin.py:229 -msgid "provider_router_id should be configured in the plugin config file" -msgstr "" - -#: neutron/plugins/midonet/plugin.py:399 -#, python-format -msgid "MidonetPluginV2.create_subnet called: subnet=%r" -msgstr "" - -#: neutron/plugins/midonet/plugin.py:431 -#, python-format -msgid "MidonetPluginV2.create_subnet exiting: sn_entry=%r" -msgstr "" - -#: neutron/plugins/midonet/plugin.py:440 -#, python-format -msgid "MidonetPluginV2.delete_subnet called: id=%s" -msgstr "" - -#: neutron/plugins/midonet/plugin.py:459 -msgid "MidonetPluginV2.delete_subnet exiting" -msgstr "" - -#: neutron/plugins/midonet/plugin.py:516 -#, python-format -msgid "MidonetPluginV2.create_port called: port=%r" -msgstr "" - -#: neutron/plugins/midonet/plugin.py:577 -#, python-format -msgid "Failed to create a port on network %(net_id)s: %(err)s" -msgstr "" - -#: neutron/plugins/midonet/plugin.py:582 -#, python-format -msgid "MidonetPluginV2.create_port exiting: port=%r" -msgstr "" - -#: neutron/plugins/midonet/plugin.py:587 -#, python-format -msgid "MidonetPluginV2.get_port called: id=%(id)s fields=%(fields)r" -msgstr "" - -#: neutron/plugins/midonet/plugin.py:594 -#, python-format -msgid "There is no port with ID %(id)s in MidoNet." -msgstr "" - -#: neutron/plugins/midonet/plugin.py:598 -#, python-format -msgid "MidonetPluginV2.get_port exiting: port=%r" -msgstr "" - -#: neutron/plugins/midonet/plugin.py:603 -#, python-format -msgid "MidonetPluginV2.get_ports called: filters=%(filters)s fields=%(fields)r" -msgstr "" - -#: neutron/plugins/midonet/plugin.py:612 -#, python-format -msgid "" -"MidonetPluginV2.delete_port called: id=%(id)s " -"l3_port_check=%(l3_port_check)r" -msgstr "" - -#: neutron/plugins/midonet/plugin.py:646 -#, python-format -msgid "Failed to delete DHCP mapping for port %(id)s" -msgstr "" - -#: neutron/plugins/midonet/plugin.py:721 -#, python-format -msgid "MidonetPluginV2.create_router called: router=%(router)s" -msgstr "" - -#: neutron/plugins/midonet/plugin.py:768 -#, python-format -msgid "MidonetPluginV2.create_router exiting: router_data=%(router_data)s." -msgstr "" - -#: neutron/plugins/midonet/plugin.py:780 -#, python-format -msgid "" -"MidonetPluginV2.set_router_gateway called: id=%(id)s, " -"gw_router=%(gw_router)s, gw_ip=%(gw_ip)s" -msgstr "" - -#: neutron/plugins/midonet/plugin.py:824 -#, python-format -msgid "MidonetPluginV2.remove_router_gateway called: id=%(id)s" -msgstr "" - -#: neutron/plugins/midonet/plugin.py:844 -#, python-format -msgid "MidonetPluginV2.update_router called: id=%(id)s router=%(router)r" -msgstr "" - -#: neutron/plugins/midonet/plugin.py:884 -#, python-format -msgid "MidonetPluginV2.update_router exiting: router=%r" -msgstr "" - -#: neutron/plugins/midonet/plugin.py:895 -#, python-format -msgid "MidonetPluginV2.delete_router called: id=%s" -msgstr "" - -#: neutron/plugins/midonet/plugin.py:995 -#, python-format -msgid "" -"MidonetPluginV2.add_router_interface called: router_id=%(router_id)s " -"interface_info=%(interface_info)r" -msgstr "" - -#: neutron/plugins/midonet/plugin.py:1019 -msgid "" -"DHCP agent is not working correctly. No port to reach the Metadata server" -" on this network" -msgstr "" - -#: neutron/plugins/midonet/plugin.py:1028 -#, python-format -msgid "" -"Failed to create MidoNet resources to add router interface. " -"info=%(info)s, router_id=%(router_id)s" -msgstr "" - -#: neutron/plugins/midonet/plugin.py:1035 -#, python-format -msgid "MidonetPluginV2.add_router_interface exiting: info=%r" -msgstr "" - -#: neutron/plugins/midonet/plugin.py:1075 -#, python-format -msgid "" -"MidonetPluginV2.update_floatingip called: id=%(id)s " -"floatingip=%(floatingip)s " -msgstr "" - -#: neutron/plugins/midonet/plugin.py:1094 -#, python-format -msgid "MidonetPluginV2.update_floating_ip exiting: fip=%s" -msgstr "" - -#: neutron/plugins/midonet/plugin.py:1116 -#, python-format -msgid "" -"MidonetPluginV2.create_security_group called: " -"security_group=%(security_group)s default_sg=%(default_sg)s " -msgstr "" - -#: neutron/plugins/midonet/plugin.py:1145 -#, python-format -msgid "Failed to create MidoNet resources for sg %(sg)r" -msgstr "" - -#: neutron/plugins/midonet/plugin.py:1152 -#, python-format -msgid "MidonetPluginV2.create_security_group exiting: sg=%r" -msgstr "" - -#: neutron/plugins/midonet/plugin.py:1158 -#, python-format -msgid "MidonetPluginV2.delete_security_group called: id=%s" -msgstr "" - -#: neutron/plugins/midonet/plugin.py:1190 -#, python-format -msgid "" -"MidonetPluginV2.create_security_group_rule called: " -"security_group_rule=%(security_group_rule)r" -msgstr "" - -#: neutron/plugins/midonet/plugin.py:1200 -#, python-format -msgid "MidonetPluginV2.create_security_group_rule exiting: rule=%r" -msgstr "" - -#: neutron/plugins/midonet/plugin.py:1210 -#, python-format -msgid "MidonetPluginV2.delete_security_group_rule called: sg_rule_id=%s" -msgstr "" - -#: neutron/plugins/midonet/common/config.py:21 -msgid "MidoNet API server URI." -msgstr "" - -#: neutron/plugins/midonet/common/config.py:23 -msgid "MidoNet admin username." -msgstr "" - -#: neutron/plugins/midonet/common/config.py:26 -msgid "MidoNet admin password." -msgstr "" - -#: neutron/plugins/midonet/common/config.py:29 -msgid "ID of the project that MidoNet admin userbelongs to." -msgstr "" - -#: neutron/plugins/midonet/common/config.py:32 -msgid "Virtual provider router ID." -msgstr "" - -#: neutron/plugins/midonet/common/config.py:35 -msgid "Operational mode. Internal dev use only." -msgstr "" - -#: neutron/plugins/midonet/common/config.py:38 -msgid "Path to midonet host uuid file" -msgstr "" - -#: neutron/plugins/ml2/config.py:22 -msgid "" -"List of network type driver entrypoints to be loaded from the " -"neutron.ml2.type_drivers namespace." -msgstr "" - -#: neutron/plugins/ml2/config.py:26 -msgid "Ordered list of network_types to allocate as tenant networks." -msgstr "" - -#: neutron/plugins/ml2/config.py:30 -msgid "" -"An ordered list of networking mechanism driver entrypoints to be loaded " -"from the neutron.ml2.mechanism_drivers namespace." -msgstr "" - -#: neutron/plugins/ml2/config.py:35 -msgid "" -"An ordered list of extension driver entrypoints to be loaded from the " -"neutron.ml2.extension_drivers namespace." -msgstr "" - -#: neutron/plugins/ml2/db.py:54 -#, python-format -msgid "Added segment %(id)s of type %(network_type)s for network %(network_id)s" -msgstr "" - -#: neutron/plugins/ml2/db.py:197 neutron/plugins/ml2/db.py:249 -#: neutron/plugins/ml2/plugin.py:1046 -#, python-format -msgid "Multiple ports have port_id starting with %s" -msgstr "" - -#: neutron/plugins/ml2/db.py:203 -#, python-format -msgid "get_port_from_device_mac() called for mac %s" -msgstr "" - -#: neutron/plugins/ml2/db.py:245 -#, python-format -msgid "No binding found for port %(port_id)s" -msgstr "" - -#: neutron/plugins/ml2/managers.py:39 -#, python-format -msgid "Configured type driver names: %s" -msgstr "" - -#: neutron/plugins/ml2/managers.py:44 -#, python-format -msgid "Loaded type driver names: %s" -msgstr "" - -#: neutron/plugins/ml2/managers.py:52 -#, python-format -msgid "" -"Type driver '%(new_driver)s' ignored because type driver '%(old_driver)s'" -" is already registered for type '%(type)s'" -msgstr "" - -#: neutron/plugins/ml2/managers.py:60 -#, python-format -msgid "Registered types: %s" -msgstr "" - -#: neutron/plugins/ml2/managers.py:68 -#, python-format -msgid "No type driver for tenant network_type: %s. Service terminated!" -msgstr "" - -#: neutron/plugins/ml2/managers.py:72 -#, python-format -msgid "Tenant network_types: %s" -msgstr "" - -#: neutron/plugins/ml2/managers.py:88 -msgid "network_type required" -msgstr "" - -#: neutron/plugins/ml2/managers.py:127 -#, python-format -msgid "Network %s has no segments" -msgstr "" - -#: neutron/plugins/ml2/managers.py:145 -#, python-format -msgid "Initializing driver for type '%s'" -msgstr "" - -#: neutron/plugins/ml2/managers.py:169 neutron/plugins/ml2/managers.py:178 -#: neutron/plugins/ml2/drivers/type_tunnel.py:179 -#, python-format -msgid "network_type value '%s' not supported" -msgstr "" - -#: neutron/plugins/ml2/managers.py:204 neutron/plugins/ml2/managers.py:231 -#, python-format -msgid "Failed to release segment '%s' because network type is not supported." -msgstr "" - -#: neutron/plugins/ml2/managers.py:247 -#, python-format -msgid "Configured mechanism driver names: %s" -msgstr "" - -#: neutron/plugins/ml2/managers.py:253 -#, python-format -msgid "Loaded mechanism driver names: %s" -msgstr "" - -#: neutron/plugins/ml2/managers.py:265 -#, python-format -msgid "Registered mechanism drivers: %s" -msgstr "" - -#: neutron/plugins/ml2/managers.py:272 -#, python-format -msgid "Initializing mechanism driver '%s'" -msgstr "" - -#: neutron/plugins/ml2/managers.py:294 -#, python-format -msgid "Mechanism driver '%(name)s' failed in %(method)s" -msgstr "" - -#: neutron/plugins/ml2/managers.py:596 -#, python-format -msgid "Mechanism driver %s failed in bind_port" -msgstr "" - -#: neutron/plugins/ml2/managers.py:600 -#, python-format -msgid "Failed to bind port %(port)s on host %(host)s" -msgstr "" - -#: neutron/plugins/ml2/managers.py:613 -#, python-format -msgid "Configured extension driver names: %s" -msgstr "" - -#: neutron/plugins/ml2/managers.py:619 -#, python-format -msgid "Loaded extension driver names: %s" -msgstr "" - -#: neutron/plugins/ml2/managers.py:630 -#, python-format -msgid "Registered extension drivers: %s" -msgstr "" - -#: neutron/plugins/ml2/managers.py:636 -#, python-format -msgid "Initializing extension driver '%s'" -msgstr "" - -#: neutron/plugins/ml2/managers.py:644 -#, python-format -msgid "Got %(alias)s extension from driver '%(drv)s'" -msgstr "" - -#: neutron/plugins/ml2/managers.py:655 -#, python-format -msgid "Extension driver '%(name)s' failed in %(method)s" -msgstr "" - -#: neutron/plugins/ml2/managers.py:691 -#, python-format -msgid "Extended network dict for driver '%(drv)s'" -msgstr "" - -#: neutron/plugins/ml2/managers.py:698 -#, python-format -msgid "Extended subnet dict for driver '%(drv)s'" -msgstr "" - -#: neutron/plugins/ml2/managers.py:705 -#, python-format -msgid "Extended port dict for driver '%(drv)s'" -msgstr "" - -#: neutron/plugins/ml2/plugin.py:135 -msgid "Modular L2 Plugin initialization complete" -msgstr "" - -#: neutron/plugins/ml2/plugin.py:205 -msgid "binding:profile value too large" -msgstr "" - -#: neutron/plugins/ml2/plugin.py:261 -#, python-format -msgid "Failed to commit binding results for %(port)s after %(max)s tries" -msgstr "" - -#: neutron/plugins/ml2/plugin.py:267 -#, python-format -msgid "Attempt %(count)s to bind port %(port)s" -msgstr "" - -#: neutron/plugins/ml2/plugin.py:393 -#, python-format -msgid "Serialized vif_details DB value '%(value)s' for port %(port)s is invalid" -msgstr "" - -#: neutron/plugins/ml2/plugin.py:404 -#, python-format -msgid "Serialized profile DB value '%(value)s' for port %(port)s is invalid" -msgstr "" - -#: neutron/plugins/ml2/plugin.py:473 -#, python-format -msgid "" -"In _notify_port_updated(), no bound segment for port %(port_id)s on " -"network %(network_id)s" -msgstr "" - -#: neutron/plugins/ml2/plugin.py:507 -#, python-format -msgid "mechanism_manager.create_network_postcommit failed, deleting network '%s'" -msgstr "" - -#: neutron/plugins/ml2/plugin.py:570 -#, python-format -msgid "Deleting network %s" -msgstr "" - -#: neutron/plugins/ml2/plugin.py:591 -#, python-format -msgid "Ports to auto-delete: %s" -msgstr "" - -#: neutron/plugins/ml2/plugin.py:597 neutron/plugins/ml2/plugin.py:725 -msgid "Tenant-owned ports exist" -msgstr "" - -#: neutron/plugins/ml2/plugin.py:605 -#, python-format -msgid "Subnets to auto-delete: %s" -msgstr "" - -#: neutron/plugins/ml2/plugin.py:617 -#, python-format -msgid "Deleting network record %s" -msgstr "" - -#: neutron/plugins/ml2/plugin.py:622 neutron/plugins/ml2/plugin.py:737 -msgid "Committing transaction" -msgstr "" - -#: neutron/plugins/ml2/plugin.py:628 -msgid "A concurrent port creation has occurred" -msgstr "" - -#: neutron/plugins/ml2/plugin.py:637 -#, python-format -msgid "Exception auto-deleting port %s" -msgstr "" - -#: neutron/plugins/ml2/plugin.py:645 -#, python-format -msgid "Exception auto-deleting subnet %s" -msgstr "" - -#: neutron/plugins/ml2/plugin.py:654 -msgid "mechanism_manager.delete_network_postcommit failed" -msgstr "" - -#: neutron/plugins/ml2/plugin.py:670 -#, python-format -msgid "mechanism_manager.create_subnet_postcommit failed, deleting subnet '%s'" -msgstr "" - -#: neutron/plugins/ml2/plugin.py:702 -#, python-format -msgid "Deleting subnet %s" -msgstr "" - -#: neutron/plugins/ml2/plugin.py:719 -#, python-format -msgid "Ports to auto-deallocate: %s" -msgstr "" - -#: neutron/plugins/ml2/plugin.py:734 -msgid "Deleting subnet record" -msgstr "" - -#: neutron/plugins/ml2/plugin.py:753 -#, python-format -msgid "Exception deleting fixed_ip from port %s" -msgstr "" - -#: neutron/plugins/ml2/plugin.py:763 -msgid "mechanism_manager.delete_subnet_postcommit failed" -msgstr "" - -#: neutron/plugins/ml2/plugin.py:799 -#, python-format -msgid "mechanism_manager.create_port_postcommit failed, deleting port '%s'" -msgstr "" - -#: neutron/plugins/ml2/plugin.py:811 -#, python-format -msgid "_bind_port_if_needed failed, deleting port '%s'" -msgstr "" - -#: neutron/plugins/ml2/plugin.py:897 -#, python-format -msgid "No Host supplied to bind DVR Port %s" -msgstr "" - -#: neutron/plugins/ml2/plugin.py:961 -#: neutron/tests/unit/ml2/test_ml2_plugin.py:146 -#, python-format -msgid "Deleting port %s" -msgstr "" - -#: neutron/plugins/ml2/plugin.py:981 -#: neutron/tests/unit/ml2/test_ml2_plugin.py:147 -#, python-format -msgid "The port '%s' was deleted" -msgstr "" - -#: neutron/plugins/ml2/plugin.py:1031 -#, python-format -msgid "mechanism_manager.delete_port_postcommit failed for port %s" -msgstr "" - -#: neutron/plugins/ml2/plugin.py:1055 -#, python-format -msgid "Binding info for DVR port %s not found" -msgstr "" - -#: neutron/plugins/ml2/plugin.py:1081 -#, python-format -msgid "Port %(port)s updated up by agent not found" -msgstr "" - -#: neutron/plugins/ml2/plugin.py:1111 -#, python-format -msgid "Port %s not found during update" -msgstr "" - -#: neutron/plugins/ml2/rpc.py:66 -#, python-format -msgid "Device %(device)s requested by agent %(agent_id)s not found in database" -msgstr "" - -#: neutron/plugins/ml2/rpc.py:75 -#, python-format -msgid "" -"Device %(device)s requested by agent %(agent_id)s on network " -"%(network_id)s not bound, vif_type: %(vif_type)s" -msgstr "" - -#: neutron/plugins/ml2/rpc.py:103 -#, python-format -msgid "Returning: %s" -msgstr "" - -#: neutron/plugins/ml2/rpc.py:122 -#, python-format -msgid "Device %(device)s no longer exists at agent %(agent_id)s" -msgstr "" - -#: neutron/plugins/ml2/rpc.py:148 -#, python-format -msgid "Device %(device)s up at agent %(agent_id)s" -msgstr "" - -#: neutron/plugins/ml2/common/exceptions.py:23 -#, python-format -msgid "%(method)s failed." -msgstr "" - -#: neutron/plugins/ml2/drivers/helpers.py:140 -#, python-format -msgid "" -"Allocate %(type)s segment from pool failed after %(number)s failed " -"attempts" -msgstr "" - -#: neutron/plugins/ml2/drivers/mech_agent.py:54 -#, python-format -msgid "Attempting to bind port %(port)s on network %(network)s" -msgstr "" - -#: neutron/plugins/ml2/drivers/mech_agent.py:61 -#, python-format -msgid "Refusing to bind due to unsupported vnic_type: %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/mech_agent.py:65 -#, python-format -msgid "Checking agent: %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/mech_agent.py:70 -#, python-format -msgid "Bound using segment: %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/mech_agent.py:73 -#: neutron/plugins/ml2/drivers/mech_sriov/mech_driver.py:112 -#, python-format -msgid "Attempting to bind with dead agent: %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/mech_hyperv.py:44 -#, python-format -msgid "Checking segment: %(segment)s for mappings: %(mappings)s" -msgstr "" - -#: neutron/plugins/ml2/drivers/mech_linuxbridge.py:44 -#: neutron/plugins/ml2/drivers/mech_openvswitch.py:45 -#, python-format -msgid "" -"Checking segment: %(segment)s for mappings: %(mappings)s with " -"tunnel_types: %(tunnel_types)s" -msgstr "" - -#: neutron/plugins/ml2/drivers/mechanism_ncs.py:29 -msgid "HTTP URL of Tail-f NCS REST interface." -msgstr "" - -#: neutron/plugins/ml2/drivers/mechanism_ncs.py:31 -#: neutron/plugins/ml2/drivers/mechanism_odl.py:41 -msgid "HTTP username for authentication" -msgstr "" - -#: neutron/plugins/ml2/drivers/mechanism_ncs.py:33 -#: neutron/plugins/ml2/drivers/mechanism_odl.py:43 -msgid "HTTP password for authentication" -msgstr "" - -#: neutron/plugins/ml2/drivers/mechanism_ncs.py:35 -#: neutron/plugins/ml2/drivers/mechanism_odl.py:45 -msgid "HTTP timeout in seconds." -msgstr "" - -#: neutron/plugins/ml2/drivers/mechanism_odl.py:39 -msgid "HTTP URL of OpenDaylight REST interface." -msgstr "" - -#: neutron/plugins/ml2/drivers/mechanism_odl.py:47 -msgid "Tomcat session timeout in minutes." -msgstr "" - -#: neutron/plugins/ml2/drivers/type_flat.py:31 -msgid "" -"List of physical_network names with which flat networks can be created. " -"Use * to allow flat networks with arbitrary physical_network names." -msgstr "" - -#: neutron/plugins/ml2/drivers/type_flat.py:69 -msgid "Arbitrary flat physical_network names allowed" -msgstr "" - -#: neutron/plugins/ml2/drivers/type_flat.py:72 -msgid "physical network name is empty" -msgstr "" - -#: neutron/plugins/ml2/drivers/type_flat.py:75 -#, python-format -msgid "Allowable flat physical_network names: %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/type_flat.py:82 -msgid "ML2 FlatTypeDriver initialization complete" -msgstr "" - -#: neutron/plugins/ml2/drivers/type_flat.py:90 -msgid "physical_network required for flat provider network" -msgstr "" - -#: neutron/plugins/ml2/drivers/type_flat.py:93 -#, python-format -msgid "physical_network '%s' unknown for flat provider network" -msgstr "" - -#: neutron/plugins/ml2/drivers/type_flat.py:100 -#, python-format -msgid "%s prohibited for flat provider network" -msgstr "" - -#: neutron/plugins/ml2/drivers/type_flat.py:107 -#, python-format -msgid "Reserving flat network on physical network %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/type_flat.py:130 -#, python-format -msgid "No flat network found on physical network %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/type_gre.py:35 -msgid "" -"Comma-separated list of : tuples enumerating ranges of " -"GRE tunnel IDs that are available for tenant network allocation" -msgstr "" - -#: neutron/plugins/ml2/drivers/type_gre.py:75 -msgid "Failed to parse tunnel_id_ranges. Service terminated!" -msgstr "" - -#: neutron/plugins/ml2/drivers/type_gre.py:132 -#, python-format -msgid "Gre endpoint with ip %s already exists" -msgstr "" - -#: neutron/plugins/ml2/drivers/type_local.py:35 -msgid "ML2 LocalTypeDriver initialization complete" -msgstr "" - -#: neutron/plugins/ml2/drivers/type_local.py:49 -#, python-format -msgid "%s prohibited for local provider network" -msgstr "" - -#: neutron/plugins/ml2/drivers/type_tunnel.py:88 -#: neutron/plugins/openvswitch/ovs_neutron_plugin.py:437 -#, python-format -msgid "provider:physical_network specified for %s network" -msgstr "" - -#: neutron/plugins/ml2/drivers/type_tunnel.py:95 -#, python-format -msgid "%(key)s prohibited for %(tunnel)s provider network" -msgstr "" - -#: neutron/plugins/ml2/drivers/type_tunnel.py:166 -msgid "Network_type value needed by the ML2 plugin" -msgstr "" - -#: neutron/plugins/ml2/drivers/type_vlan.py:38 -msgid "" -"List of :: or " -"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." -msgstr "" - -#: neutron/plugins/ml2/drivers/type_vlan.py:93 -msgid "Failed to parse network_vlan_ranges. Service terminated!" -msgstr "" - -#: neutron/plugins/ml2/drivers/type_vlan.py:163 -msgid "VlanTypeDriver initialization complete" -msgstr "" - -#: neutron/plugins/ml2/drivers/type_vlan.py:173 -#, python-format -msgid "physical_network '%s' unknown for VLAN provider network" -msgstr "" - -#: neutron/plugins/ml2/drivers/type_vlan.py:178 -#, python-format -msgid "segmentation_id out of range (%(min)s through %(max)s)" -msgstr "" - -#: neutron/plugins/ml2/drivers/type_vlan.py:184 -msgid "segmentation_id requires physical_network for VLAN provider network" -msgstr "" - -#: neutron/plugins/ml2/drivers/type_vlan.py:192 -#, python-format -msgid "%s prohibited for VLAN provider network" -msgstr "" - -#: neutron/plugins/ml2/drivers/type_vlan.py:254 -#, python-format -msgid "No vlan_id %(vlan_id)s found on physical network %(physical_network)s" -msgstr "" - -#: neutron/plugins/ml2/drivers/type_vxlan.py:38 -msgid "" -"Comma-separated list of : tuples enumerating ranges of " -"VXLAN VNI IDs that are available for tenant network allocation" -msgstr "" - -#: neutron/plugins/ml2/drivers/type_vxlan.py:42 -msgid "Multicast group for VXLAN. If unset, disables VXLAN multicast mode." -msgstr "" - -#: neutron/plugins/ml2/drivers/type_vxlan.py:82 -msgid "Failed to parse vni_ranges. Service terminated!" -msgstr "" - -#: neutron/plugins/ml2/drivers/type_vxlan.py:132 -msgid "get_vxlan_endpoints() called" -msgstr "" - -#: neutron/plugins/ml2/drivers/type_vxlan.py:142 -#, python-format -msgid "add_vxlan_endpoint() called for ip %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/type_vxlan.py:151 -#, python-format -msgid "Vxlan endpoint with ip %s already exists" -msgstr "" - -#: neutron/plugins/ml2/drivers/arista/arista_l3_driver.py:29 -#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:32 -msgid "Unable to reach EOS" -msgstr "" - -#: neutron/plugins/ml2/drivers/arista/arista_l3_driver.py:129 -msgid "Required option primary_l3_host is not set" -msgstr "" - -#: neutron/plugins/ml2/drivers/arista/arista_l3_driver.py:135 -msgid "VRFs are not supported MLAG config mode" -msgstr "" - -#: neutron/plugins/ml2/drivers/arista/arista_l3_driver.py:139 -msgid "Required option secondary_l3_host is not set" -msgstr "" - -#: neutron/plugins/ml2/drivers/arista/arista_l3_driver.py:143 -msgid "Required option primary_l3_host_username is not set" -msgstr "" - -#: neutron/plugins/ml2/drivers/arista/arista_l3_driver.py:324 -#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:453 -#, python-format -msgid "Executing command on Arista EOS: %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/arista/arista_l3_driver.py:330 -#, python-format -msgid "Results of execution on Arista EOS: %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/arista/arista_l3_driver.py:333 -#, python-format -msgid "Error occured while trying to execute commands %(cmd)s on EOS %(host)s" -msgstr "" - -#: neutron/plugins/ml2/drivers/arista/config.py:31 -msgid "" -"Username for Arista EOS. This is required field. If not set, all " -"communications to Arista EOSwill fail." -msgstr "" - -#: neutron/plugins/ml2/drivers/arista/config.py:37 -msgid "" -"Password for Arista EOS. This is required field. If not set, all " -"communications to Arista EOS will fail." -msgstr "" - -#: neutron/plugins/ml2/drivers/arista/config.py:42 -msgid "" -"Arista EOS IP address. This is required field. If not set, all " -"communications to Arista EOSwill fail." -msgstr "" - -#: neutron/plugins/ml2/drivers/arista/config.py:47 -msgid "" -"Defines if hostnames are sent to Arista EOS as FQDNs " -"(\"node1.domain.com\") or as short names (\"node1\"). This is optional. " -"If not set, a value of \"True\" is assumed." -msgstr "" - -#: neutron/plugins/ml2/drivers/arista/config.py:53 -msgid "" -"Sync interval in seconds between Neutron plugin and EOS. This interval " -"defines how often the synchronization is performed. This is an optional " -"field. If not set, a value of 180 seconds is assumed." -msgstr "" - -#: neutron/plugins/ml2/drivers/arista/config.py:60 -msgid "" -"Defines Region Name that is assigned to this OpenStack Controller. This " -"is useful when multiple OpenStack/Neutron controllers are managing the " -"same Arista HW clusters. Note that this name must match with the region " -"name registered (or known) to keystone service. Authentication with " -"Keysotne is performed by EOS. This is optional. If not set, a value of " -"\"RegionOne\" is assumed." -msgstr "" - -#: neutron/plugins/ml2/drivers/arista/config.py:81 -msgid "" -"Username for Arista EOS. This is required field. If not set, all " -"communications to Arista EOS will fail" -msgstr "" - -#: neutron/plugins/ml2/drivers/arista/config.py:87 -msgid "" -"Password for Arista EOS. This is required field. If not set, all " -"communications to Arista EOS will fail" -msgstr "" - -#: neutron/plugins/ml2/drivers/arista/config.py:92 -msgid "" -"Arista EOS IP address. This is required field. If not set, all " -"communications to Arista EOS will fail" -msgstr "" - -#: neutron/plugins/ml2/drivers/arista/config.py:97 -msgid "" -"Arista EOS IP address for second Switch MLAGed with the first one. This " -"an optional field, however, if mlag_config flag is set, then this is " -"required. If not set, all communications to Arista EOS will fail" -msgstr "" - -#: neutron/plugins/ml2/drivers/arista/config.py:104 -msgid "" -"This flag is used indicate if Arista Switches are configured in MLAG " -"mode. If yes, all L3 config is pushed to both the switches automatically." -" If this flag is set to True, ensure to specify IP addresses of both " -"switches. This is optional. If not set, a value of \"False\" is assumed." -msgstr "" - -#: neutron/plugins/ml2/drivers/arista/config.py:113 -msgid "" -"A \"True\" value for this flag indicates to create a router in VRF. If " -"not set, all routers are created in default VRF.This is optional. If not " -"set, a value of \"False\" is assumed." -msgstr "" - -#: neutron/plugins/ml2/drivers/arista/config.py:120 -msgid "" -"Sync interval in seconds between L3 Service plugin and EOS. This interval" -" defines how often the synchronization is performed. This is an optional " -"field. If not set, a value of 180 seconds is assumed" -msgstr "" - -#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:76 -#, python-format -msgid "'timestamp' command '%s' is not available on EOS" -msgstr "" - -#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:330 -#, python-format -msgid "VM id %(vmid)s not found for port %(portid)s" -msgstr "" - -#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:349 -#, python-format -msgid "Unknown device owner: %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:468 -#, python-format -msgid "Error %(err)s while trying to execute commands %(cmd)s on EOS %(host)s" -msgstr "" - -#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:540 -msgid "Required option eapi_host is not set" -msgstr "" - -#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:544 -msgid "Required option eapi_username is not set" -msgstr "" - -#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:565 -msgid "Sync start trigger sent to EOS" -msgstr "" - -#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:582 -msgid "Syncing Neutron <-> EOS" -msgstr "" - -#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:588 -msgid "OpenStack and EOS are in sync!" -msgstr "" - -#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:610 -#, python-format -msgid "" -"No Tenants configured in Neutron DB. But %d tenants discovered in EOS " -"during synchronization.Entire EOS region is cleared" -msgstr "" - -#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:775 -#, python-format -msgid "Network %s is not created as it is not found inArista DB" -msgstr "" - -#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:789 -#, python-format -msgid "Network name changed to %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:817 -#, python-format -msgid "Network %s is not updated as it is not found inArista DB" -msgstr "" - -#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:909 -#, python-format -msgid "VM %s is not created as it is not found in Arista DB" -msgstr "" - -#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:924 -#, python-format -msgid "Port name changed to %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:974 -#, python-format -msgid "VM %s is not updated as it is not found in Arista DB" -msgstr "" - -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:37 -msgid "Allowed physical networks" -msgstr "" - -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:39 -msgid "OS Type of the switch" -msgstr "" - -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:41 -msgid "OS Version number" -msgstr "" - -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:92 -msgid "Virtual Fabric: enabled" -msgstr "" - -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:94 -msgid "Virtual Fabric: not enabled" -msgstr "" - -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:132 -msgid "" -"Brocade Mechanism: failed to create network, network cannot be created in" -" the configured physical network" -msgstr "" - -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:138 -msgid "" -"Brocade Mechanism: failed to create network, only network type vlan is " -"supported" -msgstr "" - -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:146 -msgid "Brocade Mechanism: failed to create network in db" -msgstr "" - -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:148 -msgid "Brocade Mechanism: create_network_precommit failed" -msgstr "" - -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:150 -#, python-format -msgid "" -"create network (precommit): %(network_id)s of network type = " -"%(network_type)s with vlan = %(vlan_id)s for tenant %(tenant_id)s" -msgstr "" - -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:162 -msgid "create_network_postcommit: called" -msgstr "" - -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:182 -msgid "Brocade NOS driver: failed in create network" -msgstr "" - -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:185 -msgid "Brocade Mechanism: create_network_postcommmit failed" -msgstr "" - -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:187 -#, python-format -msgid "" -"created network (postcommit): %(network_id)s of network type = " -"%(network_type)s with vlan = %(vlan_id)s for tenant %(tenant_id)s" -msgstr "" - -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:199 -msgid "delete_network_precommit: called" -msgstr "" - -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:212 -msgid "Brocade Mechanism: failed to delete network in db" -msgstr "" - -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:214 -msgid "Brocade Mechanism: delete_network_precommit failed" -msgstr "" - -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:216 -#, python-format -msgid "" -"delete network (precommit): %(network_id)s with vlan = %(vlan_id)s for " -"tenant %(tenant_id)s" -msgstr "" - -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:228 -msgid "delete_network_postcommit: called" -msgstr "" - -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:240 -msgid "Brocade NOS driver: failed to delete network" -msgstr "" - -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:242 -msgid "Brocade switch exception, delete_network_postcommit failed" -msgstr "" - -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:245 -#, python-format -msgid "" -"delete network (postcommit): %(network_id)s with vlan = %(vlan_id)s for " -"tenant %(tenant_id)s" -msgstr "" - -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:263 -msgid "create_port_precommit: called" -msgstr "" - -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:281 -msgid "Brocade Mechanism: failed to create port in db" -msgstr "" - -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:283 -msgid "Brocade Mechanism: create_port_precommit failed" -msgstr "" - -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:288 -msgid "create_port_postcommit: called" -msgstr "" - -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:312 -#, python-format -msgid "Brocade NOS driver: failed to associate mac %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:315 -msgid "Brocade switch exception: create_port_postcommit failed" -msgstr "" - -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:318 -#, python-format -msgid "" -"created port (postcommit): port_id=%(port_id)s network_id=%(network_id)s " -"tenant_id=%(tenant_id)s" -msgstr "" - -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:326 -msgid "delete_port_precommit: called" -msgstr "" - -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:335 -msgid "Brocade Mechanism: failed to delete port in db" -msgstr "" - -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:337 -msgid "Brocade Mechanism: delete_port_precommit failed" -msgstr "" - -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:342 -msgid "delete_port_postcommit: called" -msgstr "" - -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:366 -#, python-format -msgid "Brocade NOS driver: failed to dissociate MAC %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:369 -msgid "Brocade switch exception, delete_port_postcommit failed" -msgstr "" - -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:372 -#, python-format -msgid "" -"delete port (postcommit): port_id=%(port_id)s network_id=%(network_id)s " -"tenant_id=%(tenant_id)s" -msgstr "" - -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:379 -msgid "update_port_precommit(self: called" -msgstr "" - -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:383 -msgid "update_port_postcommit: called" -msgstr "" - -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:387 -msgid "create_subnetwork_precommit: called" -msgstr "" - -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:391 -msgid "create_subnetwork_postcommit: called" -msgstr "" - -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:395 -msgid "delete_subnetwork_precommit: called" -msgstr "" - -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:399 -msgid "delete_subnetwork_postcommit: called" -msgstr "" - -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:403 -msgid "update_subnet_precommit(self: called" -msgstr "" - -#: neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py:407 -msgid "update_subnet_postcommit: called" -msgstr "" - -#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:73 -msgid "" -"Brocade Switch IP address is not set, check config ml2_conf_brocade.ini " -"file" -msgstr "" - -#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:84 -msgid "Connect failed to switch" -msgstr "" - -#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:103 -#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:113 -#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:141 -#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:158 -#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:171 -#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:184 -#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:351 -#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:370 -#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:384 -#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:397 -#: neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py:410 -msgid "NETCONF error" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/config.py:28 -msgid "Prefix for APIC domain/names/profiles created" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/config.py:38 -msgid "An ordered list of host names or IP addresses of the APIC controller(s)." -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/config.py:41 -msgid "Username for the APIC controller" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/config.py:43 -msgid "Password for the APIC controller" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/config.py:46 -msgid "Name mapping strategy to use: use_uuid | use_name" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/config.py:48 -msgid "Use SSL to connect to the APIC controller" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/config.py:51 -msgid "Name for the domain created on APIC" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/config.py:54 -msgid "Name for the app profile used for Openstack" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/config.py:57 -msgid "Name for the vlan namespace to be used for Openstack" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/config.py:60 -msgid "Name of the node profile to be created" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/config.py:63 -msgid "Name of the entity profile to be created" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/config.py:66 -msgid "Name of the function profile to be created" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/config.py:69 -msgid "Name of the LACP profile to be created" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/config.py:72 -msgid "The uplink ports to check for ACI connectivity" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/config.py:75 -msgid "The switch pairs for VPC connectivity" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/config.py:78 -msgid "Range of VLAN's to be used for Openstack" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/config.py:81 -msgid "Setup root helper as rootwrap or sudo" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/config.py:84 -msgid "Synchronization interval in seconds" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/config.py:87 -msgid "Interval between agent status updates (in sec)" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/config.py:90 -msgid "Interval between agent poll for topology (in sec)" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/nexus/config.py:25 -msgid "The physical network managed by the switches." -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/nexus/exceptions.py:33 -#, python-format -msgid "Credential %(credential_name)s already exists for tenant %(tenant_id)s." -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/nexus/exceptions.py:54 -#, python-format -msgid "Nexus Port Binding (%(filters)s) is not present" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/nexus/exceptions.py:63 -#, python-format -msgid "Missing required field(s) to configure nexus switch: %(fields)s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/nexus/mech_cisco_nexus.py:45 -#, python-format -msgid "nexus_switches found = %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/nexus/nexus_db_v2.py:30 -msgid "get_nexusport_binding() called" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/nexus/nexus_db_v2.py:39 -msgid "get_nexusvlan_binding() called" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/nexus/nexus_db_v2.py:45 -msgid "add_nexusport_binding() called" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/nexus/nexus_db_v2.py:58 -msgid "remove_nexusport_binding() called" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/nexus/nexus_db_v2.py:74 -msgid "update_nexusport_binding called with no vlan" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/nexus/nexus_db_v2.py:76 -msgid "update_nexusport_binding called" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/nexus/nexus_db_v2.py:87 -msgid "get_nexusvm_bindings() called" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/nexus/nexus_db_v2.py:94 -msgid "get_port_vlan_switch_binding() called" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/nexus/nexus_db_v2.py:102 -#, python-format -msgid "" -"get_port_switch_bindings() called, port:'%(port_id)s', " -"switch:'%(switch_ip)s'" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/nexus/nexus_network_driver.py:123 -#: neutron/plugins/ml2/drivers/cisco/nexus/nexus_network_driver.py:162 -#: neutron/plugins/ml2/drivers/cisco/nexus/nexus_network_driver.py:171 -#, python-format -msgid "NexusDriver: %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/nexus/nexus_network_driver.py:178 -#, python-format -msgid "NexusDriver created VLAN: %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/freescale/config.py:29 -msgid "CRD service Username." -msgstr "" - -#: neutron/plugins/ml2/drivers/freescale/config.py:32 -msgid "CRD Service Password." -msgstr "" - -#: neutron/plugins/ml2/drivers/freescale/config.py:34 -msgid "CRD Tenant Name." -msgstr "" - -#: neutron/plugins/ml2/drivers/freescale/config.py:37 -msgid "CRD Auth URL." -msgstr "" - -#: neutron/plugins/ml2/drivers/freescale/config.py:40 -msgid "URL for connecting to CRD service." -msgstr "" - -#: neutron/plugins/ml2/drivers/freescale/config.py:43 -msgid "Timeout value for connecting to CRD service in seconds." -msgstr "" - -#: neutron/plugins/ml2/drivers/freescale/config.py:47 -msgid "Region name for connecting to CRD Service in admin context." -msgstr "" - -#: neutron/plugins/ml2/drivers/freescale/config.py:51 -msgid "If set, ignore any SSL validation issues." -msgstr "" - -#: neutron/plugins/ml2/drivers/freescale/config.py:54 -msgid "Auth strategy for connecting to neutron in admin context." -msgstr "" - -#: neutron/plugins/ml2/drivers/freescale/config.py:57 -msgid "Location of ca certificates file to use for CRD client requests." -msgstr "" - -#: neutron/plugins/ml2/drivers/freescale/mechanism_fslsdn.py:38 -msgid "Initializing CRD client... " -msgstr "" - -#: neutron/plugins/ml2/drivers/l2pop/config.py:21 -msgid "" -"Delay within which agent is expected to update existing ports whent it " -"restarts" -msgstr "" - -#: neutron/plugins/ml2/drivers/l2pop/mech_driver.py:38 -msgid "Experimental L2 population driver" -msgstr "" - -#: neutron/plugins/ml2/drivers/l2pop/mech_driver.py:163 -msgid "Unable to retrieve the agent ip, check the agent configuration." -msgstr "" - -#: neutron/plugins/ml2/drivers/l2pop/mech_driver.py:169 -#, python-format -msgid "Port %(port)s updated by agent %(agent)s isn't bound to any segment" -msgstr "" - -#: neutron/plugins/ml2/drivers/l2pop/mech_driver.py:222 -#, python-format -msgid "" -"Unable to retrieve the agent ip, check the agent %(agent_host)s " -"configuration." -msgstr "" - -#: neutron/plugins/ml2/drivers/l2pop/rpc.py:36 -#, python-format -msgid "" -"Fanout notify l2population agents at %(topic)s the message %(method)s " -"with %(fdb_entries)s" -msgstr "" - -#: neutron/plugins/ml2/drivers/l2pop/rpc.py:47 -#, python-format -msgid "" -"Notify l2population agent %(host)s at %(topic)s the message %(method)s " -"with %(fdb_entries)s" -msgstr "" - -#: neutron/plugins/ml2/drivers/mech_bigswitch/driver.py:52 -msgid "Initializing driver" -msgstr "" - -#: neutron/plugins/ml2/drivers/mech_bigswitch/driver.py:70 -msgid "Initialization done" -msgstr "" - -#: neutron/plugins/ml2/drivers/mech_bigswitch/driver.py:137 -msgid "Ignoring port notification to controller because of missing host ID." -msgstr "" - -#: neutron/plugins/ml2/drivers/mech_bigswitch/driver.py:206 -#, python-format -msgid "No cache entry for host %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/mech_bigswitch/driver.py:211 -#, python-format -msgid "Expired cache entry for host %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/mech_nuage/driver.py:91 -#, python-format -msgid "" -"Refusing to bind port for segment ID %(id)s, segment %(seg)s, phys net " -"%(physnet)s, and network type %(nettype)s" -msgstr "" - -#: neutron/plugins/ml2/drivers/mech_sriov/mech_driver.py:31 -msgid "" -"Supported PCI vendor devices, defined by vendor_id:product_id according " -"to the PCI ID Repository. Default enables support for Intel and Mellanox " -"SR-IOV capable NICs" -msgstr "" - -#: neutron/plugins/ml2/drivers/mech_sriov/mech_driver.py:37 -msgid "SRIOV neutron agent is required for port binding" -msgstr "" - -#: neutron/plugins/ml2/drivers/mech_sriov/mech_driver.py:86 -msgid "Failed to parse supported PCI vendor devices" -msgstr "" - -#: neutron/plugins/ml2/drivers/mech_sriov/mech_driver.py:87 -msgid "Parsing supported pci_vendor_devs failed" -msgstr "" - -#: neutron/plugins/ml2/drivers/mech_sriov/mech_driver.py:176 -#, python-format -msgid "Invalid pci_vendor_info: '%s'" -msgstr "" - -#: neutron/plugins/ml2/drivers/mech_sriov/mech_driver.py:179 -#, python-format -msgid "Missing vendor_id in: '%s'" -msgstr "" - -#: neutron/plugins/ml2/drivers/mech_sriov/mech_driver.py:182 -#, python-format -msgid "Missing product_id in: '%s'" -msgstr "" - -#: neutron/plugins/ml2/drivers/mlnx/config.py:24 -#: neutron/plugins/mlnx/common/config.py:48 -msgid "Type of VM network interface: mlnx_direct or hostdev" -msgstr "" - -#: neutron/plugins/ml2/drivers/mlnx/mech_mlnx.py:54 -#, python-format -msgid "Checking segment: %(segment)s for mappings: %(mappings)s " -msgstr "" - -#: neutron/plugins/mlnx/agent_notify_api.py:48 -msgid "Sending delete network message" -msgstr "" - -#: neutron/plugins/mlnx/agent_notify_api.py:56 -msgid "Sending update port message" -msgstr "" - -#: neutron/plugins/mlnx/mlnx_plugin.py:118 -msgid "Mellanox Embedded Switch Plugin initialisation complete" -msgstr "" - -#: neutron/plugins/mlnx/mlnx_plugin.py:158 -#, python-format -msgid "Invalid physical network type %(type)s.Server terminated!" -msgstr "" - -#: neutron/plugins/mlnx/mlnx_plugin.py:165 -#, python-format -msgid "Parsing physical_network_type failed: %s. Server terminated!" -msgstr "" - -#: neutron/plugins/mlnx/mlnx_plugin.py:170 -#, python-format -msgid "" -"Invalid physical network type %(type)s for network %(net)s. Server " -"terminated!" -msgstr "" - -#: neutron/plugins/mlnx/mlnx_plugin.py:174 -#, python-format -msgid "Physical Network type mappings: %s" -msgstr "" - -#: neutron/plugins/mlnx/mlnx_plugin.py:182 -#: neutron/plugins/openvswitch/ovs_neutron_plugin.py:364 -#, python-format -msgid "%s. Server terminated!" -msgstr "" - -#: neutron/plugins/mlnx/mlnx_plugin.py:320 -#, python-format -msgid "Unsupported vnic type %(vnic_type)s for physical network type %(net_type)s" -msgstr "" - -#: neutron/plugins/mlnx/mlnx_plugin.py:324 -msgid "Invalid vnic_type on port_create" -msgstr "" - -#: neutron/plugins/mlnx/mlnx_plugin.py:326 -msgid "vnic_type is not defined in port profile" -msgstr "" - -#: neutron/plugins/mlnx/mlnx_plugin.py:370 -msgid "Update network" -msgstr "" - -#: neutron/plugins/mlnx/mlnx_plugin.py:383 -msgid "Delete network" -msgstr "" - -#: neutron/plugins/mlnx/mlnx_plugin.py:431 -#, python-format -msgid "create_port with %s" -msgstr "" - -#: neutron/plugins/mlnx/rpc_callbacks.py:97 -#, python-format -msgid "Device %(device)s up %(agent_id)s" -msgstr "" - -#: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:57 -#, python-format -msgid "Agent cache inconsistency - port id is not stored for %s" -msgstr "" - -#: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:72 -#, python-format -msgid "Network %s not defined on Agent." -msgstr "" - -#: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:85 -#, python-format -msgid "Network %s is not available on this agent" -msgstr "" - -#: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:96 -#, python-format -msgid "Connecting port %s" -msgstr "" - -#: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:106 -#, python-format -msgid "Binding Segmentation ID %(seg_id)sto eSwitch for vNIC mac_address %(mac)s" -msgstr "" - -#: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:125 -#, python-format -msgid "Port_mac %s is not available on this agent" -msgstr "" - -#: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:132 -msgid "Creating VLAN Network" -msgstr "" - -#: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:134 -#, python-format -msgid "Unknown network type %(network_type)s for network %(network_id)s" -msgstr "" - -#: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:166 -msgid "Invalid Network ID, cannot remove Network" -msgstr "" - -#: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:168 -#, python-format -msgid "Delete network %s" -msgstr "" - -#: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:311 -#, python-format -msgid "Adding or updating port with mac %s" -msgstr "" - -#: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:314 -#, python-format -msgid "Port %s updated" -msgstr "" - -#: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:339 -#: neutron/plugins/sriovnicagent/sriov_nic_agent.py:226 -#, python-format -msgid "Removing device with mac_address %s" -msgstr "" - -#: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:347 -#: neutron/plugins/sriovnicagent/sriov_nic_agent.py:233 -#, python-format -msgid "Removing port failed for device %(device)s due to %(exc)s" -msgstr "" - -#: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:364 -msgid "eSwitch Agent Started!" -msgstr "" - -#: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:375 -msgid "" -"Request timeout in agent event loop eSwitchD is not responding - " -"exiting..." -msgstr "" - -#: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:415 -#, python-format -msgid "Failed on Agent initialisation : %s. Agent terminated!" -msgstr "" - -#: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:420 -msgid "Agent initialised successfully, now running... " -msgstr "" - -#: neutron/plugins/mlnx/agent/utils.py:30 -msgid "" -"Failed to import eventlet.green.zmq. Won't connect to eSwitchD - " -"exiting..." -msgstr "" - -#: neutron/plugins/mlnx/agent/utils.py:74 -#, python-format -msgid "Action %(action)s failed: %(reason)s" -msgstr "" - -#: neutron/plugins/mlnx/agent/utils.py:76 -#, python-format -msgid "Unknown operation status %s" -msgstr "" - -#: neutron/plugins/mlnx/agent/utils.py:81 -msgid "get_attached_vnics" -msgstr "" - -#: neutron/plugins/mlnx/agent/utils.py:88 -#, python-format -msgid "" -"Set Vlan %(segmentation_id)s on Port %(port_mac)s on Fabric " -"%(physical_network)s" -msgstr "" - -#: neutron/plugins/mlnx/agent/utils.py:101 -#, python-format -msgid "Define Fabric %(fabric)s on interface %(ifc)s" -msgstr "" - -#: neutron/plugins/mlnx/agent/utils.py:110 -#, python-format -msgid "Port Up for %(port_mac)s on fabric %(fabric)s" -msgstr "" - -#: neutron/plugins/mlnx/agent/utils.py:119 -#, python-format -msgid "Port Down for %(port_mac)s on fabric %(fabric)s" -msgstr "" - -#: neutron/plugins/mlnx/agent/utils.py:128 -#, python-format -msgid "Port Release for %(port_mac)s on fabric %(fabric)s" -msgstr "" - -#: neutron/plugins/mlnx/common/comm_utils.py:57 -#, python-format -msgid "Request timeout - call again after %s seconds" -msgstr "" - -#: neutron/plugins/mlnx/common/config.py:34 -msgid "" -"List of : with " -"physical_network_type is either eth or ib" -msgstr "" - -#: neutron/plugins/mlnx/common/config.py:37 -msgid "Physical network type for provider network (eth or ib)" -msgstr "" - -#: neutron/plugins/mlnx/common/config.py:52 -msgid "eswitch daemon end point" -msgstr "" - -#: neutron/plugins/mlnx/common/config.py:54 -msgid "" -"The number of milliseconds the agent will wait for response on request to" -" daemon." -msgstr "" - -#: neutron/plugins/mlnx/common/config.py:57 -msgid "" -"The number of retries the agent will send request to daemon before giving" -" up" -msgstr "" - -#: neutron/plugins/mlnx/common/config.py:60 -msgid "" -"backoff rate multiplier for waiting period between retries for request to" -" daemon, i.e. value of 2 will double the request timeout each retry" -msgstr "" - -#: neutron/plugins/mlnx/common/exceptions.py:20 -#, python-format -msgid "Mlnx Exception: %(err_msg)s" -msgstr "" - -#: neutron/plugins/mlnx/common/exceptions.py:24 -msgid "Request Timeout: no response from eSwitchD" -msgstr "" - -#: neutron/plugins/mlnx/common/exceptions.py:28 -#, python-format -msgid "Operation Failed: %(err_msg)s" -msgstr "" - -#: neutron/plugins/mlnx/db/mlnx_db_v2.py:42 -#: neutron/plugins/mlnx/db/mlnx_db_v2.py:63 -#, python-format -msgid "Removing vlan %(seg_id)s on physical network %(net)s from pool" -msgstr "" - -#: neutron/plugins/mlnx/db/mlnx_db_v2.py:119 -#, python-format -msgid "Reserving vlan %(seg_id)s on physical network %(net)s from pool" -msgstr "" - -#: neutron/plugins/mlnx/db/mlnx_db_v2.py:138 -#, python-format -msgid "" -"Reserving specific vlan %(seg_id)s on physical network %(phy_net)s from " -"pool" -msgstr "" - -#: neutron/plugins/mlnx/db/mlnx_db_v2.py:143 -#, python-format -msgid "" -"Reserving specific vlan %(seg_id)s on physical network %(phy_net)s " -"outside pool" -msgstr "" - -#: neutron/plugins/mlnx/db/mlnx_db_v2.py:170 -#, python-format -msgid "Releasing vlan %(seg_id)s on physical network %(phy_net)s to pool" -msgstr "" - -#: neutron/plugins/mlnx/db/mlnx_db_v2.py:175 -#, python-format -msgid "Releasing vlan %(seg_id)s on physical network %(phy_net)s outside pool" -msgstr "" - -#: neutron/plugins/mlnx/db/mlnx_db_v2.py:181 -#, python-format -msgid "vlan_id %(seg_id)s on physical network %(phy_net)s not found" -msgstr "" - -#: neutron/plugins/mlnx/db/mlnx_db_v2.py:239 -msgid "Get_port_from_device_mac() called" -msgstr "" - -#: neutron/plugins/mlnx/db/mlnx_db_v2.py:247 -#, python-format -msgid "Set_port_status as %s called" -msgstr "" - -#: neutron/plugins/nec/nec_plugin.py:204 -#, python-format -msgid "_cleanup_ofc_tenant: No OFC tenant for %s" -msgstr "" - -#: neutron/plugins/nec/nec_plugin.py:207 -#, python-format -msgid "delete_ofc_tenant() failed due to %s" -msgstr "" - -#: neutron/plugins/nec/nec_plugin.py:223 -msgid "activate_port_if_ready(): skip, port.admin_state_up is False." -msgstr "" - -#: neutron/plugins/nec/nec_plugin.py:227 -msgid "activate_port_if_ready(): skip, network.admin_state_up is False." -msgstr "" - -#: neutron/plugins/nec/nec_plugin.py:231 -msgid "activate_port_if_ready(): skip, no portinfo for this port." -msgstr "" - -#: neutron/plugins/nec/nec_plugin.py:235 -msgid "activate_port_if_ready(): skip, ofc_port already exists." -msgstr "" - -#: neutron/plugins/nec/nec_plugin.py:243 -#, python-format -msgid "create_ofc_port() failed due to %s" -msgstr "" - -#: neutron/plugins/nec/nec_plugin.py:256 -#, python-format -msgid "deactivate_port(): skip, ofc_port for port=%s does not exist." -msgstr "" - -#: neutron/plugins/nec/nec_plugin.py:275 -#, python-format -msgid "deactivate_port(): OFC port for port=%s is already removed." -msgstr "" - -#: neutron/plugins/nec/nec_plugin.py:283 -#, python-format -msgid "Failed to delete port=%(port)s from OFC: %(exc)s" -msgstr "" - -#: neutron/plugins/nec/nec_plugin.py:302 -#, python-format -msgid "NECPluginV2.create_network() called, network=%s ." -msgstr "" - -#: neutron/plugins/nec/nec_plugin.py:319 -#, python-format -msgid "Failed to create network id=%(id)s on OFC: %(exc)s" -msgstr "" - -#: neutron/plugins/nec/nec_plugin.py:335 -#, python-format -msgid "NECPluginV2.update_network() called, id=%(id)s network=%(network)s ." -msgstr "" - -#: neutron/plugins/nec/nec_plugin.py:379 -#, python-format -msgid "NECPluginV2.delete_network() called, id=%s ." -msgstr "" - -#: neutron/plugins/nec/nec_plugin.py:413 -#, python-format -msgid "delete_network() failed due to %s" -msgstr "" - -#: neutron/plugins/nec/nec_plugin.py:554 -#, python-format -msgid "NECPluginV2.create_port() called, port=%s ." -msgstr "" - -#: neutron/plugins/nec/nec_plugin.py:618 -#, python-format -msgid "NECPluginV2.update_port() called, id=%(id)s port=%(port)s ." -msgstr "" - -#: neutron/plugins/nec/nec_plugin.py:646 -#, python-format -msgid "NECPluginV2.delete_port() called, id=%s ." -msgstr "" - -#: neutron/plugins/nec/nec_plugin.py:713 -#, python-format -msgid "NECPluginV2RPCCallbacks.update_ports() called, kwargs=%s ." -msgstr "" - -#: neutron/plugins/nec/nec_plugin.py:723 -#, python-format -msgid "" -"update_ports(): ignore unchanged portinfo in port_added message " -"(port_id=%s)." -msgstr "" - -#: neutron/plugins/nec/nec_plugin.py:743 -#, python-format -msgid "" -"update_ports(): ignore port_removed message due to portinfo for " -"port_id=%s was not registered" -msgstr "" - -#: neutron/plugins/nec/nec_plugin.py:748 -#, python-format -msgid "" -"update_ports(): ignore port_removed message received from different host " -"(registered_datapath_id=%(registered)s, " -"received_datapath_id=%(received)s)." -msgstr "" - -#: neutron/plugins/nec/nec_router.py:56 -#, python-format -msgid "RouterMixin.create_router() called, router=%s ." -msgstr "" - -#: neutron/plugins/nec/nec_router.py:82 -#, python-format -msgid "RouterMixin.update_router() called, id=%(id)s, router=%(router)s ." -msgstr "" - -#: neutron/plugins/nec/nec_router.py:100 -#, python-format -msgid "RouterMixin.delete_router() called, id=%s." -msgstr "" - -#: neutron/plugins/nec/nec_router.py:119 -#, python-format -msgid "" -"RouterMixin.add_router_interface() called, id=%(id)s, " -"interface=%(interface)s." -msgstr "" - -#: neutron/plugins/nec/nec_router.py:126 -#, python-format -msgid "" -"RouterMixin.remove_router_interface() called, id=%(id)s, " -"interface=%(interface)s." -msgstr "" - -#: neutron/plugins/nec/nec_router.py:310 -#, python-format -msgid "" -"OFC does not support router with provider=%(provider)s, so removed it " -"from supported provider (new router driver map=%(driver_map)s)" -msgstr "" - -#: neutron/plugins/nec/nec_router.py:318 -#, python-format -msgid "" -"default_router_provider %(default)s is supported! Please specify one of " -"%(supported)s" -msgstr "" - -#: neutron/plugins/nec/nec_router.py:332 -#, python-format -msgid "Enabled router drivers: %s" -msgstr "" - -#: neutron/plugins/nec/nec_router.py:335 -#, python-format -msgid "" -"No router provider is enabled. neutron-server terminated! " -"(supported=%(supported)s, configured=%(config)s)" -msgstr "" - -#: neutron/plugins/nec/packet_filter.py:39 -msgid "Disabled packet-filter extension." -msgstr "" - -#: neutron/plugins/nec/packet_filter.py:44 -#, python-format -msgid "create_packet_filter() called, packet_filter=%s ." -msgstr "" - -#: neutron/plugins/nec/packet_filter.py:60 -#, python-format -msgid "update_packet_filter() called, id=%(id)s packet_filter=%(packet_filter)s ." -msgstr "" - -#: neutron/plugins/nec/packet_filter.py:133 -#: neutron/plugins/nec/packet_filter.py:186 -#, python-format -msgid "Failed to create packet_filter id=%(id)s on OFC: %(exc)s" -msgstr "" - -#: neutron/plugins/nec/packet_filter.py:143 -#, python-format -msgid "delete_packet_filter() called, id=%s ." -msgstr "" - -#: neutron/plugins/nec/packet_filter.py:161 -#, python-format -msgid "activate_packet_filter_if_ready() called, packet_filter=%s." -msgstr "" - -#: neutron/plugins/nec/packet_filter.py:170 -#, python-format -msgid "" -"activate_packet_filter_if_ready(): skip pf_id=%s, " -"packet_filter.admin_state_up is False." -msgstr "" - -#: neutron/plugins/nec/packet_filter.py:173 -#, python-format -msgid "" -"activate_packet_filter_if_ready(): skip pf_id=%s, no portinfo for the " -"in_port." -msgstr "" - -#: neutron/plugins/nec/packet_filter.py:176 -msgid "" -"_activate_packet_filter_if_ready(): skip, ofc_packet_filter already " -"exists." -msgstr "" - -#: neutron/plugins/nec/packet_filter.py:179 -#, python-format -msgid "activate_packet_filter_if_ready(): create packet_filter id=%s on OFC." -msgstr "" - -#: neutron/plugins/nec/packet_filter.py:199 -#, python-format -msgid "deactivate_packet_filter_if_ready() called, packet_filter=%s." -msgstr "" - -#: neutron/plugins/nec/packet_filter.py:204 -#, python-format -msgid "" -"deactivate_packet_filter(): skip, Not found OFC Mapping for packet_filter" -" id=%s." -msgstr "" - -#: neutron/plugins/nec/packet_filter.py:209 -#, python-format -msgid "deactivate_packet_filter(): deleting packet_filter id=%s from OFC." -msgstr "" - -#: neutron/plugins/nec/packet_filter.py:218 -#, python-format -msgid "Failed to delete packet_filter id=%(id)s from OFC: %(exc)s" -msgstr "" - -#: neutron/plugins/nec/packet_filter.py:249 -#, python-format -msgid "Error occurred while disabling packet filter(s) for port %s" -msgstr "" - -#: neutron/plugins/nec/router_drivers.py:123 -#, python-format -msgid "create_router() failed due to %s" -msgstr "" - -#: neutron/plugins/nec/router_drivers.py:152 -#, python-format -msgid "_update_ofc_routes() failed due to %s" -msgstr "" - -#: neutron/plugins/nec/router_drivers.py:167 -#, python-format -msgid "delete_router() failed due to %s" -msgstr "" - -#: neutron/plugins/nec/router_drivers.py:178 -#, python-format -msgid "" -"RouterOpenFlowDriver.add_interface(): the requested port has no subnet. " -"add_interface() is skipped. router_id=%(id)s, port=%(port)s)" -msgstr "" - -#: neutron/plugins/nec/router_drivers.py:198 -#, python-format -msgid "add_router_interface() failed due to %s" -msgstr "" - -#: neutron/plugins/nec/router_drivers.py:216 -#, python-format -msgid "delete_router_interface() failed due to %s" -msgstr "" - -#: neutron/plugins/nec/agent/nec_neutron_agent.py:51 -#, python-format -msgid "Update ports: added=%(added)s, removed=%(removed)s" -msgstr "" - -#: neutron/plugins/nec/agent/nec_neutron_agent.py:74 -#: neutron/plugins/oneconvergence/agent/nvsd_neutron_agent.py:49 -#, python-format -msgid "port_update received: %s" -msgstr "" - -#: neutron/plugins/nec/agent/nec_neutron_agent.py:218 -msgid "No port changed." -msgstr "" - -#: neutron/plugins/nec/common/config.py:34 -msgid "Host to connect to." -msgstr "" - -#: neutron/plugins/nec/common/config.py:36 -msgid "Base URL of OFC REST API. It is prepended to each API request." -msgstr "" - -#: neutron/plugins/nec/common/config.py:39 -msgid "Port to connect to." -msgstr "" - -#: neutron/plugins/nec/common/config.py:41 -msgid "Driver to use." -msgstr "" - -#: neutron/plugins/nec/common/config.py:43 -msgid "Enable packet filter." -msgstr "" - -#: neutron/plugins/nec/common/config.py:45 -msgid "Use SSL to connect." -msgstr "" - -#: neutron/plugins/nec/common/config.py:47 -msgid "Location of key file." -msgstr "" - -#: neutron/plugins/nec/common/config.py:49 -msgid "Location of certificate file." -msgstr "" - -#: neutron/plugins/nec/common/config.py:51 -msgid "Disable SSL certificate verification." -msgstr "" - -#: neutron/plugins/nec/common/config.py:53 -msgid "" -"Maximum attempts per OFC API request. NEC plugin retries API request to " -"OFC when OFC returns ServiceUnavailable (503). The value must be greater " -"than 0." -msgstr "" - -#: neutron/plugins/nec/common/config.py:62 -msgid "Default router provider to use." -msgstr "" - -#: neutron/plugins/nec/common/config.py:65 -msgid "List of enabled router providers." -msgstr "" - -#: neutron/plugins/nec/common/exceptions.py:19 -#, python-format -msgid "An OFC exception has occurred: %(reason)s" -msgstr "" - -#: neutron/plugins/nec/common/exceptions.py:29 -#, python-format -msgid "The specified OFC resource (%(resource)s) is not found." -msgstr "" - -#: neutron/plugins/nec/common/exceptions.py:33 -#, python-format -msgid "An exception occurred in NECPluginV2 DB: %(reason)s" -msgstr "" - -#: neutron/plugins/nec/common/exceptions.py:37 -#, python-format -msgid "" -"Neutron-OFC resource mapping for %(resource)s %(neutron_id)s is not " -"found. It may be deleted during processing." -msgstr "" - -#: neutron/plugins/nec/common/exceptions.py:43 -#, python-format -msgid "OFC returns Server Unavailable (503) (Retry-After=%(retry_after)s)" -msgstr "" - -#: neutron/plugins/nec/common/exceptions.py:52 -#, python-format -msgid "PortInfo %(id)s could not be found" -msgstr "" - -#: neutron/plugins/nec/common/exceptions.py:56 -msgid "" -"Invalid input for operation: datapath_id should be a hex string with at " -"most 8 bytes" -msgstr "" - -#: neutron/plugins/nec/common/exceptions.py:62 -msgid "Invalid input for operation: port_no should be [0:65535]" -msgstr "" - -#: neutron/plugins/nec/common/exceptions.py:67 -#, python-format -msgid "Router (provider=%(provider)s) does not support an external network" -msgstr "" - -#: neutron/plugins/nec/common/exceptions.py:72 -#, python-format -msgid "Provider %(provider)s could not be found" -msgstr "" - -#: neutron/plugins/nec/common/exceptions.py:76 -#, python-format -msgid "Cannot create more routers with provider=%(provider)s" -msgstr "" - -#: neutron/plugins/nec/common/exceptions.py:80 -#, python-format -msgid "" -"Provider of Router %(router_id)s is %(provider)s. This operation is " -"supported only for router provider %(expected_provider)s." -msgstr "" - -#: neutron/plugins/nec/common/ofc_client.py:53 -#, python-format -msgid "Operation on OFC failed: %(status)s%(msg)s" -msgstr "" - -#: neutron/plugins/nec/common/ofc_client.py:77 -#, python-format -msgid "Client request: %(host)s:%(port)s %(method)s %(action)s [%(body)s]" -msgstr "" - -#: neutron/plugins/nec/common/ofc_client.py:86 -#, python-format -msgid "OFC returns [%(status)s:%(data)s]" -msgstr "" - -#: neutron/plugins/nec/common/ofc_client.py:103 -#, python-format -msgid "OFC returns ServiceUnavailable (retry-after=%s)" -msgstr "" - -#: neutron/plugins/nec/common/ofc_client.py:107 -#, python-format -msgid "Specified resource %s does not exist on OFC " -msgstr "" - -#: neutron/plugins/nec/common/ofc_client.py:111 -#, python-format -msgid "Operation on OFC failed: status=%(status)s, detail=%(detail)s" -msgstr "" - -#: neutron/plugins/nec/common/ofc_client.py:114 -msgid "Operation on OFC failed" -msgstr "" - -#: neutron/plugins/nec/common/ofc_client.py:123 -#, python-format -msgid "Failed to connect OFC : %s" -msgstr "" - -#: neutron/plugins/nec/common/ofc_client.py:139 -#, python-format -msgid "Waiting for %s seconds due to OFC Service_Unavailable." -msgstr "" - -#: neutron/plugins/nec/db/api.py:102 -#, python-format -msgid "del_ofc_item(): NotFound item (resource=%(resource)s, id=%(id)s) " -msgstr "" - -#: neutron/plugins/nec/db/api.py:136 -#, python-format -msgid "del_portinfo(): NotFound portinfo for port_id: %s" -msgstr "" - -#: neutron/plugins/nec/db/api.py:157 -#: neutron/plugins/openvswitch/ovs_db_v2.py:317 -#, python-format -msgid "get_port_with_securitygroups() called:port_id=%s" -msgstr "" - -#: neutron/plugins/nec/db/router.py:85 -#, python-format -msgid "Add provider binding (router=%(router_id)s, provider=%(provider)s)" -msgstr "" - -#: neutron/plugins/nec/drivers/__init__.py:35 -#, python-format -msgid "Loading OFC driver: %s" -msgstr "" - -#: neutron/plugins/nec/drivers/pfc.py:31 -#, python-format -msgid "OFC %(resource)s ID has an invalid format: %(ofc_id)s" -msgstr "" - -#: neutron/plugins/nec/extensions/packetfilter.py:30 -msgid "Number of packet_filters allowed per tenant, -1 for unlimited" -msgstr "" - -#: neutron/plugins/nec/extensions/packetfilter.py:37 -#, python-format -msgid "PacketFilter %(id)s could not be found" -msgstr "" - -#: neutron/plugins/nec/extensions/packetfilter.py:41 -#, python-format -msgid "" -"IP version %(version)s is not supported for %(field)s (%(value)s is " -"specified)" -msgstr "" - -#: neutron/plugins/nec/extensions/packetfilter.py:46 -#, python-format -msgid "Packet Filter priority should be %(min)s-%(max)s (included)" -msgstr "" - -#: neutron/plugins/nec/extensions/packetfilter.py:50 -#, python-format -msgid "%(field)s field cannot be updated" -msgstr "" - -#: neutron/plugins/nec/extensions/packetfilter.py:54 -#, python-format -msgid "" -"The backend does not support duplicated priority. Priority %(priority)s " -"is in use" -msgstr "" - -#: neutron/plugins/nec/extensions/packetfilter.py:59 -#, python-format -msgid "" -"Ether Type '%(eth_type)s' conflicts with protocol '%(protocol)s'. Update " -"or clear protocol before changing ether type." -msgstr "" - -#: neutron/plugins/nuage/plugin.py:113 -#, python-format -msgid "%(resource)s with id %(resource_id)s does not exist" -msgstr "" - -#: neutron/plugins/nuage/plugin.py:122 -#, python-format -msgid "" -"Either %(resource)s %(req_resource)s not found or you dont have " -"credential to access it" -msgstr "" - -#: neutron/plugins/nuage/plugin.py:128 -#, python-format -msgid "" -"More than one entry found for %(resource)s %(req_resource)s. Use id " -"instead" -msgstr "" - -#: neutron/plugins/nuage/plugin.py:158 -#, python-format -msgid "Router for subnet %s not found " -msgstr "" - -#: neutron/plugins/nuage/plugin.py:275 -#, python-format -msgid "Subnet %s not found on VSD" -msgstr "" - -#: neutron/plugins/nuage/plugin.py:422 -#, python-format -msgid "provider:network_type %s not supported in VSP" -msgstr "" - -#: neutron/plugins/nuage/plugin.py:469 -msgid "External network with subnets can not be changed to non-external network" -msgstr "" - -#: neutron/plugins/nuage/plugin.py:530 -msgid "" -"Either net_partition is not provided with subnet OR default net_partition" -" is not created at the start" -msgstr "" - -#: neutron/plugins/nuage/plugin.py:547 -#, python-format -msgid "Only one subnet is allowed per Provider network %s" -msgstr "" - -#: neutron/plugins/nuage/plugin.py:558 -#, python-format -msgid "Only one subnet is allowed per external network %s" -msgstr "" - -#: neutron/plugins/nuage/plugin.py:694 -#, python-format -msgid "" -"Unable to complete operation on subnet %s.One or more ports have an IP " -"allocation from this subnet." -msgstr "" - -#: neutron/plugins/nuage/plugin.py:721 -#, python-format -msgid "" -"Router %s does not hold default zone OR domain in VSD. Router-IF add " -"failed" -msgstr "" - -#: neutron/plugins/nuage/plugin.py:733 -#, python-format -msgid "Subnet %s does not hold Nuage VSD reference. Router-IF add failed" -msgstr "" - -#: neutron/plugins/nuage/plugin.py:743 -#, python-format -msgid "" -"Subnet %(subnet)s and Router %(router)s belong to different net_partition" -" Router-IF add not permitted" -msgstr "" - -#: neutron/plugins/nuage/plugin.py:754 -#, python-format -msgid "Subnet %s has one or more active VMs Router-IF add not permitted" -msgstr "" - -#: neutron/plugins/nuage/plugin.py:806 neutron/plugins/nuage/plugin.py:811 -#: neutron/plugins/nuage/plugin.py:817 -#, python-format -msgid "No router interface found for Router %s. Router-IF delete failed" -msgstr "" - -#: neutron/plugins/nuage/plugin.py:833 -#, python-format -msgid "Subnet %s has one or more active VMs Router-IF delete not permitted" -msgstr "" - -#: neutron/plugins/nuage/plugin.py:842 -#, python-format -msgid "" -"Router %s does not hold net_partition assoc on Nuage VSD. Router-IF " -"delete failed" -msgstr "" - -#: neutron/plugins/nuage/plugin.py:883 -msgid "" -"Either net_partition is not provided with router OR default net_partition" -" is not created at the start" -msgstr "" - -#: neutron/plugins/nuage/plugin.py:924 -msgid "for same subnet, multiple static routes not allowed" -msgstr "" - -#: neutron/plugins/nuage/plugin.py:941 -#, python-format -msgid "Router %s does not hold net-partition assoc on VSD. extra-route failed" -msgstr "" - -#: neutron/plugins/nuage/plugin.py:1057 -#, python-format -msgid "One or more router still attached to net_partition %s." -msgstr "" - -#: neutron/plugins/nuage/plugin.py:1062 -#, python-format -msgid "NetPartition with %s does not exist" -msgstr "" - -#: neutron/plugins/nuage/plugin.py:1104 -#, python-format -msgid "sharedresource %s not found on VSD" -msgstr "" - -#: neutron/plugins/nuage/plugin.py:1111 neutron/plugins/nuage/plugin.py:1261 -#, python-format -msgid "router %s is not associated with any net-partition" -msgstr "" - -#: neutron/plugins/nuage/plugin.py:1144 -msgid "Floating IP can not be associated to VM in different router context" -msgstr "" - -#: neutron/plugins/nuage/common/config.py:20 -msgid "IP Address and Port of Nuage's VSD server" -msgstr "" - -#: neutron/plugins/nuage/common/config.py:23 -msgid "Username and password for authentication" -msgstr "" - -#: neutron/plugins/nuage/common/config.py:25 -msgid "Boolean for SSL connection with VSD server" -msgstr "" - -#: neutron/plugins/nuage/common/config.py:27 -msgid "Nuage provided base uri to reach out to VSD" -msgstr "" - -#: neutron/plugins/nuage/common/config.py:29 -msgid "" -"Organization name in which VSD will orchestrate network resources using " -"openstack" -msgstr "" - -#: neutron/plugins/nuage/common/config.py:32 -msgid "Nuage provided uri for initial authorization to access VSD" -msgstr "" - -#: neutron/plugins/nuage/common/config.py:36 -msgid "" -"Default Network partition in which VSD will orchestrate network resources" -" using openstack" -msgstr "" - -#: neutron/plugins/nuage/common/config.py:40 -msgid "Per Net Partition quota of floating ips" -msgstr "" - -#: neutron/plugins/nuage/common/config.py:45 -msgid "Nuage plugin will sync resources between openstack and VSD" -msgstr "" - -#: neutron/plugins/nuage/common/config.py:48 -msgid "" -"Sync interval in seconds between openstack and VSD. It defines how often " -"the synchronization is done. If not set, value of 0 is assumed and sync " -"will be performed only once, at the Neutron startup time." -msgstr "" - -#: neutron/plugins/nuage/common/exceptions.py:21 -#, python-format -msgid "Nuage Plugin does not support this operation: %(msg)s" -msgstr "" - -#: neutron/plugins/nuage/common/exceptions.py:25 -#, python-format -msgid "Bad request: %(msg)s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:988 -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1489 -#, python-format -msgid "Parsing bridge_mappings failed: %s." -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:993 -#, python-format -msgid "Parsing physical_interface_mappings failed: %s." -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:1014 -#, python-format -msgid "Invalid tunnel type specificed: %s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:1017 -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1517 -msgid "Tunneling cannot be enabled without a valid local_ip." -msgstr "" - -#: neutron/plugins/ofagent/common/config.py:25 -msgid "Number of seconds to retry acquiring an Open vSwitch datapath" -msgstr "" - -#: neutron/plugins/oneconvergence/plugin.py:236 -msgid "Failed to create subnet, deleting it from neutron" -msgstr "" - -#: neutron/plugins/oneconvergence/plugin.py:300 -#, python-format -msgid "Deleting newly created neutron port %s" -msgstr "" - -#: neutron/plugins/oneconvergence/plugin.py:373 -msgid "Failed to create floatingip" -msgstr "" - -#: neutron/plugins/oneconvergence/plugin.py:412 -msgid "Failed to create router" -msgstr "" - -#: neutron/plugins/oneconvergence/agent/nvsd_neutron_agent.py:152 -msgid "Port list is updated" -msgstr "" - -#: neutron/plugins/oneconvergence/agent/nvsd_neutron_agent.py:159 -msgid "AGENT looping....." -msgstr "" - -#: neutron/plugins/oneconvergence/agent/nvsd_neutron_agent.py:171 -msgid "NVSD Agent initialized successfully, now running... " -msgstr "" - -#: neutron/plugins/oneconvergence/lib/config.py:26 -msgid "NVSD Controller IP address" -msgstr "" - -#: neutron/plugins/oneconvergence/lib/config.py:29 -msgid "NVSD Controller Port number" -msgstr "" - -#: neutron/plugins/oneconvergence/lib/config.py:32 -msgid "NVSD Controller username" -msgstr "" - -#: neutron/plugins/oneconvergence/lib/config.py:35 -msgid "NVSD Controller password" -msgstr "" - -#: neutron/plugins/oneconvergence/lib/config.py:38 -msgid "NVSD controller REST API request timeout in seconds" -msgstr "" - -#: neutron/plugins/oneconvergence/lib/config.py:40 -msgid "Number of login retries to NVSD controller" -msgstr "" - -#: neutron/plugins/oneconvergence/lib/config.py:45 -msgid "integration bridge" -msgstr "" - -#: neutron/plugins/oneconvergence/lib/exception.py:23 -#, python-format -msgid "An unknown nvsd plugin exception occurred: %(reason)s" -msgstr "" - -#: neutron/plugins/oneconvergence/lib/exception.py:27 -#: neutron/plugins/vmware/api_client/exception.py:68 -msgid "The request has timed out." -msgstr "" - -#: neutron/plugins/oneconvergence/lib/exception.py:31 -msgid "Invalid access credentials to the Server." -msgstr "" - -#: neutron/plugins/oneconvergence/lib/exception.py:35 -#, python-format -msgid "A resource is not found: %(reason)s" -msgstr "" - -#: neutron/plugins/oneconvergence/lib/exception.py:39 -#, python-format -msgid "Request sent to server is invalid: %(reason)s" -msgstr "" - -#: neutron/plugins/oneconvergence/lib/exception.py:43 -#, python-format -msgid "Internal Server Error: %(reason)s" -msgstr "" - -#: neutron/plugins/oneconvergence/lib/exception.py:47 -msgid "Connection is closed by the server." -msgstr "" - -#: neutron/plugins/oneconvergence/lib/exception.py:51 -#, python-format -msgid "The request is forbidden access to the resource: %(reason)s" -msgstr "" - -#: neutron/plugins/oneconvergence/lib/exception.py:55 -#, python-format -msgid "Internal Server Error from NVSD controller: %(reason)s" -msgstr "" - -#: neutron/plugins/oneconvergence/lib/nvsdlib.py:53 -#, python-format -msgid "Could not create a %(resource)s under tenant %(tenant_id)s" -msgstr "" - -#: neutron/plugins/oneconvergence/lib/nvsdlib.py:57 -#, python-format -msgid "Failed to %(method)s %(resource)s id=%(resource_id)s" -msgstr "" - -#: neutron/plugins/oneconvergence/lib/nvsdlib.py:63 -#, python-format -msgid "Failed to %(method)s %(resource)s" -msgstr "" - -#: neutron/plugins/oneconvergence/lib/nvsdlib.py:108 -#, python-format -msgid "Network %(id)s created under tenant %(tenant_id)s" -msgstr "" - -#: neutron/plugins/oneconvergence/lib/nvsdlib.py:125 -#, python-format -msgid "Network %(id)s updated under tenant %(tenant_id)s" -msgstr "" - -#: neutron/plugins/oneconvergence/lib/nvsdlib.py:146 -#, python-format -msgid "Network %(id)s deleted under tenant %(tenant_id)s" -msgstr "" - -#: neutron/plugins/oneconvergence/lib/nvsdlib.py:159 -#, python-format -msgid "Subnet %(id)s created under tenant %(tenant_id)s" -msgstr "" - -#: neutron/plugins/oneconvergence/lib/nvsdlib.py:173 -#, python-format -msgid "Subnet %(id)s deleted under tenant %(tenant_id)s" -msgstr "" - -#: neutron/plugins/oneconvergence/lib/nvsdlib.py:189 -#, python-format -msgid "Subnet %(id)s updated under tenant %(tenant_id)s" -msgstr "" - -#: neutron/plugins/oneconvergence/lib/nvsdlib.py:221 -#, python-format -msgid "Port %(id)s created under tenant %(tenant_id)s" -msgstr "" - -#: neutron/plugins/oneconvergence/lib/nvsdlib.py:245 -#, python-format -msgid "Port %(id)s updated under tenant %(tenant_id)s" -msgstr "" - -#: neutron/plugins/oneconvergence/lib/nvsdlib.py:258 -#, python-format -msgid "Port %(id)s deleted under tenant %(tenant_id)s" -msgstr "" - -#: neutron/plugins/oneconvergence/lib/nvsdlib.py:280 -#, python-format -msgid "Flatingip %(id)s created under tenant %(tenant_id)s" -msgstr "" - -#: neutron/plugins/oneconvergence/lib/nvsdlib.py:298 -#, python-format -msgid "Flatingip %(id)s updated under tenant %(tenant_id)s" -msgstr "" - -#: neutron/plugins/oneconvergence/lib/nvsdlib.py:312 -#, python-format -msgid "Flatingip %(id)s deleted under tenant %(tenant_id)s" -msgstr "" - -#: neutron/plugins/oneconvergence/lib/nvsdlib.py:325 -#, python-format -msgid "Router %(id)s created under tenant %(tenant_id)s" -msgstr "" - -#: neutron/plugins/oneconvergence/lib/nvsdlib.py:341 -#, python-format -msgid "Router %(id)s updated under tenant %(tenant_id)s" -msgstr "" - -#: neutron/plugins/oneconvergence/lib/nvsdlib.py:351 -#, python-format -msgid "Router %(id)s deleted under tenant %(tenant_id)s" -msgstr "" - -#: neutron/plugins/oneconvergence/lib/plugin_helper.py:79 -#, python-format -msgid "Unable to connect to NVSD controller. Exiting after %(retries)s attempts" -msgstr "" - -#: neutron/plugins/oneconvergence/lib/plugin_helper.py:88 -#, python-format -msgid "Login Failed: %s" -msgstr "" - -#: neutron/plugins/oneconvergence/lib/plugin_helper.py:89 -#, python-format -msgid "Unable to establish connection with Controller %s" -msgstr "" - -#: neutron/plugins/oneconvergence/lib/plugin_helper.py:91 -msgid "Retrying after 1 second..." -msgstr "" - -#: neutron/plugins/oneconvergence/lib/plugin_helper.py:95 -#, python-format -msgid "Login Successful %(uri)s %(status)s" -msgstr "" - -#: neutron/plugins/oneconvergence/lib/plugin_helper.py:99 -#, python-format -msgid "AuthToken = %s" -msgstr "" - -#: neutron/plugins/oneconvergence/lib/plugin_helper.py:101 -msgid "login failed" -msgstr "" - -#: neutron/plugins/oneconvergence/lib/plugin_helper.py:109 -msgid "No Token, Re-login" -msgstr "" - -#: neutron/plugins/oneconvergence/lib/plugin_helper.py:125 -#, python-format -msgid "request: %(method)s %(uri)s successful" -msgstr "" - -#: neutron/plugins/oneconvergence/lib/plugin_helper.py:132 -#, python-format -msgid "request: Request failed from Controller side :%s" -msgstr "" - -#: neutron/plugins/oneconvergence/lib/plugin_helper.py:137 -#, python-format -msgid "Response is Null, Request timed out: %(method)s to %(uri)s" -msgstr "" - -#: neutron/plugins/oneconvergence/lib/plugin_helper.py:149 -#, python-format -msgid "Request %(method)s %(uri)s body = %(body)s failed with status %(status)s" -msgstr "" - -#: neutron/plugins/oneconvergence/lib/plugin_helper.py:153 -#, python-format -msgid "%s" -msgstr "" - -#: neutron/plugins/oneconvergence/lib/plugin_helper.py:157 -#, python-format -msgid "%(method)s to %(url)s, unexpected response code: %(status)d" -msgstr "" - -#: neutron/plugins/oneconvergence/lib/plugin_helper.py:163 -#, python-format -msgid "Request failed from Controller side with Status=%s" -msgstr "" - -#: neutron/plugins/oneconvergence/lib/plugin_helper.py:167 -#, python-format -msgid "Success: %(method)s %(url)s status=%(status)s" -msgstr "" - -#: neutron/plugins/openvswitch/ovs_db_v2.py:210 -#, python-format -msgid "Skipping unreasonable tunnel ID range %(tun_min)s:%(tun_max)s" -msgstr "" - -#: neutron/plugins/openvswitch/ovs_db_v2.py:229 -#, python-format -msgid "Removing tunnel %s from pool" -msgstr "" - -#: neutron/plugins/openvswitch/ovs_db_v2.py:258 -#, python-format -msgid "Reserving tunnel %s from pool" -msgstr "" - -#: neutron/plugins/openvswitch/ovs_db_v2.py:273 -#, python-format -msgid "Reserving specific tunnel %s from pool" -msgstr "" - -#: neutron/plugins/openvswitch/ovs_db_v2.py:276 -#, python-format -msgid "Reserving specific tunnel %s outside pool" -msgstr "" - -#: neutron/plugins/openvswitch/ovs_db_v2.py:299 -#, python-format -msgid "Releasing tunnel %s outside pool" -msgstr "" - -#: neutron/plugins/openvswitch/ovs_db_v2.py:301 -#, python-format -msgid "Releasing tunnel %s to pool" -msgstr "" - -#: neutron/plugins/openvswitch/ovs_db_v2.py:303 -#, python-format -msgid "tunnel_id %s not found" -msgstr "" - -#: neutron/plugins/openvswitch/ovs_db_v2.py:375 -#, python-format -msgid "Adding a tunnel endpoint for %s" -msgstr "" - -#: neutron/plugins/openvswitch/ovs_db_v2.py:391 -#, python-format -msgid "" -"Adding a tunnel endpoint failed due to a concurrenttransaction had been " -"committed (%s attempts left)" -msgstr "" - -#: neutron/plugins/openvswitch/ovs_db_v2.py:396 -msgid "Unable to generate a new tunnel id" -msgstr "" - -#: neutron/plugins/openvswitch/ovs_neutron_plugin.py:309 -#, python-format -msgid "Invalid tenant_network_type: %s. Server terminated!" -msgstr "" - -#: neutron/plugins/openvswitch/ovs_neutron_plugin.py:326 -#, python-format -msgid "Tunneling disabled but tenant_network_type is '%s'. Server terminated!" -msgstr "" - -#: neutron/plugins/openvswitch/ovs_neutron_plugin.py:375 -#, python-format -msgid "Invalid tunnel ID range: '%(range)s' - %(e)s. Server terminated!" -msgstr "" - -#: neutron/plugins/openvswitch/ovs_neutron_plugin.py:379 -#, python-format -msgid "Tunnel ID ranges: %s" -msgstr "" - -#: neutron/plugins/openvswitch/ovs_neutron_plugin.py:434 -#, python-format -msgid "%s networks are not enabled" -msgstr "" - -#: neutron/plugins/openvswitch/agent/ovs_dvr_neutron_agent.py:158 -msgid "DVR: Failed to obtain local DVR Mac address" -msgstr "" - -#: neutron/plugins/openvswitch/agent/ovs_dvr_neutron_agent.py:291 -#, python-format -msgid "DVR: Duplicate DVR router interface detected for subnet %s" -msgstr "" - -#: neutron/plugins/openvswitch/agent/ovs_dvr_neutron_agent.py:299 -#, python-format -msgid "DVR: Unable to retrieve subnet information for subnet_id %s" -msgstr "" - -#: neutron/plugins/openvswitch/agent/ovs_dvr_neutron_agent.py:458 -#, python-format -msgid "Centralized-SNAT port %s already seen on " -msgstr "" - -#: neutron/plugins/openvswitch/agent/ovs_dvr_neutron_agent.py:460 -#, python-format -msgid "a different subnet %s" -msgstr "" - -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:59 -#, python-format -msgid "" -"Unable to retrieve port details for devices: %(devices)s because of " -"error: %(error)s" -msgstr "" - -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:308 -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:560 -#, python-format -msgid "Network %s not used on agent." -msgstr "" - -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:317 -#, python-format -msgid "port_update message processed for port %s" -msgstr "" - -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:320 -msgid "tunnel_update received" -msgstr "" - -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:329 -msgid "No tunnel_type specified, cannot create tunnels" -msgstr "" - -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:332 -#, python-format -msgid "tunnel_type %s not supported by agent" -msgstr "" - -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:440 -#, python-format -msgid "Action %s not supported" -msgstr "" - -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:461 -#, python-format -msgid "No local VLAN available for net-id=%s" -msgstr "" - -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:469 -#, python-format -msgid "Assigning %(vlan_id)s as local vlan for net-id=%(net_uuid)s" -msgstr "" - -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:498 -#, python-format -msgid "" -"Cannot provision %(network_type)s network for net-id=%(net_uuid)s - " -"tunneling disabled" -msgstr "" - -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:517 -#, python-format -msgid "" -"Cannot provision flat network for net-id=%(net_uuid)s - no bridge for " -"physical_network %(physical_network)s" -msgstr "" - -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:537 -#, python-format -msgid "" -"Cannot provision VLAN network for net-id=%(net_uuid)s - no bridge for " -"physical_network %(physical_network)s" -msgstr "" - -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:546 -#, python-format -msgid "" -"Cannot provision unknown network type %(network_type)s for net-" -"id=%(net_uuid)s" -msgstr "" - -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:563 -#, python-format -msgid "Reclaiming vlan = %(vlan_id)s from net-id = %(net_uuid)s" -msgstr "" - -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:604 -#, python-format -msgid "" -"Cannot reclaim unknown network type %(network_type)s for net-" -"id=%(net_uuid)s" -msgstr "" - -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:658 -#, python-format -msgid "port_unbound(): net_uuid %s not in local_vlan_map" -msgstr "" - -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:731 -#, python-format -msgid "Adding %s to list of bridges." -msgstr "" - -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:752 -msgid "" -"Failed to create OVS patch port. Cannot have tunneling enabled on this " -"agent, since this version of OVS does not support tunnels or patch ports." -" Agent terminated!" -msgstr "" - -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:846 -#, python-format -msgid "" -"Creating an interface named %(name)s exceeds the %(limit)d character " -"limitation. It was shortened to %(new_name)s to fit." -msgstr "" - -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:867 -#, python-format -msgid "Mapping physical network %(physical_network)s to bridge %(bridge)s" -msgstr "" - -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:873 -#, python-format -msgid "" -"Bridge %(bridge)s for physical network %(physical_network)s does not " -"exist. Agent terminated!" -msgstr "" - -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:977 -#, python-format -msgid "Port '%(port_name)s' has lost its vlan tag '%(vlan_tag)d'!" -msgstr "" - -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1006 -#, python-format -msgid "VIF port: %s has no ofport configured, and might not be able to transmit" -msgstr "" - -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1016 -#, python-format -msgid "No VIF port for port %s defined on agent." -msgstr "" - -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1029 -#: neutron/tests/unit/ofagent/test_ofa_neutron_agent.py:799 -#: neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py:1274 -msgid "ofport should have a value that can be interpreted as an integer" -msgstr "" - -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1032 -#: neutron/tests/unit/ofagent/test_ofa_neutron_agent.py:782 -#: neutron/tests/unit/ofagent/test_ofa_neutron_agent.py:802 -#: neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py:1257 -#: neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py:1277 -#: neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py:1294 -#, python-format -msgid "Failed to set-up %(type)s tunnel port to %(ip)s" -msgstr "" - -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1097 -#, python-format -msgid "" -"Port %s was not found on the integration bridge and will therefore not be" -" processed" -msgstr "" - -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1120 -#, python-format -msgid "Setting status for %s to UP" -msgstr "" - -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1124 -#, python-format -msgid "Setting status for %s to DOWN" -msgstr "" - -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1127 -#, python-format -msgid "Configuration for device %s completed." -msgstr "" - -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1146 -#, python-format -msgid "Ancillary Port %s added" -msgstr "" - -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1218 -#, python-format -msgid "" -"process_network_ports - iteration:%(iter_num)d " -"-treat_devices_added_or_updated completed. Skipped %(num_skipped)d " -"devices of %(num_current)d devices currently available. Time elapsed: " -"%(elapsed).3f" -msgstr "" - -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1234 -#, python-format -msgid "" -"process_network_ports - iteration:%d - failure while retrieving port " -"details from server" -msgstr "" - -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1241 -#, python-format -msgid "" -"process_network_ports - iteration:%(iter_num)d -treat_devices_removed " -"completed in %(elapsed).3f" -msgstr "" - -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1255 -#, python-format -msgid "" -"process_ancillary_network_ports - iteration: %(iter_num)d - " -"treat_ancillary_devices_added completed in %(elapsed).3f" -msgstr "" - -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1263 -#, python-format -msgid "" -"process_ancillary_network_ports - iteration:%d - failure while retrieving" -" port details from server" -msgstr "" - -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1271 -#, python-format -msgid "" -"process_ancillary_network_ports - iteration: %(iter_num)d - " -"treat_ancillary_devices_removed completed in %(elapsed).3f" -msgstr "" - -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1284 -#, python-format -msgid "Unable to create tunnel port. Invalid remote IP: %s" -msgstr "" - -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1313 -#, python-format -msgid "Unable to sync tunnel IP %(local_ip)s: %(e)s" -msgstr "" - -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1350 -#, python-format -msgid "Agent rpc_loop - iteration:%d started" -msgstr "" - -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1372 -msgid "Agent tunnel out of sync with plugin!" -msgstr "" - -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1376 -msgid "Error while synchronizing tunnels" -msgstr "" - -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1380 -#, python-format -msgid "" -"Agent rpc_loop - iteration:%(iter_num)d - starting polling. " -"Elapsed:%(elapsed).3f" -msgstr "" - -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1392 -#, python-format -msgid "" -"Agent rpc_loop - iteration:%(iter_num)d - port information retrieved. " -"Elapsed:%(elapsed).3f" -msgstr "" - -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1402 -#, python-format -msgid "Starting to process devices in:%s" -msgstr "" - -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1407 -#, python-format -msgid "" -"Agent rpc_loop - iteration:%(iter_num)d -ports processed. " -"Elapsed:%(elapsed).3f" -msgstr "" - -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1422 -#, python-format -msgid "" -"Agent rpc_loop - iteration:%(iter_num)d -ancillary port info retrieved. " -"Elapsed:%(elapsed).3f" -msgstr "" - -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1431 -#, python-format -msgid "" -"Agent rpc_loop - iteration:%(iter_num)d - ancillary ports processed. " -"Elapsed:%(elapsed).3f" -msgstr "" - -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1445 -msgid "Error while processing VIF ports" -msgstr "" - -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1452 -#, python-format -msgid "" -"Agent rpc_loop - iteration:%(iter_num)d completed. Processed ports " -"statistics: %(port_stats)s. Elapsed:%(elapsed).3f" -msgstr "" - -#: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1514 -#, python-format -msgid "Invalid tunnel type specified: %s" -msgstr "" - -#: neutron/plugins/openvswitch/common/config.py:31 -msgid "Enable tunneling support." -msgstr "" - -#: neutron/plugins/openvswitch/common/config.py:33 -msgid "Tunnel bridge to use." -msgstr "" - -#: neutron/plugins/openvswitch/common/config.py:35 -msgid "Peer patch port in integration bridge for tunnel bridge." -msgstr "" - -#: neutron/plugins/openvswitch/common/config.py:38 -msgid "Peer patch port in tunnel bridge for integration bridge." -msgstr "" - -#: neutron/plugins/openvswitch/common/config.py:41 -msgid "Local IP address of GRE tunnel endpoints." -msgstr "" - -#: neutron/plugins/openvswitch/common/config.py:44 -msgid "List of :. Deprecated for ofagent." -msgstr "" - -#: neutron/plugins/openvswitch/common/config.py:47 -msgid "Network type for tenant networks (local, vlan, gre, vxlan, or none)." -msgstr "" - -#: neutron/plugins/openvswitch/common/config.py:51 -msgid "List of :: or ." -msgstr "" - -#: neutron/plugins/openvswitch/common/config.py:55 -msgid "List of :." -msgstr "" - -#: neutron/plugins/openvswitch/common/config.py:57 -msgid "" -"The type of tunnels to use when utilizing tunnels, either 'gre' or " -"'vxlan'." -msgstr "" - -#: neutron/plugins/openvswitch/common/config.py:60 -msgid "" -"Use veths instead of patch ports to interconnect the integration bridge " -"to physical bridges." -msgstr "" - -#: neutron/plugins/openvswitch/common/config.py:70 -msgid "Minimize polling by monitoring ovsdb for interface changes." -msgstr "" - -#: neutron/plugins/openvswitch/common/config.py:74 -msgid "" -"The number of seconds to wait before respawning the ovsdb monitor after " -"losing communication with it." -msgstr "" - -#: neutron/plugins/openvswitch/common/config.py:77 -msgid "Network types supported by the agent (gre and/or vxlan)." -msgstr "" - -#: neutron/plugins/openvswitch/common/config.py:82 -msgid "MTU size of veth interfaces" -msgstr "" - -#: neutron/plugins/openvswitch/common/config.py:84 -msgid "" -"Use ML2 l2population mechanism driver to learn remote MAC and IPs and " -"improve tunnel scalability." -msgstr "" - -#: neutron/plugins/openvswitch/common/config.py:87 -msgid "" -"Enable local ARP responder if it is supported. Requires OVS 2.1 and ML2 " -"l2population driver. Allows the switch (when supporting an overlay) to " -"respond to an ARP request locally without performing a costly ARP " -"broadcast into the overlay." -msgstr "" - -#: neutron/plugins/openvswitch/common/config.py:93 -msgid "" -"Set or un-set the don't fragment (DF) bit on outgoing IP packet carrying " -"GRE/VXLAN tunnel." -msgstr "" - -#: neutron/plugins/openvswitch/common/config.py:96 -msgid "Make the l2 agent run in DVR mode." -msgstr "" - -#: neutron/plugins/plumgrid/common/exceptions.py:22 -#, python-format -msgid "PLUMgrid Plugin Error: %(err_msg)s" -msgstr "" - -#: neutron/plugins/plumgrid/common/exceptions.py:26 -#, python-format -msgid "Connection failed with PLUMgrid Director: %(err_msg)s" -msgstr "" - -#: neutron/plugins/plumgrid/drivers/fake_plumlib.py:29 -msgid "Python PLUMgrid Fake Library Started " -msgstr "" - -#: neutron/plugins/plumgrid/drivers/fake_plumlib.py:34 -#, python-format -msgid "Fake Director: %s" -msgstr "" - -#: neutron/plugins/plumgrid/drivers/plumlib.py:35 -msgid "Python PLUMgrid Library Started " -msgstr "" - -#: neutron/plugins/plumgrid/plumgrid_plugin/plumgrid_plugin.py:44 -msgid "PLUMgrid Director server to connect to" -msgstr "" - -#: neutron/plugins/plumgrid/plumgrid_plugin/plumgrid_plugin.py:46 -msgid "PLUMgrid Director server port to connect to" -msgstr "" - -#: neutron/plugins/plumgrid/plumgrid_plugin/plumgrid_plugin.py:48 -msgid "PLUMgrid Director admin username" -msgstr "" - -#: neutron/plugins/plumgrid/plumgrid_plugin/plumgrid_plugin.py:50 -msgid "PLUMgrid Director admin password" -msgstr "" - -#: neutron/plugins/plumgrid/plumgrid_plugin/plumgrid_plugin.py:52 -msgid "PLUMgrid Director server timeout" -msgstr "" - -#: neutron/plugins/plumgrid/plumgrid_plugin/plumgrid_plugin.py:55 -msgid "PLUMgrid Driver" -msgstr "" - -#: neutron/plugins/plumgrid/plumgrid_plugin/plumgrid_plugin.py:73 -msgid "Neutron PLUMgrid Director: Starting Plugin" -msgstr "" - -#: neutron/plugins/plumgrid/plumgrid_plugin/plumgrid_plugin.py:91 -#, python-format -msgid "Neutron PLUMgrid Director: %s" -msgstr "" - -#: neutron/plugins/plumgrid/plumgrid_plugin/plumgrid_plugin.py:768 -msgid "" -"Networks with admin_state_up=False are not supported by PLUMgrid plugin " -"yet." -msgstr "" - -#: neutron/plugins/ryu/ryu_neutron_plugin.py:67 -#, python-format -msgid "get_ofp_rest_api: %s" -msgstr "" - -#: neutron/plugins/ryu/ryu_neutron_plugin.py:124 -msgid "Invalid configuration. check ryu.ini" -msgstr "" - -#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:94 -#, python-format -msgid "Could not get IPv4 address from %(nic)s: %(cfg)s" -msgstr "" - -#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:160 -#, python-format -msgid "External port %s" -msgstr "" - -#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:168 -msgid "Get Ryu rest API address" -msgstr "" - -#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:215 -msgid "Ryu rest API port isn't specified" -msgstr "" - -#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:216 -#, python-format -msgid "Going to ofp controller mode %s" -msgstr "" - -#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:292 -#, python-format -msgid "tunnel_ip %s" -msgstr "" - -#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:294 -#, python-format -msgid "ovsdb_port %s" -msgstr "" - -#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:296 -#, python-format -msgid "ovsdb_ip %s" -msgstr "" - -#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:302 -#, python-format -msgid "Initialization failed: %s" -msgstr "" - -#: neutron/plugins/ryu/agent/ryu_neutron_agent.py:305 -msgid "" -"Ryu initialization on the node is done. Agent initialized successfully, " -"now running..." -msgstr "" - -#: neutron/plugins/ryu/common/config.py:24 -msgid "OpenFlow REST API location." -msgstr "" - -#: neutron/plugins/ryu/common/config.py:26 -msgid "Minimum tunnel ID to use." -msgstr "" - -#: neutron/plugins/ryu/common/config.py:28 -msgid "Maximum tunnel ID to use." -msgstr "" - -#: neutron/plugins/ryu/common/config.py:30 -msgid "Tunnel IP to use." -msgstr "" - -#: neutron/plugins/ryu/common/config.py:32 -msgid "Tunnel interface to use." -msgstr "" - -#: neutron/plugins/ryu/common/config.py:34 -msgid "OVSDB port to connect to." -msgstr "" - -#: neutron/plugins/ryu/common/config.py:36 -msgid "OVSDB IP to connect to." -msgstr "" - -#: neutron/plugins/ryu/common/config.py:38 -msgid "OVSDB interface to connect to." -msgstr "" - -#: neutron/plugins/ryu/db/api_v2.py:39 -#, python-format -msgid "get_port_from_device() called:port_id=%s" -msgstr "" - -#: neutron/plugins/ryu/db/api_v2.py:75 -#, python-format -msgid "" -"Invalid tunnel key options tunnel_key_min: %(key_min)d tunnel_key_max: " -"%(key_max)d. Using default value" -msgstr "" - -#: neutron/plugins/ryu/db/api_v2.py:155 -#, python-format -msgid "last_key %(last_key)s new_key %(new_key)s" -msgstr "" - -#: neutron/plugins/ryu/db/api_v2.py:158 -msgid "No key found" -msgstr "" - -#: neutron/plugins/ryu/db/api_v2.py:191 -#, python-format -msgid "Transaction retry exhausted (%d). Abandoned tunnel key allocation." -msgstr "" - -#: neutron/plugins/sriovnicagent/eswitch_manager.py:44 -#, python-format -msgid "Failed to get devices for %s" -msgstr "" - -#: neutron/plugins/sriovnicagent/eswitch_manager.py:46 -msgid "Device not found" -msgstr "" - -#: neutron/plugins/sriovnicagent/eswitch_manager.py:60 -msgid "Device has no virtual functions" -msgstr "" - -#: neutron/plugins/sriovnicagent/eswitch_manager.py:139 -#: neutron/plugins/sriovnicagent/eswitch_manager.py:152 -#, python-format -msgid "Cannot find vf index for pci slot %s" -msgstr "" - -#: neutron/plugins/sriovnicagent/eswitch_manager.py:277 -#, python-format -msgid "device pci mismatch: %(device_mac)s - %(pci_slot)s" -msgstr "" - -#: neutron/plugins/sriovnicagent/pci_lib.py:56 -#: neutron/plugins/sriovnicagent/pci_lib.py:79 -#: neutron/plugins/sriovnicagent/pci_lib.py:106 -msgid "Failed executing ip command" -msgstr "" - -#: neutron/plugins/sriovnicagent/pci_lib.py:127 -#, python-format -msgid "Cannot find vfs %(vfs)s in device %(dev_name)s" -msgstr "" - -#: neutron/plugins/sriovnicagent/pci_lib.py:143 -#, python-format -msgid "failed to parse vf link show line %(line)s: for %(device)s" -msgstr "" - -#: neutron/plugins/sriovnicagent/sriov_nic_agent.py:181 -#, python-format -msgid "Failed to set device %s state" -msgstr "" - -#: neutron/plugins/sriovnicagent/sriov_nic_agent.py:195 -#, python-format -msgid "No device with MAC %s defined on agent." -msgstr "" - -#: neutron/plugins/sriovnicagent/sriov_nic_agent.py:220 -#, python-format -msgid "Device with MAC %s not defined on plugin" -msgstr "" - -#: neutron/plugins/sriovnicagent/sriov_nic_agent.py:247 -msgid "SRIOV NIC Agent RPC Daemon Started!" -msgstr "" - -#: neutron/plugins/sriovnicagent/sriov_nic_agent.py:317 -#, python-format -msgid "Device name %(dev_name)s is missing from physical_device_mappings" -msgstr "" - -#: neutron/plugins/sriovnicagent/sriov_nic_agent.py:333 -#, python-format -msgid "Failed on Agent configuration parse : %s. Agent terminated!" -msgstr "" - -#: neutron/plugins/sriovnicagent/sriov_nic_agent.py:336 -#, python-format -msgid "Physical Devices mappings: %s" -msgstr "" - -#: neutron/plugins/sriovnicagent/sriov_nic_agent.py:337 -#, python-format -msgid "Exclude Devices: %s" -msgstr "" - -#: neutron/plugins/sriovnicagent/sriov_nic_agent.py:347 -msgid "Agent Initialization Failed" -msgstr "" - -#: neutron/plugins/sriovnicagent/common/config.py:41 -#, python-format -msgid "Device %(dev_name)s in mapping: %(mapping)s not unique" -msgstr "" - -#: neutron/plugins/sriovnicagent/common/config.py:65 -msgid "" -"List of : mapping physical network " -"names to the agent's node-specific physical network device of SR-IOV " -"physical function to be used for VLAN networks. All physical networks " -"listed in network_vlan_ranges on the server should have mappings to " -"appropriate interfaces on each agent" -msgstr "" - -#: neutron/plugins/sriovnicagent/common/config.py:74 -msgid "" -"List of : mapping network_device to the" -" agent's node-specific list of virtual functions that should not be used " -"for virtual networking. excluded_devices is a semicolon separated list of" -" virtual functions (BDF format).to exclude from network_device. The " -"network_device in the mapping should appear in the " -"physical_device_mappings list." -msgstr "" - -#: neutron/plugins/sriovnicagent/common/exceptions.py:24 -#, python-format -msgid "Invalid Device %(dev_name)s: %(reason)s" -msgstr "" - -#: neutron/plugins/sriovnicagent/common/exceptions.py:28 -#, python-format -msgid "ip command failed on device %(dev_name)s: %(reason)s" -msgstr "" - -#: neutron/plugins/sriovnicagent/common/exceptions.py:32 -#, python-format -msgid "Invalid pci slot %(pci_slot)s" -msgstr "" - -#: neutron/plugins/vmware/check_nsx_config.py:45 -#: neutron/plugins/vmware/check_nsx_config.py:80 -#, python-format -msgid "Error '%(err)s' when connecting to controller(s): %(ctl)s." -msgstr "" - -#: neutron/plugins/vmware/dhcpmeta_modes.py:56 -#, python-format -msgid "Invalid agent_mode: %s" -msgstr "" - -#: neutron/plugins/vmware/dhcpmeta_modes.py:107 -msgid "network_auto_schedule has been disabled" -msgstr "" - -#: neutron/plugins/vmware/dhcpmeta_modes.py:128 -#, python-format -msgid "Unable to run Neutron with config option '%s', as NSX does not support it" -msgstr "" - -#: neutron/plugins/vmware/dhcpmeta_modes.py:131 -#, python-format -msgid "Unmet dependency for config option '%s'" -msgstr "" - -#: neutron/plugins/vmware/nsx_cluster.py:49 -#, python-format -msgid "" -"Attribute '%s' has been deprecated or moved to a new section. See new " -"configuration file for details." -msgstr "" - -#: neutron/plugins/vmware/nsx_cluster.py:61 -#, python-format -msgid "The following cluster attributes were not specified: %s'" -msgstr "" - -#: neutron/plugins/vmware/api_client/__init__.py:28 -#, python-format -msgid "Invalid connection type: %s" -msgstr "" - -#: neutron/plugins/vmware/api_client/base.py:103 -#, python-format -msgid "[%d] no API providers currently available." -msgstr "" - -#: neutron/plugins/vmware/api_client/base.py:106 -#, python-format -msgid "[%d] Waiting to acquire API client connection." -msgstr "" - -#: neutron/plugins/vmware/api_client/base.py:110 -#, python-format -msgid "[%(rid)d] Connection %(conn)s idle for %(sec)0.2f seconds; reconnecting." -msgstr "" - -#: neutron/plugins/vmware/api_client/base.py:119 -#, python-format -msgid "[%(rid)d] Acquired connection %(conn)s. %(qsize)d connection(s) available." -msgstr "" - -#: neutron/plugins/vmware/api_client/base.py:140 -#, python-format -msgid "" -"[%(rid)d] Released connection %(conn)s is not an API provider for the " -"cluster" -msgstr "" - -#: neutron/plugins/vmware/api_client/base.py:150 -#, python-format -msgid "[%(rid)d] Connection returned in bad state, reconnecting to %(conn)s" -msgstr "" - -#: neutron/plugins/vmware/api_client/base.py:176 -#, python-format -msgid "[%(rid)d] Released connection %(conn)s. %(qsize)d connection(s) available." -msgstr "" - -#: neutron/plugins/vmware/api_client/base.py:186 -#, python-format -msgid "Login request for an invalid connection: '%s'" -msgstr "" - -#: neutron/plugins/vmware/api_client/base.py:197 -msgid "Waiting for auth to complete" -msgstr "" - -#: neutron/plugins/vmware/api_client/base.py:239 -#, python-format -msgid "Invalid conn_params value: '%s'" -msgstr "" - -#: neutron/plugins/vmware/api_client/client.py:89 -#, python-format -msgid "Request returns \"%s\"" -msgstr "" - -#: neutron/plugins/vmware/api_client/client.py:102 -#, python-format -msgid "Request timed out: %(method)s to %(url)s" -msgstr "" - -#: neutron/plugins/vmware/api_client/client.py:113 -#, python-format -msgid "Received error code: %s" -msgstr "" - -#: neutron/plugins/vmware/api_client/client.py:114 -#, python-format -msgid "Server Error Message: %s" -msgstr "" - -#: neutron/plugins/vmware/api_client/client.py:120 -#, python-format -msgid "" -"%(method)s to %(url)s, unexpected response code: %(status)d (content = " -"'%(body)s')" -msgstr "" - -#: neutron/plugins/vmware/api_client/client.py:137 -msgid "Unable to determine NSX version. Plugin might not work as expected." -msgstr "" - -#: neutron/plugins/vmware/api_client/eventlet_client.py:145 -#, python-format -msgid "Login error \"%s\"" -msgstr "" - -#: neutron/plugins/vmware/api_client/eventlet_client.py:150 -#, python-format -msgid "Saving new authentication cookie '%s'" -msgstr "" - -#: neutron/plugins/vmware/api_client/eventlet_request.py:101 -msgid "Joining an invalid green thread" -msgstr "" - -#: neutron/plugins/vmware/api_client/eventlet_request.py:121 -#, python-format -msgid "[%d] Request timeout." -msgstr "" - -#: neutron/plugins/vmware/api_client/eventlet_request.py:122 -msgid "Request timeout" -msgstr "" - -#: neutron/plugins/vmware/api_client/eventlet_request.py:148 -#, python-format -msgid "[%(rid)d] Completed request '%(method)s %(url)s': %(status)s" -msgstr "" - -#: neutron/plugins/vmware/api_client/eventlet_request.py:155 -#, python-format -msgid "[%(rid)d] Error while handling request: %(req)s" -msgstr "" - -#: neutron/plugins/vmware/api_client/eventlet_request.py:211 -#, python-format -msgid "[%(rid)d] Failed to parse API provider: %(e)s" -msgstr "" - -#: neutron/plugins/vmware/api_client/exception.py:41 -msgid "Server denied session's authentication credentials." -msgstr "" - -#: neutron/plugins/vmware/api_client/exception.py:45 -msgid "An entity referenced in the request was not found." -msgstr "" - -#: neutron/plugins/vmware/api_client/exception.py:49 -msgid "Request conflicts with configuration on a different entity." -msgstr "" - -#: neutron/plugins/vmware/api_client/exception.py:54 -msgid "" -"Request could not completed because the associated resource could not be " -"reached." -msgstr "" - -#: neutron/plugins/vmware/api_client/exception.py:59 -msgid "The request is forbidden from accessing the referenced resource." -msgstr "" - -#: neutron/plugins/vmware/api_client/exception.py:64 -msgid "Create/Update actions are forbidden when in read-only mode." -msgstr "" - -#: neutron/plugins/vmware/api_client/exception.py:72 -msgid "The server is unable to fulfill the request due to a bad syntax" -msgstr "" - -#: neutron/plugins/vmware/api_client/exception.py:77 -msgid "The backend received an invalid security certificate." -msgstr "" - -#: neutron/plugins/vmware/api_client/request.py:84 -msgid "No API connections available" -msgstr "" - -#: neutron/plugins/vmware/api_client/request.py:89 -#, python-format -msgid "[%(rid)d] Issuing - request url: %(conn)s body: %(body)s" -msgstr "" - -#: neutron/plugins/vmware/api_client/request.py:117 -#, python-format -msgid "Setting X-Nvp-Wait-For-Config-Generation request header: '%s'" -msgstr "" - -#: neutron/plugins/vmware/api_client/request.py:123 -#, python-format -msgid "[%(rid)d] Exception issuing request: %(e)s" -msgstr "" - -#: neutron/plugins/vmware/api_client/request.py:131 -#, python-format -msgid "[%(rid)d] Completed request '%(conn)s': %(status)s (%(elapsed)s seconds)" -msgstr "" - -#: neutron/plugins/vmware/api_client/request.py:140 -#, python-format -msgid "Reading X-Nvp-config-Generation response header: '%s'" -msgstr "" - -#: neutron/plugins/vmware/api_client/request.py:167 -#, python-format -msgid "[%d] Maximum redirects exceeded, aborting request" -msgstr "" - -#: neutron/plugins/vmware/api_client/request.py:177 -#, python-format -msgid "[%(rid)d] Redirecting request to: %(conn)s" -msgstr "" - -#: neutron/plugins/vmware/api_client/request.py:190 -#, python-format -msgid "[%(rid)d] Request '%(method)s %(url)s' received: %(status)s" -msgstr "" - -#: neutron/plugins/vmware/api_client/request.py:194 -#, python-format -msgid "Server error return: %s" -msgstr "" - -#: neutron/plugins/vmware/api_client/request.py:198 -msgid "Invalid server response" -msgstr "" - -#: neutron/plugins/vmware/api_client/request.py:203 -#, python-format -msgid "[%(rid)d] Failed request '%(conn)s': '%(msg)s' (%(elapsed)s seconds)" -msgstr "" - -#: neutron/plugins/vmware/api_client/request.py:237 -#, python-format -msgid "[%d] Received redirect status without location header field" -msgstr "" - -#: neutron/plugins/vmware/api_client/request.py:254 -#, python-format -msgid "[%(rid)d] Received invalid redirect location: '%(url)s'" -msgstr "" - -#: neutron/plugins/vmware/api_client/request.py:258 -#, python-format -msgid "[%(rid)d] Received malformed redirect location: %(url)s" -msgstr "" - -#: neutron/plugins/vmware/api_client/version.py:30 -#, python-format -msgid "Unable to fetch NSX version from response headers :%s" -msgstr "" - -#: neutron/plugins/vmware/common/config.py:39 -msgid "" -"Maximum number of ports of a logical switch on a bridged transport zone " -"(default 5000)" -msgstr "" - -#: neutron/plugins/vmware/common/config.py:43 -msgid "" -"Maximum number of ports of a logical switch on an overlay transport zone " -"(default 256)" -msgstr "" - -#: neutron/plugins/vmware/common/config.py:47 -msgid "Maximum concurrent connections to each NSX controller." -msgstr "" - -#: neutron/plugins/vmware/common/config.py:52 -msgid "" -"Number of seconds a generation id should be valid for (default -1 meaning" -" do not time out)" -msgstr "" - -#: neutron/plugins/vmware/common/config.py:56 -msgid "" -"If set to access_network this enables a dedicated connection to the " -"metadata proxy for metadata server access via Neutron router. If set to " -"dhcp_host_route this enables host route injection via the dhcp agent. " -"This option is only useful if running on a host that does not support " -"namespaces otherwise access_network should be used." -msgstr "" - -#: neutron/plugins/vmware/common/config.py:65 -msgid "" -"The default network tranport type to use (stt, gre, bridge, ipsec_gre, or" -" ipsec_stt)" -msgstr "" - -#: neutron/plugins/vmware/common/config.py:69 -msgid "The mode used to implement DHCP/metadata services." -msgstr "" - -#: neutron/plugins/vmware/common/config.py:71 -msgid "" -"The default option leverages service nodes to perform packet replication " -"though one could set to this to 'source' to perform replication locally. " -"This is useful if one does not want to deploy a service node(s). It must " -"be set to 'service' for leveraging distributed routers." -msgstr "" - -#: neutron/plugins/vmware/common/config.py:82 -msgid "" -"Interval in seconds between runs of the state synchronization task. Set " -"it to 0 to disable it" -msgstr "" - -#: neutron/plugins/vmware/common/config.py:86 -msgid "" -"Maximum value for the additional random delay in seconds between runs of " -"the state synchronization task" -msgstr "" - -#: neutron/plugins/vmware/common/config.py:91 -msgid "" -"Minimum delay, in seconds, between two state synchronization queries to " -"NSX. It must not exceed state_sync_interval" -msgstr "" - -#: neutron/plugins/vmware/common/config.py:96 -msgid "" -"Minimum number of resources to be retrieved from NSX during state " -"synchronization" -msgstr "" - -#: neutron/plugins/vmware/common/config.py:100 -msgid "" -"Always read operational status from backend on show operations. Enabling " -"this option might slow down the system." -msgstr "" - -#: neutron/plugins/vmware/common/config.py:109 -msgid "User name for NSX controllers in this cluster" -msgstr "" - -#: neutron/plugins/vmware/common/config.py:114 -msgid "Password for NSX controllers in this cluster" -msgstr "" - -#: neutron/plugins/vmware/common/config.py:117 -msgid "Time before aborting a request" -msgstr "" - -#: neutron/plugins/vmware/common/config.py:120 -msgid "Number of time a request should be retried" -msgstr "" - -#: neutron/plugins/vmware/common/config.py:123 -msgid "Number of times a redirect should be followed" -msgstr "" - -#: neutron/plugins/vmware/common/config.py:126 -msgid "Lists the NSX controllers in this cluster" -msgstr "" - -#: neutron/plugins/vmware/common/config.py:131 -msgid "" -"This is uuid of the default NSX Transport zone that will be used for " -"creating tunneled isolated \"Neutron\" networks. It needs to be created " -"in NSX before starting Neutron with the nsx plugin." -msgstr "" - -#: neutron/plugins/vmware/common/config.py:136 -msgid "" -"Unique identifier of the NSX L3 Gateway service which will be used for " -"implementing routers and floating IPs" -msgstr "" - -#: neutron/plugins/vmware/common/config.py:140 -msgid "" -"Unique identifier of the NSX L2 Gateway service which will be used by " -"default for network gateways" -msgstr "" - -#: neutron/plugins/vmware/common/config.py:143 -msgid "" -"Unique identifier of the Service Cluster which will be used by logical " -"services like dhcp and metadata" -msgstr "" - -#: neutron/plugins/vmware/common/config.py:146 -msgid "" -"Name of the interface on a L2 Gateway transport nodewhich should be used " -"by default when setting up a network connection" -msgstr "" - -#: neutron/plugins/vmware/common/config.py:156 -msgid "User name for vsm" -msgstr "" - -#: neutron/plugins/vmware/common/config.py:160 -msgid "Password for vsm" -msgstr "" - -#: neutron/plugins/vmware/common/config.py:162 -msgid "uri for vsm" -msgstr "" - -#: neutron/plugins/vmware/common/config.py:164 -msgid "Optional parameter identifying the ID of datacenter to deploy NSX Edges" -msgstr "" - -#: neutron/plugins/vmware/common/config.py:167 -#: neutron/plugins/vmware/common/config.py:173 -msgid "Optional parameter identifying the ID of datastore to deploy NSX Edges" -msgstr "" - -#: neutron/plugins/vmware/common/config.py:170 -msgid "Optional parameter identifying the ID of resource to deploy NSX Edges" -msgstr "" - -#: neutron/plugins/vmware/common/config.py:176 -msgid "Network ID for physical network connectivity" -msgstr "" - -#: neutron/plugins/vmware/common/config.py:179 -msgid "Task status check interval" -msgstr "" - -#: neutron/plugins/vmware/common/config.py:193 -#, python-format -msgid "Invalid replication_mode: %s" -msgstr "" - -#: neutron/plugins/vmware/common/exceptions.py:21 -#, python-format -msgid "An unexpected error occurred in the NSX Plugin: %(err_msg)s" -msgstr "" - -#: neutron/plugins/vmware/common/exceptions.py:25 -#, python-format -msgid "Unable to fulfill request with version %(version)s." -msgstr "" - -#: neutron/plugins/vmware/common/exceptions.py:29 -#, python-format -msgid "Invalid NSX connection parameters: %(conn_params)s" -msgstr "" - -#: neutron/plugins/vmware/common/exceptions.py:33 -#, python-format -msgid "" -"Invalid cluster values: %(invalid_attrs)s. Please ensure that these " -"values are specified in the [DEFAULT] section of the NSX plugin ini file." -msgstr "" - -#: neutron/plugins/vmware/common/exceptions.py:39 -#, python-format -msgid "Unable to find cluster config entry for nova zone: %(nova_zone)s" -msgstr "" - -#: neutron/plugins/vmware/common/exceptions.py:44 -#, python-format -msgid "" -"Unable to create port on network %(network)s. Maximum number of ports " -"reached" -msgstr "" - -#: neutron/plugins/vmware/common/exceptions.py:49 -#, python-format -msgid "" -"While retrieving NAT rules, %(actual_rules)s were found whereas rules in " -"the (%(min_rules)s,%(max_rules)s) interval were expected" -msgstr "" - -#: neutron/plugins/vmware/common/exceptions.py:55 -#, python-format -msgid "Invalid NSX attachment type '%(attachment_type)s'" -msgstr "" - -#: neutron/plugins/vmware/common/exceptions.py:59 -msgid "" -"The networking backend is currently in maintenance mode and therefore " -"unable to accept requests which modify its state. Please try later." -msgstr "" - -#: neutron/plugins/vmware/common/exceptions.py:65 -#, python-format -msgid "Gateway Service %(gateway)s is already in use" -msgstr "" - -#: neutron/plugins/vmware/common/exceptions.py:69 -msgid "" -"An invalid security certificate was specified for the gateway device. " -"Certificates must be enclosed between '-----BEGIN CERTIFICATE-----' and '" -"-----END CERTIFICATE-----'" -msgstr "" - -#: neutron/plugins/vmware/common/exceptions.py:76 -#, python-format -msgid "Quota exceeded for Vcns resource: %(overs)s: %(err_msg)s" -msgstr "" - -#: neutron/plugins/vmware/common/exceptions.py:80 -#, python-format -msgid "Router %(router_id)s is in use by Loadbalancer Service %(vip_id)s" -msgstr "" - -#: neutron/plugins/vmware/common/exceptions.py:85 -#, python-format -msgid "Router %(router_id)s is in use by firewall Service %(firewall_id)s" -msgstr "" - -#: neutron/plugins/vmware/common/exceptions.py:90 -#, python-format -msgid "Error happened in NSX VCNS Driver: %(err_msg)s" -msgstr "" - -#: neutron/plugins/vmware/common/exceptions.py:94 -#, python-format -msgid "" -"Service cluster: '%(cluster_id)s' is unavailable. Please, check NSX setup" -" and/or configuration" -msgstr "" - -#: neutron/plugins/vmware/common/exceptions.py:99 -#, python-format -msgid "" -"An error occurred while connecting LSN %(lsn_id)s and network %(net_id)s " -"via port %(port_id)s" -msgstr "" - -#: neutron/plugins/vmware/common/exceptions.py:108 -#, python-format -msgid "Unable to find LSN for %(entity)s %(entity_id)s" -msgstr "" - -#: neutron/plugins/vmware/common/exceptions.py:112 -#, python-format -msgid "Unable to find port for LSN %(lsn_id)s and %(entity)s %(entity_id)s" -msgstr "" - -#: neutron/plugins/vmware/common/exceptions.py:117 -#, python-format -msgid "Unable to migrate network '%(net_id)s' to LSN: %(reason)s" -msgstr "" - -#: neutron/plugins/vmware/common/exceptions.py:121 -#, python-format -msgid "Configuration conflict on Logical Service Node %(lsn_id)s" -msgstr "" - -#: neutron/plugins/vmware/common/nsx_utils.py:67 -#, python-format -msgid "Unable to find NSX switches for Neutron network %s" -msgstr "" - -#: neutron/plugins/vmware/common/nsx_utils.py:114 -#, python-format -msgid "Unable to find NSX port for Neutron port %s" -msgstr "" - -#: neutron/plugins/vmware/common/nsx_utils.py:154 -#, python-format -msgid "Unable to find NSX security profile for Neutron security group %s" -msgstr "" - -#: neutron/plugins/vmware/common/nsx_utils.py:158 -#, python-format -msgid "Multiple NSX security profiles found for Neutron security group %s" -msgstr "" - -#: neutron/plugins/vmware/common/nsx_utils.py:189 -#, python-format -msgid "Unable to find NSX router for Neutron router %s" -msgstr "" - -#: neutron/plugins/vmware/common/nsx_utils.py:246 -#, python-format -msgid "" -"Unable to retrieve operational status for gateway devices belonging to " -"tenant: %s" -msgstr "" - -#: neutron/plugins/vmware/common/nsx_utils.py:249 -msgid "Unable to retrieve operational status for gateway devices" -msgstr "" - -#: neutron/plugins/vmware/common/sync.py:231 -#, python-format -msgid "" -"Minimum request delay:%(req_delay)s must not exceed synchronization " -"interval:%(sync_interval)s" -msgstr "" - -#: neutron/plugins/vmware/common/sync.py:264 -#, python-format -msgid "Logical switch for neutron network %s not found on NSX." -msgstr "" - -#: neutron/plugins/vmware/common/sync.py:299 -#: neutron/plugins/vmware/common/sync.py:381 -#: neutron/plugins/vmware/common/sync.py:476 -#, python-format -msgid "Updating status for neutron resource %(q_id)s to: %(status)s" -msgstr "" - -#: neutron/plugins/vmware/common/sync.py:351 -#, python-format -msgid "Logical router for neutron router %s not found on NSX." -msgstr "" - -#: neutron/plugins/vmware/common/sync.py:401 -#, python-format -msgid "Unable to find Neutron router id for NSX logical router: %s" -msgstr "" - -#: neutron/plugins/vmware/common/sync.py:443 -#, python-format -msgid "Logical switch port for neutron port %s not found on NSX." -msgstr "" - -#: neutron/plugins/vmware/common/sync.py:536 -#, python-format -msgid "" -"Requested page size is %(cur_chunk_size)d.It might be necessary to do " -"%(num_requests)d round-trips to NSX for fetching data. Please tune sync " -"parameters to ensure chunk size is less than %(max_page_size)d" -msgstr "" - -#: neutron/plugins/vmware/common/sync.py:569 -#, python-format -msgid "Fetching up to %s resources from NSX backend" -msgstr "" - -#: neutron/plugins/vmware/common/sync.py:589 -#, python-format -msgid "Total data size: %d" -msgstr "" - -#: neutron/plugins/vmware/common/sync.py:593 -#, python-format -msgid "" -"Fetched %(num_lswitches)d logical switches, %(num_lswitchports)d logical " -"switch ports,%(num_lrouters)d logical routers" -msgstr "" - -#: neutron/plugins/vmware/common/sync.py:609 -#, python-format -msgid "Running state synchronization task. Chunk: %s" -msgstr "" - -#: neutron/plugins/vmware/common/sync.py:619 -#, python-format -msgid "" -"An error occurred while communicating with NSX backend. Will retry " -"synchronization in %d seconds" -msgstr "" - -#: neutron/plugins/vmware/common/sync.py:623 -#, python-format -msgid "Time elapsed querying NSX: %s" -msgstr "" - -#: neutron/plugins/vmware/common/sync.py:630 -#, python-format -msgid "Number of chunks: %d" -msgstr "" - -#: neutron/plugins/vmware/common/sync.py:648 -#, python-format -msgid "Time elapsed hashing data: %s" -msgstr "" - -#: neutron/plugins/vmware/common/sync.py:660 -#, python-format -msgid "Synchronization for chunk %(chunk_num)d of %(total_chunks)d performed" -msgstr "" - -#: neutron/plugins/vmware/common/sync.py:672 -#, python-format -msgid "Time elapsed at end of sync: %s" -msgstr "" - -#: neutron/plugins/vmware/common/utils.py:64 -#, python-format -msgid "Specified name:'%s' exceeds maximum length. It will be truncated on NSX" -msgstr "" - -#: neutron/plugins/vmware/dbexts/db.py:76 -#, python-format -msgid "Port mapping for %s already available" -msgstr "" - -#: neutron/plugins/vmware/dbexts/db.py:123 -#, python-format -msgid "NSX identifiers for neutron port %s not yet stored in Neutron DB" -msgstr "" - -#: neutron/plugins/vmware/dbexts/db.py:134 -#, python-format -msgid "NSX identifiers for neutron router %s not yet stored in Neutron DB" -msgstr "" - -#: neutron/plugins/vmware/dbexts/db.py:149 -#, python-format -msgid "NSX identifiers for neutron security group %s not yet stored in Neutron DB" -msgstr "" - -#: neutron/plugins/vmware/dbexts/lsn_db.py:87 -#: neutron/plugins/vmware/dhcp_meta/lsnmanager.py:71 -#, python-format -msgid "Unable to find Logical Service Node for network %s" -msgstr "" - -#: neutron/plugins/vmware/dbexts/networkgw_db.py:46 -#, python-format -msgid "" -"Network Gateway '%(gateway_id)s' still has active mappings with one or " -"more neutron networks." -msgstr "" - -#: neutron/plugins/vmware/dbexts/networkgw_db.py:51 -#, python-format -msgid "Network Gateway %(gateway_id)s could not be found" -msgstr "" - -#: neutron/plugins/vmware/dbexts/networkgw_db.py:55 -#, python-format -msgid "" -"Network Gateway Device '%(device_id)s' is still used by one or more " -"network gateways." -msgstr "" - -#: neutron/plugins/vmware/dbexts/networkgw_db.py:60 -#, python-format -msgid "Network Gateway Device %(device_id)s could not be found." -msgstr "" - -#: neutron/plugins/vmware/dbexts/networkgw_db.py:64 -#, python-format -msgid "" -"Port '%(port_id)s' is owned by '%(device_owner)s' and therefore cannot be" -" deleted directly via the port API." -msgstr "" - -#: neutron/plugins/vmware/dbexts/networkgw_db.py:69 -#, python-format -msgid "" -"The specified mapping '%(mapping)s' is already in use on network gateway " -"'%(gateway_id)s'." -msgstr "" - -#: neutron/plugins/vmware/dbexts/networkgw_db.py:74 -#, python-format -msgid "" -"Multiple network connections found on '%(gateway_id)s' with provided " -"criteria." -msgstr "" - -#: neutron/plugins/vmware/dbexts/networkgw_db.py:79 -#, python-format -msgid "" -"The connection %(network_mapping_info)s was not found on the network " -"gateway '%(network_gateway_id)s'" -msgstr "" - -#: neutron/plugins/vmware/dbexts/networkgw_db.py:84 -#, python-format -msgid "The network gateway %(gateway_id)s cannot be updated or deleted" -msgstr "" - -#: neutron/plugins/vmware/dbexts/networkgw_db.py:192 -msgid "" -"A network identifier must be specified when connecting a network to a " -"network gateway. Unable to complete operation" -msgstr "" - -#: neutron/plugins/vmware/dbexts/networkgw_db.py:198 -#, python-format -msgid "" -"Invalid keys found among the ones provided in request body: " -"%(connection_attrs)s." -msgstr "" - -#: neutron/plugins/vmware/dbexts/networkgw_db.py:206 -msgid "Cannot specify a segmentation id when the segmentation type is flat" -msgstr "" - -#: neutron/plugins/vmware/dbexts/networkgw_db.py:210 -#, python-format -msgid "Invalid segmentation id (%d) for vlan segmentation type" -msgstr "" - -#: neutron/plugins/vmware/dbexts/networkgw_db.py:265 -#, python-format -msgid "Created network gateway with id:%s" -msgstr "" - -#: neutron/plugins/vmware/dbexts/networkgw_db.py:277 -#, python-format -msgid "Updated network gateway with id:%s" -msgstr "" - -#: neutron/plugins/vmware/dbexts/networkgw_db.py:292 -#, python-format -msgid "Network gateway '%s' was destroyed." -msgstr "" - -#: neutron/plugins/vmware/dbexts/networkgw_db.py:309 -#, python-format -msgid "Connecting network '%(network_id)s' to gateway '%(network_gateway_id)s'" -msgstr "" - -#: neutron/plugins/vmware/dbexts/networkgw_db.py:350 -#, python-format -msgid "" -"Requested network '%(network_id)s' not found.Unable to create network " -"connection on gateway '%(network_gateway_id)s" -msgstr "" - -#: neutron/plugins/vmware/dbexts/networkgw_db.py:358 -#, python-format -msgid "" -"Gateway port for '%(network_gateway_id)s' created on network " -"'%(network_id)s':%(port_id)s" -msgstr "" - -#: neutron/plugins/vmware/dbexts/networkgw_db.py:374 -#, python-format -msgid "Ensured no Ip addresses are configured on port %s" -msgstr "" - -#: neutron/plugins/vmware/dbexts/networkgw_db.py:384 -#, python-format -msgid "" -"Disconnecting network '%(network_id)s' from gateway " -"'%(network_gateway_id)s'" -msgstr "" - -#: neutron/plugins/vmware/dbexts/networkgw_db.py:478 -#, python-format -msgid "Created network gateway device: %s" -msgstr "" - -#: neutron/plugins/vmware/dbexts/networkgw_db.py:489 -#, python-format -msgid "Updated network gateway device: %s" -msgstr "" - -#: neutron/plugins/vmware/dbexts/networkgw_db.py:502 -#, python-format -msgid "Deleted network gateway device: %s." -msgstr "" - -#: neutron/plugins/vmware/dbexts/qos_db.py:295 -#, python-format -msgid "DSCP value (%s) will be ignored with 'trusted' marking" -msgstr "" - -#: neutron/plugins/vmware/dbexts/vcns_db.py:77 -#, python-format -msgid "Rule Resource binding with id:%s not found!" -msgstr "" - -#: neutron/plugins/vmware/dbexts/vcns_db.py:94 -msgid "Rule Resource binding not found!" -msgstr "" - -#: neutron/plugins/vmware/dbexts/vcns_db.py:123 -#: neutron/plugins/vmware/dbexts/vcns_db.py:133 -#, python-format -msgid "VIP Resource binding with id:%s not found!" -msgstr "" - -#: neutron/plugins/vmware/dbexts/vcns_db.py:162 -#, python-format -msgid "" -"Pool Resource binding with edge_id:%(edge_id)s pool_vseid:%(pool_vseid)s " -"not found!" -msgstr "" - -#: neutron/plugins/vmware/dbexts/vcns_db.py:174 -#, python-format -msgid "Pool Resource binding with id:%s not found!" -msgstr "" - -#: neutron/plugins/vmware/dbexts/vcns_db.py:200 -#, python-format -msgid "Monitor Resource binding with id:%s not found!" -msgstr "" - -#: neutron/plugins/vmware/dhcp_meta/lsnmanager.py:40 -msgid "" -"Pull LSN information from NSX in case it is missing from the local data " -"store. This is useful to rebuild the local store in case of server " -"recovery." -msgstr "" - -#: neutron/plugins/vmware/dhcp_meta/lsnmanager.py:82 -#, python-format -msgid "Unable to create LSN for network %s" -msgstr "" - -#: neutron/plugins/vmware/dhcp_meta/lsnmanager.py:90 -#, python-format -msgid "Unable to delete Logical Service Node %s" -msgstr "" - -#: neutron/plugins/vmware/dhcp_meta/lsnmanager.py:107 -#, python-format -msgid "" -"Unable to find Logical Service Node Port for LSN %(lsn_id)s and subnet " -"%(subnet_id)s" -msgstr "" - -#: neutron/plugins/vmware/dhcp_meta/lsnmanager.py:129 -#, python-format -msgid "" -"Unable to find Logical Service Node Port for LSN %(lsn_id)s and mac " -"address %(mac)s" -msgstr "" - -#: neutron/plugins/vmware/dhcp_meta/lsnmanager.py:149 -#, python-format -msgid "Unable to create port for LSN %s" -msgstr "" - -#: neutron/plugins/vmware/dhcp_meta/lsnmanager.py:157 -#, python-format -msgid "Unable to delete LSN Port %s" -msgstr "" - -#: neutron/plugins/vmware/dhcp_meta/lsnmanager.py:174 -#, python-format -msgid "Metadata port not found while attempting to delete it from network %s" -msgstr "" - -#: neutron/plugins/vmware/dhcp_meta/lsnmanager.py:177 -#, python-format -msgid "Unable to find Logical Services Node Port with MAC %s" -msgstr "" - -#: neutron/plugins/vmware/dhcp_meta/lsnmanager.py:262 -#, python-format -msgid "" -"Unable to configure dhcp for Logical Service Node %(lsn_id)s and port " -"%(lsn_port_id)s" -msgstr "" - -#: neutron/plugins/vmware/dhcp_meta/lsnmanager.py:283 -#, python-format -msgid "Unable to configure metadata for subnet %s" -msgstr "" - -#: neutron/plugins/vmware/dhcp_meta/lsnmanager.py:305 -#, python-format -msgid "Error while configuring LSN port %s" -msgstr "" - -#: neutron/plugins/vmware/dhcp_meta/lsnmanager.py:377 -#, python-format -msgid "Unable to save LSN for network %s" -msgstr "" - -#: neutron/plugins/vmware/dhcp_meta/lsnmanager.py:443 -#, python-format -msgid "Unable to save LSN port for subnet %s" -msgstr "" - -#: neutron/plugins/vmware/dhcp_meta/migration.py:81 -#, python-format -msgid "Port %s is already gone" -msgstr "" - -#: neutron/plugins/vmware/dhcp_meta/migration.py:112 -msgid "LSN already exist" -msgstr "" - -#: neutron/plugins/vmware/dhcp_meta/migration.py:116 -msgid "Cannot migrate an external network" -msgstr "" - -#: neutron/plugins/vmware/dhcp_meta/migration.py:125 -msgid "Cannot migrate a 'metadata' network" -msgstr "" - -#: neutron/plugins/vmware/dhcp_meta/migration.py:128 -msgid "Unable to support multiple subnets per network" -msgstr "" - -#: neutron/plugins/vmware/dhcp_meta/nsx.py:39 -msgid "Comma separated list of additional domain name servers" -msgstr "" - -#: neutron/plugins/vmware/dhcp_meta/nsx.py:47 -msgid "Default DHCP lease time" -msgstr "" - -#: neutron/plugins/vmware/dhcp_meta/nsx.py:55 -msgid "IP address used by Metadata server." -msgstr "" - -#: neutron/plugins/vmware/dhcp_meta/nsx.py:59 -msgid "TCP Port used by Metadata server." -msgstr "" - -#: neutron/plugins/vmware/dhcp_meta/nsx.py:136 -#, python-format -msgid "" -"Error while creating subnet %(cidr)s for network %(network)s. Please, " -"contact administrator" -msgstr "" - -#: neutron/plugins/vmware/dhcp_meta/nsx.py:206 -#: neutron/plugins/vmware/dhcp_meta/nsx.py:224 -#, python-format -msgid "Performing DHCP %(action)s for resource: %(resource)s" -msgstr "" - -#: neutron/plugins/vmware/dhcp_meta/nsx.py:211 -#, python-format -msgid "Network %s is external: no LSN to create" -msgstr "" - -#: neutron/plugins/vmware/dhcp_meta/nsx.py:219 -#, python-format -msgid "Logical Services Node for network %s configured successfully" -msgstr "" - -#: neutron/plugins/vmware/dhcp_meta/nsx.py:241 -#, python-format -msgid "Error while configuring DHCP for port %s" -msgstr "" - -#: neutron/plugins/vmware/dhcp_meta/nsx.py:253 -#, python-format -msgid "DHCP is disabled for subnet %s: nothing to do" -msgstr "" - -#: neutron/plugins/vmware/dhcp_meta/nsx.py:272 -#, python-format -msgid "DHCP for port %s configured successfully" -msgstr "" - -#: neutron/plugins/vmware/dhcp_meta/nsx.py:280 -#, python-format -msgid "Network %s is external: nothing to do" -msgstr "" - -#: neutron/plugins/vmware/dhcp_meta/nsx.py:288 -#, python-format -msgid "Configuring metadata entry for port %s" -msgstr "" - -#: neutron/plugins/vmware/dhcp_meta/nsx.py:300 -#, python-format -msgid "Metadata for port %s configured successfully" -msgstr "" - -#: neutron/plugins/vmware/dhcp_meta/nsx.py:304 -#, python-format -msgid "Handle metadata access via router: %(r)s and interface %(i)s" -msgstr "" - -#: neutron/plugins/vmware/dhcp_meta/nsx.py:321 -#, python-format -msgid "Metadata for router %s handled successfully" -msgstr "" - -#: neutron/plugins/vmware/dhcp_meta/rpc.py:67 -#, python-format -msgid "Subnet %s does not have a gateway, the metadata route will not be created" -msgstr "" - -#: neutron/plugins/vmware/dhcp_meta/rpc.py:91 -msgid "Metadata access network is disabled" -msgstr "" - -#: neutron/plugins/vmware/dhcp_meta/rpc.py:94 -msgid "" -"Overlapping IPs must be enabled in order to setup the metadata access " -"network" -msgstr "" - -#: neutron/plugins/vmware/dhcp_meta/rpc.py:114 -#, python-format -msgid "" -"No router interface found for router '%s'. No metadata access network " -"should be created or destroyed" -msgstr "" - -#: neutron/plugins/vmware/dhcp_meta/rpc.py:122 -#, python-format -msgid "" -"An error occurred while operating on the metadata access network for " -"router:'%s'" -msgstr "" - -#: neutron/plugins/vmware/extensions/networkgw.py:84 -msgid "Cannot create a gateway with an empty device list" -msgstr "" - -#: neutron/plugins/vmware/extensions/networkgw.py:100 -#, python-format -msgid "Unexpected keys found in device description:%s" -msgstr "" - -#: neutron/plugins/vmware/extensions/networkgw.py:104 -#, python-format -msgid "%s: provided data are not iterable" -msgstr "" - -#: neutron/plugins/vmware/extensions/networkgw.py:111 -msgid "A connector type is required to create a gateway device" -msgstr "" - -#: neutron/plugins/vmware/extensions/networkgw.py:120 -#, python-format -msgid "Unknown connector type: %s" -msgstr "" - -#: neutron/plugins/vmware/extensions/networkgw.py:127 -msgid "Number of network gateways allowed per tenant, -1 for unlimited" -msgstr "" - -#: neutron/plugins/vmware/extensions/qos.py:34 -msgid "Need to be admin in order to create queue called default" -msgstr "" - -#: neutron/plugins/vmware/extensions/qos.py:38 -msgid "Default queue already exists." -msgstr "" - -#: neutron/plugins/vmware/extensions/qos.py:42 -#, python-format -msgid "Invalid value for dscp %(data)s must be integer value between 0 and 63." -msgstr "" - -#: neutron/plugins/vmware/extensions/qos.py:47 -msgid "The qos marking cannot be set to 'trusted' when the DSCP field is set" -msgstr "" - -#: neutron/plugins/vmware/extensions/qos.py:52 -msgid "Invalid bandwidth rate, min greater than max." -msgstr "" - -#: neutron/plugins/vmware/extensions/qos.py:56 -#, python-format -msgid "Invalid bandwidth rate, %(data)s must be a non negative integer." -msgstr "" - -#: neutron/plugins/vmware/extensions/qos.py:61 -#, python-format -msgid "Queue %(id)s does not exist" -msgstr "" - -#: neutron/plugins/vmware/extensions/qos.py:65 -msgid "Unable to delete queue attached to port." -msgstr "" - -#: neutron/plugins/vmware/extensions/qos.py:69 -msgid "Port is not associated with lqueue" -msgstr "" - -#: neutron/plugins/vmware/extensions/qos.py:80 -#, python-format -msgid "'%s' must be a non negative integer." -msgstr "" - -#: neutron/plugins/vmware/nsxlib/__init__.py:80 -#, python-format -msgid "Error. %(type)s exception: %(exc)s." -msgstr "" - -#: neutron/plugins/vmware/nsxlib/__init__.py:84 -#, python-format -msgid "locals=[%s]" -msgstr "" - -#: neutron/plugins/vmware/nsxlib/lsn.py:171 -#, python-format -msgid "" -"Attempt to plug Logical Services Node %(lsn)s into network with port " -"%(port)s failed. PatchAttachment already exists with another port" -msgstr "" - -#: neutron/plugins/vmware/nsxlib/router.py:252 -#, python-format -msgid "Cannot update NSX routes %(routes)s for router %(router_id)s" -msgstr "" - -#: neutron/plugins/vmware/nsxlib/router.py:346 -#, python-format -msgid "Created logical port %(lport_uuid)s on logical router %(lrouter_uuid)s" -msgstr "" - -#: neutron/plugins/vmware/nsxlib/router.py:374 -#, python-format -msgid "Updated logical port %(lport_uuid)s on logical router %(lrouter_uuid)s" -msgstr "" - -#: neutron/plugins/vmware/nsxlib/router.py:385 -#, python-format -msgid "" -"Delete logical router port %(lport_uuid)s on logical router " -"%(lrouter_uuid)s" -msgstr "" - -#: neutron/plugins/vmware/nsxlib/router.py:449 -#, python-format -msgid "Invalid keys for NAT match: %s" -msgstr "" - -#: neutron/plugins/vmware/nsxlib/router.py:455 -#, python-format -msgid "Creating NAT rule: %s" -msgstr "" - -#: neutron/plugins/vmware/nsxlib/router.py:470 -msgid "" -"No SNAT rules cannot be applied as they are not available in this version" -" of the NSX platform" -msgstr "" - -#: neutron/plugins/vmware/nsxlib/router.py:475 -msgid "" -"No DNAT rules cannot be applied as they are not available in this version" -" of the NSX platform" -msgstr "" - -#: neutron/plugins/vmware/nsxlib/router.py:576 -#, python-format -msgid "" -"Found %(actual_rule_num)d matching NAT rules, which is not in the " -"expected range (%(min_exp_rule_num)d,%(max_exp_rule_num)d)" -msgstr "" - -#: neutron/plugins/vmware/nsxlib/router.py:622 -#, python-format -msgid "Router Port %(lport_id)s not found on router %(lrouter_id)s" -msgstr "" - -#: neutron/plugins/vmware/nsxlib/router.py:627 -#, python-format -msgid "" -"An exception occurred while updating IP addresses on a router logical " -"port:%s" -msgstr "" - -#: neutron/plugins/vmware/nsxlib/secgroup.py:94 -#, python-format -msgid "Created Security Profile: %s" -msgstr "" - -#: neutron/plugins/vmware/nsxlib/secgroup.py:120 -#, python-format -msgid "Updated Security Profile: %s" -msgstr "" - -#: neutron/plugins/vmware/nsxlib/secgroup.py:140 -#, python-format -msgid "Unable to find security profile %s on NSX backend" -msgstr "" - -#: neutron/plugins/vmware/nsxlib/switch.py:130 -#, python-format -msgid "Created logical switch: %s" -msgstr "" - -#: neutron/plugins/vmware/nsxlib/switch.py:150 -#: neutron/plugins/vmware/nsxlib/switch.py:165 -#, python-format -msgid "Network not found, Error: %s" -msgstr "" - -#: neutron/plugins/vmware/nsxlib/switch.py:188 -msgid "Port or Network not found" -msgstr "" - -#: neutron/plugins/vmware/nsxlib/switch.py:247 -#, python-format -msgid "Lswitch %s not found in NSX" -msgstr "" - -#: neutron/plugins/vmware/nsxlib/switch.py:256 -msgid "Unable to get ports" -msgstr "" - -#: neutron/plugins/vmware/nsxlib/switch.py:273 -#, python-format -msgid "" -"Looking for port with q_port_id tag '%(neutron_port_id)s' on: " -"'%(lswitch_uuid)s'" -msgstr "" - -#: neutron/plugins/vmware/nsxlib/switch.py:281 -#, python-format -msgid "" -"Found '%(num_ports)d' ports with q_port_id tag: '%(neutron_port_id)s'. " -"Only 1 was expected." -msgstr "" - -#: neutron/plugins/vmware/nsxlib/switch.py:290 -#, python-format -msgid "get_port() %(network)s %(port)s" -msgstr "" - -#: neutron/plugins/vmware/nsxlib/switch.py:298 -#: neutron/plugins/vmware/nsxlib/switch.py:329 -#, python-format -msgid "Port or Network not found, Error: %s" -msgstr "" - -#: neutron/plugins/vmware/nsxlib/switch.py:324 -#, python-format -msgid "Updated logical port %(result)s on logical switch %(uuid)s" -msgstr "" - -#: neutron/plugins/vmware/nsxlib/switch.py:359 -#, python-format -msgid "Created logical port %(result)s on logical switch %(uuid)s" -msgstr "" - -#: neutron/plugins/vmware/nsxlib/switch.py:371 -#, python-format -msgid "Port not found, Error: %s" -msgstr "" - -#: neutron/plugins/vmware/nsxlib/versioning.py:56 -msgid "Operation may not be supported" -msgstr "" - -#: neutron/plugins/vmware/nsxlib/versioning.py:64 -msgid "" -"NSX version is not set. Unable to complete request correctly. Check log " -"for NSX communication errors." -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:213 -#, python-format -msgid "Unable to process default l2 gw service:%s" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:250 -#: neutron/plugins/vmware/plugins/service.py:439 -#, python-format -msgid "Unable to create port on NSX logical router %s" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:253 -#, python-format -msgid "" -"Unable to create logical router port for neutron port id %(port_id)s on " -"router %(nsx_router_id)s" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:338 -#, python-format -msgid "" -"Unable to plug attachment in NSX logical router port %(r_port_id)s, " -"associated with Neutron %(q_port_id)s" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:344 -#, python-format -msgid "" -"Unable to plug attachment in router port %(r_port_id)s for neutron port " -"id %(q_port_id)s on router %(router_id)s" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:390 -msgid "An exception occurred while selecting logical switch for the port" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:430 -#, python-format -msgid "" -"An exception occurred while creating the neutron port %s on the NSX " -"plaform" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:442 -#: neutron/plugins/vmware/plugins/base.py:494 -#: neutron/plugins/vmware/plugins/base.py:692 -#, python-format -msgid "" -"NSX plugin does not support regular VIF ports on external networks. Port " -"%s will be down." -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:474 -#, python-format -msgid "" -"Concurrent network deletion detected; Back-end Port %(nsx_id)s creation " -"to be rolled back for Neutron port: %(neutron_id)s" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:513 -#, python-format -msgid "Port %s not found in NSX" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:522 -#, python-format -msgid "" -"Neutron port %(port_id)s not found on NSX backend. Terminating delete " -"operation. A dangling router port might have been left on router " -"%(router_id)s" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:537 -#, python-format -msgid "" -"Ignoring exception as this means the peer for port '%s' has already been " -"deleted." -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:549 -#, python-format -msgid "" -"It is not allowed to create router interface ports on external networks " -"as '%s'" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:587 -#, python-format -msgid "" -"device_id field must be populated in order to create an external gateway " -"port for network %s" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:597 -#, python-format -msgid "The gateway port for the NSX router %s was not found on the backend" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:673 -#: neutron/plugins/vmware/plugins/base.py:1749 -#, python-format -msgid "Logical router resource %s not found on NSX platform" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:677 -#: neutron/plugins/vmware/plugins/base.py:1753 -msgid "Unable to update logical routeron NSX Platform" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:765 -#, python-format -msgid "%s required" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:770 -msgid "Segmentation ID cannot be specified with flat network type" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:774 -msgid "Segmentation ID must be specified with vlan network type" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:778 -#: neutron/plugins/vmware/plugins/base.py:794 -#, python-format -msgid "%(segmentation_id)s out of range (%(min_id)s through %(max_id)s)" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:800 -#, python-format -msgid "%(net_type_param)s %(net_type_value)s not supported" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:883 -#, python-format -msgid "Maximum number of logical ports reached for logical network %s" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:929 -#, python-format -msgid "" -"Network with admin_state_up=False are not yet supported by this plugin. " -"Ignoring setting for network %s" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:1007 -#, python-format -msgid "The following logical switches were not found on the NSX backend:%s" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:1044 -msgid "admin_state_up=False networks are not supported." -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:1064 -#, python-format -msgid "Unable to find NSX mappings for neutron network:%s" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:1071 -#, python-format -msgid "" -"Logical switch update on NSX backend failed. Neutron network " -"id:%(net_id)s; NSX lswitch id:%(lswitch_id)s;Error:%(error)s" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:1151 -#, python-format -msgid "Logical switch for network %s was not found in NSX." -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:1162 -msgid "Unable to create port or set port attachment in NSX." -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:1285 -#, python-format -msgid "Unable to update port id: %s." -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:1368 -msgid "" -"Cannot create a distributed router with the NSX platform currently in " -"execution. Please, try without specifying the 'distributed' attribute." -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:1374 -msgid "Unable to create logical router on NSX Platform" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:1385 -#, python-format -msgid "" -"Unable to create L3GW port on logical router %(router_uuid)s. Verify " -"Default Layer-3 Gateway service %(def_l3_gw_svc)s id is correct" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:1395 -#, python-format -msgid "Unable to create router %s on NSX backend" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:1424 -#: neutron/plugins/vmware/plugins/base.py:1509 -#: neutron/plugins/vmware/plugins/service.py:201 -#: neutron/plugins/vmware/plugins/service.py:1240 -#, python-format -msgid "Network '%s' is not a valid external network" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:1473 -#, python-format -msgid "Failed to set gateway info for router being created:%s - removing router" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:1476 -#, python-format -msgid "" -"Create router failed while setting external gateway. Router:%s has been " -"removed from DB and backend" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:1518 -msgid "" -"'routes' cannot contain route '0.0.0.0/0', this must be updated through " -"the default gateway attribute" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:1534 -#, python-format -msgid "Logical router %s not found on NSX Platform" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:1538 -msgid "Unable to update logical router on NSX Platform" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:1540 -msgid "" -"Request cannot contain 'routes' with the NSX platform currently in " -"execution. Please, try without specifying the static routes." -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:1597 -#, python-format -msgid "Logical router '%s' not found on NSX Platform" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:1601 -#, python-format -msgid "Unable to delete logical router '%s' on NSX Platform" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:1611 -#, python-format -msgid "" -"Unable to remove NSX mapping for Neutron router %(router_id)s because of " -"the following exception:%(d_exc)s" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:1785 -#, python-format -msgid "" -"An error occurred while removing NAT rules on the NSX platform for " -"floating ip:%s" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:1790 -msgid "An incorrect number of matching NAT rules was found on the NSX platform" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:1932 -#, python-format -msgid "" -"An error occurred while creating NAT rules on the NSX platform for " -"floating ip:%(floating_ip)s mapped to internal ip:%(internal_ip)s" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:1938 -msgid "Failed to update NAT rules for floatingip update" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:1980 -#, python-format -msgid "Nat rules not found in nsx for port: %s" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:2020 -#, python-format -msgid "Unable to create l2_gw_service for: %s" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:2043 -msgid "" -"Unable to remove gateway service from NSX plaform - the resource was not " -"found" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:2072 -#, python-format -msgid "Unable to update name on NSX backend for network gateway: %s" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:2279 -#, python-format -msgid "" -"Removal of gateway device: %(neutron_id)s failed on NSX backend (NSX " -"id:%(nsx_id)s) because the NSX resource was not found" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:2286 -#, python-format -msgid "" -"Removal of gateway device: %(neutron_id)s failed on NSX backend (NSX " -"id:%(nsx_id)s). Neutron and NSX states have diverged." -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:2334 -#, python-format -msgid "" -"Error while updating security profile %(uuid)s with name %(name)s: " -"%(error)s." -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:2366 -#, python-format -msgid "" -"The NSX security profile %(sec_profile_id)s, associated with the Neutron " -"security group %(sec_group_id)s was not found on the backend" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:2374 -#, python-format -msgid "" -"An exception occurred while removing the NSX security profile " -"%(sec_profile_id)s, associated with Netron security group " -"%(sec_group_id)s" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:2381 -#, python-format -msgid "Unable to remove security group %s from backend" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:2394 -#, python-format -msgid "Port values not valid for protocol: %s" -msgstr "" - -#: neutron/plugins/vmware/plugins/service.py:424 -#, python-format -msgid "An exception occurred while creating a port on lswitch %s" -msgstr "" - -#: neutron/plugins/vmware/plugins/service.py:472 -#, python-format -msgid "Unable to create integration logic switch for router %s" -msgstr "" - -#: neutron/plugins/vmware/plugins/service.py:482 -#, python-format -msgid "Unable to add router interface to integration lswitch for router %s" -msgstr "" - -#: neutron/plugins/vmware/plugins/service.py:492 -#, python-format -msgid "Unable to create advance service router for %s" -msgstr "" - -#: neutron/plugins/vmware/plugins/service.py:541 -#, python-format -msgid "Did not found lswitch %s in NSX" -msgstr "" - -#: neutron/plugins/vmware/plugins/service.py:887 -#, python-format -msgid "Failed to create firewall on vShield Edge bound on router %s" -msgstr "" - -#: neutron/plugins/vmware/plugins/service.py:895 -msgid "Bad Firewall request Input" -msgstr "" - -#: neutron/plugins/vmware/plugins/service.py:910 -#: neutron/plugins/vmware/plugins/service.py:1226 -msgid "router_id is not provided!" -msgstr "" - -#: neutron/plugins/vmware/plugins/service.py:914 -#: neutron/plugins/vmware/plugins/service.py:1614 -#, python-format -msgid "router_id:%s is not an advanced router!" -msgstr "" - -#: neutron/plugins/vmware/plugins/service.py:919 -msgid "A firewall is already associated with the router" -msgstr "" - -#: neutron/plugins/vmware/plugins/service.py:1116 -#, python-format -msgid "Failed to find the edge with vip_id: %s" -msgstr "" - -#: neutron/plugins/vmware/plugins/service.py:1153 -#, python-format -msgid "" -"Operation can't be performed, Since resource %(model)s : %(id)s is in " -"DELETEing status!" -msgstr "" - -#: neutron/plugins/vmware/plugins/service.py:1162 -#, python-format -msgid "Resource %(model)s : %(id)s not found!" -msgstr "" - -#: neutron/plugins/vmware/plugins/service.py:1187 -#, python-format -msgid "Failed to create healthmonitor associated with pool id: %s!" -msgstr "" - -#: neutron/plugins/vmware/plugins/service.py:1204 -msgid "Failed to create pool on vshield edge" -msgstr "" - -#: neutron/plugins/vmware/plugins/service.py:1231 -#, python-format -msgid "router_id: %s is not an advanced router!" -msgstr "" - -#: neutron/plugins/vmware/plugins/service.py:1264 -msgid "Failed to create vip!" -msgstr "" - -#: neutron/plugins/vmware/plugins/service.py:1304 -#, python-format -msgid "Failed to update vip with id: %s!" -msgstr "" - -#: neutron/plugins/vmware/plugins/service.py:1321 -#, python-format -msgid "Failed to delete vip with id: %s!" -msgstr "" - -#: neutron/plugins/vmware/plugins/service.py:1377 -#, python-format -msgid "Failed to update pool with id: %s!" -msgstr "" - -#: neutron/plugins/vmware/plugins/service.py:1399 -#: neutron/plugins/vmware/plugins/service.py:1446 -#: neutron/plugins/vmware/plugins/service.py:1469 -msgid "Failed to update pool with the member" -msgstr "" - -#: neutron/plugins/vmware/plugins/service.py:1425 -msgid "Failed to update old pool with the member" -msgstr "" - -#: neutron/plugins/vmware/plugins/service.py:1489 -#, python-format -msgid "Failed to update monitor with id: %s!" -msgstr "" - -#: neutron/plugins/vmware/plugins/service.py:1499 -msgid "Vcns right now can only support one monitor per pool" -msgstr "" - -#: neutron/plugins/vmware/plugins/service.py:1528 -msgid "Failed to associate monitor with pool!" -msgstr "" - -#: neutron/plugins/vmware/plugins/service.py:1559 -msgid "Failed to update pool with pool_monitor!" -msgstr "" - -#: neutron/plugins/vmware/plugins/service.py:1576 -#, python-format -msgid "" -"Failed to update ipsec vpn configuration on edge, since the router: %s " -"does not have a gateway yet!" -msgstr "" - -#: neutron/plugins/vmware/plugins/service.py:1601 -msgid "Bad or unsupported Input request!" -msgstr "" - -#: neutron/plugins/vmware/plugins/service.py:1604 -#, python-format -msgid "" -"Failed to update ipsec VPN configuration with vpnservice: " -"%(vpnservice_id)s on vShield Edge: %(edge_id)s" -msgstr "" - -#: neutron/plugins/vmware/plugins/service.py:1619 -#, python-format -msgid "a vpnservice is already associated with the router: %s" -msgstr "" - -#: neutron/plugins/vmware/plugins/service.py:1756 -#, python-format -msgid "Router %s not found" -msgstr "" - -#: neutron/plugins/vmware/shell/commands.py:24 -#, python-format -msgid "" -"\n" -"Service type = %s\n" -msgstr "" - -#: neutron/plugins/vmware/shell/commands.py:27 -#, python-format -msgid "Service uuids = %s\n" -msgstr "" - -#: neutron/plugins/vmware/shell/commands.py:28 -#, python-format -msgid "" -"Port uuids = %s\n" -"\n" -msgstr "" - -#: neutron/plugins/vmware/shell/commands.py:37 -msgid "ID or name of network to run report on" -msgstr "" - -#: neutron/plugins/vmware/shell/commands.py:46 -msgid "Migration report is:\n" -msgstr "" - -#: neutron/plugins/vmware/shell/commands.py:56 -msgid "ID or name of network to migrate" -msgstr "" - -#: neutron/plugins/vmware/shell/commands.py:66 -msgid "Migration has been successful:\n" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:132 -#, python-format -msgid "" -"VCNS: Failed to get edge status:\n" -"%s" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:164 -#, python-format -msgid "" -"VCNS: Failed to update vnic %(config)s:\n" -"%(response)s" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:170 -#, python-format -msgid "VCNS: Failed to update vnic %d" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:187 -#, python-format -msgid "Vnic %d currently not supported" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:221 -#, python-format -msgid "VCNS: deploy edge failed for router %s." -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:240 -#, python-format -msgid "VCNS: Edge %s status query failed." -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:245 -#, python-format -msgid "VCNS: Unable to retrieve edge %(edge_id)s status. Retry %(retries)d." -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:252 -#, python-format -msgid "VCNS: Unable to retrieve edge %s status. Abort." -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:263 -#, python-format -msgid "VCNS: Failed to deploy edge %(edge_id)s for %(name)s, status %(status)d" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:285 -#, python-format -msgid "" -"VCNS: Failed to delete %(edge_id)s:\n" -"%(response)s" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:291 -#, python-format -msgid "VCNS: Failed to delete %s" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:301 -#, python-format -msgid "" -"VCNS: Failed to get edges:\n" -"%s" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:379 -#, python-format -msgid "" -"VCNS: Failed to get nat config:\n" -"%s" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:402 -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:527 -#, python-format -msgid "" -"VCNS: Failed to create snat rule:\n" -"%s" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:444 -#, python-format -msgid "" -"VCNS: Failed to delete snat rule:\n" -"%s" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:597 -#, python-format -msgid "" -"VCNS: Failed to update routes:\n" -"%s" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:649 -msgid "Failed to get service config" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_appliance_driver.py:661 -msgid "Failed to enable loadbalancer service config" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:39 -#, python-format -msgid "Invalid action value %s in a firewall rule" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:48 -#, python-format -msgid "Invalid action value %s in a vshield firewall rule" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:188 -#, python-format -msgid "Failed to get firewall with edge id: %s" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:206 -#, python-format -msgid "No rule id:%s found in the edge_firewall_binding" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:216 -#, python-format -msgid "Failed to get firewall rule: %(rule_id)s with edge_id: %(edge_id)s" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:232 -#, python-format -msgid "Failed to update firewall with edge_id: %s" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:244 -#, python-format -msgid "Failed to delete firewall with edge_id:%s" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:258 -#, python-format -msgid "Failed to update firewall rule: %(rule_id)s with edge_id: %(edge_id)s" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:271 -#, python-format -msgid "Failed to delete firewall rule: %(rule_id)s with edge_id: %(edge_id)s" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:288 -#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:316 -#, python-format -msgid "Failed to add firewall rule above: %(rule_id)s with edge_id: %(edge_id)s" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:327 -#, python-format -msgid "Failed to append a firewall rulewith edge_id: %s" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_firewall_driver.py:348 -msgid "Can't execute insert rule operation without reference rule_id" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_ipsecvpn_driver.py:50 -#, python-format -msgid "" -"Unsupported ike_version: %s! Only 'v1' ike version is supported on " -"vshield Edge!" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_ipsecvpn_driver.py:64 -msgid "" -"IKEPolicy and IPsecPolicy should have consistent auth_algorithm, " -"encryption_algorithm and pfs for VSE!" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_ipsecvpn_driver.py:72 -#, python-format -msgid "" -"Unsupported encryption_algorithm: %s! '3des', 'aes-128' and 'aes-256' are" -" supported on VSE right now." -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_ipsecvpn_driver.py:81 -#, python-format -msgid "Unsupported pfs: %s! 'group2' and 'group5' are supported on VSE right now." -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_ipsecvpn_driver.py:89 -#, python-format -msgid "" -"Unsupported transform protocol: %s! 'esp' is supported by default on VSE " -"right now." -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_ipsecvpn_driver.py:98 -#, python-format -msgid "" -"Unsupported encapsulation mode: %s! 'tunnel' is supported by default on " -"VSE right now." -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_ipsecvpn_driver.py:136 -#, python-format -msgid "Failed to update ipsec vpn configuration with edge_id: %s" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_ipsecvpn_driver.py:143 -#, python-format -msgid "IPsec config not found on edge: %s" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_ipsecvpn_driver.py:146 -#, python-format -msgid "Failed to delete ipsec vpn configuration with edge_id: %s" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:152 -#, python-format -msgid "Invalid %(protocol)s persistence method: %(type)s" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:178 -#, python-format -msgid "Failed to create app profile on edge: %s" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:189 -#, python-format -msgid "Failed to create vip on vshield edge: %s" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:207 -#, python-format -msgid "vip_binding not found with id: %(id)s edge_id: %(edge_id)s" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:224 -msgid "Failed to get vip on edge" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:241 -#, python-format -msgid "Failed to update app profile on edge: %s" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:249 -#, python-format -msgid "Failed to update vip on edge: %s" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:260 -#, python-format -msgid "vip not found on edge: %s" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:263 -#, python-format -msgid "Failed to delete vip on edge: %s" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:268 -#, python-format -msgid "app profile not found on edge: %s" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:271 -#, python-format -msgid "Failed to delete app profile on edge: %s" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:282 -msgid "Failed to create pool" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:299 -#, python-format -msgid "pool_binding not found with id: %(id)s edge_id: %(edge_id)s" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:309 -msgid "Failed to get pool on edge" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:321 -msgid "Failed to update pool" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:331 -msgid "Failed to delete pool" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:341 -#, python-format -msgid "Failed to create monitor on edge: %s" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:359 -#, python-format -msgid "monitor_binding not found with id: %(id)s edge_id: %(edge_id)s" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:369 -#, python-format -msgid "Failed to get monitor on edge: %s" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:386 -#, python-format -msgid "Failed to update monitor on edge: %s" -msgstr "" - -#: neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py:397 -msgid "Failed to delete monitor" -msgstr "" - -#: neutron/plugins/vmware/vshield/common/exceptions.py:33 -#, python-format -msgid "%(resource)s not found: %(msg)s" -msgstr "" - -#: neutron/plugins/vmware/vshield/common/exceptions.py:37 -#, python-format -msgid "An unknown exception %(status)s occurred: %(response)s." -msgstr "" - -#: neutron/plugins/vmware/vshield/common/exceptions.py:48 -#, python-format -msgid "Resource %(uri)s has been redirected" -msgstr "" - -#: neutron/plugins/vmware/vshield/common/exceptions.py:52 -#, python-format -msgid "Request %(uri)s is Bad, response %(response)s" -msgstr "" - -#: neutron/plugins/vmware/vshield/common/exceptions.py:56 -#, python-format -msgid "Forbidden: %(uri)s" -msgstr "" - -#: neutron/plugins/vmware/vshield/common/exceptions.py:60 -#, python-format -msgid "Resource %(uri)s not found" -msgstr "" - -#: neutron/plugins/vmware/vshield/common/exceptions.py:64 -#, python-format -msgid "Media Type %(uri)s is not supported" -msgstr "" - -#: neutron/plugins/vmware/vshield/common/exceptions.py:68 -#, python-format -msgid "Service Unavailable: %(uri)s" -msgstr "" - -#: neutron/plugins/vmware/vshield/tasks/tasks.py:46 -#, python-format -msgid "Invalid state %(state)d" -msgstr "" - -#: neutron/plugins/vmware/vshield/tasks/tasks.py:50 -#, python-format -msgid "State %(state)d skipped. Current state %(current)d" -msgstr "" - -#: neutron/plugins/vmware/vshield/tasks/tasks.py:96 -#, python-format -msgid "Task %(task)s encountered exception in %(func)s at state %(state)s" -msgstr "" - -#: neutron/plugins/vmware/vshield/tasks/tasks.py:182 -#, python-format -msgid "Start task %s" -msgstr "" - -#: neutron/plugins/vmware/vshield/tasks/tasks.py:188 -#: neutron/plugins/vmware/vshield/tasks/tasks.py:208 -#: neutron/plugins/vmware/vshield/tasks/tasks.py:231 -#, python-format -msgid "Task %(task)s encountered exception in %(cb)s" -msgstr "" - -#: neutron/plugins/vmware/vshield/tasks/tasks.py:296 -msgid "Stopping TaskManager" -msgstr "" - -#: neutron/plugins/vmware/vshield/tasks/tasks.py:321 -msgid "TaskManager terminating because of an exception" -msgstr "" - -#: neutron/plugins/vmware/vshield/tasks/tasks.py:343 -msgid "TaskManager terminated" -msgstr "" - -#: neutron/plugins/vmware/vshield/tasks/tasks.py:375 -msgid "Exception in _check_pending_tasks" -msgstr "" - -#: neutron/scheduler/dhcp_agent_scheduler.py:51 -#, python-format -msgid "Agent %s already present" -msgstr "" - -#: neutron/scheduler/dhcp_agent_scheduler.py:52 -#, python-format -msgid "" -"Network %(network_id)s is scheduled to be hosted by DHCP agent " -"%(agent_id)s" -msgstr "" - -#: neutron/scheduler/dhcp_agent_scheduler.py:70 -#, python-format -msgid "Network %s is hosted already" -msgstr "" - -#: neutron/scheduler/dhcp_agent_scheduler.py:79 -#: neutron/scheduler/dhcp_agent_scheduler.py:88 -msgid "No more DHCP agents" -msgstr "" - -#: neutron/scheduler/dhcp_agent_scheduler.py:108 -msgid "No non-hosted networks" -msgstr "" - -#: neutron/scheduler/dhcp_agent_scheduler.py:119 -#, python-format -msgid "DHCP agent %s is not active" -msgstr "" - -#: neutron/scheduler/l3_agent_scheduler.py:156 -#, python-format -msgid "No routers compatible with L3 agent configuration on host %s" -msgstr "" - -#: neutron/scheduler/l3_agent_scheduler.py:173 -#, python-format -msgid "Router %(router_id)s has already been hosted by L3 agent %(agent_id)s" -msgstr "" - -#: neutron/scheduler/l3_agent_scheduler.py:181 -msgid "No active L3 agents" -msgstr "" - -#: neutron/scheduler/l3_agent_scheduler.py:193 -#, python-format -msgid "No L3 agents can host the router %s" -msgstr "" - -#: neutron/server/__init__.py:42 -msgid "" -"ERROR: Unable to find configuration file via the default search paths " -"(~/.neutron/, ~/, /etc/neutron/, /etc/) and the '--config-file' option!" -msgstr "" - -#: neutron/server/__init__.py:54 -msgid "RPC was already started in parent process by plugin." -msgstr "" - -#: neutron/server/__init__.py:66 -#, python-format -msgid "ERROR: %s" -msgstr "" - -#: neutron/services/provider_configuration.py:27 -msgid "" -"Defines providers for advanced services using the format: " -"::[:default]" -msgstr "" - -#: neutron/services/provider_configuration.py:45 -#, python-format -msgid "Provider name is limited by 255 characters: %s" -msgstr "" - -#: neutron/services/provider_configuration.py:54 -msgid "Invalid service provider format" -msgstr "" - -#: neutron/services/provider_configuration.py:62 -#, python-format -msgid "Invalid provider format. Last part should be 'default' or empty: %s" -msgstr "" - -#: neutron/services/provider_configuration.py:68 -#, python-format -msgid "Service type '%(svc_type)s' is not allowed, allowed types: %(allowed)s" -msgstr "" - -#: neutron/services/provider_configuration.py:82 -#, python-format -msgid "" -"Service provider '%(provider)s' could not be found for service type " -"%(service_type)s" -msgstr "" - -#: neutron/services/provider_configuration.py:87 -#, python-format -msgid "Service type %(service_type)s does not have a default service provider" -msgstr "" - -#: neutron/services/provider_configuration.py:92 -#, python-format -msgid "" -"Resource '%(resource_id)s' is already associated with provider " -"'%(provider)s' for service type '%(service_type)s'" -msgstr "" - -#: neutron/services/provider_configuration.py:105 -#, python-format -msgid "Driver %s is not unique across providers" -msgstr "" - -#: neutron/services/provider_configuration.py:115 -#, python-format -msgid "Multiple default providers for service %s" -msgstr "" - -#: neutron/services/provider_configuration.py:126 -#, python-format -msgid "Multiple providers specified for service %s" -msgstr "" - -#: neutron/services/service_base.py:70 -#, python-format -msgid "No providers specified for '%s' service, exiting" -msgstr "" - -#: neutron/services/service_base.py:81 -#, python-format -msgid "Loaded '%(provider)s' provider for service %(service_type)s" -msgstr "" - -#: neutron/services/service_base.py:87 -#, python-format -msgid "Error loading provider '%(provider)s' for service %(service_type)s" -msgstr "" - -#: neutron/services/service_base.py:98 -#, python-format -msgid "Default provider is not specified for service type %s" -msgstr "" - -#: neutron/services/firewall/fwaas_plugin.py:40 -msgid "set_firewall_status() called" -msgstr "" - -#: neutron/services/firewall/fwaas_plugin.py:48 -#, python-format -msgid "Firewall %(fw_id)s in PENDING_DELETE state, not changing to %(status)s" -msgstr "" - -#: neutron/services/firewall/fwaas_plugin.py:61 -msgid "firewall_deleted() called" -msgstr "" - -#: neutron/services/firewall/fwaas_plugin.py:69 -#, python-format -msgid "Firewall %(fw)s unexpectedly deleted by agent, status was %(status)s" -msgstr "" - -#: neutron/services/firewall/fwaas_plugin.py:77 -msgid "get_firewalls_for_tenant() called" -msgstr "" - -#: neutron/services/firewall/fwaas_plugin.py:86 -msgid "get_firewalls_for_tenant_without_rules() called" -msgstr "" - -#: neutron/services/firewall/fwaas_plugin.py:92 -msgid "get_tenants_with_firewalls() called" -msgstr "" - -#: neutron/services/firewall/fwaas_plugin.py:137 -#, python-format -msgid "" -"Exceeded allowed count of firewalls for tenant %(tenant_id)s. Only one " -"firewall is supported per tenant." -msgstr "" - -#: neutron/services/firewall/agents/firewall_agent_api.py:27 -msgid "Name of the FWaaS Driver" -msgstr "" - -#: neutron/services/firewall/agents/firewall_agent_api.py:31 -msgid "Enable FWaaS" -msgstr "" - -#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:39 -msgid "Retrieve Firewall with rules from Plugin" -msgstr "" - -#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:47 -msgid "Retrieve Tenants with Firewalls configured from Plugin" -msgstr "" - -#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:58 -msgid "Initializing firewall agent" -msgstr "" - -#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:69 -msgid "" -"FWaaS plugin is configured in the server side, but FWaaS is disabled in " -"L3-agent." -msgstr "" - -#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:79 -#, python-format -msgid "FWaaS Driver Loaded: '%s'" -msgstr "" - -#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:82 -#, python-format -msgid "Error importing FWaaS device driver: %s" -msgstr "" - -#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:119 -#, python-format -msgid "%(func_name)s from agent for fw: %(fwid)s" -msgstr "" - -#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:127 -#, python-format -msgid "No Routers on tenant: %s" -msgstr "" - -#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:134 -#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:274 -#, python-format -msgid "Apply fw on Router List: '%s'" -msgstr "" - -#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:147 -#, python-format -msgid "Firewall Driver Error for %(func_name)s for fw: %(fwid)s" -msgstr "" - -#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:162 -#, python-format -msgid "FWaaS RPC failure in %(func_name)s for fw: %(fwid)s" -msgstr "" - -#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:182 -#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:201 -#, python-format -msgid "Firewall Driver Error on fw state %(fwmsg)s for fw: %(fwid)s" -msgstr "" - -#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:213 -#, python-format -msgid "Process router add, router_id: '%s'" -msgstr "" - -#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:224 -#, python-format -msgid "Process router add, fw_list: '%s'" -msgstr "" - -#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:241 -#, python-format -msgid "FWaaS RPC info call failed for '%s'." -msgstr "" - -#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:256 -#, python-format -msgid "Tenants with Firewalls: '%s'" -msgstr "" - -#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:266 -#, python-format -msgid "Router List: '%s'" -msgstr "" - -#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:268 -#, python-format -msgid "fw_list: '%s'" -msgstr "" - -#: neutron/services/firewall/agents/l3reference/firewall_l3_agent.py:285 -msgid "Failed fwaas process services sync" -msgstr "" - -#: neutron/services/firewall/agents/varmour/varmour_api.py:27 -msgid "vArmour director ip" -msgstr "" - -#: neutron/services/firewall/agents/varmour/varmour_api.py:29 -msgid "vArmour director port" -msgstr "" - -#: neutron/services/firewall/agents/varmour/varmour_api.py:31 -msgid "vArmour director username" -msgstr "" - -#: neutron/services/firewall/agents/varmour/varmour_api.py:33 -msgid "vArmour director password" -msgstr "" - -#: neutron/services/firewall/agents/varmour/varmour_api.py:43 -msgid "An unknown exception." -msgstr "" - -#: neutron/services/firewall/agents/varmour/varmour_api.py:57 -msgid "Invalid login credential." -msgstr "" - -#: neutron/services/firewall/agents/varmour/varmour_api.py:63 -msgid "vArmourRestAPI: started" -msgstr "" - -#: neutron/services/firewall/agents/varmour/varmour_api.py:96 -#, python-format -msgid "vArmourRestAPI: %(server)s %(port)s" -msgstr "" - -#: neutron/services/firewall/agents/varmour/varmour_api.py:102 -#, python-format -msgid "vArmourRestAPI Sending: %(method)s %(action)s %(headers)s %(body_data)s" -msgstr "" - -#: neutron/services/firewall/agents/varmour/varmour_api.py:113 -#, python-format -msgid "vArmourRestAPI Response: %(status)s %(resp_str)s" -msgstr "" - -#: neutron/services/firewall/agents/varmour/varmour_api.py:121 -msgid "vArmourRestAPI: Could not establish HTTP connection" -msgstr "" - -#: neutron/services/firewall/agents/varmour/varmour_router.py:47 -msgid "vArmourL3NATAgent: __init__" -msgstr "" - -#: neutron/services/firewall/agents/varmour/varmour_router.py:61 -#, python-format -msgid "_router_added: %s" -msgstr "" - -#: neutron/services/firewall/agents/varmour/varmour_router.py:68 -#, python-format -msgid "_router_removed: %s" -msgstr "" - -#: neutron/services/firewall/agents/varmour/varmour_router.py:109 -#, python-format -msgid "_va_unset_zone_interfaces: %s" -msgstr "" - -#: neutron/services/firewall/agents/varmour/varmour_router.py:141 -#, python-format -msgid "_va_set_interface_ip: %(pif)s %(cidr)s" -msgstr "" - -#: neutron/services/firewall/agents/varmour/varmour_router.py:161 -#, python-format -msgid "_va_config_trusted_zone: %s" -msgstr "" - -#: neutron/services/firewall/agents/varmour/varmour_router.py:192 -#, python-format -msgid "_va_config_untrusted_zone: %s" -msgstr "" - -#: neutron/services/firewall/agents/varmour/varmour_router.py:207 -#, python-format -msgid "_va_config_untrusted_zone: gw=%r" -msgstr "" - -#: neutron/services/firewall/agents/varmour/varmour_router.py:220 -#, python-format -msgid "_va_config_router_snat_rules: %s" -msgstr "" - -#: neutron/services/firewall/agents/varmour/varmour_router.py:252 -#, python-format -msgid "_va_config_floating_ips: %s" -msgstr "" - -#: neutron/services/firewall/agents/varmour/varmour_router.py:274 -#, python-format -msgid "process_router: %s" -msgstr "" - -#: neutron/services/firewall/agents/varmour/varmour_router.py:285 -msgid "Unable to parse interface mapping." -msgstr "" - -#: neutron/services/firewall/agents/varmour/varmour_router.py:288 -msgid "Unable to read interface mapping." -msgstr "" - -#: neutron/services/firewall/agents/varmour/varmour_router.py:307 -#, python-format -msgid "external_gateway_added: %s" -msgstr "" - -#: neutron/services/firewall/drivers/linux/iptables_fwaas.py:49 -msgid "Initializing fwaas iptables driver" -msgstr "" - -#: neutron/services/firewall/drivers/linux/iptables_fwaas.py:52 -#, python-format -msgid "Creating firewall %(fw_id)s for tenant %(tid)s)" -msgstr "" - -#: neutron/services/firewall/drivers/linux/iptables_fwaas.py:61 -#, python-format -msgid "Failed to create firewall: %s" -msgstr "" - -#: neutron/services/firewall/drivers/linux/iptables_fwaas.py:90 -#, python-format -msgid "Deleting firewall %(fw_id)s for tenant %(tid)s)" -msgstr "" - -#: neutron/services/firewall/drivers/linux/iptables_fwaas.py:105 -#, python-format -msgid "Failed to delete firewall: %s" -msgstr "" - -#: neutron/services/firewall/drivers/linux/iptables_fwaas.py:109 -#, python-format -msgid "Updating firewall %(fw_id)s for tenant %(tid)s)" -msgstr "" - -#: neutron/services/firewall/drivers/linux/iptables_fwaas.py:118 -#, python-format -msgid "Failed to update firewall: %s" -msgstr "" - -#: neutron/services/firewall/drivers/linux/iptables_fwaas.py:122 -#, python-format -msgid "Applying firewall %(fw_id)s for tenant %(tid)s)" -msgstr "" - -#: neutron/services/firewall/drivers/linux/iptables_fwaas.py:143 -#, python-format -msgid "Failed to apply default policy on firewall: %s" -msgstr "" - -#: neutron/services/firewall/drivers/varmour/varmour_fwaas.py:26 -msgid "Initializing fwaas vArmour driver" -msgstr "" - -#: neutron/services/firewall/drivers/varmour/varmour_fwaas.py:31 -#, python-format -msgid "create_firewall (%s)" -msgstr "" - -#: neutron/services/firewall/drivers/varmour/varmour_fwaas.py:36 -#, python-format -msgid "update_firewall (%s)" -msgstr "" - -#: neutron/services/firewall/drivers/varmour/varmour_fwaas.py:44 -#, python-format -msgid "delete_firewall (%s)" -msgstr "" - -#: neutron/services/firewall/drivers/varmour/varmour_fwaas.py:49 -#, python-format -msgid "apply_default_policy (%s)" -msgstr "" - -#: neutron/services/firewall/drivers/varmour/varmour_fwaas.py:59 -#, python-format -msgid "Updating firewall (%s)" -msgstr "" - -#: neutron/services/firewall/drivers/varmour/varmour_fwaas.py:108 -msgid "Unsupported IP version rule." -msgstr "" - -#: neutron/services/l3_router/l3_apic.py:57 -msgid "L3 Router Service Plugin for basic L3 using the APIC" -msgstr "" - -#: neutron/services/l3_router/l3_arista.py:113 -#, python-format -msgid "Error creating router on Arista HW router=%s " -msgstr "" - -#: neutron/services/l3_router/l3_arista.py:136 -#, python-format -msgid "Error updating router on Arista HW router=%s " -msgstr "" - -#: neutron/services/l3_router/l3_arista.py:151 -#, python-format -msgid "Error deleting router on Arista HW router %(r)s exception=%(e)s" -msgstr "" - -#: neutron/services/l3_router/l3_arista.py:197 -#, python-format -msgid "Error Adding subnet %(subnet)s to router %(router_id)s on Arista HW" -msgstr "" - -#: neutron/services/l3_router/l3_arista.py:231 -#, python-format -msgid "" -"Error removing interface %(interface)s from router %(router_id)s on " -"Arista HWException =(exc)s" -msgstr "" - -#: neutron/services/l3_router/l3_arista.py:246 -msgid "Syncing Neutron Router DB <-> EOS" -msgstr "" - -#: neutron/services/l3_router/l3_arista.py:277 -#, python-format -msgid "Error Adding interface %(subnet_id)s to router %(router_id)s on Arista HW" -msgstr "" - -#: neutron/services/l3_router/brocade/l3_router_plugin.py:42 -msgid "Rbridge id of provider edge router(s)" -msgstr "" - -#: neutron/services/l3_router/brocade/l3_router_plugin.py:73 -#: neutron/tests/unit/ml2/drivers/brocade/test_brocade_l3_plugin.py:44 -#, python-format -msgid "rbridge id %s" -msgstr "" - -#: neutron/services/l3_router/brocade/l3_router_plugin.py:154 -#, python-format -msgid "BrocadeSVIPlugin.add_router_interface ports_count %d" -msgstr "" - -#: neutron/services/l3_router/brocade/l3_router_plugin.py:162 -msgid "BrocadeSVIPlugin: adding redundant router interface is not supported" -msgstr "" - -#: neutron/services/l3_router/brocade/l3_router_plugin.py:164 -msgid "BrocadeSVIPlugin:adding redundant router interface is not supported" -msgstr "" - -#: neutron/services/l3_router/brocade/l3_router_plugin.py:177 -#, python-format -msgid "" -"Failed to create Brocade resources to add router interface. " -"info=%(info)s, router_id=%(router_id)s" -msgstr "" - -#: neutron/services/l3_router/brocade/l3_router_plugin.py:223 -#, python-format -msgid "" -"Fail remove of interface from brocade router interface. info=%(info)s, " -"router_id=%(router_id)s" -msgstr "" - -#: neutron/services/loadbalancer/agent_scheduler.py:101 -#, python-format -msgid "Pool %(pool_id)s has already been hosted by lbaas agent %(agent_id)s" -msgstr "" - -#: neutron/services/loadbalancer/agent_scheduler.py:109 -#, python-format -msgid "No active lbaas agents for pool %s" -msgstr "" - -#: neutron/services/loadbalancer/agent_scheduler.py:115 -#, python-format -msgid "No lbaas agent supporting device driver %s" -msgstr "" - -#: neutron/services/loadbalancer/agent_scheduler.py:124 -#, python-format -msgid "Pool %(pool_id)s is scheduled to lbaas agent %(agent_id)s" -msgstr "" - -#: neutron/services/loadbalancer/plugin.py:78 -#, python-format -msgid "Delete associated loadbalancer pools before removing providers %s" -msgstr "" - -#: neutron/services/loadbalancer/plugin.py:87 -#, python-format -msgid "Error retrieving driver for provider %s" -msgstr "" - -#: neutron/services/loadbalancer/plugin.py:95 -#, python-format -msgid "Error retrieving provider for pool %s" -msgstr "" - -#: neutron/services/loadbalancer/plugin.py:186 -#, python-format -msgid "Failed to delete pool %s, putting it in ERROR state" -msgstr "" - -#: neutron/services/loadbalancer/agent/agent.py:34 -msgid "Seconds between periodic task runs" -msgstr "" - -#: neutron/services/loadbalancer/agent/agent_manager.py:37 -msgid "Drivers used to manage loadbalancing devices" -msgstr "" - -#: neutron/services/loadbalancer/agent/agent_manager.py:43 -#, python-format -msgid "Unknown device with pool_id %(pool_id)s" -msgstr "" - -#: neutron/services/loadbalancer/agent/agent_manager.py:92 -#, python-format -msgid "Error importing loadbalancer device driver: %s" -msgstr "" - -#: neutron/services/loadbalancer/agent/agent_manager.py:99 -#, python-format -msgid "Multiple device drivers with the same name found: %s" -msgstr "" - -#: neutron/services/loadbalancer/agent/agent_manager.py:139 -#, python-format -msgid "Error updating statistics on pool %s" -msgstr "" - -#: neutron/services/loadbalancer/agent/agent_manager.py:155 -msgid "Unable to retrieve ready devices" -msgstr "" - -#: neutron/services/loadbalancer/agent/agent_manager.py:172 -#: neutron/services/loadbalancer/agent/agent_manager.py:237 -#, python-format -msgid "No device driver on agent: %s." -msgstr "" - -#: neutron/services/loadbalancer/agent/agent_manager.py:182 -#, python-format -msgid "Unable to deploy instance for pool: %s" -msgstr "" - -#: neutron/services/loadbalancer/agent/agent_manager.py:192 -#, python-format -msgid "Unable to destroy device for pool: %s" -msgstr "" - -#: neutron/services/loadbalancer/agent/agent_manager.py:205 -#, python-format -msgid "%(operation)s %(obj)s %(id)s failed on device driver %(driver)s" -msgstr "" - -#: neutron/services/loadbalancer/agent/agent_manager.py:331 -#, python-format -msgid "Destroying pool %s due to agent disabling" -msgstr "" - -#: neutron/services/loadbalancer/agent/agent_manager.py:334 -#, python-format -msgid "Agent_updated by server side %s!" -msgstr "" - -#: neutron/services/loadbalancer/drivers/common/agent_driver_base.py:38 -msgid "Driver to use for scheduling pool to a default loadbalancer agent" -msgstr "" - -#: neutron/services/loadbalancer/drivers/common/agent_driver_base.py:46 -msgid "Device driver for agent should be specified in plugin driver." -msgstr "" - -#: neutron/services/loadbalancer/drivers/common/agent_driver_base.py:70 -#, python-format -msgid "Multiple lbaas agents found on host %s" -msgstr "" - -#: neutron/services/loadbalancer/drivers/common/agent_driver_base.py:150 -#, python-format -msgid "Unknown object type: %s" -msgstr "" - -#: neutron/services/loadbalancer/drivers/common/agent_driver_base.py:161 -#, python-format -msgid "" -"Cannot update status: %(obj_type)s %(obj_id)s not found in the DB, it was" -" probably deleted concurrently" -msgstr "" - -#: neutron/services/loadbalancer/drivers/common/agent_driver_base.py:184 -#, python-format -msgid "Unable to find port %s to plug." -msgstr "" - -#: neutron/services/loadbalancer/drivers/common/agent_driver_base.py:208 -#: neutron/services/loadbalancer/drivers/common/agent_driver_base.py:225 -#, python-format -msgid "" -"Unable to find port %s to unplug. This can occur when the Vip has been " -"deleted first." -msgstr "" - -#: neutron/services/loadbalancer/drivers/embrane/config.py:30 -msgid "Load Balancer image id (Embrane LB)" -msgstr "" - -#: neutron/services/loadbalancer/drivers/embrane/config.py:32 -msgid "In band Security Zone id for LBs" -msgstr "" - -#: neutron/services/loadbalancer/drivers/embrane/config.py:34 -msgid "Out of band Security Zone id for LBs" -msgstr "" - -#: neutron/services/loadbalancer/drivers/embrane/config.py:36 -msgid "Management Security Zone id for LBs" -msgstr "" - -#: neutron/services/loadbalancer/drivers/embrane/config.py:38 -msgid "Dummy user traffic Security Zone id for LBs" -msgstr "" - -#: neutron/services/loadbalancer/drivers/embrane/config.py:42 -msgid "choose LB image flavor to use, accepted values: small, medium" -msgstr "" - -#: neutron/services/loadbalancer/drivers/embrane/config.py:45 -msgid "resource synchronization interval in seconds" -msgstr "" - -#: neutron/services/loadbalancer/drivers/embrane/constants.py:49 -#, python-format -msgid "%s, probably was cancelled through the heleos UI" -msgstr "" - -#: neutron/services/loadbalancer/drivers/embrane/constants.py:56 -#, python-format -msgid "" -"Failed to delete the backend load balancer for reason %s. Please remove " -"it manually through the heleos UI" -msgstr "" - -#: neutron/services/loadbalancer/drivers/embrane/constants.py:59 -#, python-format -msgid "" -"No subnet is associated to member %s (required to identify the proper " -"load balancer port)" -msgstr "" - -#: neutron/services/loadbalancer/drivers/embrane/driver.py:85 -msgid "Connection limit is not supported by Embrane LB" -msgstr "" - -#: neutron/services/loadbalancer/drivers/embrane/driver.py:91 -#, python-format -msgid "Session persistence %s not supported by Embrane LBaaS" -msgstr "" - -#: neutron/services/loadbalancer/drivers/embrane/driver.py:129 -#, python-format -msgid "Subnet assigned to pool %s doesn't exist, backend port can't be created" -msgstr "" - -#: neutron/services/loadbalancer/drivers/embrane/agent/lb_operations.py:109 -#, python-format -msgid "" -"The load balancer %s had no physical representation, likely already " -"deleted" -msgstr "" - -#: neutron/services/loadbalancer/drivers/haproxy/namespace_driver.py:45 -msgid "Location to store config and state files" -msgstr "" - -#: neutron/services/loadbalancer/drivers/haproxy/namespace_driver.py:52 -msgid "The user group" -msgstr "" - -#: neutron/services/loadbalancer/drivers/haproxy/namespace_driver.py:58 -msgid "" -"When delete and re-add the same vip, send this many gratuitous ARPs to " -"flush the ARP cache in the Router. Set it below or equal to 0 to disable " -"this feature." -msgstr "" - -#: neutron/services/loadbalancer/drivers/haproxy/namespace_driver.py:75 -#, python-format -msgid "Error importing interface driver: %s" -msgstr "" - -#: neutron/services/loadbalancer/drivers/haproxy/namespace_driver.py:171 -#, python-format -msgid "Stats socket not found for pool %s" -msgstr "" - -#: neutron/services/loadbalancer/drivers/haproxy/namespace_driver.py:213 -#, python-format -msgid "Error while connecting to stats socket: %s" -msgstr "" - -#: neutron/services/loadbalancer/drivers/haproxy/namespace_driver.py:392 -#, python-format -msgid "Unable to kill haproxy process: %s" -msgstr "" - -#: neutron/services/loadbalancer/drivers/netscaler/ncc_client.py:43 -#, python-format -msgid "NCC Error %d" -msgstr "" - -#: neutron/services/loadbalancer/drivers/netscaler/ncc_client.py:54 -msgid "No NetScaler Control Center URI specified. Cannot connect." -msgstr "" - -#: neutron/services/loadbalancer/drivers/netscaler/ncc_client.py:133 -#, python-format -msgid "Connection error occurred while connecting to %s" -msgstr "" - -#: neutron/services/loadbalancer/drivers/netscaler/ncc_client.py:138 -#, python-format -msgid "SSL error occurred while connecting to %s" -msgstr "" - -#: neutron/services/loadbalancer/drivers/netscaler/ncc_client.py:143 -#, python-format -msgid "Request to %s timed out" -msgstr "" - -#: neutron/services/loadbalancer/drivers/netscaler/ncc_client.py:150 -msgid "Request did not specify a valid URL" -msgstr "" - -#: neutron/services/loadbalancer/drivers/netscaler/ncc_client.py:154 -#, python-format -msgid "Too many redirects occurred for request to %s" -msgstr "" - -#: neutron/services/loadbalancer/drivers/netscaler/ncc_client.py:158 -#, python-format -msgid "A request error while connecting to %s" -msgstr "" - -#: neutron/services/loadbalancer/drivers/netscaler/ncc_client.py:163 -#, python-format -msgid "A unknown error occurred during request to %s" -msgstr "" - -#: neutron/services/loadbalancer/drivers/netscaler/ncc_client.py:168 -#, python-format -msgid "Response: %s" -msgstr "" - -#: neutron/services/loadbalancer/drivers/netscaler/ncc_client.py:171 -#, python-format -msgid "Unable to login. Invalid credentials passed.for: %s" -msgstr "" - -#: neutron/services/loadbalancer/drivers/netscaler/ncc_client.py:175 -#, python-format -msgid "Failed %(method)s operation on %(url)s status code: %(response_status)s" -msgstr "" - -#: neutron/services/loadbalancer/drivers/netscaler/netscaler_driver.py:29 -msgid "The URL to reach the NetScaler Control Center Server." -msgstr "" - -#: neutron/services/loadbalancer/drivers/netscaler/netscaler_driver.py:33 -msgid "Username to login to the NetScaler Control Center Server." -msgstr "" - -#: neutron/services/loadbalancer/drivers/netscaler/netscaler_driver.py:37 -msgid "Password to login to the NetScaler Control Center Server." -msgstr "" - -#: neutron/services/loadbalancer/drivers/netscaler/netscaler_driver.py:75 -#, python-format -msgid "NetScaler driver vip creation: %s" -msgstr "" - -#: neutron/services/loadbalancer/drivers/netscaler/netscaler_driver.py:90 -#, python-format -msgid "NetScaler driver vip %(vip_id)s update: %(vip_obj)s" -msgstr "" - -#: neutron/services/loadbalancer/drivers/netscaler/netscaler_driver.py:105 -#, python-format -msgid "NetScaler driver vip removal: %s" -msgstr "" - -#: neutron/services/loadbalancer/drivers/netscaler/netscaler_driver.py:126 -#, python-format -msgid "NetScaler driver pool creation: %s" -msgstr "" - -#: neutron/services/loadbalancer/drivers/netscaler/netscaler_driver.py:141 -#, python-format -msgid "NetScaler driver pool %(pool_id)s update: %(pool_obj)s" -msgstr "" - -#: neutron/services/loadbalancer/drivers/netscaler/netscaler_driver.py:156 -#, python-format -msgid "NetScaler driver pool removal: %s" -msgstr "" - -#: neutron/services/loadbalancer/drivers/netscaler/netscaler_driver.py:173 -#, python-format -msgid "NetScaler driver poolmember creation: %s" -msgstr "" - -#: neutron/services/loadbalancer/drivers/netscaler/netscaler_driver.py:191 -#, python-format -msgid "NetScaler driver poolmember %(member_id)s update: %(member_obj)s" -msgstr "" - -#: neutron/services/loadbalancer/drivers/netscaler/netscaler_driver.py:208 -#, python-format -msgid "NetScaler driver poolmember removal: %s" -msgstr "" - -#: neutron/services/loadbalancer/drivers/netscaler/netscaler_driver.py:226 -#, python-format -msgid "" -"NetScaler driver healthmonitor creation for pool %(pool_id)s: " -"%(monitor_obj)s" -msgstr "" - -#: neutron/services/loadbalancer/drivers/netscaler/netscaler_driver.py:249 -#, python-format -msgid "NetScaler driver healthmonitor %(monitor_id)s update: %(monitor_obj)s" -msgstr "" - -#: neutron/services/loadbalancer/drivers/netscaler/netscaler_driver.py:270 -#, python-format -msgid "NetScaler driver healthmonitor %(monitor_id)sremoval for pool %(pool_id)s" -msgstr "" - -#: neutron/services/loadbalancer/drivers/netscaler/netscaler_driver.py:290 -#, python-format -msgid "NetScaler driver pool stats retrieval: %s" -msgstr "" - -#: neutron/services/loadbalancer/drivers/netscaler/netscaler_driver.py:415 -#, python-format -msgid "" -"Filtering ports based on network_id=%(network_id)s, " -"tenant_id=%(tenant_id)s, device_id=%(device_id)s" -msgstr "" - -#: neutron/services/loadbalancer/drivers/netscaler/netscaler_driver.py:430 -#, python-format -msgid "Found an existing SNAT port for subnet %s" -msgstr "" - -#: neutron/services/loadbalancer/drivers/netscaler/netscaler_driver.py:433 -#, python-format -msgid "Found no SNAT ports for subnet %s" -msgstr "" - -#: neutron/services/loadbalancer/drivers/netscaler/netscaler_driver.py:454 -#, python-format -msgid "Created SNAT port: %s" -msgstr "" - -#: neutron/services/loadbalancer/drivers/netscaler/netscaler_driver.py:462 -#, python-format -msgid "Removed SNAT port: %s" -msgstr "" - -#: neutron/services/loadbalancer/drivers/netscaler/netscaler_driver.py:469 -#, python-format -msgid "No SNAT port found for subnet %s. Creating one..." -msgstr "" - -#: neutron/services/loadbalancer/drivers/netscaler/netscaler_driver.py:477 -#, python-format -msgid "SNAT port: %s" -msgstr "" - -#: neutron/services/loadbalancer/drivers/netscaler/netscaler_driver.py:487 -#, python-format -msgid "Removing SNAT port for subnet %s as this is the last pool using it..." -msgstr "" - -#: neutron/services/loadbalancer/drivers/radware/driver.py:60 -msgid "IP address of vDirect server." -msgstr "" - -#: neutron/services/loadbalancer/drivers/radware/driver.py:62 -msgid "IP address of secondary vDirect server." -msgstr "" - -#: neutron/services/loadbalancer/drivers/radware/driver.py:65 -msgid "vDirect user name." -msgstr "" - -#: neutron/services/loadbalancer/drivers/radware/driver.py:68 -msgid "vDirect user password." -msgstr "" - -#: neutron/services/loadbalancer/drivers/radware/driver.py:71 -msgid "Service ADC type. Default: VA." -msgstr "" - -#: neutron/services/loadbalancer/drivers/radware/driver.py:74 -msgid "Service ADC version." -msgstr "" - -#: neutron/services/loadbalancer/drivers/radware/driver.py:77 -msgid "Enables or disables the Service HA pair. Default: False." -msgstr "" - -#: neutron/services/loadbalancer/drivers/radware/driver.py:81 -msgid "Service throughput. Default: 1000." -msgstr "" - -#: neutron/services/loadbalancer/drivers/radware/driver.py:84 -msgid "Service SSL throughput. Default: 100." -msgstr "" - -#: neutron/services/loadbalancer/drivers/radware/driver.py:87 -msgid "Service compression throughput. Default: 100." -msgstr "" - -#: neutron/services/loadbalancer/drivers/radware/driver.py:90 -msgid "Size of service cache. Default: 20." -msgstr "" - -#: neutron/services/loadbalancer/drivers/radware/driver.py:93 -msgid "Name of l2_l3 workflow. Default: openstack_l2_l3." -msgstr "" - -#: neutron/services/loadbalancer/drivers/radware/driver.py:97 -msgid "Name of l4 workflow. Default: openstack_l4." -msgstr "" - -#: neutron/services/loadbalancer/drivers/radware/driver.py:105 -msgid "Parameter for l2_l3 workflow constructor." -msgstr "" - -#: neutron/services/loadbalancer/drivers/radware/driver.py:112 -msgid "Parameter for l2_l3 workflow setup." -msgstr "" - -#: neutron/services/loadbalancer/drivers/radware/driver.py:115 -msgid "List of actions that are not pushed to the completion queue." -msgstr "" - -#: neutron/services/loadbalancer/drivers/radware/driver.py:119 -msgid "Name of the l4 workflow action. Default: BaseCreate." -msgstr "" - -#: neutron/services/loadbalancer/drivers/radware/driver.py:123 -msgid "Resource pool IDs." -msgstr "" - -#: neutron/services/loadbalancer/drivers/radware/driver.py:126 -msgid "A required VLAN for the interswitch link to use." -msgstr "" - -#: neutron/services/loadbalancer/drivers/radware/driver.py:129 -msgid "" -"Enable or disable Alteon interswitch link for stateful session failover. " -"Default: False." -msgstr "" - -#: neutron/services/loadbalancer/drivers/radware/driver.py:230 -#, python-format -msgid "" -"vip: %(vip)s, extended_vip: %(extended_vip)s, service_name: " -"%(service_name)s, " -msgstr "" - -#: neutron/services/loadbalancer/drivers/radware/driver.py:264 -#, python-format -msgid "Retrieved pip nport: %(port)r for vip: %(vip)s" -msgstr "" - -#: neutron/services/loadbalancer/drivers/radware/driver.py:272 -#, python-format -msgid "Found no pip nports associated with vip: %s" -msgstr "" - -#: neutron/services/loadbalancer/drivers/radware/driver.py:281 -#, python-format -msgid "Failed to remove workflow %s. Going to set vip to ERROR status" -msgstr "" - -#: neutron/services/loadbalancer/drivers/radware/driver.py:295 -#, python-format -msgid "pip nport id: %s" -msgstr "" - -#: neutron/services/loadbalancer/drivers/radware/driver.py:299 -#, python-format -msgid "pip nport delete failed: %r" -msgstr "" - -#: neutron/services/loadbalancer/drivers/radware/driver.py:387 -#, python-format -msgid "" -"_handle_pool_health_monitor. health_monitor = %(hm_id)s pool_id = " -"%(pool_id)s delete = %(delete)s vip_id = %(vip_id)s" -msgstr "" - -#: neutron/services/loadbalancer/drivers/radware/driver.py:418 -msgid "Starting operation completion handling thread" -msgstr "" - -#: neutron/services/loadbalancer/drivers/radware/driver.py:448 -#, python-format -msgid "_update_workflow response: %s " -msgstr "" - -#: neutron/services/loadbalancer/drivers/radware/driver.py:457 -#: neutron/services/loadbalancer/drivers/radware/driver.py:488 -#, python-format -msgid "Pushing operation %s to the queue" -msgstr "" - -#: neutron/services/loadbalancer/drivers/radware/driver.py:465 -#, python-format -msgid "Remove the workflow %s" -msgstr "" - -#: neutron/services/loadbalancer/drivers/radware/driver.py:473 -#, python-format -msgid "Post-remove workflow function %r completed" -msgstr "" - -#: neutron/services/loadbalancer/drivers/radware/driver.py:477 -#, python-format -msgid "Post-remove workflow function %r failed" -msgstr "" - -#: neutron/services/loadbalancer/drivers/radware/driver.py:594 -#, python-format -msgid "create_workflow response: %s" -msgstr "" - -#: neutron/services/loadbalancer/drivers/radware/driver.py:648 -#, python-format -msgid "Could not find or allocate IP address for subnet id %s" -msgstr "" - -#: neutron/services/loadbalancer/drivers/radware/driver.py:683 -#, python-format -msgid "" -"vDirectRESTClient:init server=%(server)s, secondary " -"server=%(sec_server)s, port=%(port)d, ssl=%(ssl)r" -msgstr "" - -#: neutron/services/loadbalancer/drivers/radware/driver.py:689 -#, python-format -msgid "Fliping servers. Current is: %(server)s, switching to %(secondary)s" -msgstr "" - -#: neutron/services/loadbalancer/drivers/radware/driver.py:702 -msgid "" -"REST client is not able to recover since only one vDirect server is " -"configured." -msgstr "" - -#: neutron/services/loadbalancer/drivers/radware/driver.py:710 -#, python-format -msgid "vDirect server is not responding (%s)." -msgstr "" - -#: neutron/services/loadbalancer/drivers/radware/driver.py:714 -#, python-format -msgid "vDirect server is not active (%s)." -msgstr "" - -#: neutron/services/loadbalancer/drivers/radware/driver.py:742 -msgid "vdirectRESTClient: Could not establish HTTPS connection" -msgstr "" - -#: neutron/services/loadbalancer/drivers/radware/driver.py:749 -msgid "vdirectRESTClient: Could not establish HTTP connection" -msgstr "" - -#: neutron/services/loadbalancer/drivers/radware/driver.py:766 -#, python-format -msgid "vdirectRESTClient: %(action)s failure, %(e)r" -msgstr "" - -#: neutron/services/loadbalancer/drivers/radware/driver.py:834 -#, python-format -msgid "" -"Operation %(oper)s is completed after %(sec_to_completion)d sec with " -"success status: %(success)s :" -msgstr "" - -#: neutron/services/loadbalancer/drivers/radware/driver.py:846 -#, python-format -msgid "Operation %(operation)s failed. Reason: %(msg)s" -msgstr "" - -#: neutron/services/loadbalancer/drivers/radware/driver.py:878 -#, python-format -msgid "Operation %s is not completed yet.." -msgstr "" - -#: neutron/services/loadbalancer/drivers/radware/driver.py:893 -msgid "Exception was thrown inside OperationCompletionHandler" -msgstr "" - -#: neutron/services/loadbalancer/drivers/radware/driver.py:902 -#, python-format -msgid "Post-operation function %(func)r completed after operation %(oper)r" -msgstr "" - -#: neutron/services/loadbalancer/drivers/radware/driver.py:908 -#, python-format -msgid "Post-operation function %(func)r failed after operation %(oper)r" -msgstr "" - -#: neutron/services/loadbalancer/drivers/radware/driver.py:949 -#, python-format -msgid "_update: %s " -msgstr "" - -#: neutron/services/loadbalancer/drivers/radware/driver.py:989 -#, python-format -msgid "_remove_object_from_db %s" -msgstr "" - -#: neutron/services/loadbalancer/drivers/radware/exceptions.py:20 -msgid "An unknown exception occurred in Radware LBaaS provider." -msgstr "" - -#: neutron/services/loadbalancer/drivers/radware/exceptions.py:24 -msgid "" -"vDirect user/password missing. Specify in configuration file, under " -"[radware] section" -msgstr "" - -#: neutron/services/loadbalancer/drivers/radware/exceptions.py:29 -#, python-format -msgid "" -"Workflow %(workflow)s is missing on vDirect server. Upload missing " -"workflow" -msgstr "" - -#: neutron/services/loadbalancer/drivers/radware/exceptions.py:34 -#, python-format -msgid "" -"REST request failed with status %(status)s. Reason: %(reason)s, " -"Description: %(description)s. Success status codes are %(success_codes)s" -msgstr "" - -#: neutron/services/loadbalancer/drivers/radware/exceptions.py:40 -#, python-format -msgid "%(operation)s operation is not supported for %(entity)s." -msgstr "" - -#: neutron/services/metering/agents/metering_agent.py:68 -msgid "Metering driver" -msgstr "" - -#: neutron/services/metering/agents/metering_agent.py:70 -msgid "Interval between two metering measures" -msgstr "" - -#: neutron/services/metering/agents/metering_agent.py:72 -msgid "Interval between two metering reports" -msgstr "" - -#: neutron/services/metering/agents/metering_agent.py:96 -#, python-format -msgid "Loading Metering driver %s" -msgstr "" - -#: neutron/services/metering/agents/metering_agent.py:98 -msgid "A metering driver must be specified" -msgstr "" - -#: neutron/services/metering/agents/metering_agent.py:113 -#, python-format -msgid "Send metering report: %s" -msgstr "" - -#: neutron/services/metering/agents/metering_agent.py:177 -#, python-format -msgid "Driver %(driver)s does not implement %(func)s" -msgstr "" - -#: neutron/services/metering/agents/metering_agent.py:181 -#, python-format -msgid "Driver %(driver)s:%(func)s runtime error" -msgstr "" - -#: neutron/services/metering/agents/metering_agent.py:216 -msgid "Get router traffic counters" -msgstr "" - -#: neutron/services/metering/agents/metering_agent.py:220 -msgid "Update metering rules from agent" -msgstr "" - -#: neutron/services/metering/agents/metering_agent.py:225 -msgid "Creating a metering label from agent" -msgstr "" - -#: neutron/services/metering/agents/metering_agent.py:232 -msgid "Delete a metering label from agent" -msgstr "" - -#: neutron/services/metering/drivers/iptables/iptables_driver.py:91 -#, python-format -msgid "Loading interface driver %s" -msgstr "" - -#: neutron/services/vpn/agent.py:26 -msgid "The vpn device drivers Neutron will use" -msgstr "" - -#: neutron/services/vpn/plugin.py:44 -#, python-format -msgid "VPN plugin using service driver: %s" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:87 -#, python-format -msgid "RESPONSE: %s" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:100 -#, python-format -msgid "%(method)s: Request for %(resource)s payload: %(payload)s" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:107 -#, python-format -msgid "%(method)s Took %(time).2f seconds to process" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:113 -#, python-format -msgid "%(method)s: Request timeout%(ssl)s (%(timeout).3f sec) for CSR(%(host)s)" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:122 -#, python-format -msgid "%(method)s: Unable to connect to CSR(%(host)s)" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:126 -#, python-format -msgid "%(method)s: Unexpected error for CSR (%(host)s): %(error)s" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:132 -#, python-format -msgid "%(method)s: Completed [%(status)s]" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:147 -#, python-format -msgid "%(auth)s with CSR %(host)s" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:154 -#, python-format -msgid "Successfully authenticated with CSR %s" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:156 -#, python-format -msgid "Failed authentication with CSR %(host)s [%(status)s]" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:191 -#, python-format -msgid "%(method)s: Request timeout for CSR(%(host)s)" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:40 -msgid "Status check interval for Cisco CSR IPSec connections" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:51 -#, python-format -msgid "Cisco CSR failed to create %(resource)s (%(which)s)" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:55 -#, python-format -msgid "Cisco CSR failed to change %(tunnel)s admin state to %(state)s" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:60 -#, python-format -msgid "" -"Required %(resource)s attribute %(attr)s mapping for Cisco CSR is missing" -" in device driver" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:65 -#, python-format -msgid "" -"Device driver does not have a mapping of '%(value)s for attribute " -"%(attr)s of %(resource)s" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:128 -#, python-format -msgid "Handling VPN service update notification '%s'" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:150 -#, python-format -msgid "Update: Existing connection %s changed" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:157 -#, python-format -msgid "Update: Connection %s no longer admin down" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:163 -#, python-format -msgid "Update: Connection %s forced to admin down" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:171 -#, python-format -msgid "Update: Created new connection %s in admin down state" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:176 -#, python-format -msgid "Update: Created new connection %s" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:187 -#, python-format -msgid "Update: Existing VPN service %s detected" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:191 -#, python-format -msgid "Update: New VPN service %s detected" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:202 -msgid "Update: Completed update processing" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:232 -#, python-format -msgid "Mark: %(service)d VPN services and %(conn)d IPSec connections marked dirty" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:254 -#, python-format -msgid "" -"Sweep: Removed %(service)d dirty VPN service%(splural)s and %(conn)d " -"dirty IPSec connection%(cplural)s" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:269 -#, python-format -msgid "Report: Collecting status for IPSec connections on VPN service %s" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:275 -#, python-format -msgid "Connection %s forced down" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:279 -#, python-format -msgid "Connection %(conn)s reported %(status)s" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:284 -#, python-format -msgid "Report: Adding info for IPSec connection %s" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:304 -#, python-format -msgid "Report: Adding info for VPN service %s" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:326 -msgid "Report: Starting status report processing" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:328 -#, python-format -msgid "Report: Collecting status for VPN service %s" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:334 -msgid "Sending status report update to plugin" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:336 -msgid "Report: Completed status report processing" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:620 -#, python-format -msgid "Unable to create %(resource)s %(which)s: %(status)d" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:633 -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:661 -#, python-format -msgid "Internal error - '%s' is not defined" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:646 -#, python-format -msgid "Unable to delete %(resource)s %(which)s: %(status)d" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:655 -#, python-format -msgid "Performing rollback action %(action)s for resource %(resource)s" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:681 -#, python-format -msgid "Creating IPSec connection %s" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:714 -#, python-format -msgid "FAILED: Create of IPSec site-to-site connection %s" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:717 -#, python-format -msgid "SUCCESS: Created IPSec site-to-site connection %s" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:726 -#, python-format -msgid "Deleting IPSec connection %s" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:728 -#, python-format -msgid "Unable to find connection %s" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:732 -#, python-format -msgid "SUCCESS: Deleted IPSec site-to-site connection %s" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:740 -#, python-format -msgid "Unable to change %(tunnel)s admin state to %(state)s" -msgstr "" - -#: neutron/services/vpn/device_drivers/ipsec.py:46 -msgid "Location to store ipsec server config files" -msgstr "" - -#: neutron/services/vpn/device_drivers/ipsec.py:49 -msgid "Interval for checking ipsec status" -msgstr "" - -#: neutron/services/vpn/device_drivers/ipsec.py:59 -msgid "Template file for ipsec configuration" -msgstr "" - -#: neutron/services/vpn/device_drivers/ipsec.py:65 -msgid "Template file for ipsec secret configuration" -msgstr "" - -#: neutron/services/vpn/device_drivers/ipsec.py:247 -#, python-format -msgid "Failed to enable vpn process on router %s" -msgstr "" - -#: neutron/services/vpn/device_drivers/ipsec.py:258 -#, python-format -msgid "Failed to disable vpn process on router %s" -msgstr "" - -#: neutron/services/vpn/service_drivers/__init__.py:97 -#, python-format -msgid "Notify agent at %(topic)s.%(host)s the message %(method)s %(args)s" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:66 -#, python-format -msgid "Unable to parse config files %s for Cisco CSR info" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:106 -#, python-format -msgid "Ignoring Cisco CSR for subnet %s - REST management is not an IP address" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_csr_db.py:44 -#, python-format -msgid "Fatal - %(reason)s" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_csr_db.py:78 -#, python-format -msgid "No available Cisco CSR %(type)s IDs from %(min)d..%(max)d" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_csr_db.py:133 -#, python-format -msgid "" -"Database inconsistency between IPSec connection and Cisco CSR mapping " -"table (%s)" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_csr_db.py:159 -#, python-format -msgid "Reserved new CSR ID %(csr_id)d for %(policy)s ID %(policy_id)s" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_csr_db.py:186 -#, python-format -msgid "" -"Mappings for IPSec connection %(conn)s - tunnel=%(tunnel)s " -"ike_policy=%(csr_ike)d ipsec_policy=%(csr_ipsec)d" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_csr_db.py:195 -#, python-format -msgid "" -"Existing entry for IPSec connection %s not found in Cisco CSR mapping " -"table" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_csr_db.py:222 -#, python-format -msgid "" -"Attempt to create duplicate entry in Cisco CSR mapping table for " -"connection %s" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_csr_db.py:225 -#, python-format -msgid "" -"Mapped connection %(conn_id)s to Tunnel%(tunnel_id)d using IKE policy ID " -"%(ike_id)d and IPSec policy ID %(ipsec_id)d" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_csr_db.py:237 -#, python-format -msgid "Removed mapping for connection %s" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_ipsec.py:104 -#, python-format -msgid "" -"Notify agent at %(topic)s.%(host)s the message %(method)s %(args)s for " -"router %(router)s" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_validator.py:32 -#, python-format -msgid "" -"Cisco CSR does not support %(resource)s attribute %(key)s with value " -"'%(value)s'" -msgstr "" - -#: neutron/tests/functional/agent/linux/simple_daemon.py:37 -msgid "" -"uuid provided from the command line so external_process can track us via " -"/proc/cmdline interface." -msgstr "" - -#: neutron/tests/unit/test_api_v2_resource.py:178 -#: neutron/tests/unit/test_api_v2_resource.py:248 -msgid "Unmapped error" -msgstr "" - -#: neutron/tests/unit/test_api_v2_resource.py:317 -msgid "" -"The server has either erred or is incapable of performing the requested " -"operation." -msgstr "" - -#: neutron/tests/unit/bigswitch/fake_server.py:69 -#, python-format -msgid "" -"Request: action=%(action)s, uri=%(uri)r, body=%(body)s, " -"headers=%(headers)s" -msgstr "" - -#: neutron/tests/unit/bigswitch/fake_server.py:121 -#, python-format -msgid "No floating IPs in requesturi=%(uri)s, body=%(body)s" -msgstr "" - -#: neutron/tests/unit/bigswitch/fake_server.py:130 -#, python-format -msgid "Expected floating IPs from multiple tenants.uri=%(uri)s, body=%(body)s" -msgstr "" - -#: neutron/tests/unit/bigswitch/fake_server.py:175 -#, python-format -msgid "No host cert for %(server)s in cert %(cert)s" -msgstr "" - -#: neutron/tests/unit/db/loadbalancer/test_db_loadbalancer.py:215 -#: neutron/tests/unit/db/loadbalancer/test_db_loadbalancer.py:237 -#: neutron/tests/unit/db/loadbalancer/test_db_loadbalancer.py:256 -#: neutron/tests/unit/db/loadbalancer/test_db_loadbalancer.py:279 -#, python-format -msgid "Unexpected error code: %s" -msgstr "" - -#: neutron/tests/unit/ml2/drivers/mechanism_logger.py:32 -#, python-format -msgid "" -"%(method)s called with network settings %(current)s (original settings " -"%(original)s) and network segments %(segments)s" -msgstr "" - -#: neutron/tests/unit/ml2/drivers/mechanism_logger.py:59 -#, python-format -msgid "" -"%(method)s called with subnet settings %(current)s (original settings " -"%(original)s)" -msgstr "" - -#: neutron/tests/unit/ml2/drivers/mechanism_logger.py:85 -#, python-format -msgid "" -"%(method)s called with port settings %(current)s (original settings " -"%(original)s) bound to segment %(segment)s (original segment " -"%(original_segment)s) using driver %(driver)s (original driver " -"%(original_driver)s) on network %(network)s" -msgstr "" - -#: neutron/tests/unit/ml2/extensions/test_extension.py:54 -msgid "Adds test attributes to core resources." -msgstr "" - -#: neutron/tests/unit/nec/stub_ofc_driver.py:64 -#, python-format -msgid "(create_tenant) OFC tenant %s already exists" -msgstr "" - -#: neutron/tests/unit/nec/stub_ofc_driver.py:76 -#, python-format -msgid "(delete_tenant) OFC tenant %s not found" -msgstr "" - -#: neutron/tests/unit/nec/stub_ofc_driver.py:78 -msgid "delete_tenant: SUCCEED" -msgstr "" - -#: neutron/tests/unit/nec/stub_ofc_driver.py:85 -#, python-format -msgid "(create_network) OFC tenant %s not found" -msgstr "" - -#: neutron/tests/unit/nec/stub_ofc_driver.py:88 -#, python-format -msgid "(create_network) OFC network %s already exists" -msgstr "" - -#: neutron/tests/unit/nec/stub_ofc_driver.py:99 -#, python-format -msgid "(update_network) OFC network %s not found" -msgstr "" - -#: neutron/tests/unit/nec/stub_ofc_driver.py:103 -msgid "update_network: SUCCEED" -msgstr "" - -#: neutron/tests/unit/nec/stub_ofc_driver.py:111 -#, python-format -msgid "(delete_network) OFC network %s not found" -msgstr "" - -#: neutron/tests/unit/nec/stub_ofc_driver.py:113 -msgid "delete_network: SUCCEED" -msgstr "" - -#: neutron/tests/unit/nec/stub_ofc_driver.py:120 -#, python-format -msgid "(create_port) OFC network %s not found" -msgstr "" - -#: neutron/tests/unit/nec/stub_ofc_driver.py:123 -#, python-format -msgid "(create_port) OFC port %s already exists" -msgstr "" - -#: neutron/tests/unit/nec/stub_ofc_driver.py:137 -#, python-format -msgid "(delete_port) OFC port %s not found" -msgstr "" - -#: neutron/tests/unit/nec/stub_ofc_driver.py:139 -msgid "delete_port: SUCCEED" -msgstr "" - -#: neutron/tests/unit/nec/stub_ofc_driver.py:172 -#, python-format -msgid "(create_router) OFC tenant %s not found" -msgstr "" - -#: neutron/tests/unit/nec/stub_ofc_driver.py:175 -#, python-format -msgid "(create_router) OFC router %s already exists" -msgstr "" - -#: neutron/tests/unit/nec/stub_ofc_driver.py:178 -msgid "Operation on OFC is failed" -msgstr "" - -#: neutron/tests/unit/nec/stub_ofc_driver.py:192 -#: neutron/tests/unit/nec/stub_ofc_driver.py:282 -#, python-format -msgid "(delete_router) OFC router %s not found" -msgstr "" - -#: neutron/tests/unit/nec/stub_ofc_driver.py:194 -msgid "delete_router: SUCCEED" -msgstr "" - -#: neutron/tests/unit/nec/stub_ofc_driver.py:202 -#, python-format -msgid "(add_router_interface) ip_address %s is not a valid format (a.b.c.d/N)." -msgstr "" - -#: neutron/tests/unit/nec/stub_ofc_driver.py:207 -#, python-format -msgid "(add_router_interface) OFC router %s not found" -msgstr "" - -#: neutron/tests/unit/nec/stub_ofc_driver.py:210 -#, python-format -msgid "(add_router_interface) OFC network %s not found" -msgstr "" - -#: neutron/tests/unit/nec/stub_ofc_driver.py:217 -#, python-format -msgid "add_router_interface: SUCCEED (if_id=%s)" -msgstr "" - -#: neutron/tests/unit/nec/stub_ofc_driver.py:225 -#: neutron/tests/unit/nec/stub_ofc_driver.py:242 -#, python-format -msgid "(delete_router_interface) OFC router interface %s not found" -msgstr "" - -#: neutron/tests/unit/nec/stub_ofc_driver.py:234 -msgid "update_router_route: SUCCEED" -msgstr "" - -#: neutron/tests/unit/nec/stub_ofc_driver.py:245 -msgid "delete_router_interface: SUCCEED" -msgstr "" - -#: neutron/tests/unit/nec/stub_ofc_driver.py:255 -#, python-format -msgid "(add_router_route) OFC router %s not found" -msgstr "" - -#: neutron/tests/unit/nec/stub_ofc_driver.py:260 -#, python-format -msgid "(add_router_route) route to \"%s\" already exists" -msgstr "" - -#: neutron/tests/unit/nec/stub_ofc_driver.py:265 -#, python-format -msgid "add_router_route: SUCCEED (route_id=%s)" -msgstr "" - -#: neutron/tests/unit/nec/stub_ofc_driver.py:274 -#, python-format -msgid "(delete_router_route) OFC router route %s not found" -msgstr "" - -#: neutron/tests/unit/nec/stub_ofc_driver.py:276 -msgid "delete_router_route: SUCCEED" -msgstr "" - -#: neutron/tests/unit/nec/stub_ofc_driver.py:289 -#, python-format -msgid "list_router_routes: routes=%s" -msgstr "" - -#: neutron/tests/unit/nec/test_ofc_client.py:84 -msgid "The specified OFC resource (/somewhere) is not found." -msgstr "" - -#: neutron/tests/unit/nec/test_ofc_client.py:88 -#: neutron/tests/unit/nec/test_ofc_client.py:94 -#: neutron/tests/unit/nec/test_ofc_client.py:103 -msgid "An OFC exception has occurred: Operation on OFC failed" -msgstr "" - -#: neutron/tests/unit/nec/test_ofc_client.py:110 -msgid "An OFC exception has occurred: Failed to connect OFC : " -msgstr "" - -#: neutron/tests/unit/vmware/apiclient/fake.py:406 -#, python-format -msgid "lswitch:%s not found" -msgstr "" - -#: neutron/tests/unit/vmware/apiclient/fake.py:415 -#, python-format -msgid "lrouter:%s not found" -msgstr "" - -#: neutron/tests/unit/vmware/vshield/fake_vcns.py:104 -#, python-format -msgid "Job %s does not nexist" -msgstr "" - -#: neutron/tests/unit/vmware/vshield/fake_vcns.py:116 -#: neutron/tests/unit/vmware/vshield/fake_vcns.py:127 -#: neutron/tests/unit/vmware/vshield/fake_vcns.py:144 -#: neutron/tests/unit/vmware/vshield/fake_vcns.py:162 -#: neutron/tests/unit/vmware/vshield/fake_vcns.py:184 -#: neutron/tests/unit/vmware/vshield/fake_vcns.py:206 -#: neutron/tests/unit/vmware/vshield/fake_vcns.py:291 -#: neutron/tests/unit/vmware/vshield/fake_vcns.py:305 -#: neutron/tests/unit/vmware/vshield/fake_vcns.py:319 -#: neutron/tests/unit/vmware/vshield/fake_vcns.py:361 -#, python-format -msgid "Edge %s does not exist" -msgstr "" - -#: neutron/tests/unit/vmware/vshield/fake_vcns.py:194 -#, python-format -msgid "Rule id %d doest not exist" -msgstr "" - -#: neutron/tests/unit/vmware/vshield/fake_vcns.py:258 -#, python-format -msgid "Lswitch %s does not exist" -msgstr "" - -#: neutron/tests/unit/vmware/vshield/test_edge_router.py:129 -msgid "Tasks not completed" -msgstr "" - diff --git a/neutron/locale/es/LC_MESSAGES/neutron-log-error.po b/neutron/locale/es/LC_MESSAGES/neutron-log-error.po deleted file mode 100644 index 2eea2c308bd..00000000000 --- a/neutron/locale/es/LC_MESSAGES/neutron-log-error.po +++ /dev/null @@ -1,273 +0,0 @@ -# Translations template for neutron. -# Copyright (C) 2014 ORGANIZATION -# This file is distributed under the same license as the neutron project. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Neutron\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-29 06:04+0000\n" -"PO-Revision-Date: 2014-06-30 20:07+0000\n" -"Last-Translator: openstackjenkins \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/neutron/language/" -"es/)\n" -"Language: es\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: neutron/policy.py:119 -#, python-format -msgid "" -"Backward compatibility unavailable for deprecated policy %s. The policy will " -"not be enforced" -msgstr "" - -#: neutron/policy.py:311 -#, python-format -msgid "Policy check error while calling %s!" -msgstr "" - -#: neutron/agent/l3_ha_agent.py:136 -#, python-format -msgid "Unable to process HA router %s without ha port" -msgstr "" - -#: neutron/agent/linux/external_process.py:229 -#, python-format -msgid "" -"%(service)s for %(resource_type)s with uuid %(uuid)s not found. The process " -"should not have died" -msgstr "" - -#: neutron/agent/linux/external_process.py:249 -#, python-format -msgid "respawning %(service)s for uuid %(uuid)s" -msgstr "" - -#: neutron/agent/linux/external_process.py:255 -msgid "Exiting agent as programmed in check_child_processes_actions" -msgstr "" - -#: neutron/agent/linux/interface.py:154 -#, python-format -msgid "Failed deleting ingress connection state of floatingip %s" -msgstr "" - -#: neutron/agent/linux/interface.py:163 -#, python-format -msgid "Failed deleting egress connection state of floatingip %s" -msgstr "" - -#: neutron/cmd/sanity_check.py:58 -msgid "" -"Nova notifications are enabled, but novaclient is not installed. Either " -"disable nova notifications or install python-novaclient." -msgstr "" - -#: neutron/openstack/common/excutils.py:76 -#, python-format -msgid "Original exception being dropped: %s" -msgstr "Se está descartando excepción original: %s" - -#: neutron/openstack/common/excutils.py:105 -#, python-format -msgid "Unexpected exception occurred %d time(s)... retrying." -msgstr "La excepción inesperada ha ocurrido %d vez(veces)... reintentando." - -#: neutron/openstack/common/periodic_task.py:202 -#, python-format -msgid "Error during %(full_task_name)s: %(e)s" -msgstr "Error durante %(full_task_name)s: %(e)s" - -#: neutron/openstack/common/service.py:188 -msgid "Exception during rpc cleanup." -msgstr "Excepción durante limpieza de rpc." - -#: neutron/openstack/common/service.py:277 -msgid "Unhandled exception" -msgstr "Excepción no controlada" - -#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:279 -#, python-format -msgid "Unable to delete port '%(pname)s' on switch. Exception: %(exp)s" -msgstr "" - -#: neutron/plugins/ml2/drivers/type_gre.py:86 -#, python-format -msgid "Skipping unreasonable gre ID range %(tun_min)s:%(tun_max)s" -msgstr "" - -#: neutron/plugins/ml2/drivers/type_vxlan.py:92 -#, python-format -msgid "Skipping unreasonable VXLAN VNI range %(tun_min)s:%(tun_max)s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:110 -msgid "APIC service agent: failed in reporting state" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:205 -#, python-format -msgid "No such interface (ignored): %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:255 -msgid "APIC service agent: exception in LLDP parsing" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:310 -#, python-format -msgid "APIC service agent: can not get MACaddr for %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:326 -msgid "APIC host agent: failed in reporting state" -msgstr "" - -#: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:386 -msgid "Error in agent event loop" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:55 -#, python-format -msgid "Cannot complete the sync between Neutron and VSD because of error:%s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:102 -msgid "Agent terminated!: Failed to get a datapath." -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:121 -msgid "Agent terminated" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:158 -msgid "Agent failed to create agent config map" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:283 -msgid "Failed reporting state!" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:449 -#, python-format -msgid "No local VLAN available for net-id=%s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:464 -#, python-format -msgid "" -"Cannot provision %(network_type)s network for net-id=%(net_uuid)s - " -"tunneling disabled" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:475 -#, python-format -msgid "" -"Cannot provision %(network_type)s network for net-id=%(net_uuid)s - no " -"bridge for physical_network %(physical_network)s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:485 -#, python-format -msgid "" -"Cannot provision unknown network type %(network_type)s for net-id=" -"%(net_uuid)s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:523 -#, python-format -msgid "" -"Cannot reclaim unknown network type %(network_type)s for net-id=%(net_uuid)s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:657 -#, python-format -msgid "" -"Bridge %(bridge)s for physical network %(physical_network)s does not exist. " -"Agent terminated!" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:735 -msgid "ofport should have a value that can be interpreted as an integer" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:738 -#, python-format -msgid "Failed to set-up %(type)s tunnel port to %(ip)s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:916 -msgid "Error while synchronizing tunnels" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:956 -msgid "Error while processing VIF ports" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:2099 -#, python-format -msgid "" -"Rolling back database changes for gateway device %s because of an error in " -"the NSX backend" -msgstr "" - -#: neutron/scheduler/l3_agent_scheduler.py:281 -#, python-format -msgid "Not enough candidates, a HA router needs at least %s agents" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:62 -#, python-format -msgid "Config file parse error: %s" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:76 -#, python-format -msgid "Ignoring Cisco CSR configuration entry - router IP %s is not valid" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:89 -#, python-format -msgid "Ignoring Cisco CSR for router %(router)s - missing %(field)s setting" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:97 -#, python-format -msgid "" -"Ignoring Cisco CSR for router %s - timeout is not a floating point number" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:113 -#, python-format -msgid "Ignoring Cisco CSR for router %s - local tunnel is not an IP address" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:119 -#, python-format -msgid "Malformed interface name for Cisco CSR router entry - %s" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:155 -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:202 -msgid "No routers found in INI file!" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:174 -#, python-format -msgid "Unable to lookup router ID based on router's public IP (%s) in INI file" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:177 -#, python-format -msgid "No matching routers on host %s" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:211 -#, python-format -msgid "Unable to find host for router %s" -msgstr "" diff --git a/neutron/locale/es/LC_MESSAGES/neutron-log-info.po b/neutron/locale/es/LC_MESSAGES/neutron-log-info.po index 1f6da878bc1..0c9c7ea7e8e 100644 --- a/neutron/locale/es/LC_MESSAGES/neutron-log-info.po +++ b/neutron/locale/es/LC_MESSAGES/neutron-log-info.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Neutron\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-22 06:06+0000\n" +"POT-Creation-Date: 2014-10-08 06:09+0000\n" "PO-Revision-Date: 2014-07-18 20:49+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: Spanish (http://www.transifex.com/projects/p/neutron/language/" @@ -19,12 +19,17 @@ msgstr "" "Generated-By: Babel 1.3\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: neutron/policy.py:106 +#: neutron/policy.py:110 #, python-format msgid "" "Inserting policy:%(new_policy)s in place of deprecated policy:%(old_policy)s" msgstr "" +#: neutron/agent/linux/ovs_lib.py:422 +#, python-format +msgid "Port %(port_id)s not present in bridge %(br_name)s" +msgstr "" + #: neutron/common/ipv6_utils.py:62 msgid "IPv6 is not enabled on this system." msgstr "" diff --git a/neutron/locale/es/LC_MESSAGES/neutron-log-warning.po b/neutron/locale/es/LC_MESSAGES/neutron-log-warning.po deleted file mode 100644 index 65cb403ecba..00000000000 --- a/neutron/locale/es/LC_MESSAGES/neutron-log-warning.po +++ /dev/null @@ -1,156 +0,0 @@ -# Translations template for neutron. -# Copyright (C) 2014 ORGANIZATION -# This file is distributed under the same license as the neutron project. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Neutron\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-14 06:11+0000\n" -"PO-Revision-Date: 2014-06-30 19:27+0000\n" -"Last-Translator: openstackjenkins \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/neutron/language/" -"es/)\n" -"Language: es\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: neutron/policy.py:94 -#, python-format -msgid "" -"Found deprecated policy rule:%s. Please consider upgrading your policy " -"configuration file" -msgstr "" - -#: neutron/policy.py:137 -#, python-format -msgid "Unable to find data type descriptor for attribute %s" -msgstr "" - -#: neutron/agent/securitygroups_rpc.py:183 -msgid "" -"security_group_info_for_devices rpc call not supported by the server, " -"falling back to old security_group_rules_for_devices which scales worse." -msgstr "" - -#: neutron/agent/linux/keepalived.py:358 -msgid "" -"A previous instance of keepalived seems to be dead, unable to restart it, a " -"new instance will be spawned" -msgstr "" - -#: neutron/db/l3_agentschedulers_db.py:105 -msgid "" -"Time since last L3 agent reschedule check has exceeded the interval between " -"checks. Waiting before check to allow agents to send a heartbeat in case " -"there was a clock adjustment." -msgstr "" - -#: neutron/db/l3_agentschedulers_db.py:127 -#, python-format -msgid "" -"Rescheduling router %(router)s from agent %(agent)s because the agent did " -"not report to the server in the last %(dead_time)s seconds." -msgstr "" - -#: neutron/db/l3_hamode_db.py:404 -#, python-format -msgid "The router %(router_id)s is bound multiple times on the agent %(host)s" -msgstr "" - -#: neutron/openstack/common/service.py:364 -#, python-format -msgid "pid %d not in child list" -msgstr "El pid %d no está en la lista de hijos" - -#: neutron/plugins/ml2/drivers/type_tunnel.py:143 -#, python-format -msgid "%(type)s tunnel %(id)s not found" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_sync.py:68 -#, python-format -msgid "Create network postcommit failed for network %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_sync.py:78 -#, python-format -msgid "Create subnet postcommit failed for subnet %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_sync.py:91 -#, python-format -msgid "Create port postcommit failed for port %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_sync.py:110 -#, python-format -msgid "Add interface postcommit failed for port %s" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:299 -#, python-format -msgid "Subnet %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:317 -#, python-format -msgid "Router %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:329 -#, python-format -msgid "" -"Route with destination %(dest)s and nexthop %(hop)s not found in neutron for " -"sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:343 -#, python-format -msgid "Security group %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:354 -#, python-format -msgid "Security group rule %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:364 -#, python-format -msgid "Floating ip %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:376 -#, python-format -msgid "IP allocation for floating ip %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:387 -#, python-format -msgid "Net-partition %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:397 -#, python-format -msgid "VM port %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:290 -#, python-format -msgid "Unable to create tunnel port. Invalid remote IP: %s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:713 -#, python-format -msgid "" -"VIF port: %s has no ofport configured, and might not be able to transmit" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:820 -#, python-format -msgid "Device %s not defined on plugin" -msgstr "" diff --git a/neutron/locale/fr/LC_MESSAGES/neutron-log-critical.po b/neutron/locale/fr/LC_MESSAGES/neutron-log-critical.po deleted file mode 100644 index 52ae6541ad5..00000000000 --- a/neutron/locale/fr/LC_MESSAGES/neutron-log-critical.po +++ /dev/null @@ -1,23 +0,0 @@ -# Translations template for neutron. -# Copyright (C) 2014 ORGANIZATION -# This file is distributed under the same license as the neutron project. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Neutron\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-06-20 06:09+0000\n" -"PO-Revision-Date: 2014-05-30 06:24+0000\n" -"Last-Translator: FULL NAME \n" -"Language-Team: French (http://www.transifex.com/projects/p/neutron/language/" -"fr/)\n" -"Language: fr\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -#~ msgid "Dummy message for transifex setup." -#~ msgstr "message fictif pour la configuration transifex" diff --git a/neutron/locale/fr/LC_MESSAGES/neutron-log-error.po b/neutron/locale/fr/LC_MESSAGES/neutron-log-error.po deleted file mode 100644 index 07d9323a1b3..00000000000 --- a/neutron/locale/fr/LC_MESSAGES/neutron-log-error.po +++ /dev/null @@ -1,273 +0,0 @@ -# Translations template for neutron. -# Copyright (C) 2014 ORGANIZATION -# This file is distributed under the same license as the neutron project. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Neutron\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-29 06:04+0000\n" -"PO-Revision-Date: 2014-06-30 20:07+0000\n" -"Last-Translator: openstackjenkins \n" -"Language-Team: French (http://www.transifex.com/projects/p/neutron/language/" -"fr/)\n" -"Language: fr\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -#: neutron/policy.py:119 -#, python-format -msgid "" -"Backward compatibility unavailable for deprecated policy %s. The policy will " -"not be enforced" -msgstr "" - -#: neutron/policy.py:311 -#, python-format -msgid "Policy check error while calling %s!" -msgstr "" - -#: neutron/agent/l3_ha_agent.py:136 -#, python-format -msgid "Unable to process HA router %s without ha port" -msgstr "" - -#: neutron/agent/linux/external_process.py:229 -#, python-format -msgid "" -"%(service)s for %(resource_type)s with uuid %(uuid)s not found. The process " -"should not have died" -msgstr "" - -#: neutron/agent/linux/external_process.py:249 -#, python-format -msgid "respawning %(service)s for uuid %(uuid)s" -msgstr "" - -#: neutron/agent/linux/external_process.py:255 -msgid "Exiting agent as programmed in check_child_processes_actions" -msgstr "" - -#: neutron/agent/linux/interface.py:154 -#, python-format -msgid "Failed deleting ingress connection state of floatingip %s" -msgstr "" - -#: neutron/agent/linux/interface.py:163 -#, python-format -msgid "Failed deleting egress connection state of floatingip %s" -msgstr "" - -#: neutron/cmd/sanity_check.py:58 -msgid "" -"Nova notifications are enabled, but novaclient is not installed. Either " -"disable nova notifications or install python-novaclient." -msgstr "" - -#: neutron/openstack/common/excutils.py:76 -#, python-format -msgid "Original exception being dropped: %s" -msgstr "Exception d'origine en cours de suppression : %s" - -#: neutron/openstack/common/excutils.py:105 -#, python-format -msgid "Unexpected exception occurred %d time(s)... retrying." -msgstr "Exception inattendue survenue %d fois... Nouvel essai." - -#: neutron/openstack/common/periodic_task.py:202 -#, python-format -msgid "Error during %(full_task_name)s: %(e)s" -msgstr "Erreur pendant %(full_task_name)s : %(e)s" - -#: neutron/openstack/common/service.py:188 -msgid "Exception during rpc cleanup." -msgstr "Exception pendant le nettoyage rpc." - -#: neutron/openstack/common/service.py:277 -msgid "Unhandled exception" -msgstr "Exception non gérée" - -#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:279 -#, python-format -msgid "Unable to delete port '%(pname)s' on switch. Exception: %(exp)s" -msgstr "" - -#: neutron/plugins/ml2/drivers/type_gre.py:86 -#, python-format -msgid "Skipping unreasonable gre ID range %(tun_min)s:%(tun_max)s" -msgstr "" - -#: neutron/plugins/ml2/drivers/type_vxlan.py:92 -#, python-format -msgid "Skipping unreasonable VXLAN VNI range %(tun_min)s:%(tun_max)s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:110 -msgid "APIC service agent: failed in reporting state" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:205 -#, python-format -msgid "No such interface (ignored): %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:255 -msgid "APIC service agent: exception in LLDP parsing" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:310 -#, python-format -msgid "APIC service agent: can not get MACaddr for %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:326 -msgid "APIC host agent: failed in reporting state" -msgstr "" - -#: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:386 -msgid "Error in agent event loop" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:55 -#, python-format -msgid "Cannot complete the sync between Neutron and VSD because of error:%s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:102 -msgid "Agent terminated!: Failed to get a datapath." -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:121 -msgid "Agent terminated" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:158 -msgid "Agent failed to create agent config map" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:283 -msgid "Failed reporting state!" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:449 -#, python-format -msgid "No local VLAN available for net-id=%s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:464 -#, python-format -msgid "" -"Cannot provision %(network_type)s network for net-id=%(net_uuid)s - " -"tunneling disabled" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:475 -#, python-format -msgid "" -"Cannot provision %(network_type)s network for net-id=%(net_uuid)s - no " -"bridge for physical_network %(physical_network)s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:485 -#, python-format -msgid "" -"Cannot provision unknown network type %(network_type)s for net-id=" -"%(net_uuid)s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:523 -#, python-format -msgid "" -"Cannot reclaim unknown network type %(network_type)s for net-id=%(net_uuid)s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:657 -#, python-format -msgid "" -"Bridge %(bridge)s for physical network %(physical_network)s does not exist. " -"Agent terminated!" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:735 -msgid "ofport should have a value that can be interpreted as an integer" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:738 -#, python-format -msgid "Failed to set-up %(type)s tunnel port to %(ip)s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:916 -msgid "Error while synchronizing tunnels" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:956 -msgid "Error while processing VIF ports" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:2099 -#, python-format -msgid "" -"Rolling back database changes for gateway device %s because of an error in " -"the NSX backend" -msgstr "" - -#: neutron/scheduler/l3_agent_scheduler.py:281 -#, python-format -msgid "Not enough candidates, a HA router needs at least %s agents" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:62 -#, python-format -msgid "Config file parse error: %s" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:76 -#, python-format -msgid "Ignoring Cisco CSR configuration entry - router IP %s is not valid" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:89 -#, python-format -msgid "Ignoring Cisco CSR for router %(router)s - missing %(field)s setting" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:97 -#, python-format -msgid "" -"Ignoring Cisco CSR for router %s - timeout is not a floating point number" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:113 -#, python-format -msgid "Ignoring Cisco CSR for router %s - local tunnel is not an IP address" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:119 -#, python-format -msgid "Malformed interface name for Cisco CSR router entry - %s" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:155 -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:202 -msgid "No routers found in INI file!" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:174 -#, python-format -msgid "Unable to lookup router ID based on router's public IP (%s) in INI file" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:177 -#, python-format -msgid "No matching routers on host %s" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:211 -#, python-format -msgid "Unable to find host for router %s" -msgstr "" diff --git a/neutron/locale/fr/LC_MESSAGES/neutron-log-info.po b/neutron/locale/fr/LC_MESSAGES/neutron-log-info.po index 72f11c1503a..7424e03660c 100644 --- a/neutron/locale/fr/LC_MESSAGES/neutron-log-info.po +++ b/neutron/locale/fr/LC_MESSAGES/neutron-log-info.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Neutron\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-22 06:06+0000\n" +"POT-Creation-Date: 2014-10-08 06:09+0000\n" "PO-Revision-Date: 2014-08-12 21:40+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: French (http://www.transifex.com/projects/p/neutron/language/" @@ -19,12 +19,17 @@ msgstr "" "Generated-By: Babel 1.3\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: neutron/policy.py:106 +#: neutron/policy.py:110 #, python-format msgid "" "Inserting policy:%(new_policy)s in place of deprecated policy:%(old_policy)s" msgstr "" +#: neutron/agent/linux/ovs_lib.py:422 +#, python-format +msgid "Port %(port_id)s not present in bridge %(br_name)s" +msgstr "" + #: neutron/common/ipv6_utils.py:62 msgid "IPv6 is not enabled on this system." msgstr "" diff --git a/neutron/locale/fr/LC_MESSAGES/neutron-log-warning.po b/neutron/locale/fr/LC_MESSAGES/neutron-log-warning.po deleted file mode 100644 index 1806bead737..00000000000 --- a/neutron/locale/fr/LC_MESSAGES/neutron-log-warning.po +++ /dev/null @@ -1,156 +0,0 @@ -# Translations template for neutron. -# Copyright (C) 2014 ORGANIZATION -# This file is distributed under the same license as the neutron project. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Neutron\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-14 06:11+0000\n" -"PO-Revision-Date: 2014-06-30 19:27+0000\n" -"Last-Translator: openstackjenkins \n" -"Language-Team: French (http://www.transifex.com/projects/p/neutron/language/" -"fr/)\n" -"Language: fr\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -#: neutron/policy.py:94 -#, python-format -msgid "" -"Found deprecated policy rule:%s. Please consider upgrading your policy " -"configuration file" -msgstr "" - -#: neutron/policy.py:137 -#, python-format -msgid "Unable to find data type descriptor for attribute %s" -msgstr "" - -#: neutron/agent/securitygroups_rpc.py:183 -msgid "" -"security_group_info_for_devices rpc call not supported by the server, " -"falling back to old security_group_rules_for_devices which scales worse." -msgstr "" - -#: neutron/agent/linux/keepalived.py:358 -msgid "" -"A previous instance of keepalived seems to be dead, unable to restart it, a " -"new instance will be spawned" -msgstr "" - -#: neutron/db/l3_agentschedulers_db.py:105 -msgid "" -"Time since last L3 agent reschedule check has exceeded the interval between " -"checks. Waiting before check to allow agents to send a heartbeat in case " -"there was a clock adjustment." -msgstr "" - -#: neutron/db/l3_agentschedulers_db.py:127 -#, python-format -msgid "" -"Rescheduling router %(router)s from agent %(agent)s because the agent did " -"not report to the server in the last %(dead_time)s seconds." -msgstr "" - -#: neutron/db/l3_hamode_db.py:404 -#, python-format -msgid "The router %(router_id)s is bound multiple times on the agent %(host)s" -msgstr "" - -#: neutron/openstack/common/service.py:364 -#, python-format -msgid "pid %d not in child list" -msgstr "PID %d absent de la liste d'enfants" - -#: neutron/plugins/ml2/drivers/type_tunnel.py:143 -#, python-format -msgid "%(type)s tunnel %(id)s not found" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_sync.py:68 -#, python-format -msgid "Create network postcommit failed for network %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_sync.py:78 -#, python-format -msgid "Create subnet postcommit failed for subnet %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_sync.py:91 -#, python-format -msgid "Create port postcommit failed for port %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_sync.py:110 -#, python-format -msgid "Add interface postcommit failed for port %s" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:299 -#, python-format -msgid "Subnet %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:317 -#, python-format -msgid "Router %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:329 -#, python-format -msgid "" -"Route with destination %(dest)s and nexthop %(hop)s not found in neutron for " -"sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:343 -#, python-format -msgid "Security group %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:354 -#, python-format -msgid "Security group rule %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:364 -#, python-format -msgid "Floating ip %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:376 -#, python-format -msgid "IP allocation for floating ip %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:387 -#, python-format -msgid "Net-partition %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:397 -#, python-format -msgid "VM port %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:290 -#, python-format -msgid "Unable to create tunnel port. Invalid remote IP: %s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:713 -#, python-format -msgid "" -"VIF port: %s has no ofport configured, and might not be able to transmit" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:820 -#, python-format -msgid "Device %s not defined on plugin" -msgstr "" diff --git a/neutron/locale/it/LC_MESSAGES/neutron-log-error.po b/neutron/locale/it/LC_MESSAGES/neutron-log-error.po deleted file mode 100644 index 76b5ed800ce..00000000000 --- a/neutron/locale/it/LC_MESSAGES/neutron-log-error.po +++ /dev/null @@ -1,274 +0,0 @@ -# Translations template for neutron. -# Copyright (C) 2014 ORGANIZATION -# This file is distributed under the same license as the neutron project. -# -# Translators: -# PierAlberto , 2014 -msgid "" -msgstr "" -"Project-Id-Version: Neutron\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-29 06:04+0000\n" -"PO-Revision-Date: 2014-07-06 03:50+0000\n" -"Last-Translator: PierAlberto \n" -"Language-Team: Italian (http://www.transifex.com/projects/p/neutron/language/" -"it/)\n" -"Language: it\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: neutron/policy.py:119 -#, python-format -msgid "" -"Backward compatibility unavailable for deprecated policy %s. The policy will " -"not be enforced" -msgstr "" - -#: neutron/policy.py:311 -#, python-format -msgid "Policy check error while calling %s!" -msgstr "" - -#: neutron/agent/l3_ha_agent.py:136 -#, python-format -msgid "Unable to process HA router %s without ha port" -msgstr "" - -#: neutron/agent/linux/external_process.py:229 -#, python-format -msgid "" -"%(service)s for %(resource_type)s with uuid %(uuid)s not found. The process " -"should not have died" -msgstr "" - -#: neutron/agent/linux/external_process.py:249 -#, python-format -msgid "respawning %(service)s for uuid %(uuid)s" -msgstr "" - -#: neutron/agent/linux/external_process.py:255 -msgid "Exiting agent as programmed in check_child_processes_actions" -msgstr "" - -#: neutron/agent/linux/interface.py:154 -#, python-format -msgid "Failed deleting ingress connection state of floatingip %s" -msgstr "" - -#: neutron/agent/linux/interface.py:163 -#, python-format -msgid "Failed deleting egress connection state of floatingip %s" -msgstr "" - -#: neutron/cmd/sanity_check.py:58 -msgid "" -"Nova notifications are enabled, but novaclient is not installed. Either " -"disable nova notifications or install python-novaclient." -msgstr "" - -#: neutron/openstack/common/excutils.py:76 -#, python-format -msgid "Original exception being dropped: %s" -msgstr "Eccezione originale in corso di eliminazione: %s" - -#: neutron/openstack/common/excutils.py:105 -#, python-format -msgid "Unexpected exception occurred %d time(s)... retrying." -msgstr "Un errore inatteso si è verificato %d volte... ritento." - -#: neutron/openstack/common/periodic_task.py:202 -#, python-format -msgid "Error during %(full_task_name)s: %(e)s" -msgstr "Errore durante %(full_task_name)s: %(e)s" - -#: neutron/openstack/common/service.py:188 -msgid "Exception during rpc cleanup." -msgstr "Eccezioni durante pulitura rpc." - -#: neutron/openstack/common/service.py:277 -msgid "Unhandled exception" -msgstr "Eccezione non gestita" - -#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:279 -#, python-format -msgid "Unable to delete port '%(pname)s' on switch. Exception: %(exp)s" -msgstr "" - -#: neutron/plugins/ml2/drivers/type_gre.py:86 -#, python-format -msgid "Skipping unreasonable gre ID range %(tun_min)s:%(tun_max)s" -msgstr "" - -#: neutron/plugins/ml2/drivers/type_vxlan.py:92 -#, python-format -msgid "Skipping unreasonable VXLAN VNI range %(tun_min)s:%(tun_max)s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:110 -msgid "APIC service agent: failed in reporting state" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:205 -#, python-format -msgid "No such interface (ignored): %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:255 -msgid "APIC service agent: exception in LLDP parsing" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:310 -#, python-format -msgid "APIC service agent: can not get MACaddr for %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:326 -msgid "APIC host agent: failed in reporting state" -msgstr "" - -#: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:386 -msgid "Error in agent event loop" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:55 -#, python-format -msgid "Cannot complete the sync between Neutron and VSD because of error:%s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:102 -msgid "Agent terminated!: Failed to get a datapath." -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:121 -msgid "Agent terminated" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:158 -msgid "Agent failed to create agent config map" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:283 -msgid "Failed reporting state!" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:449 -#, python-format -msgid "No local VLAN available for net-id=%s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:464 -#, python-format -msgid "" -"Cannot provision %(network_type)s network for net-id=%(net_uuid)s - " -"tunneling disabled" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:475 -#, python-format -msgid "" -"Cannot provision %(network_type)s network for net-id=%(net_uuid)s - no " -"bridge for physical_network %(physical_network)s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:485 -#, python-format -msgid "" -"Cannot provision unknown network type %(network_type)s for net-id=" -"%(net_uuid)s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:523 -#, python-format -msgid "" -"Cannot reclaim unknown network type %(network_type)s for net-id=%(net_uuid)s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:657 -#, python-format -msgid "" -"Bridge %(bridge)s for physical network %(physical_network)s does not exist. " -"Agent terminated!" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:735 -msgid "ofport should have a value that can be interpreted as an integer" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:738 -#, python-format -msgid "Failed to set-up %(type)s tunnel port to %(ip)s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:916 -msgid "Error while synchronizing tunnels" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:956 -msgid "Error while processing VIF ports" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:2099 -#, python-format -msgid "" -"Rolling back database changes for gateway device %s because of an error in " -"the NSX backend" -msgstr "" - -#: neutron/scheduler/l3_agent_scheduler.py:281 -#, python-format -msgid "Not enough candidates, a HA router needs at least %s agents" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:62 -#, python-format -msgid "Config file parse error: %s" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:76 -#, python-format -msgid "Ignoring Cisco CSR configuration entry - router IP %s is not valid" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:89 -#, python-format -msgid "Ignoring Cisco CSR for router %(router)s - missing %(field)s setting" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:97 -#, python-format -msgid "" -"Ignoring Cisco CSR for router %s - timeout is not a floating point number" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:113 -#, python-format -msgid "Ignoring Cisco CSR for router %s - local tunnel is not an IP address" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:119 -#, python-format -msgid "Malformed interface name for Cisco CSR router entry - %s" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:155 -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:202 -msgid "No routers found in INI file!" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:174 -#, python-format -msgid "Unable to lookup router ID based on router's public IP (%s) in INI file" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:177 -#, python-format -msgid "No matching routers on host %s" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:211 -#, python-format -msgid "Unable to find host for router %s" -msgstr "" diff --git a/neutron/locale/it/LC_MESSAGES/neutron-log-info.po b/neutron/locale/it/LC_MESSAGES/neutron-log-info.po index e4199e1a40f..b9b624e916d 100644 --- a/neutron/locale/it/LC_MESSAGES/neutron-log-info.po +++ b/neutron/locale/it/LC_MESSAGES/neutron-log-info.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Neutron\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-22 06:06+0000\n" +"POT-Creation-Date: 2014-10-08 06:09+0000\n" "PO-Revision-Date: 2014-08-17 05:19+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: Italian (http://www.transifex.com/projects/p/neutron/language/" @@ -20,12 +20,17 @@ msgstr "" "Generated-By: Babel 1.3\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: neutron/policy.py:106 +#: neutron/policy.py:110 #, python-format msgid "" "Inserting policy:%(new_policy)s in place of deprecated policy:%(old_policy)s" msgstr "" +#: neutron/agent/linux/ovs_lib.py:422 +#, python-format +msgid "Port %(port_id)s not present in bridge %(br_name)s" +msgstr "" + #: neutron/common/ipv6_utils.py:62 msgid "IPv6 is not enabled on this system." msgstr "" diff --git a/neutron/locale/it/LC_MESSAGES/neutron-log-warning.po b/neutron/locale/it/LC_MESSAGES/neutron-log-warning.po deleted file mode 100644 index d3bdf4d9d21..00000000000 --- a/neutron/locale/it/LC_MESSAGES/neutron-log-warning.po +++ /dev/null @@ -1,156 +0,0 @@ -# Translations template for neutron. -# Copyright (C) 2014 ORGANIZATION -# This file is distributed under the same license as the neutron project. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Neutron\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-14 06:11+0000\n" -"PO-Revision-Date: 2014-06-30 19:27+0000\n" -"Last-Translator: openstackjenkins \n" -"Language-Team: Italian (http://www.transifex.com/projects/p/neutron/language/" -"it/)\n" -"Language: it\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: neutron/policy.py:94 -#, python-format -msgid "" -"Found deprecated policy rule:%s. Please consider upgrading your policy " -"configuration file" -msgstr "" - -#: neutron/policy.py:137 -#, python-format -msgid "Unable to find data type descriptor for attribute %s" -msgstr "" - -#: neutron/agent/securitygroups_rpc.py:183 -msgid "" -"security_group_info_for_devices rpc call not supported by the server, " -"falling back to old security_group_rules_for_devices which scales worse." -msgstr "" - -#: neutron/agent/linux/keepalived.py:358 -msgid "" -"A previous instance of keepalived seems to be dead, unable to restart it, a " -"new instance will be spawned" -msgstr "" - -#: neutron/db/l3_agentschedulers_db.py:105 -msgid "" -"Time since last L3 agent reschedule check has exceeded the interval between " -"checks. Waiting before check to allow agents to send a heartbeat in case " -"there was a clock adjustment." -msgstr "" - -#: neutron/db/l3_agentschedulers_db.py:127 -#, python-format -msgid "" -"Rescheduling router %(router)s from agent %(agent)s because the agent did " -"not report to the server in the last %(dead_time)s seconds." -msgstr "" - -#: neutron/db/l3_hamode_db.py:404 -#, python-format -msgid "The router %(router_id)s is bound multiple times on the agent %(host)s" -msgstr "" - -#: neutron/openstack/common/service.py:364 -#, python-format -msgid "pid %d not in child list" -msgstr "pid %d non incluso nell'elenco child" - -#: neutron/plugins/ml2/drivers/type_tunnel.py:143 -#, python-format -msgid "%(type)s tunnel %(id)s not found" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_sync.py:68 -#, python-format -msgid "Create network postcommit failed for network %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_sync.py:78 -#, python-format -msgid "Create subnet postcommit failed for subnet %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_sync.py:91 -#, python-format -msgid "Create port postcommit failed for port %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_sync.py:110 -#, python-format -msgid "Add interface postcommit failed for port %s" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:299 -#, python-format -msgid "Subnet %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:317 -#, python-format -msgid "Router %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:329 -#, python-format -msgid "" -"Route with destination %(dest)s and nexthop %(hop)s not found in neutron for " -"sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:343 -#, python-format -msgid "Security group %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:354 -#, python-format -msgid "Security group rule %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:364 -#, python-format -msgid "Floating ip %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:376 -#, python-format -msgid "IP allocation for floating ip %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:387 -#, python-format -msgid "Net-partition %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:397 -#, python-format -msgid "VM port %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:290 -#, python-format -msgid "Unable to create tunnel port. Invalid remote IP: %s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:713 -#, python-format -msgid "" -"VIF port: %s has no ofport configured, and might not be able to transmit" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:820 -#, python-format -msgid "Device %s not defined on plugin" -msgstr "" diff --git a/neutron/locale/ja/LC_MESSAGES/neutron-log-error.po b/neutron/locale/ja/LC_MESSAGES/neutron-log-error.po deleted file mode 100644 index b663457d8e8..00000000000 --- a/neutron/locale/ja/LC_MESSAGES/neutron-log-error.po +++ /dev/null @@ -1,273 +0,0 @@ -# Translations template for neutron. -# Copyright (C) 2014 ORGANIZATION -# This file is distributed under the same license as the neutron project. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Neutron\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-29 06:04+0000\n" -"PO-Revision-Date: 2014-06-30 20:07+0000\n" -"Last-Translator: openstackjenkins \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/neutron/" -"language/ja/)\n" -"Language: ja\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -#: neutron/policy.py:119 -#, python-format -msgid "" -"Backward compatibility unavailable for deprecated policy %s. The policy will " -"not be enforced" -msgstr "" - -#: neutron/policy.py:311 -#, python-format -msgid "Policy check error while calling %s!" -msgstr "" - -#: neutron/agent/l3_ha_agent.py:136 -#, python-format -msgid "Unable to process HA router %s without ha port" -msgstr "" - -#: neutron/agent/linux/external_process.py:229 -#, python-format -msgid "" -"%(service)s for %(resource_type)s with uuid %(uuid)s not found. The process " -"should not have died" -msgstr "" - -#: neutron/agent/linux/external_process.py:249 -#, python-format -msgid "respawning %(service)s for uuid %(uuid)s" -msgstr "" - -#: neutron/agent/linux/external_process.py:255 -msgid "Exiting agent as programmed in check_child_processes_actions" -msgstr "" - -#: neutron/agent/linux/interface.py:154 -#, python-format -msgid "Failed deleting ingress connection state of floatingip %s" -msgstr "" - -#: neutron/agent/linux/interface.py:163 -#, python-format -msgid "Failed deleting egress connection state of floatingip %s" -msgstr "" - -#: neutron/cmd/sanity_check.py:58 -msgid "" -"Nova notifications are enabled, but novaclient is not installed. Either " -"disable nova notifications or install python-novaclient." -msgstr "" - -#: neutron/openstack/common/excutils.py:76 -#, python-format -msgid "Original exception being dropped: %s" -msgstr "除去される元の例外: %s" - -#: neutron/openstack/common/excutils.py:105 -#, python-format -msgid "Unexpected exception occurred %d time(s)... retrying." -msgstr "予期せぬ例外が、%d回()発生しました。再試行中。" - -#: neutron/openstack/common/periodic_task.py:202 -#, python-format -msgid "Error during %(full_task_name)s: %(e)s" -msgstr "%(full_task_name)s 中のエラー: %(e)s" - -#: neutron/openstack/common/service.py:188 -msgid "Exception during rpc cleanup." -msgstr "RPCクリーンアップ中に例外が発生" - -#: neutron/openstack/common/service.py:277 -msgid "Unhandled exception" -msgstr "未処理例外" - -#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:279 -#, python-format -msgid "Unable to delete port '%(pname)s' on switch. Exception: %(exp)s" -msgstr "" - -#: neutron/plugins/ml2/drivers/type_gre.py:86 -#, python-format -msgid "Skipping unreasonable gre ID range %(tun_min)s:%(tun_max)s" -msgstr "" - -#: neutron/plugins/ml2/drivers/type_vxlan.py:92 -#, python-format -msgid "Skipping unreasonable VXLAN VNI range %(tun_min)s:%(tun_max)s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:110 -msgid "APIC service agent: failed in reporting state" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:205 -#, python-format -msgid "No such interface (ignored): %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:255 -msgid "APIC service agent: exception in LLDP parsing" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:310 -#, python-format -msgid "APIC service agent: can not get MACaddr for %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:326 -msgid "APIC host agent: failed in reporting state" -msgstr "" - -#: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:386 -msgid "Error in agent event loop" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:55 -#, python-format -msgid "Cannot complete the sync between Neutron and VSD because of error:%s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:102 -msgid "Agent terminated!: Failed to get a datapath." -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:121 -msgid "Agent terminated" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:158 -msgid "Agent failed to create agent config map" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:283 -msgid "Failed reporting state!" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:449 -#, python-format -msgid "No local VLAN available for net-id=%s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:464 -#, python-format -msgid "" -"Cannot provision %(network_type)s network for net-id=%(net_uuid)s - " -"tunneling disabled" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:475 -#, python-format -msgid "" -"Cannot provision %(network_type)s network for net-id=%(net_uuid)s - no " -"bridge for physical_network %(physical_network)s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:485 -#, python-format -msgid "" -"Cannot provision unknown network type %(network_type)s for net-id=" -"%(net_uuid)s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:523 -#, python-format -msgid "" -"Cannot reclaim unknown network type %(network_type)s for net-id=%(net_uuid)s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:657 -#, python-format -msgid "" -"Bridge %(bridge)s for physical network %(physical_network)s does not exist. " -"Agent terminated!" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:735 -msgid "ofport should have a value that can be interpreted as an integer" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:738 -#, python-format -msgid "Failed to set-up %(type)s tunnel port to %(ip)s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:916 -msgid "Error while synchronizing tunnels" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:956 -msgid "Error while processing VIF ports" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:2099 -#, python-format -msgid "" -"Rolling back database changes for gateway device %s because of an error in " -"the NSX backend" -msgstr "" - -#: neutron/scheduler/l3_agent_scheduler.py:281 -#, python-format -msgid "Not enough candidates, a HA router needs at least %s agents" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:62 -#, python-format -msgid "Config file parse error: %s" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:76 -#, python-format -msgid "Ignoring Cisco CSR configuration entry - router IP %s is not valid" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:89 -#, python-format -msgid "Ignoring Cisco CSR for router %(router)s - missing %(field)s setting" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:97 -#, python-format -msgid "" -"Ignoring Cisco CSR for router %s - timeout is not a floating point number" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:113 -#, python-format -msgid "Ignoring Cisco CSR for router %s - local tunnel is not an IP address" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:119 -#, python-format -msgid "Malformed interface name for Cisco CSR router entry - %s" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:155 -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:202 -msgid "No routers found in INI file!" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:174 -#, python-format -msgid "Unable to lookup router ID based on router's public IP (%s) in INI file" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:177 -#, python-format -msgid "No matching routers on host %s" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:211 -#, python-format -msgid "Unable to find host for router %s" -msgstr "" diff --git a/neutron/locale/ja/LC_MESSAGES/neutron-log-info.po b/neutron/locale/ja/LC_MESSAGES/neutron-log-info.po index 783b1d275da..425a7815f4f 100644 --- a/neutron/locale/ja/LC_MESSAGES/neutron-log-info.po +++ b/neutron/locale/ja/LC_MESSAGES/neutron-log-info.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Neutron\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-22 06:06+0000\n" +"POT-Creation-Date: 2014-10-08 06:09+0000\n" "PO-Revision-Date: 2014-07-18 20:49+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: Japanese (http://www.transifex.com/projects/p/neutron/" @@ -19,12 +19,17 @@ msgstr "" "Generated-By: Babel 1.3\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: neutron/policy.py:106 +#: neutron/policy.py:110 #, python-format msgid "" "Inserting policy:%(new_policy)s in place of deprecated policy:%(old_policy)s" msgstr "" +#: neutron/agent/linux/ovs_lib.py:422 +#, python-format +msgid "Port %(port_id)s not present in bridge %(br_name)s" +msgstr "" + #: neutron/common/ipv6_utils.py:62 msgid "IPv6 is not enabled on this system." msgstr "" diff --git a/neutron/locale/ja/LC_MESSAGES/neutron-log-warning.po b/neutron/locale/ja/LC_MESSAGES/neutron-log-warning.po deleted file mode 100644 index 4feb7d81376..00000000000 --- a/neutron/locale/ja/LC_MESSAGES/neutron-log-warning.po +++ /dev/null @@ -1,156 +0,0 @@ -# Translations template for neutron. -# Copyright (C) 2014 ORGANIZATION -# This file is distributed under the same license as the neutron project. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Neutron\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-14 06:11+0000\n" -"PO-Revision-Date: 2014-06-30 19:27+0000\n" -"Last-Translator: openstackjenkins \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/neutron/" -"language/ja/)\n" -"Language: ja\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -#: neutron/policy.py:94 -#, python-format -msgid "" -"Found deprecated policy rule:%s. Please consider upgrading your policy " -"configuration file" -msgstr "" - -#: neutron/policy.py:137 -#, python-format -msgid "Unable to find data type descriptor for attribute %s" -msgstr "" - -#: neutron/agent/securitygroups_rpc.py:183 -msgid "" -"security_group_info_for_devices rpc call not supported by the server, " -"falling back to old security_group_rules_for_devices which scales worse." -msgstr "" - -#: neutron/agent/linux/keepalived.py:358 -msgid "" -"A previous instance of keepalived seems to be dead, unable to restart it, a " -"new instance will be spawned" -msgstr "" - -#: neutron/db/l3_agentschedulers_db.py:105 -msgid "" -"Time since last L3 agent reschedule check has exceeded the interval between " -"checks. Waiting before check to allow agents to send a heartbeat in case " -"there was a clock adjustment." -msgstr "" - -#: neutron/db/l3_agentschedulers_db.py:127 -#, python-format -msgid "" -"Rescheduling router %(router)s from agent %(agent)s because the agent did " -"not report to the server in the last %(dead_time)s seconds." -msgstr "" - -#: neutron/db/l3_hamode_db.py:404 -#, python-format -msgid "The router %(router_id)s is bound multiple times on the agent %(host)s" -msgstr "" - -#: neutron/openstack/common/service.py:364 -#, python-format -msgid "pid %d not in child list" -msgstr "pid %d は子リストにありません" - -#: neutron/plugins/ml2/drivers/type_tunnel.py:143 -#, python-format -msgid "%(type)s tunnel %(id)s not found" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_sync.py:68 -#, python-format -msgid "Create network postcommit failed for network %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_sync.py:78 -#, python-format -msgid "Create subnet postcommit failed for subnet %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_sync.py:91 -#, python-format -msgid "Create port postcommit failed for port %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_sync.py:110 -#, python-format -msgid "Add interface postcommit failed for port %s" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:299 -#, python-format -msgid "Subnet %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:317 -#, python-format -msgid "Router %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:329 -#, python-format -msgid "" -"Route with destination %(dest)s and nexthop %(hop)s not found in neutron for " -"sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:343 -#, python-format -msgid "Security group %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:354 -#, python-format -msgid "Security group rule %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:364 -#, python-format -msgid "Floating ip %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:376 -#, python-format -msgid "IP allocation for floating ip %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:387 -#, python-format -msgid "Net-partition %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:397 -#, python-format -msgid "VM port %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:290 -#, python-format -msgid "Unable to create tunnel port. Invalid remote IP: %s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:713 -#, python-format -msgid "" -"VIF port: %s has no ofport configured, and might not be able to transmit" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:820 -#, python-format -msgid "Device %s not defined on plugin" -msgstr "" diff --git a/neutron/locale/ko_KR/LC_MESSAGES/neutron-log-error.po b/neutron/locale/ko_KR/LC_MESSAGES/neutron-log-error.po deleted file mode 100644 index 709138e6f40..00000000000 --- a/neutron/locale/ko_KR/LC_MESSAGES/neutron-log-error.po +++ /dev/null @@ -1,273 +0,0 @@ -# Translations template for neutron. -# Copyright (C) 2014 ORGANIZATION -# This file is distributed under the same license as the neutron project. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Neutron\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-29 06:04+0000\n" -"PO-Revision-Date: 2014-06-30 20:07+0000\n" -"Last-Translator: openstackjenkins \n" -"Language-Team: Korean (Korea) (http://www.transifex.com/projects/p/neutron/" -"language/ko_KR/)\n" -"Language: ko_KR\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -#: neutron/policy.py:119 -#, python-format -msgid "" -"Backward compatibility unavailable for deprecated policy %s. The policy will " -"not be enforced" -msgstr "" - -#: neutron/policy.py:311 -#, python-format -msgid "Policy check error while calling %s!" -msgstr "" - -#: neutron/agent/l3_ha_agent.py:136 -#, python-format -msgid "Unable to process HA router %s without ha port" -msgstr "" - -#: neutron/agent/linux/external_process.py:229 -#, python-format -msgid "" -"%(service)s for %(resource_type)s with uuid %(uuid)s not found. The process " -"should not have died" -msgstr "" - -#: neutron/agent/linux/external_process.py:249 -#, python-format -msgid "respawning %(service)s for uuid %(uuid)s" -msgstr "" - -#: neutron/agent/linux/external_process.py:255 -msgid "Exiting agent as programmed in check_child_processes_actions" -msgstr "" - -#: neutron/agent/linux/interface.py:154 -#, python-format -msgid "Failed deleting ingress connection state of floatingip %s" -msgstr "" - -#: neutron/agent/linux/interface.py:163 -#, python-format -msgid "Failed deleting egress connection state of floatingip %s" -msgstr "" - -#: neutron/cmd/sanity_check.py:58 -msgid "" -"Nova notifications are enabled, but novaclient is not installed. Either " -"disable nova notifications or install python-novaclient." -msgstr "" - -#: neutron/openstack/common/excutils.py:76 -#, python-format -msgid "Original exception being dropped: %s" -msgstr "기존 예외가 삭제됨: %s" - -#: neutron/openstack/common/excutils.py:105 -#, python-format -msgid "Unexpected exception occurred %d time(s)... retrying." -msgstr "예기치 않은 예외 %d 번 발생하였습니다... 다시 시도중." - -#: neutron/openstack/common/periodic_task.py:202 -#, python-format -msgid "Error during %(full_task_name)s: %(e)s" -msgstr "%(full_task_name)s 중 오류: %(e)s" - -#: neutron/openstack/common/service.py:188 -msgid "Exception during rpc cleanup." -msgstr "" - -#: neutron/openstack/common/service.py:277 -msgid "Unhandled exception" -msgstr "처리되지 않은 예외" - -#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:279 -#, python-format -msgid "Unable to delete port '%(pname)s' on switch. Exception: %(exp)s" -msgstr "" - -#: neutron/plugins/ml2/drivers/type_gre.py:86 -#, python-format -msgid "Skipping unreasonable gre ID range %(tun_min)s:%(tun_max)s" -msgstr "" - -#: neutron/plugins/ml2/drivers/type_vxlan.py:92 -#, python-format -msgid "Skipping unreasonable VXLAN VNI range %(tun_min)s:%(tun_max)s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:110 -msgid "APIC service agent: failed in reporting state" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:205 -#, python-format -msgid "No such interface (ignored): %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:255 -msgid "APIC service agent: exception in LLDP parsing" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:310 -#, python-format -msgid "APIC service agent: can not get MACaddr for %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:326 -msgid "APIC host agent: failed in reporting state" -msgstr "" - -#: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:386 -msgid "Error in agent event loop" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:55 -#, python-format -msgid "Cannot complete the sync between Neutron and VSD because of error:%s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:102 -msgid "Agent terminated!: Failed to get a datapath." -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:121 -msgid "Agent terminated" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:158 -msgid "Agent failed to create agent config map" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:283 -msgid "Failed reporting state!" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:449 -#, python-format -msgid "No local VLAN available for net-id=%s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:464 -#, python-format -msgid "" -"Cannot provision %(network_type)s network for net-id=%(net_uuid)s - " -"tunneling disabled" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:475 -#, python-format -msgid "" -"Cannot provision %(network_type)s network for net-id=%(net_uuid)s - no " -"bridge for physical_network %(physical_network)s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:485 -#, python-format -msgid "" -"Cannot provision unknown network type %(network_type)s for net-id=" -"%(net_uuid)s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:523 -#, python-format -msgid "" -"Cannot reclaim unknown network type %(network_type)s for net-id=%(net_uuid)s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:657 -#, python-format -msgid "" -"Bridge %(bridge)s for physical network %(physical_network)s does not exist. " -"Agent terminated!" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:735 -msgid "ofport should have a value that can be interpreted as an integer" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:738 -#, python-format -msgid "Failed to set-up %(type)s tunnel port to %(ip)s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:916 -msgid "Error while synchronizing tunnels" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:956 -msgid "Error while processing VIF ports" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:2099 -#, python-format -msgid "" -"Rolling back database changes for gateway device %s because of an error in " -"the NSX backend" -msgstr "" - -#: neutron/scheduler/l3_agent_scheduler.py:281 -#, python-format -msgid "Not enough candidates, a HA router needs at least %s agents" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:62 -#, python-format -msgid "Config file parse error: %s" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:76 -#, python-format -msgid "Ignoring Cisco CSR configuration entry - router IP %s is not valid" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:89 -#, python-format -msgid "Ignoring Cisco CSR for router %(router)s - missing %(field)s setting" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:97 -#, python-format -msgid "" -"Ignoring Cisco CSR for router %s - timeout is not a floating point number" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:113 -#, python-format -msgid "Ignoring Cisco CSR for router %s - local tunnel is not an IP address" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:119 -#, python-format -msgid "Malformed interface name for Cisco CSR router entry - %s" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:155 -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:202 -msgid "No routers found in INI file!" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:174 -#, python-format -msgid "Unable to lookup router ID based on router's public IP (%s) in INI file" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:177 -#, python-format -msgid "No matching routers on host %s" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:211 -#, python-format -msgid "Unable to find host for router %s" -msgstr "" diff --git a/neutron/locale/ko_KR/LC_MESSAGES/neutron-log-info.po b/neutron/locale/ko_KR/LC_MESSAGES/neutron-log-info.po index 7bffe5b962e..08451b31541 100644 --- a/neutron/locale/ko_KR/LC_MESSAGES/neutron-log-info.po +++ b/neutron/locale/ko_KR/LC_MESSAGES/neutron-log-info.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Neutron\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-22 06:06+0000\n" +"POT-Creation-Date: 2014-10-08 06:09+0000\n" "PO-Revision-Date: 2014-07-18 20:49+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: Korean (Korea) (http://www.transifex.com/projects/p/neutron/" @@ -19,12 +19,17 @@ msgstr "" "Generated-By: Babel 1.3\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: neutron/policy.py:106 +#: neutron/policy.py:110 #, python-format msgid "" "Inserting policy:%(new_policy)s in place of deprecated policy:%(old_policy)s" msgstr "" +#: neutron/agent/linux/ovs_lib.py:422 +#, python-format +msgid "Port %(port_id)s not present in bridge %(br_name)s" +msgstr "" + #: neutron/common/ipv6_utils.py:62 msgid "IPv6 is not enabled on this system." msgstr "" diff --git a/neutron/locale/ko_KR/LC_MESSAGES/neutron-log-warning.po b/neutron/locale/ko_KR/LC_MESSAGES/neutron-log-warning.po deleted file mode 100644 index f1ee7d0ff95..00000000000 --- a/neutron/locale/ko_KR/LC_MESSAGES/neutron-log-warning.po +++ /dev/null @@ -1,156 +0,0 @@ -# Translations template for neutron. -# Copyright (C) 2014 ORGANIZATION -# This file is distributed under the same license as the neutron project. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Neutron\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-14 06:11+0000\n" -"PO-Revision-Date: 2014-06-30 19:27+0000\n" -"Last-Translator: openstackjenkins \n" -"Language-Team: Korean (Korea) (http://www.transifex.com/projects/p/neutron/" -"language/ko_KR/)\n" -"Language: ko_KR\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -#: neutron/policy.py:94 -#, python-format -msgid "" -"Found deprecated policy rule:%s. Please consider upgrading your policy " -"configuration file" -msgstr "" - -#: neutron/policy.py:137 -#, python-format -msgid "Unable to find data type descriptor for attribute %s" -msgstr "" - -#: neutron/agent/securitygroups_rpc.py:183 -msgid "" -"security_group_info_for_devices rpc call not supported by the server, " -"falling back to old security_group_rules_for_devices which scales worse." -msgstr "" - -#: neutron/agent/linux/keepalived.py:358 -msgid "" -"A previous instance of keepalived seems to be dead, unable to restart it, a " -"new instance will be spawned" -msgstr "" - -#: neutron/db/l3_agentschedulers_db.py:105 -msgid "" -"Time since last L3 agent reschedule check has exceeded the interval between " -"checks. Waiting before check to allow agents to send a heartbeat in case " -"there was a clock adjustment." -msgstr "" - -#: neutron/db/l3_agentschedulers_db.py:127 -#, python-format -msgid "" -"Rescheduling router %(router)s from agent %(agent)s because the agent did " -"not report to the server in the last %(dead_time)s seconds." -msgstr "" - -#: neutron/db/l3_hamode_db.py:404 -#, python-format -msgid "The router %(router_id)s is bound multiple times on the agent %(host)s" -msgstr "" - -#: neutron/openstack/common/service.py:364 -#, python-format -msgid "pid %d not in child list" -msgstr "pid %d이(가) 하위 목록에 없음" - -#: neutron/plugins/ml2/drivers/type_tunnel.py:143 -#, python-format -msgid "%(type)s tunnel %(id)s not found" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_sync.py:68 -#, python-format -msgid "Create network postcommit failed for network %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_sync.py:78 -#, python-format -msgid "Create subnet postcommit failed for subnet %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_sync.py:91 -#, python-format -msgid "Create port postcommit failed for port %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_sync.py:110 -#, python-format -msgid "Add interface postcommit failed for port %s" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:299 -#, python-format -msgid "Subnet %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:317 -#, python-format -msgid "Router %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:329 -#, python-format -msgid "" -"Route with destination %(dest)s and nexthop %(hop)s not found in neutron for " -"sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:343 -#, python-format -msgid "Security group %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:354 -#, python-format -msgid "Security group rule %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:364 -#, python-format -msgid "Floating ip %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:376 -#, python-format -msgid "IP allocation for floating ip %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:387 -#, python-format -msgid "Net-partition %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:397 -#, python-format -msgid "VM port %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:290 -#, python-format -msgid "Unable to create tunnel port. Invalid remote IP: %s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:713 -#, python-format -msgid "" -"VIF port: %s has no ofport configured, and might not be able to transmit" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:820 -#, python-format -msgid "Device %s not defined on plugin" -msgstr "" diff --git a/neutron/locale/neutron-log-info.pot b/neutron/locale/neutron-log-info.pot index ced85f81602..935e71d39bf 100644 --- a/neutron/locale/neutron-log-info.pot +++ b/neutron/locale/neutron-log-info.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: neutron 2014.2.dev190.ga76af4a\n" +"Project-Id-Version: neutron 2015.1.dev36.g63e2efb\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-22 06:06+0000\n" +"POT-Creation-Date: 2014-10-08 06:09+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,13 +17,18 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" -#: neutron/policy.py:106 +#: neutron/policy.py:110 #, python-format msgid "" "Inserting policy:%(new_policy)s in place of deprecated " "policy:%(old_policy)s" msgstr "" +#: neutron/agent/linux/ovs_lib.py:422 +#, python-format +msgid "Port %(port_id)s not present in bridge %(br_name)s" +msgstr "" + #: neutron/common/ipv6_utils.py:62 msgid "IPv6 is not enabled on this system." msgstr "" diff --git a/neutron/locale/neutron-log-warning.pot b/neutron/locale/neutron-log-warning.pot index 24abf9670b7..4854c4c3cef 100644 --- a/neutron/locale/neutron-log-warning.pot +++ b/neutron/locale/neutron-log-warning.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: neutron 2014.2.dev114.gf095f99\n" +"Project-Id-Version: neutron 2015.1.dev36.g63e2efb\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-14 06:11+0000\n" +"POT-Creation-Date: 2014-10-08 06:09+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,30 +17,56 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" -#: neutron/policy.py:94 +#: neutron/policy.py:98 #, python-format msgid "" "Found deprecated policy rule:%s. Please consider upgrading your policy " "configuration file" msgstr "" -#: neutron/policy.py:137 +#: neutron/policy.py:155 #, python-format msgid "Unable to find data type descriptor for attribute %s" msgstr "" +#: neutron/agent/l3_agent.py:545 +#, python-format +msgid "" +"l3-agent cannot check service plugins enabled at the neutron server when " +"startup due to RPC error. It happens when the server does not support " +"this RPC API. If the error is UnsupportedVersion you can ignore this " +"warning. Detail message: %s" +msgstr "" + +#: neutron/agent/l3_agent.py:557 +#, python-format +msgid "" +"l3-agent cannot check service plugins enabled on the neutron server. " +"Retrying. Detail message: %s" +msgstr "" + #: neutron/agent/securitygroups_rpc.py:183 msgid "" "security_group_info_for_devices rpc call not supported by the server, " "falling back to old security_group_rules_for_devices which scales worse." msgstr "" -#: neutron/agent/linux/keepalived.py:358 +#: neutron/agent/linux/keepalived.py:361 msgid "" "A previous instance of keepalived seems to be dead, unable to restart it," " a new instance will be spawned" msgstr "" +#: neutron/agent/linux/ovs_lib.py:413 +#, python-format +msgid "ofport: %(ofport)s for VIF: %(vif)s is not a positive integer" +msgstr "" + +#: neutron/agent/linux/ovs_lib.py:425 +#, python-format +msgid "Unable to parse interface details. Exception: %s" +msgstr "" + #: neutron/db/l3_agentschedulers_db.py:105 msgid "" "Time since last L3 agent reschedule check has exceeded the interval " @@ -55,7 +81,7 @@ msgid "" " not report to the server in the last %(dead_time)s seconds." msgstr "" -#: neutron/db/l3_hamode_db.py:404 +#: neutron/db/l3_hamode_db.py:405 #, python-format msgid "The router %(router_id)s is bound multiple times on the agent %(host)s" msgstr "" @@ -70,69 +96,69 @@ msgstr "" msgid "%(type)s tunnel %(id)s not found" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_sync.py:68 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_sync.py:66 #, python-format msgid "Create network postcommit failed for network %s" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_sync.py:78 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_sync.py:76 #, python-format msgid "Create subnet postcommit failed for subnet %s" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_sync.py:91 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_sync.py:89 #, python-format msgid "Create port postcommit failed for port %s" msgstr "" -#: neutron/plugins/ml2/drivers/cisco/apic/apic_sync.py:110 +#: neutron/plugins/ml2/drivers/cisco/apic/apic_sync.py:108 #, python-format msgid "Add interface postcommit failed for port %s" msgstr "" -#: neutron/plugins/nuage/syncmanager.py:299 +#: neutron/plugins/nuage/syncmanager.py:298 #, python-format msgid "Subnet %s not found in neutron for sync" msgstr "" -#: neutron/plugins/nuage/syncmanager.py:317 +#: neutron/plugins/nuage/syncmanager.py:316 #, python-format msgid "Router %s not found in neutron for sync" msgstr "" -#: neutron/plugins/nuage/syncmanager.py:329 +#: neutron/plugins/nuage/syncmanager.py:328 #, python-format msgid "" "Route with destination %(dest)s and nexthop %(hop)s not found in neutron " "for sync" msgstr "" -#: neutron/plugins/nuage/syncmanager.py:343 +#: neutron/plugins/nuage/syncmanager.py:342 #, python-format msgid "Security group %s not found in neutron for sync" msgstr "" -#: neutron/plugins/nuage/syncmanager.py:354 +#: neutron/plugins/nuage/syncmanager.py:353 #, python-format msgid "Security group rule %s not found in neutron for sync" msgstr "" -#: neutron/plugins/nuage/syncmanager.py:364 +#: neutron/plugins/nuage/syncmanager.py:363 #, python-format msgid "Floating ip %s not found in neutron for sync" msgstr "" -#: neutron/plugins/nuage/syncmanager.py:376 +#: neutron/plugins/nuage/syncmanager.py:375 #, python-format msgid "IP allocation for floating ip %s not found in neutron for sync" msgstr "" -#: neutron/plugins/nuage/syncmanager.py:387 +#: neutron/plugins/nuage/syncmanager.py:386 #, python-format msgid "Net-partition %s not found in neutron for sync" msgstr "" -#: neutron/plugins/nuage/syncmanager.py:397 +#: neutron/plugins/nuage/syncmanager.py:396 #, python-format msgid "VM port %s not found in neutron for sync" msgstr "" diff --git a/neutron/locale/neutron.pot b/neutron/locale/neutron.pot index 6d3cb95c413..a8824f072da 100644 --- a/neutron/locale/neutron.pot +++ b/neutron/locale/neutron.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: neutron 2014.2.dev251.gdd238d0\n" +"Project-Id-Version: neutron 2015.1.dev36.g63e2efb\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-30 06:48+0000\n" +"POT-Creation-Date: 2014-10-08 06:09+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -408,7 +408,7 @@ msgstr "" msgid "Number of threads to use during sync process." msgstr "" -#: neutron/agent/dhcp_agent.py:65 neutron/agent/l3_agent.py:496 +#: neutron/agent/dhcp_agent.py:65 neutron/agent/l3_agent.py:501 #: neutron/agent/metadata/namespace_proxy.py:165 msgid "Location of Metadata Proxy UNIX domain socket" msgstr "" @@ -488,7 +488,7 @@ msgid "" "port %(port_id)s, for router %(router_id)s will be considered" msgstr "" -#: neutron/agent/dhcp_agent.py:582 neutron/agent/l3_agent.py:1987 +#: neutron/agent/dhcp_agent.py:582 neutron/agent/l3_agent.py:2023 #: neutron/agent/metadata/agent.py:354 #: neutron/plugins/cisco/cfg_agent/cfg_agent.py:326 #: neutron/services/metering/agents/metering_agent.py:270 @@ -497,7 +497,7 @@ msgid "" " will be disabled." msgstr "" -#: neutron/agent/dhcp_agent.py:588 neutron/agent/l3_agent.py:1992 +#: neutron/agent/dhcp_agent.py:588 neutron/agent/l3_agent.py:2028 #: neutron/agent/metadata/agent.py:359 #: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:108 #: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:793 @@ -515,17 +515,17 @@ msgstr "" msgid "Agent updated: %(payload)s" msgstr "" -#: neutron/agent/dhcp_agent.py:597 neutron/agent/l3_agent.py:1997 +#: neutron/agent/dhcp_agent.py:597 neutron/agent/l3_agent.py:2033 #: neutron/services/metering/agents/metering_agent.py:278 #, python-format msgid "agent_updated by server side %s!" msgstr "" -#: neutron/agent/l3_agent.py:214 +#: neutron/agent/l3_agent.py:216 msgid "Cannot allocate link local address" msgstr "" -#: neutron/agent/l3_agent.py:457 +#: neutron/agent/l3_agent.py:462 msgid "" "The working mode for the agent. Allowed modes are: 'legacy' - this " "preserves the existing behavior where the L3 agent is deployed on a " @@ -537,216 +537,207 @@ msgid "" "centralized node (or in single-host deployments, e.g. devstack)" msgstr "" -#: neutron/agent/l3_agent.py:470 neutron/debug/debug_agent.py:41 +#: neutron/agent/l3_agent.py:475 neutron/debug/debug_agent.py:41 msgid "Name of bridge used for external network traffic." msgstr "" -#: neutron/agent/l3_agent.py:474 +#: neutron/agent/l3_agent.py:479 msgid "TCP Port used by Neutron metadata namespace proxy." msgstr "" -#: neutron/agent/l3_agent.py:478 +#: neutron/agent/l3_agent.py:483 msgid "" "Send this many gratuitous ARPs for HA setup, if less than or equal to 0, " "the feature is disabled" msgstr "" -#: neutron/agent/l3_agent.py:481 +#: neutron/agent/l3_agent.py:486 msgid "" "If namespaces is disabled, the l3 agent can only configure a router that " "has the matching router ID." msgstr "" -#: neutron/agent/l3_agent.py:486 +#: neutron/agent/l3_agent.py:491 msgid "Agent should implement routers with no gateway" msgstr "" -#: neutron/agent/l3_agent.py:488 +#: neutron/agent/l3_agent.py:493 msgid "UUID of external network for routers implemented by the agents." msgstr "" -#: neutron/agent/l3_agent.py:491 +#: neutron/agent/l3_agent.py:496 msgid "Allow running metadata proxy." msgstr "" -#: neutron/agent/l3_agent.py:493 +#: neutron/agent/l3_agent.py:498 msgid "Delete namespace after removing a router." msgstr "" -#: neutron/agent/l3_agent.py:516 +#: neutron/agent/l3_agent.py:521 #, python-format msgid "Error importing interface driver '%s'" msgstr "" -#: neutron/agent/l3_agent.py:533 -#, python-format -msgid "" -"l3-agent cannot check service plugins enabled at the neutron server when " -"startup due to RPC error. It happens when the server does not support " -"this RPC API. If the error is UnsupportedVersion you can ignore this " -"warning. Detail message: %s" -msgstr "" - -#: neutron/agent/l3_agent.py:564 neutron/agent/linux/dhcp.py:785 +#: neutron/agent/l3_agent.py:595 neutron/agent/linux/dhcp.py:785 #: neutron/services/metering/drivers/iptables/iptables_driver.py:90 msgid "An interface driver must be specified" msgstr "" -#: neutron/agent/l3_agent.py:569 +#: neutron/agent/l3_agent.py:600 msgid "Router id is required if not using namespaces." msgstr "" -#: neutron/agent/l3_agent.py:587 +#: neutron/agent/l3_agent.py:618 msgid "RuntimeError in obtaining router list for namespace cleanup." msgstr "" -#: neutron/agent/l3_agent.py:617 +#: neutron/agent/l3_agent.py:655 #, python-format msgid "Failed to destroy stale router namespace %s" msgstr "" -#: neutron/agent/l3_agent.py:635 neutron/agent/linux/dhcp.py:235 +#: neutron/agent/l3_agent.py:673 neutron/agent/linux/dhcp.py:235 #, python-format msgid "Failed trying to delete namespace: %s" msgstr "" -#: neutron/agent/l3_agent.py:723 +#: neutron/agent/l3_agent.py:761 msgid "" "The 'gateway_external_network_id' option must be configured for this " "agent as Neutron has more than one external network." msgstr "" -#: neutron/agent/l3_agent.py:755 +#: neutron/agent/l3_agent.py:791 #, python-format msgid "Info for router %s were not found. Skipping router removal" msgstr "" -#: neutron/agent/l3_agent.py:830 +#: neutron/agent/l3_agent.py:866 #: neutron/plugins/cisco/cfg_agent/service_helpers/routing_svc_helper.py:633 #: neutron/services/firewall/agents/varmour/varmour_router.py:100 #, python-format msgid "Router port %s has no IP address" msgstr "" -#: neutron/agent/l3_agent.py:832 neutron/db/l3_db.py:954 +#: neutron/agent/l3_agent.py:868 neutron/db/l3_db.py:958 #: neutron/plugins/cisco/cfg_agent/service_helpers/routing_svc_helper.py:635 #: neutron/services/firewall/agents/varmour/varmour_router.py:103 #, python-format msgid "Ignoring multiple IPs on router port %s" msgstr "" -#: neutron/agent/l3_agent.py:893 +#: neutron/agent/l3_agent.py:929 #, python-format msgid "Deleting stale internal router device: %s" msgstr "" -#: neutron/agent/l3_agent.py:930 +#: neutron/agent/l3_agent.py:966 #, python-format msgid "Deleting stale external router device: %s" msgstr "" -#: neutron/agent/l3_agent.py:1098 +#: neutron/agent/l3_agent.py:1134 #, python-format msgid "Unable to configure IP address for floating IP: %s" msgstr "" -#: neutron/agent/l3_agent.py:1181 +#: neutron/agent/l3_agent.py:1217 #, python-format msgid "Failed sending gratuitous ARP: %s" msgstr "" -#: neutron/agent/l3_agent.py:1243 +#: neutron/agent/l3_agent.py:1279 msgid "DVR: no map match_port found!" msgstr "" -#: neutron/agent/l3_agent.py:1447 +#: neutron/agent/l3_agent.py:1483 msgid "DVR: error adding redirection logic" msgstr "" -#: neutron/agent/l3_agent.py:1459 +#: neutron/agent/l3_agent.py:1495 msgid "DVR: removed snat failed" msgstr "" -#: neutron/agent/l3_agent.py:1560 +#: neutron/agent/l3_agent.py:1596 msgid "Missing subnet/agent_gateway_port" msgstr "" -#: neutron/agent/l3_agent.py:1681 +#: neutron/agent/l3_agent.py:1717 #, python-format msgid "Got router deleted notification for %s" msgstr "" -#: neutron/agent/l3_agent.py:1702 +#: neutron/agent/l3_agent.py:1738 msgid "DVR: Failed updating arp entry" msgstr "" -#: neutron/agent/l3_agent.py:1729 +#: neutron/agent/l3_agent.py:1765 #, python-format msgid "Got routers updated notification :%s" msgstr "" -#: neutron/agent/l3_agent.py:1739 +#: neutron/agent/l3_agent.py:1775 #, python-format msgid "Got router removed from agent :%r" msgstr "" -#: neutron/agent/l3_agent.py:1745 +#: neutron/agent/l3_agent.py:1781 #, python-format msgid "Got router added to agent :%r" msgstr "" -#: neutron/agent/l3_agent.py:1752 +#: neutron/agent/l3_agent.py:1788 #, python-format msgid "The external network bridge '%s' does not exist" msgstr "" -#: neutron/agent/l3_agent.py:1804 +#: neutron/agent/l3_agent.py:1840 #, python-format msgid "Failed to fetch router information for '%s'" msgstr "" -#: neutron/agent/l3_agent.py:1843 +#: neutron/agent/l3_agent.py:1879 #, python-format msgid "Starting _sync_routers_task - fullsync:%s" msgstr "" -#: neutron/agent/l3_agent.py:1863 +#: neutron/agent/l3_agent.py:1899 #, python-format msgid "Processing :%r" msgstr "" -#: neutron/agent/l3_agent.py:1871 +#: neutron/agent/l3_agent.py:1907 msgid "_sync_routers_task successfully completed" msgstr "" -#: neutron/agent/l3_agent.py:1873 +#: neutron/agent/l3_agent.py:1909 msgid "Failed synchronizing routers due to RPC error" msgstr "" -#: neutron/agent/l3_agent.py:1876 +#: neutron/agent/l3_agent.py:1912 #: neutron/services/metering/agents/metering_agent.py:59 msgid "Failed synchronizing routers" msgstr "" -#: neutron/agent/l3_agent.py:1899 +#: neutron/agent/l3_agent.py:1935 msgid "L3 agent started" msgstr "" -#: neutron/agent/l3_agent.py:1918 +#: neutron/agent/l3_agent.py:1954 #, python-format msgid "Added route entry is '%s'" msgstr "" -#: neutron/agent/l3_agent.py:1926 +#: neutron/agent/l3_agent.py:1962 #, python-format msgid "Removed route entry is '%s'" msgstr "" -#: neutron/agent/l3_agent.py:1960 +#: neutron/agent/l3_agent.py:1996 msgid "Report state task started" msgstr "" -#: neutron/agent/l3_agent.py:1984 +#: neutron/agent/l3_agent.py:2020 msgid "Report state task successfully completed" msgstr "" @@ -942,13 +933,17 @@ msgstr "" msgid "Allow overlapping IP." msgstr "" -#: neutron/agent/common/config.py:102 +#: neutron/agent/common/config.py:51 +msgid "Add comments to iptables rules." +msgstr "" + +#: neutron/agent/common/config.py:111 msgid "" "DEFAULT.root_helper is deprecated! Please move root_helper configuration " "to [AGENT] section." msgstr "" -#: neutron/agent/common/config.py:113 +#: neutron/agent/common/config.py:122 msgid "Top-level directory for maintaining dhcp state" msgstr "" @@ -1235,61 +1230,61 @@ msgstr "" msgid "Force ip_lib calls to use the root helper" msgstr "" -#: neutron/agent/linux/iptables_firewall.py:85 +#: neutron/agent/linux/iptables_firewall.py:87 #, python-format msgid "Preparing device (%s) filter" msgstr "" -#: neutron/agent/linux/iptables_firewall.py:93 +#: neutron/agent/linux/iptables_firewall.py:95 #, python-format msgid "Updating device (%s) filter" msgstr "" -#: neutron/agent/linux/iptables_firewall.py:95 +#: neutron/agent/linux/iptables_firewall.py:97 #, python-format msgid "Attempted to update port filter which is not filtered %s" msgstr "" -#: neutron/agent/linux/iptables_firewall.py:104 +#: neutron/agent/linux/iptables_firewall.py:106 #, python-format msgid "Removing device (%s) filter" msgstr "" -#: neutron/agent/linux/iptables_firewall.py:106 +#: neutron/agent/linux/iptables_firewall.py:108 #, python-format msgid "Attempted to remove port filter which is not filtered %r" msgstr "" -#: neutron/agent/linux/iptables_manager.py:156 +#: neutron/agent/linux/iptables_manager.py:167 #, python-format msgid "Attempted to remove chain %s which does not exist" msgstr "" -#: neutron/agent/linux/iptables_manager.py:198 +#: neutron/agent/linux/iptables_manager.py:210 #, python-format msgid "Unknown chain: %r" msgstr "" -#: neutron/agent/linux/iptables_manager.py:233 +#: neutron/agent/linux/iptables_manager.py:247 #, python-format msgid "" "Tried to remove rule that was not there: %(chain)r %(rule)r %(wrap)r " "%(top)r" msgstr "" -#: neutron/agent/linux/iptables_manager.py:388 +#: neutron/agent/linux/iptables_manager.py:404 #, python-format msgid "Got semaphore / lock \"%s\"" msgstr "" -#: neutron/agent/linux/iptables_manager.py:391 +#: neutron/agent/linux/iptables_manager.py:407 #, python-format msgid "Semaphore / lock released \"%s\"" msgstr "" -#: neutron/agent/linux/iptables_manager.py:442 -#: neutron/tests/unit/test_iptables_manager.py:751 -#: neutron/tests/unit/test_iptables_manager.py:785 +#: neutron/agent/linux/iptables_manager.py:458 +#: neutron/tests/unit/test_iptables_manager.py:858 +#: neutron/tests/unit/test_iptables_manager.py:892 #, python-format msgid "" "IPTablesManager.apply failed to apply the following set of iptables " @@ -1297,16 +1292,16 @@ msgid "" "%s" msgstr "" -#: neutron/agent/linux/iptables_manager.py:445 +#: neutron/agent/linux/iptables_manager.py:461 msgid "IPTablesManager.apply completed with success" msgstr "" -#: neutron/agent/linux/iptables_manager.py:455 +#: neutron/agent/linux/iptables_manager.py:471 #, python-format msgid "Unable to find table %s" msgstr "" -#: neutron/agent/linux/iptables_manager.py:659 +#: neutron/agent/linux/iptables_manager.py:675 #, python-format msgid "Attempted to get traffic counters of chain %s which does not exist" msgstr "" @@ -1330,48 +1325,33 @@ msgid "" "%(valid_auth_types)s" msgstr "" -#: neutron/agent/linux/ovs_lib.py:38 +#: neutron/agent/linux/ovs_lib.py:39 msgid "Timeout in seconds for ovs-vsctl commands" msgstr "" -#: neutron/agent/linux/ovs_lib.py:72 neutron/agent/linux/ovs_lib.py:170 -#: neutron/agent/linux/ovs_lib.py:290 +#: neutron/agent/linux/ovs_lib.py:73 neutron/agent/linux/ovs_lib.py:171 +#: neutron/agent/linux/ovs_lib.py:291 #: neutron/plugins/bigswitch/agent/restproxy_agent.py:54 #, python-format msgid "Unable to execute %(cmd)s. Exception: %(exception)s" msgstr "" -#: neutron/agent/linux/ovs_lib.py:241 +#: neutron/agent/linux/ovs_lib.py:242 msgid "" "Unable to create VXLAN tunnel port. Please ensure that an openvswitch " "version that supports VXLAN is installed." msgstr "" -#: neutron/agent/linux/ovs_lib.py:338 +#: neutron/agent/linux/ovs_lib.py:339 #, python-format msgid "Found not yet ready openvswitch port: %s" msgstr "" -#: neutron/agent/linux/ovs_lib.py:353 +#: neutron/agent/linux/ovs_lib.py:354 #, python-format msgid "Found failed openvswitch port: %s" msgstr "" -#: neutron/agent/linux/ovs_lib.py:408 -#, python-format -msgid "Port: %(port_name)s is on %(switch)s, not on %(br_name)s" -msgstr "" - -#: neutron/agent/linux/ovs_lib.py:416 -#, python-format -msgid "ofport: %(ofport)s for VIF: %(vif)s is not a positive integer" -msgstr "" - -#: neutron/agent/linux/ovs_lib.py:426 -#, python-format -msgid "Unable to parse interface details. Exception: %s" -msgstr "" - #: neutron/agent/linux/ovs_lib.py:444 #, python-format msgid "Unable to determine mac address for %s" @@ -2292,51 +2272,55 @@ msgstr "" msgid "The uuid of the admin nova tenant" msgstr "" -#: neutron/common/config.py:106 +#: neutron/common/config.py:105 +msgid "The name of the admin nova tenant" +msgstr "" + +#: neutron/common/config.py:108 msgid "Authorization URL for connecting to nova in admin context" msgstr "" -#: neutron/common/config.py:109 +#: neutron/common/config.py:111 msgid "CA file for novaclient to verify server certificates" msgstr "" -#: neutron/common/config.py:111 +#: neutron/common/config.py:113 msgid "If True, ignore any SSL validation issues" msgstr "" -#: neutron/common/config.py:113 +#: neutron/common/config.py:115 msgid "" "Name of nova region to use. Useful if keystone manages more than one " "region." msgstr "" -#: neutron/common/config.py:116 +#: neutron/common/config.py:118 msgid "" "Number of seconds between sending events to nova if there are any events " "to send." msgstr "" -#: neutron/common/config.py:123 +#: neutron/common/config.py:125 msgid "" "Where to store Neutron state files. This directory must be writable by " "the agent." msgstr "" -#: neutron/common/config.py:156 +#: neutron/common/config.py:158 #, python-format msgid "Base MAC: %s" msgstr "" -#: neutron/common/config.py:164 +#: neutron/common/config.py:166 msgid "Logging enabled!" msgstr "" -#: neutron/common/config.py:180 +#: neutron/common/config.py:182 #, python-format msgid "Config paste file: %s" msgstr "" -#: neutron/common/config.py:185 +#: neutron/common/config.py:187 #, python-format msgid "Unable to load %(app_name)s from configuration file %(config_path)s." msgstr "" @@ -2873,7 +2857,14 @@ msgstr "" msgid "Invalid route: %s" msgstr "" -#: neutron/db/db_base_plugin_v2.py:764 +#: neutron/db/db_base_plugin_v2.py:771 +#, python-format +msgid "" +"Invalid CIDR %s for IPv6 address mode. OpenStack uses the EUI-64 address " +"format, which requires the prefix to be /64." +msgstr "" + +#: neutron/db/db_base_plugin_v2.py:779 #, python-format msgid "" "ipv6_ra_mode set to '%(ra_mode)s' with ipv6_address_mode set to " @@ -2881,49 +2872,49 @@ msgid "" "the same value" msgstr "" -#: neutron/db/db_base_plugin_v2.py:772 +#: neutron/db/db_base_plugin_v2.py:787 msgid "" "ipv6_ra_mode or ipv6_address_mode cannot be set when enable_dhcp is set " "to False." msgstr "" -#: neutron/db/db_base_plugin_v2.py:778 +#: neutron/db/db_base_plugin_v2.py:793 msgid "Cannot disable enable_dhcp with ipv6 attributes set" msgstr "" -#: neutron/db/db_base_plugin_v2.py:870 +#: neutron/db/db_base_plugin_v2.py:885 #, python-format msgid "An exception occurred while creating the %(resource)s:%(item)s" msgstr "" -#: neutron/db/db_base_plugin_v2.py:967 +#: neutron/db/db_base_plugin_v2.py:982 #, python-format msgid "%(name)s '%(addr)s' does not match the ip_version '%(ip_version)s'" msgstr "" -#: neutron/db/db_base_plugin_v2.py:991 +#: neutron/db/db_base_plugin_v2.py:1006 msgid "Gateway is not valid on subnet" msgstr "" -#: neutron/db/db_base_plugin_v2.py:1011 neutron/db/db_base_plugin_v2.py:1025 +#: neutron/db/db_base_plugin_v2.py:1026 neutron/db/db_base_plugin_v2.py:1040 #: neutron/plugins/opencontrail/contrail_plugin.py:312 msgid "new subnet" msgstr "" -#: neutron/db/db_base_plugin_v2.py:1018 +#: neutron/db/db_base_plugin_v2.py:1033 #, python-format msgid "Error parsing dns address %s" msgstr "" -#: neutron/db/db_base_plugin_v2.py:1034 +#: neutron/db/db_base_plugin_v2.py:1049 msgid "ipv6_ra_mode is not valid when ip_version is 4" msgstr "" -#: neutron/db/db_base_plugin_v2.py:1038 +#: neutron/db/db_base_plugin_v2.py:1053 msgid "ipv6_address_mode is not valid when ip_version is 4" msgstr "" -#: neutron/db/db_base_plugin_v2.py:1406 +#: neutron/db/db_base_plugin_v2.py:1421 #, python-format msgid "" "Ignoring PortNotFound when deleting port '%s'. The port has already been " @@ -2980,105 +2971,105 @@ msgid "" "agents." msgstr "" -#: neutron/db/l3_db.py:230 +#: neutron/db/l3_db.py:234 #, python-format msgid "No eligible l3 agent associated with external network %s found" msgstr "" -#: neutron/db/l3_db.py:251 +#: neutron/db/l3_db.py:255 #, python-format msgid "No IPs available for external network %s" msgstr "" -#: neutron/db/l3_db.py:265 +#: neutron/db/l3_db.py:269 #, python-format msgid "Network %s is not an external network" msgstr "" -#: neutron/db/l3_db.py:377 +#: neutron/db/l3_db.py:381 #, python-format msgid "Router already has a port on subnet %s" msgstr "" -#: neutron/db/l3_db.py:391 +#: neutron/db/l3_db.py:395 #, python-format msgid "" "Cidr %(subnet_cidr)s of subnet %(subnet_id)s overlaps with cidr %(cidr)s " "of subnet %(sub_id)s" msgstr "" -#: neutron/db/l3_db.py:407 neutron/db/l3_db.py:534 neutron/db/l3_dvr_db.py:230 +#: neutron/db/l3_db.py:411 neutron/db/l3_db.py:538 neutron/db/l3_dvr_db.py:230 #: neutron/plugins/bigswitch/l3_router_plugin.py:170 #: neutron/plugins/bigswitch/l3_router_plugin.py:179 #: neutron/plugins/opencontrail/contrail_plugin.py:499 msgid "Either subnet_id or port_id must be specified" msgstr "" -#: neutron/db/l3_db.py:410 neutron/plugins/opencontrail/contrail_plugin.py:509 +#: neutron/db/l3_db.py:414 neutron/plugins/opencontrail/contrail_plugin.py:509 msgid "Cannot specify both subnet-id and port-id" msgstr "" -#: neutron/db/l3_db.py:423 +#: neutron/db/l3_db.py:427 msgid "Router port must have exactly one fixed IP" msgstr "" -#: neutron/db/l3_db.py:437 +#: neutron/db/l3_db.py:441 msgid "Subnet for router interface must have a gateway IP" msgstr "" -#: neutron/db/l3_db.py:580 neutron/plugins/nec/nec_router.py:195 +#: neutron/db/l3_db.py:584 neutron/plugins/nec/nec_router.py:195 #, python-format msgid "Cannot add floating IP to port on subnet %s which has no gateway_ip" msgstr "" -#: neutron/db/l3_db.py:616 +#: neutron/db/l3_db.py:620 #, python-format msgid "" "Port %(port_id)s is associated with a different tenant than Floating IP " "%(floatingip_id)s and therefore cannot be bound." msgstr "" -#: neutron/db/l3_db.py:620 +#: neutron/db/l3_db.py:624 #, python-format msgid "" "Cannot create floating IP and bind it to Port %s, since that port is " "owned by a different tenant." msgstr "" -#: neutron/db/l3_db.py:632 +#: neutron/db/l3_db.py:636 #, python-format msgid "Port %(id)s does not have fixed ip %(address)s" msgstr "" -#: neutron/db/l3_db.py:639 +#: neutron/db/l3_db.py:643 #, python-format msgid "Cannot add floating IP to port %s that hasno fixed IP addresses" msgstr "" -#: neutron/db/l3_db.py:643 +#: neutron/db/l3_db.py:647 #, python-format msgid "" "Port %s has multiple fixed IPs. Must provide a specific IP when " "assigning a floating IP" msgstr "" -#: neutron/db/l3_db.py:673 neutron/plugins/vmware/plugins/base.py:1814 +#: neutron/db/l3_db.py:677 neutron/plugins/vmware/plugins/base.py:1814 msgid "fixed_ip_address cannot be specified without a port_id" msgstr "" -#: neutron/db/l3_db.py:713 +#: neutron/db/l3_db.py:717 #, python-format msgid "Network %s is not a valid external network" msgstr "" -#: neutron/db/l3_db.py:846 +#: neutron/db/l3_db.py:850 #, python-format msgid "" "Port %(port_id)s has owner %(port_owner)s, but no IP address, so it can " "be deleted" msgstr "" -#: neutron/db/l3_db.py:960 +#: neutron/db/l3_db.py:964 #, python-format msgid "Skipping port %s as no IP is configure on it" msgstr "" @@ -3195,53 +3186,53 @@ msgstr "" msgid "update_firewall_policy() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:353 +#: neutron/db/firewall/firewall_db.py:359 msgid "delete_firewall_policy() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:365 +#: neutron/db/firewall/firewall_db.py:371 msgid "get_firewall_policy() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:370 +#: neutron/db/firewall/firewall_db.py:376 msgid "get_firewall_policies() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:376 +#: neutron/db/firewall/firewall_db.py:382 msgid "get_firewall_policies_count() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:381 +#: neutron/db/firewall/firewall_db.py:387 msgid "create_firewall_rule() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:413 +#: neutron/db/firewall/firewall_db.py:419 #: neutron/services/firewall/fwaas_plugin.py:262 msgid "update_firewall_rule() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:449 +#: neutron/db/firewall/firewall_db.py:455 msgid "delete_firewall_rule() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:457 +#: neutron/db/firewall/firewall_db.py:463 msgid "get_firewall_rule() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:462 +#: neutron/db/firewall/firewall_db.py:468 msgid "get_firewall_rules() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:468 +#: neutron/db/firewall/firewall_db.py:474 msgid "get_firewall_rules_count() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:477 +#: neutron/db/firewall/firewall_db.py:483 #: neutron/services/firewall/fwaas_plugin.py:272 msgid "insert_rule() called" msgstr "" -#: neutron/db/firewall/firewall_db.py:523 +#: neutron/db/firewall/firewall_db.py:529 #: neutron/services/firewall/fwaas_plugin.py:280 msgid "remove_rule() called" msgstr "" @@ -3301,57 +3292,57 @@ msgstr "" msgid "Available commands" msgstr "" -#: neutron/db/migration/migrate_to_ml2.py:89 +#: neutron/db/migration/migrate_to_ml2.py:90 msgid "Missing version in alembic_versions table" msgstr "" -#: neutron/db/migration/migrate_to_ml2.py:91 +#: neutron/db/migration/migrate_to_ml2.py:92 #, python-format msgid "Multiple versions in alembic_versions table: %s" msgstr "" -#: neutron/db/migration/migrate_to_ml2.py:95 +#: neutron/db/migration/migrate_to_ml2.py:96 #, python-format msgid "" "Unsupported database schema %(current)s. Please migrate your database to " "one of following versions: %(supported)s" msgstr "" -#: neutron/db/migration/migrate_to_ml2.py:415 +#: neutron/db/migration/migrate_to_ml2.py:423 #, python-format msgid "Unknown tunnel type: %s" msgstr "" -#: neutron/db/migration/migrate_to_ml2.py:429 +#: neutron/db/migration/migrate_to_ml2.py:451 msgid "The plugin type whose database will be migrated" msgstr "" -#: neutron/db/migration/migrate_to_ml2.py:432 +#: neutron/db/migration/migrate_to_ml2.py:454 msgid "The connection url for the target db" msgstr "" -#: neutron/db/migration/migrate_to_ml2.py:435 +#: neutron/db/migration/migrate_to_ml2.py:457 #, python-format msgid "The %s tunnel type to migrate from" msgstr "" -#: neutron/db/migration/migrate_to_ml2.py:438 +#: neutron/db/migration/migrate_to_ml2.py:460 #: neutron/plugins/openvswitch/common/config.py:80 msgid "The UDP port to use for VXLAN tunnels." msgstr "" -#: neutron/db/migration/migrate_to_ml2.py:441 +#: neutron/db/migration/migrate_to_ml2.py:463 msgid "Retain the old plugin's tables" msgstr "" -#: neutron/db/migration/migrate_to_ml2.py:447 +#: neutron/db/migration/migrate_to_ml2.py:469 #, python-format msgid "" "Tunnel args (tunnel-type and vxlan-udp-port) are not valid for the %s " "plugin" msgstr "" -#: neutron/db/migration/migrate_to_ml2.py:454 +#: neutron/db/migration/migrate_to_ml2.py:476 #, python-format msgid "" "Support for migrating %(plugin)s for release %(release)s is not yet " @@ -3741,11 +3732,11 @@ msgid "" "external network %(net_id)s is required by one or more floating IPs." msgstr "" -#: neutron/extensions/l3.py:138 +#: neutron/extensions/l3.py:151 msgid "Number of routers allowed per tenant. A negative value means unlimited." msgstr "" -#: neutron/extensions/l3.py:142 +#: neutron/extensions/l3.py:155 msgid "" "Number of floating IPs allowed per tenant. A negative value means " "unlimited." @@ -4184,47 +4175,47 @@ msgstr "" msgid "Router %(router_id)s has no external network gateway set" msgstr "" -#: neutron/notifiers/nova.py:165 +#: neutron/notifiers/nova.py:169 msgid "device_id is not set on port yet." msgstr "" -#: neutron/notifiers/nova.py:169 +#: neutron/notifiers/nova.py:173 msgid "Port ID not set! Nova will not be notified of port status change." msgstr "" -#: neutron/notifiers/nova.py:194 +#: neutron/notifiers/nova.py:198 #, python-format msgid "" "Ignoring state change previous_port_status: %(pre_status)s " "current_port_status: %(cur_status)s port_id %(id)s" msgstr "" -#: neutron/notifiers/nova.py:220 +#: neutron/notifiers/nova.py:224 #, python-format msgid "Sending events: %s" msgstr "" -#: neutron/notifiers/nova.py:225 +#: neutron/notifiers/nova.py:229 #, python-format msgid "Nova returned NotFound for event: %s" msgstr "" -#: neutron/notifiers/nova.py:228 +#: neutron/notifiers/nova.py:232 #, python-format msgid "Failed to notify nova on events: %s" msgstr "" -#: neutron/notifiers/nova.py:232 neutron/notifiers/nova.py:248 +#: neutron/notifiers/nova.py:236 neutron/notifiers/nova.py:252 #, python-format msgid "Error response returned from nova: %s" msgstr "" -#: neutron/notifiers/nova.py:243 +#: neutron/notifiers/nova.py:247 #, python-format msgid "Nova event: %s returned with failed status" msgstr "" -#: neutron/notifiers/nova.py:246 +#: neutron/notifiers/nova.py:250 #, python-format msgid "Nova event response: %s" msgstr "" @@ -4998,9 +4989,7 @@ msgstr "" #: neutron/plugins/brocade/NeutronPlugin.py:91 #: neutron/plugins/hyperv/rpc_callbacks.py:41 -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:69 #: neutron/plugins/mlnx/rpc_callbacks.py:37 -#: neutron/plugins/openvswitch/ovs_neutron_plugin.py:80 #, python-format msgid "Device %(device)s details requested from %(agent_id)s" msgstr "" @@ -5009,15 +4998,9 @@ msgstr "" #: neutron/plugins/brocade/NeutronPlugin.py:133 #: neutron/plugins/hyperv/rpc_callbacks.py:57 #: neutron/plugins/hyperv/rpc_callbacks.py:86 -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:93 -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:130 -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:153 #: neutron/plugins/mlnx/rpc_callbacks.py:60 #: neutron/plugins/mlnx/rpc_callbacks.py:90 #: neutron/plugins/mlnx/rpc_callbacks.py:106 -#: neutron/plugins/openvswitch/ovs_neutron_plugin.py:98 -#: neutron/plugins/openvswitch/ovs_neutron_plugin.py:135 -#: neutron/plugins/openvswitch/ovs_neutron_plugin.py:158 #, python-format msgid "%s can not be found in database" msgstr "" @@ -6306,18 +6289,13 @@ msgid "No policy profile populated from VSM" msgstr "" #: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:207 -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:340 #: neutron/plugins/mlnx/mlnx_plugin.py:223 neutron/plugins/nuage/plugin.py:419 -#: neutron/plugins/openvswitch/ovs_neutron_plugin.py:414 msgid "provider:network_type required" msgstr "" #: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:211 #: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:225 -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:350 #: neutron/plugins/mlnx/mlnx_plugin.py:253 neutron/plugins/nuage/plugin.py:429 -#: neutron/plugins/openvswitch/ovs_neutron_plugin.py:424 -#: neutron/plugins/openvswitch/ovs_neutron_plugin.py:443 msgid "provider:segmentation_id required" msgstr "" @@ -6334,25 +6312,19 @@ msgid "provider:segmentation_id out of range (5000+)" msgstr "" #: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:232 -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:372 #: neutron/plugins/mlnx/mlnx_plugin.py:239 -#: neutron/plugins/openvswitch/ovs_neutron_plugin.py:459 #, python-format msgid "provider:network_type %s not supported" msgstr "" #: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:243 -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:378 #: neutron/plugins/mlnx/mlnx_plugin.py:279 -#: neutron/plugins/openvswitch/ovs_neutron_plugin.py:465 #, python-format msgid "Unknown provider:physical_network %s" msgstr "" #: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:247 -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:384 #: neutron/plugins/mlnx/mlnx_plugin.py:285 neutron/plugins/nuage/plugin.py:426 -#: neutron/plugins/openvswitch/ovs_neutron_plugin.py:471 msgid "provider:physical_network required" msgstr "" @@ -6511,7 +6483,6 @@ msgstr "" #: neutron/plugins/ibm/sdnve_neutron_plugin.py:196 #: neutron/plugins/metaplugin/meta_neutron_plugin.py:226 #: neutron/plugins/mlnx/mlnx_plugin.py:366 -#: neutron/plugins/openvswitch/ovs_neutron_plugin.py:519 #, python-format msgid "Created network: %s" msgstr "" @@ -6768,8 +6739,6 @@ msgid "" msgstr "" #: neutron/plugins/hyperv/db.py:37 -#: neutron/plugins/linuxbridge/db/l2network_db_v2.py:113 -#: neutron/plugins/openvswitch/ovs_db_v2.py:131 #, python-format msgid "" "Reserving vlan %(vlan_id)s on physical network %(physical_network)s from " @@ -6782,8 +6751,6 @@ msgid "Reserving flat physical network %(physical_network)s from pool" msgstr "" #: neutron/plugins/hyperv/db.py:75 -#: neutron/plugins/linuxbridge/db/l2network_db_v2.py:136 -#: neutron/plugins/openvswitch/ovs_db_v2.py:155 #, python-format msgid "" "Reserving specific vlan %(vlan_id)s on physical network " @@ -6796,19 +6763,13 @@ msgid "Releasing vlan %(vlan_id)s on physical network %(physical_network)s" msgstr "" #: neutron/plugins/hyperv/db.py:137 -#: neutron/plugins/linuxbridge/db/l2network_db_v2.py:177 -#: neutron/plugins/openvswitch/ovs_db_v2.py:196 #, python-format msgid "vlan_id %(vlan_id)s on physical network %(physical_network)s not found" msgstr "" #: neutron/plugins/hyperv/db.py:162 neutron/plugins/hyperv/db.py:175 -#: neutron/plugins/linuxbridge/db/l2network_db_v2.py:64 -#: neutron/plugins/linuxbridge/db/l2network_db_v2.py:83 #: neutron/plugins/ml2/drivers/type_vlan.py:130 #: neutron/plugins/ml2/drivers/type_vlan.py:151 -#: neutron/plugins/openvswitch/ovs_db_v2.py:87 -#: neutron/plugins/openvswitch/ovs_db_v2.py:105 #, python-format msgid "" "Removing vlan %(vlan_id)s on physical network %(physical_network)s from " @@ -6846,10 +6807,8 @@ msgid "Invalid tenant_network_type: %s. Agent terminated!" msgstr "" #: neutron/plugins/hyperv/hyperv_neutron_plugin.py:203 -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:301 #: neutron/plugins/ml2/drivers/type_vlan.py:96 #: neutron/plugins/mlnx/mlnx_plugin.py:184 -#: neutron/plugins/openvswitch/ovs_neutron_plugin.py:366 #, python-format msgid "Network VLAN ranges: %s" msgstr "" @@ -6860,9 +6819,7 @@ msgid "Network type %s not supported" msgstr "" #: neutron/plugins/hyperv/rpc_callbacks.py:75 -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:112 #: neutron/plugins/mlnx/rpc_callbacks.py:77 -#: neutron/plugins/openvswitch/ovs_neutron_plugin.py:117 #, python-format msgid "Device %(device)s no longer exists on %(agent_id)s" msgstr "" @@ -7683,61 +7640,6 @@ msgstr "" msgid "The input does not contain nececessary info: %(msg)s" msgstr "" -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:121 -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:145 -#: neutron/plugins/ml2/rpc.py:130 neutron/plugins/ml2/rpc.py:154 -#: neutron/plugins/openvswitch/ovs_neutron_plugin.py:125 -#: neutron/plugins/openvswitch/ovs_neutron_plugin.py:150 -#, python-format -msgid "Device %(device)s not bound to the agent host %(host)s" -msgstr "" - -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:138 -#: neutron/plugins/openvswitch/ovs_neutron_plugin.py:144 -#, python-format -msgid "Device %(device)s up on %(agent_id)s" -msgstr "" - -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:259 -#: neutron/plugins/mlnx/mlnx_plugin.py:204 -#, python-format -msgid "Invalid tenant_network_type: %s. Service terminated!" -msgstr "" - -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:270 -msgid "Linux Bridge Plugin initialization complete" -msgstr "" - -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:299 -#, python-format -msgid "%s. Agent terminated!" -msgstr "" - -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:344 -#: neutron/plugins/mlnx/mlnx_plugin.py:248 -#: neutron/plugins/openvswitch/ovs_neutron_plugin.py:418 -msgid "provider:segmentation_id specified for flat network" -msgstr "" - -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:353 -#: neutron/plugins/mlnx/mlnx_plugin.py:256 -#: neutron/plugins/openvswitch/ovs_neutron_plugin.py:427 -#, python-format -msgid "provider:segmentation_id out of range (%(min_id)s through %(max_id)s)" -msgstr "" - -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:360 -#: neutron/plugins/mlnx/mlnx_plugin.py:264 -#: neutron/plugins/openvswitch/ovs_neutron_plugin.py:447 -msgid "provider:physical_network specified for local network" -msgstr "" - -#: neutron/plugins/linuxbridge/lb_neutron_plugin.py:366 -#: neutron/plugins/mlnx/mlnx_plugin.py:268 -#: neutron/plugins/openvswitch/ovs_neutron_plugin.py:453 -msgid "provider:segmentation_id specified for local network" -msgstr "" - #: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:81 msgid "VXLAN is enabled, a valid local_ip must be provided" msgstr "" @@ -8064,40 +7966,6 @@ msgstr "" msgid "Enable server RPC compatibility with old agents" msgstr "" -#: neutron/plugins/linuxbridge/db/l2network_db_v2.py:142 -#: neutron/plugins/openvswitch/ovs_db_v2.py:161 -#, python-format -msgid "" -"Reserving specific vlan %(vlan_id)s on physical network " -"%(physical_network)s outside pool" -msgstr "" - -#: neutron/plugins/linuxbridge/db/l2network_db_v2.py:166 -#: neutron/plugins/openvswitch/ovs_db_v2.py:191 -#, python-format -msgid "" -"Releasing vlan %(vlan_id)s on physical network %(physical_network)s to " -"pool" -msgstr "" - -#: neutron/plugins/linuxbridge/db/l2network_db_v2.py:171 -#: neutron/plugins/openvswitch/ovs_db_v2.py:186 -#, python-format -msgid "" -"Releasing vlan %(vlan_id)s on physical network %(physical_network)s " -"outside pool" -msgstr "" - -#: neutron/plugins/linuxbridge/db/l2network_db_v2.py:202 -#: neutron/plugins/mlnx/db/mlnx_db_v2.py:212 -msgid "get_port_from_device() called" -msgstr "" - -#: neutron/plugins/linuxbridge/db/l2network_db_v2.py:230 -#, python-format -msgid "set_port_status as %s called" -msgstr "" - #: neutron/plugins/metaplugin/meta_neutron_plugin.py:59 #, python-format msgid "Flavor %(flavor)s could not be found" @@ -8741,7 +8609,7 @@ msgid "Added segment %(id)s of type %(network_type)s for network %(network_id)s" msgstr "" #: neutron/plugins/ml2/db.py:197 neutron/plugins/ml2/db.py:249 -#: neutron/plugins/ml2/plugin.py:1046 +#: neutron/plugins/ml2/plugin.py:1058 #, python-format msgid "Multiple ports have port_id starting with %s" msgstr "" @@ -8893,163 +8761,163 @@ msgstr "" msgid "Extended port dict for driver '%(drv)s'" msgstr "" -#: neutron/plugins/ml2/plugin.py:135 +#: neutron/plugins/ml2/plugin.py:136 msgid "Modular L2 Plugin initialization complete" msgstr "" -#: neutron/plugins/ml2/plugin.py:205 +#: neutron/plugins/ml2/plugin.py:206 msgid "binding:profile value too large" msgstr "" -#: neutron/plugins/ml2/plugin.py:261 +#: neutron/plugins/ml2/plugin.py:262 #, python-format msgid "Failed to commit binding results for %(port)s after %(max)s tries" msgstr "" -#: neutron/plugins/ml2/plugin.py:267 +#: neutron/plugins/ml2/plugin.py:268 #, python-format msgid "Attempt %(count)s to bind port %(port)s" msgstr "" -#: neutron/plugins/ml2/plugin.py:393 +#: neutron/plugins/ml2/plugin.py:394 #, python-format msgid "Serialized vif_details DB value '%(value)s' for port %(port)s is invalid" msgstr "" -#: neutron/plugins/ml2/plugin.py:404 +#: neutron/plugins/ml2/plugin.py:405 #, python-format msgid "Serialized profile DB value '%(value)s' for port %(port)s is invalid" msgstr "" -#: neutron/plugins/ml2/plugin.py:473 +#: neutron/plugins/ml2/plugin.py:474 #, python-format msgid "" "In _notify_port_updated(), no bound segment for port %(port_id)s on " "network %(network_id)s" msgstr "" -#: neutron/plugins/ml2/plugin.py:507 +#: neutron/plugins/ml2/plugin.py:508 #, python-format msgid "mechanism_manager.create_network_postcommit failed, deleting network '%s'" msgstr "" -#: neutron/plugins/ml2/plugin.py:570 +#: neutron/plugins/ml2/plugin.py:571 #, python-format msgid "Deleting network %s" msgstr "" -#: neutron/plugins/ml2/plugin.py:591 +#: neutron/plugins/ml2/plugin.py:598 #, python-format msgid "Ports to auto-delete: %s" msgstr "" -#: neutron/plugins/ml2/plugin.py:597 neutron/plugins/ml2/plugin.py:725 +#: neutron/plugins/ml2/plugin.py:604 neutron/plugins/ml2/plugin.py:732 msgid "Tenant-owned ports exist" msgstr "" -#: neutron/plugins/ml2/plugin.py:605 +#: neutron/plugins/ml2/plugin.py:612 #, python-format msgid "Subnets to auto-delete: %s" msgstr "" -#: neutron/plugins/ml2/plugin.py:617 +#: neutron/plugins/ml2/plugin.py:624 #, python-format msgid "Deleting network record %s" msgstr "" -#: neutron/plugins/ml2/plugin.py:622 neutron/plugins/ml2/plugin.py:737 +#: neutron/plugins/ml2/plugin.py:629 neutron/plugins/ml2/plugin.py:744 msgid "Committing transaction" msgstr "" -#: neutron/plugins/ml2/plugin.py:628 +#: neutron/plugins/ml2/plugin.py:635 msgid "A concurrent port creation has occurred" msgstr "" -#: neutron/plugins/ml2/plugin.py:637 +#: neutron/plugins/ml2/plugin.py:644 #, python-format msgid "Exception auto-deleting port %s" msgstr "" -#: neutron/plugins/ml2/plugin.py:645 +#: neutron/plugins/ml2/plugin.py:652 #, python-format msgid "Exception auto-deleting subnet %s" msgstr "" -#: neutron/plugins/ml2/plugin.py:654 +#: neutron/plugins/ml2/plugin.py:661 msgid "mechanism_manager.delete_network_postcommit failed" msgstr "" -#: neutron/plugins/ml2/plugin.py:670 +#: neutron/plugins/ml2/plugin.py:677 #, python-format msgid "mechanism_manager.create_subnet_postcommit failed, deleting subnet '%s'" msgstr "" -#: neutron/plugins/ml2/plugin.py:702 +#: neutron/plugins/ml2/plugin.py:709 #, python-format msgid "Deleting subnet %s" msgstr "" -#: neutron/plugins/ml2/plugin.py:719 +#: neutron/plugins/ml2/plugin.py:726 #, python-format msgid "Ports to auto-deallocate: %s" msgstr "" -#: neutron/plugins/ml2/plugin.py:734 +#: neutron/plugins/ml2/plugin.py:741 msgid "Deleting subnet record" msgstr "" -#: neutron/plugins/ml2/plugin.py:753 +#: neutron/plugins/ml2/plugin.py:760 #, python-format msgid "Exception deleting fixed_ip from port %s" msgstr "" -#: neutron/plugins/ml2/plugin.py:763 +#: neutron/plugins/ml2/plugin.py:770 msgid "mechanism_manager.delete_subnet_postcommit failed" msgstr "" -#: neutron/plugins/ml2/plugin.py:799 +#: neutron/plugins/ml2/plugin.py:806 #, python-format msgid "mechanism_manager.create_port_postcommit failed, deleting port '%s'" msgstr "" -#: neutron/plugins/ml2/plugin.py:811 +#: neutron/plugins/ml2/plugin.py:818 #, python-format msgid "_bind_port_if_needed failed, deleting port '%s'" msgstr "" -#: neutron/plugins/ml2/plugin.py:897 +#: neutron/plugins/ml2/plugin.py:904 #, python-format msgid "No Host supplied to bind DVR Port %s" msgstr "" -#: neutron/plugins/ml2/plugin.py:961 -#: neutron/tests/unit/ml2/test_ml2_plugin.py:146 +#: neutron/plugins/ml2/plugin.py:968 +#: neutron/tests/unit/ml2/test_ml2_plugin.py:148 #, python-format msgid "Deleting port %s" msgstr "" -#: neutron/plugins/ml2/plugin.py:981 -#: neutron/tests/unit/ml2/test_ml2_plugin.py:147 +#: neutron/plugins/ml2/plugin.py:988 +#: neutron/tests/unit/ml2/test_ml2_plugin.py:149 #, python-format msgid "The port '%s' was deleted" msgstr "" -#: neutron/plugins/ml2/plugin.py:1031 +#: neutron/plugins/ml2/plugin.py:1043 #, python-format msgid "mechanism_manager.delete_port_postcommit failed for port %s" msgstr "" -#: neutron/plugins/ml2/plugin.py:1055 +#: neutron/plugins/ml2/plugin.py:1067 #, python-format msgid "Binding info for DVR port %s not found" msgstr "" -#: neutron/plugins/ml2/plugin.py:1081 +#: neutron/plugins/ml2/plugin.py:1093 #, python-format msgid "Port %(port)s updated up by agent not found" msgstr "" -#: neutron/plugins/ml2/plugin.py:1111 +#: neutron/plugins/ml2/plugin.py:1123 #, python-format msgid "Port %s not found during update" msgstr "" @@ -9076,6 +8944,11 @@ msgstr "" msgid "Device %(device)s no longer exists at agent %(agent_id)s" msgstr "" +#: neutron/plugins/ml2/rpc.py:130 neutron/plugins/ml2/rpc.py:154 +#, python-format +msgid "Device %(device)s not bound to the agent host %(host)s" +msgstr "" + #: neutron/plugins/ml2/rpc.py:148 #, python-format msgid "Device %(device)s up at agent %(agent_id)s" @@ -9231,7 +9104,6 @@ msgid "%s prohibited for local provider network" msgstr "" #: neutron/plugins/ml2/drivers/type_tunnel.py:88 -#: neutron/plugins/openvswitch/ovs_neutron_plugin.py:437 #, python-format msgid "provider:physical_network specified for %s network" msgstr "" @@ -10087,11 +9959,32 @@ msgid "Physical Network type mappings: %s" msgstr "" #: neutron/plugins/mlnx/mlnx_plugin.py:182 -#: neutron/plugins/openvswitch/ovs_neutron_plugin.py:364 #, python-format msgid "%s. Server terminated!" msgstr "" +#: neutron/plugins/mlnx/mlnx_plugin.py:204 +#, python-format +msgid "Invalid tenant_network_type: %s. Service terminated!" +msgstr "" + +#: neutron/plugins/mlnx/mlnx_plugin.py:248 +msgid "provider:segmentation_id specified for flat network" +msgstr "" + +#: neutron/plugins/mlnx/mlnx_plugin.py:256 +#, python-format +msgid "provider:segmentation_id out of range (%(min_id)s through %(max_id)s)" +msgstr "" + +#: neutron/plugins/mlnx/mlnx_plugin.py:264 +msgid "provider:physical_network specified for local network" +msgstr "" + +#: neutron/plugins/mlnx/mlnx_plugin.py:268 +msgid "provider:segmentation_id specified for local network" +msgstr "" + #: neutron/plugins/mlnx/mlnx_plugin.py:320 #, python-format msgid "Unsupported vnic type %(vnic_type)s for physical network type %(net_type)s" @@ -10259,7 +10152,7 @@ msgstr "" msgid "Port Release for %(port_mac)s on fabric %(fabric)s" msgstr "" -#: neutron/plugins/mlnx/common/comm_utils.py:57 +#: neutron/plugins/mlnx/common/comm_utils.py:56 #, python-format msgid "Request timeout - call again after %s seconds" msgstr "" @@ -10350,6 +10243,10 @@ msgstr "" msgid "vlan_id %(seg_id)s on physical network %(phy_net)s not found" msgstr "" +#: neutron/plugins/mlnx/db/mlnx_db_v2.py:212 +msgid "get_port_from_device() called" +msgstr "" + #: neutron/plugins/mlnx/db/mlnx_db_v2.py:239 msgid "Get_port_from_device_mac() called" msgstr "" @@ -10826,7 +10723,6 @@ msgid "del_portinfo(): NotFound portinfo for port_id: %s" msgstr "" #: neutron/plugins/nec/db/api.py:157 -#: neutron/plugins/openvswitch/ovs_db_v2.py:317 #, python-format msgid "get_port_with_securitygroups() called:port_id=%s" msgstr "" @@ -11377,87 +11273,6 @@ msgstr "" msgid "Success: %(method)s %(url)s status=%(status)s" msgstr "" -#: neutron/plugins/openvswitch/ovs_db_v2.py:210 -#, python-format -msgid "Skipping unreasonable tunnel ID range %(tun_min)s:%(tun_max)s" -msgstr "" - -#: neutron/plugins/openvswitch/ovs_db_v2.py:229 -#, python-format -msgid "Removing tunnel %s from pool" -msgstr "" - -#: neutron/plugins/openvswitch/ovs_db_v2.py:258 -#, python-format -msgid "Reserving tunnel %s from pool" -msgstr "" - -#: neutron/plugins/openvswitch/ovs_db_v2.py:273 -#, python-format -msgid "Reserving specific tunnel %s from pool" -msgstr "" - -#: neutron/plugins/openvswitch/ovs_db_v2.py:276 -#, python-format -msgid "Reserving specific tunnel %s outside pool" -msgstr "" - -#: neutron/plugins/openvswitch/ovs_db_v2.py:299 -#, python-format -msgid "Releasing tunnel %s outside pool" -msgstr "" - -#: neutron/plugins/openvswitch/ovs_db_v2.py:301 -#, python-format -msgid "Releasing tunnel %s to pool" -msgstr "" - -#: neutron/plugins/openvswitch/ovs_db_v2.py:303 -#, python-format -msgid "tunnel_id %s not found" -msgstr "" - -#: neutron/plugins/openvswitch/ovs_db_v2.py:375 -#, python-format -msgid "Adding a tunnel endpoint for %s" -msgstr "" - -#: neutron/plugins/openvswitch/ovs_db_v2.py:391 -#, python-format -msgid "" -"Adding a tunnel endpoint failed due to a concurrenttransaction had been " -"committed (%s attempts left)" -msgstr "" - -#: neutron/plugins/openvswitch/ovs_db_v2.py:396 -msgid "Unable to generate a new tunnel id" -msgstr "" - -#: neutron/plugins/openvswitch/ovs_neutron_plugin.py:309 -#, python-format -msgid "Invalid tenant_network_type: %s. Server terminated!" -msgstr "" - -#: neutron/plugins/openvswitch/ovs_neutron_plugin.py:326 -#, python-format -msgid "Tunneling disabled but tenant_network_type is '%s'. Server terminated!" -msgstr "" - -#: neutron/plugins/openvswitch/ovs_neutron_plugin.py:375 -#, python-format -msgid "Invalid tunnel ID range: '%(range)s' - %(e)s. Server terminated!" -msgstr "" - -#: neutron/plugins/openvswitch/ovs_neutron_plugin.py:379 -#, python-format -msgid "Tunnel ID ranges: %s" -msgstr "" - -#: neutron/plugins/openvswitch/ovs_neutron_plugin.py:434 -#, python-format -msgid "%s networks are not enabled" -msgstr "" - #: neutron/plugins/openvswitch/agent/ovs_dvr_neutron_agent.py:158 msgid "DVR: Failed to obtain local DVR Mac address" msgstr "" @@ -11621,16 +11436,16 @@ msgstr "" #: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1029 #: neutron/tests/unit/ofagent/test_ofa_neutron_agent.py:799 -#: neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py:1274 +#: neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py:1273 msgid "ofport should have a value that can be interpreted as an integer" msgstr "" #: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1032 #: neutron/tests/unit/ofagent/test_ofa_neutron_agent.py:782 #: neutron/tests/unit/ofagent/test_ofa_neutron_agent.py:802 -#: neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py:1257 -#: neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py:1277 -#: neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py:1294 +#: neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py:1256 +#: neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py:1276 +#: neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py:1293 #, python-format msgid "Failed to set-up %(type)s tunnel port to %(ip)s" msgstr "" diff --git a/neutron/locale/pt_BR/LC_MESSAGES/neutron-log-info.po b/neutron/locale/pt_BR/LC_MESSAGES/neutron-log-info.po index 6a121095889..748a66dc1bf 100644 --- a/neutron/locale/pt_BR/LC_MESSAGES/neutron-log-info.po +++ b/neutron/locale/pt_BR/LC_MESSAGES/neutron-log-info.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Neutron\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-22 06:06+0000\n" +"POT-Creation-Date: 2014-10-08 06:09+0000\n" "PO-Revision-Date: 2014-08-12 21:40+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/" @@ -19,7 +19,7 @@ msgstr "" "Generated-By: Babel 1.3\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: neutron/policy.py:106 +#: neutron/policy.py:110 #, python-format msgid "" "Inserting policy:%(new_policy)s in place of deprecated policy:%(old_policy)s" @@ -27,6 +27,11 @@ msgstr "" "Inserindo política: %(new_policy)s no lugar de política deprecada: " "%(old_policy)s" +#: neutron/agent/linux/ovs_lib.py:422 +#, python-format +msgid "Port %(port_id)s not present in bridge %(br_name)s" +msgstr "" + #: neutron/common/ipv6_utils.py:62 msgid "IPv6 is not enabled on this system." msgstr "" diff --git a/neutron/locale/pt_BR/LC_MESSAGES/neutron-log-warning.po b/neutron/locale/pt_BR/LC_MESSAGES/neutron-log-warning.po deleted file mode 100644 index ca8eab6f2ce..00000000000 --- a/neutron/locale/pt_BR/LC_MESSAGES/neutron-log-warning.po +++ /dev/null @@ -1,159 +0,0 @@ -# Translations template for neutron. -# Copyright (C) 2014 ORGANIZATION -# This file is distributed under the same license as the neutron project. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Neutron\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-14 06:11+0000\n" -"PO-Revision-Date: 2014-07-18 21:01+0000\n" -"Last-Translator: openstackjenkins \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/" -"neutron/language/pt_BR/)\n" -"Language: pt_BR\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -#: neutron/policy.py:94 -#, python-format -msgid "" -"Found deprecated policy rule:%s. Please consider upgrading your policy " -"configuration file" -msgstr "" -"Encontrada regra deprecada: %s. Por favor considere atualizar seu arquivo de " -"regras de políticas" - -#: neutron/policy.py:137 -#, python-format -msgid "Unable to find data type descriptor for attribute %s" -msgstr "" -"Não foi possível encontrar o descritor de tipo de dados para o atributo %s" - -#: neutron/agent/securitygroups_rpc.py:183 -msgid "" -"security_group_info_for_devices rpc call not supported by the server, " -"falling back to old security_group_rules_for_devices which scales worse." -msgstr "" - -#: neutron/agent/linux/keepalived.py:358 -msgid "" -"A previous instance of keepalived seems to be dead, unable to restart it, a " -"new instance will be spawned" -msgstr "" - -#: neutron/db/l3_agentschedulers_db.py:105 -msgid "" -"Time since last L3 agent reschedule check has exceeded the interval between " -"checks. Waiting before check to allow agents to send a heartbeat in case " -"there was a clock adjustment." -msgstr "" - -#: neutron/db/l3_agentschedulers_db.py:127 -#, python-format -msgid "" -"Rescheduling router %(router)s from agent %(agent)s because the agent did " -"not report to the server in the last %(dead_time)s seconds." -msgstr "" - -#: neutron/db/l3_hamode_db.py:404 -#, python-format -msgid "The router %(router_id)s is bound multiple times on the agent %(host)s" -msgstr "" - -#: neutron/openstack/common/service.py:364 -#, python-format -msgid "pid %d not in child list" -msgstr "pid %d fora da lista de filhos" - -#: neutron/plugins/ml2/drivers/type_tunnel.py:143 -#, python-format -msgid "%(type)s tunnel %(id)s not found" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_sync.py:68 -#, python-format -msgid "Create network postcommit failed for network %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_sync.py:78 -#, python-format -msgid "Create subnet postcommit failed for subnet %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_sync.py:91 -#, python-format -msgid "Create port postcommit failed for port %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_sync.py:110 -#, python-format -msgid "Add interface postcommit failed for port %s" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:299 -#, python-format -msgid "Subnet %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:317 -#, python-format -msgid "Router %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:329 -#, python-format -msgid "" -"Route with destination %(dest)s and nexthop %(hop)s not found in neutron for " -"sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:343 -#, python-format -msgid "Security group %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:354 -#, python-format -msgid "Security group rule %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:364 -#, python-format -msgid "Floating ip %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:376 -#, python-format -msgid "IP allocation for floating ip %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:387 -#, python-format -msgid "Net-partition %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:397 -#, python-format -msgid "VM port %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:290 -#, python-format -msgid "Unable to create tunnel port. Invalid remote IP: %s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:713 -#, python-format -msgid "" -"VIF port: %s has no ofport configured, and might not be able to transmit" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:820 -#, python-format -msgid "Device %s not defined on plugin" -msgstr "" diff --git a/neutron/locale/sr/LC_MESSAGES/neutron-log-warning.po b/neutron/locale/sr/LC_MESSAGES/neutron-log-warning.po deleted file mode 100644 index 4eb04acc207..00000000000 --- a/neutron/locale/sr/LC_MESSAGES/neutron-log-warning.po +++ /dev/null @@ -1,157 +0,0 @@ -# Translations template for neutron. -# Copyright (C) 2014 ORGANIZATION -# This file is distributed under the same license as the neutron project. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Neutron\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-14 06:11+0000\n" -"PO-Revision-Date: 2014-06-30 19:27+0000\n" -"Last-Translator: openstackjenkins \n" -"Language-Team: Serbian (http://www.transifex.com/projects/p/neutron/language/" -"sr/)\n" -"Language: sr\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" -"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -#: neutron/policy.py:94 -#, python-format -msgid "" -"Found deprecated policy rule:%s. Please consider upgrading your policy " -"configuration file" -msgstr "" - -#: neutron/policy.py:137 -#, python-format -msgid "Unable to find data type descriptor for attribute %s" -msgstr "" - -#: neutron/agent/securitygroups_rpc.py:183 -msgid "" -"security_group_info_for_devices rpc call not supported by the server, " -"falling back to old security_group_rules_for_devices which scales worse." -msgstr "" - -#: neutron/agent/linux/keepalived.py:358 -msgid "" -"A previous instance of keepalived seems to be dead, unable to restart it, a " -"new instance will be spawned" -msgstr "" - -#: neutron/db/l3_agentschedulers_db.py:105 -msgid "" -"Time since last L3 agent reschedule check has exceeded the interval between " -"checks. Waiting before check to allow agents to send a heartbeat in case " -"there was a clock adjustment." -msgstr "" - -#: neutron/db/l3_agentschedulers_db.py:127 -#, python-format -msgid "" -"Rescheduling router %(router)s from agent %(agent)s because the agent did " -"not report to the server in the last %(dead_time)s seconds." -msgstr "" - -#: neutron/db/l3_hamode_db.py:404 -#, python-format -msgid "The router %(router_id)s is bound multiple times on the agent %(host)s" -msgstr "" - -#: neutron/openstack/common/service.py:364 -#, python-format -msgid "pid %d not in child list" -msgstr "pid %d nije na mladjoj listi" - -#: neutron/plugins/ml2/drivers/type_tunnel.py:143 -#, python-format -msgid "%(type)s tunnel %(id)s not found" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_sync.py:68 -#, python-format -msgid "Create network postcommit failed for network %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_sync.py:78 -#, python-format -msgid "Create subnet postcommit failed for subnet %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_sync.py:91 -#, python-format -msgid "Create port postcommit failed for port %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_sync.py:110 -#, python-format -msgid "Add interface postcommit failed for port %s" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:299 -#, python-format -msgid "Subnet %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:317 -#, python-format -msgid "Router %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:329 -#, python-format -msgid "" -"Route with destination %(dest)s and nexthop %(hop)s not found in neutron for " -"sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:343 -#, python-format -msgid "Security group %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:354 -#, python-format -msgid "Security group rule %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:364 -#, python-format -msgid "Floating ip %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:376 -#, python-format -msgid "IP allocation for floating ip %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:387 -#, python-format -msgid "Net-partition %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:397 -#, python-format -msgid "VM port %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:290 -#, python-format -msgid "Unable to create tunnel port. Invalid remote IP: %s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:713 -#, python-format -msgid "" -"VIF port: %s has no ofport configured, and might not be able to transmit" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:820 -#, python-format -msgid "Device %s not defined on plugin" -msgstr "" diff --git a/neutron/locale/te_IN/LC_MESSAGES/neutron-log-critical.po b/neutron/locale/te_IN/LC_MESSAGES/neutron-log-critical.po deleted file mode 100644 index 00199232622..00000000000 --- a/neutron/locale/te_IN/LC_MESSAGES/neutron-log-critical.po +++ /dev/null @@ -1,21 +0,0 @@ -# Translations template for neutron. -# Copyright (C) 2014 ORGANIZATION -# This file is distributed under the same license as the neutron project. -# -# Translators: -# rajeshmalisettty , 2014 -msgid "" -msgstr "" -"Project-Id-Version: Neutron\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-08-01 06:06+0000\n" -"PO-Revision-Date: 2014-07-31 15:31+0000\n" -"Last-Translator: rajeshmalisettty \n" -"Language-Team: Telugu (India) (http://www.transifex.com/projects/p/neutron/" -"language/te_IN/)\n" -"Language: te_IN\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" diff --git a/neutron/locale/te_IN/LC_MESSAGES/neutron-log-error.po b/neutron/locale/te_IN/LC_MESSAGES/neutron-log-error.po deleted file mode 100644 index e19394f5a7b..00000000000 --- a/neutron/locale/te_IN/LC_MESSAGES/neutron-log-error.po +++ /dev/null @@ -1,276 +0,0 @@ -# Translations template for neutron. -# Copyright (C) 2014 ORGANIZATION -# This file is distributed under the same license as the neutron project. -# -# Translators: -# rajeshmalisettty , 2014 -msgid "" -msgstr "" -"Project-Id-Version: Neutron\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-29 06:04+0000\n" -"PO-Revision-Date: 2014-08-12 21:24+0000\n" -"Last-Translator: openstackjenkins \n" -"Language-Team: Telugu (India) (http://www.transifex.com/projects/p/neutron/" -"language/te_IN/)\n" -"Language: te_IN\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: neutron/policy.py:119 -#, python-format -msgid "" -"Backward compatibility unavailable for deprecated policy %s. The policy will " -"not be enforced" -msgstr "నిరాశపర్చింది విధానం %s కోసం అందుబాటులో వెనుకబడిన అనుకూలత. విధానం అమలు చేయబడదు" - -#: neutron/policy.py:311 -#, python-format -msgid "Policy check error while calling %s!" -msgstr "పాలసీ చెక్ లోపం %s కాల్ఐంది !" - -#: neutron/agent/l3_ha_agent.py:136 -#, python-format -msgid "Unable to process HA router %s without ha port" -msgstr "" - -#: neutron/agent/linux/external_process.py:229 -#, python-format -msgid "" -"%(service)s for %(resource_type)s with uuid %(uuid)s not found. The process " -"should not have died" -msgstr "" - -#: neutron/agent/linux/external_process.py:249 -#, python-format -msgid "respawning %(service)s for uuid %(uuid)s" -msgstr "" - -#: neutron/agent/linux/external_process.py:255 -msgid "Exiting agent as programmed in check_child_processes_actions" -msgstr "" - -#: neutron/agent/linux/interface.py:154 -#, python-format -msgid "Failed deleting ingress connection state of floatingip %s" -msgstr "" - -#: neutron/agent/linux/interface.py:163 -#, python-format -msgid "Failed deleting egress connection state of floatingip %s" -msgstr "" - -#: neutron/cmd/sanity_check.py:58 -msgid "" -"Nova notifications are enabled, but novaclient is not installed. Either " -"disable nova notifications or install python-novaclient." -msgstr "" -"నోవా నోటిఫికేషన్లను ప్రారంభించి, కానీ novaclient ఇన్స్టాల్ కాలేదు. గాని డిసేబుల్ నోవా నోటిఫికేషన్లు లేదా " -"python-novaclient ఇన్స్టాల్." - -#: neutron/openstack/common/excutils.py:76 -#, python-format -msgid "Original exception being dropped: %s" -msgstr "అసలు మినహాయింపు ఔటైన:%s" - -#: neutron/openstack/common/excutils.py:105 -#, python-format -msgid "Unexpected exception occurred %d time(s)... retrying." -msgstr "ఊహించని మినహాయింపు%d సమయం (s) ఏర్పడింది ... ప్రయత్నించడానికి" - -#: neutron/openstack/common/periodic_task.py:202 -#, python-format -msgid "Error during %(full_task_name)s: %(e)s" -msgstr "సమయంలో లోపం %(full_task_name)s: %(e)s" - -#: neutron/openstack/common/service.py:188 -msgid "Exception during rpc cleanup." -msgstr "RPC క్లీనప్ సమయంలో మినహాయింపు." - -#: neutron/openstack/common/service.py:277 -msgid "Unhandled exception" -msgstr "నిర్వహించని మినహాయింపు" - -#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:279 -#, python-format -msgid "Unable to delete port '%(pname)s' on switch. Exception: %(exp)s" -msgstr "" - -#: neutron/plugins/ml2/drivers/type_gre.py:86 -#, python-format -msgid "Skipping unreasonable gre ID range %(tun_min)s:%(tun_max)s" -msgstr "" - -#: neutron/plugins/ml2/drivers/type_vxlan.py:92 -#, python-format -msgid "Skipping unreasonable VXLAN VNI range %(tun_min)s:%(tun_max)s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:110 -msgid "APIC service agent: failed in reporting state" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:205 -#, python-format -msgid "No such interface (ignored): %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:255 -msgid "APIC service agent: exception in LLDP parsing" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:310 -#, python-format -msgid "APIC service agent: can not get MACaddr for %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:326 -msgid "APIC host agent: failed in reporting state" -msgstr "" - -#: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:386 -msgid "Error in agent event loop" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:55 -#, python-format -msgid "Cannot complete the sync between Neutron and VSD because of error:%s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:102 -msgid "Agent terminated!: Failed to get a datapath." -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:121 -msgid "Agent terminated" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:158 -msgid "Agent failed to create agent config map" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:283 -msgid "Failed reporting state!" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:449 -#, python-format -msgid "No local VLAN available for net-id=%s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:464 -#, python-format -msgid "" -"Cannot provision %(network_type)s network for net-id=%(net_uuid)s - " -"tunneling disabled" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:475 -#, python-format -msgid "" -"Cannot provision %(network_type)s network for net-id=%(net_uuid)s - no " -"bridge for physical_network %(physical_network)s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:485 -#, python-format -msgid "" -"Cannot provision unknown network type %(network_type)s for net-id=" -"%(net_uuid)s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:523 -#, python-format -msgid "" -"Cannot reclaim unknown network type %(network_type)s for net-id=%(net_uuid)s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:657 -#, python-format -msgid "" -"Bridge %(bridge)s for physical network %(physical_network)s does not exist. " -"Agent terminated!" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:735 -msgid "ofport should have a value that can be interpreted as an integer" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:738 -#, python-format -msgid "Failed to set-up %(type)s tunnel port to %(ip)s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:916 -msgid "Error while synchronizing tunnels" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:956 -msgid "Error while processing VIF ports" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:2099 -#, python-format -msgid "" -"Rolling back database changes for gateway device %s because of an error in " -"the NSX backend" -msgstr "" - -#: neutron/scheduler/l3_agent_scheduler.py:281 -#, python-format -msgid "Not enough candidates, a HA router needs at least %s agents" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:62 -#, python-format -msgid "Config file parse error: %s" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:76 -#, python-format -msgid "Ignoring Cisco CSR configuration entry - router IP %s is not valid" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:89 -#, python-format -msgid "Ignoring Cisco CSR for router %(router)s - missing %(field)s setting" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:97 -#, python-format -msgid "" -"Ignoring Cisco CSR for router %s - timeout is not a floating point number" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:113 -#, python-format -msgid "Ignoring Cisco CSR for router %s - local tunnel is not an IP address" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:119 -#, python-format -msgid "Malformed interface name for Cisco CSR router entry - %s" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:155 -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:202 -msgid "No routers found in INI file!" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:174 -#, python-format -msgid "Unable to lookup router ID based on router's public IP (%s) in INI file" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:177 -#, python-format -msgid "No matching routers on host %s" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:211 -#, python-format -msgid "Unable to find host for router %s" -msgstr "" diff --git a/neutron/locale/te_IN/LC_MESSAGES/neutron-log-info.po b/neutron/locale/te_IN/LC_MESSAGES/neutron-log-info.po index f835b0ec795..cde87d0fd32 100644 --- a/neutron/locale/te_IN/LC_MESSAGES/neutron-log-info.po +++ b/neutron/locale/te_IN/LC_MESSAGES/neutron-log-info.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Neutron\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-22 06:06+0000\n" +"POT-Creation-Date: 2014-10-08 06:09+0000\n" "PO-Revision-Date: 2014-08-17 05:19+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: Telugu (India) (http://www.transifex.com/projects/p/neutron/" @@ -20,12 +20,17 @@ msgstr "" "Generated-By: Babel 1.3\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: neutron/policy.py:106 +#: neutron/policy.py:110 #, python-format msgid "" "Inserting policy:%(new_policy)s in place of deprecated policy:%(old_policy)s" msgstr "చేర్చడం విధానం:%(new_policy)s నిరాశపర్చింది విధానం స్థానంలో :%(old_policy)s" +#: neutron/agent/linux/ovs_lib.py:422 +#, python-format +msgid "Port %(port_id)s not present in bridge %(br_name)s" +msgstr "" + #: neutron/common/ipv6_utils.py:62 msgid "IPv6 is not enabled on this system." msgstr "" diff --git a/neutron/locale/te_IN/LC_MESSAGES/neutron-log-warning.po b/neutron/locale/te_IN/LC_MESSAGES/neutron-log-warning.po deleted file mode 100644 index f017560b8e1..00000000000 --- a/neutron/locale/te_IN/LC_MESSAGES/neutron-log-warning.po +++ /dev/null @@ -1,158 +0,0 @@ -# Translations template for neutron. -# Copyright (C) 2014 ORGANIZATION -# This file is distributed under the same license as the neutron project. -# -# Translators: -# rajeshmalisettty , 2014 -msgid "" -msgstr "" -"Project-Id-Version: Neutron\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-14 06:11+0000\n" -"PO-Revision-Date: 2014-07-23 14:51+0000\n" -"Last-Translator: rajeshmalisettty \n" -"Language-Team: Telugu (India) (http://www.transifex.com/projects/p/neutron/" -"language/te_IN/)\n" -"Language: te_IN\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: neutron/policy.py:94 -#, python-format -msgid "" -"Found deprecated policy rule:%s. Please consider upgrading your policy " -"configuration file" -msgstr "" -"చూపిస్తున్న డీప్రికేటెడ్ విధాన నియమం:%s. మీ విధానం ఆకృతీకరణ ఫైలు అప్గ్రేడ్ పరిగణలోకి ఆకృతీకరణ ఫైలు" - -#: neutron/policy.py:137 -#, python-format -msgid "Unable to find data type descriptor for attribute %s" -msgstr "%s యొక్క లక్షణం కోసం డేటా రకం సాధ్యం కాలేదు" - -#: neutron/agent/securitygroups_rpc.py:183 -msgid "" -"security_group_info_for_devices rpc call not supported by the server, " -"falling back to old security_group_rules_for_devices which scales worse." -msgstr "" - -#: neutron/agent/linux/keepalived.py:358 -msgid "" -"A previous instance of keepalived seems to be dead, unable to restart it, a " -"new instance will be spawned" -msgstr "" - -#: neutron/db/l3_agentschedulers_db.py:105 -msgid "" -"Time since last L3 agent reschedule check has exceeded the interval between " -"checks. Waiting before check to allow agents to send a heartbeat in case " -"there was a clock adjustment." -msgstr "" - -#: neutron/db/l3_agentschedulers_db.py:127 -#, python-format -msgid "" -"Rescheduling router %(router)s from agent %(agent)s because the agent did " -"not report to the server in the last %(dead_time)s seconds." -msgstr "" - -#: neutron/db/l3_hamode_db.py:404 -#, python-format -msgid "The router %(router_id)s is bound multiple times on the agent %(host)s" -msgstr "" - -#: neutron/openstack/common/service.py:364 -#, python-format -msgid "pid %d not in child list" -msgstr "pid %d బాల జాబితా లేదు " - -#: neutron/plugins/ml2/drivers/type_tunnel.py:143 -#, python-format -msgid "%(type)s tunnel %(id)s not found" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_sync.py:68 -#, python-format -msgid "Create network postcommit failed for network %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_sync.py:78 -#, python-format -msgid "Create subnet postcommit failed for subnet %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_sync.py:91 -#, python-format -msgid "Create port postcommit failed for port %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_sync.py:110 -#, python-format -msgid "Add interface postcommit failed for port %s" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:299 -#, python-format -msgid "Subnet %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:317 -#, python-format -msgid "Router %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:329 -#, python-format -msgid "" -"Route with destination %(dest)s and nexthop %(hop)s not found in neutron for " -"sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:343 -#, python-format -msgid "Security group %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:354 -#, python-format -msgid "Security group rule %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:364 -#, python-format -msgid "Floating ip %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:376 -#, python-format -msgid "IP allocation for floating ip %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:387 -#, python-format -msgid "Net-partition %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:397 -#, python-format -msgid "VM port %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:290 -#, python-format -msgid "Unable to create tunnel port. Invalid remote IP: %s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:713 -#, python-format -msgid "" -"VIF port: %s has no ofport configured, and might not be able to transmit" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:820 -#, python-format -msgid "Device %s not defined on plugin" -msgstr "" diff --git a/neutron/locale/vi_VN/LC_MESSAGES/neutron-log-info.po b/neutron/locale/vi_VN/LC_MESSAGES/neutron-log-info.po index 19234a53bfd..35144b47c8f 100644 --- a/neutron/locale/vi_VN/LC_MESSAGES/neutron-log-info.po +++ b/neutron/locale/vi_VN/LC_MESSAGES/neutron-log-info.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Neutron\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-22 06:06+0000\n" +"POT-Creation-Date: 2014-10-08 06:09+0000\n" "PO-Revision-Date: 2014-07-18 20:49+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: Vietnamese (Viet Nam) (http://www.transifex.com/projects/p/" @@ -19,12 +19,17 @@ msgstr "" "Generated-By: Babel 1.3\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: neutron/policy.py:106 +#: neutron/policy.py:110 #, python-format msgid "" "Inserting policy:%(new_policy)s in place of deprecated policy:%(old_policy)s" msgstr "" +#: neutron/agent/linux/ovs_lib.py:422 +#, python-format +msgid "Port %(port_id)s not present in bridge %(br_name)s" +msgstr "" + #: neutron/common/ipv6_utils.py:62 msgid "IPv6 is not enabled on this system." msgstr "" diff --git a/neutron/locale/zh_CN/LC_MESSAGES/neutron-log-error.po b/neutron/locale/zh_CN/LC_MESSAGES/neutron-log-error.po deleted file mode 100644 index d23531a4196..00000000000 --- a/neutron/locale/zh_CN/LC_MESSAGES/neutron-log-error.po +++ /dev/null @@ -1,273 +0,0 @@ -# Translations template for neutron. -# Copyright (C) 2014 ORGANIZATION -# This file is distributed under the same license as the neutron project. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Neutron\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-29 06:04+0000\n" -"PO-Revision-Date: 2014-07-21 17:03+0000\n" -"Last-Translator: openstackjenkins \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/neutron/" -"language/zh_CN/)\n" -"Language: zh_CN\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -#: neutron/policy.py:119 -#, python-format -msgid "" -"Backward compatibility unavailable for deprecated policy %s. The policy will " -"not be enforced" -msgstr "被废弃的策略%s不支持功能回退,这个策略将不再被使用" - -#: neutron/policy.py:311 -#, python-format -msgid "Policy check error while calling %s!" -msgstr "" - -#: neutron/agent/l3_ha_agent.py:136 -#, python-format -msgid "Unable to process HA router %s without ha port" -msgstr "" - -#: neutron/agent/linux/external_process.py:229 -#, python-format -msgid "" -"%(service)s for %(resource_type)s with uuid %(uuid)s not found. The process " -"should not have died" -msgstr "" - -#: neutron/agent/linux/external_process.py:249 -#, python-format -msgid "respawning %(service)s for uuid %(uuid)s" -msgstr "" - -#: neutron/agent/linux/external_process.py:255 -msgid "Exiting agent as programmed in check_child_processes_actions" -msgstr "" - -#: neutron/agent/linux/interface.py:154 -#, python-format -msgid "Failed deleting ingress connection state of floatingip %s" -msgstr "" - -#: neutron/agent/linux/interface.py:163 -#, python-format -msgid "Failed deleting egress connection state of floatingip %s" -msgstr "" - -#: neutron/cmd/sanity_check.py:58 -msgid "" -"Nova notifications are enabled, but novaclient is not installed. Either " -"disable nova notifications or install python-novaclient." -msgstr "" - -#: neutron/openstack/common/excutils.py:76 -#, python-format -msgid "Original exception being dropped: %s" -msgstr "正在删除原始异常:%s" - -#: neutron/openstack/common/excutils.py:105 -#, python-format -msgid "Unexpected exception occurred %d time(s)... retrying." -msgstr "意外的异常已发生 %d 次...正在重试。" - -#: neutron/openstack/common/periodic_task.py:202 -#, python-format -msgid "Error during %(full_task_name)s: %(e)s" -msgstr "在 %(full_task_name)s 期间发生错误:%(e)s" - -#: neutron/openstack/common/service.py:188 -msgid "Exception during rpc cleanup." -msgstr "在RPC清除期间发生异常。" - -#: neutron/openstack/common/service.py:277 -msgid "Unhandled exception" -msgstr "存在未处理的异常" - -#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:279 -#, python-format -msgid "Unable to delete port '%(pname)s' on switch. Exception: %(exp)s" -msgstr "" - -#: neutron/plugins/ml2/drivers/type_gre.py:86 -#, python-format -msgid "Skipping unreasonable gre ID range %(tun_min)s:%(tun_max)s" -msgstr "" - -#: neutron/plugins/ml2/drivers/type_vxlan.py:92 -#, python-format -msgid "Skipping unreasonable VXLAN VNI range %(tun_min)s:%(tun_max)s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:110 -msgid "APIC service agent: failed in reporting state" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:205 -#, python-format -msgid "No such interface (ignored): %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:255 -msgid "APIC service agent: exception in LLDP parsing" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:310 -#, python-format -msgid "APIC service agent: can not get MACaddr for %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:326 -msgid "APIC host agent: failed in reporting state" -msgstr "" - -#: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:386 -msgid "Error in agent event loop" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:55 -#, python-format -msgid "Cannot complete the sync between Neutron and VSD because of error:%s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:102 -msgid "Agent terminated!: Failed to get a datapath." -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:121 -msgid "Agent terminated" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:158 -msgid "Agent failed to create agent config map" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:283 -msgid "Failed reporting state!" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:449 -#, python-format -msgid "No local VLAN available for net-id=%s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:464 -#, python-format -msgid "" -"Cannot provision %(network_type)s network for net-id=%(net_uuid)s - " -"tunneling disabled" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:475 -#, python-format -msgid "" -"Cannot provision %(network_type)s network for net-id=%(net_uuid)s - no " -"bridge for physical_network %(physical_network)s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:485 -#, python-format -msgid "" -"Cannot provision unknown network type %(network_type)s for net-id=" -"%(net_uuid)s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:523 -#, python-format -msgid "" -"Cannot reclaim unknown network type %(network_type)s for net-id=%(net_uuid)s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:657 -#, python-format -msgid "" -"Bridge %(bridge)s for physical network %(physical_network)s does not exist. " -"Agent terminated!" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:735 -msgid "ofport should have a value that can be interpreted as an integer" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:738 -#, python-format -msgid "Failed to set-up %(type)s tunnel port to %(ip)s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:916 -msgid "Error while synchronizing tunnels" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:956 -msgid "Error while processing VIF ports" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:2099 -#, python-format -msgid "" -"Rolling back database changes for gateway device %s because of an error in " -"the NSX backend" -msgstr "" - -#: neutron/scheduler/l3_agent_scheduler.py:281 -#, python-format -msgid "Not enough candidates, a HA router needs at least %s agents" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:62 -#, python-format -msgid "Config file parse error: %s" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:76 -#, python-format -msgid "Ignoring Cisco CSR configuration entry - router IP %s is not valid" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:89 -#, python-format -msgid "Ignoring Cisco CSR for router %(router)s - missing %(field)s setting" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:97 -#, python-format -msgid "" -"Ignoring Cisco CSR for router %s - timeout is not a floating point number" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:113 -#, python-format -msgid "Ignoring Cisco CSR for router %s - local tunnel is not an IP address" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:119 -#, python-format -msgid "Malformed interface name for Cisco CSR router entry - %s" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:155 -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:202 -msgid "No routers found in INI file!" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:174 -#, python-format -msgid "Unable to lookup router ID based on router's public IP (%s) in INI file" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:177 -#, python-format -msgid "No matching routers on host %s" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:211 -#, python-format -msgid "Unable to find host for router %s" -msgstr "" diff --git a/neutron/locale/zh_CN/LC_MESSAGES/neutron-log-info.po b/neutron/locale/zh_CN/LC_MESSAGES/neutron-log-info.po index c6e346f22cf..95f1d74629b 100644 --- a/neutron/locale/zh_CN/LC_MESSAGES/neutron-log-info.po +++ b/neutron/locale/zh_CN/LC_MESSAGES/neutron-log-info.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Neutron\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-22 06:06+0000\n" +"POT-Creation-Date: 2014-10-08 06:09+0000\n" "PO-Revision-Date: 2014-08-12 21:40+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: Chinese (China) (http://www.transifex.com/projects/p/neutron/" @@ -19,12 +19,17 @@ msgstr "" "Generated-By: Babel 1.3\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: neutron/policy.py:106 +#: neutron/policy.py:110 #, python-format msgid "" "Inserting policy:%(new_policy)s in place of deprecated policy:%(old_policy)s" msgstr "在被废弃的策略:%(old_policy)s位置上插入策略:%(new_policy)s " +#: neutron/agent/linux/ovs_lib.py:422 +#, python-format +msgid "Port %(port_id)s not present in bridge %(br_name)s" +msgstr "" + #: neutron/common/ipv6_utils.py:62 msgid "IPv6 is not enabled on this system." msgstr "" diff --git a/neutron/locale/zh_CN/LC_MESSAGES/neutron-log-warning.po b/neutron/locale/zh_CN/LC_MESSAGES/neutron-log-warning.po deleted file mode 100644 index a48532d58fd..00000000000 --- a/neutron/locale/zh_CN/LC_MESSAGES/neutron-log-warning.po +++ /dev/null @@ -1,156 +0,0 @@ -# Translations template for neutron. -# Copyright (C) 2014 ORGANIZATION -# This file is distributed under the same license as the neutron project. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Neutron\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-14 06:11+0000\n" -"PO-Revision-Date: 2014-06-30 19:27+0000\n" -"Last-Translator: openstackjenkins \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/neutron/" -"language/zh_CN/)\n" -"Language: zh_CN\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -#: neutron/policy.py:94 -#, python-format -msgid "" -"Found deprecated policy rule:%s. Please consider upgrading your policy " -"configuration file" -msgstr "" - -#: neutron/policy.py:137 -#, python-format -msgid "Unable to find data type descriptor for attribute %s" -msgstr "" - -#: neutron/agent/securitygroups_rpc.py:183 -msgid "" -"security_group_info_for_devices rpc call not supported by the server, " -"falling back to old security_group_rules_for_devices which scales worse." -msgstr "" - -#: neutron/agent/linux/keepalived.py:358 -msgid "" -"A previous instance of keepalived seems to be dead, unable to restart it, a " -"new instance will be spawned" -msgstr "" - -#: neutron/db/l3_agentschedulers_db.py:105 -msgid "" -"Time since last L3 agent reschedule check has exceeded the interval between " -"checks. Waiting before check to allow agents to send a heartbeat in case " -"there was a clock adjustment." -msgstr "" - -#: neutron/db/l3_agentschedulers_db.py:127 -#, python-format -msgid "" -"Rescheduling router %(router)s from agent %(agent)s because the agent did " -"not report to the server in the last %(dead_time)s seconds." -msgstr "" - -#: neutron/db/l3_hamode_db.py:404 -#, python-format -msgid "The router %(router_id)s is bound multiple times on the agent %(host)s" -msgstr "" - -#: neutron/openstack/common/service.py:364 -#, python-format -msgid "pid %d not in child list" -msgstr "pid %d 没有在子代列表中" - -#: neutron/plugins/ml2/drivers/type_tunnel.py:143 -#, python-format -msgid "%(type)s tunnel %(id)s not found" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_sync.py:68 -#, python-format -msgid "Create network postcommit failed for network %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_sync.py:78 -#, python-format -msgid "Create subnet postcommit failed for subnet %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_sync.py:91 -#, python-format -msgid "Create port postcommit failed for port %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_sync.py:110 -#, python-format -msgid "Add interface postcommit failed for port %s" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:299 -#, python-format -msgid "Subnet %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:317 -#, python-format -msgid "Router %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:329 -#, python-format -msgid "" -"Route with destination %(dest)s and nexthop %(hop)s not found in neutron for " -"sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:343 -#, python-format -msgid "Security group %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:354 -#, python-format -msgid "Security group rule %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:364 -#, python-format -msgid "Floating ip %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:376 -#, python-format -msgid "IP allocation for floating ip %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:387 -#, python-format -msgid "Net-partition %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:397 -#, python-format -msgid "VM port %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:290 -#, python-format -msgid "Unable to create tunnel port. Invalid remote IP: %s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:713 -#, python-format -msgid "" -"VIF port: %s has no ofport configured, and might not be able to transmit" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:820 -#, python-format -msgid "Device %s not defined on plugin" -msgstr "" diff --git a/neutron/locale/zh_TW/LC_MESSAGES/neutron-log-info.po b/neutron/locale/zh_TW/LC_MESSAGES/neutron-log-info.po index 5235f251dd8..a3410ed0b3c 100644 --- a/neutron/locale/zh_TW/LC_MESSAGES/neutron-log-info.po +++ b/neutron/locale/zh_TW/LC_MESSAGES/neutron-log-info.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Neutron\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-22 06:06+0000\n" +"POT-Creation-Date: 2014-10-08 06:09+0000\n" "PO-Revision-Date: 2014-07-18 20:49+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/neutron/" @@ -19,12 +19,17 @@ msgstr "" "Generated-By: Babel 1.3\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: neutron/policy.py:106 +#: neutron/policy.py:110 #, python-format msgid "" "Inserting policy:%(new_policy)s in place of deprecated policy:%(old_policy)s" msgstr "" +#: neutron/agent/linux/ovs_lib.py:422 +#, python-format +msgid "Port %(port_id)s not present in bridge %(br_name)s" +msgstr "" + #: neutron/common/ipv6_utils.py:62 msgid "IPv6 is not enabled on this system." msgstr "" diff --git a/neutron/locale/zh_TW/LC_MESSAGES/neutron-log-warning.po b/neutron/locale/zh_TW/LC_MESSAGES/neutron-log-warning.po deleted file mode 100644 index 9ce2cc65c0d..00000000000 --- a/neutron/locale/zh_TW/LC_MESSAGES/neutron-log-warning.po +++ /dev/null @@ -1,156 +0,0 @@ -# Translations template for neutron. -# Copyright (C) 2014 ORGANIZATION -# This file is distributed under the same license as the neutron project. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Neutron\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-14 06:11+0000\n" -"PO-Revision-Date: 2014-06-30 19:27+0000\n" -"Last-Translator: openstackjenkins \n" -"Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/neutron/" -"language/zh_TW/)\n" -"Language: zh_TW\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -#: neutron/policy.py:94 -#, python-format -msgid "" -"Found deprecated policy rule:%s. Please consider upgrading your policy " -"configuration file" -msgstr "" - -#: neutron/policy.py:137 -#, python-format -msgid "Unable to find data type descriptor for attribute %s" -msgstr "" - -#: neutron/agent/securitygroups_rpc.py:183 -msgid "" -"security_group_info_for_devices rpc call not supported by the server, " -"falling back to old security_group_rules_for_devices which scales worse." -msgstr "" - -#: neutron/agent/linux/keepalived.py:358 -msgid "" -"A previous instance of keepalived seems to be dead, unable to restart it, a " -"new instance will be spawned" -msgstr "" - -#: neutron/db/l3_agentschedulers_db.py:105 -msgid "" -"Time since last L3 agent reschedule check has exceeded the interval between " -"checks. Waiting before check to allow agents to send a heartbeat in case " -"there was a clock adjustment." -msgstr "" - -#: neutron/db/l3_agentschedulers_db.py:127 -#, python-format -msgid "" -"Rescheduling router %(router)s from agent %(agent)s because the agent did " -"not report to the server in the last %(dead_time)s seconds." -msgstr "" - -#: neutron/db/l3_hamode_db.py:404 -#, python-format -msgid "The router %(router_id)s is bound multiple times on the agent %(host)s" -msgstr "" - -#: neutron/openstack/common/service.py:364 -#, python-format -msgid "pid %d not in child list" -msgstr "PID %d 不在子項清單中" - -#: neutron/plugins/ml2/drivers/type_tunnel.py:143 -#, python-format -msgid "%(type)s tunnel %(id)s not found" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_sync.py:68 -#, python-format -msgid "Create network postcommit failed for network %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_sync.py:78 -#, python-format -msgid "Create subnet postcommit failed for subnet %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_sync.py:91 -#, python-format -msgid "Create port postcommit failed for port %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_sync.py:110 -#, python-format -msgid "Add interface postcommit failed for port %s" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:299 -#, python-format -msgid "Subnet %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:317 -#, python-format -msgid "Router %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:329 -#, python-format -msgid "" -"Route with destination %(dest)s and nexthop %(hop)s not found in neutron for " -"sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:343 -#, python-format -msgid "Security group %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:354 -#, python-format -msgid "Security group rule %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:364 -#, python-format -msgid "Floating ip %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:376 -#, python-format -msgid "IP allocation for floating ip %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:387 -#, python-format -msgid "Net-partition %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/nuage/syncmanager.py:397 -#, python-format -msgid "VM port %s not found in neutron for sync" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:290 -#, python-format -msgid "Unable to create tunnel port. Invalid remote IP: %s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:713 -#, python-format -msgid "" -"VIF port: %s has no ofport configured, and might not be able to transmit" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:820 -#, python-format -msgid "Device %s not defined on plugin" -msgstr "" From 67962943969bc737a3f680a0defc2fc9df03c429 Mon Sep 17 00:00:00 2001 From: "Sean M. Collins" Date: Mon, 6 Oct 2014 15:47:24 -0400 Subject: [PATCH 072/128] Skip IPv6 Tests in the OpenContrail plugin Similar to the way we are skipping tests in the OneConvergence plugin, introduced by Kevin Benton in 9294de441e684a81f6e802ba0564083f1ad319d6. Change-Id: I1650b0708af73ce63e92c55bc842607bb69efe60 --- .../unit/opencontrail/test_contrail_plugin.py | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/neutron/tests/unit/opencontrail/test_contrail_plugin.py b/neutron/tests/unit/opencontrail/test_contrail_plugin.py index de280f346f8..a9a37be50e6 100644 --- a/neutron/tests/unit/opencontrail/test_contrail_plugin.py +++ b/neutron/tests/unit/opencontrail/test_contrail_plugin.py @@ -214,7 +214,8 @@ class ContrailPluginTestCase(test_plugin.NeutronDbPluginV2TestCase): _plugin_name = ('%s.NeutronPluginContrailCoreV2' % CONTRAIL_PKG_PATH) def setUp(self, plugin=None, ext_mgr=None): - + if 'v6' in self._testMethodName: + self.skipTest("OpenContrail Plugin does not support IPV6.") cfg.CONF.keystone_authtoken = KeyStoneInfo() mock.patch('requests.post').start().side_effect = FAKE_SERVER.request super(ContrailPluginTestCase, self).setUp(self._plugin_name) @@ -231,19 +232,6 @@ class TestContrailSubnetsV2(test_plugin.TestSubnetsV2, def setUp(self): super(TestContrailSubnetsV2, self).setUp() - # Support ipv6 in contrail is planned in Juno - def test_update_subnet_ipv6_attributes(self): - self.skipTest("Contrail isn't supporting ipv6 yet") - - def test_update_subnet_ipv6_inconsistent_address_attribute(self): - self.skipTest("Contrail isn't supporting ipv6 yet") - - def test_update_subnet_ipv6_inconsistent_enable_dhcp(self): - self.skipTest("Contrail isn't supporting ipv6 yet") - - def test_update_subnet_ipv6_inconsistent_ra_attribute(self): - self.skipTest("Contrail isn't supporting ipv6 yet") - def test_delete_subnet_dhcp_port_associated_with_other_subnets(self): self.skipTest("There is no dhcp port in contrail") From 8fac816e407dd87d4c940d2a0c873f78933b8cdc Mon Sep 17 00:00:00 2001 From: Bradley Jones Date: Tue, 5 Aug 2014 17:55:44 +0100 Subject: [PATCH 073/128] Do not assume order of lvm.tun_ofports set elements This fixes the test_fdb_add_flows unit test that breaks with a randomized PYTHONHASHSEED (see the bug report). The test assumed that the lvm.tun_ofports set had elements in a particular order. Found with PYTHONHASHSEED=2455351445 and 1595538922. The fix sorts the actions output string so that it is always sorted when the outputs are compared. Partial-bug: #1348818 Note: There are several other unrelated unit tests that also break with a randomized PYTHONHASHSEED, but they are not addressed here. They will be addressed in separate patches. Change-Id: I86b453a93f3ba09212709caf462cf3bfc5b21ee9 --- .../unit/openvswitch/test_ovs_neutron_agent.py | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py b/neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py index 64ba72a9058..73d62b3dff2 100644 --- a/neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py +++ b/neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py @@ -1049,6 +1049,20 @@ class TestOvsNeutronAgent(base.BaseTestCase): {'2.2.2.2': [[FAKE_MAC, FAKE_IP1], n_const.FLOODING_ENTRY]}}} + + class ActionMatcher(object): + def __init__(self, action_str): + self.ordered = self.order_ports(action_str) + + def order_ports(self, action_str): + halves = action_str.split('output:') + ports = sorted(halves.pop().split(',')) + halves.append(','.join(ports)) + return 'output:'.join(halves) + + def __eq__(self, other): + return self.ordered == self.order_ports(other) + with contextlib.nested( mock.patch.object(self.agent.tun_br, 'deferred'), mock.patch.object(self.agent.tun_br, 'do_action_flows'), @@ -1076,8 +1090,8 @@ class TestOvsNeutronAgent(base.BaseTestCase): 'set_tunnel:seg1,output:2')]), mock.call('mod', [dict(table=constants.FLOOD_TO_TUN, dl_vlan='vlan1', - actions='strip_vlan,' - 'set_tunnel:seg1,output:1,2')]), + actions=ActionMatcher('strip_vlan,' + 'set_tunnel:seg1,output:1,2'))]), ] do_action_flows_fn.assert_has_calls(expected_calls) From 8a08a3cb47d0dd69d4aa2e8fa661d04054fe95ae Mon Sep 17 00:00:00 2001 From: Henry Gessau Date: Tue, 7 Oct 2014 20:38:38 -0400 Subject: [PATCH 074/128] Disable PUT for IPv6 subnet attributes In Juno we are not ready for allowing the IPv6 attributes on a subnet to be updated after the subnet is created, because: - The implementation for supporting updates is incomplete. - Perceived lack of usefulness, no good use cases known yet. - Allowing updates causes more complexity in the code. - Have not tested that radvd, dhcp, etc. behave OK after update. Therefore, for now, we set 'allow_put' to False for the two IPv6 attributes, ipv6_ra_mode and ipv6_address_mode. This prevents the modes from being updated via the PUT:subnets API. Closes-bug: #1378952 Change-Id: Id6ce894d223c91421b62f82d266cfc15fa63ed0e --- neutron/api/v2/attributes.py | 4 +- neutron/db/db_base_plugin_v2.py | 23 +++---- neutron/tests/unit/test_db_plugin.py | 95 +++++++++++++++------------- 3 files changed, 60 insertions(+), 62 deletions(-) diff --git a/neutron/api/v2/attributes.py b/neutron/api/v2/attributes.py index 0cf1816a420..83471f946e6 100644 --- a/neutron/api/v2/attributes.py +++ b/neutron/api/v2/attributes.py @@ -729,11 +729,11 @@ RESOURCE_ATTRIBUTE_MAP = { 'default': True, 'convert_to': convert_to_boolean, 'is_visible': True}, - 'ipv6_ra_mode': {'allow_post': True, 'allow_put': True, + 'ipv6_ra_mode': {'allow_post': True, 'allow_put': False, 'default': ATTR_NOT_SPECIFIED, 'validate': {'type:values': constants.IPV6_MODES}, 'is_visible': True}, - 'ipv6_address_mode': {'allow_post': True, 'allow_put': True, + 'ipv6_address_mode': {'allow_post': True, 'allow_put': False, 'default': ATTR_NOT_SPECIFIED, 'validate': {'type:values': constants.IPV6_MODES}, diff --git a/neutron/db/db_base_plugin_v2.py b/neutron/db/db_base_plugin_v2.py index 155b9f3995d..9582efed3c4 100644 --- a/neutron/db/db_base_plugin_v2.py +++ b/neutron/db/db_base_plugin_v2.py @@ -740,24 +740,17 @@ class NeutronDbPluginV2(neutron_plugin_base_v2.NeutronPluginBaseV2, raise n_exc.InvalidSharedSetting(network=original.name) def _validate_ipv6_attributes(self, subnet, cur_subnet): + if cur_subnet: + self._validate_ipv6_update_dhcp(subnet, cur_subnet) + return ra_mode_set = attributes.is_attr_set(subnet.get('ipv6_ra_mode')) address_mode_set = attributes.is_attr_set( subnet.get('ipv6_address_mode')) - if cur_subnet: - ra_mode = (subnet['ipv6_ra_mode'] if ra_mode_set - else cur_subnet['ipv6_ra_mode']) - addr_mode = (subnet['ipv6_address_mode'] if address_mode_set - else cur_subnet['ipv6_address_mode']) - if ra_mode_set or address_mode_set: - # Check that updated subnet ipv6 attributes do not conflict - self._validate_ipv6_combination(ra_mode, addr_mode) - self._validate_ipv6_update_dhcp(subnet, cur_subnet) - else: - self._validate_ipv6_dhcp(ra_mode_set, address_mode_set, - subnet['enable_dhcp']) - if ra_mode_set and address_mode_set: - self._validate_ipv6_combination(subnet['ipv6_ra_mode'], - subnet['ipv6_address_mode']) + self._validate_ipv6_dhcp(ra_mode_set, address_mode_set, + subnet['enable_dhcp']) + if ra_mode_set and address_mode_set: + self._validate_ipv6_combination(subnet['ipv6_ra_mode'], + subnet['ipv6_address_mode']) if address_mode_set: self._validate_eui64_applicable(subnet) diff --git a/neutron/tests/unit/test_db_plugin.py b/neutron/tests/unit/test_db_plugin.py index a391eefcc7d..f390be5afc9 100644 --- a/neutron/tests/unit/test_db_plugin.py +++ b/neutron/tests/unit/test_db_plugin.py @@ -15,6 +15,7 @@ import contextlib import copy +import itertools import mock from oslo.config import cfg @@ -3038,15 +3039,48 @@ class TestSubnetsV2(NeutronDbPluginV2TestCase): res = subnet_req.get_response(self.api) self.assertEqual(res.status_int, webob.exc.HTTPClientError.code) - def test_create_subnet_ipv6_attributes(self): - gateway_ip = 'fe80::1' - cidr = 'fe80::/64' + def _test_validate_subnet_ipv6_modes(self, cur_subnet=None, + expect_success=True, **modes): + plugin = manager.NeutronManager.get_plugin() + ctx = context.get_admin_context(load_admin_roles=False) + new_subnet = {'ip_version': 6, + 'cidr': 'fe80::/64', + 'enable_dhcp': True} + for mode, value in modes.items(): + new_subnet[mode] = value + if expect_success: + plugin._validate_subnet(ctx, new_subnet, cur_subnet) + else: + self.assertRaises(n_exc.InvalidInput, plugin._validate_subnet, + ctx, new_subnet, cur_subnet) - for mode in constants.IPV6_MODES: - self._test_create_subnet(gateway_ip=gateway_ip, - cidr=cidr, ip_version=6, - ipv6_ra_mode=mode, - ipv6_address_mode=mode) + def test_create_subnet_ipv6_ra_modes(self): + # Test all RA modes with no address mode specified + for ra_mode in constants.IPV6_MODES: + self._test_validate_subnet_ipv6_modes( + ipv6_ra_mode=ra_mode) + + def test_create_subnet_ipv6_addr_modes(self): + # Test all address modes with no RA mode specified + for addr_mode in constants.IPV6_MODES: + self._test_validate_subnet_ipv6_modes( + ipv6_address_mode=addr_mode) + + def test_create_subnet_ipv6_same_ra_and_addr_modes(self): + # Test all ipv6 modes with ra_mode==addr_mode + for ipv6_mode in constants.IPV6_MODES: + self._test_validate_subnet_ipv6_modes( + ipv6_ra_mode=ipv6_mode, + ipv6_address_mode=ipv6_mode) + + def test_create_subnet_ipv6_different_ra_and_addr_modes(self): + # Test all ipv6 modes with ra_mode!=addr_mode + for ra_mode, addr_mode in itertools.permutations( + constants.IPV6_MODES, 2): + self._test_validate_subnet_ipv6_modes( + expect_success=not (ra_mode and addr_mode), + ipv6_ra_mode=ra_mode, + ipv6_address_mode=addr_mode) def test_create_subnet_ipv6_out_of_cidr_global(self): gateway_ip = '2000::1' @@ -3108,31 +3142,6 @@ class TestSubnetsV2(NeutronDbPluginV2TestCase): self.assertEqual(ctx_manager.exception.code, webob.exc.HTTPClientError.code) - def test_create_subnet_invalid_ipv6_combination(self): - gateway_ip = 'fe80::1' - cidr = 'fe80::/80' - with testlib_api.ExpectedException( - webob.exc.HTTPClientError) as ctx_manager: - self._test_create_subnet(gateway_ip=gateway_ip, - cidr=cidr, ip_version=6, - ipv6_ra_mode='stateful', - ipv6_address_mode='stateless') - self.assertEqual(ctx_manager.exception.code, - webob.exc.HTTPClientError.code) - - def test_create_subnet_ipv6_single_attribute_set(self): - gateway_ip = 'fe80::1' - cidr = 'fe80::/64' - for mode in constants.IPV6_MODES: - self._test_create_subnet(gateway_ip=gateway_ip, - cidr=cidr, ip_version=6, - ipv6_ra_mode=None, - ipv6_address_mode=mode) - self._test_create_subnet(gateway_ip=gateway_ip, - cidr=cidr, ip_version=6, - ipv6_ra_mode=mode, - ipv6_address_mode=None) - def test_create_subnet_ipv6_ra_mode_ip_version_4(self): cidr = '10.0.2.0/24' with testlib_api.ExpectedException( @@ -3312,7 +3321,7 @@ class TestSubnetsV2(NeutronDbPluginV2TestCase): self.assertEqual(res.status_int, webob.exc.HTTPConflict.code) - def test_update_subnet_ipv6_attributes(self): + def test_update_subnet_ipv6_attributes_fails(self): with self.subnet(ip_version=6, cidr='fe80::/64', ipv6_ra_mode=constants.IPV6_SLAAC, ipv6_address_mode=constants.IPV6_SLAAC) as subnet: @@ -3320,16 +3329,13 @@ class TestSubnetsV2(NeutronDbPluginV2TestCase): 'ipv6_address_mode': constants.DHCPV6_STATEFUL}} req = self.new_update_request('subnets', data, subnet['subnet']['id']) - res = self.deserialize(self.fmt, req.get_response(self.api)) - self.assertEqual(res['subnet']['ipv6_ra_mode'], - data['subnet']['ipv6_ra_mode']) - self.assertEqual(res['subnet']['ipv6_address_mode'], - data['subnet']['ipv6_address_mode']) + res = req.get_response(self.api) + self.assertEqual(res.status_int, + webob.exc.HTTPClientError.code) - def test_update_subnet_ipv6_inconsistent_ra_attribute(self): + def test_update_subnet_ipv6_ra_mode_fails(self): with self.subnet(ip_version=6, cidr='fe80::/64', - ipv6_ra_mode=constants.IPV6_SLAAC, - ipv6_address_mode=constants.IPV6_SLAAC) as subnet: + ipv6_ra_mode=constants.IPV6_SLAAC) as subnet: data = {'subnet': {'ipv6_ra_mode': constants.DHCPV6_STATEFUL}} req = self.new_update_request('subnets', data, subnet['subnet']['id']) @@ -3337,9 +3343,8 @@ class TestSubnetsV2(NeutronDbPluginV2TestCase): self.assertEqual(res.status_int, webob.exc.HTTPClientError.code) - def test_update_subnet_ipv6_inconsistent_address_attribute(self): + def test_update_subnet_ipv6_ra_mode_fails(self): with self.subnet(ip_version=6, cidr='fe80::/64', - ipv6_ra_mode=constants.IPV6_SLAAC, ipv6_address_mode=constants.IPV6_SLAAC) as subnet: data = {'subnet': {'ipv6_address_mode': constants.DHCPV6_STATEFUL}} req = self.new_update_request('subnets', data, @@ -3348,7 +3353,7 @@ class TestSubnetsV2(NeutronDbPluginV2TestCase): self.assertEqual(res.status_int, webob.exc.HTTPClientError.code) - def test_update_subnet_ipv6_inconsistent_enable_dhcp(self): + def test_update_subnet_ipv6_cannot_disable_dhcp(self): with self.subnet(ip_version=6, cidr='fe80::/64', ipv6_ra_mode=constants.IPV6_SLAAC, ipv6_address_mode=constants.IPV6_SLAAC) as subnet: From dd35d64812fd0ad02e7a00432073d141049e7107 Mon Sep 17 00:00:00 2001 From: Mark McClain Date: Wed, 8 Oct 2014 15:38:19 -0400 Subject: [PATCH 075/128] update ml2_migration to reflect optional methods This change conditionally executes the schema methods for versions that support them. Change-Id: I8a51ac04e62dfcfe1e0a2e69a17664d154f0d1d7 Closes-Bug: #1378732 --- neutron/db/migration/migrate_to_ml2.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/neutron/db/migration/migrate_to_ml2.py b/neutron/db/migration/migrate_to_ml2.py index 97a18701532..fc5fa421674 100755 --- a/neutron/db/migration/migrate_to_ml2.py +++ b/neutron/db/migration/migrate_to_ml2.py @@ -132,7 +132,8 @@ class BaseMigrateToMl2(object): metadata = sa.MetaData() check_db_schema_version(engine, metadata) - self.define_ml2_tables(metadata) + if hasattr(self, 'define_ml2_tables'): + self.define_ml2_tables(metadata) # Autoload the ports table to ensure that foreign keys to it and # the network table can be created for the new tables. @@ -145,7 +146,8 @@ class BaseMigrateToMl2(object): self.migrate_vlan_allocations(engine) self.migrate_port_bindings(engine, metadata) - self.drop_old_tables(engine, save_tables) + if hasattr(self, 'drop_old_tables'): + self.drop_old_tables(engine, save_tables) def migrate_segment_dict(self, binding): binding['id'] = uuidutils.generate_uuid() From 8923c6fae229c8e3dd85972811989698e482d7f6 Mon Sep 17 00:00:00 2001 From: Carl Baldwin Date: Thu, 2 Oct 2014 17:02:59 +0000 Subject: [PATCH 076/128] Remove all_routers argument from _process_routers There is no code left that passes True to this argument. It is dead code and it should be removed. Change-Id: I55f71a5c0b96e530e45f2a6463978e8611cbc537 --- neutron/agent/l3_agent.py | 9 +++------ neutron/services/vpn/agent.py | 4 ++-- neutron/tests/unit/services/vpn/test_vpn_agent.py | 2 +- 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/neutron/agent/l3_agent.py b/neutron/agent/l3_agent.py index 9f117635bb4..4e052a373d2 100644 --- a/neutron/agent/l3_agent.py +++ b/neutron/agent/l3_agent.py @@ -1781,7 +1781,7 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback, LOG.debug(_('Got router added to agent :%r'), payload) self.routers_updated(context, payload) - def _process_routers(self, routers, all_routers=False): + def _process_routers(self, routers): pool = eventlet.GreenPool() if (self.conf.external_network_bridge and not ip_lib.device_exists(self.conf.external_network_bridge)): @@ -1795,11 +1795,8 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback, # routers which should be removed. # If routers are from server side notification, we seek them # from subset of incoming routers and ones we have now. - if all_routers: - prev_router_ids = set(self.router_info) - else: - prev_router_ids = set(self.router_info) & set( - [router['id'] for router in routers]) + prev_router_ids = set(self.router_info) & set( + [router['id'] for router in routers]) cur_router_ids = set() for r in routers: # If namespaces are disabled, only process the router associated diff --git a/neutron/services/vpn/agent.py b/neutron/services/vpn/agent.py index 284e02aacd6..12e969df9b5 100644 --- a/neutron/services/vpn/agent.py +++ b/neutron/services/vpn/agent.py @@ -130,13 +130,13 @@ class VPNAgent(l3_agent.L3NATAgentWithStateReport): for device in self.devices: device.destroy_router(router_id) - def _process_routers(self, routers, all_routers=False): + def _process_routers(self, routers): """Router sync event. This method overwrites parent class method. :param routers: list of routers """ - super(VPNAgent, self)._process_routers(routers, all_routers) + super(VPNAgent, self)._process_routers(routers) for device in self.devices: device.sync(self.context, routers) diff --git a/neutron/tests/unit/services/vpn/test_vpn_agent.py b/neutron/tests/unit/services/vpn/test_vpn_agent.py index f360dfaa1fb..4cde577d236 100644 --- a/neutron/tests/unit/services/vpn/test_vpn_agent.py +++ b/neutron/tests/unit/services/vpn/test_vpn_agent.py @@ -193,5 +193,5 @@ class TestVPNAgent(base.BaseTestCase): device = mock.Mock() self.agent.devices = [device] - self.agent._process_routers(routers, False) + self.agent._process_routers(routers) device.sync.assert_called_once_with(mock.ANY, routers) From 93012915a3445a8ac8a0b30b702df30febbbb728 Mon Sep 17 00:00:00 2001 From: Mark McClain Date: Wed, 8 Oct 2014 18:49:20 +0000 Subject: [PATCH 077/128] Add database relationship between router and ports Add an explicit schema relationship between a router and its ports. This change ensures referential integrity among the entities and prevents orphaned ports. Change-Id: I09e8a694cdff7f64a642a39b45cbd12422132806 Closes-Bug: #1378866 --- neutron/db/l3_db.py | 159 ++++++++++++------ neutron/db/l3_dvr_db.py | 119 ++++++++----- .../544673ac99ab_add_router_port_table.py | 65 +++++++ .../alembic_migrations/versions/HEAD | 2 +- 4 files changed, 249 insertions(+), 96 deletions(-) create mode 100644 neutron/db/migration/alembic_migrations/versions/544673ac99ab_add_router_port_table.py diff --git a/neutron/db/l3_db.py b/neutron/db/l3_db.py index 709c99cb0dd..0f8a56c0efb 100644 --- a/neutron/db/l3_db.py +++ b/neutron/db/l3_db.py @@ -47,6 +47,26 @@ API_TO_DB_COLUMN_MAP = {'port_id': 'fixed_port_id'} CORE_ROUTER_ATTRS = ('id', 'name', 'tenant_id', 'admin_state_up', 'status') +class RouterPort(model_base.BASEV2): + router_id = sa.Column( + sa.String(36), + sa.ForeignKey('routers.id', ondelete="CASCADE"), + primary_key=True) + port_id = sa.Column( + sa.String(36), + sa.ForeignKey('ports.id', ondelete="CASCADE"), + primary_key=True) + # The port_type attribute is redundant as the port table already specifies + # it in DEVICE_OWNER.However, this redundancy enables more efficient + # queries on router ports, and also prevents potential error-prone + # conditions which might originate from users altering the DEVICE_OWNER + # property of router ports. + port_type = sa.Column(sa.String(255)) + port = orm.relationship( + models_v2.Port, + backref=orm.backref('routerport', uselist=False, cascade="all,delete")) + + class Router(model_base.BASEV2, models_v2.HasId, models_v2.HasTenant): """Represents a v2 neutron router.""" @@ -55,6 +75,10 @@ class Router(model_base.BASEV2, models_v2.HasId, models_v2.HasTenant): admin_state_up = sa.Column(sa.Boolean) gw_port_id = sa.Column(sa.String(36), sa.ForeignKey('ports.id')) gw_port = orm.relationship(models_v2.Port, lazy='joined') + attached_ports = orm.relationship( + RouterPort, + backref='router', + lazy='dynamic') class FloatingIP(model_base.BASEV2, models_v2.HasId, models_v2.HasTenant): @@ -76,6 +100,7 @@ class FloatingIP(model_base.BASEV2, models_v2.HasId, models_v2.HasTenant): # aysnchronous backend is unavailable when the floating IP is disassociated last_known_router_id = sa.Column(sa.String(36)) status = sa.Column(sa.String(16)) + router = orm.relationship(Router, backref='floating_ips') class L3_NAT_dbonly_mixin(l3.RouterPluginBase): @@ -259,7 +284,13 @@ class L3_NAT_dbonly_mixin(l3.RouterPluginBase): with context.session.begin(subtransactions=True): router.gw_port = self._core_plugin._get_port(context.elevated(), gw_port['id']) + router_port = RouterPort( + router_id=router.id, + port_id=gw_port['id'], + port_type=DEVICE_OWNER_ROUTER_GW + ) context.session.add(router) + context.session.add(router_port) def _validate_gw_info(self, context, gw_port, info): network_id = info['network_id'] if info else None @@ -281,11 +312,12 @@ class L3_NAT_dbonly_mixin(l3.RouterPluginBase): raise l3.RouterExternalGatewayInUseByFloatingIp( router_id=router_id, net_id=router.gw_port['network_id']) with context.session.begin(subtransactions=True): - gw_port_id = router.gw_port['id'] + gw_port = router.gw_port router.gw_port = None context.session.add(router) + context.session.expire(gw_port) self._core_plugin.delete_port( - admin_ctx, gw_port_id, l3_port_check=False) + admin_ctx, gw_port['id'], l3_port_check=False) def _create_gw_port(self, context, router_id, router, new_network): new_valid_gw_port_attachment = ( @@ -295,7 +327,7 @@ class L3_NAT_dbonly_mixin(l3.RouterPluginBase): subnets = self._core_plugin._get_subnets_by_network(context, new_network) for subnet in subnets: - self._check_for_dup_router_subnet(context, router_id, + self._check_for_dup_router_subnet(context, router, new_network, subnet['id'], subnet['cidr']) self._create_router_gw_port(context, router, new_network) @@ -317,11 +349,8 @@ class L3_NAT_dbonly_mixin(l3.RouterPluginBase): admin_ctx, filters={'router_id': [router_id]}): raise l3.RouterInUse(router_id=router_id) device_owner = self._get_device_owner(context, router) - device_filter = {'device_id': [router_id], - 'device_owner': [device_owner]} - port_count = self._core_plugin.get_ports_count( - admin_ctx, filters=device_filter) - if port_count: + if any(rp.port_type == device_owner + for rp in router.attached_ports.all()): raise l3.RouterInUse(router_id=router_id) return router @@ -335,18 +364,13 @@ class L3_NAT_dbonly_mixin(l3.RouterPluginBase): if vpnservice: vpnservice.check_router_in_use(context, id) + router_ports = router.attached_ports.all() + # Set the router's gw_port to None to avoid a constraint violation. + router.gw_port = None + for rp in router_ports: + self._core_plugin._delete_port(context.elevated(), rp.port.id) context.session.delete(router) - # Delete the gw port after the router has been removed to - # avoid a constraint violation. - device_filter = {'device_id': [id], - 'device_owner': [DEVICE_OWNER_ROUTER_GW]} - ports = self._core_plugin.get_ports(context.elevated(), - filters=device_filter) - if ports: - self._core_plugin._delete_port(context.elevated(), - ports[0]['id']) - def get_router(self, context, id, fields=None): router = self._get_router(context, id) return self._make_router_dict(router, fields) @@ -367,15 +391,13 @@ class L3_NAT_dbonly_mixin(l3.RouterPluginBase): return self._get_collection_count(context, Router, filters=filters) - def _check_for_dup_router_subnet(self, context, router_id, + def _check_for_dup_router_subnet(self, context, router, network_id, subnet_id, subnet_cidr): try: - rport_qry = context.session.query(models_v2.Port) - rports = rport_qry.filter_by(device_id=router_id) # It's possible these ports are on the same network, but # different subnets. new_ipnet = netaddr.IPNetwork(subnet_cidr) - for p in rports: + for p in (rp.port for rp in router.attached_ports): for ip in p['fixed_ips']: if ip['subnet_id'] == subnet_id: msg = (_("Router already has a port on subnet %s") @@ -415,7 +437,7 @@ class L3_NAT_dbonly_mixin(l3.RouterPluginBase): raise n_exc.BadRequest(resource='router', msg=msg) return port_id_specified, subnet_id_specified - def _add_interface_by_port(self, context, router_id, port_id, owner): + def _add_interface_by_port(self, context, router, port_id, owner): with context.session.begin(subtransactions=True): port = self._core_plugin._get_port(context, port_id) if port['device_id']: @@ -428,19 +450,19 @@ class L3_NAT_dbonly_mixin(l3.RouterPluginBase): raise n_exc.BadRequest(resource='router', msg=msg) subnet_id = fixed_ips[0]['subnet_id'] subnet = self._core_plugin._get_subnet(context, subnet_id) - self._check_for_dup_router_subnet(context, router_id, + self._check_for_dup_router_subnet(context, router, port['network_id'], subnet['id'], subnet['cidr']) - port.update({'device_id': router_id, 'device_owner': owner}) + port.update({'device_id': router.id, 'device_owner': owner}) return port - def _add_interface_by_subnet(self, context, router_id, subnet_id, owner): + def _add_interface_by_subnet(self, context, router, subnet_id, owner): subnet = self._core_plugin._get_subnet(context, subnet_id) if not subnet['gateway_ip']: msg = _('Subnet for router interface must have a gateway IP') raise n_exc.BadRequest(resource='router', msg=msg) - self._check_for_dup_router_subnet(context, router_id, + self._check_for_dup_router_subnet(context, router, subnet['network_id'], subnet_id, subnet['cidr']) @@ -453,7 +475,7 @@ class L3_NAT_dbonly_mixin(l3.RouterPluginBase): 'fixed_ips': [fixed_ip], 'mac_address': attributes.ATTR_NOT_SPECIFIED, 'admin_state_up': True, - 'device_id': router_id, + 'device_id': router.id, 'device_owner': owner, 'name': ''}}) @@ -468,18 +490,27 @@ class L3_NAT_dbonly_mixin(l3.RouterPluginBase): } def add_router_interface(self, context, router_id, interface_info): + router = self._get_router(context, router_id) add_by_port, add_by_sub = self._validate_interface_info(interface_info) device_owner = self._get_device_owner(context, router_id) if add_by_port: port = self._add_interface_by_port( - context, router_id, interface_info['port_id'], device_owner) + context, router, interface_info['port_id'], device_owner) elif add_by_sub: port = self._add_interface_by_subnet( - context, router_id, interface_info['subnet_id'], device_owner) + context, router, interface_info['subnet_id'], device_owner) + + with context.session.begin(subtransactions=True): + router_port = RouterPort( + port_id=port['id'], + router_id=router.id, + port_type=device_owner + ) + context.session.add(router_port) return self._make_router_interface_info( - router_id, port['tenant_id'], port['id'], + router.id, port['tenant_id'], port['id'], port['fixed_ips'][0]['subnet_id']) def _confirm_router_interface_not_in_use(self, context, router_id, @@ -494,9 +525,15 @@ class L3_NAT_dbonly_mixin(l3.RouterPluginBase): def _remove_interface_by_port(self, context, router_id, port_id, subnet_id, owner): - port_db = self._core_plugin._get_port(context, port_id) - if not (port_db['device_owner'] == owner and - port_db['device_id'] == router_id): + qry = context.session.query(RouterPort) + qry = qry.filter_by( + port_id=port_id, + router_id=router_id, + port_type=owner + ) + try: + port_db = qry.one().port + except exc.NoResultFound: raise l3.RouterInterfaceNotFound(router_id=router_id, port_id=port_id) port_subnet_id = port_db['fixed_ips'][0]['subnet_id'] @@ -517,11 +554,12 @@ class L3_NAT_dbonly_mixin(l3.RouterPluginBase): subnet = self._core_plugin._get_subnet(context, subnet_id) try: - rport_qry = context.session.query(models_v2.Port) - ports = rport_qry.filter_by( - device_id=router_id, - device_owner=owner, - network_id=subnet['network_id']) + rport_qry = context.session.query(models_v2.Port).join(RouterPort) + ports = rport_qry.filter( + RouterPort.router_id == router_id, + RouterPort.port_type == owner, + models_v2.Port.network_id == subnet['network_id'] + ) for p in ports: if p['fixed_ips'][0]['subnet_id'] == subnet_id: @@ -570,10 +608,12 @@ class L3_NAT_dbonly_mixin(l3.RouterPluginBase): return self._fields(res, fields) def _get_interface_ports_for_network(self, context, network_id): - router_intf_qry = context.session.query(models_v2.Port) - return router_intf_qry.filter_by( - network_id=network_id, - device_owner=DEVICE_OWNER_ROUTER_INTF) + router_intf_qry = context.session.query(RouterPort) + router_intf_qry = router_intf_qry.join(models_v2.Port) + return router_intf_qry.filter( + models_v2.Port.network_id == network_id, + RouterPort.port_type == DEVICE_OWNER_ROUTER_INTF + ) def _get_router_for_floatingip(self, context, internal_port, internal_subnet_id, @@ -588,16 +628,16 @@ class L3_NAT_dbonly_mixin(l3.RouterPluginBase): router_intf_ports = self._get_interface_ports_for_network( context, internal_port['network_id']) - for intf_p in router_intf_ports: - if intf_p['fixed_ips'][0]['subnet_id'] == internal_subnet_id: - router_id = intf_p['device_id'] - router_gw_qry = context.session.query(models_v2.Port) - has_gw_port = router_gw_qry.filter_by( - network_id=external_network_id, - device_id=router_id, - device_owner=DEVICE_OWNER_ROUTER_GW).count() - if has_gw_port: - return router_id + # This joins on port_id so is not a cross-join + routerport_qry = router_intf_ports.join(models_v2.IPAllocation) + routerport_qry = routerport_qry.filter( + models_v2.IPAllocation.subnet_id == internal_subnet_id + ) + + router_port = routerport_qry.first() + + if router_port and router_port.router.gw_port: + return router_port.router.id raise l3.ExternalGatewayForFloatingIPNotFound( subnet_id=internal_subnet_id, @@ -936,9 +976,16 @@ class L3_NAT_dbonly_mixin(l3.RouterPluginBase): device_owners = device_owners or [DEVICE_OWNER_ROUTER_INTF] if not router_ids: return [] - filters = {'device_id': router_ids, - 'device_owner': device_owners} - interfaces = self._core_plugin.get_ports(context, filters) + qry = context.session.query(RouterPort) + qry = qry.filter( + Router.id.in_(router_ids), + RouterPort.port_type.in_(device_owners) + ) + + # TODO(markmcclain): This is suboptimal but was left to reduce + # changeset size since it is late in cycle + ports = [rp.port.id for rp in qry] + interfaces = self._core_plugin.get_ports(context, {'id': ports}) if interfaces: self._populate_subnet_for_ports(context, interfaces) return interfaces diff --git a/neutron/db/l3_dvr_db.py b/neutron/db/l3_dvr_db.py index 4b605ffbf97..b6e826b8c1d 100644 --- a/neutron/db/l3_dvr_db.py +++ b/neutron/db/l3_dvr_db.py @@ -81,13 +81,11 @@ class L3_NAT_with_dvr_db_mixin(l3_db.L3_NAT_db_mixin, self, context, router_id, router_db, data, gw_info): """Update the model to support the dvr case of a router.""" if not attributes.is_attr_set(gw_info) and data.get('distributed'): - admin_ctx = context.elevated() - filters = {'device_id': [router_id], - 'device_owner': [l3_const.DEVICE_OWNER_ROUTER_INTF]} - ports = self._core_plugin.get_ports(admin_ctx, filters=filters) - for p in ports: - port_db = self._core_plugin._get_port(admin_ctx, p['id']) - port_db.update({'device_owner': DEVICE_OWNER_DVR_INTERFACE}) + old_owner = l3_const.DEVICE_OWNER_ROUTER_INTF + new_owner = DEVICE_OWNER_DVR_INTERFACE + for rp in router_db.attached_ports.filter_by(port_type=old_owner): + rp.port_type = new_owner + rp.port.device_owner = new_owner def _update_router_db(self, context, router_id, data, gw_info): with context.session.begin(subtransactions=True): @@ -119,7 +117,7 @@ class L3_NAT_with_dvr_db_mixin(l3_db.L3_NAT_db_mixin, router, new_network) if router.extra_attributes.distributed and router.gw_port: snat_p_list = self.create_snat_intf_ports_if_not_exists( - context.elevated(), router['id']) + context.elevated(), router) if not snat_p_list: LOG.debug("SNAT interface ports not created: %s", snat_p_list) @@ -134,12 +132,15 @@ class L3_NAT_with_dvr_db_mixin(l3_db.L3_NAT_db_mixin, self)._get_device_owner(context, router) def _get_interface_ports_for_network(self, context, network_id): - router_intf_qry = (context.session.query(models_v2.Port). - filter_by(network_id=network_id)) - return (router_intf_qry. - filter(models_v2.Port.device_owner.in_( - [l3_const.DEVICE_OWNER_ROUTER_INTF, - DEVICE_OWNER_DVR_INTERFACE]))) + router_intf_qry = context.session.query(l3_db.RouterPort) + router_intf_qry = router_intf_qry.join(models_v2.Port) + + return router_intf_qry.filter( + models_v2.Port.network_id == network_id, + l3_db.RouterPort.port_type.in_( + [l3_const.DEVICE_OWNER_ROUTER_INTF, DEVICE_OWNER_DVR_INTERFACE] + ) + ) def _update_fip_assoc(self, context, fip, floatingip_db, external_port): previous_router_id = floatingip_db.router_id @@ -208,14 +209,22 @@ class L3_NAT_with_dvr_db_mixin(l3_db.L3_NAT_db_mixin, if add_by_port: port = self._add_interface_by_port( - context, router_id, interface_info['port_id'], device_owner) + context, router, interface_info['port_id'], device_owner) elif add_by_sub: port = self._add_interface_by_subnet( - context, router_id, interface_info['subnet_id'], device_owner) + context, router, interface_info['subnet_id'], device_owner) + + with context.session.begin(subtransactions=True): + router_port = l3_db.RouterPort( + port_id=port['id'], + router_id=router.id, + port_type=device_owner + ) + context.session.add(router_port) if router.extra_attributes.distributed and router.gw_port: self.add_csnat_router_interface_port( - context.elevated(), router_id, port['network_id'], + context.elevated(), router, port['network_id'], port['fixed_ips'][0]['subnet_id']) router_interface_info = self._make_router_interface_info( @@ -257,9 +266,16 @@ class L3_NAT_with_dvr_db_mixin(l3_db.L3_NAT_db_mixin, """Query router interfaces that relate to list of router_ids.""" if not router_ids: return [] - filters = {'device_id': router_ids, - 'device_owner': [DEVICE_OWNER_DVR_SNAT]} - interfaces = self._core_plugin.get_ports(context, filters) + qry = context.session.query(l3_db.RouterPort) + qry = qry.filter( + l3_db.RouterPort.router_id.in_(router_ids), + l3_db.RouterPort.port_type == DEVICE_OWNER_DVR_SNAT + ) + + # TODO(markmcclain): This is suboptimal but was left to reduce + # changeset size since it is late in cycle + ports = [rp.port.id for rp in qry] + interfaces = self._core_plugin.get_ports(context, {'id': ports}) LOG.debug("Return the SNAT ports: %s", interfaces) if interfaces: self._populate_subnet_for_ports(context, interfaces) @@ -447,12 +463,19 @@ class L3_NAT_with_dvr_db_mixin(l3_db.L3_NAT_db_mixin, def get_snat_interface_ports_for_router(self, context, router_id): """Return all existing snat_router_interface ports.""" - filters = {'device_id': [router_id], - 'device_owner': [DEVICE_OWNER_DVR_SNAT]} - return self._core_plugin.get_ports(context, filters) + # TODO(markmcclain): This is suboptimal but was left to reduce + # changeset size since it is late in cycle + qry = context.session.query(l3_db.RouterPort) + qry = qry.filter_by( + router_id=router_id, + port_type=DEVICE_OWNER_DVR_SNAT + ) + + ports = [rp.port.id for rp in qry] + return self._core_plugin.get_ports(context, {'id': ports}) def add_csnat_router_interface_port( - self, context, router_id, network_id, subnet_id, do_pop=True): + self, context, router, network_id, subnet_id, do_pop=True): """Add SNAT interface to the specified router and subnet.""" snat_port = self._core_plugin.create_port( context, @@ -460,19 +483,27 @@ class L3_NAT_with_dvr_db_mixin(l3_db.L3_NAT_db_mixin, 'network_id': network_id, 'mac_address': attributes.ATTR_NOT_SPECIFIED, 'fixed_ips': [{'subnet_id': subnet_id}], - 'device_id': router_id, + 'device_id': router.id, 'device_owner': DEVICE_OWNER_DVR_SNAT, 'admin_state_up': True, 'name': ''}}) if not snat_port: msg = _("Unable to create the SNAT Interface Port") raise n_exc.BadRequest(resource='router', msg=msg) - elif do_pop: + + with context.session.begin(subtransactions=True): + router_port = l3_db.RouterPort( + port_id=snat_port['id'], + router_id=router.id, + port_type=DEVICE_OWNER_DVR_SNAT + ) + context.session.add(router_port) + + if do_pop: return self._populate_subnet_for_ports(context, [snat_port]) return snat_port - def create_snat_intf_ports_if_not_exists( - self, context, router_id): + def create_snat_intf_ports_if_not_exists(self, context, router): """Function to return the snat interface port list. This function will return the snat interface port list @@ -480,24 +511,27 @@ class L3_NAT_with_dvr_db_mixin(l3_db.L3_NAT_db_mixin, new ports and then return the list. """ port_list = self.get_snat_interface_ports_for_router( - context, router_id) + context, router.id) if port_list: self._populate_subnet_for_ports(context, port_list) return port_list port_list = [] - filters = { - 'device_id': [router_id], - 'device_owner': [DEVICE_OWNER_DVR_INTERFACE]} - int_ports = self._core_plugin.get_ports(context, filters) + + int_ports = ( + rp.port for rp in + router.attached_ports.filter_by( + port_type=DEVICE_OWNER_DVR_INTERFACE + ) + ) LOG.info(_('SNAT interface port list does not exist,' ' so create one: %s'), port_list) for intf in int_ports: - if intf.get('fixed_ips'): + if intf.fixed_ips: # Passing the subnet for the port to make sure the IP's # are assigned on the right subnet if multiple subnet # exists snat_port = self.add_csnat_router_interface_port( - context, router_id, intf['network_id'], + context, router, intf['network_id'], intf['fixed_ips'][0]['subnet_id'], do_pop=False) port_list.append(snat_port) if port_list: @@ -539,11 +573,18 @@ class L3_NAT_with_dvr_db_mixin(l3_db.L3_NAT_db_mixin, # Each csnat router interface port is associated # with a subnet, so we need to pass the subnet id to # delete the right ports. - device_filter = { - 'device_id': [router['id']], - 'device_owner': [DEVICE_OWNER_DVR_SNAT]} + + # TODO(markmcclain): This is suboptimal but was left to reduce + # changeset size since it is late in cycle + ports = ( + rp.port.id for rp in + router.attached_ports.filter_by(port_type=DEVICE_OWNER_DVR_SNAT) + ) + c_snat_ports = self._core_plugin.get_ports( - context, filters=device_filter) + context, + filters={'id': ports} + ) for p in c_snat_ports: if subnet_id is None: self._core_plugin.delete_port(context, diff --git a/neutron/db/migration/alembic_migrations/versions/544673ac99ab_add_router_port_table.py b/neutron/db/migration/alembic_migrations/versions/544673ac99ab_add_router_port_table.py new file mode 100644 index 00000000000..cf3190bec22 --- /dev/null +++ b/neutron/db/migration/alembic_migrations/versions/544673ac99ab_add_router_port_table.py @@ -0,0 +1,65 @@ +# Copyright 2014 OpenStack Foundation +# +# 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. +# + +"""add router port relationship + +Revision ID: 544673ac99ab +Revises: 1680e1f0c4dc +Create Date: 2014-01-14 11:58:13.754747 + +""" + +# revision identifiers, used by Alembic. +revision = '544673ac99ab' +down_revision = '1680e1f0c4dc' + +from alembic import op +import sqlalchemy as sa + +SQL_STATEMENT = ( + "insert into routerports " + "select " + "p.device_id as router_id, p.id as port_id, p.device_owner as port_type " + "from ports p join routers r on (p.device_id=r.id) " + "where " + "(r.tenant_id=p.tenant_id AND p.device_owner='network:router_interface') " + "OR (p.tenant_id='' AND p.device_owner='network:router_gateway')" +) + + +def upgrade(): + op.create_table( + 'routerports', + sa.Column('router_id', sa.String(length=36), nullable=False), + sa.Column('port_id', sa.String(length=36), nullable=False), + sa.Column('port_type', sa.String(length=255)), + sa.PrimaryKeyConstraint('router_id', 'port_id'), + sa.ForeignKeyConstraint( + ['router_id'], + ['routers.id'], + ondelete='CASCADE' + ), + sa.ForeignKeyConstraint( + ['port_id'], + ['ports.id'], + ondelete='CASCADE' + ), + ) + + op.execute(SQL_STATEMENT) + + +def downgrade(): + op.drop_table('routerports') diff --git a/neutron/db/migration/alembic_migrations/versions/HEAD b/neutron/db/migration/alembic_migrations/versions/HEAD index aa8f506d6e6..3f554aa166c 100644 --- a/neutron/db/migration/alembic_migrations/versions/HEAD +++ b/neutron/db/migration/alembic_migrations/versions/HEAD @@ -1 +1 @@ -1680e1f0c4dc +544673ac99ab From 4e8a5b7de71ba6f8c050c424613c025310498940 Mon Sep 17 00:00:00 2001 From: Mark McClain Date: Thu, 9 Oct 2014 13:29:48 +0000 Subject: [PATCH 078/128] Add Juno release milestone Change-Id: Iea584b00329d9474c14847db958f8743d4058525 Closes-Bug: #1378855 --- .../alembic_migrations/versions/HEAD | 2 +- .../versions/juno_release.py | 36 +++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 neutron/db/migration/alembic_migrations/versions/juno_release.py diff --git a/neutron/db/migration/alembic_migrations/versions/HEAD b/neutron/db/migration/alembic_migrations/versions/HEAD index 3f554aa166c..7a30775e93c 100644 --- a/neutron/db/migration/alembic_migrations/versions/HEAD +++ b/neutron/db/migration/alembic_migrations/versions/HEAD @@ -1 +1 @@ -544673ac99ab +juno diff --git a/neutron/db/migration/alembic_migrations/versions/juno_release.py b/neutron/db/migration/alembic_migrations/versions/juno_release.py new file mode 100644 index 00000000000..a8ce05df634 --- /dev/null +++ b/neutron/db/migration/alembic_migrations/versions/juno_release.py @@ -0,0 +1,36 @@ +# Copyright 2014 Yahoo! 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. +# + +"""juno + +Revision ID: juno +Revises: 544673ac99ab +Create Date: 2014-10-09 00:00:00.000000 + +""" + +# revision identifiers, used by Alembic. +revision = 'juno' +down_revision = '544673ac99ab' + + +def upgrade(): + """A no-op migration for marking the Juno release.""" + pass + + +def downgrade(): + """A no-op migration for marking the Juno release.""" + pass From 5e9305a6f934549408a9c18480fc1c000126621e Mon Sep 17 00:00:00 2001 From: Carl Baldwin Date: Thu, 2 Oct 2014 20:35:21 +0000 Subject: [PATCH 079/128] Refactor _process_routers to handle a single router The method _process_routers no longer handles multiple routers. The only caller of this method would construct a list of exactly one router in order to make the call. This made the for loop unnecessary. The method's logic is too heavy for its current purpose. This commit removes much of the weight. The use of the sets in this method is also no longer necessary. It became clear that all of it boiled down to "if the router is not compatible with with this agent but it is known in router_info from before then we need to remove it." This is an exceptional condition that shouldn't be handled in this method so I raise an exception and handle it in process_router_update where other router removal is handled. Logging was added for this exceptional condition. The eventlet pool was also obsolete. It was used to spawn two methods and there was a waitall at the end. The other refactoring made it clear that the two spawns were mutually exclusive. There was only one thread spawned for any given invocation of the method and the eventlet pool is overkill. Change-Id: Ibeac591b08565d10b2a9730e25a54f2cd11fc2bc Closes-Bug: #1378398 --- neutron/agent/l3_agent.py | 73 ++++++------ neutron/common/exceptions.py | 4 + neutron/services/vpn/agent.py | 8 +- .../tests/unit/services/vpn/test_vpn_agent.py | 15 ++- neutron/tests/unit/test_l3_agent.py | 104 ++++++++---------- 5 files changed, 96 insertions(+), 108 deletions(-) diff --git a/neutron/agent/l3_agent.py b/neutron/agent/l3_agent.py index e37a1fbc986..829f7dd532e 100644 --- a/neutron/agent/l3_agent.py +++ b/neutron/agent/l3_agent.py @@ -35,6 +35,7 @@ from neutron.agent.linux import ra from neutron.agent import rpc as agent_rpc from neutron.common import config as common_config from neutron.common import constants as l3_constants +from neutron.common import exceptions as n_exc from neutron.common import ipv6_utils from neutron.common import rpc as n_rpc from neutron.common import topics @@ -42,7 +43,7 @@ from neutron.common import utils as common_utils from neutron import context from neutron import manager from neutron.openstack.common import excutils -from neutron.openstack.common.gettextutils import _LW +from neutron.openstack.common.gettextutils import _LE, _LW from neutron.openstack.common import importutils from neutron.openstack.common import log as logging from neutron.openstack.common import loopingcall @@ -1779,48 +1780,38 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback, LOG.debug(_('Got router added to agent :%r'), payload) self.routers_updated(context, payload) - def _process_routers(self, routers): - pool = eventlet.GreenPool() + def _process_router_if_compatible(self, router): if (self.conf.external_network_bridge and not ip_lib.device_exists(self.conf.external_network_bridge)): LOG.error(_("The external network bridge '%s' does not exist"), self.conf.external_network_bridge) return + # If namespaces are disabled, only process the router associated + # 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']) + + # Either ex_net_id or handle_internal_only_routers must be set + ex_net_id = (router['external_gateway_info'] or {}).get('network_id') + if not ex_net_id and not self.conf.handle_internal_only_routers: + raise n_exc.RouterNotCompatibleWithAgent(router_id=router['id']) + + # If target_ex_net_id and ex_net_id are set they must be equal target_ex_net_id = self._fetch_external_net_id() - # if routers are all the routers we have (They are from router sync on - # starting or when error occurs during running), we seek the - # routers which should be removed. - # If routers are from server side notification, we seek them - # from subset of incoming routers and ones we have now. - prev_router_ids = set(self.router_info) & set( - [router['id'] for router in routers]) - cur_router_ids = set() - for r in routers: - # If namespaces are disabled, only process the router associated - # with the configured agent id. - if (not self.conf.use_namespaces and - r['id'] != self.conf.router_id): - continue - ex_net_id = (r['external_gateway_info'] or {}).get('network_id') - if not ex_net_id and not self.conf.handle_internal_only_routers: - continue - if (target_ex_net_id and ex_net_id and - ex_net_id != target_ex_net_id): - # Double check that our single external_net_id has not changed - # by forcing a check by RPC. - if (ex_net_id != self._fetch_external_net_id(force=True)): - continue - cur_router_ids.add(r['id']) - if r['id'] not in self.router_info: - self._router_added(r['id'], r) - ri = self.router_info[r['id']] - ri.router = r - pool.spawn_n(self.process_router, ri) - # identify and remove routers that no longer exist - for router_id in prev_router_ids - cur_router_ids: - pool.spawn_n(self._router_removed, router_id) - pool.waitall() + if (target_ex_net_id and ex_net_id and ex_net_id != target_ex_net_id): + # Double check that our single external_net_id has not changed + # by forcing a check by RPC. + if ex_net_id != self._fetch_external_net_id(force=True): + raise n_exc.RouterNotCompatibleWithAgent( + router_id=router['id']) + + if router['id'] not in self.router_info: + self._router_added(router['id'], router) + ri = self.router_info[router['id']] + ri.router = router + self.process_router(ri) def _process_router_update(self): for rp, update in self._queue.each_update_to_next_router(): @@ -1844,7 +1835,15 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback, self._router_removed(update.id) continue - self._process_routers([router]) + try: + self._process_router_if_compatible(router) + except n_exc.RouterNotCompatibleWithAgent as e: + LOG.exception(e.msg) + # Was the router previously handled by this agent? + if router['id'] in self.router_info: + LOG.error(_LE("Removing incompatible router '%s'"), + router['id']) + self._router_removed(router['id']) LOG.debug("Finished a router update for %s", update.id) rp.fetched_and_processed(update.timestamp) diff --git a/neutron/common/exceptions.py b/neutron/common/exceptions.py index be62388aa6e..1fd83e46ee3 100644 --- a/neutron/common/exceptions.py +++ b/neutron/common/exceptions.py @@ -335,3 +335,7 @@ class DeviceIDNotOwnedByTenant(Conflict): class InvalidCIDR(BadRequest): message = _("Invalid CIDR %(input)s given as IP prefix") + + +class RouterNotCompatibleWithAgent(NeutronException): + message = _("Router '%(router_id)s' is not compatible with this agent") diff --git a/neutron/services/vpn/agent.py b/neutron/services/vpn/agent.py index 12e969df9b5..6f67ccf1f00 100644 --- a/neutron/services/vpn/agent.py +++ b/neutron/services/vpn/agent.py @@ -130,15 +130,15 @@ class VPNAgent(l3_agent.L3NATAgentWithStateReport): for device in self.devices: device.destroy_router(router_id) - def _process_routers(self, routers): + def _process_router_if_compatible(self, router): """Router sync event. This method overwrites parent class method. - :param routers: list of routers + :param router: a router """ - super(VPNAgent, self)._process_routers(routers) + super(VPNAgent, self)._process_router_if_compatible(router) for device in self.devices: - device.sync(self.context, routers) + device.sync(self.context, [router]) def main(): diff --git a/neutron/tests/unit/services/vpn/test_vpn_agent.py b/neutron/tests/unit/services/vpn/test_vpn_agent.py index 4cde577d236..2a2a9a14f8d 100644 --- a/neutron/tests/unit/services/vpn/test_vpn_agent.py +++ b/neutron/tests/unit/services/vpn/test_vpn_agent.py @@ -183,15 +183,14 @@ class TestVPNAgent(base.BaseTestCase): self.agent._router_removed(router_id) device.destroy_router.assert_called_once_with(router_id) - def test_process_routers(self): + def test_process_router_if_compatible(self): self.plugin_api.get_external_network_id.return_value = None - routers = [ - {'id': _uuid(), - 'admin_state_up': True, - 'routes': [], - 'external_gateway_info': {}}] + router = {'id': _uuid(), + 'admin_state_up': True, + 'routes': [], + 'external_gateway_info': {}} device = mock.Mock() self.agent.devices = [device] - self.agent._process_routers(routers) - device.sync.assert_called_once_with(mock.ANY, routers) + self.agent._process_router_if_compatible(router) + device.sync.assert_called_once_with(mock.ANY, [router]) diff --git a/neutron/tests/unit/test_l3_agent.py b/neutron/tests/unit/test_l3_agent.py index 8de7922d210..264804a596e 100644 --- a/neutron/tests/unit/test_l3_agent.py +++ b/neutron/tests/unit/test_l3_agent.py @@ -1870,108 +1870,94 @@ vrrp_instance VR_1 { self.assertEqual(['1234'], agent._router_ids()) self.assertFalse(agent._clean_stale_namespaces) - def test_process_routers_with_no_ext_net_in_conf(self): + def test_process_router_if_compatible_with_no_ext_net_in_conf(self): agent = l3_agent.L3NATAgent(HOSTNAME, self.conf) self.plugin_api.get_external_network_id.return_value = 'aaa' - routers = [ - {'id': _uuid(), - 'routes': [], - 'admin_state_up': True, - 'external_gateway_info': {'network_id': 'aaa'}}] + router = {'id': _uuid(), + 'routes': [], + 'admin_state_up': True, + 'external_gateway_info': {'network_id': 'aaa'}} - agent._process_routers(routers) - self.assertIn(routers[0]['id'], agent.router_info) + agent._process_router_if_compatible(router) + self.assertIn(router['id'], agent.router_info) self.plugin_api.get_external_network_id.assert_called_with( agent.context) - def test_process_routers_with_cached_ext_net(self): + def test_process_router_if_compatible_with_cached_ext_net(self): agent = l3_agent.L3NATAgent(HOSTNAME, self.conf) self.plugin_api.get_external_network_id.return_value = 'aaa' agent.target_ex_net_id = 'aaa' - routers = [ - {'id': _uuid(), - 'routes': [], - 'admin_state_up': True, - 'external_gateway_info': {'network_id': 'aaa'}}] + router = {'id': _uuid(), + 'routes': [], + 'admin_state_up': True, + 'external_gateway_info': {'network_id': 'aaa'}} - agent._process_routers(routers) - self.assertIn(routers[0]['id'], agent.router_info) + agent._process_router_if_compatible(router) + self.assertIn(router['id'], agent.router_info) self.assertFalse(self.plugin_api.get_external_network_id.called) - def test_process_routers_with_stale_cached_ext_net(self): + def test_process_router_if_compatible_with_stale_cached_ext_net(self): agent = l3_agent.L3NATAgent(HOSTNAME, self.conf) self.plugin_api.get_external_network_id.return_value = 'aaa' agent.target_ex_net_id = 'bbb' - routers = [ - {'id': _uuid(), - 'routes': [], - 'admin_state_up': True, - 'external_gateway_info': {'network_id': 'aaa'}}] + router = {'id': _uuid(), + 'routes': [], + 'admin_state_up': True, + 'external_gateway_info': {'network_id': 'aaa'}} - agent._process_routers(routers) - self.assertIn(routers[0]['id'], agent.router_info) + agent._process_router_if_compatible(router) + self.assertIn(router['id'], agent.router_info) self.plugin_api.get_external_network_id.assert_called_with( agent.context) - def test_process_routers_with_no_ext_net_in_conf_and_two_net_plugin(self): + def test_process_router_if_compatible_w_no_ext_net_and_2_net_plugin(self): agent = l3_agent.L3NATAgent(HOSTNAME, self.conf) - routers = [ - {'id': _uuid(), - 'routes': [], - 'admin_state_up': True, - 'external_gateway_info': {'network_id': 'aaa'}}] + router = {'id': _uuid(), + 'routes': [], + 'admin_state_up': True, + 'external_gateway_info': {'network_id': 'aaa'}} agent.router_info = {} self.plugin_api.get_external_network_id.side_effect = ( n_exc.TooManyExternalNetworks()) self.assertRaises(n_exc.TooManyExternalNetworks, - agent._process_routers, - routers) - self.assertNotIn(routers[0]['id'], agent.router_info) + agent._process_router_if_compatible, + router) + self.assertNotIn(router['id'], agent.router_info) - def test_process_routers_with_ext_net_in_conf(self): + def test_process_router_if_compatible_with_ext_net_in_conf(self): agent = l3_agent.L3NATAgent(HOSTNAME, self.conf) self.plugin_api.get_external_network_id.return_value = 'aaa' - routers = [ - {'id': _uuid(), - 'routes': [], - 'admin_state_up': True, - 'external_gateway_info': {'network_id': 'aaa'}}, - {'id': _uuid(), - 'routes': [], - 'admin_state_up': True, - 'external_gateway_info': {'network_id': 'bbb'}}] + router = {'id': _uuid(), + 'routes': [], + 'admin_state_up': True, + 'external_gateway_info': {'network_id': 'bbb'}} agent.router_info = {} self.conf.set_override('gateway_external_network_id', 'aaa') - agent._process_routers(routers) - self.assertIn(routers[0]['id'], agent.router_info) - self.assertNotIn(routers[1]['id'], agent.router_info) + self.assertRaises(n_exc.RouterNotCompatibleWithAgent, + agent._process_router_if_compatible, + router) + self.assertNotIn(router['id'], agent.router_info) - def test_process_routers_with_no_bridge_no_ext_net_in_conf(self): + def test_process_router_if_compatible_with_no_bridge_no_ext_net(self): agent = l3_agent.L3NATAgent(HOSTNAME, self.conf) self.plugin_api.get_external_network_id.return_value = 'aaa' - routers = [ - {'id': _uuid(), - 'routes': [], - 'admin_state_up': True, - 'external_gateway_info': {'network_id': 'aaa'}}, - {'id': _uuid(), - 'routes': [], - 'admin_state_up': True, - 'external_gateway_info': {'network_id': 'bbb'}}] + router = {'id': _uuid(), + 'routes': [], + 'admin_state_up': True, + 'external_gateway_info': {'network_id': 'aaa'}} agent.router_info = {} self.conf.set_override('external_network_bridge', '') - agent._process_routers(routers) - self.assertIn(routers[0]['id'], agent.router_info) - self.assertIn(routers[1]['id'], agent.router_info) + agent._process_router_if_compatible(router) + self.assertIn(router['id'], agent.router_info) def test_nonexistent_interface_driver(self): self.conf.set_override('interface_driver', None) From afbe668a9c1dd250be9780eb5320652ee6dec21b Mon Sep 17 00:00:00 2001 From: Carl Baldwin Date: Thu, 9 Oct 2014 20:33:23 +0000 Subject: [PATCH 080/128] Remove an argument that is never used This code was creating a dict with a gw_exists key. I was curious to know who was interested in receiving this information down the line. However, no one is ever interested in that key. It took me some time to follow this through wondering what was going on and found only dead ends. Change-Id: I755d9628ab750b950b33f5dcf32ccf2a9b00800e --- neutron/db/l3_db.py | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/neutron/db/l3_db.py b/neutron/db/l3_db.py index 709c99cb0dd..6e678105235 100644 --- a/neutron/db/l3_db.py +++ b/neutron/db/l3_db.py @@ -1041,10 +1041,10 @@ class L3RpcNotifierMixin(object): self._l3_rpc_notifier = value def notify_router_updated(self, context, router_id, - operation=None, data=None): + operation=None): if router_id: self.l3_rpc_notifier.routers_updated( - context, [router_id], operation, data) + context, [router_id], operation) def notify_routers_updated(self, context, router_ids, operation=None, data=None): @@ -1060,13 +1060,9 @@ class L3_NAT_db_mixin(L3_NAT_dbonly_mixin, L3RpcNotifierMixin): """Mixin class to add rpc notifier methods to db_base_plugin_v2.""" def update_router(self, context, id, router): - r = router['router'] - payload = {'gw_exists': - r.get(EXTERNAL_GW_INFO, attributes.ATTR_NOT_SPECIFIED) != - attributes.ATTR_NOT_SPECIFIED} router_dict = super(L3_NAT_db_mixin, self).update_router(context, id, router) - self.notify_router_updated(context, router_dict['id'], None, payload) + self.notify_router_updated(context, router_dict['id'], None) return router_dict def delete_router(self, context, id): @@ -1107,7 +1103,7 @@ class L3_NAT_db_mixin(L3_NAT_dbonly_mixin, L3RpcNotifierMixin): floatingip_dict = super(L3_NAT_db_mixin, self).create_floatingip( context, floatingip, initial_status) router_id = floatingip_dict['router_id'] - self.notify_router_updated(context, router_id, 'create_floatingip', {}) + self.notify_router_updated(context, router_id, 'create_floatingip') return floatingip_dict def update_floatingip(self, context, id, floatingip): @@ -1121,7 +1117,7 @@ class L3_NAT_db_mixin(L3_NAT_dbonly_mixin, L3RpcNotifierMixin): def delete_floatingip(self, context, id): router_id = self._delete_floatingip(context, id) - self.notify_router_updated(context, router_id, 'delete_floatingip', {}) + self.notify_router_updated(context, router_id, 'delete_floatingip') def disassociate_floatingips(self, context, port_id, do_notify=True): """Disassociate all floating IPs linked to specific port. From 7484c9ff93d431c3e9c99d46fea579ecb57bb10b Mon Sep 17 00:00:00 2001 From: OpenStack Proposal Bot Date: Fri, 10 Oct 2014 06:42:51 +0000 Subject: [PATCH 081/128] Imported Translations from Transifex Change-Id: I674acacc96c2396c31658bab48a441dac56988b0 --- neutron/locale/neutron-log-error.pot | 15 +- neutron/locale/neutron.pot | 249 ++++++++-------- .../pt_BR/LC_MESSAGES/neutron-log-error.po | 275 ------------------ 3 files changed, 136 insertions(+), 403 deletions(-) delete mode 100644 neutron/locale/pt_BR/LC_MESSAGES/neutron-log-error.po diff --git a/neutron/locale/neutron-log-error.pot b/neutron/locale/neutron-log-error.pot index 5d83aeb7592..1db4fd12003 100644 --- a/neutron/locale/neutron-log-error.pot +++ b/neutron/locale/neutron-log-error.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: neutron 2014.2.dev246.gff9745c\n" +"Project-Id-Version: neutron 2015.1.dev60.gc38f68c\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-29 06:04+0000\n" +"POT-Creation-Date: 2014-10-10 06:42+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -29,24 +29,29 @@ msgstr "" msgid "Policy check error while calling %s!" msgstr "" +#: neutron/agent/l3_agent.py:1844 +#, python-format +msgid "Removing incompatible router '%s'" +msgstr "" + #: neutron/agent/l3_ha_agent.py:136 #, python-format msgid "Unable to process HA router %s without ha port" msgstr "" -#: neutron/agent/linux/external_process.py:229 +#: neutron/agent/linux/external_process.py:227 #, python-format msgid "" "%(service)s for %(resource_type)s with uuid %(uuid)s not found. The " "process should not have died" msgstr "" -#: neutron/agent/linux/external_process.py:249 +#: neutron/agent/linux/external_process.py:247 #, python-format msgid "respawning %(service)s for uuid %(uuid)s" msgstr "" -#: neutron/agent/linux/external_process.py:255 +#: neutron/agent/linux/external_process.py:253 msgid "Exiting agent as programmed in check_child_processes_actions" msgstr "" diff --git a/neutron/locale/neutron.pot b/neutron/locale/neutron.pot index a8824f072da..ea94d2459a2 100644 --- a/neutron/locale/neutron.pot +++ b/neutron/locale/neutron.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: neutron 2015.1.dev36.g63e2efb\n" +"Project-Id-Version: neutron 2015.1.dev60.gc38f68c\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-10-08 06:09+0000\n" +"POT-Creation-Date: 2014-10-10 06:42+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -408,7 +408,7 @@ msgstr "" msgid "Number of threads to use during sync process." msgstr "" -#: neutron/agent/dhcp_agent.py:65 neutron/agent/l3_agent.py:501 +#: neutron/agent/dhcp_agent.py:65 neutron/agent/l3_agent.py:502 #: neutron/agent/metadata/namespace_proxy.py:165 msgid "Location of Metadata Proxy UNIX domain socket" msgstr "" @@ -488,7 +488,7 @@ msgid "" "port %(port_id)s, for router %(router_id)s will be considered" msgstr "" -#: neutron/agent/dhcp_agent.py:582 neutron/agent/l3_agent.py:2023 +#: neutron/agent/dhcp_agent.py:582 neutron/agent/l3_agent.py:2009 #: neutron/agent/metadata/agent.py:354 #: neutron/plugins/cisco/cfg_agent/cfg_agent.py:326 #: neutron/services/metering/agents/metering_agent.py:270 @@ -497,7 +497,7 @@ msgid "" " will be disabled." msgstr "" -#: neutron/agent/dhcp_agent.py:588 neutron/agent/l3_agent.py:2028 +#: neutron/agent/dhcp_agent.py:588 neutron/agent/l3_agent.py:2014 #: neutron/agent/metadata/agent.py:359 #: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:108 #: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:793 @@ -515,17 +515,17 @@ msgstr "" msgid "Agent updated: %(payload)s" msgstr "" -#: neutron/agent/dhcp_agent.py:597 neutron/agent/l3_agent.py:2033 +#: neutron/agent/dhcp_agent.py:597 neutron/agent/l3_agent.py:2019 #: neutron/services/metering/agents/metering_agent.py:278 #, python-format msgid "agent_updated by server side %s!" msgstr "" -#: neutron/agent/l3_agent.py:216 +#: neutron/agent/l3_agent.py:217 msgid "Cannot allocate link local address" msgstr "" -#: neutron/agent/l3_agent.py:462 +#: neutron/agent/l3_agent.py:463 msgid "" "The working mode for the agent. Allowed modes are: 'legacy' - this " "preserves the existing behavior where the L3 agent is deployed on a " @@ -537,207 +537,207 @@ msgid "" "centralized node (or in single-host deployments, e.g. devstack)" msgstr "" -#: neutron/agent/l3_agent.py:475 neutron/debug/debug_agent.py:41 +#: neutron/agent/l3_agent.py:476 neutron/debug/debug_agent.py:41 msgid "Name of bridge used for external network traffic." msgstr "" -#: neutron/agent/l3_agent.py:479 +#: neutron/agent/l3_agent.py:480 msgid "TCP Port used by Neutron metadata namespace proxy." msgstr "" -#: neutron/agent/l3_agent.py:483 +#: neutron/agent/l3_agent.py:484 msgid "" "Send this many gratuitous ARPs for HA setup, if less than or equal to 0, " "the feature is disabled" msgstr "" -#: neutron/agent/l3_agent.py:486 +#: neutron/agent/l3_agent.py:487 msgid "" "If namespaces is disabled, the l3 agent can only configure a router that " "has the matching router ID." msgstr "" -#: neutron/agent/l3_agent.py:491 +#: neutron/agent/l3_agent.py:492 msgid "Agent should implement routers with no gateway" msgstr "" -#: neutron/agent/l3_agent.py:493 +#: neutron/agent/l3_agent.py:494 msgid "UUID of external network for routers implemented by the agents." msgstr "" -#: neutron/agent/l3_agent.py:496 +#: neutron/agent/l3_agent.py:497 msgid "Allow running metadata proxy." msgstr "" -#: neutron/agent/l3_agent.py:498 +#: neutron/agent/l3_agent.py:499 msgid "Delete namespace after removing a router." msgstr "" -#: neutron/agent/l3_agent.py:521 +#: neutron/agent/l3_agent.py:522 #, python-format msgid "Error importing interface driver '%s'" msgstr "" -#: neutron/agent/l3_agent.py:595 neutron/agent/linux/dhcp.py:785 +#: neutron/agent/l3_agent.py:594 neutron/agent/linux/dhcp.py:785 #: neutron/services/metering/drivers/iptables/iptables_driver.py:90 msgid "An interface driver must be specified" msgstr "" -#: neutron/agent/l3_agent.py:600 +#: neutron/agent/l3_agent.py:599 msgid "Router id is required if not using namespaces." msgstr "" -#: neutron/agent/l3_agent.py:618 +#: neutron/agent/l3_agent.py:617 msgid "RuntimeError in obtaining router list for namespace cleanup." msgstr "" -#: neutron/agent/l3_agent.py:655 +#: neutron/agent/l3_agent.py:654 #, python-format msgid "Failed to destroy stale router namespace %s" msgstr "" -#: neutron/agent/l3_agent.py:673 neutron/agent/linux/dhcp.py:235 +#: neutron/agent/l3_agent.py:672 neutron/agent/linux/dhcp.py:235 #, python-format msgid "Failed trying to delete namespace: %s" msgstr "" -#: neutron/agent/l3_agent.py:761 +#: neutron/agent/l3_agent.py:760 msgid "" "The 'gateway_external_network_id' option must be configured for this " "agent as Neutron has more than one external network." msgstr "" -#: neutron/agent/l3_agent.py:791 +#: neutron/agent/l3_agent.py:790 #, python-format msgid "Info for router %s were not found. Skipping router removal" msgstr "" -#: neutron/agent/l3_agent.py:866 +#: neutron/agent/l3_agent.py:865 #: neutron/plugins/cisco/cfg_agent/service_helpers/routing_svc_helper.py:633 #: neutron/services/firewall/agents/varmour/varmour_router.py:100 #, python-format msgid "Router port %s has no IP address" msgstr "" -#: neutron/agent/l3_agent.py:868 neutron/db/l3_db.py:958 +#: neutron/agent/l3_agent.py:867 neutron/db/l3_db.py:1005 #: neutron/plugins/cisco/cfg_agent/service_helpers/routing_svc_helper.py:635 #: neutron/services/firewall/agents/varmour/varmour_router.py:103 #, python-format msgid "Ignoring multiple IPs on router port %s" msgstr "" -#: neutron/agent/l3_agent.py:929 +#: neutron/agent/l3_agent.py:928 #, python-format msgid "Deleting stale internal router device: %s" msgstr "" -#: neutron/agent/l3_agent.py:966 +#: neutron/agent/l3_agent.py:965 #, python-format msgid "Deleting stale external router device: %s" msgstr "" -#: neutron/agent/l3_agent.py:1134 +#: neutron/agent/l3_agent.py:1133 #, python-format msgid "Unable to configure IP address for floating IP: %s" msgstr "" -#: neutron/agent/l3_agent.py:1217 +#: neutron/agent/l3_agent.py:1216 #, python-format msgid "Failed sending gratuitous ARP: %s" msgstr "" -#: neutron/agent/l3_agent.py:1279 +#: neutron/agent/l3_agent.py:1278 msgid "DVR: no map match_port found!" msgstr "" -#: neutron/agent/l3_agent.py:1483 +#: neutron/agent/l3_agent.py:1482 msgid "DVR: error adding redirection logic" msgstr "" -#: neutron/agent/l3_agent.py:1495 +#: neutron/agent/l3_agent.py:1494 msgid "DVR: removed snat failed" msgstr "" -#: neutron/agent/l3_agent.py:1596 +#: neutron/agent/l3_agent.py:1595 msgid "Missing subnet/agent_gateway_port" msgstr "" -#: neutron/agent/l3_agent.py:1717 +#: neutron/agent/l3_agent.py:1716 #, python-format msgid "Got router deleted notification for %s" msgstr "" -#: neutron/agent/l3_agent.py:1738 +#: neutron/agent/l3_agent.py:1737 msgid "DVR: Failed updating arp entry" msgstr "" -#: neutron/agent/l3_agent.py:1765 +#: neutron/agent/l3_agent.py:1764 #, python-format msgid "Got routers updated notification :%s" msgstr "" -#: neutron/agent/l3_agent.py:1775 +#: neutron/agent/l3_agent.py:1774 #, python-format msgid "Got router removed from agent :%r" msgstr "" -#: neutron/agent/l3_agent.py:1781 +#: neutron/agent/l3_agent.py:1780 #, python-format msgid "Got router added to agent :%r" msgstr "" -#: neutron/agent/l3_agent.py:1788 +#: neutron/agent/l3_agent.py:1786 #, python-format msgid "The external network bridge '%s' does not exist" msgstr "" -#: neutron/agent/l3_agent.py:1840 +#: neutron/agent/l3_agent.py:1826 #, python-format msgid "Failed to fetch router information for '%s'" msgstr "" -#: neutron/agent/l3_agent.py:1879 +#: neutron/agent/l3_agent.py:1867 #, python-format msgid "Starting _sync_routers_task - fullsync:%s" msgstr "" -#: neutron/agent/l3_agent.py:1899 +#: neutron/agent/l3_agent.py:1885 #, python-format msgid "Processing :%r" msgstr "" -#: neutron/agent/l3_agent.py:1907 +#: neutron/agent/l3_agent.py:1893 msgid "_sync_routers_task successfully completed" msgstr "" -#: neutron/agent/l3_agent.py:1909 +#: neutron/agent/l3_agent.py:1895 msgid "Failed synchronizing routers due to RPC error" msgstr "" -#: neutron/agent/l3_agent.py:1912 +#: neutron/agent/l3_agent.py:1898 #: neutron/services/metering/agents/metering_agent.py:59 msgid "Failed synchronizing routers" msgstr "" -#: neutron/agent/l3_agent.py:1935 +#: neutron/agent/l3_agent.py:1921 msgid "L3 agent started" msgstr "" -#: neutron/agent/l3_agent.py:1954 +#: neutron/agent/l3_agent.py:1940 #, python-format msgid "Added route entry is '%s'" msgstr "" -#: neutron/agent/l3_agent.py:1962 +#: neutron/agent/l3_agent.py:1948 #, python-format msgid "Removed route entry is '%s'" msgstr "" -#: neutron/agent/l3_agent.py:1996 +#: neutron/agent/l3_agent.py:1982 msgid "Report state task started" msgstr "" -#: neutron/agent/l3_agent.py:2020 +#: neutron/agent/l3_agent.py:2006 msgid "Report state task successfully completed" msgstr "" @@ -1138,16 +1138,14 @@ msgstr "" msgid "Location to store child pid files" msgstr "" -#: neutron/agent/linux/external_process.py:34 -msgid "Periodically check child processes" -msgstr "" - -#: neutron/agent/linux/external_process.py:37 +#: neutron/agent/linux/external_process.py:35 msgid "Action to be executed when a child process dies" msgstr "" -#: neutron/agent/linux/external_process.py:39 -msgid "Interval between checks of child process liveness (seconds)" +#: neutron/agent/linux/external_process.py:37 +msgid "" +"Interval between checks of child process liveness (seconds), use 0 to " +"disable" msgstr "" #: neutron/agent/linux/interface.py:39 @@ -2643,6 +2641,11 @@ msgstr "" msgid "Invalid CIDR %(input)s given as IP prefix" msgstr "" +#: neutron/common/exceptions.py:341 +#, python-format +msgid "Router '%(router_id)s' is not compatible with this agent" +msgstr "" + #: neutron/common/ipv6_utils.py:35 msgid "Unable to generate IP address by EUI64 for IPv4 prefix" msgstr "" @@ -2857,14 +2860,14 @@ msgstr "" msgid "Invalid route: %s" msgstr "" -#: neutron/db/db_base_plugin_v2.py:771 +#: neutron/db/db_base_plugin_v2.py:764 #, python-format msgid "" "Invalid CIDR %s for IPv6 address mode. OpenStack uses the EUI-64 address " "format, which requires the prefix to be /64." msgstr "" -#: neutron/db/db_base_plugin_v2.py:779 +#: neutron/db/db_base_plugin_v2.py:772 #, python-format msgid "" "ipv6_ra_mode set to '%(ra_mode)s' with ipv6_address_mode set to " @@ -2872,49 +2875,49 @@ msgid "" "the same value" msgstr "" -#: neutron/db/db_base_plugin_v2.py:787 +#: neutron/db/db_base_plugin_v2.py:780 msgid "" "ipv6_ra_mode or ipv6_address_mode cannot be set when enable_dhcp is set " "to False." msgstr "" -#: neutron/db/db_base_plugin_v2.py:793 +#: neutron/db/db_base_plugin_v2.py:786 msgid "Cannot disable enable_dhcp with ipv6 attributes set" msgstr "" -#: neutron/db/db_base_plugin_v2.py:885 +#: neutron/db/db_base_plugin_v2.py:878 #, python-format msgid "An exception occurred while creating the %(resource)s:%(item)s" msgstr "" -#: neutron/db/db_base_plugin_v2.py:982 +#: neutron/db/db_base_plugin_v2.py:975 #, python-format msgid "%(name)s '%(addr)s' does not match the ip_version '%(ip_version)s'" msgstr "" -#: neutron/db/db_base_plugin_v2.py:1006 +#: neutron/db/db_base_plugin_v2.py:999 msgid "Gateway is not valid on subnet" msgstr "" -#: neutron/db/db_base_plugin_v2.py:1026 neutron/db/db_base_plugin_v2.py:1040 +#: neutron/db/db_base_plugin_v2.py:1019 neutron/db/db_base_plugin_v2.py:1033 #: neutron/plugins/opencontrail/contrail_plugin.py:312 msgid "new subnet" msgstr "" -#: neutron/db/db_base_plugin_v2.py:1033 +#: neutron/db/db_base_plugin_v2.py:1026 #, python-format msgid "Error parsing dns address %s" msgstr "" -#: neutron/db/db_base_plugin_v2.py:1049 +#: neutron/db/db_base_plugin_v2.py:1042 msgid "ipv6_ra_mode is not valid when ip_version is 4" msgstr "" -#: neutron/db/db_base_plugin_v2.py:1053 +#: neutron/db/db_base_plugin_v2.py:1046 msgid "ipv6_address_mode is not valid when ip_version is 4" msgstr "" -#: neutron/db/db_base_plugin_v2.py:1421 +#: neutron/db/db_base_plugin_v2.py:1414 #, python-format msgid "" "Ignoring PortNotFound when deleting port '%s'. The port has already been " @@ -2971,105 +2974,105 @@ msgid "" "agents." msgstr "" -#: neutron/db/l3_db.py:234 +#: neutron/db/l3_db.py:259 #, python-format msgid "No eligible l3 agent associated with external network %s found" msgstr "" -#: neutron/db/l3_db.py:255 +#: neutron/db/l3_db.py:280 #, python-format msgid "No IPs available for external network %s" msgstr "" -#: neutron/db/l3_db.py:269 +#: neutron/db/l3_db.py:300 #, python-format msgid "Network %s is not an external network" msgstr "" -#: neutron/db/l3_db.py:381 +#: neutron/db/l3_db.py:403 #, python-format msgid "Router already has a port on subnet %s" msgstr "" -#: neutron/db/l3_db.py:395 +#: neutron/db/l3_db.py:417 #, python-format msgid "" "Cidr %(subnet_cidr)s of subnet %(subnet_id)s overlaps with cidr %(cidr)s " "of subnet %(sub_id)s" msgstr "" -#: neutron/db/l3_db.py:411 neutron/db/l3_db.py:538 neutron/db/l3_dvr_db.py:230 +#: neutron/db/l3_db.py:433 neutron/db/l3_db.py:576 neutron/db/l3_dvr_db.py:239 #: neutron/plugins/bigswitch/l3_router_plugin.py:170 #: neutron/plugins/bigswitch/l3_router_plugin.py:179 #: neutron/plugins/opencontrail/contrail_plugin.py:499 msgid "Either subnet_id or port_id must be specified" msgstr "" -#: neutron/db/l3_db.py:414 neutron/plugins/opencontrail/contrail_plugin.py:509 +#: neutron/db/l3_db.py:436 neutron/plugins/opencontrail/contrail_plugin.py:509 msgid "Cannot specify both subnet-id and port-id" msgstr "" -#: neutron/db/l3_db.py:427 +#: neutron/db/l3_db.py:449 msgid "Router port must have exactly one fixed IP" msgstr "" -#: neutron/db/l3_db.py:441 +#: neutron/db/l3_db.py:463 msgid "Subnet for router interface must have a gateway IP" msgstr "" -#: neutron/db/l3_db.py:584 neutron/plugins/nec/nec_router.py:195 +#: neutron/db/l3_db.py:624 neutron/plugins/nec/nec_router.py:195 #, python-format msgid "Cannot add floating IP to port on subnet %s which has no gateway_ip" msgstr "" -#: neutron/db/l3_db.py:620 +#: neutron/db/l3_db.py:660 #, python-format msgid "" "Port %(port_id)s is associated with a different tenant than Floating IP " "%(floatingip_id)s and therefore cannot be bound." msgstr "" -#: neutron/db/l3_db.py:624 +#: neutron/db/l3_db.py:664 #, python-format msgid "" "Cannot create floating IP and bind it to Port %s, since that port is " "owned by a different tenant." msgstr "" -#: neutron/db/l3_db.py:636 +#: neutron/db/l3_db.py:676 #, python-format msgid "Port %(id)s does not have fixed ip %(address)s" msgstr "" -#: neutron/db/l3_db.py:643 +#: neutron/db/l3_db.py:683 #, python-format msgid "Cannot add floating IP to port %s that hasno fixed IP addresses" msgstr "" -#: neutron/db/l3_db.py:647 +#: neutron/db/l3_db.py:687 #, python-format msgid "" "Port %s has multiple fixed IPs. Must provide a specific IP when " "assigning a floating IP" msgstr "" -#: neutron/db/l3_db.py:677 neutron/plugins/vmware/plugins/base.py:1814 +#: neutron/db/l3_db.py:717 neutron/plugins/vmware/plugins/base.py:1814 msgid "fixed_ip_address cannot be specified without a port_id" msgstr "" -#: neutron/db/l3_db.py:717 +#: neutron/db/l3_db.py:757 #, python-format msgid "Network %s is not a valid external network" msgstr "" -#: neutron/db/l3_db.py:850 +#: neutron/db/l3_db.py:890 #, python-format msgid "" "Port %(port_id)s has owner %(port_owner)s, but no IP address, so it can " "be deleted" msgstr "" -#: neutron/db/l3_db.py:964 +#: neutron/db/l3_db.py:1011 #, python-format msgid "Skipping port %s as no IP is configure on it" msgstr "" @@ -3085,20 +3088,20 @@ msgstr "" msgid "Centralizing distributed router %s is not supported" msgstr "" -#: neutron/db/l3_dvr_db.py:427 +#: neutron/db/l3_dvr_db.py:443 #, python-format msgid "Agent Gateway port does not exist, so create one: %s" msgstr "" -#: neutron/db/l3_dvr_db.py:442 +#: neutron/db/l3_dvr_db.py:458 msgid "Unable to create the Agent Gateway Port" msgstr "" -#: neutron/db/l3_dvr_db.py:468 +#: neutron/db/l3_dvr_db.py:491 msgid "Unable to create the SNAT Interface Port" msgstr "" -#: neutron/db/l3_dvr_db.py:492 +#: neutron/db/l3_dvr_db.py:526 #, python-format msgid "SNAT interface port list does not exist, so create one: %s" msgstr "" @@ -3308,41 +3311,41 @@ msgid "" "one of following versions: %(supported)s" msgstr "" -#: neutron/db/migration/migrate_to_ml2.py:423 +#: neutron/db/migration/migrate_to_ml2.py:425 #, python-format msgid "Unknown tunnel type: %s" msgstr "" -#: neutron/db/migration/migrate_to_ml2.py:451 +#: neutron/db/migration/migrate_to_ml2.py:453 msgid "The plugin type whose database will be migrated" msgstr "" -#: neutron/db/migration/migrate_to_ml2.py:454 +#: neutron/db/migration/migrate_to_ml2.py:456 msgid "The connection url for the target db" msgstr "" -#: neutron/db/migration/migrate_to_ml2.py:457 +#: neutron/db/migration/migrate_to_ml2.py:459 #, python-format msgid "The %s tunnel type to migrate from" msgstr "" -#: neutron/db/migration/migrate_to_ml2.py:460 +#: neutron/db/migration/migrate_to_ml2.py:462 #: neutron/plugins/openvswitch/common/config.py:80 msgid "The UDP port to use for VXLAN tunnels." msgstr "" -#: neutron/db/migration/migrate_to_ml2.py:463 +#: neutron/db/migration/migrate_to_ml2.py:465 msgid "Retain the old plugin's tables" msgstr "" -#: neutron/db/migration/migrate_to_ml2.py:469 +#: neutron/db/migration/migrate_to_ml2.py:471 #, python-format msgid "" "Tunnel args (tunnel-type and vxlan-udp-port) are not valid for the %s " "plugin" msgstr "" -#: neutron/db/migration/migrate_to_ml2.py:476 +#: neutron/db/migration/migrate_to_ml2.py:478 #, python-format msgid "" "Support for migrating %(plugin)s for release %(release)s is not yet " @@ -6460,25 +6463,25 @@ msgstr "" msgid "_send_delete_port_request: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:878 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:876 #, python-format msgid "Create network: profile_id=%s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:886 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:884 #, python-format msgid "" "Physical_network %(phy_net)s, seg_type %(net_type)s, seg_id %(seg_id)s, " "multicast_ip %(multicast_ip)s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:898 -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:908 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:896 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:906 #, python-format msgid "Seg list %s " msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:949 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:947 #: neutron/plugins/hyperv/hyperv_neutron_plugin.py:254 #: neutron/plugins/ibm/sdnve_neutron_plugin.py:196 #: neutron/plugins/metaplugin/meta_neutron_plugin.py:226 @@ -6487,84 +6490,84 @@ msgstr "" msgid "Created network: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1007 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1005 #, python-format msgid "Updated network: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1021 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1019 #, python-format msgid "Cannot delete network '%s', delete the associated subnet first" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1025 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1023 #, python-format msgid "Cannot delete network '%s' that is member of a trunk segment" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1029 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1027 #, python-format msgid "Cannot delete network '%s' that is a member of a multi-segment network" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1057 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1055 #, python-format msgid "Get network: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1079 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1077 msgid "Get networks" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1130 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1128 #, python-format msgid "Create port: profile_id=%s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1177 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1175 #: neutron/plugins/ibm/sdnve_neutron_plugin.py:303 #, python-format msgid "Created port: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1188 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1186 #, python-format msgid "Update port: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1251 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1249 #, python-format msgid "Get port: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1271 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1269 msgid "Get ports" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1287 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1285 msgid "Create subnet" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1297 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1295 #, python-format msgid "Created subnet: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1312 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1310 msgid "Update subnet" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1327 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1325 #, python-format msgid "Delete subnet: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1342 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1340 #, python-format msgid "Get subnet: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1362 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1360 msgid "Get subnets" msgstr "" diff --git a/neutron/locale/pt_BR/LC_MESSAGES/neutron-log-error.po b/neutron/locale/pt_BR/LC_MESSAGES/neutron-log-error.po deleted file mode 100644 index 9de0d70b820..00000000000 --- a/neutron/locale/pt_BR/LC_MESSAGES/neutron-log-error.po +++ /dev/null @@ -1,275 +0,0 @@ -# Translations template for neutron. -# Copyright (C) 2014 ORGANIZATION -# This file is distributed under the same license as the neutron project. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Neutron\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-09-29 06:04+0000\n" -"PO-Revision-Date: 2014-08-26 11:11+0000\n" -"Last-Translator: openstackjenkins \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/" -"neutron/language/pt_BR/)\n" -"Language: pt_BR\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -#: neutron/policy.py:119 -#, python-format -msgid "" -"Backward compatibility unavailable for deprecated policy %s. The policy will " -"not be enforced" -msgstr "" -"Retro compatibilidade não disponível para política deprecada %s. A política " -"não será garantida" - -#: neutron/policy.py:311 -#, python-format -msgid "Policy check error while calling %s!" -msgstr "Erro de verificação de políticas enquanto chamando %s!" - -#: neutron/agent/l3_ha_agent.py:136 -#, python-format -msgid "Unable to process HA router %s without ha port" -msgstr "" - -#: neutron/agent/linux/external_process.py:229 -#, python-format -msgid "" -"%(service)s for %(resource_type)s with uuid %(uuid)s not found. The process " -"should not have died" -msgstr "" - -#: neutron/agent/linux/external_process.py:249 -#, python-format -msgid "respawning %(service)s for uuid %(uuid)s" -msgstr "" - -#: neutron/agent/linux/external_process.py:255 -msgid "Exiting agent as programmed in check_child_processes_actions" -msgstr "" - -#: neutron/agent/linux/interface.py:154 -#, python-format -msgid "Failed deleting ingress connection state of floatingip %s" -msgstr "" - -#: neutron/agent/linux/interface.py:163 -#, python-format -msgid "Failed deleting egress connection state of floatingip %s" -msgstr "" - -#: neutron/cmd/sanity_check.py:58 -msgid "" -"Nova notifications are enabled, but novaclient is not installed. Either " -"disable nova notifications or install python-novaclient." -msgstr "" - -#: neutron/openstack/common/excutils.py:76 -#, python-format -msgid "Original exception being dropped: %s" -msgstr "Exceção original sendo descartada: %s" - -#: neutron/openstack/common/excutils.py:105 -#, python-format -msgid "Unexpected exception occurred %d time(s)... retrying." -msgstr "Exceção não esperada ocorreu %d vez(es)... tentando novamente." - -#: neutron/openstack/common/periodic_task.py:202 -#, python-format -msgid "Error during %(full_task_name)s: %(e)s" -msgstr "Erro durante %(full_task_name)s: %(e)s" - -#: neutron/openstack/common/service.py:188 -msgid "Exception during rpc cleanup." -msgstr "Exceção durante limpeza de RPC." - -#: neutron/openstack/common/service.py:277 -msgid "Unhandled exception" -msgstr "Exceção não tratada" - -#: neutron/plugins/cisco/models/virt_phy_sw_v2.py:279 -#, python-format -msgid "Unable to delete port '%(pname)s' on switch. Exception: %(exp)s" -msgstr "" - -#: neutron/plugins/ml2/drivers/type_gre.py:86 -#, python-format -msgid "Skipping unreasonable gre ID range %(tun_min)s:%(tun_max)s" -msgstr "Pulando faixa irracional do ID GRE %(tun_min)s:%(tun_max)s" - -#: neutron/plugins/ml2/drivers/type_vxlan.py:92 -#, python-format -msgid "Skipping unreasonable VXLAN VNI range %(tun_min)s:%(tun_max)s" -msgstr "Pulando faixa irracional do VXLAN VNI %(tun_min)s:%(tun_max)s" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:110 -msgid "APIC service agent: failed in reporting state" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:205 -#, python-format -msgid "No such interface (ignored): %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:255 -msgid "APIC service agent: exception in LLDP parsing" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:310 -#, python-format -msgid "APIC service agent: can not get MACaddr for %s" -msgstr "" - -#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:326 -msgid "APIC host agent: failed in reporting state" -msgstr "" - -#: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:386 -msgid "Error in agent event loop" -msgstr "Erro no loop de eventos do agente" - -#: neutron/plugins/nuage/syncmanager.py:55 -#, python-format -msgid "Cannot complete the sync between Neutron and VSD because of error:%s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:102 -msgid "Agent terminated!: Failed to get a datapath." -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:121 -msgid "Agent terminated" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:158 -msgid "Agent failed to create agent config map" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:283 -msgid "Failed reporting state!" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:449 -#, python-format -msgid "No local VLAN available for net-id=%s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:464 -#, python-format -msgid "" -"Cannot provision %(network_type)s network for net-id=%(net_uuid)s - " -"tunneling disabled" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:475 -#, python-format -msgid "" -"Cannot provision %(network_type)s network for net-id=%(net_uuid)s - no " -"bridge for physical_network %(physical_network)s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:485 -#, python-format -msgid "" -"Cannot provision unknown network type %(network_type)s for net-id=" -"%(net_uuid)s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:523 -#, python-format -msgid "" -"Cannot reclaim unknown network type %(network_type)s for net-id=%(net_uuid)s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:657 -#, python-format -msgid "" -"Bridge %(bridge)s for physical network %(physical_network)s does not exist. " -"Agent terminated!" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:735 -msgid "ofport should have a value that can be interpreted as an integer" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:738 -#, python-format -msgid "Failed to set-up %(type)s tunnel port to %(ip)s" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:916 -msgid "Error while synchronizing tunnels" -msgstr "" - -#: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:956 -msgid "Error while processing VIF ports" -msgstr "" - -#: neutron/plugins/vmware/plugins/base.py:2099 -#, python-format -msgid "" -"Rolling back database changes for gateway device %s because of an error in " -"the NSX backend" -msgstr "" - -#: neutron/scheduler/l3_agent_scheduler.py:281 -#, python-format -msgid "Not enough candidates, a HA router needs at least %s agents" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:62 -#, python-format -msgid "Config file parse error: %s" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:76 -#, python-format -msgid "Ignoring Cisco CSR configuration entry - router IP %s is not valid" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:89 -#, python-format -msgid "Ignoring Cisco CSR for router %(router)s - missing %(field)s setting" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:97 -#, python-format -msgid "" -"Ignoring Cisco CSR for router %s - timeout is not a floating point number" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:113 -#, python-format -msgid "Ignoring Cisco CSR for router %s - local tunnel is not an IP address" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:119 -#, python-format -msgid "Malformed interface name for Cisco CSR router entry - %s" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:155 -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:202 -msgid "No routers found in INI file!" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:174 -#, python-format -msgid "Unable to lookup router ID based on router's public IP (%s) in INI file" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:177 -#, python-format -msgid "No matching routers on host %s" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:211 -#, python-format -msgid "Unable to find host for router %s" -msgstr "" From 652052860f0572ce1a3e8db56a58e08aca8d9195 Mon Sep 17 00:00:00 2001 From: Ihar Hrachyshka Date: Fri, 10 Oct 2014 20:49:57 +0200 Subject: [PATCH 082/128] Drop sslutils and versionutils modules The modules are not used since when we've switched to oslo.messaging. Change-Id: Ife4298e0bb29ec15404fafe4b48545bd65e038e3 --- neutron/openstack/common/sslutils.py | 98 --------------- neutron/openstack/common/versionutils.py | 148 ----------------------- openstack-common.conf | 2 - 3 files changed, 248 deletions(-) delete mode 100644 neutron/openstack/common/sslutils.py delete mode 100644 neutron/openstack/common/versionutils.py diff --git a/neutron/openstack/common/sslutils.py b/neutron/openstack/common/sslutils.py deleted file mode 100644 index 1d07937949e..00000000000 --- a/neutron/openstack/common/sslutils.py +++ /dev/null @@ -1,98 +0,0 @@ -# Copyright 2013 IBM Corp. -# -# 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. - -import os -import ssl - -from oslo.config import cfg - -from neutron.openstack.common.gettextutils import _ - - -ssl_opts = [ - cfg.StrOpt('ca_file', - default=None, - help="CA certificate file to use to verify " - "connecting clients"), - cfg.StrOpt('cert_file', - default=None, - help="Certificate file to use when starting " - "the server securely"), - cfg.StrOpt('key_file', - default=None, - help="Private key file to use when starting " - "the server securely"), -] - - -CONF = cfg.CONF -CONF.register_opts(ssl_opts, "ssl") - - -def is_enabled(): - cert_file = CONF.ssl.cert_file - key_file = CONF.ssl.key_file - ca_file = CONF.ssl.ca_file - use_ssl = cert_file or key_file - - if cert_file and not os.path.exists(cert_file): - raise RuntimeError(_("Unable to find cert_file : %s") % cert_file) - - if ca_file and not os.path.exists(ca_file): - raise RuntimeError(_("Unable to find ca_file : %s") % ca_file) - - if key_file and not os.path.exists(key_file): - raise RuntimeError(_("Unable to find key_file : %s") % key_file) - - if use_ssl and (not cert_file or not key_file): - raise RuntimeError(_("When running server in SSL mode, you must " - "specify both a cert_file and key_file " - "option value in your configuration file")) - - return use_ssl - - -def wrap(sock): - ssl_kwargs = { - 'server_side': True, - 'certfile': CONF.ssl.cert_file, - 'keyfile': CONF.ssl.key_file, - 'cert_reqs': ssl.CERT_NONE, - } - - if CONF.ssl.ca_file: - ssl_kwargs['ca_certs'] = CONF.ssl.ca_file - ssl_kwargs['cert_reqs'] = ssl.CERT_REQUIRED - - return ssl.wrap_socket(sock, **ssl_kwargs) - - -_SSL_PROTOCOLS = { - "tlsv1": ssl.PROTOCOL_TLSv1, - "sslv23": ssl.PROTOCOL_SSLv23, - "sslv3": ssl.PROTOCOL_SSLv3 -} - -try: - _SSL_PROTOCOLS["sslv2"] = ssl.PROTOCOL_SSLv2 -except AttributeError: - pass - - -def validate_ssl_version(version): - key = version.lower() - try: - return _SSL_PROTOCOLS[key] - except KeyError: - raise RuntimeError(_("Invalid SSL version : %s") % version) diff --git a/neutron/openstack/common/versionutils.py b/neutron/openstack/common/versionutils.py deleted file mode 100644 index 04472a86718..00000000000 --- a/neutron/openstack/common/versionutils.py +++ /dev/null @@ -1,148 +0,0 @@ -# Copyright (c) 2013 OpenStack Foundation -# All Rights Reserved. -# -# 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. - -""" -Helpers for comparing version strings. -""" - -import functools -import pkg_resources - -from neutron.openstack.common.gettextutils import _ -from neutron.openstack.common import log as logging - - -LOG = logging.getLogger(__name__) - - -class deprecated(object): - """A decorator to mark callables as deprecated. - - This decorator logs a deprecation message when the callable it decorates is - used. The message will include the release where the callable was - deprecated, the release where it may be removed and possibly an optional - replacement. - - Examples: - - 1. Specifying the required deprecated release - - >>> @deprecated(as_of=deprecated.ICEHOUSE) - ... def a(): pass - - 2. Specifying a replacement: - - >>> @deprecated(as_of=deprecated.ICEHOUSE, in_favor_of='f()') - ... def b(): pass - - 3. Specifying the release where the functionality may be removed: - - >>> @deprecated(as_of=deprecated.ICEHOUSE, remove_in=+1) - ... def c(): pass - - """ - - FOLSOM = 'F' - GRIZZLY = 'G' - HAVANA = 'H' - ICEHOUSE = 'I' - - _RELEASES = { - 'F': 'Folsom', - 'G': 'Grizzly', - 'H': 'Havana', - 'I': 'Icehouse', - } - - _deprecated_msg_with_alternative = _( - '%(what)s is deprecated as of %(as_of)s in favor of ' - '%(in_favor_of)s and may be removed in %(remove_in)s.') - - _deprecated_msg_no_alternative = _( - '%(what)s is deprecated as of %(as_of)s and may be ' - 'removed in %(remove_in)s. It will not be superseded.') - - def __init__(self, as_of, in_favor_of=None, remove_in=2, what=None): - """Initialize decorator - - :param as_of: the release deprecating the callable. Constants - are define in this class for convenience. - :param in_favor_of: the replacement for the callable (optional) - :param remove_in: an integer specifying how many releases to wait - before removing (default: 2) - :param what: name of the thing being deprecated (default: the - callable's name) - - """ - self.as_of = as_of - self.in_favor_of = in_favor_of - self.remove_in = remove_in - self.what = what - - def __call__(self, func): - if not self.what: - self.what = func.__name__ + '()' - - @functools.wraps(func) - def wrapped(*args, **kwargs): - msg, details = self._build_message() - LOG.deprecated(msg, details) - return func(*args, **kwargs) - return wrapped - - def _get_safe_to_remove_release(self, release): - # TODO(dstanek): this method will have to be reimplemented once - # when we get to the X release because once we get to the Y - # release, what is Y+2? - new_release = chr(ord(release) + self.remove_in) - if new_release in self._RELEASES: - return self._RELEASES[new_release] - else: - return new_release - - def _build_message(self): - details = dict(what=self.what, - as_of=self._RELEASES[self.as_of], - remove_in=self._get_safe_to_remove_release(self.as_of)) - - if self.in_favor_of: - details['in_favor_of'] = self.in_favor_of - msg = self._deprecated_msg_with_alternative - else: - msg = self._deprecated_msg_no_alternative - return msg, details - - -def is_compatible(requested_version, current_version, same_major=True): - """Determine whether `requested_version` is satisfied by - `current_version`; in other words, `current_version` is >= - `requested_version`. - - :param requested_version: version to check for compatibility - :param current_version: version to check against - :param same_major: if True, the major version must be identical between - `requested_version` and `current_version`. This is used when a - major-version difference indicates incompatibility between the two - versions. Since this is the common-case in practice, the default is - True. - :returns: True if compatible, False if not - """ - requested_parts = pkg_resources.parse_version(requested_version) - current_parts = pkg_resources.parse_version(current_version) - - if same_major and (requested_parts[0] != current_parts[0]): - return False - - return current_parts >= requested_parts diff --git a/openstack-common.conf b/openstack-common.conf index 6e6c64e9e6c..a3bebcc38b6 100644 --- a/openstack-common.conf +++ b/openstack-common.conf @@ -25,13 +25,11 @@ module=periodic_task module=policy module=processutils module=service -module=sslutils module=strutils module=systemd module=threadgroup module=timeutils module=uuidutils -module=versionutils # The base module to hold the copy of openstack.common base=neutron From f3dd0e823cbdba1cfaa37433aa56d20edd36f75e Mon Sep 17 00:00:00 2001 From: Carl Baldwin Date: Fri, 10 Oct 2014 05:12:43 +0000 Subject: [PATCH 083/128] Avoid constructing a RouterInfo object to get namespace name Constructing a RouterInfo object just for a string concatenation is inefficient and adds more dependence on the class which needs refactoring. Change-Id: Ibaf369d6ebe9285a0c845802def59bfa26ac0fd5 --- neutron/agent/l3_agent.py | 32 +++++++++---------- .../l3reference/test_firewall_l3_agent.py | 3 +- .../tests/unit/services/vpn/test_vpn_agent.py | 3 +- neutron/tests/unit/test_l3_agent.py | 16 ++++++---- 4 files changed, 29 insertions(+), 25 deletions(-) diff --git a/neutron/agent/l3_agent.py b/neutron/agent/l3_agent.py index 829f7dd532e..e23b600fbbd 100644 --- a/neutron/agent/l3_agent.py +++ b/neutron/agent/l3_agent.py @@ -244,7 +244,7 @@ class LinkLocalAllocator(object): class RouterInfo(l3_ha_agent.RouterMixin): def __init__(self, router_id, root_helper, use_namespaces, router, - use_ipv6=False): + use_ipv6=False, ns_name=None): self.router_id = router_id self.ex_gw_port = None self._snat_enabled = None @@ -257,6 +257,7 @@ class RouterInfo(l3_ha_agent.RouterMixin): self.use_namespaces = use_namespaces # Invoke the setter for establishing initial SNAT action self.router = router + self.ns_name = ns_name self.iptables_manager = iptables_manager.IptablesManager( root_helper=root_helper, use_ipv6=use_ipv6, @@ -289,10 +290,6 @@ class RouterInfo(l3_ha_agent.RouterMixin): # Gateway port was removed, remove rules self._snat_action = 'remove_rules' - @property - def ns_name(self): - return NS_PREFIX + self.router_id if self.use_namespaces else None - def perform_snat_action(self, snat_callback, *args): # Process SNAT rules for attached subnets if self._snat_action: @@ -576,14 +573,6 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback, self.target_ex_net_id = None self.use_ipv6 = ipv6_utils.is_enabled() - def _get_router_info(self, router_id, router): - return RouterInfo( - router_id=router_id, - root_helper=self.root_helper, - use_namespaces=self.conf.use_namespaces, - router=router, - use_ipv6=self.use_ipv6) - def _check_config_params(self): """Check items in configuration files. @@ -619,9 +608,8 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback, return set() def _get_routers_namespaces(self, router_ids): - namespaces = set(self._get_router_info(id, router=None).ns_name - for id in router_ids) - namespaces.update(self.get_snat_ns_name(id) for id in router_ids) + namespaces = set(self.get_ns_name(rid) for rid in router_ids) + namespaces.update(self.get_snat_ns_name(rid) for rid in router_ids) return namespaces def _cleanup_namespaces(self, router_namespaces, router_ids): @@ -764,7 +752,14 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback, raise Exception(msg) def _router_added(self, router_id, router): - ri = self._get_router_info(router_id, router) + ns_name = (self.get_ns_name(router_id) + if self.conf.use_namespaces else None) + ri = RouterInfo(router_id=router_id, + root_helper=self.root_helper, + use_namespaces=self.conf.use_namespaces, + router=router, + use_ipv6=self.use_ipv6, + ns_name=ns_name) self.router_info[router_id] = ri if self.conf.use_namespaces: self._create_router_namespace(ri) @@ -1253,6 +1248,9 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback, def get_fip_ns_name(self, ext_net_id): return (FIP_NS_PREFIX + ext_net_id) + def get_ns_name(self, router_id): + return (NS_PREFIX + router_id) + def get_snat_ns_name(self, router_id): return (SNAT_NS_PREFIX + router_id) diff --git a/neutron/tests/unit/services/firewall/agents/l3reference/test_firewall_l3_agent.py b/neutron/tests/unit/services/firewall/agents/l3reference/test_firewall_l3_agent.py index 57edddcb45f..c5c3afeef42 100644 --- a/neutron/tests/unit/services/firewall/agents/l3reference/test_firewall_l3_agent.py +++ b/neutron/tests/unit/services/firewall/agents/l3reference/test_firewall_l3_agent.py @@ -335,8 +335,9 @@ class TestFwaasL3AgentRpcCallback(base.BaseTestCase): def _prepare_router_data(self, use_namespaces): router = {'id': str(uuid.uuid4()), 'tenant_id': str(uuid.uuid4())} + ns = "ns-" + router['id'] return l3_agent.RouterInfo(router['id'], self.conf.root_helper, - use_namespaces, router=router) + use_namespaces, router=router, ns_name=ns) def _get_router_info_list_with_namespace_helper(self, router_use_namespaces): diff --git a/neutron/tests/unit/services/vpn/test_vpn_agent.py b/neutron/tests/unit/services/vpn/test_vpn_agent.py index 2a2a9a14f8d..987b26cd4d1 100644 --- a/neutron/tests/unit/services/vpn/test_vpn_agent.py +++ b/neutron/tests/unit/services/vpn/test_vpn_agent.py @@ -93,8 +93,9 @@ class TestVPNAgent(base.BaseTestCase): def test_get_namespace(self): router_id = _uuid() + ns = "ns-" + router_id ri = l3_agent.RouterInfo(router_id, self.conf.root_helper, - self.conf.use_namespaces, {}) + self.conf.use_namespaces, {}, ns_name=ns) self.agent.router_info = {router_id: ri} namespace = self.agent.get_namespace(router_id) self.assertTrue(namespace.endswith(router_id)) diff --git a/neutron/tests/unit/test_l3_agent.py b/neutron/tests/unit/test_l3_agent.py index 264804a596e..a8b74ea76f7 100644 --- a/neutron/tests/unit/test_l3_agent.py +++ b/neutron/tests/unit/test_l3_agent.py @@ -431,8 +431,9 @@ class TestBasicRouterOperations(base.BaseTestCase): def test_router_info_create(self): id = _uuid() + ns = "ns-" + id ri = l3_agent.RouterInfo(id, self.conf.root_helper, - self.conf.use_namespaces, {}) + self.conf.use_namespaces, {}, ns_name=ns) self.assertTrue(ri.ns_name.endswith(id)) @@ -449,8 +450,9 @@ class TestBasicRouterOperations(base.BaseTestCase): 'enable_snat': True, 'routes': [], 'gw_port': ex_gw_port} + ns = "ns-" + id ri = l3_agent.RouterInfo(id, self.conf.root_helper, - self.conf.use_namespaces, router) + self.conf.use_namespaces, router, ns_name=ns) self.assertTrue(ri.ns_name.endswith(id)) self.assertEqual(ri.router, router) @@ -520,9 +522,10 @@ class TestBasicRouterOperations(base.BaseTestCase): self._test_internal_network_action('remove') def _test_external_gateway_action(self, action, router): - ri = l3_agent.RouterInfo(router['id'], self.conf.root_helper, - self.conf.use_namespaces, router=router) agent = l3_agent.L3NATAgent(HOSTNAME, self.conf) + ri = l3_agent.RouterInfo(router['id'], self.conf.root_helper, + self.conf.use_namespaces, router=router, + ns_name=agent.get_ns_name(router['id'])) # Special setup for dvr routers if router.get('distributed'): agent.conf.agent_mode = 'dvr_snat' @@ -590,9 +593,10 @@ class TestBasicRouterOperations(base.BaseTestCase): def test_external_gateway_updated(self): router = prepare_router_data(num_internal_ports=2) - ri = l3_agent.RouterInfo(router['id'], self.conf.root_helper, - self.conf.use_namespaces, router=router) agent = l3_agent.L3NATAgent(HOSTNAME, self.conf) + ri = l3_agent.RouterInfo(router['id'], self.conf.root_helper, + self.conf.use_namespaces, router=router, + ns_name=agent.get_ns_name(router['id'])) interface_name, ex_gw_port = self._prepare_ext_gw_test(agent) fake_fip = {'floatingips': [{'id': _uuid(), From 1423f8cd0f6ca92334660f9588a94bd0a9851b39 Mon Sep 17 00:00:00 2001 From: armando-migliaccio Date: Fri, 10 Oct 2014 15:28:55 -0700 Subject: [PATCH 084/128] NSX: drop support to deprecated dist-router extension The NSX plugin originally implemented its own 'dist-router' extension. During the Juno timeframe the DVR extension was introduced and the NSX plugin was ported to support both. At the same time 'dist-router' was marked for removal in Kilo. Now that Kilo opened, we can drop the deprecated one. Change-Id: I7d6d2524ef6d5cb94a9e8514425a1a288eea7210 --- .../vmware/extensions/distributedrouter.py | 39 ------------------- neutron/plugins/vmware/plugins/base.py | 1 - 2 files changed, 40 deletions(-) delete mode 100644 neutron/plugins/vmware/extensions/distributedrouter.py diff --git a/neutron/plugins/vmware/extensions/distributedrouter.py b/neutron/plugins/vmware/extensions/distributedrouter.py deleted file mode 100644 index 0ec4af439af..00000000000 --- a/neutron/plugins/vmware/extensions/distributedrouter.py +++ /dev/null @@ -1,39 +0,0 @@ -# Copyright 2013 VMware, Inc. All rights reserved. -# -# 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. - -# TODO(armando-migliaccio): This is deprecated in Juno, and -# to be removed in Kilo. - -from neutron.extensions import dvr - - -class Distributedrouter(dvr.Dvr): - """(Deprecated) Extension class supporting distributed router.""" - - @classmethod - def get_name(cls): - return "Distributed Router" - - @classmethod - def get_alias(cls): - return "dist-router" - - @classmethod - def get_description(cls): - return ("Enables configuration of NSX " - "Distributed routers (Deprecated).") - - @classmethod - def get_namespace(cls): - return "http://docs.openstack.org/ext/dist-router/api/v1.0" diff --git a/neutron/plugins/vmware/plugins/base.py b/neutron/plugins/vmware/plugins/base.py index 37978917714..c6a629a6af6 100644 --- a/neutron/plugins/vmware/plugins/base.py +++ b/neutron/plugins/vmware/plugins/base.py @@ -103,7 +103,6 @@ class NsxPluginV2(addr_pair_db.AllowedAddressPairsMixin, supported_extension_aliases = ["allowed-address-pairs", "binding", "dvr", - "dist-router", "ext-gw-mode", "extraroute", "mac-learning", From 524981cce05a9b365036c0a1e9810036936d3d5b Mon Sep 17 00:00:00 2001 From: ZHU ZHU Date: Fri, 5 Sep 2014 03:01:07 -0500 Subject: [PATCH 085/128] Reduce security group db calls to neutron server Within ovs agent daemon loop, prepare_devices_filter will impose heavy workloads to neutron server in order to retrieve the security groups message to apply firewall rules. If agent is configured to use Noopfirewall driver or security groups are disabled, there is no need for loading the rules from server and refreshing the firewalls. This will reduce the number of db calls and improve performance for neutron server in this case. Change-Id: Id244aab3cac37fc6ed3dc05cbee91cdf9e34d9cc Closes-Bug: #1365806 --- neutron/agent/securitygroups_rpc.py | 41 ++++++++++++----- .../tests/unit/test_security_groups_rpc.py | 45 +++++++++++++++++++ 2 files changed, 74 insertions(+), 12 deletions(-) diff --git a/neutron/agent/securitygroups_rpc.py b/neutron/agent/securitygroups_rpc.py index 17b544502e6..3da4d347f00 100644 --- a/neutron/agent/securitygroups_rpc.py +++ b/neutron/agent/securitygroups_rpc.py @@ -14,11 +14,14 @@ # under the License. # +import functools + from oslo.config import cfg from oslo import messaging +from neutron.agent import firewall from neutron.common import topics -from neutron.openstack.common.gettextutils import _LW +from neutron.openstack.common.gettextutils import _LI, _LW from neutron.openstack.common import importutils from neutron.openstack.common import log as logging @@ -74,9 +77,9 @@ def _disable_extension(extension, aliases): def disable_security_group_extension_by_config(aliases): if not is_firewall_enabled(): - LOG.info(_('Disabled security-group extension.')) + LOG.info(_LI('Disabled security-group extension.')) _disable_extension('security-group', aliases) - LOG.info(_('Disabled allowed-address-pairs extension.')) + LOG.info(_LI('Disabled allowed-address-pairs extension.')) _disable_extension('allowed-address-pairs', aliases) @@ -187,10 +190,23 @@ class SecurityGroupAgentRpcMixin(object): return False return True + def skip_if_noopfirewall_or_firewall_disabled(func): + @functools.wraps(func) + def decorated_function(self, *args, **kwargs): + if (isinstance(self.firewall, firewall.NoopFirewallDriver) or + not is_firewall_enabled()): + LOG.info(_LI("Skipping method %s as firewall is disabled " + "or configured as NoopFirewallDriver."), + func.__name__) + else: + return func(self, *args, **kwargs) + return decorated_function + + @skip_if_noopfirewall_or_firewall_disabled def prepare_devices_filter(self, device_ids): if not device_ids: return - LOG.info(_("Preparing filters for devices %s"), device_ids) + LOG.info(_LI("Preparing filters for devices %s"), device_ids) if self.use_enhanced_rpc: devices_info = self.plugin_rpc.security_group_info_for_devices( self.context, list(device_ids)) @@ -220,15 +236,15 @@ class SecurityGroupAgentRpcMixin(object): remote_sg_id, member_ips) def security_groups_rule_updated(self, security_groups): - LOG.info(_("Security group " - "rule updated %r"), security_groups) + LOG.info(_LI("Security group " + "rule updated %r"), security_groups) self._security_group_updated( security_groups, 'security_groups') def security_groups_member_updated(self, security_groups): - LOG.info(_("Security group " - "member updated %r"), security_groups) + LOG.info(_LI("Security group " + "member updated %r"), security_groups) self._security_group_updated( security_groups, 'security_group_source_groups') @@ -249,7 +265,7 @@ class SecurityGroupAgentRpcMixin(object): self.refresh_firewall(devices) def security_groups_provider_updated(self): - LOG.info(_("Provider rule updated")) + LOG.info(_LI("Provider rule updated")) if self.defer_refresh_firewall: # NOTE(salv-orlando): A 'global refresh' might not be # necessary if the subnet for which the provider rules @@ -261,7 +277,7 @@ class SecurityGroupAgentRpcMixin(object): def remove_devices_filter(self, device_ids): if not device_ids: return - LOG.info(_("Remove device filter for %r"), device_ids) + LOG.info(_LI("Remove device filter for %r"), device_ids) with self.firewall.defer_apply(): for device_id in device_ids: device = self.firewall.ports.get(device_id) @@ -269,12 +285,13 @@ class SecurityGroupAgentRpcMixin(object): continue self.firewall.remove_port_filter(device) + @skip_if_noopfirewall_or_firewall_disabled def refresh_firewall(self, device_ids=None): - LOG.info(_("Refresh firewall rules")) + LOG.info(_LI("Refresh firewall rules")) if not device_ids: device_ids = self.firewall.ports.keys() if not device_ids: - LOG.info(_("No ports here to refresh firewall")) + LOG.info(_LI("No ports here to refresh firewall")) return if self.use_enhanced_rpc: devices_info = self.plugin_rpc.security_group_info_for_devices( diff --git a/neutron/tests/unit/test_security_groups_rpc.py b/neutron/tests/unit/test_security_groups_rpc.py index add1f4e8724..58a68bfe60d 100644 --- a/neutron/tests/unit/test_security_groups_rpc.py +++ b/neutron/tests/unit/test_security_groups_rpc.py @@ -1021,6 +1021,7 @@ class BaseSecurityGroupAgentRpcTestCase(base.BaseTestCase): self.agent.root_helper = 'sudo' self.agent.plugin_rpc = mock.Mock() self.agent.init_firewall(defer_refresh_firewall=defer_refresh_firewall) + self.default_firewall = self.agent.firewall self.firewall = mock.Mock() firewall_object = firewall_base.FirewallDriver() self.firewall.defer_apply.side_effect = firewall_object.defer_apply @@ -1057,6 +1058,26 @@ class SecurityGroupAgentRpcTestCase(BaseSecurityGroupAgentRpcTestCase): self.fake_device), ]) + def test_prepare_devices_filter_with_noopfirewall(self): + self.agent.firewall = self.default_firewall + self.agent.plugin_rpc.security_group_info_for_devices = mock.Mock() + self.agent.plugin_rpc.security_group_rules_for_devices = mock.Mock() + self.agent.prepare_devices_filter(['fake_device']) + self.assertFalse(self.agent.plugin_rpc. + security_group_info_for_devices.called) + self.assertFalse(self.agent.plugin_rpc. + security_group_rules_for_devices.called) + + def test_prepare_devices_filter_with_firewall_disabled(self): + cfg.CONF.set_override('enable_security_group', False, 'SECURITYGROUP') + self.agent.plugin_rpc.security_group_info_for_devices = mock.Mock() + self.agent.plugin_rpc.security_group_rules_for_devices = mock.Mock() + self.agent.prepare_devices_filter(['fake_device']) + self.assertFalse(self.agent.plugin_rpc. + security_group_info_for_devices.called) + self.assertFalse(self.agent.plugin_rpc. + security_group_rules_for_devices.called) + def test_security_groups_rule_updated(self): self.agent.refresh_firewall = mock.Mock() self.agent.prepare_devices_filter(['fake_port_id']) @@ -1111,6 +1132,30 @@ class SecurityGroupAgentRpcTestCase(BaseSecurityGroupAgentRpcTestCase): self.agent.refresh_firewall([]) self.assertFalse(self.firewall.called) + def test_refresh_firewall_with_firewall_disabled(self): + cfg.CONF.set_override('enable_security_group', False, 'SECURITYGROUP') + self.agent.plugin_rpc.security_group_info_for_devices = mock.Mock() + self.agent.plugin_rpc.security_group_rules_for_devices = mock.Mock() + self.agent.firewall.defer_apply = mock.Mock() + self.agent.refresh_firewall([self.fake_device]) + self.assertFalse(self.agent.plugin_rpc. + security_group_info_for_devices.called) + self.assertFalse(self.agent.plugin_rpc. + security_group_rules_for_devices.called) + self.assertFalse(self.agent.firewall.defer_apply.called) + + def test_refresh_firewall_with_noopfirewall(self): + self.agent.firewall = self.default_firewall + self.agent.plugin_rpc.security_group_info_for_devices = mock.Mock() + self.agent.plugin_rpc.security_group_rules_for_devices = mock.Mock() + self.agent.firewall.defer_apply = mock.Mock() + self.agent.refresh_firewall([self.fake_device]) + self.assertFalse(self.agent.plugin_rpc. + security_group_info_for_devices.called) + self.assertFalse(self.agent.plugin_rpc. + security_group_rules_for_devices.called) + self.assertFalse(self.agent.firewall.defer_apply.called) + class SecurityGroupAgentEnhancedRpcTestCase( BaseSecurityGroupAgentRpcTestCase): From b1ca067cda3556ad2c40dce07a072f2a1044fcc1 Mon Sep 17 00:00:00 2001 From: Yalei Wang Date: Sun, 12 Oct 2014 01:03:20 +0800 Subject: [PATCH 086/128] update the relative path of api_extensions_path the previous path 'unit/extensions' could not be found correctly. Change-Id: Ic8e658e651e99e57d19f6c3390db89650600decd Closes-Bug: 1379711 --- neutron/tests/etc/neutron.conf.test | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/neutron/tests/etc/neutron.conf.test b/neutron/tests/etc/neutron.conf.test index 45fcf29411e..c636bd2721d 100644 --- a/neutron/tests/etc/neutron.conf.test +++ b/neutron/tests/etc/neutron.conf.test @@ -12,7 +12,7 @@ bind_host = 0.0.0.0 bind_port = 9696 # Path to the extensions -api_extensions_path = unit/extensions +api_extensions_path = neutron/tests/unit/extensions # Paste configuration file api_paste_config = api-paste.ini.test From 685f6c9a7f4bc3996bf233a51ab3968edff24681 Mon Sep 17 00:00:00 2001 From: OpenStack Proposal Bot Date: Sat, 11 Oct 2014 22:33:01 +0000 Subject: [PATCH 087/128] Updated from global requirements Change-Id: Ib0c8c561427f141583d677e86a76cbfe4e2be606 --- requirements.txt | 2 +- test-requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index e9e2db153fd..8bfe3bd871e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -21,7 +21,7 @@ netaddr>=0.7.12 python-neutronclient>=2.3.6,<3 SQLAlchemy>=0.8.4,<=0.8.99,>=0.9.7,<=0.9.99 WebOb>=1.2.3 -python-keystoneclient>=0.10.0 +python-keystoneclient>=0.11.1 alembic>=0.6.4 six>=1.7.0 stevedore>=1.0.0 # Apache-2.0 diff --git a/test-requirements.txt b/test-requirements.txt index 673a774f0f5..1ff984a4ad0 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -11,7 +11,7 @@ mock>=1.0 python-subunit>=0.0.18 ordereddict requests-mock>=0.4.0 # Apache-2.0 -sphinx>=1.1.2,!=1.2.0,<1.3 +sphinx>=1.1.2,!=1.2.0,!=1.3b1,<1.3 oslosphinx>=2.2.0 # Apache-2.0 testrepository>=0.0.18 testtools>=0.9.34 From 542f5cc6277c6d66bb1f603e174f1254e823f2c9 Mon Sep 17 00:00:00 2001 From: Angus Lees Date: Wed, 20 Aug 2014 13:38:14 +1000 Subject: [PATCH 088/128] Add pylint tox environment and disable all existing warnings pylintrc update disables all warnings that currently trigger on neutron code. The rough plan is to slowly re-enable warning categories as we clean up code in question. This change also includes a few ultra-trivial syntax cleanups where it allowed the check to be immediately enabled for the rest of the codebase: - Added missing trailing newlines in several files (db/migration/__init__.py, nuage/{nuagedb,syncmanager,common/config}.py) - Renamed self to cls in @classmethods (cisco/db/l3/device_handling_db.py) - Removed whitespace around '=' in a kwarg (cisco/db/l3/device_handling_db.py, cisco/db/n1kv_db_v2.py) - Updated deprecated pylint 'disable-msg' directive to newer 'disable' (cisco/extensions/qos.py) - File-specific disable for too-many-format-args pending further investigation of alternatives (ml2/drivers/arista/arista_l3_driver.py) - Import module rather than object and avoid long line (services/l3_router/l3_arista.py) Change-Id: Ifb0a1a38e33f9073a78658ca578fbd2a42747724 --- .pylintrc | 125 +++++++++++++++--- .../plugins/cisco/db/l3/device_handling_db.py | 22 +-- neutron/plugins/cisco/db/n1kv_db_v2.py | 6 +- neutron/plugins/cisco/extensions/qos.py | 2 +- .../ml2/drivers/arista/arista_l3_driver.py | 2 + neutron/services/l3_router/l3_arista.py | 7 +- tox.ini | 7 + 7 files changed, 136 insertions(+), 35 deletions(-) diff --git a/.pylintrc b/.pylintrc index 87fbcd3b3df..c738c547c1d 100644 --- a/.pylintrc +++ b/.pylintrc @@ -2,17 +2,98 @@ [MASTER] # Add to the black list. It should be a base name, not a # path. You may set this option multiple times. -ignore=test +# +# Note the 'openstack' below is intended to match only +# neutron.openstack.common. If we ever have another 'openstack' +# dirname, then we'll need to expand the ignore features in pylint :/ +ignore=.git,tests,openstack -[Messages Control] -# NOTE(justinsb): We might want to have a 2nd strict pylintrc in future -# C0111: Don't require docstrings on every method -# W0511: TODOs in code comments are fine. -# W0142: *args and **kwargs are fine. -# W0622: Redefining id is fine. -disable=C0111,W0511,W0142,W0622 +[MESSAGES CONTROL] +# NOTE(gus): This is a long list. A number of these are important and +# should be re-enabled once the offending code is fixed (or marked +# with a local disable) +disable= +# "F" Fatal errors that prevent further processing + import-error, +# "I" Informational noise + locally-disabled, +# "E" Error for important programming issues (likely bugs) + access-member-before-definition, + assignment-from-no-return, + bad-except-order, + bad-super-call, + maybe-no-member, + no-member, + no-method-argument, + no-name-in-module, + no-self-argument, + not-callable, + no-value-for-parameter, + super-on-old-class, + too-few-format-args, +# "W" Warnings for stylistic problems or minor programming issues + abstract-method, + anomalous-backslash-in-string, + anomalous-unicode-escape-in-string, + arguments-differ, + attribute-defined-outside-init, + bad-builtin, + bad-indentation, + broad-except, + dangerous-default-value, + deprecated-lambda, + duplicate-key, + expression-not-assigned, + fixme, + global-statement, + global-variable-not-assigned, + logging-not-lazy, + lost-exception, + no-init, + non-parent-init-called, + pointless-string-statement, + protected-access, + redefined-builtin, + redefined-outer-name, + redefine-in-handler, + reimported, + signature-differs, + star-args, + super-init-not-called, + undefined-loop-variable, + unnecessary-lambda, + unnecessary-pass, + unpacking-non-sequence, + unreachable, + unused-argument, + unused-import, + unused-variable, + useless-else-on-loop, +# "C" Coding convention violations + bad-continuation, + invalid-name, + missing-docstring, + old-style-class, + superfluous-parens, +# "R" Refactor recommendations + abstract-class-little-used, + abstract-class-not-used, + cyclic-import, + duplicate-code, + interface-not-implemented, + no-self-use, + too-few-public-methods, + too-many-ancestors, + too-many-arguments, + too-many-branches, + too-many-instance-attributes, + too-many-lines, + too-many-locals, + too-many-public-methods, + too-many-return-statements, + too-many-statements -[Basic] +[BASIC] # Variable names can be 1 to 31 characters long, with lowercase and underscores variable-rgx=[a-z_][a-z0-9_]{0,30}$ @@ -21,7 +102,7 @@ argument-rgx=[a-z_][a-z0-9_]{1,30}$ # Method names should be at least 3 characters long # and be lowecased with underscores -method-rgx=([a-z_][a-z0-9_]{2,50}|setUp|tearDown)$ +method-rgx=([a-z_][a-z0-9_]{2,}|setUp|tearDown)$ # Module names matching neutron-* are ok (files in bin/) module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+)|(neutron-[a-z0-9_-]+))$ @@ -29,14 +110,26 @@ module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+)|(neutron-[a-z0-9_-]+))$ # Don't require docstrings on tests. no-docstring-rgx=((__.*__)|([tT]est.*)|setUp|tearDown)$ -[Design] -max-public-methods=100 -min-public-methods=0 -max-args=6 - -[Variables] +[FORMAT] +# Maximum number of characters on a single line. +max-line-length=79 +[VARIABLES] # List of additional names supposed to be defined in builtins. Remember that # you should avoid to define new builtins when possible. # _ is used by our localization additional-builtins=_ + +[CLASSES] +# List of interface methods to ignore, separated by a comma. +ignore-iface-methods= + +[IMPORTS] +# Deprecated modules which should not be used, separated by a comma +deprecated-modules= +# should use openstack.common.jsonutils + json + +[REPORTS] +# Tells whether to display a full report or only the messages +reports=no diff --git a/neutron/plugins/cisco/db/l3/device_handling_db.py b/neutron/plugins/cisco/db/l3/device_handling_db.py index a2834899182..4e5deccd709 100644 --- a/neutron/plugins/cisco/db/l3/device_handling_db.py +++ b/neutron/plugins/cisco/db/l3/device_handling_db.py @@ -187,30 +187,30 @@ class DeviceHandlingMixin(object): return cls._mgmt_sec_grp_id @classmethod - def get_hosting_device_driver(self): + def get_hosting_device_driver(cls): """Returns device driver.""" - if self._hosting_device_driver: - return self._hosting_device_driver + if cls._hosting_device_driver: + return cls._hosting_device_driver else: try: - self._hosting_device_driver = importutils.import_object( + cls._hosting_device_driver = importutils.import_object( cfg.CONF.hosting_devices.csr1kv_device_driver) except (ImportError, TypeError, n_exc.NeutronException): LOG.exception(_('Error loading hosting device driver')) - return self._hosting_device_driver + return cls._hosting_device_driver @classmethod - def get_hosting_device_plugging_driver(self): + def get_hosting_device_plugging_driver(cls): """Returns plugging driver.""" - if self._plugging_driver: - return self._plugging_driver + if cls._plugging_driver: + return cls._plugging_driver else: try: - self._plugging_driver = importutils.import_object( + cls._plugging_driver = importutils.import_object( cfg.CONF.hosting_devices.csr1kv_plugging_driver) except (ImportError, TypeError, n_exc.NeutronException): LOG.exception(_('Error loading plugging driver')) - return self._plugging_driver + return cls._plugging_driver def get_hosting_devices_qry(self, context, hosting_device_ids, load_agent=True): @@ -432,7 +432,7 @@ class DeviceHandlingMixin(object): with context.session.begin(subtransactions=True): hd_db = l3_models.HostingDevice( id=hd.get('id') or uuidutils.generate_uuid(), - complementary_id = hd.get('complementary_id'), + complementary_id=hd.get('complementary_id'), tenant_id=tenant_id, device_id=hd.get('device_id'), admin_state_up=hd.get('admin_state_up', True), diff --git a/neutron/plugins/cisco/db/n1kv_db_v2.py b/neutron/plugins/cisco/db/n1kv_db_v2.py index d694b236764..20c9706f0aa 100644 --- a/neutron/plugins/cisco/db/n1kv_db_v2.py +++ b/neutron/plugins/cisco/db/n1kv_db_v2.py @@ -943,9 +943,9 @@ def update_profile_binding(db_session, profile_id, tenants, profile_type): profile_id=profile_id, profile_type=profile_type).delete() new_tenants_set = set(tenants) for tenant_id in new_tenants_set: - tenant = n1kv_models_v2.ProfileBinding(profile_type = profile_type, - tenant_id = tenant_id, - profile_id = profile_id) + tenant = n1kv_models_v2.ProfileBinding(profile_type=profile_type, + tenant_id=tenant_id, + profile_id=profile_id) db_session.add(tenant) diff --git a/neutron/plugins/cisco/extensions/qos.py b/neutron/plugins/cisco/extensions/qos.py index 5d6cb7b6073..db642f1d4b7 100644 --- a/neutron/plugins/cisco/extensions/qos.py +++ b/neutron/plugins/cisco/extensions/qos.py @@ -94,7 +94,7 @@ class QosController(common.NeutronController, wsgi.Controller): result = [builder.build(qos, is_detail)['qos'] for qos in qoss] return dict(qoss=result) - # pylint: disable-msg=E1101 + # pylint: disable=no-member def show(self, request, tenant_id, id): """Returns qos details for the given qos id.""" try: diff --git a/neutron/plugins/ml2/drivers/arista/arista_l3_driver.py b/neutron/plugins/ml2/drivers/arista/arista_l3_driver.py index aac24410f02..5aa64d8a380 100644 --- a/neutron/plugins/ml2/drivers/arista/arista_l3_driver.py +++ b/neutron/plugins/ml2/drivers/arista/arista_l3_driver.py @@ -33,6 +33,8 @@ VIRTUAL_ROUTER_MAC = '00:11:22:33:44:55' IPV4_BITS = 32 IPV6_BITS = 128 +# This string-format-at-a-distance confuses pylint :( +# pylint: disable=too-many-format-args router_in_vrf = { 'router': {'create': ['vrf definition {0}', 'rd {1}', diff --git a/neutron/services/l3_router/l3_arista.py b/neutron/services/l3_router/l3_arista.py index 2c6cf9cc701..89fc98b37e9 100644 --- a/neutron/services/l3_router/l3_arista.py +++ b/neutron/services/l3_router/l3_arista.py @@ -32,8 +32,7 @@ from neutron.openstack.common import excutils from neutron.openstack.common import log as logging from neutron.plugins.common import constants from neutron.plugins.ml2.driver_context import NetworkContext # noqa -from neutron.plugins.ml2.drivers.arista.arista_l3_driver import AristaL3Driver # noqa -from neutron.plugins.ml2.drivers.arista.arista_l3_driver import NeutronNets # noqa +from neutron.plugins.ml2.drivers.arista import arista_l3_driver LOG = logging.getLogger(__name__) @@ -54,8 +53,8 @@ class AristaL3ServicePlugin(db_base_plugin_v2.NeutronDbPluginV2, def __init__(self, driver=None): - self.driver = driver or AristaL3Driver() - self.ndb = NeutronNets() + self.driver = driver or arista_l3_driver.AristaL3Driver() + self.ndb = arista_l3_driver.NeutronNets() self.setup_rpc() self.sync_timeout = cfg.CONF.l3_arista.l3_sync_interval self.sync_lock = threading.Lock() diff --git a/tox.ini b/tox.ini index 90cc8d766cf..2c257833f27 100644 --- a/tox.ini +++ b/tox.ini @@ -84,6 +84,13 @@ show-source = true builtins = _ exclude = .venv,.git,.tox,dist,doc,*openstack/common*,*lib/python*,*egg,build,tools,.ropeproject,rally-scenarios +[testenv:pylint] +deps = + {[testenv]deps} + pylint +commands = + pylint --rcfile=.pylintrc --output-format=colorized {posargs:neutron} + [hacking] import_exceptions = neutron.openstack.common.gettextutils local-check-factory = neutron.hacking.checks.factory From 648063881ebfbb54a362ef32d58263fc0f20981c Mon Sep 17 00:00:00 2001 From: Angus Lees Date: Thu, 28 Aug 2014 14:37:34 +1000 Subject: [PATCH 089/128] Compare subnet length as well when deleting DHCP entry When searching for the DHCP subnet entry to delete, the existing code compares only the subnet prefix and ignores subnet length. This could delete the wrong entry/entries if nested subnets are present. Change-Id: Icf079c42adeca14ef84ec57dc45a5930fde8786d Closes-Bug: #1362416 --- neutron/plugins/midonet/midonet_lib.py | 3 ++- neutron/tests/unit/midonet/test_midonet_lib.py | 14 +++++++++----- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/neutron/plugins/midonet/midonet_lib.py b/neutron/plugins/midonet/midonet_lib.py index a733eb05747..60dac242504 100644 --- a/neutron/plugins/midonet/midonet_lib.py +++ b/neutron/plugins/midonet/midonet_lib.py @@ -212,7 +212,8 @@ class MidoClient: raise MidonetApiException( msg=_("Tried to delete non-existent DHCP")) for dhcp in dhcp_subnets: - if dhcp.get_subnet_prefix() == net_addr: + if (dhcp.get_subnet_prefix() == net_addr and + dhcp.get_subnet_length() == str(net_len)): dhcp.delete() break diff --git a/neutron/tests/unit/midonet/test_midonet_lib.py b/neutron/tests/unit/midonet/test_midonet_lib.py index 9f456a87091..b581493ea52 100644 --- a/neutron/tests/unit/midonet/test_midonet_lib.py +++ b/neutron/tests/unit/midonet/test_midonet_lib.py @@ -92,14 +92,18 @@ class MidoClientTestCase(testtools.TestCase): def test_delete_dhcp(self): bridge = mock.Mock() - subnet = mock.Mock() - subnet.get_subnet_prefix.return_value = "10.0.0.0" - subnets = mock.MagicMock(return_value=[subnet]) + subnet1 = mock.Mock() + subnet1.get_subnet_prefix.return_value = "10.0.0.0" + subnet1.get_subnet_length.return_value = "16" + subnet2 = mock.Mock() + subnet2.get_subnet_prefix.return_value = "10.0.0.0" + subnet2.get_subnet_length.return_value = "24" + subnets = mock.MagicMock(return_value=[subnet1, subnet2]) bridge.get_dhcp_subnets.side_effect = subnets self.client.delete_dhcp(bridge, "10.0.0.0/24") bridge.assert_has_calls(mock.call.get_dhcp_subnets) - subnet.assert_has_calls([mock.call.get_subnet_prefix(), - mock.call.delete()]) + self.assertFalse(subnet1.delete.called) + subnet2.delete.assert_called_once_with() def test_add_dhcp_host(self): From dcfcf31629706758cf7ace61dbf24e59c59f25d5 Mon Sep 17 00:00:00 2001 From: vikas Date: Wed, 4 Jun 2014 02:49:41 -0700 Subject: [PATCH 090/128] Check for VPN Objects when deleting interfaces When we delete Router interfaces/gateway, we need to check if any VPN services are associated with that router. Closes-Bug:1261598 Change-Id: I7df2b8b130b47ec070d0b0a36b1a62df40532760 --- neutron/db/l3_db.py | 8 ++++ neutron/db/vpn/vpn_db.py | 10 +++++ neutron/extensions/vpnaas.py | 4 ++ neutron/tests/unit/db/vpn/test_db_vpnaas.py | 49 +++++++++++++++++++++ 4 files changed, 71 insertions(+) diff --git a/neutron/db/l3_db.py b/neutron/db/l3_db.py index 0f8a56c0efb..cca763eff12 100644 --- a/neutron/db/l3_db.py +++ b/neutron/db/l3_db.py @@ -316,6 +316,10 @@ class L3_NAT_dbonly_mixin(l3.RouterPluginBase): router.gw_port = None context.session.add(router) context.session.expire(gw_port) + vpnservice = manager.NeutronManager.get_service_plugins().get( + constants.VPN) + if vpnservice: + vpnservice.check_router_in_use(context, router_id) self._core_plugin.delete_port( admin_ctx, gw_port['id'], l3_port_check=False) @@ -518,6 +522,10 @@ class L3_NAT_dbonly_mixin(l3.RouterPluginBase): subnet_db = self._core_plugin._get_subnet(context, subnet_id) subnet_cidr = netaddr.IPNetwork(subnet_db['cidr']) fip_qry = context.session.query(FloatingIP) + vpnservice = manager.NeutronManager.get_service_plugins().get( + constants.VPN) + if vpnservice: + vpnservice.check_subnet_in_use(context, subnet_id) for fip_db in fip_qry.filter_by(router_id=router_id): if netaddr.IPAddress(fip_db['fixed_ip_address']) in subnet_cidr: raise l3.RouterInterfaceInUseByFloatingIP( diff --git a/neutron/db/vpn/vpn_db.py b/neutron/db/vpn/vpn_db.py index 6ff9b7c9650..085b5939838 100644 --- a/neutron/db/vpn/vpn_db.py +++ b/neutron/db/vpn/vpn_db.py @@ -601,6 +601,16 @@ class VPNPluginDb(vpnaas.VPNPluginBase, base_db.CommonDbMixin): router_id=router_id, vpnservice_id=vpnservices[0]['id']) + def check_subnet_in_use(self, context, subnet_id): + with context.session.begin(subtransactions=True): + vpnservices = context.session.query(VPNService).filter_by( + subnet_id=subnet_id + ).first() + if vpnservices: + raise vpnaas.SubnetInUseByVPNService( + subnet_id=subnet_id, + vpnservice_id=vpnservices['id']) + class VPNPluginRpcDbMixin(): def _get_agent_hosting_vpn_services(self, context, host): diff --git a/neutron/extensions/vpnaas.py b/neutron/extensions/vpnaas.py index a1bf41876bc..fc32d2ace1f 100644 --- a/neutron/extensions/vpnaas.py +++ b/neutron/extensions/vpnaas.py @@ -64,6 +64,10 @@ class RouterInUseByVPNService(qexception.InUse): message = _("Router %(router_id)s is used by VPNService %(vpnservice_id)s") +class SubnetInUseByVPNService(qexception.InUse): + message = _("Subnet %(subnet_id)s is used by VPNService %(vpnservice_id)s") + + class VPNStateInvalidToUpdate(qexception.BadRequest): message = _("Invalid state %(state)s of vpnaas resource %(id)s" " for updating") diff --git a/neutron/tests/unit/db/vpn/test_db_vpnaas.py b/neutron/tests/unit/db/vpn/test_db_vpnaas.py index 7b9404f02f7..6f641df6d17 100644 --- a/neutron/tests/unit/db/vpn/test_db_vpnaas.py +++ b/neutron/tests/unit/db/vpn/test_db_vpnaas.py @@ -867,6 +867,55 @@ class TestVpnaas(VPNPluginDbTestCase): if k in expected), expected) + def test_delete_router_interface_in_use_by_vpnservice(self): + """Test delete router interface in use by vpn service.""" + with self.subnet(cidr='10.2.0.0/24') as subnet: + with self.router() as router: + with self.vpnservice(subnet=subnet, + router=router): + self._router_interface_action('remove', + router['router']['id'], + subnet['subnet']['id'], + None, + expected_code=webob.exc. + HTTPConflict.code) + + def test_delete_external_gateway_interface_in_use_by_vpnservice(self): + """Test delete external gateway interface in use by vpn service.""" + with self.subnet(cidr='10.2.0.0/24') as subnet: + with self.router() as router: + with self.subnet(cidr='11.0.0.0/24') as public_sub: + self._set_net_external( + public_sub['subnet']['network_id']) + self._add_external_gateway_to_router( + router['router']['id'], + public_sub['subnet']['network_id']) + with self.vpnservice(subnet=subnet, + router=router): + self._remove_external_gateway_from_router( + router['router']['id'], + public_sub['subnet']['network_id'], + expected_code=webob.exc.HTTPConflict.code) + + def test_router_update_after_ipsec_site_connection(self): + """Test case to update router after vpn connection.""" + rname1 = "router_one" + rname2 = "router_two" + with self.subnet(cidr='10.2.0.0/24') as subnet: + with self.router(name=rname1) as r: + with self.vpnservice(subnet=subnet, + router=r + ) as vpnservice: + self.ipsec_site_connection( + name='connection1', vpnservice=vpnservice + ) + body = self._show('routers', r['router']['id']) + self.assertEqual(body['router']['name'], rname1) + body = self._update('routers', r['router']['id'], + {'router': {'name': rname2}}) + body = self._show('routers', r['router']['id']) + self.assertEqual(body['router']['name'], rname2) + def test_update_vpnservice(self): """Test case to update a vpnservice.""" name = 'new_vpnservice1' From e40c2ed58ce998fc5aba83ffae8ebefec9403c3b Mon Sep 17 00:00:00 2001 From: Jacek Swiderski Date: Tue, 23 Sep 2014 14:35:06 +0200 Subject: [PATCH 091/128] mock.assert_called_once() is not a valid method mock.assert_called_once() is a no-op that tests nothing. Instead mock.assert_called_once_with() should be used (or use assertEqual(1, mock_obj.call_count) if you don't want to check parameters). Borrowed HACKING rule from Davanum Srinivas's nova patch to prevent it from appearing again. Change-Id: Idac1d3c89c07e13c9a209663f4e557fcb7547821 Closes-Bug: #1365751 Closes-Bug: #1300265 --- HACKING.rst | 1 + neutron/hacking/checks.py | 12 ++++++++++ .../apic/test_cisco_apic_mechanism_driver.py | 20 ++++------------ .../cisco/apic/test_cisco_apic_sync.py | 11 +++++---- .../services/l3_router/test_l3_apic_plugin.py | 3 ++- .../drivers/radware/test_plugin_driver.py | 24 +++++++++++++++---- neutron/tests/unit/test_hacking.py | 18 ++++++++++++++ neutron/tests/unit/test_l3_agent.py | 8 +++---- 8 files changed, 68 insertions(+), 29 deletions(-) diff --git a/HACKING.rst b/HACKING.rst index a0595952cae..b12291a1c02 100644 --- a/HACKING.rst +++ b/HACKING.rst @@ -12,6 +12,7 @@ Neutron Specific Commandments - [N321] Validate that jsonutils module is used instead of json - [N322] We do not use @authors tags in source files. We have git to track authorship. +- [N323] assert_called_once() is not a valid method Creating Unit Tests ------------------- diff --git a/neutron/hacking/checks.py b/neutron/hacking/checks.py index a170a0d4be8..ebb99f0d00f 100644 --- a/neutron/hacking/checks.py +++ b/neutron/hacking/checks.py @@ -79,7 +79,19 @@ def no_author_tags(physical_line): return pos, "N322: Don't use author tags" +def check_assert_called_once(logical_line, filename): + msg = ("N323: assert_called_once is a no-op. please use " + "assert_called_once_with to test with explicit parameters or an " + "assertEqual with call_count.") + + if 'neutron/tests/' in filename: + pos = logical_line.find('.assert_called_once(') + if pos != -1: + yield (pos, msg) + + def factory(register): register(validate_log_translations) register(use_jsonutils) register(no_author_tags) + register(check_assert_called_once) diff --git a/neutron/tests/unit/ml2/drivers/cisco/apic/test_cisco_apic_mechanism_driver.py b/neutron/tests/unit/ml2/drivers/cisco/apic/test_cisco_apic_mechanism_driver.py index 7c41361bf34..e2f50716ce8 100644 --- a/neutron/tests/unit/ml2/drivers/cisco/apic/test_cisco_apic_mechanism_driver.py +++ b/neutron/tests/unit/ml2/drivers/cisco/apic/test_cisco_apic_mechanism_driver.py @@ -68,10 +68,11 @@ class TestCiscoApicMechDriver(base.BaseTestCase, self.driver.apic_manager.apic.transaction = self.fake_transaction def test_initialize(self): - mgr = self.driver.apic_manager self.driver.initialize() - mgr.ensure_infra_created_on_apic.assert_called_once() - mgr.ensure_bgp_pod_policy_created_on_apic.assert_called_once() + mgr = self.driver.apic_manager + self.assertEqual(1, mgr.ensure_infra_created_on_apic.call_count) + self.assertEqual(1, + mgr.ensure_bgp_pod_policy_created_on_apic.call_count) def test_update_port_postcommit(self): net_ctx = self._get_network_context(mocked.APIC_TENANT, @@ -99,7 +100,7 @@ class TestCiscoApicMechDriver(base.BaseTestCase, self.driver.update_port_postcommit(port_ctx) mgr.get_router_contract.assert_called_once_with( port_ctx.current['device_id']) - mgr.ensure_context_enforced.assert_called_once() + self.assertEqual(1, mgr.ensure_context_enforced.call_count) mgr.ensure_external_routed_network_created.assert_called_once_with( mocked.APIC_NETWORK, transaction='transaction') mgr.ensure_logical_node_profile_created.assert_called_once_with( @@ -119,17 +120,6 @@ class TestCiscoApicMechDriver(base.BaseTestCase, mocked.APIC_NETWORK, mgr.get_router_contract.return_value, transaction='transaction') - def test_update_gw_port_postcommit_fail_contract_create(self): - net_ctx = self._get_network_context(mocked.APIC_TENANT, - mocked.APIC_NETWORK, - TEST_SEGMENT1, external=True) - port_ctx = self._get_port_context(mocked.APIC_TENANT, - mocked.APIC_NETWORK, - 'vm1', net_ctx, HOST_ID1, gw=True) - mgr = self.driver.apic_manager - self.driver.update_port_postcommit(port_ctx) - mgr.ensure_external_routed_network_deleted.assert_called_once() - def test_create_network_postcommit(self): ctx = self._get_network_context(mocked.APIC_TENANT, mocked.APIC_NETWORK, diff --git a/neutron/tests/unit/ml2/drivers/cisco/apic/test_cisco_apic_sync.py b/neutron/tests/unit/ml2/drivers/cisco/apic/test_cisco_apic_sync.py index 3780e57de21..b687f478883 100644 --- a/neutron/tests/unit/ml2/drivers/cisco/apic/test_cisco_apic_sync.py +++ b/neutron/tests/unit/ml2/drivers/cisco/apic/test_cisco_apic_sync.py @@ -62,10 +62,10 @@ class TestCiscoApicSync(base.BaseTestCase): sync.core_plugin.get_ports.return_value = [{'id': 'port', 'network_id': 'net'}] sync.sync_base() - self.driver.create_network_postcommit.assert_called_once() - self.driver.create_subnet_postcommit.assert_called_once() - self.get_locked_port_and_binding.assert_called_once() - self.driver.create_port_postcommit.assert_called_once() + self.assertEqual(1, self.driver.create_network_postcommit.call_count) + self.assertEqual(1, self.driver.create_subnet_postcommit.call_count) + self.assertEqual(1, self.get_locked_port_and_binding.call_count) + self.assertEqual(1, self.driver.create_port_postcommit.call_count) def test_sync_router(self): sync = apic_sync.ApicRouterSynchronizer(self.driver) @@ -74,4 +74,5 @@ class TestCiscoApicSync(base.BaseTestCase): 'network_id': 'net', 'device_id': 'dev'}] sync.sync_router() - self.driver.add_router_interface_postcommit.assert_called_once() + self.assertEqual( + 1, self.driver.add_router_interface_postcommit.call_count) diff --git a/neutron/tests/unit/services/l3_router/test_l3_apic_plugin.py b/neutron/tests/unit/services/l3_router/test_l3_apic_plugin.py index 79fb88d4e95..b2ead4e6936 100644 --- a/neutron/tests/unit/services/l3_router/test_l3_apic_plugin.py +++ b/neutron/tests/unit/services/l3_router/test_l3_apic_plugin.py @@ -120,7 +120,8 @@ class TestCiscoApicL3Plugin(testlib_api.SqlTestCase, mgr = self.plugin.manager self.plugin.remove_router_interface(self.context, ROUTER, interface_info) - mgr.delete_contract_for_epg.assert_called_once() + mgr.remove_router_interface.assert_called_once_with( + mocked.APIC_TENANT, mocked.APIC_ROUTER, mocked.APIC_NETWORK) def test_add_router_interface_subnet(self): self._test_add_router_interface(self.interface_info['subnet']) diff --git a/neutron/tests/unit/services/loadbalancer/drivers/radware/test_plugin_driver.py b/neutron/tests/unit/services/loadbalancer/drivers/radware/test_plugin_driver.py index 31f6cb2f183..ba5c968bd89 100644 --- a/neutron/tests/unit/services/loadbalancer/drivers/radware/test_plugin_driver.py +++ b/neutron/tests/unit/services/loadbalancer/drivers/radware/test_plugin_driver.py @@ -19,6 +19,7 @@ import mock from oslo.config import cfg from six.moves import queue as Queue +from neutron.api.v2 import attributes from neutron import context from neutron.extensions import loadbalancer from neutron import manager @@ -155,6 +156,16 @@ class TestLoadBalancerPlugin(TestLoadBalancerPluginBase): """Call _get_pip twice and verify that a Port is created once.""" port_dict = {'fixed_ips': [{'subnet_id': '10.10.10.10', 'ip_address': '11.11.11.11'}]} + port_data = { + 'tenant_id': 'tenant_id', + 'name': 'port_name', + 'network_id': 'network_id', + 'mac_address': attributes.ATTR_NOT_SPECIFIED, + 'admin_state_up': False, + 'device_id': '', + 'device_owner': 'neutron:' + constants.LOADBALANCER, + 'fixed_ips': [{'subnet_id': '10.10.10.10'}] + } self.plugin_instance._core_plugin.get_ports = mock.Mock( return_value=[]) self.plugin_instance._core_plugin.create_port = mock.Mock( @@ -163,15 +174,18 @@ class TestLoadBalancerPlugin(TestLoadBalancerPluginBase): radware_driver._get_pip(context.get_admin_context(), 'tenant_id', 'port_name', 'network_id', '10.10.10.10') - self.plugin_instance._core_plugin.get_ports.assert_called_once() - self.plugin_instance._core_plugin.create_port.assert_called_once() + self.plugin_instance._core_plugin.get_ports.assert_called_once_with( + mock.ANY, filters={'name': ['port_name']}) + self.plugin_instance._core_plugin.create_port.assert_called_once_with( + mock.ANY, {'port': port_data}) self.plugin_instance._core_plugin.create_port.reset_mock() self.plugin_instance._core_plugin.get_ports.reset_mock() self.plugin_instance._core_plugin.get_ports.return_value = [port_dict] radware_driver._get_pip(context.get_admin_context(), 'tenant_id', 'port_name', 'network_id', '10.10.10.10') - self.plugin_instance._core_plugin.get_ports.assert_called_once() + self.plugin_instance._core_plugin.get_ports.assert_called_once_with( + mock.ANY, filters={'name': ['port_name']}) self.assertFalse(self.plugin_instance._core_plugin.create_port.called) def test_rest_client_recover_was_called(self): @@ -181,7 +195,9 @@ class TestLoadBalancerPlugin(TestLoadBalancerPluginBase): radware_driver.rest_client._call = self.orig__call self.assertRaises(r_exc.RESTRequestFailure, radware_driver._verify_workflow_templates) - self.recover_mock.assert_called_once() + self.recover_mock.assert_called_once_with('GET', + '/api/workflowTemplate', + None, None, False) def test_rest_client_flip_servers(self): radware_driver = self.plugin_instance.drivers['radware'] diff --git a/neutron/tests/unit/test_hacking.py b/neutron/tests/unit/test_hacking.py index 895dbe91019..00ffd7de708 100644 --- a/neutron/tests/unit/test_hacking.py +++ b/neutron/tests/unit/test_hacking.py @@ -79,3 +79,21 @@ class HackingTestCase(base.BaseTestCase): self.assertEqual(2, checks.no_author_tags("# author: pele")[0]) self.assertEqual(2, checks.no_author_tags("# Author: pele")[0]) self.assertEqual(3, checks.no_author_tags(".. moduleauthor:: pele")[0]) + + def test_assert_called_once(self): + fail_code = """ + mock = Mock() + mock.method(1, 2, 3, test='wow') + mock.method.assert_called_once() + """ + pass_code = """ + mock = Mock() + mock.method(1, 2, 3, test='wow') + mock.method.assert_called_once_with() + """ + self.assertEqual( + 1, len(list(checks.check_assert_called_once(fail_code, + "neutron/tests/test_assert.py")))) + self.assertEqual( + 0, len(list(checks.check_assert_called_once(pass_code, + "neutron/tests/test_assert.py")))) diff --git a/neutron/tests/unit/test_l3_agent.py b/neutron/tests/unit/test_l3_agent.py index 264804a596e..47de4c35f7e 100644 --- a/neutron/tests/unit/test_l3_agent.py +++ b/neutron/tests/unit/test_l3_agent.py @@ -1745,25 +1745,25 @@ vrrp_instance VR_1 { agent = l3_agent.L3NATAgent(HOSTNAME, self.conf) agent._queue = mock.Mock() agent.router_deleted(None, FAKE_ID) - agent._queue.add.assert_called_once() + self.assertEqual(1, agent._queue.add.call_count) def test_routers_updated(self): agent = l3_agent.L3NATAgent(HOSTNAME, self.conf) agent._queue = mock.Mock() agent.routers_updated(None, [FAKE_ID]) - agent._queue.add.assert_called_once() + self.assertEqual(1, agent._queue.add.call_count) def test_removed_from_agent(self): agent = l3_agent.L3NATAgent(HOSTNAME, self.conf) agent._queue = mock.Mock() agent.router_removed_from_agent(None, {'router_id': FAKE_ID}) - agent._queue.add.assert_called_once() + self.assertEqual(1, agent._queue.add.call_count) def test_added_to_agent(self): agent = l3_agent.L3NATAgent(HOSTNAME, self.conf) agent._queue = mock.Mock() agent.router_added_to_agent(None, [FAKE_ID]) - agent._queue.add.assert_called_once() + self.assertEqual(1, agent._queue.add.call_count) def test_destroy_fip_namespace(self): class FakeDev(object): From 2c5f99a4b1376a46b8c1e1f4e82a015c2d29aa1f Mon Sep 17 00:00:00 2001 From: Andrew Boik Date: Fri, 10 Oct 2014 13:13:45 -0400 Subject: [PATCH 092/128] Update VPN logging to use new i18n functions For log messages in neutron/services/vpn and neutron/db/vpn, replace _() marker functions with log-level-specific marker functions: _LI(), _LW(), _LE() from oslo.i18n. Also, remove _() functions for debug log messages as debug level log messages should not be translated. Change-Id: I07fcf25bb6344c47e74d6ee23f9bc08e4b560679 Closes-Bug: #1379811 --- neutron/db/vpn/vpn_db.py | 3 +- .../device_drivers/cisco_csr_rest_client.py | 30 ++++--- .../vpn/device_drivers/cisco_ipsec.py | 90 ++++++++++--------- neutron/services/vpn/device_drivers/ipsec.py | 5 +- neutron/services/vpn/plugin.py | 3 +- .../services/vpn/service_drivers/__init__.py | 4 +- .../vpn/service_drivers/cisco_cfg_loader.py | 7 +- .../vpn/service_drivers/cisco_csr_db.py | 23 ++--- .../vpn/service_drivers/cisco_ipsec.py | 4 +- 9 files changed, 88 insertions(+), 81 deletions(-) diff --git a/neutron/db/vpn/vpn_db.py b/neutron/db/vpn/vpn_db.py index 6ff9b7c9650..4de2a714518 100644 --- a/neutron/db/vpn/vpn_db.py +++ b/neutron/db/vpn/vpn_db.py @@ -28,6 +28,7 @@ from neutron.db.vpn import vpn_validator from neutron.extensions import vpnaas from neutron import manager from neutron.openstack.common import excutils +from neutron.openstack.common.gettextutils import _LW from neutron.openstack.common import log as logging from neutron.openstack.common import uuidutils from neutron.plugins.common import constants @@ -646,7 +647,7 @@ class VPNPluginRpcDbMixin(): vpnservice_db = self._get_vpnservice( context, vpnservice['id']) except vpnaas.VPNServiceNotFound: - LOG.warn(_('vpnservice %s in db is already deleted'), + LOG.warn(_LW('vpnservice %s in db is already deleted'), vpnservice['id']) continue diff --git a/neutron/services/vpn/device_drivers/cisco_csr_rest_client.py b/neutron/services/vpn/device_drivers/cisco_csr_rest_client.py index 04241b743cb..8ddefb1f15c 100644 --- a/neutron/services/vpn/device_drivers/cisco_csr_rest_client.py +++ b/neutron/services/vpn/device_drivers/cisco_csr_rest_client.py @@ -19,6 +19,7 @@ import requests from requests import exceptions as r_exc from neutron.openstack.common import jsonutils +from neutron.openstack.common.gettextutils import _LE, _LW from neutron.openstack.common import log as logging @@ -84,7 +85,7 @@ class CsrRestClient(object): and 'detail' fields). """ if method in ('POST', 'GET') and self.status == requests.codes.OK: - LOG.debug(_('RESPONSE: %s'), response.json()) + LOG.debug('RESPONSE: %s', response.json()) return response.json() if method == 'POST' and self.status == requests.codes.CREATED: return response.headers.get('location', '') @@ -97,21 +98,21 @@ class CsrRestClient(object): def _request(self, method, url, **kwargs): """Perform REST request and save response info.""" try: - LOG.debug(_("%(method)s: Request for %(resource)s payload: " - "%(payload)s"), + LOG.debug("%(method)s: Request for %(resource)s payload: " + "%(payload)s", {'method': method.upper(), 'resource': url, 'payload': kwargs.get('data')}) start_time = time.time() response = self.session.request(method, url, verify=False, timeout=self.timeout, **kwargs) - LOG.debug(_("%(method)s Took %(time).2f seconds to process"), + LOG.debug("%(method)s Took %(time).2f seconds to process", {'method': method.upper(), 'time': time.time() - start_time}) except (r_exc.Timeout, r_exc.SSLError) as te: # Should never see SSLError, unless requests package is old (<2.0) timeout_val = 0.0 if self.timeout is None else self.timeout - LOG.warning(_("%(method)s: Request timeout%(ssl)s " - "(%(timeout).3f sec) for CSR(%(host)s)"), + LOG.warning(_LW("%(method)s: Request timeout%(ssl)s " + "(%(timeout).3f sec) for CSR(%(host)s)"), {'method': method, 'timeout': timeout_val, 'ssl': '(SSLError)' @@ -119,17 +120,18 @@ class CsrRestClient(object): 'host': self.host}) self.status = requests.codes.REQUEST_TIMEOUT except r_exc.ConnectionError: - LOG.exception(_("%(method)s: Unable to connect to CSR(%(host)s)"), + LOG.exception(_LE("%(method)s: Unable to connect to " + "CSR(%(host)s)"), {'method': method, 'host': self.host}) self.status = requests.codes.NOT_FOUND except Exception as e: - LOG.error(_("%(method)s: Unexpected error for CSR (%(host)s): " - "%(error)s"), + LOG.error(_LE("%(method)s: Unexpected error for CSR (%(host)s): " + "%(error)s"), {'method': method, 'host': self.host, 'error': e}) self.status = requests.codes.INTERNAL_SERVER_ERROR else: self.status = response.status_code - LOG.debug(_("%(method)s: Completed [%(status)s]"), + LOG.debug("%(method)s: Completed [%(status)s]", {'method': method, 'status': self.status}) return self._response_info_for(response, method) @@ -144,16 +146,16 @@ class CsrRestClient(object): headers = {'Content-Length': '0', 'Accept': 'application/json'} headers.update(HEADER_CONTENT_TYPE_JSON) - LOG.debug(_("%(auth)s with CSR %(host)s"), + LOG.debug("%(auth)s with CSR %(host)s", {'auth': 'Authenticating' if self.token is None else 'Reauthenticating', 'host': self.host}) self.token = None response = self._request("POST", url, headers=headers, auth=self.auth) if response: self.token = response['token-id'] - LOG.debug(_("Successfully authenticated with CSR %s"), self.host) + LOG.debug("Successfully authenticated with CSR %s", self.host) return True - LOG.error(_("Failed authentication with CSR %(host)s [%(status)s]"), + LOG.error(_LE("Failed authentication with CSR %(host)s [%(status)s]"), {'host': self.host, 'status': self.status}) def _do_request(self, method, resource, payload=None, more_headers=None, @@ -188,7 +190,7 @@ class CsrRestClient(object): headers=headers) if self.status != requests.codes.REQUEST_TIMEOUT: return response - LOG.error(_("%(method)s: Request timeout for CSR(%(host)s)"), + LOG.error(_LE("%(method)s: Request timeout for CSR(%(host)s)"), {'method': method, 'host': self.host}) def get_request(self, resource, full_url=False): diff --git a/neutron/services/vpn/device_drivers/cisco_ipsec.py b/neutron/services/vpn/device_drivers/cisco_ipsec.py index b024f333aa4..0eb3871d181 100644 --- a/neutron/services/vpn/device_drivers/cisco_ipsec.py +++ b/neutron/services/vpn/device_drivers/cisco_ipsec.py @@ -23,6 +23,7 @@ import six from neutron.common import exceptions from neutron.common import rpc as n_rpc from neutron import context as ctx +from neutron.openstack.common.gettextutils import _LE, _LI, _LW from neutron.openstack.common import lockutils from neutron.openstack.common import log as logging from neutron.openstack.common import loopingcall @@ -125,7 +126,7 @@ class CiscoCsrIPsecDriver(device_drivers.DeviceDriver): def vpnservice_updated(self, context, **kwargs): """Handle VPNaaS service driver change notifications.""" - LOG.debug(_("Handling VPN service update notification '%s'"), + LOG.debug("Handling VPN service update notification '%s'", kwargs.get('reason', '')) self.sync(context, []) @@ -147,20 +148,20 @@ class CiscoCsrIPsecDriver(device_drivers.DeviceDriver): ipsec_conn = vpn_service.conn_state[conn_id] config_changed = ipsec_conn.check_for_changes(conn_data) if config_changed: - LOG.debug(_("Update: Existing connection %s changed"), conn_id) + LOG.debug("Update: Existing connection %s changed", conn_id) ipsec_conn.delete_ipsec_site_connection(context, conn_id) ipsec_conn.create_ipsec_site_connection(context, conn_data) ipsec_conn.conn_info = conn_data if ipsec_conn.forced_down: if vpn_service.is_admin_up and conn_is_admin_up: - LOG.debug(_("Update: Connection %s no longer admin down"), + LOG.debug("Update: Connection %s no longer admin down", conn_id) ipsec_conn.set_admin_state(is_up=True) ipsec_conn.forced_down = False else: if not vpn_service.is_admin_up or not conn_is_admin_up: - LOG.debug(_("Update: Connection %s forced to admin down"), + LOG.debug("Update: Connection %s forced to admin down", conn_id) ipsec_conn.set_admin_state(is_up=False) ipsec_conn.forced_down = True @@ -168,12 +169,12 @@ class CiscoCsrIPsecDriver(device_drivers.DeviceDriver): ipsec_conn = vpn_service.create_connection(conn_data) ipsec_conn.create_ipsec_site_connection(context, conn_data) if not vpn_service.is_admin_up or not conn_is_admin_up: - LOG.debug(_("Update: Created new connection %s in admin down " - "state"), conn_id) + LOG.debug("Update: Created new connection %s in admin down " + "state", conn_id) ipsec_conn.set_admin_state(is_up=False) ipsec_conn.forced_down = True else: - LOG.debug(_("Update: Created new connection %s"), conn_id) + LOG.debug("Update: Created new connection %s", conn_id) ipsec_conn.is_dirty = False ipsec_conn.last_status = conn_data['status'] @@ -184,11 +185,11 @@ class CiscoCsrIPsecDriver(device_drivers.DeviceDriver): """Handle notification for a single VPN Service and its connections.""" vpn_service_id = service_data['id'] if vpn_service_id in self.service_state: - LOG.debug(_("Update: Existing VPN service %s detected"), + LOG.debug("Update: Existing VPN service %s detected", vpn_service_id) vpn_service = self.service_state[vpn_service_id] else: - LOG.debug(_("Update: New VPN service %s detected"), vpn_service_id) + LOG.debug("Update: New VPN service %s detected", vpn_service_id) vpn_service = self.create_vpn_service(service_data) if not vpn_service: return @@ -199,7 +200,7 @@ class CiscoCsrIPsecDriver(device_drivers.DeviceDriver): vpn_service.is_admin_up = service_data[u'admin_state_up'] for conn_data in service_data['ipsec_conns']: self.update_connection(context, vpn_service_id, conn_data) - LOG.debug(_("Update: Completed update processing")) + LOG.debug("Update: Completed update processing") return vpn_service def update_all_services_and_connections(self, context): @@ -229,9 +230,9 @@ class CiscoCsrIPsecDriver(device_drivers.DeviceDriver): for conn_id in service_state.conn_state: service_state.conn_state[conn_id].is_dirty = True connection_count += 1 - LOG.debug(_("Mark: %(service)d VPN services and %(conn)d IPSec " - "connections marked dirty"), {'service': service_count, - 'conn': connection_count}) + LOG.debug("Mark: %(service)d VPN services and %(conn)d IPSec " + "connections marked dirty", {'service': service_count, + 'conn': connection_count}) def remove_unknown_connections(self, context): """Remove connections that are not known by service driver.""" @@ -251,8 +252,8 @@ class CiscoCsrIPsecDriver(device_drivers.DeviceDriver): del self.service_state[vpn_service_id] elif dirty: self.connections_removed = True - LOG.debug(_("Sweep: Removed %(service)d dirty VPN service%(splural)s " - "and %(conn)d dirty IPSec connection%(cplural)s"), + LOG.debug("Sweep: Removed %(service)d dirty VPN service%(splural)s " + "and %(conn)d dirty IPSec connection%(cplural)s", {'service': service_count, 'conn': connection_count, 'splural': 's'[service_count == 1:], 'cplural': 's'[connection_count == 1:]}) @@ -266,22 +267,22 @@ class CiscoCsrIPsecDriver(device_drivers.DeviceDriver): report info will be created for the connection. The combined report data is returned. """ - LOG.debug(_("Report: Collecting status for IPSec connections on VPN " - "service %s"), vpn_service.service_id) + LOG.debug("Report: Collecting status for IPSec connections on VPN " + "service %s", vpn_service.service_id) tunnels = vpn_service.get_ipsec_connections_status() report = {} for connection in vpn_service.conn_state.values(): if connection.forced_down: - LOG.debug(_("Connection %s forced down"), connection.conn_id) + LOG.debug("Connection %s forced down", connection.conn_id) current_status = constants.DOWN else: current_status = connection.find_current_status_in(tunnels) - LOG.debug(_("Connection %(conn)s reported %(status)s"), + LOG.debug("Connection %(conn)s reported %(status)s", {'conn': connection.conn_id, 'status': current_status}) frag = connection.update_status_and_build_report(current_status) if frag: - LOG.debug(_("Report: Adding info for IPSec connection %s"), + LOG.debug("Report: Adding info for IPSec connection %s", connection.conn_id) report.update(frag) return report @@ -301,7 +302,7 @@ class CiscoCsrIPsecDriver(device_drivers.DeviceDriver): pending_handled = plugin_utils.in_pending_status( vpn_service.last_status) vpn_service.update_last_status() - LOG.debug(_("Report: Adding info for VPN service %s"), + LOG.debug("Report: Adding info for VPN service %s", vpn_service.service_id) return {u'id': vpn_service.service_id, u'status': vpn_service.last_status, @@ -323,17 +324,17 @@ class CiscoCsrIPsecDriver(device_drivers.DeviceDriver): def report_status_internal(self, context): """Generate report and send to plugin, if anything changed.""" service_report = [] - LOG.debug(_("Report: Starting status report processing")) + LOG.debug("Report: Starting status report processing") for vpn_service_id, vpn_service in self.service_state.items(): - LOG.debug(_("Report: Collecting status for VPN service %s"), + LOG.debug("Report: Collecting status for VPN service %s", vpn_service_id) report = self.build_report_for_service(vpn_service) if report: service_report.append(report) if service_report: - LOG.info(_("Sending status report update to plugin")) + LOG.info(_LI("Sending status report update to plugin")) self.agent_rpc.update_status(context, service_report) - LOG.debug(_("Report: Completed status report processing")) + LOG.debug("Report: Completed status report processing") return service_report @lockutils.synchronized('vpn-agent', 'neutron-') @@ -617,8 +618,8 @@ class CiscoCsrIPSecConnection(object): LOG.debug("%(resource)s %(which)s is configured", {'resource': resource, 'which': which}) return - LOG.error(_("Unable to create %(resource)s %(which)s: " - "%(status)d"), + LOG.error(_LE("Unable to create %(resource)s %(which)s: " + "%(status)d"), {'resource': resource, 'which': which, 'status': self.csr.status}) # ToDO(pcm): Set state to error @@ -630,7 +631,7 @@ class CiscoCsrIPSecConnection(object): try: getattr(self.csr, create_action)(info) except AttributeError: - LOG.exception(_("Internal error - '%s' is not defined"), + LOG.exception(_LE("Internal error - '%s' is not defined"), create_action) raise CsrResourceCreateFailure(resource=title, which=resource_id) @@ -643,22 +644,22 @@ class CiscoCsrIPSecConnection(object): LOG.debug("%(resource)s configuration %(which)s was removed", {'resource': resource, 'which': which}) else: - LOG.warning(_("Unable to delete %(resource)s %(which)s: " - "%(status)d"), {'resource': resource, - 'which': which, - 'status': status}) + LOG.warning(_LW("Unable to delete %(resource)s %(which)s: " + "%(status)d"), {'resource': resource, + 'which': which, + 'status': status}) def do_rollback(self): """Undo create steps that were completed successfully.""" for step in reversed(self.steps): delete_action = 'delete_%s' % step.action - LOG.debug(_("Performing rollback action %(action)s for " - "resource %(resource)s"), {'action': delete_action, - 'resource': step.title}) + LOG.debug("Performing rollback action %(action)s for " + "resource %(resource)s", {'action': delete_action, + 'resource': step.title}) try: getattr(self.csr, delete_action)(step.resource_id) except AttributeError: - LOG.exception(_("Internal error - '%s' is not defined"), + LOG.exception(_LE("Internal error - '%s' is not defined"), delete_action) raise CsrResourceCreateFailure(resource=step.title, which=step.resource_id) @@ -678,7 +679,7 @@ class CiscoCsrIPSecConnection(object): ike_policy_id = conn_info['cisco']['ike_policy_id'] ipsec_policy_id = conn_info['cisco']['ipsec_policy_id'] - LOG.debug(_('Creating IPSec connection %s'), conn_id) + LOG.debug('Creating IPSec connection %s', conn_id) # Get all the attributes needed to create try: psk_info = self.create_psk_info(psk_id, conn_info) @@ -711,10 +712,10 @@ class CiscoCsrIPSecConnection(object): route_id, 'Static Route') except CsrResourceCreateFailure: self.do_rollback() - LOG.info(_("FAILED: Create of IPSec site-to-site connection %s"), + LOG.info(_LI("FAILED: Create of IPSec site-to-site connection %s"), conn_id) else: - LOG.info(_("SUCCESS: Created IPSec site-to-site connection %s"), + LOG.info(_LI("SUCCESS: Created IPSec site-to-site connection %s"), conn_id) def delete_ipsec_site_connection(self, context, conn_id): @@ -723,13 +724,13 @@ class CiscoCsrIPSecConnection(object): This will be best effort and will continue, if there are any failures. """ - LOG.debug(_('Deleting IPSec connection %s'), conn_id) + LOG.debug('Deleting IPSec connection %s', conn_id) if not self.steps: - LOG.warning(_('Unable to find connection %s'), conn_id) + LOG.warning(_LW('Unable to find connection %s'), conn_id) else: self.do_rollback() - LOG.info(_("SUCCESS: Deleted IPSec site-to-site connection %s"), + LOG.info(_LI("SUCCESS: Deleted IPSec site-to-site connection %s"), conn_id) def set_admin_state(self, is_up): @@ -737,6 +738,7 @@ class CiscoCsrIPSecConnection(object): self.csr.set_ipsec_connection_state(self.tunnel, admin_up=is_up) if self.csr.status != requests.codes.NO_CONTENT: state = "UP" if is_up else "DOWN" - LOG.error(_("Unable to change %(tunnel)s admin state to " - "%(state)s"), {'tunnel': self.tunnel, 'state': state}) + LOG.error(_LE("Unable to change %(tunnel)s admin state to " + "%(state)s"), {'tunnel': self.tunnel, + 'state': state}) raise CsrAdminStateChangeFailure(tunnel=self.tunnel, state=state) diff --git a/neutron/services/vpn/device_drivers/ipsec.py b/neutron/services/vpn/device_drivers/ipsec.py index c19b61ec25f..a3375fb0eac 100644 --- a/neutron/services/vpn/device_drivers/ipsec.py +++ b/neutron/services/vpn/device_drivers/ipsec.py @@ -28,6 +28,7 @@ from neutron.agent.linux import ip_lib from neutron.agent.linux import utils from neutron.common import rpc as n_rpc from neutron import context +from neutron.openstack.common.gettextutils import _LE from neutron.openstack.common import lockutils from neutron.openstack.common import log as logging from neutron.openstack.common import loopingcall @@ -244,7 +245,7 @@ class BaseSwanProcess(): self.start() except RuntimeError: LOG.exception( - _("Failed to enable vpn process on router %s"), + _LE("Failed to enable vpn process on router %s"), self.id) def disable(self): @@ -255,7 +256,7 @@ class BaseSwanProcess(): self.remove_config() except RuntimeError: LOG.exception( - _("Failed to disable vpn process on router %s"), + _LE("Failed to disable vpn process on router %s"), self.id) @abc.abstractmethod diff --git a/neutron/services/vpn/plugin.py b/neutron/services/vpn/plugin.py index 9353d6c5711..c260386103a 100644 --- a/neutron/services/vpn/plugin.py +++ b/neutron/services/vpn/plugin.py @@ -15,6 +15,7 @@ # under the License. from neutron.db.vpn import vpn_db +from neutron.openstack.common.gettextutils import _LI from neutron.openstack.common import log as logging from neutron.plugins.common import constants from neutron.services import service_base @@ -41,7 +42,7 @@ class VPNDriverPlugin(VPNPlugin, vpn_db.VPNPluginRpcDbMixin): # Load the service driver from neutron.conf. drivers, default_provider = service_base.load_drivers( constants.VPN, self) - LOG.info(_("VPN plugin using service driver: %s"), default_provider) + LOG.info(_LI("VPN plugin using service driver: %s"), default_provider) self.ipsec_driver = drivers[default_provider] def _get_driver_for_vpnservice(self, vpnservice): diff --git a/neutron/services/vpn/service_drivers/__init__.py b/neutron/services/vpn/service_drivers/__init__.py index e6f2551a742..8703ebf35ee 100644 --- a/neutron/services/vpn/service_drivers/__init__.py +++ b/neutron/services/vpn/service_drivers/__init__.py @@ -94,8 +94,8 @@ class BaseIPsecVpnAgentApi(n_rpc.RpcProxy): admin_state_up=True, active=True) for l3_agent in l3_agents: - LOG.debug(_('Notify agent at %(topic)s.%(host)s the message ' - '%(method)s %(args)s'), + LOG.debug('Notify agent at %(topic)s.%(host)s the message ' + '%(method)s %(args)s', {'topic': self.topic, 'host': l3_agent.host, 'method': method, diff --git a/neutron/services/vpn/service_drivers/cisco_cfg_loader.py b/neutron/services/vpn/service_drivers/cisco_cfg_loader.py index 771007dd414..d8665083452 100644 --- a/neutron/services/vpn/service_drivers/cisco_cfg_loader.py +++ b/neutron/services/vpn/service_drivers/cisco_cfg_loader.py @@ -32,8 +32,7 @@ from oslo.config import cfg from neutron.db import l3_db from neutron.db import models_v2 -from neutron.openstack.common.gettextutils import _LE -from neutron.openstack.common.gettextutils import _LI +from neutron.openstack.common.gettextutils import _LE, _LI from neutron.openstack.common import log as logging from neutron.services.vpn.device_drivers import ( cisco_csr_rest_client as csr_client) @@ -103,8 +102,8 @@ def get_available_csrs_from_config(config_files): try: netaddr.IPAddress(rest_mgmt_ip) except netaddr.core.AddrFormatError: - LOG.error(_("Ignoring Cisco CSR for subnet %s - " - "REST management is not an IP address"), + LOG.error(_LE("Ignoring Cisco CSR for subnet %s - " + "REST management is not an IP address"), for_router) continue try: diff --git a/neutron/services/vpn/service_drivers/cisco_csr_db.py b/neutron/services/vpn/service_drivers/cisco_csr_db.py index f29bec5fe34..37f9a8490d0 100644 --- a/neutron/services/vpn/service_drivers/cisco_csr_db.py +++ b/neutron/services/vpn/service_drivers/cisco_csr_db.py @@ -20,6 +20,7 @@ from neutron.common import exceptions from neutron.db import model_base from neutron.db import models_v2 from neutron.db.vpn import vpn_db +from neutron.openstack.common.gettextutils import _LI from neutron.openstack.common import log as logging LOG = logging.getLogger(__name__) @@ -156,10 +157,10 @@ def determine_csr_policy_id(policy_type, conn_policy_field, map_policy_field, then call lookup_policy() to find the current mapping for that ID. """ csr_id = get_next_available_id(session, map_policy_field, policy_type) - LOG.debug(_("Reserved new CSR ID %(csr_id)d for %(policy)s " - "ID %(policy_id)s"), {'csr_id': csr_id, - 'policy': policy_type, - 'policy_id': policy_id}) + LOG.debug("Reserved new CSR ID %(csr_id)d for %(policy)s " + "ID %(policy_id)s", {'csr_id': csr_id, + 'policy': policy_type, + 'policy_id': policy_id}) return csr_id @@ -183,9 +184,9 @@ def get_tunnel_mapping_for(conn_id, session): try: entry = session.query(IdentifierMap).filter_by( ipsec_site_conn_id=conn_id).one() - LOG.debug(_("Mappings for IPSec connection %(conn)s - " - "tunnel=%(tunnel)s ike_policy=%(csr_ike)d " - "ipsec_policy=%(csr_ipsec)d"), + LOG.debug("Mappings for IPSec connection %(conn)s - " + "tunnel=%(tunnel)s ike_policy=%(csr_ike)d " + "ipsec_policy=%(csr_ipsec)d", {'conn': conn_id, 'tunnel': entry.csr_tunnel_id, 'csr_ike': entry.csr_ike_policy_id, 'csr_ipsec': entry.csr_ipsec_policy_id}) @@ -222,9 +223,9 @@ def create_tunnel_mapping(context, conn_info): msg = _("Attempt to create duplicate entry in Cisco CSR " "mapping table for connection %s") % conn_id raise CsrInternalError(reason=msg) - LOG.info(_("Mapped connection %(conn_id)s to Tunnel%(tunnel_id)d " - "using IKE policy ID %(ike_id)d and IPSec policy " - "ID %(ipsec_id)d"), + LOG.info(_LI("Mapped connection %(conn_id)s to Tunnel%(tunnel_id)d " + "using IKE policy ID %(ike_id)d and IPSec policy " + "ID %(ipsec_id)d"), {'conn_id': conn_id, 'tunnel_id': csr_tunnel_id, 'ike_id': csr_ike_id, 'ipsec_id': csr_ipsec_id}) @@ -234,4 +235,4 @@ def delete_tunnel_mapping(context, conn_info): with context.session.begin(): sess_qry = context.session.query(IdentifierMap) sess_qry.filter_by(ipsec_site_conn_id=conn_id).delete() - LOG.info(_("Removed mapping for connection %s"), conn_id) + LOG.info(_LI("Removed mapping for connection %s"), conn_id) diff --git a/neutron/services/vpn/service_drivers/cisco_ipsec.py b/neutron/services/vpn/service_drivers/cisco_ipsec.py index 55b478b9abe..28e3d589fe1 100644 --- a/neutron/services/vpn/service_drivers/cisco_ipsec.py +++ b/neutron/services/vpn/service_drivers/cisco_ipsec.py @@ -101,8 +101,8 @@ class CiscoCsrIPsecVpnAgentApi(service_drivers.BaseIPsecVpnAgentApi, # NOTE: This is a config error for workaround. At this point we # can't set state of resource to error. return - LOG.debug(_('Notify agent at %(topic)s.%(host)s the message ' - '%(method)s %(args)s for router %(router)s'), + LOG.debug('Notify agent at %(topic)s.%(host)s the message ' + '%(method)s %(args)s for router %(router)s', {'topic': self.topic, 'host': host, 'method': method, From 65b57625c24d86ce632d475e2ba743069ae1d797 Mon Sep 17 00:00:00 2001 From: rossella Date: Tue, 23 Sep 2014 16:09:09 +0000 Subject: [PATCH 093/128] Add unique constraints in IPAvailabilityRange first_ip, allocation_pool_id and last_ip, allocation_pool_id should be unique in the table. These constraints are essential to detect concurrent modifications of the IpAvailabilityRange table if the SELECT ... FOR UPDATE lock is removed Change-Id: Iaf2288c0b6bf27e93c03691073d7f505ef24fdd3 Closes-bug: #1373015 --- ..._uniqueconstraint_ipavailability_ranges.py | 61 +++++++++++++++++++ .../alembic_migrations/versions/HEAD | 2 +- neutron/db/models_v2.py | 7 +++ 3 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 neutron/db/migration/alembic_migrations/versions/44621190bc02_add_uniqueconstraint_ipavailability_ranges.py diff --git a/neutron/db/migration/alembic_migrations/versions/44621190bc02_add_uniqueconstraint_ipavailability_ranges.py b/neutron/db/migration/alembic_migrations/versions/44621190bc02_add_uniqueconstraint_ipavailability_ranges.py new file mode 100644 index 00000000000..66b57c12ea2 --- /dev/null +++ b/neutron/db/migration/alembic_migrations/versions/44621190bc02_add_uniqueconstraint_ipavailability_ranges.py @@ -0,0 +1,61 @@ +# Copyright 2014 OpenStack Foundation +# +# 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. +# + +"""add_uniqueconstraint_ipavailability_ranges + +Revision ID: 44621190bc02 +Revises: juno +Create Date: 2014-09-23 15:14:15.051921 + +""" + +# revision identifiers, used by Alembic. +revision = '44621190bc02' +down_revision = 'juno' + +from alembic import op + + +TABLE_NAME = 'ipavailabilityranges' +UC_1_NAME = 'uniq_ipavailabilityranges0first_ip0allocation_pool_id' +UC_2_NAME = 'uniq_ipavailabilityranges0last_ip0allocation_pool_id' + + +def upgrade(): + op.create_unique_constraint( + name=UC_1_NAME, + source=TABLE_NAME, + local_cols=['first_ip', 'allocation_pool_id'] + ) + + op.create_unique_constraint( + name=UC_2_NAME, + source=TABLE_NAME, + local_cols=['last_ip', 'allocation_pool_id'] + ) + + +def downgrade(): + op.drop_constraint( + name=UC_1_NAME, + table_name=TABLE_NAME, + type_='unique' + ) + + op.drop_constraint( + name=UC_2_NAME, + table_name=TABLE_NAME, + type_='unique' + ) diff --git a/neutron/db/migration/alembic_migrations/versions/HEAD b/neutron/db/migration/alembic_migrations/versions/HEAD index 7a30775e93c..8c20ac433be 100644 --- a/neutron/db/migration/alembic_migrations/versions/HEAD +++ b/neutron/db/migration/alembic_migrations/versions/HEAD @@ -1 +1 @@ -juno +44621190bc02 diff --git a/neutron/db/models_v2.py b/neutron/db/models_v2.py index 53efc66926d..d27c4750a3d 100644 --- a/neutron/db/models_v2.py +++ b/neutron/db/models_v2.py @@ -63,6 +63,13 @@ class IPAvailabilityRange(model_base.BASEV2): primary_key=True) first_ip = sa.Column(sa.String(64), nullable=False, primary_key=True) last_ip = sa.Column(sa.String(64), nullable=False, primary_key=True) + __table_args__ = ( + sa.UniqueConstraint( + first_ip, allocation_pool_id, + name='uniq_ipavailabilityranges0first_ip0allocation_pool_id'), + sa.UniqueConstraint( + last_ip, allocation_pool_id, + name='uniq_ipavailabilityranges0last_ip0allocation_pool_id')) def __repr__(self): return "%s - %s" % (self.first_ip, self.last_ip) From 5fd628f123e6af1aa96b81f713867edcc67194d7 Mon Sep 17 00:00:00 2001 From: Sukhdev Date: Wed, 24 Sep 2014 15:57:15 -0700 Subject: [PATCH 094/128] Arista L3 Ops is success if it is successful on one peer This fix checks to see if Arista HW is configured in MLAG (redundant) mode. If yes, as long as operation is successful on one of the paired switches, consider it successful. Closes-bug: 1373652 Change-Id: If929d3fcc109b81f4cf071380a1645d403feb363 --- .../ml2/drivers/arista/arista_l3_driver.py | 66 ++++++++++++++++--- .../drivers/arista/test_arista_l3_driver.py | 63 ++++++++++++++++++ 2 files changed, 119 insertions(+), 10 deletions(-) diff --git a/neutron/plugins/ml2/drivers/arista/arista_l3_driver.py b/neutron/plugins/ml2/drivers/arista/arista_l3_driver.py index aac24410f02..df453f2b1a9 100644 --- a/neutron/plugins/ml2/drivers/arista/arista_l3_driver.py +++ b/neutron/plugins/ml2/drivers/arista/arista_l3_driver.py @@ -247,16 +247,38 @@ class AristaL3Driver(object): rdm = str(int(hashlib.sha256(router_name).hexdigest(), 16) % 6553) + mlag_peer_failed = False for s in self._servers: - self.create_router_on_eos(router_name, rdm, s) + try: + self.create_router_on_eos(router_name, rdm, s) + mlag_peer_failed = False + except Exception: + if self.mlag_configured and not mlag_peer_failed: + mlag_peer_failed = True + else: + msg = (_('Failed to create router %s on EOS') % + router_name) + LOG.exception(msg) + raise arista_exc.AristaServicePluginRpcError(msg=msg) def delete_router(self, context, tenant_id, router_id, router): """Deletes a router from Arista Switch.""" if router: + router_name = self._arista_router_name(tenant_id, router['name']) + mlag_peer_failed = False for s in self._servers: - self.delete_router_from_eos(self._arista_router_name( - tenant_id, router['name']), s) + try: + self.delete_router_from_eos(router_name, s) + mlag_peer_failed = False + except Exception: + if self.mlag_configured and not mlag_peer_failed: + mlag_peer_failed = True + else: + msg = (_('Failed to create router %s on EOS') % + router_name) + LOG.exception(msg) + raise arista_exc.AristaServicePluginRpcError(msg=msg) def update_router(self, context, router_id, original_router, new_router): """Updates a router which is already created on Arista Switch. @@ -279,15 +301,27 @@ class AristaL3Driver(object): if self.mlag_configured: # For MLAG, we send a specific IP address as opposed to cidr # For now, we are using x.x.x.253 and x.x.x.254 as virtual IP + mlag_peer_failed = False for i, server in enumerate(self._servers): #get appropriate virtual IP address for this router router_ip = self._get_router_ip(cidr, i, router_info['ip_version']) - self.add_interface_to_router(router_info['seg_id'], - router_name, - router_info['gip'], - router_ip, subnet_mask, - server) + try: + self.add_interface_to_router(router_info['seg_id'], + router_name, + router_info['gip'], + router_ip, subnet_mask, + server) + mlag_peer_failed = False + except Exception: + if not mlag_peer_failed: + mlag_peer_failed = True + else: + msg = (_('Failed to add interface to router ' + '%s on EOS') % router_name) + LOG.exception(msg) + raise arista_exc.AristaServicePluginRpcError( + msg=msg) else: for s in self._servers: @@ -304,9 +338,21 @@ class AristaL3Driver(object): if router_info: router_name = self._arista_router_name(router_info['tenant_id'], router_info['name']) + mlag_peer_failed = False for s in self._servers: - self.delete_interface_from_router(router_info['seg_id'], - router_name, s) + try: + self.delete_interface_from_router(router_info['seg_id'], + router_name, s) + if self.mlag_configured: + mlag_peer_failed = False + except Exception: + if self.mlag_configured and not mlag_peer_failed: + mlag_peer_failed = True + else: + msg = (_('Failed to add interface to router ' + '%s on EOS') % router_name) + LOG.exception(msg) + raise arista_exc.AristaServicePluginRpcError(msg=msg) def _run_openstack_l3_cmds(self, commands, server): """Execute/sends a CAPI (Command API) command to EOS. diff --git a/neutron/tests/unit/ml2/drivers/arista/test_arista_l3_driver.py b/neutron/tests/unit/ml2/drivers/arista/test_arista_l3_driver.py index b2a2989b644..4cc4db1e28f 100644 --- a/neutron/tests/unit/ml2/drivers/arista/test_arista_l3_driver.py +++ b/neutron/tests/unit/ml2/drivers/arista/test_arista_l3_driver.py @@ -391,3 +391,66 @@ class AristaL3DriverTestCases_MLAG_v6(base.BaseTestCase): 'ip_version': 6} self.assertFalse(self.drv.remove_router_interface(None, router)) + + +class AristaL3DriverTestCasesMlag_one_switch_failed(base.BaseTestCase): + """Test cases to test with non redundant hardare in redundancy mode. + + In the following test cases, the driver is configured in MLAG (redundancy + mode) but, one of the switches is mocked to throw exceptoin to mimic + failure of the switch. Ensure that the the operation does not fail when + one of the switches fails. + """ + + def setUp(self): + super(AristaL3DriverTestCasesMlag_one_switch_failed, self).setUp() + setup_arista_config('value', mlag=True) + self.drv = arista.AristaL3Driver() + self.drv._servers = [] + self.drv._servers.append(mock.MagicMock()) + self.drv._servers.append(mock.MagicMock()) + + def test_create_router_when_one_switch_fails(self): + router = {} + router['name'] = 'test-router-1' + tenant = '123' + + # Make one of the switches throw an exception - i.e. fail + self.drv._servers[0].runCmds = mock.Mock(side_effect = Exception()) + self.drv.create_router(None, tenant, router) + + def test_delete_router_when_one_switch_fails(self): + router = {} + router['name'] = 'test-router-1' + tenant = '123' + router_id = '345' + + # Make one of the switches throw an exception - i.e. fail + self.drv._servers[1].runCmds = mock.Mock(side_effect = Exception()) + self.drv.delete_router(None, tenant, router_id, router) + + def test_add_router_interface_when_one_switch_fails(self): + router = {} + router['name'] = 'test-router-1' + router['tenant_id'] = 'ten-1' + router['seg_id'] = '100' + router['ip_version'] = 4 + router['cidr'] = '10.10.10.0/24' + router['gip'] = '10.10.10.1' + + # Make one of the switches throw an exception - i.e. fail + self.drv._servers[1].runCmds = mock.Mock(side_effect = Exception()) + self.drv.add_router_interface(None, router) + + def test_remove_router_interface_when_one_switch_fails(self): + router = {} + router['name'] = 'test-router-1' + router['tenant_id'] = 'ten-1' + router['seg_id'] = '100' + router['ip_version'] = 4 + router['cidr'] = '10.10.10.0/24' + router['gip'] = '10.10.10.1' + + # Make one of the switches throw an exception - i.e. fail + self.drv._servers[0].runCmds = mock.Mock(side_effect = Exception()) + self.drv.remove_router_interface(None, router) From 3ba06618f79fed899188aac87a8694b3344ee995 Mon Sep 17 00:00:00 2001 From: Xu Han Peng Date: Fri, 20 Jun 2014 14:59:53 +0800 Subject: [PATCH 095/128] Use EUI64 for IPv6 SLAAC when subnet is specified This commit uses EUI64 for SLAAC and stateless IPv6 address when subnet id in fixed_ip is specified. After this patch, all the ports created on a subnet which has ipv6_address_mod=slaac or ipv6_address_mod=dhcpv6-stateless will use EUI64 as the address. This patch also checks if fixed IP address is specified for a IPv6 subnet with address mode slaac or dhcpv6-stateless during creating or updating a port. If yes, raise InvalidInput error to stop the port creation or update. Remove unit test test_generated_duplicate_ip_ipv6 because fixed_ip should not be specified for a slaac subnet. Change-Id: Ie481cfb2f4313baf44bf1a838ebda374a5c74c6a Closes-Bug: 1330826 --- neutron/db/db_base_plugin_v2.py | 46 +++++++++----- neutron/tests/unit/test_db_plugin.py | 93 +++++++++++++++++++++++----- 2 files changed, 111 insertions(+), 28 deletions(-) diff --git a/neutron/db/db_base_plugin_v2.py b/neutron/db/db_base_plugin_v2.py index 9582efed3c4..efb6a61615c 100644 --- a/neutron/db/db_base_plugin_v2.py +++ b/neutron/db/db_base_plugin_v2.py @@ -449,7 +449,14 @@ class NeutronDbPluginV2(neutron_plugin_base_v2.NeutronPluginBaseV2, msg = _('IP address %s is not a valid IP for the defined ' 'subnet') % fixed['ip_address'] raise n_exc.InvalidInput(error_message=msg) - + if self._check_if_subnet_uses_eui64(subnet): + msg = (_("IPv6 address %(address)s can not be directly " + "assigned to a port on subnet %(id)s with " + "%(mode)s address mode") % + {'address': fixed['ip_address'], + 'id': subnet_id, + 'mode': subnet['ipv6_address_mode']}) + raise n_exc.InvalidInput(error_message=msg) fixed_ip_set.append({'subnet_id': subnet_id, 'ip_address': fixed['ip_address']}) else: @@ -459,7 +466,7 @@ class NeutronDbPluginV2(neutron_plugin_base_v2.NeutronPluginBaseV2, raise n_exc.InvalidInput(error_message=msg) return fixed_ip_set - def _allocate_fixed_ips(self, context, fixed_ips): + def _allocate_fixed_ips(self, context, fixed_ips, mac_address): """Allocate IP addresses according to the configured fixed_ips.""" ips = [] for fixed in fixed_ips: @@ -472,15 +479,24 @@ class NeutronDbPluginV2(neutron_plugin_base_v2.NeutronPluginBaseV2, # Only subnet ID is specified => need to generate IP # from subnet else: - subnets = [self._get_subnet(context, fixed['subnet_id'])] - # IP address allocation - result = self._generate_ip(context, subnets) - ips.append({'ip_address': result['ip_address'], - 'subnet_id': result['subnet_id']}) + subnet = self._get_subnet(context, fixed['subnet_id']) + if (subnet['ip_version'] == 6 and + self._check_if_subnet_uses_eui64(subnet)): + prefix = subnet['cidr'] + ip_address = ipv6_utils.get_ipv6_addr_by_EUI64( + prefix, mac_address) + ips.append({'ip_address': ip_address.format(), + 'subnet_id': subnet['id']}) + else: + subnets = [subnet] + # IP address allocation + result = self._generate_ip(context, subnets) + ips.append({'ip_address': result['ip_address'], + 'subnet_id': result['subnet_id']}) return ips def _update_ips_for_port(self, context, network_id, port_id, original_ips, - new_ips): + new_ips, mac_address): """Add or remove IPs from the port.""" ips = [] # These ips are still on the port and haven't been removed @@ -511,7 +527,7 @@ class NeutronDbPluginV2(neutron_plugin_base_v2.NeutronPluginBaseV2, if to_add: LOG.debug(_("Port update. Adding %s"), to_add) - ips = self._allocate_fixed_ips(context, to_add) + ips = self._allocate_fixed_ips(context, to_add, mac_address) return ips, prev_ips def _allocate_ips_for_port(self, context, port): @@ -529,7 +545,9 @@ class NeutronDbPluginV2(neutron_plugin_base_v2.NeutronPluginBaseV2, configured_ips = self._test_fixed_ips_for_port(context, p["network_id"], p['fixed_ips']) - ips = self._allocate_fixed_ips(context, configured_ips) + ips = self._allocate_fixed_ips(context, + configured_ips, + p['mac_address']) else: filter = {'network_id': [p['network_id']]} subnets = self.get_subnets(context, filters=filter) @@ -548,10 +566,9 @@ class NeutronDbPluginV2(neutron_plugin_base_v2.NeutronPluginBaseV2, # subnet from the array of subnets that will be passed # to the _generate_ip() function call, since we just # generated an IP. - mac = p['mac_address'] prefix = subnet['cidr'] ip_address = ipv6_utils.get_ipv6_addr_by_EUI64( - prefix, mac) + prefix, p['mac_address']) if not self._check_unique_ip( context, p['network_id'], subnet['id'], ip_address.format()): @@ -1377,8 +1394,9 @@ class NeutronDbPluginV2(neutron_plugin_base_v2.NeutronPluginBaseV2, changed_ips = True original = self._make_port_dict(port, process_extensions=False) added_ips, prev_ips = self._update_ips_for_port( - context, port["network_id"], id, original["fixed_ips"], - p['fixed_ips']) + context, port["network_id"], id, + original["fixed_ips"], p['fixed_ips'], + original['mac_address']) # Update ips if necessary for ip in added_ips: diff --git a/neutron/tests/unit/test_db_plugin.py b/neutron/tests/unit/test_db_plugin.py index f390be5afc9..74292fac074 100644 --- a/neutron/tests/unit/test_db_plugin.py +++ b/neutron/tests/unit/test_db_plugin.py @@ -1233,6 +1233,34 @@ fixed_ips=ip_address%%3D%s&fixed_ips=ip_address%%3D%s&fixed_ips=subnet_id%%3D%s self.assertEqual(ips[1]['ip_address'], '10.0.0.4') self.assertEqual(ips[1]['subnet_id'], subnet['subnet']['id']) + def test_update_port_invalid_fixed_ip_address_v6_slaac(self): + with self.subnet( + cidr='2607:f0d0:1002:51::/64', + ip_version=6, + ipv6_address_mode=constants.IPV6_SLAAC, + gateway_ip=attributes.ATTR_NOT_SPECIFIED) as subnet: + with self.port(subnet=subnet) as port: + ips = port['port']['fixed_ips'] + self.assertEqual(len(ips), 1) + port_mac = port['port']['mac_address'] + subnet_cidr = subnet['subnet']['cidr'] + eui_addr = str(ipv6_utils.get_ipv6_addr_by_EUI64(subnet_cidr, + port_mac)) + self.assertEqual(ips[0]['ip_address'], eui_addr) + self.assertEqual(ips[0]['subnet_id'], subnet['subnet']['id']) + + data = {'port': {'fixed_ips': [{'subnet_id': + subnet['subnet']['id'], + 'ip_address': + '2607:f0d0:1002:51::5'}]}} + req = self.new_update_request('ports', data, + port['port']['id']) + res = req.get_response(self.api) + err = self.deserialize(self.fmt, res) + self.assertEqual(res.status_int, + webob.exc.HTTPClientError.code) + self.assertEqual(err['NeutronError']['type'], 'InvalidInput') + def test_requested_duplicate_mac(self): with self.port() as port: mac = port['port']['mac_address'] @@ -1295,20 +1323,6 @@ fixed_ips=ip_address%%3D%s&fixed_ips=ip_address%%3D%s&fixed_ips=subnet_id%%3D%s res = self._create_port(self.fmt, net_id=net_id, **kwargs) self.assertEqual(res.status_int, webob.exc.HTTPConflict.code) - def test_generated_duplicate_ip_ipv6(self): - with self.subnet(ip_version=6, - cidr="2014::/64", - ipv6_address_mode=constants.IPV6_SLAAC) as subnet: - with self.port(subnet=subnet, - fixed_ips=[{'subnet_id': subnet['subnet']['id'], - 'ip_address': - "2014::1322:33ff:fe44:5566"}]) as port: - # Check configuring of duplicate IP - kwargs = {"mac_address": "11:22:33:44:55:66"} - net_id = port['port']['network_id'] - res = self._create_port(self.fmt, net_id=net_id, **kwargs) - self.assertEqual(res.status_int, webob.exc.HTTPConflict.code) - def test_requested_subnet_id(self): with self.subnet() as subnet: with self.port(subnet=subnet) as port: @@ -1393,6 +1407,57 @@ fixed_ips=ip_address%%3D%s&fixed_ips=ip_address%%3D%s&fixed_ips=subnet_id%%3D%s self._delete('ports', port3['port']['id']) self._delete('ports', port4['port']['id']) + def test_requested_invalid_fixed_ip_address_v6_slaac(self): + with self.subnet(gateway_ip='fe80::1', + cidr='2607:f0d0:1002:51::/64', + ip_version=6, + ipv6_address_mode=constants.IPV6_SLAAC) as subnet: + kwargs = {"fixed_ips": [{'subnet_id': subnet['subnet']['id'], + 'ip_address': '2607:f0d0:1002:51::5'}]} + net_id = subnet['subnet']['network_id'] + res = self._create_port(self.fmt, net_id=net_id, **kwargs) + self.assertEqual(res.status_int, + webob.exc.HTTPClientError.code) + + def test_requested_subnet_id_v6_slaac(self): + with self.subnet(gateway_ip='fe80::1', + cidr='2607:f0d0:1002:51::/64', + ip_version=6, + ipv6_address_mode=constants.IPV6_SLAAC) as subnet: + with self.port(subnet, + fixed_ips=[{'subnet_id': + subnet['subnet']['id']}]) as port: + port_mac = port['port']['mac_address'] + subnet_cidr = subnet['subnet']['cidr'] + eui_addr = str(ipv6_utils.get_ipv6_addr_by_EUI64(subnet_cidr, + port_mac)) + self.assertEqual(port['port']['fixed_ips'][0]['ip_address'], + eui_addr) + + def test_requested_subnet_id_v4_and_v6_slaac(self): + with self.network() as network: + with contextlib.nested( + self.subnet(network), + self.subnet(network, + cidr='2607:f0d0:1002:51::/64', + ip_version=6, + gateway_ip='fe80::1', + ipv6_address_mode=constants.IPV6_SLAAC) + ) as (subnet, subnet2): + with self.port( + subnet, + fixed_ips=[{'subnet_id': subnet['subnet']['id']}, + {'subnet_id': subnet2['subnet']['id']}] + ) as port: + ips = port['port']['fixed_ips'] + self.assertEqual(len(ips), 2) + self.assertEqual(ips[0]['ip_address'], '10.0.0.2') + port_mac = port['port']['mac_address'] + subnet_cidr = subnet2['subnet']['cidr'] + eui_addr = str(ipv6_utils.get_ipv6_addr_by_EUI64( + subnet_cidr, port_mac)) + self.assertEqual(ips[1]['ip_address'], eui_addr) + def test_ip_allocation_for_ipv6_subnet_slaac_address_mode(self): res = self._create_network(fmt=self.fmt, name='net', admin_state_up=True) From a1fac106479f9c3c5559f8b2cfbc01fe12d3a575 Mon Sep 17 00:00:00 2001 From: Elena Ezhova Date: Tue, 14 Oct 2014 10:12:59 +0400 Subject: [PATCH 096/128] Handle unused set_context in L3NatTestCaseMixin.floatingip_with_assoc set_context which is passed to floatingip_with_assoc method is not passed further to self._make_floatingip. Change-Id: Iecf2ad88e4bad5b1f8fd60668401863bdeecce8f Closes-Bug: #1378756 --- neutron/tests/unit/test_l3_plugin.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/neutron/tests/unit/test_l3_plugin.py b/neutron/tests/unit/test_l3_plugin.py index 6b82d1759cc..e81a32028c8 100644 --- a/neutron/tests/unit/test_l3_plugin.py +++ b/neutron/tests/unit/test_l3_plugin.py @@ -477,7 +477,7 @@ class L3NatTestCaseMixin(object): public_sub['subnet']['network_id'], port_id=private_port['port']['id'], fixed_ip=fixed_ip, - set_context=False) + set_context=set_context) yield floatingip if floatingip: From 50d06130e1ff2a2cfb62510b52efe1537c1068b6 Mon Sep 17 00:00:00 2001 From: Kevin Benton Date: Mon, 13 Oct 2014 23:40:36 -0700 Subject: [PATCH 097/128] Minor: remove unnecessary intermediate variable Removes an unnecessary intermediary variable and an unnecessary list extend operation that implied previous list members where there weren't any. There should be no functional change. This just improves readability slightly. Change-Id: Ice412c29be083d82e055cc0bc45ed8b97c7628d0 --- neutron/plugins/ml2/plugin.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/neutron/plugins/ml2/plugin.py b/neutron/plugins/ml2/plugin.py index d744f19fe1f..73eae18324d 100644 --- a/neutron/plugins/ml2/plugin.py +++ b/neutron/plugins/ml2/plugin.py @@ -1002,8 +1002,8 @@ class Ml2Plugin(db_base_plugin_v2.NeutronDbPluginV2, mech_context = driver_context.PortContext(self, context, port, network, binding) if is_dvr_enabled and utils.is_dvr_serviced(device_owner): - router_info = l3plugin.dvr_deletens_if_no_port(context, id) - removed_routers += router_info + removed_routers = l3plugin.dvr_deletens_if_no_port( + context, id) self.mechanism_manager.delete_port_precommit(mech_context) self._delete_port_security_group_bindings(context, id) if l3plugin: From 79f1e8a9c1f308586077483d849e66dcdc83144f Mon Sep 17 00:00:00 2001 From: Kevin Benton Date: Mon, 29 Sep 2014 19:33:06 -0700 Subject: [PATCH 098/128] Catch exceptions in router rescheduler Catch and log exceptions in router rescheduling loop rather than just dying which would stop all future router rescheduling attempts. This prevents transient DB connectivity issues from permanently breaking the rescheduler until the process restarts. Closes-Bug: #1375597 Change-Id: I2ab37847074fa6bbdd2b13fd03b8742996dcfc78 --- neutron/db/l3_agentschedulers_db.py | 34 +++++++++---- .../unit/openvswitch/test_agent_scheduler.py | 49 +++++++++++++++++++ 2 files changed, 73 insertions(+), 10 deletions(-) diff --git a/neutron/db/l3_agentschedulers_db.py b/neutron/db/l3_agentschedulers_db.py index da827895073..bef3119765a 100644 --- a/neutron/db/l3_agentschedulers_db.py +++ b/neutron/db/l3_agentschedulers_db.py @@ -26,6 +26,7 @@ from sqlalchemy.orm import joinedload from sqlalchemy import sql from neutron.common import constants +from neutron.common import rpc as n_rpc from neutron.common import utils as n_utils from neutron import context as n_ctx from neutron.db import agents_db @@ -34,7 +35,7 @@ from neutron.db import l3_attrs_db from neutron.db import model_base from neutron.extensions import l3agentscheduler from neutron import manager -from neutron.openstack.common.gettextutils import _LI, _LW +from neutron.openstack.common.gettextutils import _LE, _LI, _LW from neutron.openstack.common import log as logging from neutron.openstack.common import loopingcall from neutron.openstack.common import timeutils @@ -122,15 +123,28 @@ class L3AgentSchedulerDbMixin(l3agentscheduler.L3AgentSchedulerPluginBase, RouterL3AgentBinding.router_id). filter(sa.or_(l3_attrs_db.RouterExtraAttributes.ha == sql.false(), l3_attrs_db.RouterExtraAttributes.ha == sql.null()))) - - for binding in down_bindings: - LOG.warn(_LW("Rescheduling router %(router)s from agent %(agent)s " - "because the agent did not report to the server in " - "the last %(dead_time)s seconds."), - {'router': binding.router_id, - 'agent': binding.l3_agent_id, - 'dead_time': agent_dead_limit}) - self.reschedule_router(context, binding.router_id) + try: + for binding in down_bindings: + LOG.warn(_LW( + "Rescheduling router %(router)s from agent %(agent)s " + "because the agent did not report to the server in " + "the last %(dead_time)s seconds."), + {'router': binding.router_id, + 'agent': binding.l3_agent_id, + 'dead_time': agent_dead_limit}) + try: + self.reschedule_router(context, binding.router_id) + except (l3agentscheduler.RouterReschedulingFailed, + n_rpc.RemoteError): + # Catch individual router rescheduling errors here + # so one broken one doesn't stop the iteration. + LOG.exception(_LE("Failed to reschedule router %s"), + binding.router_id) + except db_exc.DBError: + # Catch DB errors here so a transient DB connectivity issue + # doesn't stop the loopingcall. + LOG.exception(_LE("Exception encountered during router " + "rescheduling.")) def validate_agent_router_combination(self, context, agent, router): """Validate if the router can be correctly assigned to the agent. diff --git a/neutron/tests/unit/openvswitch/test_agent_scheduler.py b/neutron/tests/unit/openvswitch/test_agent_scheduler.py index ed4f44023b9..bf540726588 100644 --- a/neutron/tests/unit/openvswitch/test_agent_scheduler.py +++ b/neutron/tests/unit/openvswitch/test_agent_scheduler.py @@ -19,6 +19,7 @@ import datetime import mock from oslo.config import cfg +from oslo.db import exception as db_exc from webob import exc from neutron.api import extensions @@ -27,6 +28,7 @@ from neutron.api.rpc.handlers import dhcp_rpc from neutron.api.rpc.handlers import l3_rpc from neutron.api.v2 import attributes from neutron.common import constants +from neutron.common import rpc as n_rpc from neutron import context from neutron.db import agents_db from neutron.db import l3_agentschedulers_db @@ -648,6 +650,53 @@ class OvsAgentSchedulerTestCase(OvsAgentSchedulerTestCaseBase): agt_db.admin_state_up = state self.adminContext.session.commit() + def test_router_rescheduler_catches_rpc_db_and_reschedule_exceptions(self): + with self.router(): + l3_rpc_cb = l3_rpc.L3RpcCallback() + self._register_agent_states() + # schedule the router to host A + l3_rpc_cb.sync_routers(self.adminContext, host=L3_HOSTA) + + plugin = manager.NeutronManager.get_service_plugins().get( + service_constants.L3_ROUTER_NAT) + mock.patch.object( + plugin, 'reschedule_router', + side_effect=[ + db_exc.DBError(), n_rpc.RemoteError(), + l3agentscheduler.RouterReschedulingFailed(router_id='f', + agent_id='f'), + ValueError('this raises') + ]).start() + # these first three should not raise any errors + self._take_down_agent_and_run_reschedule(L3_HOSTA) # DBError + self._take_down_agent_and_run_reschedule(L3_HOSTA) # RemoteError + self._take_down_agent_and_run_reschedule(L3_HOSTA) # schedule err + + # ValueError is not caught so it should raise + self.assertRaises(ValueError, + self._take_down_agent_and_run_reschedule, + L3_HOSTA) + + def test_router_rescheduler_iterates_after_reschedule_failure(self): + plugin = manager.NeutronManager.get_service_plugins().get( + service_constants.L3_ROUTER_NAT) + l3_rpc_cb = l3_rpc.L3RpcCallback() + self._register_agent_states() + with contextlib.nested(self.router(), self.router()) as (r1, r2): + # schedule the routers to host A + l3_rpc_cb.sync_routers(self.adminContext, host=L3_HOSTA) + + rs_mock = mock.patch.object( + plugin, 'reschedule_router', + side_effect=l3agentscheduler.RouterReschedulingFailed( + router_id='f', agent_id='f'), + ).start() + self._take_down_agent_and_run_reschedule(L3_HOSTA) + # make sure both had a reschedule attempt even though first failed + rs_mock.assert_has_calls([mock.call(mock.ANY, r1['router']['id']), + mock.call(mock.ANY, r2['router']['id'])], + any_order=True) + def test_router_is_not_rescheduled_from_alive_agent(self): with self.router(): l3_rpc_cb = l3_rpc.L3RpcCallback() From 3cd2163d5105faad389bee5175ef446f0bb90289 Mon Sep 17 00:00:00 2001 From: Vivekanandan Narasimhan Date: Tue, 23 Sep 2014 02:25:16 -0700 Subject: [PATCH 099/128] Race for l2pop when ports go up/down on same host With l2pop enabled, race exists in delete_port_postcommit when both create/update_port and delete_port deal with different ports on the same host, where such ports are either the first (or) last on same network for that host. This race happens outside the DB locking zones in the respective methods of ML2 plugin. To fix this, we have moved determination of fdb_entries back to delete_port_postcommit and removed delete_port_precommit altogether from l2pop mechanism driver. In order to accomodate dvr interfaces, we are storing and re-using the mechanism-driver context which hold dvr-port-binding information while invoking delete_port_postcommit. We loop through dvr interface bindings invoking delete_port_postcommit similar to delete_port_precommit. Closes-Bug: #1372438 Change-Id: If0502f57382441fdb4510c81a89794f57a38e696 --- .../plugins/ml2/drivers/l2pop/mech_driver.py | 27 +++++-------------- neutron/plugins/ml2/plugin.py | 14 +++++----- .../unit/ml2/drivers/test_l2population.py | 16 +++++++++++ 3 files changed, 29 insertions(+), 28 deletions(-) diff --git a/neutron/plugins/ml2/drivers/l2pop/mech_driver.py b/neutron/plugins/ml2/drivers/l2pop/mech_driver.py index a98a27fd7d5..c85acb1c73f 100644 --- a/neutron/plugins/ml2/drivers/l2pop/mech_driver.py +++ b/neutron/plugins/ml2/drivers/l2pop/mech_driver.py @@ -38,32 +38,18 @@ class L2populationMechanismDriver(api.MechanismDriver, LOG.debug(_("Experimental L2 population driver")) self.rpc_ctx = n_context.get_admin_context_without_session() self.migrated_ports = {} - self.remove_fdb_entries = {} def _get_port_fdb_entries(self, port): return [[port['mac_address'], ip['ip_address']] for ip in port['fixed_ips']] - def delete_port_precommit(self, context): - port = context.current - agent_host = context.host - - if port['id'] not in self.remove_fdb_entries: - self.remove_fdb_entries[port['id']] = {} - - self.remove_fdb_entries[port['id']][agent_host] = ( - self._update_port_down(context, port, agent_host, 1)) - def delete_port_postcommit(self, context): port = context.current agent_host = context.host - if port['id'] in self.remove_fdb_entries: - for agent_host in list(self.remove_fdb_entries[port['id']]): - self.L2populationAgentNotify.remove_fdb_entries( - self.rpc_ctx, - self.remove_fdb_entries[port['id']][agent_host]) - self.remove_fdb_entries[port['id']].pop(agent_host, 0) - self.remove_fdb_entries.pop(port['id'], 0) + + fdb_entries = self._update_port_down(context, port, agent_host) + self.L2populationAgentNotify.remove_fdb_entries(self.rpc_ctx, + fdb_entries) def _get_diff_ips(self, orig, port): orig_ips = set([ip['ip_address'] for ip in orig['fixed_ips']]) @@ -260,8 +246,7 @@ class L2populationMechanismDriver(api.MechanismDriver, self.L2populationAgentNotify.add_fdb_entries(self.rpc_ctx, other_fdb_entries) - def _update_port_down(self, context, port, agent_host, - agent_active_ports_count_for_flooding=0): + def _update_port_down(self, context, port, agent_host): port_infos = self._get_port_infos(context, port, agent_host) if not port_infos: return @@ -277,7 +262,7 @@ class L2populationMechanismDriver(api.MechanismDriver, {'segment_id': segment['segmentation_id'], 'network_type': segment['network_type'], 'ports': {agent_ip: []}}} - if agent_active_ports == agent_active_ports_count_for_flooding: + if agent_active_ports == 0: # Agent is removing its last activated port in this network, # other agents needs to be notified to delete their flooding entry. other_fdb_entries[network_id]['ports'][agent_ip].append( diff --git a/neutron/plugins/ml2/plugin.py b/neutron/plugins/ml2/plugin.py index d744f19fe1f..72cf151006a 100644 --- a/neutron/plugins/ml2/plugin.py +++ b/neutron/plugins/ml2/plugin.py @@ -990,7 +990,7 @@ class Ml2Plugin(db_base_plugin_v2.NeutronDbPluginV2, port = self._make_port_dict(port_db) network = self.get_network(context, port['network_id']) - mech_context = None + bound_mech_contexts = [] device_owner = port['device_owner'] if device_owner == const.DEVICE_OWNER_DVR_INTERFACE: bindings = db.get_dvr_port_bindings(context.session, id) @@ -998,6 +998,7 @@ class Ml2Plugin(db_base_plugin_v2.NeutronDbPluginV2, mech_context = driver_context.DvrPortContext( self, context, port, network, bind) self.mechanism_manager.delete_port_precommit(mech_context) + bound_mech_contexts.append(mech_context) else: mech_context = driver_context.PortContext(self, context, port, network, binding) @@ -1005,6 +1006,7 @@ class Ml2Plugin(db_base_plugin_v2.NeutronDbPluginV2, router_info = l3plugin.dvr_deletens_if_no_port(context, id) removed_routers += router_info self.mechanism_manager.delete_port_precommit(mech_context) + bound_mech_contexts.append(mech_context) self._delete_port_security_group_bindings(context, id) if l3plugin: router_ids = l3plugin.disassociate_floatingips( @@ -1029,12 +1031,10 @@ class Ml2Plugin(db_base_plugin_v2.NeutronDbPluginV2, {'id': router['router_id'], 'agent': router['agent_id']}) try: - # for both normal and DVR Interface ports, only one invocation of - # delete_port_postcommit. We use gather/scatter technique for DVR - # interface ports, where the bindings are gathered in - # delete_port_precommit() call earlier and scattered as l2pop - # rules to cloud nodes in delete_port_postcommit() here - if mech_context: + # Note that DVR Interface ports will have bindings on + # multiple hosts, and so will have multiple mech_contexts, + # while other ports typically have just one. + for mech_context in bound_mech_contexts: self.mechanism_manager.delete_port_postcommit(mech_context) except ml2_exc.MechanismDriverError: # TODO(apech) - One or more mechanism driver failed to diff --git a/neutron/tests/unit/ml2/drivers/test_l2population.py b/neutron/tests/unit/ml2/drivers/test_l2population.py index cfe76d3a576..85d8b37a731 100644 --- a/neutron/tests/unit/ml2/drivers/test_l2population.py +++ b/neutron/tests/unit/ml2/drivers/test_l2population.py @@ -13,6 +13,7 @@ # License for the specific language governing permissions and limitations # under the License. +import contextlib import mock from neutron.common import constants @@ -24,6 +25,7 @@ from neutron.extensions import providernet as pnet from neutron import manager from neutron.openstack.common import timeutils from neutron.plugins.ml2 import config as config +from neutron.plugins.ml2.drivers.l2pop import mech_driver as l2pop_mech_driver from neutron.plugins.ml2 import managers from neutron.plugins.ml2 import rpc from neutron.tests.unit import test_db_plugin as test_plugin @@ -794,3 +796,17 @@ class TestL2PopulationRpcTestCase(test_plugin.NeutronDbPluginV2TestCase): self.mock_fanout.assert_called_with( mock.ANY, expected, topic=self.fanout_topic) + + def test_delete_port_invokes_update_device_down(self): + l2pop_mech = l2pop_mech_driver.L2populationMechanismDriver() + l2pop_mech.L2PopulationAgentNotify = mock.Mock() + l2pop_mech.rpc_ctx = mock.Mock() + with contextlib.nested( + mock.patch.object(l2pop_mech, + '_update_port_down', + return_value=None), + mock.patch.object(l2pop_mech.L2PopulationAgentNotify, + 'remove_fdb_entries')) as (upd_port_down, + rem_fdb_entries): + l2pop_mech.delete_port_postcommit(mock.Mock()) + self.assertTrue(upd_port_down.called) \ No newline at end of file From b4f025be065ea97710604f2f5e67fb4d9a28c16f Mon Sep 17 00:00:00 2001 From: Mark McClain Date: Wed, 11 Jun 2014 20:44:43 -0400 Subject: [PATCH 100/128] remove E251 exemption from pep8 check This change removes the exemption for E251 by addressing unexpected spaces around keyword/parameter equals Change-Id: Iff17477e37bef2a97fc58a538d08bcfc35c67751 Partial-Bug: 1329017 --- neutron/agent/metadata/agent.py | 7 +- neutron/db/firewall/firewall_db.py | 52 ++++++------ neutron/db/metering/metering_db.py | 4 +- neutron/extensions/firewall.py | 12 +-- .../plugins/cisco/db/l3/device_handling_db.py | 2 +- neutron/plugins/cisco/db/n1kv_db_v2.py | 6 +- .../unit/bigswitch/test_restproxy_plugin.py | 7 +- .../l3/test_l3_router_appliance_plugin.py | 2 +- .../tests/unit/cisco/n1kv/test_n1kv_plugin.py | 6 +- .../unit/db/firewall/test_db_firewall.py | 29 +++---- .../drivers/arista/test_arista_l3_driver.py | 8 +- neutron/tests/unit/ofagent/test_ofa_flows.py | 79 +++++++++++++------ .../services/firewall/test_fwaas_plugin.py | 73 +++++++++-------- .../drivers/haproxy/test_namespace_driver.py | 27 ++++--- neutron/tests/unit/test_extension_firewall.py | 29 ++++--- .../unit/vmware/vshield/test_fwaas_plugin.py | 55 +++++++------ tox.ini | 3 +- 17 files changed, 226 insertions(+), 175 deletions(-) diff --git a/neutron/agent/metadata/agent.py b/neutron/agent/metadata/agent.py index 69666f2c72f..4017057b3c3 100644 --- a/neutron/agent/metadata/agent.py +++ b/neutron/agent/metadata/agent.py @@ -209,9 +209,10 @@ class MetadataProxyHandler(object): req.query_string, '')) - h = httplib2.Http(ca_certs=self.conf.auth_ca_cert, - disable_ssl_certificate_validation= - self.conf.nova_metadata_insecure) + h = httplib2.Http( + ca_certs=self.conf.auth_ca_cert, + disable_ssl_certificate_validation=self.conf.nova_metadata_insecure + ) if self.conf.nova_client_cert and self.conf.nova_client_priv_key: h.add_certificate(self.conf.nova_client_priv_key, self.conf.nova_client_cert, diff --git a/neutron/db/firewall/firewall_db.py b/neutron/db/firewall/firewall_db.py index 9c8ce696ac9..f00905ee786 100644 --- a/neutron/db/firewall/firewall_db.py +++ b/neutron/db/firewall/firewall_db.py @@ -187,8 +187,8 @@ class Firewall_db_mixin(firewall.FirewallPluginBase, base_db.CommonDbMixin): # If we find an invalid rule in the list we # do not perform the update since this breaks # the integrity of this list. - raise firewall.FirewallRuleNotFound(firewall_rule_id= - fwrule_id) + raise firewall.FirewallRuleNotFound( + firewall_rule_id=fwrule_id) elif rules_dict[fwrule_id]['firewall_policy_id']: if (rules_dict[fwrule_id]['firewall_policy_id'] != fwp_db['id']): @@ -273,14 +273,14 @@ class Firewall_db_mixin(firewall.FirewallPluginBase, base_db.CommonDbMixin): status = (const.CREATED if cfg.CONF.router_distributed else const.PENDING_CREATE) with context.session.begin(subtransactions=True): - firewall_db = Firewall(id=uuidutils.generate_uuid(), - tenant_id=tenant_id, - name=fw['name'], - description=fw['description'], - firewall_policy_id= - fw['firewall_policy_id'], - admin_state_up=fw['admin_state_up'], - status=status) + firewall_db = Firewall( + id=uuidutils.generate_uuid(), + tenant_id=tenant_id, + name=fw['name'], + description=fw['description'], + firewall_policy_id=fw['firewall_policy_id'], + admin_state_up=fw['admin_state_up'], + status=status) context.session.add(firewall_db) return self._make_firewall_dict(firewall_db) @@ -396,22 +396,22 @@ class Firewall_db_mixin(firewall.FirewallPluginBase, base_db.CommonDbMixin): dst_port_min, dst_port_max = self._get_min_max_ports_from_range( fwr['destination_port']) with context.session.begin(subtransactions=True): - fwr_db = FirewallRule(id=uuidutils.generate_uuid(), - tenant_id=tenant_id, - name=fwr['name'], - description=fwr['description'], - shared=fwr['shared'], - protocol=fwr['protocol'], - ip_version=fwr['ip_version'], - source_ip_address=fwr['source_ip_address'], - destination_ip_address= - fwr['destination_ip_address'], - source_port_range_min=src_port_min, - source_port_range_max=src_port_max, - destination_port_range_min=dst_port_min, - destination_port_range_max=dst_port_max, - action=fwr['action'], - enabled=fwr['enabled']) + fwr_db = FirewallRule( + id=uuidutils.generate_uuid(), + tenant_id=tenant_id, + name=fwr['name'], + description=fwr['description'], + shared=fwr['shared'], + protocol=fwr['protocol'], + ip_version=fwr['ip_version'], + source_ip_address=fwr['source_ip_address'], + destination_ip_address=fwr['destination_ip_address'], + source_port_range_min=src_port_min, + source_port_range_max=src_port_max, + destination_port_range_min=dst_port_min, + destination_port_range_max=dst_port_max, + action=fwr['action'], + enabled=fwr['enabled']) context.session.add(fwr_db) return self._make_firewall_rule_dict(fwr_db) diff --git a/neutron/db/metering/metering_db.py b/neutron/db/metering/metering_db.py index 0e414a5f6bc..99e448fc3d6 100644 --- a/neutron/db/metering/metering_db.py +++ b/neutron/db/metering/metering_db.py @@ -158,8 +158,8 @@ class MeteringDbMixin(metering.MeteringPluginBase, cidrs = [r['remote_ip_prefix'] for r in r_ips] new_cidr_ipset = netaddr.IPSet([remote_ip_prefix]) if (netaddr.IPSet(cidrs) & new_cidr_ipset): - raise metering.MeteringLabelRuleOverlaps(remote_ip_prefix= - remote_ip_prefix) + raise metering.MeteringLabelRuleOverlaps( + remote_ip_prefix=remote_ip_prefix) def create_metering_label_rule(self, context, metering_label_rule): m = metering_label_rule['metering_label_rule'] diff --git a/neutron/extensions/firewall.py b/neutron/extensions/firewall.py index 3ae5bc7f384..d7cbb1f0a41 100644 --- a/neutron/extensions/firewall.py +++ b/neutron/extensions/firewall.py @@ -152,15 +152,15 @@ def convert_protocol(value): if 0 <= val <= 255: return val else: - raise FirewallRuleInvalidProtocol(protocol=value, - values= - fw_valid_protocol_values) + raise FirewallRuleInvalidProtocol( + protocol=value, + values=fw_valid_protocol_values) elif value.lower() in fw_valid_protocol_values: return value.lower() else: - raise FirewallRuleInvalidProtocol(protocol=value, - values= - fw_valid_protocol_values) + raise FirewallRuleInvalidProtocol( + protocol=value, + values=fw_valid_protocol_values) def convert_action_to_case_insensitive(value): diff --git a/neutron/plugins/cisco/db/l3/device_handling_db.py b/neutron/plugins/cisco/db/l3/device_handling_db.py index a2834899182..fac3722a97c 100644 --- a/neutron/plugins/cisco/db/l3/device_handling_db.py +++ b/neutron/plugins/cisco/db/l3/device_handling_db.py @@ -432,7 +432,7 @@ class DeviceHandlingMixin(object): with context.session.begin(subtransactions=True): hd_db = l3_models.HostingDevice( id=hd.get('id') or uuidutils.generate_uuid(), - complementary_id = hd.get('complementary_id'), + complementary_id=hd.get('complementary_id'), tenant_id=tenant_id, device_id=hd.get('device_id'), admin_state_up=hd.get('admin_state_up', True), diff --git a/neutron/plugins/cisco/db/n1kv_db_v2.py b/neutron/plugins/cisco/db/n1kv_db_v2.py index d694b236764..20c9706f0aa 100644 --- a/neutron/plugins/cisco/db/n1kv_db_v2.py +++ b/neutron/plugins/cisco/db/n1kv_db_v2.py @@ -943,9 +943,9 @@ def update_profile_binding(db_session, profile_id, tenants, profile_type): profile_id=profile_id, profile_type=profile_type).delete() new_tenants_set = set(tenants) for tenant_id in new_tenants_set: - tenant = n1kv_models_v2.ProfileBinding(profile_type = profile_type, - tenant_id = tenant_id, - profile_id = profile_id) + tenant = n1kv_models_v2.ProfileBinding(profile_type=profile_type, + tenant_id=tenant_id, + profile_id=profile_id) db_session.add(tenant) diff --git a/neutron/tests/unit/bigswitch/test_restproxy_plugin.py b/neutron/tests/unit/bigswitch/test_restproxy_plugin.py index 4d1845fce9a..87391cf945e 100644 --- a/neutron/tests/unit/bigswitch/test_restproxy_plugin.py +++ b/neutron/tests/unit/bigswitch/test_restproxy_plugin.py @@ -155,9 +155,10 @@ class TestBigSwitchProxyPortsV2(test_plugin.TestPortsV2, # stop normal patch self.httpPatch.stop() with patch(HTTPCON, new=fake_server.HTTPConnectionMock500): - self._delete('ports', port['port']['id'], - expected_code= - webob.exc.HTTPInternalServerError.code) + self._delete( + 'ports', + port['port']['id'], + expected_code=webob.exc.HTTPInternalServerError.code) self.httpPatch.start() port = self._get_ports(n['network']['id'])[0] self.assertEqual('BUILD', port['status']) diff --git a/neutron/tests/unit/cisco/l3/test_l3_router_appliance_plugin.py b/neutron/tests/unit/cisco/l3/test_l3_router_appliance_plugin.py index f30b60f24bd..23c8f6fb5ca 100644 --- a/neutron/tests/unit/cisco/l3/test_l3_router_appliance_plugin.py +++ b/neutron/tests/unit/cisco/l3/test_l3_router_appliance_plugin.py @@ -326,7 +326,7 @@ class RouterSchedulingTestCase(L3RouterApplianceTestCaseBase, self.assertIsNotNone(hosting_device_1) cfg_dh_rpc.report_non_responding_hosting_devices( self.adminContext, - host = None, + host=None, hosting_device_ids=[hosting_device_1['id']]) self.assertEqual(1, mock_notify.call_count) mock_notify.assert_called_with( diff --git a/neutron/tests/unit/cisco/n1kv/test_n1kv_plugin.py b/neutron/tests/unit/cisco/n1kv/test_n1kv_plugin.py index 0a64ba10909..db685cc568c 100644 --- a/neutron/tests/unit/cisco/n1kv/test_n1kv_plugin.py +++ b/neutron/tests/unit/cisco/n1kv/test_n1kv_plugin.py @@ -587,7 +587,7 @@ class TestN1kvNetworkProfiles(N1kvPluginTestCase): net_p_req = self.new_create_request('network_profiles', data) net_p_req.environ['neutron.context'] = context.Context('', self.tenant_id, - is_admin = True) + is_admin=True) res = net_p_req.get_response(self.ext_api) self.assertEqual(201, res.status_int) net_p = self.deserialize(self.fmt, res) @@ -612,7 +612,7 @@ class TestN1kvNetworkProfiles(N1kvPluginTestCase): net_p['network_profile']['id']) update_req.environ['neutron.context'] = context.Context('', self.tenant_id, - is_admin = True) + is_admin=True) update_res = update_req.get_response(self.ext_api) self.assertEqual(200, update_res.status_int) db_session = db.get_session() @@ -637,7 +637,7 @@ class TestN1kvNetworkProfiles(N1kvPluginTestCase): net_p['network_profile']['id']) update_req.environ['neutron.context'] = context.Context('', self.tenant_id, - is_admin = True) + is_admin=True) update_res = update_req.get_response(self.ext_api) self.assertEqual(200, update_res.status_int) # current tenant_id should always present diff --git a/neutron/tests/unit/db/firewall/test_db_firewall.py b/neutron/tests/unit/db/firewall/test_db_firewall.py index c25ba330506..efd99366938 100644 --- a/neutron/tests/unit/db/firewall/test_db_firewall.py +++ b/neutron/tests/unit/db/firewall/test_db_firewall.py @@ -624,9 +624,9 @@ class TestFirewallDBPlugin(FirewallPluginDbTestCase): with self.firewall_policy() as fwp: fwp_id = fwp['firewall_policy']['id'] attrs['firewall_policy_id'] = fwp_id - with self.firewall(firewall_policy_id=fwp_id, - admin_state_up= - ADMIN_STATE_UP): + with self.firewall( + firewall_policy_id=fwp_id, + admin_state_up=ADMIN_STATE_UP): req = self.new_delete_request('firewall_policies', fwp_id) res = req.get_response(self.ext_api) self.assertEqual(res.status_int, 409) @@ -896,10 +896,11 @@ class TestFirewallDBPlugin(FirewallPluginDbTestCase): with self.firewall_policy() as fwp: fwp_id = fwp['firewall_policy']['id'] attrs['firewall_policy_id'] = fwp_id - with self.firewall(name=attrs['name'], - firewall_policy_id=fwp_id, - admin_state_up= - ADMIN_STATE_UP) as firewall: + with self.firewall( + name=attrs['name'], + firewall_policy_id=fwp_id, + admin_state_up=ADMIN_STATE_UP + ) as firewall: for k, v in attrs.iteritems(): self.assertEqual(firewall['firewall'][k], v) @@ -919,10 +920,10 @@ class TestFirewallDBPlugin(FirewallPluginDbTestCase): with self.firewall_policy() as fwp: fwp_id = fwp['firewall_policy']['id'] attrs['firewall_policy_id'] = fwp_id - with self.firewall(name=name, - firewall_policy_id=fwp_id, - admin_state_up= - ADMIN_STATE_UP) as firewall: + with self.firewall( + name=name, + firewall_policy_id=fwp_id, + admin_state_up=ADMIN_STATE_UP) as firewall: req = self.new_show_request('firewalls', firewall['firewall']['id'], fmt=self.fmt) @@ -953,9 +954,9 @@ class TestFirewallDBPlugin(FirewallPluginDbTestCase): with self.firewall_policy() as fwp: fwp_id = fwp['firewall_policy']['id'] attrs['firewall_policy_id'] = fwp_id - with self.firewall(firewall_policy_id=fwp_id, - admin_state_up= - ADMIN_STATE_UP) as firewall: + with self.firewall( + firewall_policy_id=fwp_id, + admin_state_up=ADMIN_STATE_UP) as firewall: data = {'firewall': {'name': name}} req = self.new_update_request('firewalls', data, firewall['firewall']['id']) diff --git a/neutron/tests/unit/ml2/drivers/arista/test_arista_l3_driver.py b/neutron/tests/unit/ml2/drivers/arista/test_arista_l3_driver.py index 4cc4db1e28f..dc3f29a3c9d 100644 --- a/neutron/tests/unit/ml2/drivers/arista/test_arista_l3_driver.py +++ b/neutron/tests/unit/ml2/drivers/arista/test_arista_l3_driver.py @@ -416,7 +416,7 @@ class AristaL3DriverTestCasesMlag_one_switch_failed(base.BaseTestCase): tenant = '123' # Make one of the switches throw an exception - i.e. fail - self.drv._servers[0].runCmds = mock.Mock(side_effect = Exception()) + self.drv._servers[0].runCmds = mock.Mock(side_effect=Exception) self.drv.create_router(None, tenant, router) def test_delete_router_when_one_switch_fails(self): @@ -426,7 +426,7 @@ class AristaL3DriverTestCasesMlag_one_switch_failed(base.BaseTestCase): router_id = '345' # Make one of the switches throw an exception - i.e. fail - self.drv._servers[1].runCmds = mock.Mock(side_effect = Exception()) + self.drv._servers[1].runCmds = mock.Mock(side_effect=Exception) self.drv.delete_router(None, tenant, router_id, router) def test_add_router_interface_when_one_switch_fails(self): @@ -439,7 +439,7 @@ class AristaL3DriverTestCasesMlag_one_switch_failed(base.BaseTestCase): router['gip'] = '10.10.10.1' # Make one of the switches throw an exception - i.e. fail - self.drv._servers[1].runCmds = mock.Mock(side_effect = Exception()) + self.drv._servers[1].runCmds = mock.Mock(side_effect=Exception) self.drv.add_router_interface(None, router) def test_remove_router_interface_when_one_switch_fails(self): @@ -452,5 +452,5 @@ class AristaL3DriverTestCasesMlag_one_switch_failed(base.BaseTestCase): router['gip'] = '10.10.10.1' # Make one of the switches throw an exception - i.e. fail - self.drv._servers[0].runCmds = mock.Mock(side_effect = Exception()) + self.drv._servers[0].runCmds = mock.Mock(side_effect=Exception) self.drv.remove_router_interface(None, router) diff --git a/neutron/tests/unit/ofagent/test_ofa_flows.py b/neutron/tests/unit/ofagent/test_ofa_flows.py index 2f07448aac1..af92f9b4920 100644 --- a/neutron/tests/unit/ofagent/test_ofa_flows.py +++ b/neutron/tests/unit/ofagent/test_ofa_flows.py @@ -115,15 +115,27 @@ class TestOFAgentFlows(ofa_test_base.OFATestBase): (dp, ofp, ofpp) = br._get_dp() call = mock.call expected_calls = [ - call(ofpp.OFPFlowMod(dp, instructions=[ - ofpp.OFPInstructionActions(ofp.OFPIT_APPLY_ACTIONS, - [ofpp.OFPActionSetField(tunnel_id=112), - ofpp.OFPActionOutput(port=113), - ofpp.OFPActionOutput(port=114)]), - ofpp.OFPInstructionGotoTable(table_id=111)], - match=ofpp.OFPMatch(metadata= - meta.mk_metadata(111, meta.LOCAL)), - priority=1, table_id=110)) + call( + ofpp.OFPFlowMod( + dp, + instructions=[ + ofpp.OFPInstructionActions( + ofp.OFPIT_APPLY_ACTIONS, + [ + ofpp.OFPActionSetField(tunnel_id=112), + ofpp.OFPActionOutput(port=113), + ofpp.OFPActionOutput(port=114) + ] + ), + ofpp.OFPInstructionGotoTable(table_id=111) + ], + match=ofpp.OFPMatch( + metadata=meta.mk_metadata(111, meta.LOCAL) + ), + priority=1, + table_id=110 + ) + ) ] sendmsg.assert_has_calls(expected_calls) @@ -134,11 +146,17 @@ class TestOFAgentFlows(ofa_test_base.OFATestBase): (dp, ofp, ofpp) = br._get_dp() call = mock.call expected_calls = [ - call(ofpp.OFPFlowMod(dp, command=ofp.OFPFC_DELETE, - match=ofpp.OFPMatch(metadata= - meta.mk_metadata(111, meta.LOCAL)), - out_group=ofp.OFPG_ANY, - out_port=ofp.OFPP_ANY, priority=0, table_id=110)) + call( + ofpp.OFPFlowMod( + dp, + command=ofp.OFPFC_DELETE, + match=ofpp.OFPMatch( + metadata=meta.mk_metadata(111, meta.LOCAL) + ), + out_group=ofp.OFPG_ANY, + out_port=ofp.OFPP_ANY, priority=0, table_id=110 + ) + ) ] sendmsg.assert_has_calls(expected_calls) @@ -189,15 +207,30 @@ class TestOFAgentFlows(ofa_test_base.OFATestBase): match=ofpp.OFPMatch(in_port=99, vlan_vid=151 | ofp.OFPVID_PRESENT), priority=1, table_id=0)), - call(ofpp.OFPFlowMod(dp, instructions=[ - ofpp.OFPInstructionActions(ofp.OFPIT_APPLY_ACTIONS, [ - ofpp.OFPActionPushVlan(), - ofpp.OFPActionSetField(vlan_vid=151 | ofp.OFPVID_PRESENT), - ofpp.OFPActionOutput(port=99), ofpp.OFPActionPopVlan()]), - ofpp.OFPInstructionGotoTable(table_id=13)], - match=ofpp.OFPMatch(metadata= - meta.mk_metadata(150, meta.LOCAL)), - priority=1, table_id=12)) + call( + ofpp.OFPFlowMod( + dp, + instructions=[ + ofpp.OFPInstructionActions( + ofp.OFPIT_APPLY_ACTIONS, + [ + ofpp.OFPActionPushVlan(), + ofpp.OFPActionSetField( + vlan_vid=151 | ofp.OFPVID_PRESENT + ), + ofpp.OFPActionOutput(port=99), + ofpp.OFPActionPopVlan() + ] + ), + ofpp.OFPInstructionGotoTable(table_id=13) + ], + match=ofpp.OFPMatch( + metadata=meta.mk_metadata(150, meta.LOCAL) + ), + priority=1, + table_id=12 + ) + ) ] sendmsg.assert_has_calls(expected_calls) diff --git a/neutron/tests/unit/services/firewall/test_fwaas_plugin.py b/neutron/tests/unit/services/firewall/test_fwaas_plugin.py index f1278a8924a..a9f8e67298c 100644 --- a/neutron/tests/unit/services/firewall/test_fwaas_plugin.py +++ b/neutron/tests/unit/services/firewall/test_fwaas_plugin.py @@ -43,9 +43,10 @@ class TestFirewallCallbacks(test_db_firewall.FirewallPluginDbTestCase): ctx = context.get_admin_context() with self.firewall_policy() as fwp: fwp_id = fwp['firewall_policy']['id'] - with self.firewall(firewall_policy_id=fwp_id, - admin_state_up= - test_db_firewall.ADMIN_STATE_UP) as fw: + with self.firewall( + firewall_policy_id=fwp_id, + admin_state_up=test_db_firewall.ADMIN_STATE_UP + ) as fw: fw_id = fw['firewall']['id'] res = self.callbacks.set_firewall_status(ctx, fw_id, const.ACTIVE, @@ -63,9 +64,10 @@ class TestFirewallCallbacks(test_db_firewall.FirewallPluginDbTestCase): ctx = context.get_admin_context() with self.firewall_policy() as fwp: fwp_id = fwp['firewall_policy']['id'] - with self.firewall(firewall_policy_id=fwp_id, - admin_state_up= - test_db_firewall.ADMIN_STATE_UP) as fw: + with self.firewall( + firewall_policy_id=fwp_id, + admin_state_up=test_db_firewall.ADMIN_STATE_UP + ) as fw: fw_id = fw['firewall']['id'] fw_db = self.plugin._get_firewall(ctx, fw_id) fw_db['status'] = const.PENDING_DELETE @@ -131,10 +133,10 @@ class TestFirewallCallbacks(test_db_firewall.FirewallPluginDbTestCase): res = req.get_response(self.ext_api) attrs = self._get_test_firewall_attrs() attrs['firewall_policy_id'] = fwp_id - with self.firewall(firewall_policy_id=fwp_id, - tenant_id=tenant_id, - admin_state_up= - test_db_firewall.ADMIN_STATE_UP) as fw: + with self.firewall( + firewall_policy_id=fwp_id, + tenant_id=tenant_id, + admin_state_up=test_db_firewall.ADMIN_STATE_UP) as fw: fw_id = fw['firewall']['id'] res = self.callbacks.get_firewalls_for_tenant(ctx, host='dummy') @@ -229,9 +231,10 @@ class TestFirewallPluginBase(test_db_firewall.TestFirewallDBPlugin): with self.firewall_policy() as fwp: fwp_id = fwp['firewall_policy']['id'] attrs['firewall_policy_id'] = fwp_id - with self.firewall(firewall_policy_id=fwp_id, - admin_state_up= - test_db_firewall.ADMIN_STATE_UP) as firewall: + with self.firewall( + firewall_policy_id=fwp_id, + admin_state_up=test_db_firewall.ADMIN_STATE_UP + ) as firewall: fw_id = firewall['firewall']['id'] res = self.callbacks.set_firewall_status(ctx, fw_id, const.ACTIVE) @@ -252,9 +255,10 @@ class TestFirewallPluginBase(test_db_firewall.TestFirewallDBPlugin): with self.firewall_policy() as fwp: fwp_id = fwp['firewall_policy']['id'] attrs['firewall_policy_id'] = fwp_id - with self.firewall(firewall_policy_id=fwp_id, - admin_state_up= - test_db_firewall.ADMIN_STATE_UP) as firewall: + with self.firewall( + firewall_policy_id=fwp_id, + admin_state_up=test_db_firewall.ADMIN_STATE_UP + ) as firewall: fw_id = firewall['firewall']['id'] data = {'firewall': {'name': name}} req = self.new_update_request('firewalls', data, fw_id) @@ -265,10 +269,11 @@ class TestFirewallPluginBase(test_db_firewall.TestFirewallDBPlugin): ctx = context.get_admin_context() with self.firewall_policy() as fwp: fwp_id = fwp['firewall_policy']['id'] - with self.firewall(firewall_policy_id=fwp_id, - admin_state_up= - test_db_firewall.ADMIN_STATE_UP, - tenant_id='noadmin') as firewall: + with self.firewall( + firewall_policy_id=fwp_id, + admin_state_up=test_db_firewall.ADMIN_STATE_UP, + tenant_id='noadmin' + ) as firewall: fw_id = firewall['firewall']['id'] self.callbacks.set_firewall_status(ctx, fw_id, const.ACTIVE) @@ -286,9 +291,10 @@ class TestFirewallPluginBase(test_db_firewall.TestFirewallDBPlugin): with self.firewall_policy() as fwp: fwp_id = fwp['firewall_policy']['id'] attrs['firewall_policy_id'] = fwp_id - with self.firewall(firewall_policy_id=fwp_id, - admin_state_up= - test_db_firewall.ADMIN_STATE_UP): + with self.firewall( + firewall_policy_id=fwp_id, + admin_state_up=test_db_firewall.ADMIN_STATE_UP + ): data = {'firewall_policy': {'name': name}} req = self.new_update_request('firewall_policies', data, fwp_id) @@ -306,9 +312,10 @@ class TestFirewallPluginBase(test_db_firewall.TestFirewallDBPlugin): req = self.new_update_request('firewall_policies', data, fwp_id) req.get_response(self.ext_api) - with self.firewall(firewall_policy_id=fwp_id, - admin_state_up= - test_db_firewall.ADMIN_STATE_UP): + with self.firewall( + firewall_policy_id=fwp_id, + admin_state_up=test_db_firewall.ADMIN_STATE_UP + ): data = {'firewall_rule': {'protocol': 'udp'}} req = self.new_update_request('firewall_rules', data, fr_id) @@ -323,9 +330,10 @@ class TestFirewallPluginBase(test_db_firewall.TestFirewallDBPlugin): with self.firewall_policy() as fwp: fwp_id = fwp['firewall_policy']['id'] attrs['firewall_policy_id'] = fwp_id - with self.firewall(firewall_policy_id=fwp_id, - admin_state_up= - test_db_firewall.ADMIN_STATE_UP) as firewall: + with self.firewall( + firewall_policy_id=fwp_id, + admin_state_up=test_db_firewall.ADMIN_STATE_UP + ) as firewall: fw_id = firewall['firewall']['id'] attrs = self._replace_firewall_status(attrs, const.PENDING_CREATE, @@ -367,9 +375,10 @@ class TestFirewallPluginBase(test_db_firewall.TestFirewallDBPlugin): req.get_response(self.ext_api) attrs = self._get_test_firewall_attrs() attrs['firewall_policy_id'] = fwp_id - with self.firewall(firewall_policy_id=fwp_id, - admin_state_up= - test_db_firewall.ADMIN_STATE_UP) as fw: + with self.firewall( + firewall_policy_id=fwp_id, + admin_state_up=test_db_firewall.ADMIN_STATE_UP + ) as fw: fw_id = fw['firewall']['id'] fw_rules = ( self.plugin._make_firewall_dict_with_rules(ctx, diff --git a/neutron/tests/unit/services/loadbalancer/drivers/haproxy/test_namespace_driver.py b/neutron/tests/unit/services/loadbalancer/drivers/haproxy/test_namespace_driver.py index 45acdf5ee67..0f8a2fd51a5 100644 --- a/neutron/tests/unit/services/loadbalancer/drivers/haproxy/test_namespace_driver.py +++ b/neutron/tests/unit/services/loadbalancer/drivers/haproxy/test_namespace_driver.py @@ -272,10 +272,11 @@ class TestHaproxyNSDriver(base.BaseTestCase): 'test_interface', 'mac_addr', namespace='test_ns') - self.vif_driver.init_l3.assert_called_once_with('test_interface', - ['10.0.0.2/24'], - namespace= - 'test_ns') + self.vif_driver.init_l3.assert_called_once_with( + 'test_interface', + ['10.0.0.2/24'], + namespace='test_ns' + ) cmd = ['route', 'add', 'default', 'gw', '10.0.0.1'] cmd_arping = ['arping', '-U', '-I', 'test_interface', '-c', @@ -339,10 +340,11 @@ class TestHaproxyNSDriver(base.BaseTestCase): 'test_interface', 'mac_addr', namespace='test_ns') - self.vif_driver.init_l3.assert_called_once_with('test_interface', - ['10.0.0.2/24'], - namespace= - 'test_ns') + self.vif_driver.init_l3.assert_called_once_with( + 'test_interface', + ['10.0.0.2/24'], + namespace='test_ns' + ) self.assertFalse(ip_wrap.called) dev_exists.return_value = True self.assertRaises(exceptions.PreexistingDeviceFailure, @@ -375,10 +377,11 @@ class TestHaproxyNSDriver(base.BaseTestCase): 'test_interface', 'mac_addr', namespace='test_ns') - self.vif_driver.init_l3.assert_called_once_with('test_interface', - ['10.0.0.2/24'], - namespace= - 'test_ns') + self.vif_driver.init_l3.assert_called_once_with( + 'test_interface', + ['10.0.0.2/24'], + namespace='test_ns' + ) cmd = ['route', 'add', 'default', 'gw', '10.0.0.1'] ip_wrap.assert_has_calls([ mock.call('sudo_test', namespace='test_ns'), diff --git a/neutron/tests/unit/test_extension_firewall.py b/neutron/tests/unit/test_extension_firewall.py index 27abc0cc6b5..a986b029f0b 100644 --- a/neutron/tests/unit/test_extension_firewall.py +++ b/neutron/tests/unit/test_extension_firewall.py @@ -148,10 +148,9 @@ class FirewallExtensionTestCase(test_api_v2_extension.ExtensionTestCase): res = self.api.post(_get_path('fw/firewall_rules', fmt=self.fmt), self.serialize(data), content_type='application/%s' % self.fmt) - instance.create_firewall_rule.assert_called_with(mock.ANY, - firewall_rule= - {'firewall_rule': - expected_call_args}) + instance.create_firewall_rule.assert_called_with( + mock.ANY, + firewall_rule={'firewall_rule': expected_call_args}) self.assertEqual(res.status_int, exc.HTTPCreated.code) res = self.deserialize(res) self.assertIn('firewall_rule', res) @@ -213,10 +212,10 @@ class FirewallExtensionTestCase(test_api_v2_extension.ExtensionTestCase): fmt=self.fmt), self.serialize(update_data)) - instance.update_firewall_rule.assert_called_with(mock.ANY, - rule_id, - firewall_rule= - update_data) + instance.update_firewall_rule.assert_called_with( + mock.ANY, + rule_id, + firewall_rule=update_data) self.assertEqual(res.status_int, exc.HTTPOk.code) res = self.deserialize(res) self.assertIn('firewall_rule', res) @@ -242,9 +241,9 @@ class FirewallExtensionTestCase(test_api_v2_extension.ExtensionTestCase): fmt=self.fmt), self.serialize(data), content_type='application/%s' % self.fmt) - instance.create_firewall_policy.assert_called_with(mock.ANY, - firewall_policy= - data) + instance.create_firewall_policy.assert_called_with( + mock.ANY, + firewall_policy=data) self.assertEqual(res.status_int, exc.HTTPCreated.code) res = self.deserialize(res) self.assertIn('firewall_policy', res) @@ -299,10 +298,10 @@ class FirewallExtensionTestCase(test_api_v2_extension.ExtensionTestCase): fmt=self.fmt), self.serialize(update_data)) - instance.update_firewall_policy.assert_called_with(mock.ANY, - policy_id, - firewall_policy= - update_data) + instance.update_firewall_policy.assert_called_with( + mock.ANY, + policy_id, + firewall_policy=update_data) self.assertEqual(res.status_int, exc.HTTPOk.code) res = self.deserialize(res) self.assertIn('firewall_policy', res) diff --git a/neutron/tests/unit/vmware/vshield/test_fwaas_plugin.py b/neutron/tests/unit/vmware/vshield/test_fwaas_plugin.py index 04c24172e2f..a954a32b7de 100644 --- a/neutron/tests/unit/vmware/vshield/test_fwaas_plugin.py +++ b/neutron/tests/unit/vmware/vshield/test_fwaas_plugin.py @@ -130,12 +130,13 @@ class FirewallPluginTestCase(test_db_firewall.FirewallPluginDbTestCase, fwp_id = fwp['firewall_policy']['id'] attrs['firewall_policy_id'] = fwp_id attrs['router_id'] = self._create_and_get_router() - with self.firewall(name=name, - firewall_policy_id=fwp_id, - router_id=attrs['router_id'], - admin_state_up= - test_db_firewall.ADMIN_STATE_UP, - expected_res_status=201) as fw: + with self.firewall( + name=name, + firewall_policy_id=fwp_id, + router_id=attrs['router_id'], + admin_state_up=test_db_firewall.ADMIN_STATE_UP, + expected_res_status=201 + ) as fw: attrs = self._replace_firewall_status( attrs, const.PENDING_CREATE, const.ACTIVE) for k, v in attrs.iteritems(): @@ -146,11 +147,12 @@ class FirewallPluginTestCase(test_db_firewall.FirewallPluginDbTestCase, attrs = self._get_test_firewall_attrs(name) attrs['router_id'] = self._create_and_get_router() - with self.firewall(name=name, - router_id=attrs['router_id'], - admin_state_up= - test_db_firewall.ADMIN_STATE_UP, - expected_res_status=201) as fw: + with self.firewall( + name=name, + router_id=attrs['router_id'], + admin_state_up=test_db_firewall.ADMIN_STATE_UP, + expected_res_status=201 + ) as fw: attrs = self._replace_firewall_status( attrs, const.PENDING_CREATE, const.ACTIVE) for k, v in attrs.iteritems(): @@ -201,12 +203,13 @@ class FirewallPluginTestCase(test_db_firewall.FirewallPluginDbTestCase, router_id = self._create_and_get_router() with self.firewall_policy() as fwp: fwp_id = fwp['firewall_policy']['id'] - with self.firewall(name='fw', - firewall_policy_id=fwp_id, - router_id=router_id, - admin_state_up= - test_db_firewall.ADMIN_STATE_UP, - expected_res_status=201): + with self.firewall( + name='fw', + firewall_policy_id=fwp_id, + router_id=router_id, + admin_state_up=test_db_firewall.ADMIN_STATE_UP, + expected_res_status=201 + ): self._delete('routers', router_id, expected_code=webob.exc.HTTPConflict.code) @@ -311,10 +314,11 @@ class FirewallPluginTestCase(test_db_firewall.FirewallPluginDbTestCase, firewall_rules=None, audited=test_db_firewall.AUDITED) as fwp: fwp_id = fwp['firewall_policy']['id'] - with self.firewall(firewall_policy_id=fwp_id, - router_id=self._create_and_get_router(), - admin_state_up= - test_db_firewall.ADMIN_STATE_UP): + with self.firewall( + firewall_policy_id=fwp_id, + router_id=self._create_and_get_router(), + admin_state_up=test_db_firewall.ADMIN_STATE_UP + ): data = {'firewall_policy': {'name': name}} req = self.new_update_request( 'firewall_policies', data, fwp['firewall_policy']['id']) @@ -372,10 +376,11 @@ class FirewallPluginTestCase(test_db_firewall.FirewallPluginDbTestCase, with self.firewall_policy() as fwp: fwp_id = fwp['firewall_policy']['id'] attrs['firewall_policy_id'] = fwp_id - with self.firewall(firewall_policy_id=fwp_id, - router_id=self._create_and_get_router(), - admin_state_up= - test_db_firewall.ADMIN_STATE_UP): + with self.firewall( + firewall_policy_id=fwp_id, + router_id=self._create_and_get_router(), + admin_state_up=test_db_firewall.ADMIN_STATE_UP + ): fwr_id = fwr['firewall_rule']['id'] data = {'firewall_policy': {'firewall_rules': [fwr_id]}} req = self.new_update_request( diff --git a/tox.ini b/tox.ini index 90cc8d766cf..853ae1fe6bf 100644 --- a/tox.ini +++ b/tox.ini @@ -64,7 +64,6 @@ commands = python setup.py build_sphinx # E126 continuation line over-indented for hanging indent # E128 continuation line under-indented for visual indent # E129 visually indented line with same indent as next logical line -# E251 unexpected spaces around keyword / parameter equals # E265 block comment should start with ‘# ‘ # E713 test for membership should be ‘not in’ # F402 import module shadowed by loop variable @@ -79,7 +78,7 @@ commands = python setup.py build_sphinx # H405 multi line docstring summary not separated with an empty line # H904 Wrap long lines in parentheses instead of a backslash # TODO(marun) H404 multi line docstring should start with a summary -ignore = E125,E126,E128,E129,E251,E265,E713,F402,F811,F812,H104,H237,H305,H307,H401,H402,H404,H405,H904 +ignore = E125,E126,E128,E129,E265,E713,F402,F811,F812,H104,H237,H305,H307,H401,H402,H404,H405,H904 show-source = true builtins = _ exclude = .venv,.git,.tox,dist,doc,*openstack/common*,*lib/python*,*egg,build,tools,.ropeproject,rally-scenarios From 4c2b42e21744be56cbf32aeac6f4b4f1c87de24e Mon Sep 17 00:00:00 2001 From: Kevin Benton Date: Sat, 11 Oct 2014 03:42:47 -0700 Subject: [PATCH 101/128] Call DVR VMARP notify outside of transaction The dvr vmarp table update notification was being called inside of the delete_port transaction in ML2, which can cause a yield and lead to the glorious mysql/eventlet deadlock. This patch moves it outside the transaction and adjusts it to use an existing port dictionary rather than re-looking it up since the port is now gone from the DB by the time it is called. Closes-Bug: #1377241 Change-Id: I0b4dac61e49b2a926353f8478e421cd1a70be038 --- neutron/db/l3_dvr_db.py | 3 +-- neutron/plugins/ml2/plugin.py | 4 ++-- neutron/plugins/ml2/rpc.py | 3 ++- neutron/tests/unit/ml2/test_ml2_plugin.py | 25 +++++++++++++++++++++-- 4 files changed, 28 insertions(+), 7 deletions(-) diff --git a/neutron/db/l3_dvr_db.py b/neutron/db/l3_dvr_db.py index b6e826b8c1d..1b39d5bed76 100644 --- a/neutron/db/l3_dvr_db.py +++ b/neutron/db/l3_dvr_db.py @@ -538,13 +538,12 @@ class L3_NAT_with_dvr_db_mixin(l3_db.L3_NAT_db_mixin, self._populate_subnet_for_ports(context, port_list) return port_list - def dvr_vmarp_table_update(self, context, port_id, action): + def dvr_vmarp_table_update(self, context, port_dict, action): """Notify the L3 agent of VM ARP table changes. Provide the details of the VM ARP to the L3 agent when a Nova instance gets created or deleted. """ - port_dict = self._core_plugin._get_port(context, port_id) # Check this is a valid VM port if ("compute:" not in port_dict['device_owner'] or not port_dict['fixed_ips']): diff --git a/neutron/plugins/ml2/plugin.py b/neutron/plugins/ml2/plugin.py index d744f19fe1f..b271af83f5c 100644 --- a/neutron/plugins/ml2/plugin.py +++ b/neutron/plugins/ml2/plugin.py @@ -1009,8 +1009,6 @@ class Ml2Plugin(db_base_plugin_v2.NeutronDbPluginV2, if l3plugin: router_ids = l3plugin.disassociate_floatingips( context, id, do_notify=False) - if is_dvr_enabled: - l3plugin.dvr_vmarp_table_update(context, id, "del") LOG.debug("Calling delete_port for %(port_id)s owned by %(owner)s" % {"port_id": id, "owner": device_owner}) @@ -1018,6 +1016,8 @@ class Ml2Plugin(db_base_plugin_v2.NeutronDbPluginV2, # now that we've left db transaction, we are safe to notify if l3plugin: + if is_dvr_enabled: + l3plugin.dvr_vmarp_table_update(context, port, "del") l3plugin.notify_routers_updated(context, router_ids) for router in removed_routers: try: diff --git a/neutron/plugins/ml2/rpc.py b/neutron/plugins/ml2/rpc.py index d9cb07efd46..d962c1d2286 100644 --- a/neutron/plugins/ml2/rpc.py +++ b/neutron/plugins/ml2/rpc.py @@ -165,7 +165,8 @@ class RpcCallbacks(n_rpc.RpcCallback, utils.is_extension_supported(l3plugin, q_const.L3_DISTRIBUTED_EXT_ALIAS)): try: - l3plugin.dvr_vmarp_table_update(rpc_context, port_id, "add") + port = plugin._get_port(rpc_context, port_id) + l3plugin.dvr_vmarp_table_update(rpc_context, port, "add") except exceptions.PortNotFound: LOG.debug('Port %s not found during ARP update', port_id) diff --git a/neutron/tests/unit/ml2/test_ml2_plugin.py b/neutron/tests/unit/ml2/test_ml2_plugin.py index 0d43145d2c9..9bd8ccd9f61 100644 --- a/neutron/tests/unit/ml2/test_ml2_plugin.py +++ b/neutron/tests/unit/ml2/test_ml2_plugin.py @@ -988,9 +988,9 @@ class TestFaultyMechansimDriver(Ml2PluginV2FaultyDriverTestCase): self._delete('ports', port['port']['id']) -class TestMl2PluginCreateUpdatePort(base.BaseTestCase): +class TestMl2PluginCreateUpdateDeletePort(base.BaseTestCase): def setUp(self): - super(TestMl2PluginCreateUpdatePort, self).setUp() + super(TestMl2PluginCreateUpdateDeletePort, self).setUp() self.context = mock.MagicMock() def _ensure_transaction_is_closed(self): @@ -1043,3 +1043,24 @@ class TestMl2PluginCreateUpdatePort(base.BaseTestCase): plugin._notify_l3_agent_new_port.assert_called_once_with( self.context, new_host_port) + + def test_vmarp_table_update_outside_of_delete_transaction(self): + l3plugin = mock.Mock() + l3plugin.dvr_vmarp_table_update = ( + lambda *args, **kwargs: self._ensure_transaction_is_closed()) + l3plugin.dvr_deletens_if_no_port.return_value = [] + l3plugin.supported_extension_aliases = [ + 'router', constants.L3_AGENT_SCHEDULER_EXT_ALIAS, + constants.L3_DISTRIBUTED_EXT_ALIAS + ] + with contextlib.nested( + mock.patch.object(ml2_plugin.Ml2Plugin, '__init__', + return_value=None), + mock.patch.object(manager.NeutronManager, + 'get_service_plugins', + return_value={'L3_ROUTER_NAT': l3plugin}), + ): + plugin = self._create_plugin_for_create_update_port(mock.Mock()) + # deleting the port will call dvr_vmarp_table_update, which will + # run the transaction balancing function defined in this test + plugin.delete_port(self.context, 'fake_id') From 06fc675928408e462f01178e0158a72f8518188a Mon Sep 17 00:00:00 2001 From: Paul Michali Date: Tue, 14 Oct 2014 18:18:15 -0400 Subject: [PATCH 102/128] VPNaaS Cisco unit test clean-up Removed unused args to mock side-effect function and duplicate constant. Change-Id: I5409ce86ccaab86213d65f757f19c1bdf9a66929 Closes-Bug: #1381221 --- .../unit/services/vpn/device_drivers/test_cisco_ipsec.py | 2 +- .../unit/services/vpn/service_drivers/test_cisco_ipsec.py | 8 ++------ 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/neutron/tests/unit/services/vpn/device_drivers/test_cisco_ipsec.py b/neutron/tests/unit/services/vpn/device_drivers/test_cisco_ipsec.py index fe373055c61..c6a6c684637 100644 --- a/neutron/tests/unit/services/vpn/device_drivers/test_cisco_ipsec.py +++ b/neutron/tests/unit/services/vpn/device_drivers/test_cisco_ipsec.py @@ -125,7 +125,7 @@ class TestCiscoCsrIPSecConnection(base.BaseTestCase): steps are called in reverse order. At the end, there should be no rollback infromation for the connection. """ - def fake_route_check_fails(*args, **kwargs): + def fake_route_check_fails(*args): if args[0] == 'Static Route': # So that subsequent calls to CSR rest client (for rollback) # will fake as passing. diff --git a/neutron/tests/unit/services/vpn/service_drivers/test_cisco_ipsec.py b/neutron/tests/unit/services/vpn/service_drivers/test_cisco_ipsec.py index 781344f75f0..10b9d987c80 100644 --- a/neutron/tests/unit/services/vpn/service_drivers/test_cisco_ipsec.py +++ b/neutron/tests/unit/services/vpn/service_drivers/test_cisco_ipsec.py @@ -29,19 +29,15 @@ from neutron.tests.unit import testlib_api _uuid = uuidutils.generate_uuid FAKE_VPN_CONN_ID = _uuid() +FAKE_SERVICE_ID = _uuid() FAKE_VPN_CONNECTION = { - 'vpnservice_id': _uuid(), + 'vpnservice_id': FAKE_SERVICE_ID, 'id': FAKE_VPN_CONN_ID, 'ikepolicy_id': _uuid(), 'ipsecpolicy_id': _uuid(), 'tenant_id': _uuid() } -FAKE_SERVICE_ID = _uuid() -FAKE_VPN_CONNECTION = { - 'vpnservice_id': FAKE_SERVICE_ID -} - FAKE_ROUTER_ID = _uuid() FAKE_VPN_SERVICE = { 'router_id': FAKE_ROUTER_ID From 105dba9addfdffecea41cce58f3646d2f2a6a6cc Mon Sep 17 00:00:00 2001 From: YAMAMOTO Takashi Date: Thu, 9 Oct 2014 09:04:34 +0900 Subject: [PATCH 103/128] openvswitch: Remove no longer used options They are remainders of the recently removed monolithic OVS plugin. Note: This change does not touch options used by OVS agent. Partial-Bug: #1323729 Change-Id: I6dd04c5c506ff5f97f10ebab03943cd508fbfe60 --- .../openvswitch/ovs_neutron_plugin.ini | 63 +++---------------- neutron/plugins/openvswitch/common/config.py | 13 ---- .../unit/openvswitch/test_ovs_defaults.py | 3 - 3 files changed, 7 insertions(+), 72 deletions(-) diff --git a/etc/neutron/plugins/openvswitch/ovs_neutron_plugin.ini b/etc/neutron/plugins/openvswitch/ovs_neutron_plugin.ini index 9c8e6b58894..232ca71d368 100644 --- a/etc/neutron/plugins/openvswitch/ovs_neutron_plugin.ini +++ b/etc/neutron/plugins/openvswitch/ovs_neutron_plugin.ini @@ -1,52 +1,13 @@ [ovs] -# (StrOpt) Type of network to allocate for tenant networks. The -# default value 'local' is useful only for single-box testing and -# provides no connectivity between hosts. You MUST either change this -# to 'vlan' and configure network_vlan_ranges below or change this to -# 'gre' or 'vxlan' and configure tunnel_id_ranges below in order for -# tenant networks to provide connectivity between hosts. Set to 'none' -# to disable creation of tenant networks. -# -# tenant_network_type = local -# Example: tenant_network_type = gre -# Example: tenant_network_type = vxlan - -# (ListOpt) Comma-separated list of -# [::] tuples enumerating ranges -# of VLAN IDs on named physical networks that are available for -# allocation. All physical networks listed are available for flat and -# VLAN provider network creation. Specified ranges of VLAN IDs are -# available for tenant network allocation if tenant_network_type is -# 'vlan'. If empty, only gre, vxlan and local networks may be created. -# -# network_vlan_ranges = -# Example: network_vlan_ranges = physnet1:1000:2999 - # (BoolOpt) Set to True in the server and the agents to enable support # for GRE or VXLAN networks. Requires kernel support for OVS patch ports and # GRE or VXLAN tunneling. # # WARNING: This option will be deprecated in the Icehouse release, at which -# point setting tunnel_type below will be required to enable -# tunneling. +# point setting tunnel_types will be required to enable tunneling. # # enable_tunneling = False -# (StrOpt) The type of tunnel network, if any, supported by the plugin. If -# this is set, it will cause tunneling to be enabled. If this is not set and -# the option enable_tunneling is set, this will default to 'gre'. -# -# tunnel_type = -# Example: tunnel_type = gre -# Example: tunnel_type = vxlan - -# (ListOpt) Comma-separated list of : tuples -# enumerating ranges of GRE or VXLAN tunnel IDs that are available for -# tenant network allocation if tenant_network_type is 'gre' or 'vxlan'. -# -# tunnel_id_ranges = -# Example: tunnel_id_ranges = 1:1000 - # Do not change this parameter unless you have a good reason to. # This is the name of the OVS integration bridge. There is one per hypervisor. # The integration bridge acts as a virtual "patch bay". All VM VIFs are @@ -55,7 +16,7 @@ # # integration_bridge = br-int -# Only used for the agent if tunnel_id_ranges (above) is not empty for +# Only used for the agent if tunnel_id_ranges is not empty for # the server. In most cases, the default value should be fine. # # tunnel_bridge = br-tun @@ -66,7 +27,7 @@ # Peer patch port in tunnel bridge for integration bridge # tun_peer_patch_port = patch-int -# Uncomment this line for the agent if tunnel_id_ranges (above) is not +# Uncomment this line for the agent if tunnel_id_ranges is not # empty for the server. Set local-ip to be the local IP address of # this hypervisor. # @@ -77,8 +38,8 @@ # bridge names to be used for flat and VLAN networks. The length of # bridge names should be no more than 11. Each bridge must # exist, and should have a physical network interface configured as a -# port. All physical networks listed in network_vlan_ranges on the -# server should have mappings to appropriate bridges on each agent. +# port. All physical networks configured on the server should have +# mappings to appropriate bridges on each agent. # # bridge_mappings = # Example: bridge_mappings = physnet1:br-eth1 @@ -102,10 +63,8 @@ # (ListOpt) The types of tenant network tunnels supported by the agent. # Setting this will enable tunneling support in the agent. This can be set to # either 'gre' or 'vxlan'. If this is unset, it will default to [] and -# disable tunneling support in the agent. When running the agent with the OVS -# plugin, this value must be the same as "tunnel_type" in the "[ovs]" section. -# When running the agent with ML2, you can specify as many values here as -# your compute hosts supports. +# disable tunneling support in the agent. +# You can specify as many values here as your compute hosts supports. # # tunnel_types = # Example: tunnel_types = gre @@ -164,25 +123,17 @@ # # 1. With VLANs on eth1. # [ovs] -# network_vlan_ranges = default:2000:3999 -# tunnel_id_ranges = # integration_bridge = br-int # bridge_mappings = default:br-eth1 # # 2. With GRE tunneling. # [ovs] -# network_vlan_ranges = -# tunnel_id_ranges = 1:1000 # integration_bridge = br-int # tunnel_bridge = br-tun # local_ip = 10.0.0.3 # # 3. With VXLAN tunneling. # [ovs] -# network_vlan_ranges = -# tenant_network_type = vxlan -# tunnel_type = vxlan -# tunnel_id_ranges = 1:1000 # integration_bridge = br-int # tunnel_bridge = br-tun # local_ip = 10.0.0.3 diff --git a/neutron/plugins/openvswitch/common/config.py b/neutron/plugins/openvswitch/common/config.py index d9e0454839c..03e4d884ff2 100644 --- a/neutron/plugins/openvswitch/common/config.py +++ b/neutron/plugins/openvswitch/common/config.py @@ -43,19 +43,6 @@ ovs_opts = [ default=DEFAULT_BRIDGE_MAPPINGS, help=_("List of :. " "Deprecated for ofagent.")), - cfg.StrOpt('tenant_network_type', default='local', - help=_("Network type for tenant networks " - "(local, vlan, gre, vxlan, or none).")), - cfg.ListOpt('network_vlan_ranges', - default=DEFAULT_VLAN_RANGES, - help=_("List of :: " - "or .")), - cfg.ListOpt('tunnel_id_ranges', - default=DEFAULT_TUNNEL_RANGES, - help=_("List of :.")), - cfg.StrOpt('tunnel_type', default='', - help=_("The type of tunnels to use when utilizing tunnels, " - "either 'gre' or 'vxlan'.")), cfg.BoolOpt('use_veth_interconnection', default=False, help=_("Use veths instead of patch ports to interconnect the " "integration bridge to physical bridges.")), diff --git a/neutron/tests/unit/openvswitch/test_ovs_defaults.py b/neutron/tests/unit/openvswitch/test_ovs_defaults.py index 0d5c00f730d..e52b4530e93 100644 --- a/neutron/tests/unit/openvswitch/test_ovs_defaults.py +++ b/neutron/tests/unit/openvswitch/test_ovs_defaults.py @@ -27,9 +27,6 @@ class ConfigurationTest(base.BaseTestCase): self.assertEqual('br-tun', cfg.CONF.OVS.tunnel_bridge) self.assertEqual(2, cfg.CONF.AGENT.polling_interval) self.assertEqual('sudo', cfg.CONF.AGENT.root_helper) - self.assertEqual('local', cfg.CONF.OVS.tenant_network_type) self.assertEqual(0, len(cfg.CONF.OVS.bridge_mappings)) - self.assertEqual(0, len(cfg.CONF.OVS.network_vlan_ranges)) - self.assertEqual(0, len(cfg.CONF.OVS.tunnel_id_ranges)) self.assertFalse(cfg.CONF.AGENT.l2_population) self.assertFalse(cfg.CONF.AGENT.arp_responder) From acfcb523b15fbd9ccc509e4366e4a141a66d4783 Mon Sep 17 00:00:00 2001 From: Eugene Nikanorov Date: Sun, 28 Sep 2014 21:56:00 +0400 Subject: [PATCH 104/128] Refactor _make_subnet_dict to avoid issuing unnecessary queries Use joined loads for attributes dns_nameservers and host_routes. As a result, particular scenarios like restarting DHCP agent could benefit from improved server-side performance. Change-Id: I6470356b601e2fcf74c7e0a6df438cef7099e9fe Closes-Bug: #1374044 --- neutron/db/models_v2.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/neutron/db/models_v2.py b/neutron/db/models_v2.py index d27c4750a3d..8def401e7dd 100644 --- a/neutron/db/models_v2.py +++ b/neutron/db/models_v2.py @@ -184,10 +184,12 @@ class Subnet(model_base.BASEV2, HasId, HasTenant): enable_dhcp = sa.Column(sa.Boolean()) dns_nameservers = orm.relationship(DNSNameServer, backref='subnet', - cascade='all, delete, delete-orphan') + cascade='all, delete, delete-orphan', + lazy='joined') routes = orm.relationship(SubnetRoute, backref='subnet', - cascade='all, delete, delete-orphan') + cascade='all, delete, delete-orphan', + lazy='joined') shared = sa.Column(sa.Boolean) ipv6_ra_mode = sa.Column(sa.Enum(constants.IPV6_SLAAC, constants.DHCPV6_STATEFUL, From 7ea605df3ac71dc568194bcd5eaf1c115008e1ee Mon Sep 17 00:00:00 2001 From: Numan Siddique Date: Sat, 11 Oct 2014 17:38:05 +0530 Subject: [PATCH 105/128] Fix KeyError in dhcp_rpc when plugin.port_update raise exception KeyError exception is seen because of following reasons * DhcpRpcCallback._port_action() is called by two functions - DhcpRpcCallback.create_dchp_port() - DhcpRpcCallback.update_dhcp_port() * When create_dhcp_port() function calls _port_action(), the function argument 'port' will have the body as {'port': {'network_id': foo_network_id, 'fixed_ips': [..] ...} * When update_dhcp_port() function calls _port_action(), the function argument 'port' will have the body as {'id': port_id, 'port': {{'port': {'network_id': foo_network_id, 'fixed_ips': [..] ...}} * If an exception occurs when _port_action() calls plugin.create_port(), network id is accessed as net_id = port['port']['network_id'] * If an exception occurs when _port_action() calls plugin.update_port(), network id is accessed as net_id = port['port']['network_id'] which is causing the KeyError. network_id should have been accessed as net_id = port['port']['port']['network_id'] This patch fixes the issue by making the _port_action() take the same port body. update_dhcp_port() insteading of passing the port_id and port information in a single argument, it now adds port_id in the port body itself. Change-Id: I70b92fa20b421b05ca2053a9a57f62db726f7625 Closes-bug: #1378508 --- neutron/api/rpc/handlers/dhcp_rpc.py | 8 +++--- neutron/tests/unit/test_dhcp_rpc.py | 37 +++++++++++++++++++++++++--- 2 files changed, 37 insertions(+), 8 deletions(-) diff --git a/neutron/api/rpc/handlers/dhcp_rpc.py b/neutron/api/rpc/handlers/dhcp_rpc.py index 56016be7086..58317eac4b6 100644 --- a/neutron/api/rpc/handlers/dhcp_rpc.py +++ b/neutron/api/rpc/handlers/dhcp_rpc.py @@ -60,7 +60,7 @@ class DhcpRpcCallback(n_rpc.RpcCallback): if action == 'create_port': return plugin.create_port(context, port) elif action == 'update_port': - return plugin.update_port(context, port['id'], port['port']) + return plugin.update_port(context, port['id'], port) else: msg = _('Unrecognized action') raise n_exc.Invalid(message=msg) @@ -282,13 +282,11 @@ class DhcpRpcCallback(n_rpc.RpcCallback): def update_dhcp_port(self, context, **kwargs): """Update the dhcp port.""" host = kwargs.get('host') - port_id = kwargs.get('port_id') port = kwargs.get('port') + port['id'] = kwargs.get('port_id') LOG.debug(_('Update dhcp port %(port)s ' 'from %(host)s.'), {'port': port, 'host': host}) plugin = manager.NeutronManager.get_plugin() - return self._port_action(plugin, context, - {'id': port_id, 'port': port}, - 'update_port') + return self._port_action(plugin, context, port, 'update_port') diff --git a/neutron/tests/unit/test_dhcp_rpc.py b/neutron/tests/unit/test_dhcp_rpc.py index 6a2ed16d7e0..2c4c5c9e6e7 100644 --- a/neutron/tests/unit/test_dhcp_rpc.py +++ b/neutron/tests/unit/test_dhcp_rpc.py @@ -161,13 +161,44 @@ class TestDhcpRpcCallback(base.BaseTestCase): self.plugin.assert_has_calls(expected) return retval - def test_update_dhcp_port(self): + def test_update_dhcp_port_verify_port_action_port_dict(self): + port = {'port': {'network_id': 'foo_network_id', + 'device_owner': constants.DEVICE_OWNER_DHCP, + 'fixed_ips': [{'subnet_id': 'foo_subnet_id'}]} + } + expected_port = {'port': {'network_id': 'foo_network_id', + 'device_owner': constants.DEVICE_OWNER_DHCP, + 'fixed_ips': [{'subnet_id': 'foo_subnet_id'}] + }, + 'id': 'foo_port_id' + } + + def _fake_port_action(plugin, context, port, action): + self.assertEqual(expected_port, port) + + self.callbacks._port_action = _fake_port_action self.callbacks.update_dhcp_port(mock.Mock(), host='foo_host', port_id='foo_port_id', - port=mock.Mock()) + port=port) + + def test_update_dhcp_port(self): + port = {'port': {'network_id': 'foo_network_id', + 'device_owner': constants.DEVICE_OWNER_DHCP, + 'fixed_ips': [{'subnet_id': 'foo_subnet_id'}]} + } + expected_port = {'port': {'network_id': 'foo_network_id', + 'device_owner': constants.DEVICE_OWNER_DHCP, + 'fixed_ips': [{'subnet_id': 'foo_subnet_id'}] + }, + 'id': 'foo_port_id' + } + self.callbacks.update_dhcp_port(mock.Mock(), + host='foo_host', + port_id='foo_port_id', + port=port) self.plugin.assert_has_calls( - mock.call.update_port(mock.ANY, 'foo_port_id', mock.ANY)) + mock.call.update_port(mock.ANY, 'foo_port_id', expected_port)) def test_get_dhcp_port_existing(self): port_retval = dict(id='port_id', fixed_ips=[dict(subnet_id='a')]) From ffcb30c4fbee334f9903d2719418bc6aa9d7721c Mon Sep 17 00:00:00 2001 From: Isaku Yamahata Date: Thu, 16 Oct 2014 15:31:03 +0900 Subject: [PATCH 106/128] l3_agent: avoid name conflict with context module name, context, conflicts with argument name in many place in l3_agent. In order to avoid such conflict, import context as n_context following Neutron practice. Change-Id: Ic3754818f84064d2c8da04914826fc912437b2f0 Closes-Bug: #1381900 --- neutron/agent/l3_agent.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/neutron/agent/l3_agent.py b/neutron/agent/l3_agent.py index e23b600fbbd..112bf77ad27 100644 --- a/neutron/agent/l3_agent.py +++ b/neutron/agent/l3_agent.py @@ -40,7 +40,7 @@ from neutron.common import ipv6_utils from neutron.common import rpc as n_rpc from neutron.common import topics from neutron.common import utils as common_utils -from neutron import context +from neutron import context as n_context from neutron import manager from neutron.openstack.common import excutils from neutron.openstack.common.gettextutils import _LE, _LW @@ -521,7 +521,7 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback, LOG.error(msg) raise SystemExit(1) - self.context = context.get_admin_context_without_session() + self.context = n_context.get_admin_context_without_session() self.plugin_rpc = L3PluginApi(topics.L3PLUGIN, host) self.fullsync = True self.sync_progress = False From fd37ce7d943ab1c2dbc1cf3b6f0187c227f658ad Mon Sep 17 00:00:00 2001 From: Han Zhou Date: Thu, 16 Oct 2014 10:43:12 +0000 Subject: [PATCH 107/128] nsx plugin: keep old priority when reconnecting bad connection Change-Id: Id05012ec04d23a5eec8441fc85f87611e08271fd Closes-Bug: #1381094 --- neutron/plugins/vmware/api_client/base.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/neutron/plugins/vmware/api_client/base.py b/neutron/plugins/vmware/api_client/base.py index e8998b5cdc9..31a3657e1c7 100644 --- a/neutron/plugins/vmware/api_client/base.py +++ b/neutron/plugins/vmware/api_client/base.py @@ -145,6 +145,7 @@ class ApiClientBase(object): elif hasattr(http_conn, "no_release"): return + priority = http_conn.priority if bad_state: # Reconnect to provider. LOG.warn(_("[%(rid)d] Connection returned in bad state, " @@ -152,8 +153,6 @@ class ApiClientBase(object): {'rid': rid, 'conn': api_client.ctrl_conn_to_str(http_conn)}) http_conn = self._create_connection(*self._conn_params(http_conn)) - priority = self._next_conn_priority - self._next_conn_priority += 1 elif service_unavail: # http_conn returned a service unaviable response, put other # connections to the same controller at end of priority queue, @@ -169,8 +168,6 @@ class ApiClientBase(object): # put http_conn at end of queue also priority = self._next_conn_priority self._next_conn_priority += 1 - else: - priority = http_conn.priority self._conn_pool.put((priority, http_conn)) LOG.debug(_("[%(rid)d] Released connection %(conn)s. %(qsize)d " From 6acadab5eb8b7b627e097a638d8486bef59a7f30 Mon Sep 17 00:00:00 2001 From: Kevin Benton Date: Thu, 16 Oct 2014 21:21:15 -0700 Subject: [PATCH 108/128] Only fetch port_id from SG binding table Change a query to only retrieve the port_id instead of every column from the row of security group binding info. Partial-Bug: #1373851 Change-Id: I0fba9c9623898ee52590207ebbb728503bb59a5b --- neutron/db/securitygroups_rpc_base.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/neutron/db/securitygroups_rpc_base.py b/neutron/db/securitygroups_rpc_base.py index 1dda6bb4698..2f6606ad566 100644 --- a/neutron/db/securitygroups_rpc_base.py +++ b/neutron/db/securitygroups_rpc_base.py @@ -153,8 +153,7 @@ class SecurityGroupServerRpcMixin(sg_db.SecurityGroupDbMixin): 'sg_member_ips': {}} rules_in_db = self._select_rules_for_ports(context, ports) remote_security_group_info = {} - for (binding, rule_in_db) in rules_in_db: - port_id = binding['port_id'] + for (port_id, rule_in_db) in rules_in_db: remote_gid = rule_in_db.get('remote_group_id') security_group_id = rule_in_db.get('security_group_id') ethertype = rule_in_db['ethertype'] @@ -219,7 +218,7 @@ class SecurityGroupServerRpcMixin(sg_db.SecurityGroupDbMixin): sgr_sgid = sg_db.SecurityGroupRule.security_group_id - query = context.session.query(sg_db.SecurityGroupPortBinding, + query = context.session.query(sg_binding_port, sg_db.SecurityGroupRule) query = query.join(sg_db.SecurityGroupRule, sgr_sgid == sg_binding_sgid) @@ -417,8 +416,7 @@ class SecurityGroupServerRpcMixin(sg_db.SecurityGroupDbMixin): def security_group_rules_for_ports(self, context, ports): rules_in_db = self._select_rules_for_ports(context, ports) - for (binding, rule_in_db) in rules_in_db: - port_id = binding['port_id'] + for (port_id, rule_in_db) in rules_in_db: port = ports[port_id] direction = rule_in_db['direction'] rule_dict = { From 60dd689183469d2958d6dcb60d93a8d94ef694d1 Mon Sep 17 00:00:00 2001 From: Kevin Benton Date: Thu, 16 Oct 2014 21:24:07 -0700 Subject: [PATCH 109/128] DB: Only ask for MAC instead of entire port Optimize a query in _get_lla_gateway_ip_for_subnet to only grab the column used instead of every column in the port table. Partial-Bug: #1373851 Change-Id: I5257e1e22645f3df9a77c0967b09a0ad0cf8b251 --- neutron/db/securitygroups_rpc_base.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/neutron/db/securitygroups_rpc_base.py b/neutron/db/securitygroups_rpc_base.py index 1dda6bb4698..e73b2f6142e 100644 --- a/neutron/db/securitygroups_rpc_base.py +++ b/neutron/db/securitygroups_rpc_base.py @@ -330,7 +330,7 @@ class SecurityGroupServerRpcMixin(sg_db.SecurityGroupDbMixin): return ips def _get_lla_gateway_ip_for_subnet(self, context, subnet): - query = context.session.query(models_v2.Port) + query = context.session.query(models_v2.Port.mac_address) query = query.join(models_v2.IPAllocation) query = query.filter( models_v2.IPAllocation.subnet_id == subnet['id']) @@ -339,12 +339,11 @@ class SecurityGroupServerRpcMixin(sg_db.SecurityGroupDbMixin): query = query.filter(models_v2.Port.device_owner == q_const.DEVICE_OWNER_ROUTER_INTF) try: - gateway_port = query.one() + mac_address = query.one()[0] except (exc.NoResultFound, exc.MultipleResultsFound): LOG.warn(_('No valid gateway port on subnet %s is ' 'found for IPv6 RA'), subnet['id']) return - mac_address = gateway_port['mac_address'] lla_ip = str(ipv6.get_ipv6_addr_by_EUI64( q_const.IPV6_LLA_PREFIX, mac_address)) From c97069dc9a73344ebdc7b686133269850a81b3b2 Mon Sep 17 00:00:00 2001 From: Abhishek Raut Date: Tue, 7 Oct 2014 17:06:10 -0700 Subject: [PATCH 110/128] Cisco N1kv: Fix update network profile for add tenants This patch makes sure that while updating network profile to add new tenants, it does not delete the older profile bindings and maintains them, while adds only the new tenant ids to the bindings. Change-Id: I862eb1c400e022334a2f6a4078425448bb144843 Closes-bug: #1379609 --- neutron/plugins/cisco/db/n1kv_db_v2.py | 22 +++++++++++----- .../tests/unit/cisco/n1kv/test_n1kv_plugin.py | 25 +++++++++++++++---- 2 files changed, 36 insertions(+), 11 deletions(-) diff --git a/neutron/plugins/cisco/db/n1kv_db_v2.py b/neutron/plugins/cisco/db/n1kv_db_v2.py index d694b236764..ed0b5fdbdd9 100644 --- a/neutron/plugins/cisco/db/n1kv_db_v2.py +++ b/neutron/plugins/cisco/db/n1kv_db_v2.py @@ -957,14 +957,22 @@ def _get_profile_bindings(db_session, profile_type=None): If profile type is None, return profile-tenant binding for all profile types. """ - LOG.debug(_("_get_profile_bindings()")) if profile_type: - profile_bindings = (db_session.query(n1kv_models_v2.ProfileBinding). - filter_by(profile_type=profile_type)) - return profile_bindings + return (db_session.query(n1kv_models_v2.ProfileBinding). + filter_by(profile_type=profile_type)) return db_session.query(n1kv_models_v2.ProfileBinding) +def _get_profile_bindings_by_uuid(db_session, profile_id): + """ + Retrieve a list of profile bindings. + + Get all profile-tenant bindings based on profile UUID. + """ + return (db_session.query(n1kv_models_v2.ProfileBinding). + filter_by(profile_id=profile_id)) + + class NetworkProfile_db_mixin(object): """Network Profile Mixin.""" @@ -1099,8 +1107,10 @@ class NetworkProfile_db_mixin(object): original_net_p = get_network_profile(context.session, id) # Update network profile to tenant id binding. if context.is_admin and c_const.ADD_TENANTS in p: - if context.tenant_id not in p[c_const.ADD_TENANTS]: - p[c_const.ADD_TENANTS].append(context.tenant_id) + profile_bindings = _get_profile_bindings_by_uuid(context.session, + profile_id=id) + for bindings in profile_bindings: + p[c_const.ADD_TENANTS].append(bindings.tenant_id) update_profile_binding(context.session, id, p[c_const.ADD_TENANTS], c_const.NETWORK) is_updated = True diff --git a/neutron/tests/unit/cisco/n1kv/test_n1kv_plugin.py b/neutron/tests/unit/cisco/n1kv/test_n1kv_plugin.py index e412dfc7e68..f926a492005 100644 --- a/neutron/tests/unit/cisco/n1kv/test_n1kv_plugin.py +++ b/neutron/tests/unit/cisco/n1kv/test_n1kv_plugin.py @@ -612,7 +612,7 @@ class TestN1kvNetworkProfiles(N1kvPluginTestCase): net_p['network_profile']['id']) update_req.environ['neutron.context'] = context.Context('', self.tenant_id, - is_admin = True) + is_admin=True) update_res = update_req.get_response(self.ext_api) self.assertEqual(200, update_res.status_int) db_session = db.get_session() @@ -623,7 +623,7 @@ class TestN1kvNetworkProfiles(N1kvPluginTestCase): net_p['network_profile']['id']) self.assertRaises(c_exc.ProfileTenantBindingNotFound, n1kv_db_v2.get_profile_binding, - db_session, 'tenant2', + db_session, 'tenant4', net_p['network_profile']['id']) tenant3 = n1kv_db_v2.get_profile_binding(db_session, 'tenant3', net_p['network_profile']['id']) @@ -637,24 +637,39 @@ class TestN1kvNetworkProfiles(N1kvPluginTestCase): net_p['network_profile']['id']) update_req.environ['neutron.context'] = context.Context('', self.tenant_id, - is_admin = True) + is_admin=True) update_res = update_req.get_response(self.ext_api) self.assertEqual(200, update_res.status_int) # current tenant_id should always present tenant_id = n1kv_db_v2.get_profile_binding(db_session, self.tenant_id, net_p['network_profile']['id']) + self.assertIsNotNone(tenant_id) self.assertRaises(c_exc.ProfileTenantBindingNotFound, n1kv_db_v2.get_profile_binding, db_session, 'tenant1', net_p['network_profile']['id']) self.assertRaises(c_exc.ProfileTenantBindingNotFound, n1kv_db_v2.get_profile_binding, - db_session, 'tenant2', + db_session, 'tenant4', net_p['network_profile']['id']) tenant3 = n1kv_db_v2.get_profile_binding(db_session, 'tenant3', net_p['network_profile']['id']) - self.assertIsNotNone(tenant_id) self.assertIsNotNone(tenant3) + # Add new tenant4 to network profile and make sure existing tenants + # are not deleted. + data = {'network_profile': {c_const.ADD_TENANTS: + ['tenant4']}} + update_req = self.new_update_request('network_profiles', + data, + net_p['network_profile']['id']) + update_req.environ['neutron.context'] = context.Context('', + self.tenant_id, + is_admin=True) + update_res = update_req.get_response(self.ext_api) + self.assertEqual(200, update_res.status_int) + tenant4 = n1kv_db_v2.get_profile_binding(db_session, 'tenant4', + net_p['network_profile']['id']) + self.assertIsNotNone(tenant4) class TestN1kvBasicGet(test_plugin.TestBasicGet, From c1bc6ffad8b93490df36a049bf7be0d6da0ce2b0 Mon Sep 17 00:00:00 2001 From: Ihar Hrachyshka Date: Tue, 14 Oct 2014 14:22:09 +0200 Subject: [PATCH 111/128] Updated fileutils and its dependencies This is to avoid fileutils dependency on excutils that are now moved to oslo.utils. The following changes are included: * neutron/openstack/common/__init__.py 6b048e7 Let oslotest manage the six.move setting for mox * neutron/openstack/common/_i18n.py 9ce1d96 Fix i18n import 5d40e14 Remove code that moved to oslo.i18n * neutron/openstack/common/fileutils.py 6ff6b4b Switch oslo-incubator to use oslo.utils and remove old modules 2b966f9 Fix deletion of cached file for policy enforcer 9c88dc3 file_open: fixed docstring to refer to open() instead of file() 6c7407b fileutils: port to Python 3 fcf517d Update oslo log messages with translation domains * neutron/openstack/common/log.py 6c706c5 Delete graduated serialization files 5d40e14 Remove code that moved to oslo.i18n 6ff6b4b Switch oslo-incubator to use oslo.utils and remove old modules aa74411 log: add missing space in error message 037dee0 Set stevedore log level to WARN by default 37c0091 Add unicode coercion of logged messages to ContextFormatter 6614413 Correct coercion of logged message to unicode 1188d88 Except socket.error if syslog isn't running ac995be Fix E126 pep8 errors 631f880 Set keystonemiddleware and routes.middleware to log on WARN level 726d00a Adjust oslo logging to provide adapter is enabled for 433fa0b Make logging_context_format_string optional in log.set_defaults ac92c06 Add default log level for websocket 5fd77eb Ability to customize default_log_levels for each project 4d9328c Python 3: enable tests/unit/test_log.py cb5a804 Move `mask_password` to strutils Note: cb5a804 is partially included; that's ok because we don't use the moved function in Neutron. Change-Id: I3bfcaff2620b368d807e9468bb7abc01d6471661 --- neutron/openstack/common/__init__.py | 17 --- neutron/openstack/common/_i18n.py | 40 +++++++ neutron/openstack/common/fileutils.py | 26 +++-- neutron/openstack/common/log.py | 162 +++++++++++--------------- requirements.txt | 3 + 5 files changed, 131 insertions(+), 117 deletions(-) create mode 100644 neutron/openstack/common/_i18n.py diff --git a/neutron/openstack/common/__init__.py b/neutron/openstack/common/__init__.py index d1223eaf765..e69de29bb2d 100644 --- a/neutron/openstack/common/__init__.py +++ b/neutron/openstack/common/__init__.py @@ -1,17 +0,0 @@ -# -# 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. - -import six - - -six.add_move(six.MovedModule('mox', 'mox', 'mox3.mox')) diff --git a/neutron/openstack/common/_i18n.py b/neutron/openstack/common/_i18n.py new file mode 100644 index 00000000000..50a92b19d11 --- /dev/null +++ b/neutron/openstack/common/_i18n.py @@ -0,0 +1,40 @@ +# 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. + +"""oslo.i18n integration module. + +See http://docs.openstack.org/developer/oslo.i18n/usage.html + +""" + +import oslo.i18n + + +# NOTE(dhellmann): This reference to o-s-l-o will be replaced by the +# application name when this module is synced into the separate +# repository. It is OK to have more than one translation function +# using the same domain, since there will still only be one message +# catalog. +_translators = oslo.i18n.TranslatorFactory(domain='neutron') + +# The primary translation function using the well-known name "_" +_ = _translators.primary + +# Translators for log levels. +# +# The abbreviated names are meant to reflect the usual use of a short +# name like '_'. The "L" is for "log" and the other letter comes from +# the level. +_LI = _translators.log_info +_LW = _translators.log_warning +_LE = _translators.log_error +_LC = _translators.log_critical diff --git a/neutron/openstack/common/fileutils.py b/neutron/openstack/common/fileutils.py index 704af09623e..f91fc32388f 100644 --- a/neutron/openstack/common/fileutils.py +++ b/neutron/openstack/common/fileutils.py @@ -13,14 +13,13 @@ # License for the specific language governing permissions and limitations # under the License. - import contextlib import errno import os import tempfile -from neutron.openstack.common import excutils -from neutron.openstack.common.gettextutils import _ +from oslo.utils import excutils + from neutron.openstack.common import log as logging LOG = logging.getLogger(__name__) @@ -52,15 +51,15 @@ def read_cached_file(filename, force_reload=False): """ global _FILE_CACHE - if force_reload and filename in _FILE_CACHE: - del _FILE_CACHE[filename] + if force_reload: + delete_cached_file(filename) reloaded = False mtime = os.path.getmtime(filename) cache_info = _FILE_CACHE.setdefault(filename, {}) if not cache_info or mtime > cache_info.get('mtime', 0): - LOG.debug(_("Reloading cached file %s") % filename) + LOG.debug("Reloading cached file %s" % filename) with open(filename) as fap: cache_info['data'] = fap.read() cache_info['mtime'] = mtime @@ -68,6 +67,17 @@ def read_cached_file(filename, force_reload=False): return (reloaded, cache_info['data']) +def delete_cached_file(filename): + """Delete cached file if present. + + :param filename: filename to delete + """ + global _FILE_CACHE + + if filename in _FILE_CACHE: + del _FILE_CACHE[filename] + + def delete_if_exists(path, remove=os.unlink): """Delete a file, but ignore file not found error. @@ -101,13 +111,13 @@ def remove_path_on_error(path, remove=delete_if_exists): def file_open(*args, **kwargs): """Open file - see built-in file() documentation for more details + see built-in open() documentation for more details Note: The reason this is kept in a separate module is to easily be able to provide a stub module that doesn't alter system state at all (for unit tests) """ - return file(*args, **kwargs) + return open(*args, **kwargs) def write_to_tempfile(content, path=None, suffix='', prefix='tmp'): diff --git a/neutron/openstack/common/log.py b/neutron/openstack/common/log.py index d767b898f2d..6d8ca69c357 100644 --- a/neutron/openstack/common/log.py +++ b/neutron/openstack/common/log.py @@ -33,42 +33,24 @@ import logging import logging.config import logging.handlers import os -import re +import socket import sys import traceback from oslo.config import cfg +from oslo.serialization import jsonutils +from oslo.utils import importutils import six from six import moves -from neutron.openstack.common.gettextutils import _ -from neutron.openstack.common import importutils -from neutron.openstack.common import jsonutils +_PY26 = sys.version_info[0:2] == (2, 6) + +from neutron.openstack.common._i18n import _ from neutron.openstack.common import local _DEFAULT_LOG_DATE_FORMAT = "%Y-%m-%d %H:%M:%S" -_SANITIZE_KEYS = ['adminPass', 'admin_pass', 'password', 'admin_password'] - -# NOTE(ldbragst): Let's build a list of regex objects using the list of -# _SANITIZE_KEYS we already have. This way, we only have to add the new key -# to the list of _SANITIZE_KEYS and we can generate regular expressions -# for XML and JSON automatically. -_SANITIZE_PATTERNS = [] -_FORMAT_PATTERNS = [r'(%(key)s\s*[=]\s*[\"\']).*?([\"\'])', - r'(<%(key)s>).*?()', - r'([\"\']%(key)s[\"\']\s*:\s*[\"\']).*?([\"\'])', - r'([\'"].*?%(key)s[\'"]\s*:\s*u?[\'"]).*?([\'"])', - r'([\'"].*?%(key)s[\'"]\s*,\s*\'--?[A-z]+\'\s*,\s*u?[\'"])' - '.*?([\'"])', - r'(%(key)s\s*--?[A-z]+\s*).*?([\s])'] - -for key in _SANITIZE_KEYS: - for pattern in _FORMAT_PATTERNS: - reg_ex = re.compile(pattern % {'key': key}, re.DOTALL) - _SANITIZE_PATTERNS.append(reg_ex) - common_cli_opts = [ cfg.BoolOpt('debug', @@ -138,6 +120,14 @@ generic_log_opts = [ help='Log output to standard error.') ] +DEFAULT_LOG_LEVELS = ['amqp=WARN', 'amqplib=WARN', 'boto=WARN', + 'qpid=WARN', 'sqlalchemy=WARN', 'suds=INFO', + 'oslo.messaging=INFO', 'iso8601=WARN', + 'requests.packages.urllib3.connectionpool=WARN', + 'urllib3.connectionpool=WARN', 'websocket=WARN', + "keystonemiddleware=WARN", "routes.middleware=WARN", + "stevedore=WARN"] + log_opts = [ cfg.StrOpt('logging_context_format_string', default='%(asctime)s.%(msecs)03d %(process)d %(levelname)s ' @@ -156,17 +146,7 @@ log_opts = [ '%(instance)s', help='Prefix each line of exception output with this format.'), cfg.ListOpt('default_log_levels', - default=[ - 'amqp=WARN', - 'amqplib=WARN', - 'boto=WARN', - 'qpid=WARN', - 'sqlalchemy=WARN', - 'suds=INFO', - 'oslo.messaging=INFO', - 'iso8601=WARN', - 'requests.packages.urllib3.connectionpool=WARN' - ], + default=DEFAULT_LOG_LEVELS, help='List of logger=LEVEL pairs.'), cfg.BoolOpt('publish_errors', default=False, @@ -181,11 +161,11 @@ log_opts = [ cfg.StrOpt('instance_format', default='[instance: %(uuid)s] ', help='The format for an instance that is passed with the log ' - 'message. '), + 'message.'), cfg.StrOpt('instance_uuid_format', default='[instance: %(uuid)s] ', help='The format for an instance UUID that is passed with the ' - 'log message. '), + 'log message.'), ] CONF = cfg.CONF @@ -244,45 +224,20 @@ def _get_log_file_path(binary=None): return None -def mask_password(message, secret="***"): - """Replace password with 'secret' in message. - - :param message: The string which includes security information. - :param secret: value with which to replace passwords. - :returns: The unicode value of message with the password fields masked. - - For example: - - >>> mask_password("'adminPass' : 'aaaaa'") - "'adminPass' : '***'" - >>> mask_password("'admin_pass' : 'aaaaa'") - "'admin_pass' : '***'" - >>> mask_password('"password" : "aaaaa"') - '"password" : "***"' - >>> mask_password("'original_password' : 'aaaaa'") - "'original_password' : '***'" - >>> mask_password("u'original_password' : u'aaaaa'") - "u'original_password' : u'***'" - """ - message = six.text_type(message) - - # NOTE(ldbragst): Check to see if anything in message contains any key - # specified in _SANITIZE_KEYS, if not then just return the message since - # we don't have to mask any passwords. - if not any(key in message for key in _SANITIZE_KEYS): - return message - - secret = r'\g<1>' + secret + r'\g<2>' - for pattern in _SANITIZE_PATTERNS: - message = re.sub(pattern, secret, message) - return message - - class BaseLoggerAdapter(logging.LoggerAdapter): def audit(self, msg, *args, **kwargs): self.log(logging.AUDIT, msg, *args, **kwargs) + def isEnabledFor(self, level): + if _PY26: + # This method was added in python 2.7 (and it does the exact + # same logic, so we need to do the exact same logic so that + # python 2.6 has this capability as well). + return self.logger.isEnabledFor(level) + else: + return super(BaseLoggerAdapter, self).isEnabledFor(level) + class LazyAdapter(BaseLoggerAdapter): def __init__(self, name='unknown', version='unknown'): @@ -295,6 +250,11 @@ class LazyAdapter(BaseLoggerAdapter): def logger(self): if not self._logger: self._logger = getLogger(self.name, self.version) + if six.PY3: + # In Python 3, the code fails because the 'manager' attribute + # cannot be found when using a LoggerAdapter as the + # underlying logger. Work around this issue. + self._logger.manager = self._logger.logger.manager return self._logger @@ -340,11 +300,10 @@ class ContextAdapter(BaseLoggerAdapter): self.warn(stdmsg, *args, **kwargs) def process(self, msg, kwargs): - # NOTE(mrodden): catch any Message/other object and - # coerce to unicode before they can get - # to the python logging and possibly - # cause string encoding trouble - if not isinstance(msg, six.string_types): + # NOTE(jecarey): If msg is not unicode, coerce it into unicode + # before it can get to the python logging and + # possibly cause string encoding trouble + if not isinstance(msg, six.text_type): msg = six.text_type(msg) if 'extra' not in kwargs: @@ -448,7 +407,7 @@ def _load_log_config(log_config_append): try: logging.config.fileConfig(log_config_append, disable_existing_loggers=False) - except moves.configparser.Error as exc: + except (moves.configparser.Error, KeyError) as exc: raise LogConfigError(log_config_append, six.text_type(exc)) @@ -461,9 +420,20 @@ def setup(product_name, version='unknown'): sys.excepthook = _create_logging_excepthook(product_name) -def set_defaults(logging_context_format_string): - cfg.set_defaults( - log_opts, logging_context_format_string=logging_context_format_string) +def set_defaults(logging_context_format_string=None, + default_log_levels=None): + # Just in case the caller is not setting the + # default_log_level. This is insurance because + # we introduced the default_log_level parameter + # later in a backwards in-compatible change + if default_log_levels is not None: + cfg.set_defaults( + log_opts, + default_log_levels=default_log_levels) + if logging_context_format_string is not None: + cfg.set_defaults( + log_opts, + logging_context_format_string=logging_context_format_string) def _find_facility_from_conf(): @@ -512,18 +482,6 @@ def _setup_logging_from_conf(project, version): for handler in log_root.handlers: log_root.removeHandler(handler) - if CONF.use_syslog: - facility = _find_facility_from_conf() - # TODO(bogdando) use the format provided by RFCSysLogHandler - # after existing syslog format deprecation in J - if CONF.use_syslog_rfc_format: - syslog = RFCSysLogHandler(address='/dev/log', - facility=facility) - else: - syslog = logging.handlers.SysLogHandler(address='/dev/log', - facility=facility) - log_root.addHandler(syslog) - logpath = _get_log_file_path() if logpath: filelog = logging.handlers.WatchedFileHandler(logpath) @@ -582,6 +540,20 @@ def _setup_logging_from_conf(project, version): else: logger.setLevel(level_name) + if CONF.use_syslog: + try: + facility = _find_facility_from_conf() + # TODO(bogdando) use the format provided by RFCSysLogHandler + # after existing syslog format deprecation in J + if CONF.use_syslog_rfc_format: + syslog = RFCSysLogHandler(facility=facility) + else: + syslog = logging.handlers.SysLogHandler(facility=facility) + log_root.addHandler(syslog) + except socket.error: + log_root.error('Unable to add syslog handler. Verify that syslog ' + 'is running.') + _loggers = {} @@ -651,6 +623,12 @@ class ContextFormatter(logging.Formatter): def format(self, record): """Uses contextstring if request_id is set, otherwise default.""" + # NOTE(jecarey): If msg is not unicode, coerce it into unicode + # before it can get to the python logging and + # possibly cause string encoding trouble + if not isinstance(record.msg, six.text_type): + record.msg = six.text_type(record.msg) + # store project info record.project = self.project record.version = self.version diff --git a/requirements.txt b/requirements.txt index 8bfe3bd871e..cc819e981fa 100644 --- a/requirements.txt +++ b/requirements.txt @@ -27,7 +27,10 @@ six>=1.7.0 stevedore>=1.0.0 # Apache-2.0 oslo.config>=1.4.0 # Apache-2.0 oslo.db>=1.0.0 # Apache-2.0 +oslo.i18n>=1.0.0 # Apache-2.0 oslo.messaging>=1.4.0 oslo.rootwrap>=1.3.0 +oslo.serialization>=1.0.0 # Apache-2.0 +oslo.utils>=1.0.0 # Apache-2.0 python-novaclient>=2.18.0 From 623a30baadf24bdf672711096b1b87b60c70b038 Mon Sep 17 00:00:00 2001 From: Ihar Hrachyshka Date: Tue, 14 Oct 2014 14:36:06 +0200 Subject: [PATCH 112/128] Updated service.py and its dependencies This is to avoid service module dependency on importutils that are now moved to oslo.utils. The following changes are included: * neutron/openstack/common/eventlet_backdoor.py 5d40e14 Remove code that moved to oslo.i18n 90ae24b Remove redundant default=None for config options fcf517d Update oslo log messages with translation domains * neutron/openstack/common/loopingcall.py 5d40e14 Remove code that moved to oslo.i18n e377393 Changes calcuation of variable delay ab5d5f1 Use timestamp in loopingcall bc48099 Log the function name of looping call fb4e863 Remove deprecated LoopingCall fcf517d Update oslo log messages with translation domains * neutron/openstack/common/service.py 5d40e14 Remove code that moved to oslo.i18n 6ede600 rpc, notifier: remove deprecated modules * neutron/openstack/common/systemd.py 17c4e21 Fix docstring indentation in systemd * neutron/openstack/common/threadgroup.py 5a1a016 Make stop_timers() method public fdc8883 Add graceful stop function to ThreadGroup.stop 2d06d6c Simple typo correction 4d18b57 threadgroup: use threading rather than greenthread Change-Id: I4887545f861a93223e2c7cbcdd39efe991bff547 --- neutron/openstack/common/eventlet_backdoor.py | 9 ++-- neutron/openstack/common/loopingcall.py | 46 ++++++++++--------- neutron/openstack/common/service.py | 10 +--- neutron/openstack/common/systemd.py | 4 +- neutron/openstack/common/threadgroup.py | 28 +++++++++-- 5 files changed, 56 insertions(+), 41 deletions(-) diff --git a/neutron/openstack/common/eventlet_backdoor.py b/neutron/openstack/common/eventlet_backdoor.py index b55b0ceb3b6..850fdd4697c 100644 --- a/neutron/openstack/common/eventlet_backdoor.py +++ b/neutron/openstack/common/eventlet_backdoor.py @@ -29,7 +29,7 @@ import eventlet.backdoor import greenlet from oslo.config import cfg -from neutron.openstack.common.gettextutils import _ +from neutron.openstack.common._i18n import _LI from neutron.openstack.common import log as logging help_for_backdoor_port = ( @@ -41,7 +41,6 @@ help_for_backdoor_port = ( "chosen port is displayed in the service's log file.") eventlet_backdoor_opts = [ cfg.StrOpt('backdoor_port', - default=None, help="Enable eventlet backdoor. %s" % help_for_backdoor_port) ] @@ -137,8 +136,10 @@ def initialize_if_enabled(): # In the case of backdoor port being zero, a port number is assigned by # listen(). In any case, pull the port number out here. port = sock.getsockname()[1] - LOG.info(_('Eventlet backdoor listening on %(port)s for process %(pid)d') % - {'port': port, 'pid': os.getpid()}) + LOG.info( + _LI('Eventlet backdoor listening on %(port)s for process %(pid)d') % + {'port': port, 'pid': os.getpid()} + ) eventlet.spawn_n(eventlet.backdoor.backdoor_server, sock, locals=backdoor_locals) return port diff --git a/neutron/openstack/common/loopingcall.py b/neutron/openstack/common/loopingcall.py index e588c8309b8..1d3bf7fcaa8 100644 --- a/neutron/openstack/common/loopingcall.py +++ b/neutron/openstack/common/loopingcall.py @@ -16,31 +16,36 @@ # under the License. import sys +import time from eventlet import event from eventlet import greenthread -from neutron.openstack.common.gettextutils import _ +from neutron.openstack.common._i18n import _LE, _LW from neutron.openstack.common import log as logging -from neutron.openstack.common import timeutils LOG = logging.getLogger(__name__) +# NOTE(zyluo): This lambda function was declared to avoid mocking collisions +# with time.time() called in the standard logging module +# during unittests. +_ts = lambda: time.time() + class LoopingCallDone(Exception): - """Exception to break out and stop a LoopingCall. + """Exception to break out and stop a LoopingCallBase. - The poll-function passed to LoopingCall can raise this exception to + The poll-function passed to LoopingCallBase can raise this exception to break out of the loop normally. This is somewhat analogous to StopIteration. An optional return-value can be included as the argument to the exception; - this return-value will be returned by LoopingCall.wait() + this return-value will be returned by LoopingCallBase.wait() """ def __init__(self, retvalue=True): - """:param retvalue: Value that LoopingCall.wait() should return.""" + """:param retvalue: Value that LoopingCallBase.wait() should return.""" self.retvalue = retvalue @@ -72,21 +77,22 @@ class FixedIntervalLoopingCall(LoopingCallBase): try: while self._running: - start = timeutils.utcnow() + start = _ts() self.f(*self.args, **self.kw) - end = timeutils.utcnow() + end = _ts() if not self._running: break - delay = interval - timeutils.delta_seconds(start, end) - if delay <= 0: - LOG.warn(_('task run outlasted interval by %s sec') % - -delay) - greenthread.sleep(delay if delay > 0 else 0) + delay = end - start - interval + if delay > 0: + LOG.warn(_LW('task %(func_name)s run outlasted ' + 'interval by %(delay).2f sec'), + {'func_name': repr(self.f), 'delay': delay}) + greenthread.sleep(-delay if delay < 0 else 0) except LoopingCallDone as e: self.stop() done.send(e.retvalue) except Exception: - LOG.exception(_('in fixed duration looping call')) + LOG.exception(_LE('in fixed duration looping call')) done.send_exception(*sys.exc_info()) return else: @@ -98,11 +104,6 @@ class FixedIntervalLoopingCall(LoopingCallBase): return self.done -# TODO(mikal): this class name is deprecated in Havana and should be removed -# in the I release -LoopingCall = FixedIntervalLoopingCall - - class DynamicLoopingCall(LoopingCallBase): """A looping call which sleeps until the next known event. @@ -126,14 +127,15 @@ class DynamicLoopingCall(LoopingCallBase): if periodic_interval_max is not None: idle = min(idle, periodic_interval_max) - LOG.debug(_('Dynamic looping call sleeping for %.02f ' - 'seconds'), idle) + LOG.debug('Dynamic looping call %(func_name)s sleeping ' + 'for %(idle).02f seconds', + {'func_name': repr(self.f), 'idle': idle}) greenthread.sleep(idle) except LoopingCallDone as e: self.stop() done.send(e.retvalue) except Exception: - LOG.exception(_('in dynamic looping call')) + LOG.exception(_LE('in dynamic looping call')) done.send_exception(*sys.exc_info()) return else: diff --git a/neutron/openstack/common/service.py b/neutron/openstack/common/service.py index 79ae9bc5d0d..b71a7843ba4 100644 --- a/neutron/openstack/common/service.py +++ b/neutron/openstack/common/service.py @@ -38,14 +38,12 @@ from eventlet import event from oslo.config import cfg from neutron.openstack.common import eventlet_backdoor -from neutron.openstack.common.gettextutils import _LE, _LI, _LW -from neutron.openstack.common import importutils +from neutron.openstack.common._i18n import _LE, _LI, _LW from neutron.openstack.common import log as logging from neutron.openstack.common import systemd from neutron.openstack.common import threadgroup -rpc = importutils.try_import('neutron.openstack.common.rpc') CONF = cfg.CONF LOG = logging.getLogger(__name__) @@ -180,12 +178,6 @@ class ServiceLauncher(Launcher): status = exc.code finally: self.stop() - if rpc: - try: - rpc.cleanup() - except Exception: - # We're shutting down, so it doesn't matter at this point. - LOG.exception(_LE('Exception during rpc cleanup.')) return status, signo diff --git a/neutron/openstack/common/systemd.py b/neutron/openstack/common/systemd.py index cc02caba3e7..b9a0df97e25 100644 --- a/neutron/openstack/common/systemd.py +++ b/neutron/openstack/common/systemd.py @@ -50,14 +50,16 @@ def _sd_notify(unset_env, msg): def notify(): """Send notification to Systemd that service is ready. + For details see - http://www.freedesktop.org/software/systemd/man/sd_notify.html + http://www.freedesktop.org/software/systemd/man/sd_notify.html """ _sd_notify(False, 'READY=1') def notify_once(): """Send notification once to Systemd that service is ready. + Systemd sets NOTIFY_SOCKET environment variable with the name of the socket listening for notifications from services. This method removes the NOTIFY_SOCKET environment variable to ensure diff --git a/neutron/openstack/common/threadgroup.py b/neutron/openstack/common/threadgroup.py index 5cfd59c94d4..ecf0d4bbed8 100644 --- a/neutron/openstack/common/threadgroup.py +++ b/neutron/openstack/common/threadgroup.py @@ -11,10 +11,10 @@ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. +import threading import eventlet from eventlet import greenpool -from eventlet import greenthread from neutron.openstack.common import log as logging from neutron.openstack.common import loopingcall @@ -51,7 +51,7 @@ class Thread(object): class ThreadGroup(object): - """The point of the ThreadGroup classis to: + """The point of the ThreadGroup class is to: * keep track of timers and greenthreads (making it easier to stop them when need be). @@ -85,8 +85,8 @@ class ThreadGroup(object): def thread_done(self, thread): self.threads.remove(thread) - def stop(self): - current = greenthread.getcurrent() + def _stop_threads(self): + current = threading.current_thread() # Iterate over a copy of self.threads so thread_done doesn't # modify the list while we're iterating @@ -99,6 +99,7 @@ class ThreadGroup(object): except Exception as ex: LOG.exception(ex) + def stop_timers(self): for x in self.timers: try: x.stop() @@ -106,6 +107,23 @@ class ThreadGroup(object): LOG.exception(ex) self.timers = [] + def stop(self, graceful=False): + """stop function has the option of graceful=True/False. + + * In case of graceful=True, wait for all threads to be finished. + Never kill threads. + * In case of graceful=False, kill threads immediately. + """ + self.stop_timers() + if graceful: + # In case of graceful=True, wait for all threads to be + # finished, never kill threads + self.wait() + else: + # In case of graceful=False(Default), kill threads + # immediately + self._stop_threads() + def wait(self): for x in self.timers: try: @@ -114,7 +132,7 @@ class ThreadGroup(object): pass except Exception as ex: LOG.exception(ex) - current = greenthread.getcurrent() + current = threading.current_thread() # Iterate over a copy of self.threads so thread_done doesn't # modify the list while we're iterating From d739790ba8dcdf3180e8d6d09423937aaf802a7c Mon Sep 17 00:00:00 2001 From: Ihar Hrachyshka Date: Tue, 14 Oct 2014 15:05:20 +0200 Subject: [PATCH 113/128] Updated cache module and its dependencies This is to avoid cache module dependency on timeutils that are now moved to oslo.utils. The following changes are included: * neutron/openstack/common/cache/_backends/memory.py 6ff6b4b Switch oslo-incubator to use oslo.utils and remove old modules 2bedce3 Fix MemoryBackend not purging item from _keys_expired on delete * neutron/openstack/common/cache/backends.py 39625e1 Set pbr 'warnerrors' option for doc build * neutron/openstack/common/cache/cache.py 9c683be fix small typo * neutron/openstack/common/lockutils.py 5d40e14 Remove code that moved to oslo.i18n 7209975 Always log the releasing, even under failure bbb266c Clarify logging in lockutils 942e1aa Use file locks by default again ac995be Fix E126 pep8 errors 15b8352 Remove oslo.log from lockutils Change-Id: I02cb4b2bc4b7bcba948e67cffdb8bd0219c89a29 --- .../common/cache/_backends/memory.py | 5 +- neutron/openstack/common/cache/backends.py | 83 ++++----- neutron/openstack/common/cache/cache.py | 4 +- neutron/openstack/common/lockutils.py | 169 ++++++++++-------- 4 files changed, 136 insertions(+), 125 deletions(-) diff --git a/neutron/openstack/common/cache/_backends/memory.py b/neutron/openstack/common/cache/_backends/memory.py index d6f5249fec2..5c02cfc4025 100644 --- a/neutron/openstack/common/cache/_backends/memory.py +++ b/neutron/openstack/common/cache/_backends/memory.py @@ -14,9 +14,10 @@ import collections +from oslo.utils import timeutils + from neutron.openstack.common.cache import backends from neutron.openstack.common import lockutils -from neutron.openstack.common import timeutils class MemoryBackend(backends.BaseCache): @@ -147,7 +148,7 @@ class MemoryBackend(backends.BaseCache): try: # NOTE(flaper87): Keys with ttl == 0 # don't exist in the _keys_expires dict - self._keys_expires[value[0]].remove(value[1]) + self._keys_expires[value[0]].remove(key) except (KeyError, ValueError): pass diff --git a/neutron/openstack/common/cache/backends.py b/neutron/openstack/common/cache/backends.py index 2fa4aaeb274..1bea8912a00 100644 --- a/neutron/openstack/common/cache/backends.py +++ b/neutron/openstack/common/cache/backends.py @@ -26,9 +26,9 @@ class BaseCache(object): :params parsed_url: Parsed url object. :params options: A dictionary with configuration parameters - for the cache. For example: - - default_ttl: An integer defining the default ttl - for keys. + for the cache. For example: + + - default_ttl: An integer defining the default ttl for keys. """ def __init__(self, parsed_url, options=None): @@ -43,20 +43,17 @@ class BaseCache(object): def set(self, key, value, ttl, not_exists=False): """Sets or updates a cache entry - NOTE: Thread-safety is required and has to be - guaranteed by the backend implementation. + .. note:: Thread-safety is required and has to be guaranteed by the + backend implementation. :params key: Item key as string. :type key: `unicode string` - :params value: Value to assign to the key. This - can be anything that is handled - by the current backend. - :params ttl: Key's timeout in seconds. 0 means - no timeout. + :params value: Value to assign to the key. This can be anything that + is handled by the current backend. + :params ttl: Key's timeout in seconds. 0 means no timeout. :type ttl: int - :params not_exists: If True, the key will be set - if it doesn't exist. Otherwise, - it'll always be set. + :params not_exists: If True, the key will be set if it doesn't exist. + Otherwise, it'll always be set. :type not_exists: bool :returns: True if the operation succeeds, False otherwise. @@ -74,9 +71,8 @@ class BaseCache(object): :params key: Item key as string. :type key: `unicode string` - :params value: Value to assign to the key. This - can be anything that is handled - by the current backend. + :params value: Value to assign to the key. This can be anything that + is handled by the current backend. """ try: return self[key] @@ -91,15 +87,14 @@ class BaseCache(object): def get(self, key, default=None): """Gets one item from the cache - NOTE: Thread-safety is required and it has to be - guaranteed by the backend implementation. + .. note:: Thread-safety is required and it has to be guaranteed + by the backend implementation. - :params key: Key for the item to retrieve - from the cache. + :params key: Key for the item to retrieve from the cache. :params default: The default value to return. - :returns: `key`'s value in the cache if it exists, - otherwise `default` should be returned. + :returns: `key`'s value in the cache if it exists, otherwise + `default` should be returned. """ return self._get(key, default) @@ -115,8 +110,8 @@ class BaseCache(object): def __delitem__(self, key): """Removes an item from cache. - NOTE: Thread-safety is required and it has to be - guaranteed by the backend implementation. + .. note:: Thread-safety is required and it has to be guaranteed by + the backend implementation. :params key: The key to remove. @@ -130,8 +125,8 @@ class BaseCache(object): def clear(self): """Removes all items from the cache. - NOTE: Thread-safety is required and it has to be - guaranteed by the backend implementation. + .. note:: Thread-safety is required and it has to be guaranteed by + the backend implementation. """ return self._clear() @@ -143,9 +138,8 @@ class BaseCache(object): """Increments the value for a key :params key: The key for the value to be incremented - :params delta: Number of units by which to increment - the value. Pass a negative number to - decrement the value. + :params delta: Number of units by which to increment the value. + Pass a negative number to decrement the value. :returns: The new value """ @@ -158,10 +152,8 @@ class BaseCache(object): def append_tail(self, key, tail): """Appends `tail` to `key`'s value. - :params key: The key of the value to which - `tail` should be appended. - :params tail: The list of values to append to the - original. + :params key: The key of the value to which `tail` should be appended. + :params tail: The list of values to append to the original. :returns: The new value """ @@ -181,10 +173,8 @@ class BaseCache(object): def append(self, key, value): """Appends `value` to `key`'s value. - :params key: The key of the value to which - `tail` should be appended. - :params value: The value to append to the - original. + :params key: The key of the value to which `tail` should be appended. + :params value: The value to append to the original. :returns: The new value """ @@ -196,8 +186,7 @@ class BaseCache(object): :params key: The key to verify. - :returns: True if the key exists, - otherwise False. + :returns: True if the key exists, otherwise False. """ @abc.abstractmethod @@ -209,9 +198,8 @@ class BaseCache(object): """Gets keys' value from cache :params keys: List of keys to retrieve. - :params default: The default value to return - for each key that is not in - the cache. + :params default: The default value to return for each key that is not + in the cache. :returns: A generator of (key, value) """ @@ -227,13 +215,12 @@ class BaseCache(object): def set_many(self, data, ttl=None): """Puts several items into the cache at once - Depending on the backend, this operation may or may - not be efficient. The default implementation calls - set for each (key, value) pair passed, other backends - support set_many operations as part of their protocols. + Depending on the backend, this operation may or may not be efficient. + The default implementation calls set for each (key, value) pair + passed, other backends support set_many operations as part of their + protocols. - :params data: A dictionary like {key: val} to store - in the cache. + :params data: A dictionary like {key: val} to store in the cache. :params ttl: Key's timeout in seconds. """ diff --git a/neutron/openstack/common/cache/cache.py b/neutron/openstack/common/cache/cache.py index 1247787a28e..70c4545defc 100644 --- a/neutron/openstack/common/cache/cache.py +++ b/neutron/openstack/common/cache/cache.py @@ -24,7 +24,7 @@ from six.moves.urllib import parse from stevedore import driver -def _get_olso_configs(): +def _get_oslo_configs(): """Returns the oslo.config options to register.""" # NOTE(flaper87): Oslo config should be # optional. Instead of doing try / except @@ -45,7 +45,7 @@ def register_oslo_configs(conf): :params conf: Config object. :type conf: `cfg.ConfigOptions` """ - conf.register_opts(_get_olso_configs()) + conf.register_opts(_get_oslo_configs()) def get_cache(url='memory://'): diff --git a/neutron/openstack/common/lockutils.py b/neutron/openstack/common/lockutils.py index f0c5cb13c3f..996a810bb6f 100644 --- a/neutron/openstack/common/lockutils.py +++ b/neutron/openstack/common/lockutils.py @@ -13,10 +13,10 @@ # License for the specific language governing permissions and limitations # under the License. - import contextlib import errno import functools +import logging import os import shutil import subprocess @@ -29,9 +29,7 @@ import weakref from oslo.config import cfg from neutron.openstack.common import fileutils -from neutron.openstack.common.gettextutils import _ -from neutron.openstack.common import local -from neutron.openstack.common import log as logging +from neutron.openstack.common._i18n import _, _LE, _LI LOG = logging.getLogger(__name__) @@ -39,10 +37,10 @@ LOG = logging.getLogger(__name__) util_opts = [ cfg.BoolOpt('disable_process_locking', default=False, - help='Whether to disable inter-process locks'), + help='Enables or disables inter-process locks.'), cfg.StrOpt('lock_path', default=os.environ.get("NEUTRON_LOCK_PATH"), - help=('Directory to use for lock files.')) + help='Directory to use for lock files.') ] @@ -54,7 +52,7 @@ def set_defaults(lock_path): cfg.set_defaults(util_opts, lock_path=lock_path) -class _InterProcessLock(object): +class _FileLock(object): """Lock implementation which allows multiple locks, working around issues like bugs.debian.org/cgi-bin/bugreport.cgi?bug=632857 and does not require any cleanup. Since the lock is always held on a file @@ -76,7 +74,13 @@ class _InterProcessLock(object): self.lockfile = None self.fname = name - def __enter__(self): + def acquire(self): + basedir = os.path.dirname(self.fname) + + if not os.path.exists(basedir): + fileutils.ensure_tree(basedir) + LOG.info(_LI('Created lock path: %s'), basedir) + self.lockfile = open(self.fname, 'w') while True: @@ -86,23 +90,39 @@ class _InterProcessLock(object): # Also upon reading the MSDN docs for locking(), it seems # to have a laughable 10 attempts "blocking" mechanism. self.trylock() - return self + LOG.debug('Got file lock "%s"', self.fname) + return True except IOError as e: if e.errno in (errno.EACCES, errno.EAGAIN): # external locks synchronise things like iptables # updates - give it some time to prevent busy spinning time.sleep(0.01) else: - raise + raise threading.ThreadError(_("Unable to acquire lock on" + " `%(filename)s` due to" + " %(exception)s") % + {'filename': self.fname, + 'exception': e}) - def __exit__(self, exc_type, exc_val, exc_tb): + def __enter__(self): + self.acquire() + return self + + def release(self): try: self.unlock() self.lockfile.close() + LOG.debug('Released file lock "%s"', self.fname) except IOError: - LOG.exception(_("Could not release the acquired lock `%s`"), + LOG.exception(_LE("Could not release the acquired lock `%s`"), self.fname) + def __exit__(self, exc_type, exc_val, exc_tb): + self.release() + + def exists(self): + return os.path.exists(self.fname) + def trylock(self): raise NotImplementedError() @@ -110,7 +130,7 @@ class _InterProcessLock(object): raise NotImplementedError() -class _WindowsLock(_InterProcessLock): +class _WindowsLock(_FileLock): def trylock(self): msvcrt.locking(self.lockfile.fileno(), msvcrt.LK_NBLCK, 1) @@ -118,7 +138,7 @@ class _WindowsLock(_InterProcessLock): msvcrt.locking(self.lockfile.fileno(), msvcrt.LK_UNLCK, 1) -class _PosixLock(_InterProcessLock): +class _FcntlLock(_FileLock): def trylock(self): fcntl.lockf(self.lockfile, fcntl.LOCK_EX | fcntl.LOCK_NB) @@ -131,12 +151,63 @@ if os.name == 'nt': InterProcessLock = _WindowsLock else: import fcntl - InterProcessLock = _PosixLock + InterProcessLock = _FcntlLock _semaphores = weakref.WeakValueDictionary() _semaphores_lock = threading.Lock() +def _get_lock_path(name, lock_file_prefix, lock_path=None): + # NOTE(mikal): the lock name cannot contain directory + # separators + name = name.replace(os.sep, '_') + if lock_file_prefix: + sep = '' if lock_file_prefix.endswith('-') else '-' + name = '%s%s%s' % (lock_file_prefix, sep, name) + + local_lock_path = lock_path or CONF.lock_path + + if not local_lock_path: + raise cfg.RequiredOptError('lock_path') + + return os.path.join(local_lock_path, name) + + +def external_lock(name, lock_file_prefix=None, lock_path=None): + LOG.debug('Attempting to grab external lock "%(lock)s"', + {'lock': name}) + + lock_file_path = _get_lock_path(name, lock_file_prefix, lock_path) + + return InterProcessLock(lock_file_path) + + +def remove_external_lock_file(name, lock_file_prefix=None): + """Remove an external lock file when it's not used anymore + This will be helpful when we have a lot of lock files + """ + with internal_lock(name): + lock_file_path = _get_lock_path(name, lock_file_prefix) + try: + os.remove(lock_file_path) + except OSError: + LOG.info(_LI('Failed to remove file %(file)s'), + {'file': lock_file_path}) + + +def internal_lock(name): + with _semaphores_lock: + try: + sem = _semaphores[name] + LOG.debug('Using existing semaphore "%s"', name) + except KeyError: + sem = threading.Semaphore() + _semaphores[name] = sem + LOG.debug('Created new semaphore "%s"', name) + + return sem + + @contextlib.contextmanager def lock(name, lock_file_prefix=None, external=False, lock_path=None): """Context based lock @@ -152,67 +223,19 @@ def lock(name, lock_file_prefix=None, external=False, lock_path=None): should work across multiple processes. This means that if two different workers both run a method decorated with @synchronized('mylock', external=True), only one of them will execute at a time. - - :param lock_path: The lock_path keyword argument is used to specify a - special location for external lock files to live. If nothing is set, then - CONF.lock_path is used as a default. """ - with _semaphores_lock: - try: - sem = _semaphores[name] - except KeyError: - sem = threading.Semaphore() - _semaphores[name] = sem - - with sem: - LOG.debug(_('Got semaphore "%(lock)s"'), {'lock': name}) - - # NOTE(mikal): I know this looks odd - if not hasattr(local.strong_store, 'locks_held'): - local.strong_store.locks_held = [] - local.strong_store.locks_held.append(name) - + int_lock = internal_lock(name) + with int_lock: + LOG.debug('Acquired semaphore "%(lock)s"', {'lock': name}) try: if external and not CONF.disable_process_locking: - LOG.debug(_('Attempting to grab file lock "%(lock)s"'), - {'lock': name}) - - # We need a copy of lock_path because it is non-local - local_lock_path = lock_path or CONF.lock_path - if not local_lock_path: - raise cfg.RequiredOptError('lock_path') - - if not os.path.exists(local_lock_path): - fileutils.ensure_tree(local_lock_path) - LOG.info(_('Created lock path: %s'), local_lock_path) - - def add_prefix(name, prefix): - if not prefix: - return name - sep = '' if prefix.endswith('-') else '-' - return '%s%s%s' % (prefix, sep, name) - - # NOTE(mikal): the lock name cannot contain directory - # separators - lock_file_name = add_prefix(name.replace(os.sep, '_'), - lock_file_prefix) - - lock_file_path = os.path.join(local_lock_path, lock_file_name) - - try: - lock = InterProcessLock(lock_file_path) - with lock as lock: - LOG.debug(_('Got file lock "%(lock)s" at %(path)s'), - {'lock': name, 'path': lock_file_path}) - yield lock - finally: - LOG.debug(_('Released file lock "%(lock)s" at %(path)s'), - {'lock': name, 'path': lock_file_path}) + ext_lock = external_lock(name, lock_file_prefix, lock_path) + with ext_lock: + yield ext_lock else: - yield sem - + yield int_lock finally: - local.strong_store.locks_held.remove(name) + LOG.debug('Releasing semaphore "%(lock)s"', {'lock': name}) def synchronized(name, lock_file_prefix=None, external=False, lock_path=None): @@ -244,11 +267,11 @@ def synchronized(name, lock_file_prefix=None, external=False, lock_path=None): def inner(*args, **kwargs): try: with lock(name, lock_file_prefix, external, lock_path): - LOG.debug(_('Got semaphore / lock "%(function)s"'), + LOG.debug('Got semaphore / lock "%(function)s"', {'function': f.__name__}) return f(*args, **kwargs) finally: - LOG.debug(_('Semaphore / lock released "%(function)s"'), + LOG.debug('Semaphore / lock released "%(function)s"', {'function': f.__name__}) return inner return wrap From 8d430a7f2e903dda06d8d75d6abcd63423c4c0a1 Mon Sep 17 00:00:00 2001 From: Kevin Benton Date: Thu, 16 Oct 2014 21:27:47 -0700 Subject: [PATCH 114/128] Optimize query in _select_dhcp_ips_for_network_ids Only query the DB for relevant columns instead of all of the port columns. Partial-Bug: #1373851 Change-Id: I32cd4a0bc6799ce77cea13188676308e3e641d19 --- neutron/db/securitygroups_rpc_base.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/neutron/db/securitygroups_rpc_base.py b/neutron/db/securitygroups_rpc_base.py index 1dda6bb4698..a72b994917c 100644 --- a/neutron/db/securitygroups_rpc_base.py +++ b/neutron/db/securitygroups_rpc_base.py @@ -269,7 +269,8 @@ class SecurityGroupServerRpcMixin(sg_db.SecurityGroupDbMixin): def _select_dhcp_ips_for_network_ids(self, context, network_ids): if not network_ids: return {} - query = context.session.query(models_v2.Port, + query = context.session.query(models_v2.Port.mac_address, + models_v2.Port.network_id, models_v2.IPAllocation.ip_address) query = query.join(models_v2.IPAllocation) query = query.filter(models_v2.Port.network_id.in_(network_ids)) @@ -280,14 +281,13 @@ class SecurityGroupServerRpcMixin(sg_db.SecurityGroupDbMixin): for network_id in network_ids: ips[network_id] = [] - for port, ip in query: + for mac_address, network_id, ip in query: if (netaddr.IPAddress(ip).version == 6 and not netaddr.IPAddress(ip).is_link_local()): - mac_address = port['mac_address'] ip = str(ipv6.get_ipv6_addr_by_EUI64(q_const.IPV6_LLA_PREFIX, mac_address)) - if ip not in ips[port['network_id']]: - ips[port['network_id']].append(ip) + if ip not in ips[network_id]: + ips[network_id].append(ip) return ips From 04df85b6e5a098f8f55bb82f04d9769763beb487 Mon Sep 17 00:00:00 2001 From: Kevin Benton Date: Wed, 24 Sep 2014 05:23:32 -0700 Subject: [PATCH 115/128] Improve performance of security group DB query The _select_ips_for_remote_group method was joining the IP allocation, port, allowed address pair, and security group tables together in a single query. Additionally, it was loading all of the port columns and using none of them. This resulted in a very expensive query with no benefit. This patch eliminates the unnecessary use of the port table by joining the IP allocation table directly to the security groups and allowed address pairs tables. In local testing of the method, this sped it up by an order of magnitude. Closes-Bug: #1373851 Change-Id: I12899413004838d2d22b691f1e2f3b18f7ec2c27 --- neutron/db/securitygroups_rpc_base.py | 30 ++++++++++++++++----------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/neutron/db/securitygroups_rpc_base.py b/neutron/db/securitygroups_rpc_base.py index e73b2f6142e..1b848afc182 100644 --- a/neutron/db/securitygroups_rpc_base.py +++ b/neutron/db/securitygroups_rpc_base.py @@ -19,6 +19,7 @@ from sqlalchemy.orm import exc from neutron.common import constants as q_const from neutron.common import ipv6_utils as ipv6 from neutron.common import utils +from neutron.db import allowedaddresspairs_db as addr_pair from neutron.db import models_v2 from neutron.db import securitygroups_db as sg_db from neutron.extensions import securitygroup as ext_sg @@ -231,27 +232,32 @@ class SecurityGroupServerRpcMixin(sg_db.SecurityGroupDbMixin): if not remote_group_ids: return ips_by_group for remote_group_id in remote_group_ids: - ips_by_group[remote_group_id] = [] + ips_by_group[remote_group_id] = set() ip_port = models_v2.IPAllocation.port_id sg_binding_port = sg_db.SecurityGroupPortBinding.port_id sg_binding_sgid = sg_db.SecurityGroupPortBinding.security_group_id + # Join the security group binding table directly to the IP allocation + # table instead of via the Port table skip an unnecessary intermediary query = context.session.query(sg_binding_sgid, - models_v2.Port, - models_v2.IPAllocation.ip_address) + models_v2.IPAllocation.ip_address, + addr_pair.AllowedAddressPair.ip_address) query = query.join(models_v2.IPAllocation, ip_port == sg_binding_port) - query = query.join(models_v2.Port, - ip_port == models_v2.Port.id) + # Outerjoin because address pairs may be null and we still want the + # IP for the port. + query = query.outerjoin( + addr_pair.AllowedAddressPair, + sg_binding_port == addr_pair.AllowedAddressPair.port_id) query = query.filter(sg_binding_sgid.in_(remote_group_ids)) - for security_group_id, port, ip_address in query: - ips_by_group[security_group_id].append(ip_address) - # if there are allowed_address_pairs add them - if getattr(port, 'allowed_address_pairs', None): - for address_pair in port.allowed_address_pairs: - ips_by_group[security_group_id].append( - address_pair['ip_address']) + # Each allowed address pair IP record for a port beyond the 1st + # will have a duplicate regular IP in the query response since + # the relationship is 1-to-many. Dedup with a set + for security_group_id, ip_address, allowed_addr_ip in query: + ips_by_group[security_group_id].add(ip_address) + if allowed_addr_ip: + ips_by_group[security_group_id].add(allowed_addr_ip) return ips_by_group def _select_remote_group_ids(self, ports): From bc4d1054c3d5125103e16cf85ef02f97987994fd Mon Sep 17 00:00:00 2001 From: armando-migliaccio Date: Tue, 14 Oct 2014 23:25:58 -0700 Subject: [PATCH 116/128] Remove redundant initialization and check from DVR RPC mixin The initialization, as well as the recurrent checks on whether the agent is able to handle DVR requests, are not necessary; this is because the dvr_agent is going to be set at the time the L2 agent starts receiving RPC messages. Change-Id: I9caad965d0ff507e2ed93d6432997ad86139ac04 --- neutron/api/rpc/handlers/dvr_rpc.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/neutron/api/rpc/handlers/dvr_rpc.py b/neutron/api/rpc/handlers/dvr_rpc.py index f4d0233a56c..e9028cf6475 100644 --- a/neutron/api/rpc/handlers/dvr_rpc.py +++ b/neutron/api/rpc/handlers/dvr_rpc.py @@ -115,8 +115,6 @@ class DVRAgentRpcApiMixin(object): class DVRAgentRpcCallbackMixin(object): """Agent-side RPC (implementation) for plugin-to-agent interaction.""" - dvr_agent = None - def dvr_mac_address_update(self, context, **kwargs): """Callback for dvr_mac_addresses update. @@ -124,7 +122,4 @@ class DVRAgentRpcCallbackMixin(object): """ dvr_macs = kwargs.get('dvr_macs', []) LOG.debug("dvr_macs updated on remote: %s", dvr_macs) - if not self.dvr_agent: - LOG.warn(_("DVR agent binding currently not set.")) - return self.dvr_agent.dvr_mac_address_update(dvr_macs) From db5e370b0d68c3e71626c99941fe487059b3cf88 Mon Sep 17 00:00:00 2001 From: Romil Gupta Date: Mon, 30 Jun 2014 05:35:08 -0700 Subject: [PATCH 117/128] Schema enhancement to support MultiSegment Network Description: Currently, there is nothing in the schema that ensures segments for a network are returned in the same order they were specified when the network was created, or even in a deterministic order. Solution: We need to add another field named 'segment_index' in 'ml2_network_segment' table containing a numeric position index. With segment_index field we can retrieve the segments in the order in which user created. This patch set also fixes ML2 invalid unit test case in test_create_network_multiprovider(). Closes-Bug: #1224978 Closes-Bug: #1377346 Change-Id: I560c34c6fe1c5425469ccdf9b8b4905c123d496d --- .../1f71e54a85e7_ml2_net_seg_model.py | 40 +++++++++++++++++++ .../alembic_migrations/versions/HEAD | 2 +- neutron/plugins/ml2/db.py | 7 +++- neutron/plugins/ml2/managers.py | 5 ++- neutron/plugins/ml2/models.py | 1 + neutron/tests/unit/ml2/test_ml2_plugin.py | 16 +++++--- 6 files changed, 60 insertions(+), 11 deletions(-) create mode 100644 neutron/db/migration/alembic_migrations/versions/1f71e54a85e7_ml2_net_seg_model.py diff --git a/neutron/db/migration/alembic_migrations/versions/1f71e54a85e7_ml2_net_seg_model.py b/neutron/db/migration/alembic_migrations/versions/1f71e54a85e7_ml2_net_seg_model.py new file mode 100644 index 00000000000..f72fbf0efa7 --- /dev/null +++ b/neutron/db/migration/alembic_migrations/versions/1f71e54a85e7_ml2_net_seg_model.py @@ -0,0 +1,40 @@ +# Copyright 2014 OpenStack Foundation +# +# 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. +# + +"""ml2_network_segments models change for multi-segment network. + +Revision ID: 1f71e54a85e7 +Revises: 44621190bc02 +Create Date: 2014-10-15 18:30:51.395295 + +""" + +# revision identifiers, used by Alembic. +revision = '1f71e54a85e7' +down_revision = '44621190bc02' + + +from alembic import op +import sqlalchemy as sa + + +def upgrade(): + op.add_column('ml2_network_segments', + sa.Column('segment_index', sa.Integer(), nullable=False, + server_default='0')) + + +def downgrade(): + op.drop_column('ml2_network_segments', 'segment_index') diff --git a/neutron/db/migration/alembic_migrations/versions/HEAD b/neutron/db/migration/alembic_migrations/versions/HEAD index 8c20ac433be..daed716e185 100644 --- a/neutron/db/migration/alembic_migrations/versions/HEAD +++ b/neutron/db/migration/alembic_migrations/versions/HEAD @@ -1 +1 @@ -44621190bc02 +1f71e54a85e7 diff --git a/neutron/plugins/ml2/db.py b/neutron/plugins/ml2/db.py index d8caa9384af..37e91bc791c 100644 --- a/neutron/plugins/ml2/db.py +++ b/neutron/plugins/ml2/db.py @@ -39,7 +39,8 @@ def _make_segment_dict(record): api.SEGMENTATION_ID: record.segmentation_id} -def add_network_segment(session, network_id, segment, is_dynamic=False): +def add_network_segment(session, network_id, segment, segment_index=0, + is_dynamic=False): with session.begin(subtransactions=True): record = models.NetworkSegment( id=uuidutils.generate_uuid(), @@ -47,6 +48,7 @@ def add_network_segment(session, network_id, segment, is_dynamic=False): network_type=segment.get(api.NETWORK_TYPE), physical_network=segment.get(api.PHYSICAL_NETWORK), segmentation_id=segment.get(api.SEGMENTATION_ID), + segment_index=segment_index, is_dynamic=is_dynamic ) session.add(record) @@ -61,7 +63,8 @@ def add_network_segment(session, network_id, segment, is_dynamic=False): def get_network_segments(session, network_id, filter_dynamic=False): with session.begin(subtransactions=True): query = (session.query(models.NetworkSegment). - filter_by(network_id=network_id)) + filter_by(network_id=network_id). + order_by(models.NetworkSegment.segment_index)) if filter_dynamic is not None: query = query.filter_by(is_dynamic=filter_dynamic) records = query.all() diff --git a/neutron/plugins/ml2/managers.py b/neutron/plugins/ml2/managers.py index 9c6c6fc514e..8700934fe64 100644 --- a/neutron/plugins/ml2/managers.py +++ b/neutron/plugins/ml2/managers.py @@ -152,10 +152,11 @@ class TypeManager(stevedore.named.NamedExtensionManager): with session.begin(subtransactions=True): network_id = network['id'] if segments: - for segment in segments: + for segment_index, segment in enumerate(segments): segment = self.reserve_provider_segment( session, segment) - db.add_network_segment(session, network_id, segment) + db.add_network_segment(session, network_id, + segment, segment_index) else: segment = self.allocate_tenant_segment(session) db.add_network_segment(session, network_id, segment) diff --git a/neutron/plugins/ml2/models.py b/neutron/plugins/ml2/models.py index 80ae1bbb6a3..350c34e4f77 100644 --- a/neutron/plugins/ml2/models.py +++ b/neutron/plugins/ml2/models.py @@ -41,6 +41,7 @@ class NetworkSegment(model_base.BASEV2, models_v2.HasId): segmentation_id = sa.Column(sa.Integer) is_dynamic = sa.Column(sa.Boolean, default=False, nullable=False, server_default=sa.sql.false()) + segment_index = sa.Column(sa.Integer, nullable=False, server_default='0') class PortBinding(model_base.BASEV2): diff --git a/neutron/tests/unit/ml2/test_ml2_plugin.py b/neutron/tests/unit/ml2/test_ml2_plugin.py index 9bd8ccd9f61..d1729194c73 100644 --- a/neutron/tests/unit/ml2/test_ml2_plugin.py +++ b/neutron/tests/unit/ml2/test_ml2_plugin.py @@ -583,20 +583,24 @@ class TestMultiSegmentNetworks(Ml2PluginV2TestCase): network_req = self.new_create_request('networks', data) network = self.deserialize(self.fmt, network_req.get_response(self.api)) - tz = network['network'][mpnet.SEGMENTS] - for tz in data['network'][mpnet.SEGMENTS]: + segments = network['network'][mpnet.SEGMENTS] + for segment_index, segment in enumerate(data['network'] + [mpnet.SEGMENTS]): for field in [pnet.NETWORK_TYPE, pnet.PHYSICAL_NETWORK, pnet.SEGMENTATION_ID]: - self.assertEqual(tz.get(field), tz.get(field)) + self.assertEqual(segment.get(field), + segments[segment_index][field]) # Tests get_network() net_req = self.new_show_request('networks', network['network']['id']) network = self.deserialize(self.fmt, net_req.get_response(self.api)) - tz = network['network'][mpnet.SEGMENTS] - for tz in data['network'][mpnet.SEGMENTS]: + segments = network['network'][mpnet.SEGMENTS] + for segment_index, segment in enumerate(data['network'] + [mpnet.SEGMENTS]): for field in [pnet.NETWORK_TYPE, pnet.PHYSICAL_NETWORK, pnet.SEGMENTATION_ID]: - self.assertEqual(tz.get(field), tz.get(field)) + self.assertEqual(segment.get(field), + segments[segment_index][field]) def test_create_network_with_provider_and_multiprovider_fail(self): data = {'network': {'name': 'net1', From fd11b4264da0cef395788b0e0ee12c86cb65ec41 Mon Sep 17 00:00:00 2001 From: Angus Lees Date: Mon, 20 Oct 2014 11:19:02 +1100 Subject: [PATCH 118/128] Remove superfluous except/re-raise This exception code catches all exceptions, and then always raises them again. More interestingly, it uses excutils.save_and_reraise_exception incorrectly (outside a `with` statement), which triggers the pylint test designed to catch exactly this. Change-Id: Iab9d69944cbae5257682ac65ff2b8fba3ef7017e --- .../l3_router/brocade/l3_router_plugin.py | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/neutron/services/l3_router/brocade/l3_router_plugin.py b/neutron/services/l3_router/brocade/l3_router_plugin.py index 56428c8c2f8..1826b83a6ae 100644 --- a/neutron/services/l3_router/brocade/l3_router_plugin.py +++ b/neutron/services/l3_router/brocade/l3_router_plugin.py @@ -101,15 +101,13 @@ class BrocadeSVIPlugin(router.L3RouterPlugin): """ delete a vrf on NOS device.""" router = super(BrocadeSVIPlugin, self).get_router(context, router_id) super(BrocadeSVIPlugin, self).delete_router(context, router_id) - try: - switch = self._switch - self._driver.delete_router(switch['address'], - switch['username'], - switch['password'], - switch['rbridge_id'], - str(router['id'])) - except Exception: - excutils.save_and_reraise_exception() + + switch = self._switch + self._driver.delete_router(switch['address'], + switch['username'], + switch['password'], + switch['rbridge_id'], + str(router['id'])) def add_router_interface(self, context, router_id, interface_info): """creates svi on NOS device and assigns ip addres to SVI.""" From 9334d1c98c3abdadc12222acb3f6f4527c940895 Mon Sep 17 00:00:00 2001 From: Weidong Shao Date: Thu, 21 Aug 2014 20:10:47 +0000 Subject: [PATCH 119/128] Empty files should not contain copyright or license Per instruction from http://docs.openstack.org/developer/hacking/#openstack-licensing Enable hacking check H104 in this CL. Change-Id: I435b9d91877499ebe1e33435f06794164a0ecc34 Partial-Bug: #1262424 --- neutron/agent/__init__.py | 14 -------------- neutron/agent/common/__init__.py | 14 -------------- neutron/agent/linux/__init__.py | 14 -------------- neutron/agent/metadata/__init__.py | 13 ------------- neutron/cmd/__init__.py | 14 -------------- neutron/db/firewall/__init__.py | 14 -------------- neutron/db/loadbalancer/__init__.py | 13 ------------- neutron/db/metering/__init__.py | 13 ------------- neutron/db/vpn/__init__.py | 14 -------------- neutron/debug/__init__.py | 14 -------------- neutron/plugins/bigswitch/__init__.py | 14 -------------- neutron/plugins/bigswitch/db/__init__.py | 14 -------------- neutron/plugins/bigswitch/extensions/__init__.py | 14 -------------- neutron/plugins/bigswitch/tests/__init__.py | 14 -------------- neutron/plugins/brocade/__init__.py | 14 -------------- neutron/plugins/brocade/db/__init__.py | 14 -------------- neutron/plugins/brocade/nos/__init__.py | 14 -------------- neutron/plugins/cisco/__init__.py | 13 ------------- neutron/plugins/cisco/common/__init__.py | 13 ------------- neutron/plugins/cisco/db/__init__.py | 13 ------------- neutron/plugins/cisco/extensions/__init__.py | 14 -------------- neutron/plugins/cisco/models/__init__.py | 13 ------------- neutron/plugins/cisco/n1kv/__init__.py | 13 ------------- neutron/plugins/common/__init__.py | 14 -------------- neutron/plugins/embrane/__init__.py | 14 -------------- neutron/plugins/embrane/agent/__init__.py | 14 -------------- .../plugins/embrane/agent/operations/__init__.py | 14 -------------- neutron/plugins/embrane/common/__init__.py | 14 -------------- neutron/plugins/embrane/l2base/__init__.py | 14 -------------- neutron/plugins/embrane/l2base/fake/__init__.py | 14 -------------- neutron/plugins/embrane/plugins/__init__.py | 14 -------------- neutron/plugins/hyperv/__init__.py | 14 -------------- neutron/plugins/hyperv/agent/__init__.py | 14 -------------- neutron/plugins/hyperv/common/__init__.py | 14 -------------- neutron/plugins/linuxbridge/common/__init__.py | 13 ------------- neutron/plugins/linuxbridge/db/__init__.py | 13 ------------- neutron/plugins/metaplugin/__init__.py | 14 -------------- neutron/plugins/metaplugin/common/__init__.py | 14 -------------- neutron/plugins/midonet/__init__.py | 15 --------------- neutron/plugins/midonet/agent/__init__.py | 14 -------------- neutron/plugins/midonet/common/__init__.py | 14 -------------- neutron/plugins/ml2/__init__.py | 14 -------------- neutron/plugins/ml2/common/__init__.py | 14 -------------- neutron/plugins/ml2/drivers/__init__.py | 14 -------------- neutron/plugins/ml2/drivers/arista/__init__.py | 14 -------------- neutron/plugins/ml2/drivers/l2pop/__init__.py | 14 -------------- neutron/plugins/mlnx/__init__.py | 14 -------------- neutron/plugins/mlnx/agent/__init__.py | 14 -------------- neutron/plugins/mlnx/common/__init__.py | 14 -------------- neutron/plugins/mlnx/db/__init__.py | 14 -------------- neutron/plugins/nec/__init__.py | 13 ------------- neutron/plugins/nec/agent/__init__.py | 13 ------------- neutron/plugins/nec/common/__init__.py | 13 ------------- neutron/plugins/nec/db/__init__.py | 13 ------------- neutron/plugins/nec/extensions/__init__.py | 13 ------------- neutron/plugins/openvswitch/common/__init__.py | 13 ------------- neutron/plugins/plumgrid/__init__.py | 13 ------------- neutron/plugins/plumgrid/common/__init__.py | 13 ------------- neutron/plugins/plumgrid/drivers/__init__.py | 13 ------------- .../plugins/plumgrid/plumgrid_plugin/__init__.py | 13 ------------- neutron/plugins/ryu/common/__init__.py | 13 ------------- neutron/plugins/vmware/dhcp_meta/__init__.py | 14 -------------- neutron/plugins/vmware/vshield/__init__.py | 14 -------------- neutron/scheduler/__init__.py | 14 -------------- neutron/services/__init__.py | 14 -------------- neutron/services/firewall/__init__.py | 14 -------------- neutron/services/firewall/agents/__init__.py | 14 -------------- .../firewall/agents/l3reference/__init__.py | 14 -------------- .../services/firewall/agents/varmour/__init__.py | 14 -------------- neutron/services/firewall/drivers/__init__.py | 14 -------------- .../services/firewall/drivers/linux/__init__.py | 14 -------------- .../services/firewall/drivers/varmour/__init__.py | 14 -------------- neutron/services/l3_router/__init__.py | 14 -------------- neutron/services/loadbalancer/__init__.py | 14 -------------- neutron/services/loadbalancer/drivers/__init__.py | 13 ------------- .../loadbalancer/drivers/haproxy/__init__.py | 13 ------------- .../loadbalancer/drivers/radware/__init__.py | 13 ------------- neutron/services/metering/__init__.py | 13 ------------- neutron/services/metering/agents/__init__.py | 13 ------------- neutron/services/metering/drivers/__init__.py | 13 ------------- .../metering/drivers/iptables/__init__.py | 13 ------------- .../services/metering/drivers/noop/__init__.py | 13 ------------- neutron/services/vpn/__init__.py | 14 -------------- neutron/services/vpn/common/__init__.py | 14 -------------- neutron/tests/__init__.py | 14 -------------- neutron/tests/functional/__init__.py | 13 ------------- neutron/tests/functional/agent/__init__.py | 13 ------------- neutron/tests/functional/agent/linux/__init__.py | 13 ------------- neutron/tests/unit/agent/__init__.py | 13 ------------- neutron/tests/unit/agent/linux/__init__.py | 13 ------------- neutron/tests/unit/bigswitch/__init__.py | 14 -------------- neutron/tests/unit/brocade/__init__.py | 15 --------------- neutron/tests/unit/cisco/__init__.py | 14 -------------- neutron/tests/unit/cisco/n1kv/__init__.py | 13 ------------- neutron/tests/unit/db/__init__.py | 13 ------------- neutron/tests/unit/db/firewall/__init__.py | 13 ------------- neutron/tests/unit/db/loadbalancer/__init__.py | 13 ------------- neutron/tests/unit/db/metering/__init__.py | 13 ------------- neutron/tests/unit/db/vpn/__init__.py | 14 -------------- neutron/tests/unit/embrane/__init__.py | 14 -------------- neutron/tests/unit/extensions/__init__.py | 13 ------------- neutron/tests/unit/hyperv/__init__.py | 14 -------------- neutron/tests/unit/linuxbridge/__init__.py | 14 -------------- neutron/tests/unit/metaplugin/__init__.py | 14 -------------- neutron/tests/unit/midonet/__init__.py | 15 --------------- neutron/tests/unit/ml2/__init__.py | 14 -------------- neutron/tests/unit/ml2/drivers/__init__.py | 14 -------------- neutron/tests/unit/mlnx/__init__.py | 14 -------------- neutron/tests/unit/nec/__init__.py | 13 ------------- neutron/tests/unit/openvswitch/__init__.py | 14 -------------- neutron/tests/unit/plumgrid/__init__.py | 13 ------------- neutron/tests/unit/ryu/__init__.py | 14 -------------- neutron/tests/unit/services/__init__.py | 13 ------------- neutron/tests/unit/services/firewall/__init__.py | 13 ------------- .../unit/services/firewall/agents/__init__.py | 13 ------------- .../firewall/agents/l3reference/__init__.py | 13 ------------- .../services/firewall/agents/varmour/__init__.py | 14 -------------- .../unit/services/firewall/drivers/__init__.py | 13 ------------- .../services/firewall/drivers/linux/__init__.py | 13 ------------- .../services/firewall/drivers/varmour/__init__.py | 14 -------------- .../tests/unit/services/loadbalancer/__init__.py | 13 ------------- .../services/loadbalancer/drivers/__init__.py | 13 ------------- .../loadbalancer/drivers/haproxy/__init__.py | 13 ------------- .../loadbalancer/drivers/radware/__init__.py | 13 ------------- neutron/tests/unit/services/metering/__init__.py | 13 ------------- .../unit/services/metering/drivers/__init__.py | 13 ------------- neutron/tests/unit/services/vpn/__init__.py | 14 -------------- .../unit/services/vpn/device_drivers/__init__.py | 14 -------------- .../unit/services/vpn/service_drivers/__init__.py | 14 -------------- tox.ini | 3 +-- 130 files changed, 1 insertion(+), 1757 deletions(-) diff --git a/neutron/agent/__init__.py b/neutron/agent/__init__.py index bf3075ddd8b..e69de29bb2d 100644 --- a/neutron/agent/__init__.py +++ b/neutron/agent/__init__.py @@ -1,14 +0,0 @@ -# Copyright 2012 OpenStack Foundation -# All Rights Reserved. -# -# 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. diff --git a/neutron/agent/common/__init__.py b/neutron/agent/common/__init__.py index bf3075ddd8b..e69de29bb2d 100644 --- a/neutron/agent/common/__init__.py +++ b/neutron/agent/common/__init__.py @@ -1,14 +0,0 @@ -# Copyright 2012 OpenStack Foundation -# All Rights Reserved. -# -# 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. diff --git a/neutron/agent/linux/__init__.py b/neutron/agent/linux/__init__.py index bf3075ddd8b..e69de29bb2d 100644 --- a/neutron/agent/linux/__init__.py +++ b/neutron/agent/linux/__init__.py @@ -1,14 +0,0 @@ -# Copyright 2012 OpenStack Foundation -# All Rights Reserved. -# -# 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. diff --git a/neutron/agent/metadata/__init__.py b/neutron/agent/metadata/__init__.py index 20c9a03a026..e69de29bb2d 100644 --- a/neutron/agent/metadata/__init__.py +++ b/neutron/agent/metadata/__init__.py @@ -1,13 +0,0 @@ -# Copyright 2012 New Dream Network, LLC (DreamHost) -# -# 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. diff --git a/neutron/cmd/__init__.py b/neutron/cmd/__init__.py index e82932559d4..e69de29bb2d 100644 --- a/neutron/cmd/__init__.py +++ b/neutron/cmd/__init__.py @@ -1,14 +0,0 @@ -# Copyright (c) 2013 OpenStack Foundation. -# All Rights Reserved. -# -# 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. diff --git a/neutron/db/firewall/__init__.py b/neutron/db/firewall/__init__.py index f3d0cdefd35..e69de29bb2d 100644 --- a/neutron/db/firewall/__init__.py +++ b/neutron/db/firewall/__init__.py @@ -1,14 +0,0 @@ -# Copyright 2013 OpenStack Foundation -# All Rights Reserved. -# -# 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. diff --git a/neutron/db/loadbalancer/__init__.py b/neutron/db/loadbalancer/__init__.py index fb181bf6220..e69de29bb2d 100644 --- a/neutron/db/loadbalancer/__init__.py +++ b/neutron/db/loadbalancer/__init__.py @@ -1,13 +0,0 @@ -# Copyright 2013 OpenStack Foundation -# -# 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. diff --git a/neutron/db/metering/__init__.py b/neutron/db/metering/__init__.py index bc20be2a0cb..e69de29bb2d 100644 --- a/neutron/db/metering/__init__.py +++ b/neutron/db/metering/__init__.py @@ -1,13 +0,0 @@ -# Copyright (C) 2013 eNovance SAS -# -# 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. diff --git a/neutron/db/vpn/__init__.py b/neutron/db/vpn/__init__.py index a15801e6a47..e69de29bb2d 100644 --- a/neutron/db/vpn/__init__.py +++ b/neutron/db/vpn/__init__.py @@ -1,14 +0,0 @@ -# (c) Copyright 2013 Hewlett-Packard Development Company, L.P. -# All Rights Reserved. -# -# 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. diff --git a/neutron/debug/__init__.py b/neutron/debug/__init__.py index 404a825357f..e69de29bb2d 100644 --- a/neutron/debug/__init__.py +++ b/neutron/debug/__init__.py @@ -1,14 +0,0 @@ -# Copyright 2012, Nachi Ueno, NTT MCL, Inc. -# All Rights Reserved. -# -# 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. diff --git a/neutron/plugins/bigswitch/__init__.py b/neutron/plugins/bigswitch/__init__.py index 131b31cc305..e69de29bb2d 100644 --- a/neutron/plugins/bigswitch/__init__.py +++ b/neutron/plugins/bigswitch/__init__.py @@ -1,14 +0,0 @@ -# Copyright 2012 Big Switch Networks, Inc. All Rights Reserved. -# -# 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. -# diff --git a/neutron/plugins/bigswitch/db/__init__.py b/neutron/plugins/bigswitch/db/__init__.py index 70cb8a35316..e69de29bb2d 100644 --- a/neutron/plugins/bigswitch/db/__init__.py +++ b/neutron/plugins/bigswitch/db/__init__.py @@ -1,14 +0,0 @@ -# Copyright 2013 Big Switch Networks, Inc. -# All Rights Reserved -# -# 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. diff --git a/neutron/plugins/bigswitch/extensions/__init__.py b/neutron/plugins/bigswitch/extensions/__init__.py index 70cb8a35316..e69de29bb2d 100644 --- a/neutron/plugins/bigswitch/extensions/__init__.py +++ b/neutron/plugins/bigswitch/extensions/__init__.py @@ -1,14 +0,0 @@ -# Copyright 2013 Big Switch Networks, Inc. -# All Rights Reserved -# -# 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. diff --git a/neutron/plugins/bigswitch/tests/__init__.py b/neutron/plugins/bigswitch/tests/__init__.py index 131b31cc305..e69de29bb2d 100644 --- a/neutron/plugins/bigswitch/tests/__init__.py +++ b/neutron/plugins/bigswitch/tests/__init__.py @@ -1,14 +0,0 @@ -# Copyright 2012 Big Switch Networks, Inc. All Rights Reserved. -# -# 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. -# diff --git a/neutron/plugins/brocade/__init__.py b/neutron/plugins/brocade/__init__.py index ac50764575b..e69de29bb2d 100644 --- a/neutron/plugins/brocade/__init__.py +++ b/neutron/plugins/brocade/__init__.py @@ -1,14 +0,0 @@ -# Copyright 2013 Brocade Communications System, Inc. -# All rights reserved. -# -# 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. diff --git a/neutron/plugins/brocade/db/__init__.py b/neutron/plugins/brocade/db/__init__.py index ac50764575b..e69de29bb2d 100644 --- a/neutron/plugins/brocade/db/__init__.py +++ b/neutron/plugins/brocade/db/__init__.py @@ -1,14 +0,0 @@ -# Copyright 2013 Brocade Communications System, Inc. -# All rights reserved. -# -# 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. diff --git a/neutron/plugins/brocade/nos/__init__.py b/neutron/plugins/brocade/nos/__init__.py index 7f85d6b4fca..e69de29bb2d 100644 --- a/neutron/plugins/brocade/nos/__init__.py +++ b/neutron/plugins/brocade/nos/__init__.py @@ -1,14 +0,0 @@ -# Copyright (c) 2013 Brocade Communications Systems, Inc. -# All Rights Reserved. -# -# 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. diff --git a/neutron/plugins/cisco/__init__.py b/neutron/plugins/cisco/__init__.py index 54aa18193d3..e69de29bb2d 100644 --- a/neutron/plugins/cisco/__init__.py +++ b/neutron/plugins/cisco/__init__.py @@ -1,13 +0,0 @@ -# Copyright 2011 Cisco Systems, Inc. All rights reserved. -# -# 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. diff --git a/neutron/plugins/cisco/common/__init__.py b/neutron/plugins/cisco/common/__init__.py index 54aa18193d3..e69de29bb2d 100644 --- a/neutron/plugins/cisco/common/__init__.py +++ b/neutron/plugins/cisco/common/__init__.py @@ -1,13 +0,0 @@ -# Copyright 2011 Cisco Systems, Inc. All rights reserved. -# -# 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. diff --git a/neutron/plugins/cisco/db/__init__.py b/neutron/plugins/cisco/db/__init__.py index 54aa18193d3..e69de29bb2d 100644 --- a/neutron/plugins/cisco/db/__init__.py +++ b/neutron/plugins/cisco/db/__init__.py @@ -1,13 +0,0 @@ -# Copyright 2011 Cisco Systems, Inc. All rights reserved. -# -# 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. diff --git a/neutron/plugins/cisco/extensions/__init__.py b/neutron/plugins/cisco/extensions/__init__.py index 0318309e576..e69de29bb2d 100644 --- a/neutron/plugins/cisco/extensions/__init__.py +++ b/neutron/plugins/cisco/extensions/__init__.py @@ -1,14 +0,0 @@ -# Copyright 2013 OpenStack Foundation. -# All Rights Reserved -# -# 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. diff --git a/neutron/plugins/cisco/models/__init__.py b/neutron/plugins/cisco/models/__init__.py index 54aa18193d3..e69de29bb2d 100644 --- a/neutron/plugins/cisco/models/__init__.py +++ b/neutron/plugins/cisco/models/__init__.py @@ -1,13 +0,0 @@ -# Copyright 2011 Cisco Systems, Inc. All rights reserved. -# -# 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. diff --git a/neutron/plugins/cisco/n1kv/__init__.py b/neutron/plugins/cisco/n1kv/__init__.py index 73c4997f21d..e69de29bb2d 100644 --- a/neutron/plugins/cisco/n1kv/__init__.py +++ b/neutron/plugins/cisco/n1kv/__init__.py @@ -1,13 +0,0 @@ -# Copyright 2013 Cisco Systems, 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. diff --git a/neutron/plugins/common/__init__.py b/neutron/plugins/common/__init__.py index b706747cf8c..e69de29bb2d 100644 --- a/neutron/plugins/common/__init__.py +++ b/neutron/plugins/common/__init__.py @@ -1,14 +0,0 @@ -# Copyright 2012 OpenStack Foundation. -# All Rights Reserved. -# -# 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. diff --git a/neutron/plugins/embrane/__init__.py b/neutron/plugins/embrane/__init__.py index 5627edf2c91..e69de29bb2d 100644 --- a/neutron/plugins/embrane/__init__.py +++ b/neutron/plugins/embrane/__init__.py @@ -1,14 +0,0 @@ -# Copyright 2013 Embrane, Inc. -# All Rights Reserved. -# -# 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. diff --git a/neutron/plugins/embrane/agent/__init__.py b/neutron/plugins/embrane/agent/__init__.py index 5627edf2c91..e69de29bb2d 100644 --- a/neutron/plugins/embrane/agent/__init__.py +++ b/neutron/plugins/embrane/agent/__init__.py @@ -1,14 +0,0 @@ -# Copyright 2013 Embrane, Inc. -# All Rights Reserved. -# -# 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. diff --git a/neutron/plugins/embrane/agent/operations/__init__.py b/neutron/plugins/embrane/agent/operations/__init__.py index 5627edf2c91..e69de29bb2d 100644 --- a/neutron/plugins/embrane/agent/operations/__init__.py +++ b/neutron/plugins/embrane/agent/operations/__init__.py @@ -1,14 +0,0 @@ -# Copyright 2013 Embrane, Inc. -# All Rights Reserved. -# -# 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. diff --git a/neutron/plugins/embrane/common/__init__.py b/neutron/plugins/embrane/common/__init__.py index 5627edf2c91..e69de29bb2d 100644 --- a/neutron/plugins/embrane/common/__init__.py +++ b/neutron/plugins/embrane/common/__init__.py @@ -1,14 +0,0 @@ -# Copyright 2013 Embrane, Inc. -# All Rights Reserved. -# -# 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. diff --git a/neutron/plugins/embrane/l2base/__init__.py b/neutron/plugins/embrane/l2base/__init__.py index 5627edf2c91..e69de29bb2d 100644 --- a/neutron/plugins/embrane/l2base/__init__.py +++ b/neutron/plugins/embrane/l2base/__init__.py @@ -1,14 +0,0 @@ -# Copyright 2013 Embrane, Inc. -# All Rights Reserved. -# -# 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. diff --git a/neutron/plugins/embrane/l2base/fake/__init__.py b/neutron/plugins/embrane/l2base/fake/__init__.py index 5627edf2c91..e69de29bb2d 100644 --- a/neutron/plugins/embrane/l2base/fake/__init__.py +++ b/neutron/plugins/embrane/l2base/fake/__init__.py @@ -1,14 +0,0 @@ -# Copyright 2013 Embrane, Inc. -# All Rights Reserved. -# -# 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. diff --git a/neutron/plugins/embrane/plugins/__init__.py b/neutron/plugins/embrane/plugins/__init__.py index 5627edf2c91..e69de29bb2d 100644 --- a/neutron/plugins/embrane/plugins/__init__.py +++ b/neutron/plugins/embrane/plugins/__init__.py @@ -1,14 +0,0 @@ -# Copyright 2013 Embrane, Inc. -# All Rights Reserved. -# -# 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. diff --git a/neutron/plugins/hyperv/__init__.py b/neutron/plugins/hyperv/__init__.py index 0089853d728..e69de29bb2d 100644 --- a/neutron/plugins/hyperv/__init__.py +++ b/neutron/plugins/hyperv/__init__.py @@ -1,14 +0,0 @@ -# Copyright 2013 Cloudbase Solutions SRL -# All Rights Reserved. -# -# 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. diff --git a/neutron/plugins/hyperv/agent/__init__.py b/neutron/plugins/hyperv/agent/__init__.py index 0089853d728..e69de29bb2d 100644 --- a/neutron/plugins/hyperv/agent/__init__.py +++ b/neutron/plugins/hyperv/agent/__init__.py @@ -1,14 +0,0 @@ -# Copyright 2013 Cloudbase Solutions SRL -# All Rights Reserved. -# -# 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. diff --git a/neutron/plugins/hyperv/common/__init__.py b/neutron/plugins/hyperv/common/__init__.py index 0089853d728..e69de29bb2d 100644 --- a/neutron/plugins/hyperv/common/__init__.py +++ b/neutron/plugins/hyperv/common/__init__.py @@ -1,14 +0,0 @@ -# Copyright 2013 Cloudbase Solutions SRL -# All Rights Reserved. -# -# 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. diff --git a/neutron/plugins/linuxbridge/common/__init__.py b/neutron/plugins/linuxbridge/common/__init__.py index 1f20c6bd46b..e69de29bb2d 100644 --- a/neutron/plugins/linuxbridge/common/__init__.py +++ b/neutron/plugins/linuxbridge/common/__init__.py @@ -1,13 +0,0 @@ -# Copyright 2012 Cisco Systems, Inc. All rights reserved. -# -# 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. diff --git a/neutron/plugins/linuxbridge/db/__init__.py b/neutron/plugins/linuxbridge/db/__init__.py index 1f20c6bd46b..e69de29bb2d 100644 --- a/neutron/plugins/linuxbridge/db/__init__.py +++ b/neutron/plugins/linuxbridge/db/__init__.py @@ -1,13 +0,0 @@ -# Copyright 2012 Cisco Systems, Inc. All rights reserved. -# -# 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. diff --git a/neutron/plugins/metaplugin/__init__.py b/neutron/plugins/metaplugin/__init__.py index 65685178bf2..e69de29bb2d 100644 --- a/neutron/plugins/metaplugin/__init__.py +++ b/neutron/plugins/metaplugin/__init__.py @@ -1,14 +0,0 @@ -# Copyright 2012, Nachi Ueno, NTT MCL, Inc. -# All Rights Reserved. -# -# 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. diff --git a/neutron/plugins/metaplugin/common/__init__.py b/neutron/plugins/metaplugin/common/__init__.py index 65685178bf2..e69de29bb2d 100644 --- a/neutron/plugins/metaplugin/common/__init__.py +++ b/neutron/plugins/metaplugin/common/__init__.py @@ -1,14 +0,0 @@ -# Copyright 2012, Nachi Ueno, NTT MCL, Inc. -# All Rights Reserved. -# -# 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. diff --git a/neutron/plugins/midonet/__init__.py b/neutron/plugins/midonet/__init__.py index e2cc2a75b7b..e69de29bb2d 100644 --- a/neutron/plugins/midonet/__init__.py +++ b/neutron/plugins/midonet/__init__.py @@ -1,15 +0,0 @@ -# Copyright (C) 2012 Midokura Japan K.K. -# Copyright (C) 2013 Midokura PTE LTD -# All Rights Reserved. -# -# 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. diff --git a/neutron/plugins/midonet/agent/__init__.py b/neutron/plugins/midonet/agent/__init__.py index cf581856dda..e69de29bb2d 100644 --- a/neutron/plugins/midonet/agent/__init__.py +++ b/neutron/plugins/midonet/agent/__init__.py @@ -1,14 +0,0 @@ -# Copyright (C) 2013 Midokura PTE LTD -# All Rights Reserved. -# -# 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. diff --git a/neutron/plugins/midonet/common/__init__.py b/neutron/plugins/midonet/common/__init__.py index cf581856dda..e69de29bb2d 100644 --- a/neutron/plugins/midonet/common/__init__.py +++ b/neutron/plugins/midonet/common/__init__.py @@ -1,14 +0,0 @@ -# Copyright (C) 2013 Midokura PTE LTD -# All Rights Reserved. -# -# 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. diff --git a/neutron/plugins/ml2/__init__.py b/neutron/plugins/ml2/__init__.py index 788cea1f70b..e69de29bb2d 100644 --- a/neutron/plugins/ml2/__init__.py +++ b/neutron/plugins/ml2/__init__.py @@ -1,14 +0,0 @@ -# Copyright (c) 2013 OpenStack Foundation -# All Rights Reserved. -# -# 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. diff --git a/neutron/plugins/ml2/common/__init__.py b/neutron/plugins/ml2/common/__init__.py index 788cea1f70b..e69de29bb2d 100644 --- a/neutron/plugins/ml2/common/__init__.py +++ b/neutron/plugins/ml2/common/__init__.py @@ -1,14 +0,0 @@ -# Copyright (c) 2013 OpenStack Foundation -# All Rights Reserved. -# -# 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. diff --git a/neutron/plugins/ml2/drivers/__init__.py b/neutron/plugins/ml2/drivers/__init__.py index 788cea1f70b..e69de29bb2d 100644 --- a/neutron/plugins/ml2/drivers/__init__.py +++ b/neutron/plugins/ml2/drivers/__init__.py @@ -1,14 +0,0 @@ -# Copyright (c) 2013 OpenStack Foundation -# All Rights Reserved. -# -# 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. diff --git a/neutron/plugins/ml2/drivers/arista/__init__.py b/neutron/plugins/ml2/drivers/arista/__init__.py index 788cea1f70b..e69de29bb2d 100644 --- a/neutron/plugins/ml2/drivers/arista/__init__.py +++ b/neutron/plugins/ml2/drivers/arista/__init__.py @@ -1,14 +0,0 @@ -# Copyright (c) 2013 OpenStack Foundation -# All Rights Reserved. -# -# 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. diff --git a/neutron/plugins/ml2/drivers/l2pop/__init__.py b/neutron/plugins/ml2/drivers/l2pop/__init__.py index e82932559d4..e69de29bb2d 100644 --- a/neutron/plugins/ml2/drivers/l2pop/__init__.py +++ b/neutron/plugins/ml2/drivers/l2pop/__init__.py @@ -1,14 +0,0 @@ -# Copyright (c) 2013 OpenStack Foundation. -# All Rights Reserved. -# -# 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. diff --git a/neutron/plugins/mlnx/__init__.py b/neutron/plugins/mlnx/__init__.py index 7182ac41479..e69de29bb2d 100644 --- a/neutron/plugins/mlnx/__init__.py +++ b/neutron/plugins/mlnx/__init__.py @@ -1,14 +0,0 @@ -# Copyright 2013 Mellanox Technologies, Ltd -# -# 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. diff --git a/neutron/plugins/mlnx/agent/__init__.py b/neutron/plugins/mlnx/agent/__init__.py index 7182ac41479..e69de29bb2d 100644 --- a/neutron/plugins/mlnx/agent/__init__.py +++ b/neutron/plugins/mlnx/agent/__init__.py @@ -1,14 +0,0 @@ -# Copyright 2013 Mellanox Technologies, Ltd -# -# 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. diff --git a/neutron/plugins/mlnx/common/__init__.py b/neutron/plugins/mlnx/common/__init__.py index 7182ac41479..e69de29bb2d 100644 --- a/neutron/plugins/mlnx/common/__init__.py +++ b/neutron/plugins/mlnx/common/__init__.py @@ -1,14 +0,0 @@ -# Copyright 2013 Mellanox Technologies, Ltd -# -# 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. diff --git a/neutron/plugins/mlnx/db/__init__.py b/neutron/plugins/mlnx/db/__init__.py index 7182ac41479..e69de29bb2d 100644 --- a/neutron/plugins/mlnx/db/__init__.py +++ b/neutron/plugins/mlnx/db/__init__.py @@ -1,14 +0,0 @@ -# Copyright 2013 Mellanox Technologies, Ltd -# -# 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. diff --git a/neutron/plugins/nec/__init__.py b/neutron/plugins/nec/__init__.py index cff1fb258c7..e69de29bb2d 100644 --- a/neutron/plugins/nec/__init__.py +++ b/neutron/plugins/nec/__init__.py @@ -1,13 +0,0 @@ -# Copyright 2012 NEC Corporation. All rights reserved. -# -# 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. diff --git a/neutron/plugins/nec/agent/__init__.py b/neutron/plugins/nec/agent/__init__.py index cff1fb258c7..e69de29bb2d 100644 --- a/neutron/plugins/nec/agent/__init__.py +++ b/neutron/plugins/nec/agent/__init__.py @@ -1,13 +0,0 @@ -# Copyright 2012 NEC Corporation. All rights reserved. -# -# 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. diff --git a/neutron/plugins/nec/common/__init__.py b/neutron/plugins/nec/common/__init__.py index cff1fb258c7..e69de29bb2d 100644 --- a/neutron/plugins/nec/common/__init__.py +++ b/neutron/plugins/nec/common/__init__.py @@ -1,13 +0,0 @@ -# Copyright 2012 NEC Corporation. All rights reserved. -# -# 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. diff --git a/neutron/plugins/nec/db/__init__.py b/neutron/plugins/nec/db/__init__.py index cff1fb258c7..e69de29bb2d 100644 --- a/neutron/plugins/nec/db/__init__.py +++ b/neutron/plugins/nec/db/__init__.py @@ -1,13 +0,0 @@ -# Copyright 2012 NEC Corporation. All rights reserved. -# -# 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. diff --git a/neutron/plugins/nec/extensions/__init__.py b/neutron/plugins/nec/extensions/__init__.py index cff1fb258c7..e69de29bb2d 100644 --- a/neutron/plugins/nec/extensions/__init__.py +++ b/neutron/plugins/nec/extensions/__init__.py @@ -1,13 +0,0 @@ -# Copyright 2012 NEC Corporation. All rights reserved. -# -# 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. diff --git a/neutron/plugins/openvswitch/common/__init__.py b/neutron/plugins/openvswitch/common/__init__.py index 8ac9340e9fd..e69de29bb2d 100644 --- a/neutron/plugins/openvswitch/common/__init__.py +++ b/neutron/plugins/openvswitch/common/__init__.py @@ -1,13 +0,0 @@ -# Copyright 2012 Red Hat, 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. diff --git a/neutron/plugins/plumgrid/__init__.py b/neutron/plugins/plumgrid/__init__.py index f34feeeec96..e69de29bb2d 100644 --- a/neutron/plugins/plumgrid/__init__.py +++ b/neutron/plugins/plumgrid/__init__.py @@ -1,13 +0,0 @@ -# Copyright 2013 PLUMgrid, Inc. All Rights Reserved. -# -# 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. diff --git a/neutron/plugins/plumgrid/common/__init__.py b/neutron/plugins/plumgrid/common/__init__.py index f34feeeec96..e69de29bb2d 100644 --- a/neutron/plugins/plumgrid/common/__init__.py +++ b/neutron/plugins/plumgrid/common/__init__.py @@ -1,13 +0,0 @@ -# Copyright 2013 PLUMgrid, Inc. All Rights Reserved. -# -# 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. diff --git a/neutron/plugins/plumgrid/drivers/__init__.py b/neutron/plugins/plumgrid/drivers/__init__.py index f34feeeec96..e69de29bb2d 100644 --- a/neutron/plugins/plumgrid/drivers/__init__.py +++ b/neutron/plugins/plumgrid/drivers/__init__.py @@ -1,13 +0,0 @@ -# Copyright 2013 PLUMgrid, Inc. All Rights Reserved. -# -# 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. diff --git a/neutron/plugins/plumgrid/plumgrid_plugin/__init__.py b/neutron/plugins/plumgrid/plumgrid_plugin/__init__.py index f34feeeec96..e69de29bb2d 100644 --- a/neutron/plugins/plumgrid/plumgrid_plugin/__init__.py +++ b/neutron/plugins/plumgrid/plumgrid_plugin/__init__.py @@ -1,13 +0,0 @@ -# Copyright 2013 PLUMgrid, Inc. All Rights Reserved. -# -# 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. diff --git a/neutron/plugins/ryu/common/__init__.py b/neutron/plugins/ryu/common/__init__.py index 8ac9340e9fd..e69de29bb2d 100644 --- a/neutron/plugins/ryu/common/__init__.py +++ b/neutron/plugins/ryu/common/__init__.py @@ -1,13 +0,0 @@ -# Copyright 2012 Red Hat, 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. diff --git a/neutron/plugins/vmware/dhcp_meta/__init__.py b/neutron/plugins/vmware/dhcp_meta/__init__.py index 75afea8bff6..e69de29bb2d 100644 --- a/neutron/plugins/vmware/dhcp_meta/__init__.py +++ b/neutron/plugins/vmware/dhcp_meta/__init__.py @@ -1,14 +0,0 @@ -# Copyright 2013 VMware, Inc. -# All Rights Reserved -# -# 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. diff --git a/neutron/plugins/vmware/vshield/__init__.py b/neutron/plugins/vmware/vshield/__init__.py index db5f20ea937..e69de29bb2d 100644 --- a/neutron/plugins/vmware/vshield/__init__.py +++ b/neutron/plugins/vmware/vshield/__init__.py @@ -1,14 +0,0 @@ -# Copyright 2013 VMware, Inc -# All Rights Reserved. -# -# 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. diff --git a/neutron/scheduler/__init__.py b/neutron/scheduler/__init__.py index e82932559d4..e69de29bb2d 100644 --- a/neutron/scheduler/__init__.py +++ b/neutron/scheduler/__init__.py @@ -1,14 +0,0 @@ -# Copyright (c) 2013 OpenStack Foundation. -# All Rights Reserved. -# -# 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. diff --git a/neutron/services/__init__.py b/neutron/services/__init__.py index b706747cf8c..e69de29bb2d 100644 --- a/neutron/services/__init__.py +++ b/neutron/services/__init__.py @@ -1,14 +0,0 @@ -# Copyright 2012 OpenStack Foundation. -# All Rights Reserved. -# -# 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. diff --git a/neutron/services/firewall/__init__.py b/neutron/services/firewall/__init__.py index a6a8955d8b3..e69de29bb2d 100644 --- a/neutron/services/firewall/__init__.py +++ b/neutron/services/firewall/__init__.py @@ -1,14 +0,0 @@ -# Copyright 2013 OpenStack Foundation. -# All Rights Reserved. -# -# 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. diff --git a/neutron/services/firewall/agents/__init__.py b/neutron/services/firewall/agents/__init__.py index a6a8955d8b3..e69de29bb2d 100644 --- a/neutron/services/firewall/agents/__init__.py +++ b/neutron/services/firewall/agents/__init__.py @@ -1,14 +0,0 @@ -# Copyright 2013 OpenStack Foundation. -# All Rights Reserved. -# -# 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. diff --git a/neutron/services/firewall/agents/l3reference/__init__.py b/neutron/services/firewall/agents/l3reference/__init__.py index a6a8955d8b3..e69de29bb2d 100644 --- a/neutron/services/firewall/agents/l3reference/__init__.py +++ b/neutron/services/firewall/agents/l3reference/__init__.py @@ -1,14 +0,0 @@ -# Copyright 2013 OpenStack Foundation. -# All Rights Reserved. -# -# 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. diff --git a/neutron/services/firewall/agents/varmour/__init__.py b/neutron/services/firewall/agents/varmour/__init__.py index a6a8955d8b3..e69de29bb2d 100755 --- a/neutron/services/firewall/agents/varmour/__init__.py +++ b/neutron/services/firewall/agents/varmour/__init__.py @@ -1,14 +0,0 @@ -# Copyright 2013 OpenStack Foundation. -# All Rights Reserved. -# -# 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. diff --git a/neutron/services/firewall/drivers/__init__.py b/neutron/services/firewall/drivers/__init__.py index a6a8955d8b3..e69de29bb2d 100644 --- a/neutron/services/firewall/drivers/__init__.py +++ b/neutron/services/firewall/drivers/__init__.py @@ -1,14 +0,0 @@ -# Copyright 2013 OpenStack Foundation. -# All Rights Reserved. -# -# 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. diff --git a/neutron/services/firewall/drivers/linux/__init__.py b/neutron/services/firewall/drivers/linux/__init__.py index a6a8955d8b3..e69de29bb2d 100644 --- a/neutron/services/firewall/drivers/linux/__init__.py +++ b/neutron/services/firewall/drivers/linux/__init__.py @@ -1,14 +0,0 @@ -# Copyright 2013 OpenStack Foundation. -# All Rights Reserved. -# -# 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. diff --git a/neutron/services/firewall/drivers/varmour/__init__.py b/neutron/services/firewall/drivers/varmour/__init__.py index a6a8955d8b3..e69de29bb2d 100755 --- a/neutron/services/firewall/drivers/varmour/__init__.py +++ b/neutron/services/firewall/drivers/varmour/__init__.py @@ -1,14 +0,0 @@ -# Copyright 2013 OpenStack Foundation. -# All Rights Reserved. -# -# 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. diff --git a/neutron/services/l3_router/__init__.py b/neutron/services/l3_router/__init__.py index e82932559d4..e69de29bb2d 100644 --- a/neutron/services/l3_router/__init__.py +++ b/neutron/services/l3_router/__init__.py @@ -1,14 +0,0 @@ -# Copyright (c) 2013 OpenStack Foundation. -# All Rights Reserved. -# -# 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. diff --git a/neutron/services/loadbalancer/__init__.py b/neutron/services/loadbalancer/__init__.py index a6a8955d8b3..e69de29bb2d 100644 --- a/neutron/services/loadbalancer/__init__.py +++ b/neutron/services/loadbalancer/__init__.py @@ -1,14 +0,0 @@ -# Copyright 2013 OpenStack Foundation. -# All Rights Reserved. -# -# 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. diff --git a/neutron/services/loadbalancer/drivers/__init__.py b/neutron/services/loadbalancer/drivers/__init__.py index 69bb9f63237..e69de29bb2d 100644 --- a/neutron/services/loadbalancer/drivers/__init__.py +++ b/neutron/services/loadbalancer/drivers/__init__.py @@ -1,13 +0,0 @@ -# Copyright 2013 New Dream Network, LLC (DreamHost) -# -# 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. diff --git a/neutron/services/loadbalancer/drivers/haproxy/__init__.py b/neutron/services/loadbalancer/drivers/haproxy/__init__.py index 69bb9f63237..e69de29bb2d 100644 --- a/neutron/services/loadbalancer/drivers/haproxy/__init__.py +++ b/neutron/services/loadbalancer/drivers/haproxy/__init__.py @@ -1,13 +0,0 @@ -# Copyright 2013 New Dream Network, LLC (DreamHost) -# -# 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. diff --git a/neutron/services/loadbalancer/drivers/radware/__init__.py b/neutron/services/loadbalancer/drivers/radware/__init__.py index 762b3f3336b..e69de29bb2d 100644 --- a/neutron/services/loadbalancer/drivers/radware/__init__.py +++ b/neutron/services/loadbalancer/drivers/radware/__init__.py @@ -1,13 +0,0 @@ -# Copyright 2013 Radware LLC (Radware) -# -# 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. diff --git a/neutron/services/metering/__init__.py b/neutron/services/metering/__init__.py index bc20be2a0cb..e69de29bb2d 100644 --- a/neutron/services/metering/__init__.py +++ b/neutron/services/metering/__init__.py @@ -1,13 +0,0 @@ -# Copyright (C) 2013 eNovance SAS -# -# 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. diff --git a/neutron/services/metering/agents/__init__.py b/neutron/services/metering/agents/__init__.py index bc20be2a0cb..e69de29bb2d 100644 --- a/neutron/services/metering/agents/__init__.py +++ b/neutron/services/metering/agents/__init__.py @@ -1,13 +0,0 @@ -# Copyright (C) 2013 eNovance SAS -# -# 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. diff --git a/neutron/services/metering/drivers/__init__.py b/neutron/services/metering/drivers/__init__.py index bc20be2a0cb..e69de29bb2d 100644 --- a/neutron/services/metering/drivers/__init__.py +++ b/neutron/services/metering/drivers/__init__.py @@ -1,13 +0,0 @@ -# Copyright (C) 2013 eNovance SAS -# -# 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. diff --git a/neutron/services/metering/drivers/iptables/__init__.py b/neutron/services/metering/drivers/iptables/__init__.py index bc20be2a0cb..e69de29bb2d 100644 --- a/neutron/services/metering/drivers/iptables/__init__.py +++ b/neutron/services/metering/drivers/iptables/__init__.py @@ -1,13 +0,0 @@ -# Copyright (C) 2013 eNovance SAS -# -# 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. diff --git a/neutron/services/metering/drivers/noop/__init__.py b/neutron/services/metering/drivers/noop/__init__.py index bc20be2a0cb..e69de29bb2d 100644 --- a/neutron/services/metering/drivers/noop/__init__.py +++ b/neutron/services/metering/drivers/noop/__init__.py @@ -1,13 +0,0 @@ -# Copyright (C) 2013 eNovance SAS -# -# 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. diff --git a/neutron/services/vpn/__init__.py b/neutron/services/vpn/__init__.py index f560154933f..e69de29bb2d 100644 --- a/neutron/services/vpn/__init__.py +++ b/neutron/services/vpn/__init__.py @@ -1,14 +0,0 @@ -# (c) Copyright 2013 Hewlett-Packard Development Company, L.P. -# All Rights Reserved. -# -# 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. diff --git a/neutron/services/vpn/common/__init__.py b/neutron/services/vpn/common/__init__.py index 46d9c1bed8e..e69de29bb2d 100644 --- a/neutron/services/vpn/common/__init__.py +++ b/neutron/services/vpn/common/__init__.py @@ -1,14 +0,0 @@ -# Copyright 2013, Nachi Ueno, NTT I3, Inc. -# All Rights Reserved. -# -# 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. diff --git a/neutron/tests/__init__.py b/neutron/tests/__init__.py index c11422ed49f..e69de29bb2d 100644 --- a/neutron/tests/__init__.py +++ b/neutron/tests/__init__.py @@ -1,14 +0,0 @@ -# Copyright (c) 2011 OpenStack Foundation. -# All Rights Reserved. -# -# 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. diff --git a/neutron/tests/functional/__init__.py b/neutron/tests/functional/__init__.py index e744db95dc3..e69de29bb2d 100644 --- a/neutron/tests/functional/__init__.py +++ b/neutron/tests/functional/__init__.py @@ -1,13 +0,0 @@ -# Copyright 2013 Red Hat, 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. diff --git a/neutron/tests/functional/agent/__init__.py b/neutron/tests/functional/agent/__init__.py index e744db95dc3..e69de29bb2d 100644 --- a/neutron/tests/functional/agent/__init__.py +++ b/neutron/tests/functional/agent/__init__.py @@ -1,13 +0,0 @@ -# Copyright 2013 Red Hat, 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. diff --git a/neutron/tests/functional/agent/linux/__init__.py b/neutron/tests/functional/agent/linux/__init__.py index e744db95dc3..e69de29bb2d 100644 --- a/neutron/tests/functional/agent/linux/__init__.py +++ b/neutron/tests/functional/agent/linux/__init__.py @@ -1,13 +0,0 @@ -# Copyright 2013 Red Hat, 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. diff --git a/neutron/tests/unit/agent/__init__.py b/neutron/tests/unit/agent/__init__.py index e744db95dc3..e69de29bb2d 100644 --- a/neutron/tests/unit/agent/__init__.py +++ b/neutron/tests/unit/agent/__init__.py @@ -1,13 +0,0 @@ -# Copyright 2013 Red Hat, 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. diff --git a/neutron/tests/unit/agent/linux/__init__.py b/neutron/tests/unit/agent/linux/__init__.py index e744db95dc3..e69de29bb2d 100644 --- a/neutron/tests/unit/agent/linux/__init__.py +++ b/neutron/tests/unit/agent/linux/__init__.py @@ -1,13 +0,0 @@ -# Copyright 2013 Red Hat, 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. diff --git a/neutron/tests/unit/bigswitch/__init__.py b/neutron/tests/unit/bigswitch/__init__.py index b706747cf8c..e69de29bb2d 100644 --- a/neutron/tests/unit/bigswitch/__init__.py +++ b/neutron/tests/unit/bigswitch/__init__.py @@ -1,14 +0,0 @@ -# Copyright 2012 OpenStack Foundation. -# All Rights Reserved. -# -# 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. diff --git a/neutron/tests/unit/brocade/__init__.py b/neutron/tests/unit/brocade/__init__.py index b9eda04a0e8..e69de29bb2d 100644 --- a/neutron/tests/unit/brocade/__init__.py +++ b/neutron/tests/unit/brocade/__init__.py @@ -1,15 +0,0 @@ -# Copyright 2013 OpenStack Foundation. -# -# All Rights Reserved. -# -# 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. diff --git a/neutron/tests/unit/cisco/__init__.py b/neutron/tests/unit/cisco/__init__.py index b706747cf8c..e69de29bb2d 100644 --- a/neutron/tests/unit/cisco/__init__.py +++ b/neutron/tests/unit/cisco/__init__.py @@ -1,14 +0,0 @@ -# Copyright 2012 OpenStack Foundation. -# All Rights Reserved. -# -# 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. diff --git a/neutron/tests/unit/cisco/n1kv/__init__.py b/neutron/tests/unit/cisco/n1kv/__init__.py index 73c4997f21d..e69de29bb2d 100644 --- a/neutron/tests/unit/cisco/n1kv/__init__.py +++ b/neutron/tests/unit/cisco/n1kv/__init__.py @@ -1,13 +0,0 @@ -# Copyright 2013 Cisco Systems, 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. diff --git a/neutron/tests/unit/db/__init__.py b/neutron/tests/unit/db/__init__.py index fb181bf6220..e69de29bb2d 100644 --- a/neutron/tests/unit/db/__init__.py +++ b/neutron/tests/unit/db/__init__.py @@ -1,13 +0,0 @@ -# Copyright 2013 OpenStack Foundation -# -# 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. diff --git a/neutron/tests/unit/db/firewall/__init__.py b/neutron/tests/unit/db/firewall/__init__.py index fb181bf6220..e69de29bb2d 100644 --- a/neutron/tests/unit/db/firewall/__init__.py +++ b/neutron/tests/unit/db/firewall/__init__.py @@ -1,13 +0,0 @@ -# Copyright 2013 OpenStack Foundation -# -# 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. diff --git a/neutron/tests/unit/db/loadbalancer/__init__.py b/neutron/tests/unit/db/loadbalancer/__init__.py index fb181bf6220..e69de29bb2d 100644 --- a/neutron/tests/unit/db/loadbalancer/__init__.py +++ b/neutron/tests/unit/db/loadbalancer/__init__.py @@ -1,13 +0,0 @@ -# Copyright 2013 OpenStack Foundation -# -# 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. diff --git a/neutron/tests/unit/db/metering/__init__.py b/neutron/tests/unit/db/metering/__init__.py index bc20be2a0cb..e69de29bb2d 100644 --- a/neutron/tests/unit/db/metering/__init__.py +++ b/neutron/tests/unit/db/metering/__init__.py @@ -1,13 +0,0 @@ -# Copyright (C) 2013 eNovance SAS -# -# 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. diff --git a/neutron/tests/unit/db/vpn/__init__.py b/neutron/tests/unit/db/vpn/__init__.py index f560154933f..e69de29bb2d 100644 --- a/neutron/tests/unit/db/vpn/__init__.py +++ b/neutron/tests/unit/db/vpn/__init__.py @@ -1,14 +0,0 @@ -# (c) Copyright 2013 Hewlett-Packard Development Company, L.P. -# All Rights Reserved. -# -# 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. diff --git a/neutron/tests/unit/embrane/__init__.py b/neutron/tests/unit/embrane/__init__.py index 5627edf2c91..e69de29bb2d 100644 --- a/neutron/tests/unit/embrane/__init__.py +++ b/neutron/tests/unit/embrane/__init__.py @@ -1,14 +0,0 @@ -# Copyright 2013 Embrane, Inc. -# All Rights Reserved. -# -# 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. diff --git a/neutron/tests/unit/extensions/__init__.py b/neutron/tests/unit/extensions/__init__.py index 153622e504b..e69de29bb2d 100644 --- a/neutron/tests/unit/extensions/__init__.py +++ b/neutron/tests/unit/extensions/__init__.py @@ -1,13 +0,0 @@ -# Copyright 2011 OpenStack Foundation -# -# 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. diff --git a/neutron/tests/unit/hyperv/__init__.py b/neutron/tests/unit/hyperv/__init__.py index 0089853d728..e69de29bb2d 100644 --- a/neutron/tests/unit/hyperv/__init__.py +++ b/neutron/tests/unit/hyperv/__init__.py @@ -1,14 +0,0 @@ -# Copyright 2013 Cloudbase Solutions SRL -# All Rights Reserved. -# -# 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. diff --git a/neutron/tests/unit/linuxbridge/__init__.py b/neutron/tests/unit/linuxbridge/__init__.py index b706747cf8c..e69de29bb2d 100644 --- a/neutron/tests/unit/linuxbridge/__init__.py +++ b/neutron/tests/unit/linuxbridge/__init__.py @@ -1,14 +0,0 @@ -# Copyright 2012 OpenStack Foundation. -# All Rights Reserved. -# -# 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. diff --git a/neutron/tests/unit/metaplugin/__init__.py b/neutron/tests/unit/metaplugin/__init__.py index 65685178bf2..e69de29bb2d 100644 --- a/neutron/tests/unit/metaplugin/__init__.py +++ b/neutron/tests/unit/metaplugin/__init__.py @@ -1,14 +0,0 @@ -# Copyright 2012, Nachi Ueno, NTT MCL, Inc. -# All Rights Reserved. -# -# 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. diff --git a/neutron/tests/unit/midonet/__init__.py b/neutron/tests/unit/midonet/__init__.py index e2cc2a75b7b..e69de29bb2d 100644 --- a/neutron/tests/unit/midonet/__init__.py +++ b/neutron/tests/unit/midonet/__init__.py @@ -1,15 +0,0 @@ -# Copyright (C) 2012 Midokura Japan K.K. -# Copyright (C) 2013 Midokura PTE LTD -# All Rights Reserved. -# -# 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. diff --git a/neutron/tests/unit/ml2/__init__.py b/neutron/tests/unit/ml2/__init__.py index 788cea1f70b..e69de29bb2d 100644 --- a/neutron/tests/unit/ml2/__init__.py +++ b/neutron/tests/unit/ml2/__init__.py @@ -1,14 +0,0 @@ -# Copyright (c) 2013 OpenStack Foundation -# All Rights Reserved. -# -# 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. diff --git a/neutron/tests/unit/ml2/drivers/__init__.py b/neutron/tests/unit/ml2/drivers/__init__.py index 788cea1f70b..e69de29bb2d 100644 --- a/neutron/tests/unit/ml2/drivers/__init__.py +++ b/neutron/tests/unit/ml2/drivers/__init__.py @@ -1,14 +0,0 @@ -# Copyright (c) 2013 OpenStack Foundation -# All Rights Reserved. -# -# 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. diff --git a/neutron/tests/unit/mlnx/__init__.py b/neutron/tests/unit/mlnx/__init__.py index 7182ac41479..e69de29bb2d 100644 --- a/neutron/tests/unit/mlnx/__init__.py +++ b/neutron/tests/unit/mlnx/__init__.py @@ -1,14 +0,0 @@ -# Copyright 2013 Mellanox Technologies, Ltd -# -# 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. diff --git a/neutron/tests/unit/nec/__init__.py b/neutron/tests/unit/nec/__init__.py index cff1fb258c7..e69de29bb2d 100644 --- a/neutron/tests/unit/nec/__init__.py +++ b/neutron/tests/unit/nec/__init__.py @@ -1,13 +0,0 @@ -# Copyright 2012 NEC Corporation. All rights reserved. -# -# 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. diff --git a/neutron/tests/unit/openvswitch/__init__.py b/neutron/tests/unit/openvswitch/__init__.py index b706747cf8c..e69de29bb2d 100644 --- a/neutron/tests/unit/openvswitch/__init__.py +++ b/neutron/tests/unit/openvswitch/__init__.py @@ -1,14 +0,0 @@ -# Copyright 2012 OpenStack Foundation. -# All Rights Reserved. -# -# 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. diff --git a/neutron/tests/unit/plumgrid/__init__.py b/neutron/tests/unit/plumgrid/__init__.py index f34feeeec96..e69de29bb2d 100644 --- a/neutron/tests/unit/plumgrid/__init__.py +++ b/neutron/tests/unit/plumgrid/__init__.py @@ -1,13 +0,0 @@ -# Copyright 2013 PLUMgrid, Inc. All Rights Reserved. -# -# 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. diff --git a/neutron/tests/unit/ryu/__init__.py b/neutron/tests/unit/ryu/__init__.py index b706747cf8c..e69de29bb2d 100644 --- a/neutron/tests/unit/ryu/__init__.py +++ b/neutron/tests/unit/ryu/__init__.py @@ -1,14 +0,0 @@ -# Copyright 2012 OpenStack Foundation. -# All Rights Reserved. -# -# 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. diff --git a/neutron/tests/unit/services/__init__.py b/neutron/tests/unit/services/__init__.py index 69bb9f63237..e69de29bb2d 100644 --- a/neutron/tests/unit/services/__init__.py +++ b/neutron/tests/unit/services/__init__.py @@ -1,13 +0,0 @@ -# Copyright 2013 New Dream Network, LLC (DreamHost) -# -# 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. diff --git a/neutron/tests/unit/services/firewall/__init__.py b/neutron/tests/unit/services/firewall/__init__.py index fb181bf6220..e69de29bb2d 100644 --- a/neutron/tests/unit/services/firewall/__init__.py +++ b/neutron/tests/unit/services/firewall/__init__.py @@ -1,13 +0,0 @@ -# Copyright 2013 OpenStack Foundation -# -# 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. diff --git a/neutron/tests/unit/services/firewall/agents/__init__.py b/neutron/tests/unit/services/firewall/agents/__init__.py index fb181bf6220..e69de29bb2d 100644 --- a/neutron/tests/unit/services/firewall/agents/__init__.py +++ b/neutron/tests/unit/services/firewall/agents/__init__.py @@ -1,13 +0,0 @@ -# Copyright 2013 OpenStack Foundation -# -# 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. diff --git a/neutron/tests/unit/services/firewall/agents/l3reference/__init__.py b/neutron/tests/unit/services/firewall/agents/l3reference/__init__.py index fb181bf6220..e69de29bb2d 100644 --- a/neutron/tests/unit/services/firewall/agents/l3reference/__init__.py +++ b/neutron/tests/unit/services/firewall/agents/l3reference/__init__.py @@ -1,13 +0,0 @@ -# Copyright 2013 OpenStack Foundation -# -# 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. diff --git a/neutron/tests/unit/services/firewall/agents/varmour/__init__.py b/neutron/tests/unit/services/firewall/agents/varmour/__init__.py index a6a8955d8b3..e69de29bb2d 100755 --- a/neutron/tests/unit/services/firewall/agents/varmour/__init__.py +++ b/neutron/tests/unit/services/firewall/agents/varmour/__init__.py @@ -1,14 +0,0 @@ -# Copyright 2013 OpenStack Foundation. -# All Rights Reserved. -# -# 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. diff --git a/neutron/tests/unit/services/firewall/drivers/__init__.py b/neutron/tests/unit/services/firewall/drivers/__init__.py index fb181bf6220..e69de29bb2d 100644 --- a/neutron/tests/unit/services/firewall/drivers/__init__.py +++ b/neutron/tests/unit/services/firewall/drivers/__init__.py @@ -1,13 +0,0 @@ -# Copyright 2013 OpenStack Foundation -# -# 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. diff --git a/neutron/tests/unit/services/firewall/drivers/linux/__init__.py b/neutron/tests/unit/services/firewall/drivers/linux/__init__.py index fb181bf6220..e69de29bb2d 100644 --- a/neutron/tests/unit/services/firewall/drivers/linux/__init__.py +++ b/neutron/tests/unit/services/firewall/drivers/linux/__init__.py @@ -1,13 +0,0 @@ -# Copyright 2013 OpenStack Foundation -# -# 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. diff --git a/neutron/tests/unit/services/firewall/drivers/varmour/__init__.py b/neutron/tests/unit/services/firewall/drivers/varmour/__init__.py index a6a8955d8b3..e69de29bb2d 100755 --- a/neutron/tests/unit/services/firewall/drivers/varmour/__init__.py +++ b/neutron/tests/unit/services/firewall/drivers/varmour/__init__.py @@ -1,14 +0,0 @@ -# Copyright 2013 OpenStack Foundation. -# All Rights Reserved. -# -# 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. diff --git a/neutron/tests/unit/services/loadbalancer/__init__.py b/neutron/tests/unit/services/loadbalancer/__init__.py index 69bb9f63237..e69de29bb2d 100644 --- a/neutron/tests/unit/services/loadbalancer/__init__.py +++ b/neutron/tests/unit/services/loadbalancer/__init__.py @@ -1,13 +0,0 @@ -# Copyright 2013 New Dream Network, LLC (DreamHost) -# -# 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. diff --git a/neutron/tests/unit/services/loadbalancer/drivers/__init__.py b/neutron/tests/unit/services/loadbalancer/drivers/__init__.py index 69bb9f63237..e69de29bb2d 100644 --- a/neutron/tests/unit/services/loadbalancer/drivers/__init__.py +++ b/neutron/tests/unit/services/loadbalancer/drivers/__init__.py @@ -1,13 +0,0 @@ -# Copyright 2013 New Dream Network, LLC (DreamHost) -# -# 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. diff --git a/neutron/tests/unit/services/loadbalancer/drivers/haproxy/__init__.py b/neutron/tests/unit/services/loadbalancer/drivers/haproxy/__init__.py index 69bb9f63237..e69de29bb2d 100644 --- a/neutron/tests/unit/services/loadbalancer/drivers/haproxy/__init__.py +++ b/neutron/tests/unit/services/loadbalancer/drivers/haproxy/__init__.py @@ -1,13 +0,0 @@ -# Copyright 2013 New Dream Network, LLC (DreamHost) -# -# 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. diff --git a/neutron/tests/unit/services/loadbalancer/drivers/radware/__init__.py b/neutron/tests/unit/services/loadbalancer/drivers/radware/__init__.py index 817d20e7527..e69de29bb2d 100644 --- a/neutron/tests/unit/services/loadbalancer/drivers/radware/__init__.py +++ b/neutron/tests/unit/services/loadbalancer/drivers/radware/__init__.py @@ -1,13 +0,0 @@ -# copyright 2013 Radware LTD. -# -# 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. diff --git a/neutron/tests/unit/services/metering/__init__.py b/neutron/tests/unit/services/metering/__init__.py index bc20be2a0cb..e69de29bb2d 100644 --- a/neutron/tests/unit/services/metering/__init__.py +++ b/neutron/tests/unit/services/metering/__init__.py @@ -1,13 +0,0 @@ -# Copyright (C) 2013 eNovance SAS -# -# 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. diff --git a/neutron/tests/unit/services/metering/drivers/__init__.py b/neutron/tests/unit/services/metering/drivers/__init__.py index bc20be2a0cb..e69de29bb2d 100644 --- a/neutron/tests/unit/services/metering/drivers/__init__.py +++ b/neutron/tests/unit/services/metering/drivers/__init__.py @@ -1,13 +0,0 @@ -# Copyright (C) 2013 eNovance SAS -# -# 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. diff --git a/neutron/tests/unit/services/vpn/__init__.py b/neutron/tests/unit/services/vpn/__init__.py index f560154933f..e69de29bb2d 100644 --- a/neutron/tests/unit/services/vpn/__init__.py +++ b/neutron/tests/unit/services/vpn/__init__.py @@ -1,14 +0,0 @@ -# (c) Copyright 2013 Hewlett-Packard Development Company, L.P. -# All Rights Reserved. -# -# 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. diff --git a/neutron/tests/unit/services/vpn/device_drivers/__init__.py b/neutron/tests/unit/services/vpn/device_drivers/__init__.py index 46d9c1bed8e..e69de29bb2d 100644 --- a/neutron/tests/unit/services/vpn/device_drivers/__init__.py +++ b/neutron/tests/unit/services/vpn/device_drivers/__init__.py @@ -1,14 +0,0 @@ -# Copyright 2013, Nachi Ueno, NTT I3, Inc. -# All Rights Reserved. -# -# 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. diff --git a/neutron/tests/unit/services/vpn/service_drivers/__init__.py b/neutron/tests/unit/services/vpn/service_drivers/__init__.py index 46d9c1bed8e..e69de29bb2d 100644 --- a/neutron/tests/unit/services/vpn/service_drivers/__init__.py +++ b/neutron/tests/unit/services/vpn/service_drivers/__init__.py @@ -1,14 +0,0 @@ -# Copyright 2013, Nachi Ueno, NTT I3, Inc. -# All Rights Reserved. -# -# 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. diff --git a/tox.ini b/tox.ini index 154188ea6f6..dcb220fee5b 100644 --- a/tox.ini +++ b/tox.ini @@ -69,7 +69,6 @@ commands = python setup.py build_sphinx # F402 import module shadowed by loop variable # F811 redefinition of unused variable # F812 list comprehension redefines name from line -# H104 file contains nothing but comments # H237 module is removed in Python 3 # H305 imports not grouped correctly # H307 like imports should be grouped together @@ -78,7 +77,7 @@ commands = python setup.py build_sphinx # H405 multi line docstring summary not separated with an empty line # H904 Wrap long lines in parentheses instead of a backslash # TODO(marun) H404 multi line docstring should start with a summary -ignore = E125,E126,E128,E129,E265,E713,F402,F811,F812,H104,H237,H305,H307,H401,H402,H404,H405,H904 +ignore = E125,E126,E128,E129,E265,E713,F402,F811,F812,H237,H305,H307,H401,H402,H404,H405,H904 show-source = true builtins = _ exclude = .venv,.git,.tox,dist,doc,*openstack/common*,*lib/python*,*egg,build,tools,.ropeproject,rally-scenarios From 5e4b600528a2b58cbb38d6b8d55b316602d4d015 Mon Sep 17 00:00:00 2001 From: Peng Xiao Date: Mon, 20 Oct 2014 14:16:36 +0800 Subject: [PATCH 120/128] Modify docstring on send_delete_port_request in N1kv plugin N1kv plugin: Modify docstring on _send_delete_port_request method Change-Id: I64d34878ffd8f6db703e4c1d9849032fef9bae96 Closes-Bug: #1381277 --- neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py b/neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py index 16c53660f59..6e2629adabd 100644 --- a/neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py +++ b/neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py @@ -838,8 +838,7 @@ class N1kvNeutronPluginV2(db_base_plugin_v2.NeutronDbPluginV2, """ Send delete port request to VSM. - Delete the port on the VSM. If it is the last port on the VM Network, - delete the VM Network. + Delete the port on the VSM. :param context: neutron api request context :param port: port object which is to be deleted :param vm_network: VM network object with which the port is associated From ccd650732729451aa8e5ce3401f9570c70c4f066 Mon Sep 17 00:00:00 2001 From: Sylvain Afchain Date: Fri, 26 Sep 2014 13:49:43 +0000 Subject: [PATCH 121/128] Moves the HA resource creations outside of transaction Currently the HA resources are created in the _create_router_db which includes calls to the plugin and generates RPC calls. Even if the resource creations are outside of any transaction from the _create_router_db point of view, this method is called in a transaction from the create_router method. This patch moves the resource creations to the create_router method outside the transaction. The failures are handled as previously with a try/expect. Change-Id: If8fcfd012f8e992175e49bbefb2ae667881a620a Closes-bug: #1374461 --- neutron/db/l3_hamode_db.py | 21 ++++---- neutron/tests/unit/db/test_l3_ha_db.py | 61 +++++++++++++----------- neutron/tests/unit/test_l3_schedulers.py | 5 +- 3 files changed, 48 insertions(+), 39 deletions(-) diff --git a/neutron/db/l3_hamode_db.py b/neutron/db/l3_hamode_db.py index a0ed5808502..2aa78bdea9b 100644 --- a/neutron/db/l3_hamode_db.py +++ b/neutron/db/l3_hamode_db.py @@ -333,18 +333,19 @@ class L3_HA_NAT_db_mixin(l3_dvr_db.L3_NAT_with_dvr_db_mixin): ha = cfg.CONF.l3_ha return ha - def _create_router_db(self, context, router, tenant_id): - router['ha'] = self._is_ha(router) + def create_router(self, context, router): + is_ha = self._is_ha(router['router']) - if router['ha'] and l3_dvr_db.is_distributed_router(router): + if is_ha and l3_dvr_db.is_distributed_router(router['router']): raise l3_ha.DistributedHARouterNotSupported() - with context.session.begin(subtransactions=True): - router_db = super(L3_HA_NAT_db_mixin, self)._create_router_db( - context, router, tenant_id) + router['router']['ha'] = is_ha + router_dict = super(L3_HA_NAT_db_mixin, + self).create_router(context, router) - if router['ha']: + if is_ha: try: + router_db = self._get_router(context, router_dict['id']) ha_network = self.get_ha_network(context, router_db.tenant_id) if not ha_network: @@ -356,9 +357,9 @@ class L3_HA_NAT_db_mixin(l3_dvr_db.L3_NAT_with_dvr_db_mixin): self._notify_ha_interfaces_updated(context, router_db.id) except Exception: with excutils.save_and_reraise_exception(): - self.delete_router(context, router_db.id) - - return router_db + self.delete_router(context, router_dict['id']) + router_dict['ha_vr_id'] = router_db.extra_attributes.ha_vr_id + return router_dict def _update_router_db(self, context, router_id, data, gw_info): ha = data.pop('ha', None) diff --git a/neutron/tests/unit/db/test_l3_ha_db.py b/neutron/tests/unit/db/test_l3_ha_db.py index 4616612bbd8..807436caa70 100644 --- a/neutron/tests/unit/db/test_l3_ha_db.py +++ b/neutron/tests/unit/db/test_l3_ha_db.py @@ -55,12 +55,13 @@ class L3HATestFramework(testlib_api.SqlTestCase, cfg.CONF.set_override('allow_overlapping_ips', True) def _create_router(self, ha=True, tenant_id='tenant1', distributed=None): + self.admin_ctx.tenant_id = tenant_id router = {'name': 'router1', 'admin_state_up': True} if ha is not None: router['ha'] = ha if distributed is not None: router['distributed'] = distributed - return self.plugin._create_router_db(self.admin_ctx, router, tenant_id) + return self.plugin.create_router(self.admin_ctx, {'router': router}) def _update_router(self, router_id, ha=True, distributed=None): data = {'ha': ha} if ha is not None else {} @@ -100,7 +101,7 @@ class L3HAGetSyncDataTestCase(L3HATestFramework): def test_l3_agent_routers_query_interface(self): router = self._create_router() - self._bind_router(router.id) + self._bind_router(router['id']) routers = self.plugin.get_ha_sync_data_for_host(self.admin_ctx, self.agent1['host']) self.assertEqual(1, len(routers)) @@ -117,13 +118,13 @@ class L3HAGetSyncDataTestCase(L3HATestFramework): def test_update_state(self): router = self._create_router() - self._bind_router(router.id) + self._bind_router(router['id']) routers = self.plugin.get_ha_sync_data_for_host(self.admin_ctx, self.agent1['host']) state = routers[0].get(constants.HA_ROUTER_STATE_KEY) self.assertEqual('standby', state) - self.plugin.update_router_state(self.admin_ctx, router.id, 'active', + self.plugin.update_router_state(self.admin_ctx, router['id'], 'active', self.agent1['host']) routers = self.plugin.get_ha_sync_data_for_host(self.admin_ctx, @@ -163,7 +164,7 @@ class L3HATestCase(L3HATestFramework): def test_ha_router_create(self): router = self._create_router() - self.assertTrue(router.extra_attributes['ha']) + self.assertTrue(router['ha']) def test_ha_router_create_with_distributed(self): self.assertRaises(l3_ext_ha_mode.DistributedHARouterNotSupported, @@ -172,37 +173,37 @@ class L3HATestCase(L3HATestFramework): def test_no_ha_router_create(self): router = self._create_router(ha=False) - self.assertFalse(router.extra_attributes['ha']) + self.assertFalse(router['ha']) def test_router_create_with_ha_conf_enabled(self): cfg.CONF.set_override('l3_ha', True) router = self._create_router(ha=None) - self.assertTrue(router.extra_attributes['ha']) + self.assertTrue(router['ha']) def test_migration_from_ha(self): router = self._create_router() - self.assertTrue(router.extra_attributes['ha']) + self.assertTrue(router['ha']) - router = self._update_router(router.id, ha=False) + router = self._update_router(router['id'], ha=False) self.assertFalse(router.extra_attributes['ha']) self.assertIsNone(router.extra_attributes['ha_vr_id']) def test_migration_to_ha(self): router = self._create_router(ha=False) - self.assertFalse(router.extra_attributes['ha']) + self.assertFalse(router['ha']) - router = self._update_router(router.id, ha=True) + router = self._update_router(router['id'], ha=True) self.assertTrue(router.extra_attributes['ha']) self.assertIsNotNone(router.extra_attributes['ha_vr_id']) def test_migrate_ha_router_to_distributed(self): router = self._create_router() - self.assertTrue(router.extra_attributes['ha']) + self.assertTrue(router['ha']) self.assertRaises(l3_ext_ha_mode.DistributedHARouterNotSupported, self._update_router, - router.id, + router['id'], distributed=True) def test_unique_ha_network_per_tenant(self): @@ -247,7 +248,7 @@ class L3HATestCase(L3HATestFramework): def test_update_router_to_ha_notifies_agent(self): router = self._create_router(ha=False) self.notif_m.reset_mock() - self._update_router(router.id, ha=True) + self._update_router(router['id'], ha=True) self.assertTrue(self.notif_m.called) def test_unique_vr_id_between_routers(self): @@ -272,18 +273,20 @@ class L3HATestCase(L3HATestFramework): @mock.patch('neutron.db.l3_hamode_db.MAX_ALLOCATION_TRIES', new=2) def test_vr_id_allocation_contraint_conflict(self): router = self._create_router() - network = self.plugin.get_ha_network(self.admin_ctx, router.tenant_id) + network = self.plugin.get_ha_network(self.admin_ctx, + router['tenant_id']) with mock.patch.object(self.plugin, '_get_allocated_vr_id', return_value=set()) as alloc: self.assertRaises(l3_ext_ha_mode.MaxVRIDAllocationTriesReached, self.plugin._allocate_vr_id, self.admin_ctx, - network.network_id, router.id) + network.network_id, router['id']) self.assertEqual(2, len(alloc.mock_calls)) def test_vr_id_allocation_delete_router(self): router = self._create_router() - network = self.plugin.get_ha_network(self.admin_ctx, router.tenant_id) + network = self.plugin.get_ha_network(self.admin_ctx, + router['tenant_id']) allocs_before = self.plugin._get_allocated_vr_id(self.admin_ctx, network.network_id) @@ -292,19 +295,20 @@ class L3HATestCase(L3HATestFramework): network.network_id) self.assertNotEqual(allocs_before, allocs_current) - self.plugin.delete_router(self.admin_ctx, router.id) + self.plugin.delete_router(self.admin_ctx, router['id']) allocs_after = self.plugin._get_allocated_vr_id(self.admin_ctx, network.network_id) self.assertEqual(allocs_before, allocs_after) def test_vr_id_allocation_router_migration(self): router = self._create_router() - network = self.plugin.get_ha_network(self.admin_ctx, router.tenant_id) + network = self.plugin.get_ha_network(self.admin_ctx, + router['tenant_id']) allocs_before = self.plugin._get_allocated_vr_id(self.admin_ctx, network.network_id) router = self._create_router() - self._update_router(router.id, ha=False) + self._update_router(router['id'], ha=False) allocs_after = self.plugin._get_allocated_vr_id(self.admin_ctx, network.network_id) self.assertEqual(allocs_before, allocs_after) @@ -321,16 +325,17 @@ class L3HATestCase(L3HATestFramework): def test_add_ha_port_binding_failure_rolls_back_port(self): router = self._create_router() - device_filter = {'device_id': [router.id]} + device_filter = {'device_id': [router['id']]} ports_before = self.core_plugin.get_ports( self.admin_ctx, filters=device_filter) - network = self.plugin.get_ha_network(self.admin_ctx, router.tenant_id) + network = self.plugin.get_ha_network(self.admin_ctx, + router['tenant_id']) with mock.patch.object(self.plugin, '_create_ha_port_binding', side_effect=ValueError): self.assertRaises(ValueError, self.plugin.add_ha_port, - self.admin_ctx, router.id, network.network_id, - router.tenant_id) + self.admin_ctx, router['id'], network.network_id, + router['tenant_id']) ports_after = self.core_plugin.get_ports( self.admin_ctx, filters=device_filter) @@ -362,15 +367,17 @@ class L3HATestCase(L3HATestFramework): def test_create_ha_interfaces_binding_failure_rolls_back_ports(self): router = self._create_router() - network = self.plugin.get_ha_network(self.admin_ctx, router.tenant_id) - device_filter = {'device_id': [router.id]} + network = self.plugin.get_ha_network(self.admin_ctx, + router['tenant_id']) + device_filter = {'device_id': [router['id']]} ports_before = self.core_plugin.get_ports( self.admin_ctx, filters=device_filter) + router_db = self.plugin._get_router(self.admin_ctx, router['id']) with mock.patch.object(self.plugin, '_create_ha_port_binding', side_effect=ValueError): self.assertRaises(ValueError, self.plugin._create_ha_interfaces, - self.admin_ctx, router, network) + self.admin_ctx, router_db, network) ports_after = self.core_plugin.get_ports( self.admin_ctx, filters=device_filter) diff --git a/neutron/tests/unit/test_l3_schedulers.py b/neutron/tests/unit/test_l3_schedulers.py index b3eb4485911..09346758e05 100644 --- a/neutron/tests/unit/test_l3_schedulers.py +++ b/neutron/tests/unit/test_l3_schedulers.py @@ -1056,11 +1056,12 @@ class L3HATestCaseMixin(testlib_api.SqlTestCase, self._register_l3_agents() def _create_ha_router(self, ha=True, tenant_id='tenant1'): + self.adminContext.tenant_id = tenant_id router = {'name': 'router1', 'admin_state_up': True} if ha is not None: router['ha'] = ha - return self.plugin._create_router_db(self.adminContext, - router, tenant_id) + return self.plugin.create_router(self.adminContext, + {'router': router}) class L3_HA_scheduler_db_mixinTestCase(L3HATestCaseMixin): From ab0992cf5303752f054ad4d47f0a949aadbea83a Mon Sep 17 00:00:00 2001 From: Bradley Jones Date: Mon, 20 Oct 2014 12:34:55 +0100 Subject: [PATCH 122/128] Ensure ofagent unit tests handles random hashseeds Several tests in test_ofa_neutron_agent.py and test_ofa_flows.py fail when running the unit tests with hashseed 2701526934. This patch fixes the failing unit tests by specifying that assert_has_calls does not need to assert any order. Change-Id: I48d6601130f7de1f6eeb7333a17eddd82e7acbdf Partial-Bug: 1348818 --- neutron/tests/unit/ofagent/test_ofa_flows.py | 2 +- neutron/tests/unit/ofagent/test_ofa_neutron_agent.py | 12 ++++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/neutron/tests/unit/ofagent/test_ofa_flows.py b/neutron/tests/unit/ofagent/test_ofa_flows.py index af92f9b4920..a733288039a 100644 --- a/neutron/tests/unit/ofagent/test_ofa_flows.py +++ b/neutron/tests/unit/ofagent/test_ofa_flows.py @@ -84,7 +84,7 @@ class TestOFAgentFlows(ofa_test_base.OFATestBase): priority=0, table_id=12)), call(ofpp.OFPFlowMod(dp, priority=0, table_id=13)), ] - sendmsg.assert_has_calls(expected_calls) + sendmsg.assert_has_calls(expected_calls, any_order=True) def test_install_arp_responder(self): br = self.br diff --git a/neutron/tests/unit/ofagent/test_ofa_neutron_agent.py b/neutron/tests/unit/ofagent/test_ofa_neutron_agent.py index 638b40120ed..32d2721e859 100644 --- a/neutron/tests/unit/ofagent/test_ofa_neutron_agent.py +++ b/neutron/tests/unit/ofagent/test_ofa_neutron_agent.py @@ -662,7 +662,8 @@ class TestOFANeutronAgent(ofa_test_base.OFAAgentTestBase): mock.call(self.agent.local_vlan_map[self.lvms[0].net].vlan, 'ip2', 'mac2') ] - self.ryuapp.add_arp_table_entry.assert_has_calls(calls) + self.ryuapp.add_arp_table_entry.assert_has_calls(calls, + any_order=True) setup_tun_fn.assert_called_once_with(self.agent.int_br, '192.0.2.1', 'gre') @@ -685,7 +686,8 @@ class TestOFANeutronAgent(ofa_test_base.OFAAgentTestBase): mock.call(self.agent.local_vlan_map[self.lvms[0].net].vlan, 'ip2', 'mac2') ] - self.ryuapp.add_arp_table_entry.assert_has_calls(calls) + self.ryuapp.add_arp_table_entry.assert_has_calls(calls, + any_order=True) self.assertFalse(setup_tun_fn.called) def test_add_arp_table_entry_vlan(self): @@ -716,7 +718,8 @@ class TestOFANeutronAgent(ofa_test_base.OFAAgentTestBase): mock.call(self.agent.local_vlan_map[self.lvms[0].net].vlan, 'ip2') ] - self.ryuapp.del_arp_table_entry.assert_has_calls(calls) + self.ryuapp.del_arp_table_entry.assert_has_calls(calls, + any_order=True) cleanup_tun_fn.assert_called_once_with(self.agent.int_br, 1, 'gre') def _test_del_arp_table_entry_non_tunnel(self, network_type): @@ -738,7 +741,8 @@ class TestOFANeutronAgent(ofa_test_base.OFAAgentTestBase): mock.call(self.agent.local_vlan_map[self.lvms[0].net].vlan, 'ip2') ] - self.ryuapp.del_arp_table_entry.assert_has_calls(calls) + self.ryuapp.del_arp_table_entry.assert_has_calls(calls, + any_order=True) self.assertFalse(cleanup_tun_fn.called) def test_del_arp_table_entry_vlan(self): From 9902400039018d77aa3034147cfb24ca4b2353f6 Mon Sep 17 00:00:00 2001 From: rajeev Date: Mon, 13 Oct 2014 16:25:36 -0400 Subject: [PATCH 123/128] Fix race condition on processing DVR floating IPs Fip namespace and agent gateway port can be shared by multiple dvr routers. This change uses a set as the control variable for these shared resources and ensures that Test and Set operation on the control variable are performed atomically so that race conditions do not occur among multiple threads processing floating IPs. Limitation: The scope of this change is limited to addressing the race condition described in the bug report. It may not address other issues such as pre-existing issue with handling of DVR floatingips on agent restart. closes-bug: #1381238 Change-Id: I6dc2b7bad6e8ddbaa86c1f7a1e2028aeacc3afef --- neutron/agent/l3_agent.py | 28 ++++++++++++------- neutron/tests/unit/test_l3_agent.py | 42 +++++++++++++++++++++++++++-- 2 files changed, 59 insertions(+), 11 deletions(-) diff --git a/neutron/agent/l3_agent.py b/neutron/agent/l3_agent.py index 112bf77ad27..2bb784277f8 100644 --- a/neutron/agent/l3_agent.py +++ b/neutron/agent/l3_agent.py @@ -561,7 +561,7 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback, # dvr data self.agent_gateway_port = None - self.agent_fip_count = 0 + self.fip_ns_subscribers = set() self.local_subnets = LinkLocalAllocator( os.path.join(self.conf.state_path, 'fip-linklocal-networks'), FIP_LL_SUBNET) @@ -573,6 +573,15 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback, self.target_ex_net_id = None self.use_ipv6 = ipv6_utils.is_enabled() + def _fip_ns_subscribe(self, router_id): + is_first = (len(self.fip_ns_subscribers) == 0) + self.fip_ns_subscribers.add(router_id) + return is_first + + def _fip_ns_unsubscribe(self, router_id): + self.fip_ns_subscribers.discard(router_id) + return len(self.fip_ns_subscribers) == 0 + def _check_config_params(self): """Check items in configuration files. @@ -1096,9 +1105,11 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback, if ri.router['distributed']: # filter out only FIPs for this host/agent floating_ips = [i for i in floating_ips if i['host'] == self.host] - if floating_ips and self.agent_gateway_port is None: - self._create_agent_gateway_port(ri, floating_ips[0] - ['floating_network_id']) + if floating_ips: + is_first = self._fip_ns_subscribe(ri.router_id) + if is_first: + self._create_agent_gateway_port(ri, floating_ips[0] + ['floating_network_id']) if self.agent_gateway_port: if floating_ips and ri.dist_fip_count == 0: @@ -1662,7 +1673,6 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback, interface_name, floating_ip, distributed=True) # update internal structures - self.agent_fip_count = self.agent_fip_count + 1 ri.dist_fip_count = ri.dist_fip_count + 1 def floating_ip_removed_dist(self, ri, fip_cidr): @@ -1696,10 +1706,10 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback, self.local_subnets.release(ri.router_id) ri.rtr_fip_subnet = None ns_ip.del_veth(fip_2_rtr_name) - # clean up fip-namespace if this is the last FIP - self.agent_fip_count = self.agent_fip_count - 1 - if self.agent_fip_count == 0: - self._destroy_fip_namespace(fip_ns_name) + is_last = self._fip_ns_unsubscribe(ri.router_id) + # clean up fip-namespace if this is the last FIP + if is_last: + self._destroy_fip_namespace(fip_ns_name) def floating_forward_rules(self, floating_ip, fixed_ip): return [('PREROUTING', '-d %s -j DNAT --to %s' % diff --git a/neutron/tests/unit/test_l3_agent.py b/neutron/tests/unit/test_l3_agent.py index a8b74ea76f7..ed7f7b611e2 100644 --- a/neutron/tests/unit/test_l3_agent.py +++ b/neutron/tests/unit/test_l3_agent.py @@ -2178,8 +2178,9 @@ vrrp_instance VR_1 { 16, FIP_PRI) # TODO(mrsmith): add more asserts + @mock.patch.object(l3_agent.L3NATAgent, '_fip_ns_unsubscribe') @mock.patch.object(l3_agent.LinkLocalAllocator, '_write') - def test_floating_ip_removed_dist(self, write): + def test_floating_ip_removed_dist(self, write, unsubscribe): agent = l3_agent.L3NATAgent(HOSTNAME, self.conf) router = prepare_router_data() agent_gw_port = {'fixed_ips': [{'ip_address': '20.0.0.30', @@ -2194,6 +2195,7 @@ vrrp_instance VR_1 { ri = l3_agent.RouterInfo(router['id'], self.conf.root_helper, self.conf.use_namespaces, router=router) ri.dist_fip_count = 2 + agent.fip_ns_subscribers.add(ri.router_id) ri.floating_ips_dict['11.22.33.44'] = FIP_PRI ri.fip_2_rtr = '11.22.33.42' ri.rtr_2_fip = '11.22.33.40' @@ -2204,9 +2206,10 @@ vrrp_instance VR_1 { self.mock_rule.delete_rule_priority.assert_called_with(FIP_PRI) self.mock_ip_dev.route.delete_route.assert_called_with(fip_cidr, str(s.ip)) + self.assertFalse(unsubscribe.called, '_fip_ns_unsubscribe called!') + with mock.patch.object(agent, '_destroy_fip_namespace') as f: ri.dist_fip_count = 1 - agent.agent_fip_count = 1 fip_ns_name = agent.get_fip_ns_name( str(agent._fetch_external_net_id())) ri.rtr_fip_subnet = agent.local_subnets.allocate(ri.router_id) @@ -2217,6 +2220,7 @@ vrrp_instance VR_1 { self.mock_ip_dev.route.delete_gateway.assert_called_once_with( str(fip_to_rtr.ip), table=16) f.assert_called_once_with(fip_ns_name) + unsubscribe.assert_called_once_with(ri.router_id) def test_get_service_plugin_list(self): service_plugins = [p_const.L3_ROUTER_NAT] @@ -2252,6 +2256,40 @@ vrrp_instance VR_1 { self.assertRaises(messaging.MessagingTimeout, l3_agent.L3NATAgent, HOSTNAME, self.conf) + def test__fip_ns_subscribe_is_first_true(self): + agent = l3_agent.L3NATAgent(HOSTNAME, self.conf) + router_id = _uuid() + is_first = agent._fip_ns_subscribe(router_id) + self.assertTrue(is_first) + self.assertEqual(len(agent.fip_ns_subscribers), 1) + + def test__fip_ns_subscribe_is_first_false(self): + agent = l3_agent.L3NATAgent(HOSTNAME, self.conf) + router_id = _uuid() + router2_id = _uuid() + agent._fip_ns_subscribe(router_id) + is_first = agent._fip_ns_subscribe(router2_id) + self.assertFalse(is_first) + self.assertEqual(len(agent.fip_ns_subscribers), 2) + + def test__fip_ns_unsubscribe_is_last_true(self): + agent = l3_agent.L3NATAgent(HOSTNAME, self.conf) + router_id = _uuid() + agent.fip_ns_subscribers.add(router_id) + is_last = agent._fip_ns_unsubscribe(router_id) + self.assertTrue(is_last) + self.assertEqual(len(agent.fip_ns_subscribers), 0) + + def test__fip_ns_unsubscribe_is_last_false(self): + agent = l3_agent.L3NATAgent(HOSTNAME, self.conf) + router_id = _uuid() + router2_id = _uuid() + agent.fip_ns_subscribers.add(router_id) + agent.fip_ns_subscribers.add(router2_id) + is_last = agent._fip_ns_unsubscribe(router_id) + self.assertFalse(is_last) + self.assertEqual(len(agent.fip_ns_subscribers), 1) + class TestL3AgentEventHandler(base.BaseTestCase): From be6bd82d43fbcb8d1512d8eb5b7a106332364c31 Mon Sep 17 00:00:00 2001 From: Angus Lees Date: Mon, 25 Aug 2014 12:14:29 +1000 Subject: [PATCH 124/128] Remove duplicate import of constants module .. and enable corresponding pylint check now the only offending instance is fixed. Change-Id: I35a12ace46c872446b8c87d0aacce45e94d71bae --- .pylintrc | 1 - .../vmware/vshield/edge_appliance_driver.py | 14 ++++++-------- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/.pylintrc b/.pylintrc index c738c547c1d..394adcb8b88 100644 --- a/.pylintrc +++ b/.pylintrc @@ -56,7 +56,6 @@ disable= redefined-builtin, redefined-outer-name, redefine-in-handler, - reimported, signature-differs, star-args, super-init-not-called, diff --git a/neutron/plugins/vmware/vshield/edge_appliance_driver.py b/neutron/plugins/vmware/vshield/edge_appliance_driver.py index 9ce708457bf..700b989190f 100644 --- a/neutron/plugins/vmware/vshield/edge_appliance_driver.py +++ b/neutron/plugins/vmware/vshield/edge_appliance_driver.py @@ -16,9 +16,7 @@ from neutron.openstack.common import excutils from neutron.openstack.common import jsonutils from neutron.openstack.common import log as logging from neutron.plugins.vmware.common import utils -from neutron.plugins.vmware.vshield.common import ( - constants as vcns_const) -from neutron.plugins.vmware.vshield.common import constants as common_constants +from neutron.plugins.vmware.vshield.common import constants as vcns_const from neutron.plugins.vmware.vshield.common import exceptions from neutron.plugins.vmware.vshield.tasks import constants from neutron.plugins.vmware.vshield.tasks import tasks @@ -108,11 +106,11 @@ class EdgeApplianceDriver(object): def _edge_status_to_level(self, status): if status == 'GREEN': - status_level = common_constants.RouterStatus.ROUTER_STATUS_ACTIVE + status_level = vcns_const.RouterStatus.ROUTER_STATUS_ACTIVE elif status in ('GREY', 'YELLOW'): - status_level = common_constants.RouterStatus.ROUTER_STATUS_DOWN + status_level = vcns_const.RouterStatus.ROUTER_STATUS_DOWN else: - status_level = common_constants.RouterStatus.ROUTER_STATUS_ERROR + status_level = vcns_const.RouterStatus.ROUTER_STATUS_ERROR return status_level def _enable_loadbalancer(self, edge): @@ -131,13 +129,13 @@ class EdgeApplianceDriver(object): except exceptions.VcnsApiException as e: LOG.exception(_("VCNS: Failed to get edge status:\n%s"), e.response) - status_level = common_constants.RouterStatus.ROUTER_STATUS_ERROR + status_level = vcns_const.RouterStatus.ROUTER_STATUS_ERROR try: desc = jsonutils.loads(e.response) if desc.get('errorCode') == ( vcns_const.VCNS_ERROR_CODE_EDGE_NOT_RUNNING): status_level = ( - common_constants.RouterStatus.ROUTER_STATUS_DOWN) + vcns_const.RouterStatus.ROUTER_STATUS_DOWN) except ValueError: LOG.exception(e.response) From f82a5117f6f484a649eadff4b0e6be9a5a4d18bb Mon Sep 17 00:00:00 2001 From: OpenStack Proposal Bot Date: Tue, 21 Oct 2014 12:11:19 +0000 Subject: [PATCH 125/128] Updated from global requirements Change-Id: Idcbd730f5c781d21ea75e7bfb15959c8f517980f --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index cc819e981fa..a8b4883e842 100644 --- a/requirements.txt +++ b/requirements.txt @@ -9,7 +9,7 @@ Routes>=1.12.3,!=2.0 anyjson>=0.3.3 argparse Babel>=1.3 -eventlet>=0.15.1 +eventlet>=0.15.2 greenlet>=0.3.2 httplib2>=0.7.5 requests>=2.2.0,!=2.4.0 From d712663b99520e6d26269b0ca193527603178742 Mon Sep 17 00:00:00 2001 From: Carl Baldwin Date: Mon, 20 Oct 2014 21:48:42 +0000 Subject: [PATCH 126/128] Move disabling of metadata and ipv6_ra to _destroy_router_namespace I noticed that disable_ipv6_ra is called from the wrong place and that in some cases it was called with a bogus router_id because the code made an incorrect assumption about the context. In other case, it was never called because _destroy_router_namespace was being called directly. This patch moves the disabling of metadata and ipv6_ra in to _destroy_router_namespace to ensure they get called correctly and avoid duplication. Change-Id: Ia76a5ff4200df072b60481f2ee49286b78ece6c4 Closes-Bug: #1383495 --- neutron/agent/l3_agent.py | 9 ++++----- neutron/tests/unit/services/vpn/test_vpn_agent.py | 5 +++-- neutron/tests/unit/test_l3_agent.py | 5 ----- 3 files changed, 7 insertions(+), 12 deletions(-) diff --git a/neutron/agent/l3_agent.py b/neutron/agent/l3_agent.py index 112bf77ad27..0784ad73a3e 100644 --- a/neutron/agent/l3_agent.py +++ b/neutron/agent/l3_agent.py @@ -635,7 +635,6 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback, one attempt will be made to delete them. """ for ns in router_namespaces: - ra.disable_ipv6_ra(ns[len(NS_PREFIX):], ns, self.root_helper) try: self._destroy_namespace(ns) except RuntimeError: @@ -645,8 +644,6 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback, def _destroy_namespace(self, ns): if ns.startswith(NS_PREFIX): - if self.conf.enable_metadata_proxy: - self._destroy_metadata_proxy(ns[len(NS_PREFIX):], ns) self._destroy_router_namespace(ns) elif ns.startswith(FIP_NS_PREFIX): self._destroy_fip_namespace(ns) @@ -695,6 +692,10 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback, self.agent_gateway_port = None def _destroy_router_namespace(self, ns): + router_id = ns[len(NS_PREFIX):] + ra.disable_ipv6_ra(router_id, ns, self.root_helper) + if self.conf.enable_metadata_proxy: + self._destroy_metadata_proxy(router_id, ns) ns_ip = ip_lib.IPWrapper(self.root_helper, namespace=ns) for d in ns_ip.get_devices(exclude_loopback=True): if d.name.startswith(INTERNAL_DEV_PREFIX): @@ -798,8 +799,6 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback, for c, r in self.metadata_nat_rules(): ri.iptables_manager.ipv4['nat'].remove_rule(c, r) ri.iptables_manager.apply() - if self.conf.enable_metadata_proxy: - self._destroy_metadata_proxy(ri.router_id, ri.ns_name) del self.router_info[router_id] self._destroy_router_namespace(ri.ns_name) diff --git a/neutron/tests/unit/services/vpn/test_vpn_agent.py b/neutron/tests/unit/services/vpn/test_vpn_agent.py index 987b26cd4d1..d6ab140fc30 100644 --- a/neutron/tests/unit/services/vpn/test_vpn_agent.py +++ b/neutron/tests/unit/services/vpn/test_vpn_agent.py @@ -171,9 +171,10 @@ class TestVPNAgent(base.BaseTestCase): 'neutron.agent.linux.iptables_manager.IptablesManager').start() router_id = _uuid() ri = l3_agent.RouterInfo(router_id, self.conf.root_helper, - self.conf.use_namespaces, {}) + self.conf.use_namespaces, {}, + ns_name="qrouter-%s" % router_id) ri.router = { - 'id': _uuid(), + 'id': router_id, 'admin_state_up': True, 'routes': [], 'external_gateway_info': {}, diff --git a/neutron/tests/unit/test_l3_agent.py b/neutron/tests/unit/test_l3_agent.py index fb06e6b19cd..bf9b05de297 100644 --- a/neutron/tests/unit/test_l3_agent.py +++ b/neutron/tests/unit/test_l3_agent.py @@ -2016,15 +2016,10 @@ vrrp_instance VR_1 { ns_list = agent._list_namespaces() agent._cleanup_namespaces(ns_list, [r['id'] for r in router_list]) - # Expect process manager to disable one radvd per stale namespace - expected_pm_disables = len(stale_namespace_list) - # Expect process manager to disable metadata proxy per qrouter ns qrouters = [n for n in stale_namespace_list if n.startswith(l3_agent.NS_PREFIX)] - expected_pm_disables += len(qrouters) - self.assertEqual(expected_pm_disables, pm.disable.call_count) self.assertEqual(agent._destroy_router_namespace.call_count, len(qrouters)) self.assertEqual(agent._destroy_snat_namespace.call_count, From 17204e8f02fdad046dabdb8b31397289d72c877b Mon Sep 17 00:00:00 2001 From: OpenStack Proposal Bot Date: Wed, 22 Oct 2014 06:20:15 +0000 Subject: [PATCH 127/128] Imported Translations from Transifex For more information about this automatic import see: https://wiki.openstack.org/wiki/Translations/Infrastructure Change-Id: I58db0476c810aa901463b07c42182eef0adb5114 --- .../locale/de/LC_MESSAGES/neutron-log-info.po | 161 ++- .../en_AU/LC_MESSAGES/neutron-log-info.po | 149 +- .../en_GB/LC_MESSAGES/neutron-log-info.po | 149 +- .../locale/es/LC_MESSAGES/neutron-log-info.po | 165 ++- .../locale/fr/LC_MESSAGES/neutron-log-info.po | 181 ++- .../locale/it/LC_MESSAGES/neutron-log-info.po | 163 ++- .../locale/ja/LC_MESSAGES/neutron-log-info.po | 167 ++- .../ko_KR/LC_MESSAGES/neutron-log-info.po | 169 ++- neutron/locale/neutron-log-error.pot | 109 +- neutron/locale/neutron-log-info.pot | 149 +- neutron/locale/neutron-log-warning.pot | 43 +- neutron/locale/neutron.pot | 1217 ++++++----------- .../pt_BR/LC_MESSAGES/neutron-log-info.po | 169 ++- .../te_IN/LC_MESSAGES/neutron-log-info.po | 149 +- .../vi_VN/LC_MESSAGES/neutron-log-info.po | 149 +- .../zh_CN/LC_MESSAGES/neutron-log-info.po | 163 ++- .../zh_TW/LC_MESSAGES/neutron-log-info.po | 165 ++- 17 files changed, 2255 insertions(+), 1362 deletions(-) diff --git a/neutron/locale/de/LC_MESSAGES/neutron-log-info.po b/neutron/locale/de/LC_MESSAGES/neutron-log-info.po index a437912b819..10219668b79 100644 --- a/neutron/locale/de/LC_MESSAGES/neutron-log-info.po +++ b/neutron/locale/de/LC_MESSAGES/neutron-log-info.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Neutron\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-10-08 06:09+0000\n" -"PO-Revision-Date: 2014-08-17 05:19+0000\n" +"POT-Creation-Date: 2014-10-22 06:19+0000\n" +"PO-Revision-Date: 2014-10-21 10:51+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: German (http://www.transifex.com/projects/p/neutron/language/" "de/)\n" @@ -26,6 +26,53 @@ msgid "" "Inserting policy:%(new_policy)s in place of deprecated policy:%(old_policy)s" msgstr "" +#: neutron/agent/securitygroups_rpc.py:80 +msgid "Disabled security-group extension." +msgstr "Sicherheitsgruppenerweiterung wurde inaktiviert." + +#: neutron/agent/securitygroups_rpc.py:82 +msgid "Disabled allowed-address-pairs extension." +msgstr "" + +#: neutron/agent/securitygroups_rpc.py:198 +#, python-format +msgid "" +"Skipping method %s as firewall is disabled or configured as " +"NoopFirewallDriver." +msgstr "" + +#: neutron/agent/securitygroups_rpc.py:209 +#, python-format +msgid "Preparing filters for devices %s" +msgstr "Vorbereiten von Filtern für Geräte %s" + +#: neutron/agent/securitygroups_rpc.py:239 +#, python-format +msgid "Security group rule updated %r" +msgstr "Sicherheitsgruppenregel aktualisiert %r" + +#: neutron/agent/securitygroups_rpc.py:246 +#, python-format +msgid "Security group member updated %r" +msgstr "Sicherheitsgruppenmitglied aktualisiert %r" + +#: neutron/agent/securitygroups_rpc.py:268 +msgid "Provider rule updated" +msgstr "Provider-Regel aktualisiert" + +#: neutron/agent/securitygroups_rpc.py:280 +#, python-format +msgid "Remove device filter for %r" +msgstr "Gerätefilter für %r entfernen" + +#: neutron/agent/securitygroups_rpc.py:290 +msgid "Refresh firewall rules" +msgstr "Firewallregeln aktualisieren" + +#: neutron/agent/securitygroups_rpc.py:294 +msgid "No ports here to refresh firewall" +msgstr "" + #: neutron/agent/linux/ovs_lib.py:422 #, python-format msgid "Port %(port_id)s not present in bridge %(br_name)s" @@ -35,7 +82,7 @@ msgstr "" msgid "IPv6 is not enabled on this system." msgstr "" -#: neutron/db/l3_agentschedulers_db.py:82 +#: neutron/db/l3_agentschedulers_db.py:83 msgid "" "Skipping period L3 agent status check because automatic router rescheduling " "is disabled." @@ -60,6 +107,21 @@ msgstr "" msgid "%d probe(s) deleted" msgstr "" +#: neutron/openstack/common/eventlet_backdoor.py:140 +#, python-format +msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" +msgstr "Eventlet backdoor hört auf %(port)s für Prozess %(pid)d" + +#: neutron/openstack/common/lockutils.py:82 +#, python-format +msgid "Created lock path: %s" +msgstr "Sperrpfad erzeugt: %s" + +#: neutron/openstack/common/lockutils.py:194 +#, python-format +msgid "Failed to remove file %(file)s" +msgstr "Löschen der Datei %(file)s fehlgeschlagen" + #: neutron/openstack/common/periodic_task.py:126 #, python-format msgid "Skipping periodic task %(task)s because its interval is negative" @@ -71,55 +133,55 @@ msgstr "" msgid "Skipping periodic task %(task)s because it is disabled" msgstr "Überspringe periodische Aufgabe %(task)s weil sie deaktiviert ist" -#: neutron/openstack/common/service.py:176 +#: neutron/openstack/common/service.py:174 #, python-format msgid "Caught %s, exiting" msgstr "%s abgefangen. Vorgang wird beendet" -#: neutron/openstack/common/service.py:240 +#: neutron/openstack/common/service.py:232 msgid "Parent process has died unexpectedly, exiting" msgstr "" "Übergeordneter Prozess wurde unerwartet abgebrochen. Vorgang wird beendet" -#: neutron/openstack/common/service.py:271 +#: neutron/openstack/common/service.py:263 #, python-format msgid "Child caught %s, exiting" msgstr "Untergeordnetes Element %s abgefangen; Vorgang wird beendet" -#: neutron/openstack/common/service.py:310 +#: neutron/openstack/common/service.py:302 msgid "Forking too fast, sleeping" msgstr "Verzweigung zu schnell; im Ruhemodus" -#: neutron/openstack/common/service.py:329 +#: neutron/openstack/common/service.py:321 #, python-format msgid "Started child %d" msgstr "Untergeordnetes Element %d gestartet" -#: neutron/openstack/common/service.py:339 +#: neutron/openstack/common/service.py:331 #, python-format msgid "Starting %d workers" msgstr "Starten von %d Workers" -#: neutron/openstack/common/service.py:356 +#: neutron/openstack/common/service.py:348 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "Untergeordnetes Element %(pid)d durch Signal %(sig)d abgebrochen" -#: neutron/openstack/common/service.py:360 +#: neutron/openstack/common/service.py:352 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "Untergeordnete %(pid)s mit Status %(code)d beendet" -#: neutron/openstack/common/service.py:399 +#: neutron/openstack/common/service.py:391 #, python-format msgid "Caught %s, stopping children" msgstr "%s abgefangen, untergeordnete Elemente werden gestoppt" -#: neutron/openstack/common/service.py:408 +#: neutron/openstack/common/service.py:400 msgid "Wait called after thread killed. Cleaning up." msgstr "Warten aufgerufen nach dem der Thread abgebrochen wurde. Bereinige." -#: neutron/openstack/common/service.py:424 +#: neutron/openstack/common/service.py:416 #, python-format msgid "Waiting on %d children to exit" msgstr "Warten auf Beenden von %d untergeordneten Elementen" @@ -160,60 +222,49 @@ msgstr "" msgid "Sync between Neutron and VSD completed successfully" msgstr "" -#: neutron/plugins/ofagent/agent/arp_lib.py:137 +#: neutron/plugins/ofagent/agent/arp_lib.py:142 msgid "No bridge is set" msgstr "" -#: neutron/plugins/ofagent/agent/arp_lib.py:140 +#: neutron/plugins/ofagent/agent/arp_lib.py:145 #, python-format msgid "Unknown bridge %(dpid)s ours %(ours)s" msgstr "" -#: neutron/plugins/ofagent/agent/arp_lib.py:147 -#, python-format -msgid "packet-in dpid %(dpid)s in_port %(port)s pkt %(pkt)s" -msgstr "" - -#: neutron/plugins/ofagent/agent/arp_lib.py:152 +#: neutron/plugins/ofagent/agent/arp_lib.py:163 msgid "drop non tenant packet" msgstr "" -#: neutron/plugins/ofagent/agent/arp_lib.py:157 -msgid "drop non-ethernet packet" -msgstr "" - -#: neutron/plugins/ofagent/agent/arp_lib.py:162 -msgid "drop non-arp packet" -msgstr "" - -#: neutron/plugins/ofagent/agent/arp_lib.py:171 +#: neutron/plugins/ofagent/agent/arp_lib.py:182 #, python-format msgid "unknown network %s" msgstr "" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:165 msgid "Agent initialized successfully, now running... " -msgstr "" +msgstr "Agent erfolgreich initialisiert, läuft jetzt... " #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:452 #, python-format msgid "Assigning %(vlan_id)s as local vlan for net-id=%(net_uuid)s" msgstr "" +"Zuweisung von %(vlan_id)s als lokale VLAN-Adresse für net-id=%(net_uuid)s" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:502 #, python-format msgid "Reclaiming vlan = %(vlan_id)s from net-id = %(net_uuid)s" -msgstr "" +msgstr "Zurückfordern von vlan = %(vlan_id)s von net-id = %(net_uuid)s" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:570 #, python-format msgid "port_unbound() net_uuid %s not in local_vlan_map" -msgstr "" +msgstr "'port_unbound()' 'net_uuid' %s nicht in 'local_vlan_map'" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:651 #, python-format msgid "Mapping physical network %(physical_network)s to bridge %(bridge)s" msgstr "" +"Zuordnung von physischem Netz %(physical_network)s zu Brücke %(bridge)s" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:785 #, python-format @@ -225,7 +276,7 @@ msgstr "" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:799 #, python-format msgid "Port %(device)s updated. Details: %(details)s" -msgstr "" +msgstr "Port %(device)s aktualisiert. Details: %(details)s" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:818 #, python-format @@ -235,17 +286,53 @@ msgstr "" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:829 #, python-format msgid "Attachment %s removed" -msgstr "" +msgstr "Zusatzeinheit %s entfernt" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:912 msgid "Agent tunnel out of sync with plugin!" +msgstr "Agententunnel nicht synchron mit Plug-in!" + +#: neutron/services/vpn/plugin.py:45 +#, python-format +msgid "VPN plugin using service driver: %s" msgstr "" -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:57 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:335 +msgid "Sending status report update to plugin" +msgstr "" + +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:715 +#, python-format +msgid "FAILED: Create of IPSec site-to-site connection %s" +msgstr "" + +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:718 +#, python-format +msgid "SUCCESS: Created IPSec site-to-site connection %s" +msgstr "" + +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:733 +#, python-format +msgid "SUCCESS: Deleted IPSec site-to-site connection %s" +msgstr "" + +#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:56 #, python-format msgid "Scanning config files %s for Cisco CSR configurations" msgstr "" +#: neutron/services/vpn/service_drivers/cisco_csr_db.py:226 +#, python-format +msgid "" +"Mapped connection %(conn_id)s to Tunnel%(tunnel_id)d using IKE policy ID " +"%(ike_id)d and IPSec policy ID %(ipsec_id)d" +msgstr "" + +#: neutron/services/vpn/service_drivers/cisco_csr_db.py:238 +#, python-format +msgid "Removed mapping for connection %s" +msgstr "" + #: neutron/tests/unit/vmware/apiclient/test_api_eventlet_request.py:63 #, python-format msgid "spawned: %d" diff --git a/neutron/locale/en_AU/LC_MESSAGES/neutron-log-info.po b/neutron/locale/en_AU/LC_MESSAGES/neutron-log-info.po index 90f52faf597..fd77cc90b5a 100644 --- a/neutron/locale/en_AU/LC_MESSAGES/neutron-log-info.po +++ b/neutron/locale/en_AU/LC_MESSAGES/neutron-log-info.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Neutron\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-10-08 06:09+0000\n" -"PO-Revision-Date: 2014-07-18 20:49+0000\n" +"POT-Creation-Date: 2014-10-22 06:19+0000\n" +"PO-Revision-Date: 2014-10-21 10:51+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: English (Australia) (http://www.transifex.com/projects/p/" "neutron/language/en_AU/)\n" @@ -25,6 +25,53 @@ msgid "" "Inserting policy:%(new_policy)s in place of deprecated policy:%(old_policy)s" msgstr "" +#: neutron/agent/securitygroups_rpc.py:80 +msgid "Disabled security-group extension." +msgstr "" + +#: neutron/agent/securitygroups_rpc.py:82 +msgid "Disabled allowed-address-pairs extension." +msgstr "" + +#: neutron/agent/securitygroups_rpc.py:198 +#, python-format +msgid "" +"Skipping method %s as firewall is disabled or configured as " +"NoopFirewallDriver." +msgstr "" + +#: neutron/agent/securitygroups_rpc.py:209 +#, python-format +msgid "Preparing filters for devices %s" +msgstr "" + +#: neutron/agent/securitygroups_rpc.py:239 +#, python-format +msgid "Security group rule updated %r" +msgstr "" + +#: neutron/agent/securitygroups_rpc.py:246 +#, python-format +msgid "Security group member updated %r" +msgstr "" + +#: neutron/agent/securitygroups_rpc.py:268 +msgid "Provider rule updated" +msgstr "" + +#: neutron/agent/securitygroups_rpc.py:280 +#, python-format +msgid "Remove device filter for %r" +msgstr "" + +#: neutron/agent/securitygroups_rpc.py:290 +msgid "Refresh firewall rules" +msgstr "" + +#: neutron/agent/securitygroups_rpc.py:294 +msgid "No ports here to refresh firewall" +msgstr "" + #: neutron/agent/linux/ovs_lib.py:422 #, python-format msgid "Port %(port_id)s not present in bridge %(br_name)s" @@ -34,7 +81,7 @@ msgstr "" msgid "IPv6 is not enabled on this system." msgstr "" -#: neutron/db/l3_agentschedulers_db.py:82 +#: neutron/db/l3_agentschedulers_db.py:83 msgid "" "Skipping period L3 agent status check because automatic router rescheduling " "is disabled." @@ -59,6 +106,21 @@ msgstr "" msgid "%d probe(s) deleted" msgstr "" +#: neutron/openstack/common/eventlet_backdoor.py:140 +#, python-format +msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" +msgstr "Eventlet backdoor listening on %(port)s for process %(pid)d" + +#: neutron/openstack/common/lockutils.py:82 +#, python-format +msgid "Created lock path: %s" +msgstr "Created lock path: %s" + +#: neutron/openstack/common/lockutils.py:194 +#, python-format +msgid "Failed to remove file %(file)s" +msgstr "" + #: neutron/openstack/common/periodic_task.py:126 #, python-format msgid "Skipping periodic task %(task)s because its interval is negative" @@ -69,54 +131,54 @@ msgstr "Skipping periodic task %(task)s because its interval is negative" msgid "Skipping periodic task %(task)s because it is disabled" msgstr "Skipping periodic task %(task)s because it is disabled" -#: neutron/openstack/common/service.py:176 +#: neutron/openstack/common/service.py:174 #, python-format msgid "Caught %s, exiting" msgstr "Caught %s, exiting" -#: neutron/openstack/common/service.py:240 +#: neutron/openstack/common/service.py:232 msgid "Parent process has died unexpectedly, exiting" msgstr "Parent process has died unexpectedly, exiting" -#: neutron/openstack/common/service.py:271 +#: neutron/openstack/common/service.py:263 #, python-format msgid "Child caught %s, exiting" msgstr "" -#: neutron/openstack/common/service.py:310 +#: neutron/openstack/common/service.py:302 msgid "Forking too fast, sleeping" msgstr "Forking too fast, sleeping" -#: neutron/openstack/common/service.py:329 +#: neutron/openstack/common/service.py:321 #, python-format msgid "Started child %d" msgstr "Started child %d" -#: neutron/openstack/common/service.py:339 +#: neutron/openstack/common/service.py:331 #, python-format msgid "Starting %d workers" msgstr "Starting %d workers" -#: neutron/openstack/common/service.py:356 +#: neutron/openstack/common/service.py:348 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "Child %(pid)d killed by signal %(sig)d" -#: neutron/openstack/common/service.py:360 +#: neutron/openstack/common/service.py:352 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "Child %(pid)s exited with status %(code)d" -#: neutron/openstack/common/service.py:399 +#: neutron/openstack/common/service.py:391 #, python-format msgid "Caught %s, stopping children" msgstr "Caught %s, stopping children" -#: neutron/openstack/common/service.py:408 +#: neutron/openstack/common/service.py:400 msgid "Wait called after thread killed. Cleaning up." msgstr "" -#: neutron/openstack/common/service.py:424 +#: neutron/openstack/common/service.py:416 #, python-format msgid "Waiting on %d children to exit" msgstr "Waiting on %d children to exit" @@ -157,33 +219,20 @@ msgstr "" msgid "Sync between Neutron and VSD completed successfully" msgstr "" -#: neutron/plugins/ofagent/agent/arp_lib.py:137 +#: neutron/plugins/ofagent/agent/arp_lib.py:142 msgid "No bridge is set" msgstr "" -#: neutron/plugins/ofagent/agent/arp_lib.py:140 +#: neutron/plugins/ofagent/agent/arp_lib.py:145 #, python-format msgid "Unknown bridge %(dpid)s ours %(ours)s" msgstr "" -#: neutron/plugins/ofagent/agent/arp_lib.py:147 -#, python-format -msgid "packet-in dpid %(dpid)s in_port %(port)s pkt %(pkt)s" -msgstr "" - -#: neutron/plugins/ofagent/agent/arp_lib.py:152 +#: neutron/plugins/ofagent/agent/arp_lib.py:163 msgid "drop non tenant packet" msgstr "" -#: neutron/plugins/ofagent/agent/arp_lib.py:157 -msgid "drop non-ethernet packet" -msgstr "" - -#: neutron/plugins/ofagent/agent/arp_lib.py:162 -msgid "drop non-arp packet" -msgstr "" - -#: neutron/plugins/ofagent/agent/arp_lib.py:171 +#: neutron/plugins/ofagent/agent/arp_lib.py:182 #, python-format msgid "unknown network %s" msgstr "" @@ -238,11 +287,47 @@ msgstr "" msgid "Agent tunnel out of sync with plugin!" msgstr "" -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:57 +#: neutron/services/vpn/plugin.py:45 +#, python-format +msgid "VPN plugin using service driver: %s" +msgstr "" + +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:335 +msgid "Sending status report update to plugin" +msgstr "" + +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:715 +#, python-format +msgid "FAILED: Create of IPSec site-to-site connection %s" +msgstr "" + +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:718 +#, python-format +msgid "SUCCESS: Created IPSec site-to-site connection %s" +msgstr "" + +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:733 +#, python-format +msgid "SUCCESS: Deleted IPSec site-to-site connection %s" +msgstr "" + +#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:56 #, python-format msgid "Scanning config files %s for Cisco CSR configurations" msgstr "" +#: neutron/services/vpn/service_drivers/cisco_csr_db.py:226 +#, python-format +msgid "" +"Mapped connection %(conn_id)s to Tunnel%(tunnel_id)d using IKE policy ID " +"%(ike_id)d and IPSec policy ID %(ipsec_id)d" +msgstr "" + +#: neutron/services/vpn/service_drivers/cisco_csr_db.py:238 +#, python-format +msgid "Removed mapping for connection %s" +msgstr "" + #: neutron/tests/unit/vmware/apiclient/test_api_eventlet_request.py:63 #, python-format msgid "spawned: %d" diff --git a/neutron/locale/en_GB/LC_MESSAGES/neutron-log-info.po b/neutron/locale/en_GB/LC_MESSAGES/neutron-log-info.po index 4fc4c61038f..c9843171015 100644 --- a/neutron/locale/en_GB/LC_MESSAGES/neutron-log-info.po +++ b/neutron/locale/en_GB/LC_MESSAGES/neutron-log-info.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Neutron\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-10-08 06:09+0000\n" -"PO-Revision-Date: 2014-08-17 05:19+0000\n" +"POT-Creation-Date: 2014-10-22 06:19+0000\n" +"PO-Revision-Date: 2014-10-21 10:51+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: English (United Kingdom) (http://www.transifex.com/projects/p/" "neutron/language/en_GB/)\n" @@ -27,6 +27,53 @@ msgid "" msgstr "" "Inserting policy:%(new_policy)s in place of deprecated policy:%(old_policy)s" +#: neutron/agent/securitygroups_rpc.py:80 +msgid "Disabled security-group extension." +msgstr "" + +#: neutron/agent/securitygroups_rpc.py:82 +msgid "Disabled allowed-address-pairs extension." +msgstr "" + +#: neutron/agent/securitygroups_rpc.py:198 +#, python-format +msgid "" +"Skipping method %s as firewall is disabled or configured as " +"NoopFirewallDriver." +msgstr "" + +#: neutron/agent/securitygroups_rpc.py:209 +#, python-format +msgid "Preparing filters for devices %s" +msgstr "" + +#: neutron/agent/securitygroups_rpc.py:239 +#, python-format +msgid "Security group rule updated %r" +msgstr "" + +#: neutron/agent/securitygroups_rpc.py:246 +#, python-format +msgid "Security group member updated %r" +msgstr "" + +#: neutron/agent/securitygroups_rpc.py:268 +msgid "Provider rule updated" +msgstr "" + +#: neutron/agent/securitygroups_rpc.py:280 +#, python-format +msgid "Remove device filter for %r" +msgstr "" + +#: neutron/agent/securitygroups_rpc.py:290 +msgid "Refresh firewall rules" +msgstr "" + +#: neutron/agent/securitygroups_rpc.py:294 +msgid "No ports here to refresh firewall" +msgstr "" + #: neutron/agent/linux/ovs_lib.py:422 #, python-format msgid "Port %(port_id)s not present in bridge %(br_name)s" @@ -36,7 +83,7 @@ msgstr "" msgid "IPv6 is not enabled on this system." msgstr "" -#: neutron/db/l3_agentschedulers_db.py:82 +#: neutron/db/l3_agentschedulers_db.py:83 msgid "" "Skipping period L3 agent status check because automatic router rescheduling " "is disabled." @@ -61,6 +108,21 @@ msgstr "" msgid "%d probe(s) deleted" msgstr "" +#: neutron/openstack/common/eventlet_backdoor.py:140 +#, python-format +msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" +msgstr "Eventlet backdoor listening on %(port)s for process %(pid)d" + +#: neutron/openstack/common/lockutils.py:82 +#, python-format +msgid "Created lock path: %s" +msgstr "Created lock path: %s" + +#: neutron/openstack/common/lockutils.py:194 +#, python-format +msgid "Failed to remove file %(file)s" +msgstr "Failed to remove file %(file)s" + #: neutron/openstack/common/periodic_task.py:126 #, python-format msgid "Skipping periodic task %(task)s because its interval is negative" @@ -71,54 +133,54 @@ msgstr "Skipping periodic task %(task)s because its interval is negative" msgid "Skipping periodic task %(task)s because it is disabled" msgstr "Skipping periodic task %(task)s because it is disabled" -#: neutron/openstack/common/service.py:176 +#: neutron/openstack/common/service.py:174 #, python-format msgid "Caught %s, exiting" msgstr "Caught %s, exiting" -#: neutron/openstack/common/service.py:240 +#: neutron/openstack/common/service.py:232 msgid "Parent process has died unexpectedly, exiting" msgstr "Parent process has died unexpectedly, exiting" -#: neutron/openstack/common/service.py:271 +#: neutron/openstack/common/service.py:263 #, python-format msgid "Child caught %s, exiting" msgstr "Child caught %s, exiting" -#: neutron/openstack/common/service.py:310 +#: neutron/openstack/common/service.py:302 msgid "Forking too fast, sleeping" msgstr "Forking too fast, sleeping" -#: neutron/openstack/common/service.py:329 +#: neutron/openstack/common/service.py:321 #, python-format msgid "Started child %d" msgstr "Started child %d" -#: neutron/openstack/common/service.py:339 +#: neutron/openstack/common/service.py:331 #, python-format msgid "Starting %d workers" msgstr "Starting %d workers" -#: neutron/openstack/common/service.py:356 +#: neutron/openstack/common/service.py:348 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "Child %(pid)d killed by signal %(sig)d" -#: neutron/openstack/common/service.py:360 +#: neutron/openstack/common/service.py:352 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "Child %(pid)s exited with status %(code)d" -#: neutron/openstack/common/service.py:399 +#: neutron/openstack/common/service.py:391 #, python-format msgid "Caught %s, stopping children" msgstr "Caught %s, stopping children" -#: neutron/openstack/common/service.py:408 +#: neutron/openstack/common/service.py:400 msgid "Wait called after thread killed. Cleaning up." msgstr "Wait called after thread killed. Cleaning up." -#: neutron/openstack/common/service.py:424 +#: neutron/openstack/common/service.py:416 #, python-format msgid "Waiting on %d children to exit" msgstr "Waiting on %d children to exit" @@ -159,33 +221,20 @@ msgstr "" msgid "Sync between Neutron and VSD completed successfully" msgstr "" -#: neutron/plugins/ofagent/agent/arp_lib.py:137 +#: neutron/plugins/ofagent/agent/arp_lib.py:142 msgid "No bridge is set" msgstr "" -#: neutron/plugins/ofagent/agent/arp_lib.py:140 +#: neutron/plugins/ofagent/agent/arp_lib.py:145 #, python-format msgid "Unknown bridge %(dpid)s ours %(ours)s" msgstr "" -#: neutron/plugins/ofagent/agent/arp_lib.py:147 -#, python-format -msgid "packet-in dpid %(dpid)s in_port %(port)s pkt %(pkt)s" -msgstr "" - -#: neutron/plugins/ofagent/agent/arp_lib.py:152 +#: neutron/plugins/ofagent/agent/arp_lib.py:163 msgid "drop non tenant packet" msgstr "" -#: neutron/plugins/ofagent/agent/arp_lib.py:157 -msgid "drop non-ethernet packet" -msgstr "" - -#: neutron/plugins/ofagent/agent/arp_lib.py:162 -msgid "drop non-arp packet" -msgstr "" - -#: neutron/plugins/ofagent/agent/arp_lib.py:171 +#: neutron/plugins/ofagent/agent/arp_lib.py:182 #, python-format msgid "unknown network %s" msgstr "" @@ -240,11 +289,47 @@ msgstr "" msgid "Agent tunnel out of sync with plugin!" msgstr "" -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:57 +#: neutron/services/vpn/plugin.py:45 +#, python-format +msgid "VPN plugin using service driver: %s" +msgstr "" + +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:335 +msgid "Sending status report update to plugin" +msgstr "" + +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:715 +#, python-format +msgid "FAILED: Create of IPSec site-to-site connection %s" +msgstr "" + +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:718 +#, python-format +msgid "SUCCESS: Created IPSec site-to-site connection %s" +msgstr "" + +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:733 +#, python-format +msgid "SUCCESS: Deleted IPSec site-to-site connection %s" +msgstr "" + +#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:56 #, python-format msgid "Scanning config files %s for Cisco CSR configurations" msgstr "" +#: neutron/services/vpn/service_drivers/cisco_csr_db.py:226 +#, python-format +msgid "" +"Mapped connection %(conn_id)s to Tunnel%(tunnel_id)d using IKE policy ID " +"%(ike_id)d and IPSec policy ID %(ipsec_id)d" +msgstr "" + +#: neutron/services/vpn/service_drivers/cisco_csr_db.py:238 +#, python-format +msgid "Removed mapping for connection %s" +msgstr "" + #: neutron/tests/unit/vmware/apiclient/test_api_eventlet_request.py:63 #, python-format msgid "spawned: %d" diff --git a/neutron/locale/es/LC_MESSAGES/neutron-log-info.po b/neutron/locale/es/LC_MESSAGES/neutron-log-info.po index 0c9c7ea7e8e..574dff7374f 100644 --- a/neutron/locale/es/LC_MESSAGES/neutron-log-info.po +++ b/neutron/locale/es/LC_MESSAGES/neutron-log-info.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Neutron\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-10-08 06:09+0000\n" -"PO-Revision-Date: 2014-07-18 20:49+0000\n" +"POT-Creation-Date: 2014-10-22 06:19+0000\n" +"PO-Revision-Date: 2014-10-21 11:04+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: Spanish (http://www.transifex.com/projects/p/neutron/language/" "es/)\n" @@ -25,6 +25,53 @@ msgid "" "Inserting policy:%(new_policy)s in place of deprecated policy:%(old_policy)s" msgstr "" +#: neutron/agent/securitygroups_rpc.py:80 +msgid "Disabled security-group extension." +msgstr "La extensión security-group se ha inhabilitado." + +#: neutron/agent/securitygroups_rpc.py:82 +msgid "Disabled allowed-address-pairs extension." +msgstr "" + +#: neutron/agent/securitygroups_rpc.py:198 +#, python-format +msgid "" +"Skipping method %s as firewall is disabled or configured as " +"NoopFirewallDriver." +msgstr "" + +#: neutron/agent/securitygroups_rpc.py:209 +#, python-format +msgid "Preparing filters for devices %s" +msgstr "Preparando filtros para dispositivos %s" + +#: neutron/agent/securitygroups_rpc.py:239 +#, python-format +msgid "Security group rule updated %r" +msgstr "Se ha actualizado la regla de grupo de seguridad %r" + +#: neutron/agent/securitygroups_rpc.py:246 +#, python-format +msgid "Security group member updated %r" +msgstr "Se ha actualizado el miembro de grupo de seguridad %r" + +#: neutron/agent/securitygroups_rpc.py:268 +msgid "Provider rule updated" +msgstr "Se ha actualizado regla de proveedor" + +#: neutron/agent/securitygroups_rpc.py:280 +#, python-format +msgid "Remove device filter for %r" +msgstr "Eliminar filtro de dispositivo para %r" + +#: neutron/agent/securitygroups_rpc.py:290 +msgid "Refresh firewall rules" +msgstr "Renovar reglas de cortafuegos" + +#: neutron/agent/securitygroups_rpc.py:294 +msgid "No ports here to refresh firewall" +msgstr "" + #: neutron/agent/linux/ovs_lib.py:422 #, python-format msgid "Port %(port_id)s not present in bridge %(br_name)s" @@ -34,7 +81,7 @@ msgstr "" msgid "IPv6 is not enabled on this system." msgstr "" -#: neutron/db/l3_agentschedulers_db.py:82 +#: neutron/db/l3_agentschedulers_db.py:83 msgid "" "Skipping period L3 agent status check because automatic router rescheduling " "is disabled." @@ -59,6 +106,21 @@ msgstr "" msgid "%d probe(s) deleted" msgstr "" +#: neutron/openstack/common/eventlet_backdoor.py:140 +#, python-format +msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" +msgstr "Eventlet oculto escuchando en %(port)s para el proceso %(pid)d" + +#: neutron/openstack/common/lockutils.py:82 +#, python-format +msgid "Created lock path: %s" +msgstr "Candado creado ruta: %s" + +#: neutron/openstack/common/lockutils.py:194 +#, python-format +msgid "Failed to remove file %(file)s" +msgstr "No se ha podido eliminar el archivo %(file)s" + #: neutron/openstack/common/periodic_task.py:126 #, python-format msgid "Skipping periodic task %(task)s because its interval is negative" @@ -69,54 +131,54 @@ msgstr "Omitiendo la tarea periódica %(task)s porque el intervalo es negativo" msgid "Skipping periodic task %(task)s because it is disabled" msgstr "Omitiendo la tarea periódica %(task)s porque está inhabilitada" -#: neutron/openstack/common/service.py:176 +#: neutron/openstack/common/service.py:174 #, python-format msgid "Caught %s, exiting" msgstr "Se ha captado %s, saliendo" -#: neutron/openstack/common/service.py:240 +#: neutron/openstack/common/service.py:232 msgid "Parent process has died unexpectedly, exiting" msgstr "El proceso padre se ha detenido inesperadamente, saliendo" -#: neutron/openstack/common/service.py:271 +#: neutron/openstack/common/service.py:263 #, python-format msgid "Child caught %s, exiting" -msgstr "" +msgstr "Hijo captado %s, saliendo" -#: neutron/openstack/common/service.py:310 +#: neutron/openstack/common/service.py:302 msgid "Forking too fast, sleeping" msgstr "Bifurcación demasiado rápida, en reposo" -#: neutron/openstack/common/service.py:329 +#: neutron/openstack/common/service.py:321 #, python-format msgid "Started child %d" msgstr "Se ha iniciado el hijo %d" -#: neutron/openstack/common/service.py:339 +#: neutron/openstack/common/service.py:331 #, python-format msgid "Starting %d workers" msgstr "Iniciando %d trabajadores" -#: neutron/openstack/common/service.py:356 +#: neutron/openstack/common/service.py:348 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "Hijo %(pid)d matado por señal %(sig)d" -#: neutron/openstack/common/service.py:360 +#: neutron/openstack/common/service.py:352 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "El hijo %(pid)s ha salido con el estado %(code)d" -#: neutron/openstack/common/service.py:399 +#: neutron/openstack/common/service.py:391 #, python-format msgid "Caught %s, stopping children" msgstr "Se ha captado %s, deteniendo hijos" -#: neutron/openstack/common/service.py:408 +#: neutron/openstack/common/service.py:400 msgid "Wait called after thread killed. Cleaning up." msgstr "" -#: neutron/openstack/common/service.py:424 +#: neutron/openstack/common/service.py:416 #, python-format msgid "Waiting on %d children to exit" msgstr "En espera de %d hijos para salir" @@ -147,7 +209,7 @@ msgstr "" #: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:379 #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:907 msgid "Agent out of sync with plugin!" -msgstr "" +msgstr "El agente está fuera de sincronización con el plug-in." #: neutron/plugins/nuage/syncmanager.py:46 msgid "Starting the sync between Neutron and VSD" @@ -157,33 +219,20 @@ msgstr "" msgid "Sync between Neutron and VSD completed successfully" msgstr "" -#: neutron/plugins/ofagent/agent/arp_lib.py:137 +#: neutron/plugins/ofagent/agent/arp_lib.py:142 msgid "No bridge is set" msgstr "" -#: neutron/plugins/ofagent/agent/arp_lib.py:140 +#: neutron/plugins/ofagent/agent/arp_lib.py:145 #, python-format msgid "Unknown bridge %(dpid)s ours %(ours)s" msgstr "" -#: neutron/plugins/ofagent/agent/arp_lib.py:147 -#, python-format -msgid "packet-in dpid %(dpid)s in_port %(port)s pkt %(pkt)s" -msgstr "" - -#: neutron/plugins/ofagent/agent/arp_lib.py:152 +#: neutron/plugins/ofagent/agent/arp_lib.py:163 msgid "drop non tenant packet" msgstr "" -#: neutron/plugins/ofagent/agent/arp_lib.py:157 -msgid "drop non-ethernet packet" -msgstr "" - -#: neutron/plugins/ofagent/agent/arp_lib.py:162 -msgid "drop non-arp packet" -msgstr "" - -#: neutron/plugins/ofagent/agent/arp_lib.py:171 +#: neutron/plugins/ofagent/agent/arp_lib.py:182 #, python-format msgid "unknown network %s" msgstr "" @@ -191,26 +240,28 @@ msgstr "" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:165 msgid "Agent initialized successfully, now running... " msgstr "" +"El agente se ha inicializado satisfactoriamente, ahora se está ejecutando... " #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:452 #, python-format msgid "Assigning %(vlan_id)s as local vlan for net-id=%(net_uuid)s" -msgstr "" +msgstr "Asignando %(vlan_id)s como vlan local para net-id=%(net_uuid)s" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:502 #, python-format msgid "Reclaiming vlan = %(vlan_id)s from net-id = %(net_uuid)s" -msgstr "" +msgstr "Reclamando vlan = %(vlan_id)s de net-id = %(net_uuid)s" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:570 #, python-format msgid "port_unbound() net_uuid %s not in local_vlan_map" -msgstr "" +msgstr "port_unbound() net_uuid %s no está en local_vlan_map" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:651 #, python-format msgid "Mapping physical network %(physical_network)s to bridge %(bridge)s" msgstr "" +"Correlacionando la red física %(physical_network)s con el puente %(bridge)s" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:785 #, python-format @@ -222,7 +273,7 @@ msgstr "" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:799 #, python-format msgid "Port %(device)s updated. Details: %(details)s" -msgstr "" +msgstr "Se ha actualizado el puerto %(device)s. Detalles: %(details)s" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:818 #, python-format @@ -232,17 +283,53 @@ msgstr "" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:829 #, python-format msgid "Attachment %s removed" -msgstr "" +msgstr "Se ha eliminado el adjunto %s" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:912 msgid "Agent tunnel out of sync with plugin!" +msgstr "Túnel de agente fuera de sincronización con el plug-in. " + +#: neutron/services/vpn/plugin.py:45 +#, python-format +msgid "VPN plugin using service driver: %s" msgstr "" -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:57 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:335 +msgid "Sending status report update to plugin" +msgstr "" + +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:715 +#, python-format +msgid "FAILED: Create of IPSec site-to-site connection %s" +msgstr "" + +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:718 +#, python-format +msgid "SUCCESS: Created IPSec site-to-site connection %s" +msgstr "" + +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:733 +#, python-format +msgid "SUCCESS: Deleted IPSec site-to-site connection %s" +msgstr "" + +#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:56 #, python-format msgid "Scanning config files %s for Cisco CSR configurations" msgstr "" +#: neutron/services/vpn/service_drivers/cisco_csr_db.py:226 +#, python-format +msgid "" +"Mapped connection %(conn_id)s to Tunnel%(tunnel_id)d using IKE policy ID " +"%(ike_id)d and IPSec policy ID %(ipsec_id)d" +msgstr "" + +#: neutron/services/vpn/service_drivers/cisco_csr_db.py:238 +#, python-format +msgid "Removed mapping for connection %s" +msgstr "" + #: neutron/tests/unit/vmware/apiclient/test_api_eventlet_request.py:63 #, python-format msgid "spawned: %d" diff --git a/neutron/locale/fr/LC_MESSAGES/neutron-log-info.po b/neutron/locale/fr/LC_MESSAGES/neutron-log-info.po index 7424e03660c..76a85f92542 100644 --- a/neutron/locale/fr/LC_MESSAGES/neutron-log-info.po +++ b/neutron/locale/fr/LC_MESSAGES/neutron-log-info.po @@ -3,12 +3,13 @@ # This file is distributed under the same license as the neutron project. # # Translators: +# Maxime COQUEREL , 2014 msgid "" msgstr "" "Project-Id-Version: Neutron\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-10-08 06:09+0000\n" -"PO-Revision-Date: 2014-08-12 21:40+0000\n" +"POT-Creation-Date: 2014-10-22 06:19+0000\n" +"PO-Revision-Date: 2014-10-21 10:51+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: French (http://www.transifex.com/projects/p/neutron/language/" "fr/)\n" @@ -25,6 +26,53 @@ msgid "" "Inserting policy:%(new_policy)s in place of deprecated policy:%(old_policy)s" msgstr "" +#: neutron/agent/securitygroups_rpc.py:80 +msgid "Disabled security-group extension." +msgstr "Extension du groupe de sécurité désactivée." + +#: neutron/agent/securitygroups_rpc.py:82 +msgid "Disabled allowed-address-pairs extension." +msgstr "" + +#: neutron/agent/securitygroups_rpc.py:198 +#, python-format +msgid "" +"Skipping method %s as firewall is disabled or configured as " +"NoopFirewallDriver." +msgstr "" + +#: neutron/agent/securitygroups_rpc.py:209 +#, python-format +msgid "Preparing filters for devices %s" +msgstr "Préparation des filtres pour les unités %s" + +#: neutron/agent/securitygroups_rpc.py:239 +#, python-format +msgid "Security group rule updated %r" +msgstr "Règle de groupe de sécurité mise à jour %r" + +#: neutron/agent/securitygroups_rpc.py:246 +#, python-format +msgid "Security group member updated %r" +msgstr "Membre de groupe de sécurité mis à jour %r" + +#: neutron/agent/securitygroups_rpc.py:268 +msgid "Provider rule updated" +msgstr "Règle de fournisseur mise à jour" + +#: neutron/agent/securitygroups_rpc.py:280 +#, python-format +msgid "Remove device filter for %r" +msgstr "Suppression du filtre d'unités pour %r" + +#: neutron/agent/securitygroups_rpc.py:290 +msgid "Refresh firewall rules" +msgstr "Régénération des règles de pare-feu" + +#: neutron/agent/securitygroups_rpc.py:294 +msgid "No ports here to refresh firewall" +msgstr "" + #: neutron/agent/linux/ovs_lib.py:422 #, python-format msgid "Port %(port_id)s not present in bridge %(br_name)s" @@ -32,9 +80,9 @@ msgstr "" #: neutron/common/ipv6_utils.py:62 msgid "IPv6 is not enabled on this system." -msgstr "" +msgstr "IPv6 n'est pas activé sur le système." -#: neutron/db/l3_agentschedulers_db.py:82 +#: neutron/db/l3_agentschedulers_db.py:83 msgid "" "Skipping period L3 agent status check because automatic router rescheduling " "is disabled." @@ -59,6 +107,21 @@ msgstr "" msgid "%d probe(s) deleted" msgstr "" +#: neutron/openstack/common/eventlet_backdoor.py:140 +#, python-format +msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" +msgstr "Eventlet backdoor en écoute sur le port %(port)s for process %(pid)d" + +#: neutron/openstack/common/lockutils.py:82 +#, python-format +msgid "Created lock path: %s" +msgstr "Chemin de verrou créé: %s" + +#: neutron/openstack/common/lockutils.py:194 +#, python-format +msgid "Failed to remove file %(file)s" +msgstr "Echec de la suppression du fichier %(file)s" + #: neutron/openstack/common/periodic_task.py:126 #, python-format msgid "Skipping periodic task %(task)s because its interval is negative" @@ -69,54 +132,54 @@ msgstr "Tâche périodique %(task)s ignorée car son intervalle est négatif" msgid "Skipping periodic task %(task)s because it is disabled" msgstr "Tâche périodique %(task)s car elle est désactivée" -#: neutron/openstack/common/service.py:176 +#: neutron/openstack/common/service.py:174 #, python-format msgid "Caught %s, exiting" msgstr "%s interceptée, sortie" -#: neutron/openstack/common/service.py:240 +#: neutron/openstack/common/service.py:232 msgid "Parent process has died unexpectedly, exiting" msgstr "Processus parent arrêté de manière inattendue, sortie" -#: neutron/openstack/common/service.py:271 +#: neutron/openstack/common/service.py:263 #, python-format msgid "Child caught %s, exiting" -msgstr "" +msgstr "L'enfant a reçu %s, sortie" -#: neutron/openstack/common/service.py:310 +#: neutron/openstack/common/service.py:302 msgid "Forking too fast, sleeping" msgstr "Bifurcation trop rapide, pause" -#: neutron/openstack/common/service.py:329 +#: neutron/openstack/common/service.py:321 #, python-format msgid "Started child %d" msgstr "Enfant démarré %d" -#: neutron/openstack/common/service.py:339 +#: neutron/openstack/common/service.py:331 #, python-format msgid "Starting %d workers" msgstr "Démarrage des travailleurs %d" -#: neutron/openstack/common/service.py:356 +#: neutron/openstack/common/service.py:348 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "Enfant %(pid)d arrêté par le signal %(sig)d" -#: neutron/openstack/common/service.py:360 +#: neutron/openstack/common/service.py:352 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "Processus fils %(pid)s terminé avec le status %(code)d" -#: neutron/openstack/common/service.py:399 +#: neutron/openstack/common/service.py:391 #, python-format msgid "Caught %s, stopping children" msgstr "%s interceptée, arrêt de l'enfant" -#: neutron/openstack/common/service.py:408 +#: neutron/openstack/common/service.py:400 msgid "Wait called after thread killed. Cleaning up." msgstr "Pause demandée après suppression de thread. Nettoyage." -#: neutron/openstack/common/service.py:424 +#: neutron/openstack/common/service.py:416 #, python-format msgid "Waiting on %d children to exit" msgstr "En attente %d enfants pour sortie" @@ -128,11 +191,11 @@ msgstr "" #: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:78 msgid "APIC service agent starting ..." -msgstr "" +msgstr "Démarrage du service de l'agent APIC" #: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:95 msgid "APIC service agent started" -msgstr "" +msgstr "service de l'agent APIC démarré" #: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:189 #, python-format @@ -157,60 +220,51 @@ msgstr "" msgid "Sync between Neutron and VSD completed successfully" msgstr "" -#: neutron/plugins/ofagent/agent/arp_lib.py:137 +#: neutron/plugins/ofagent/agent/arp_lib.py:142 msgid "No bridge is set" msgstr "" -#: neutron/plugins/ofagent/agent/arp_lib.py:140 +#: neutron/plugins/ofagent/agent/arp_lib.py:145 #, python-format msgid "Unknown bridge %(dpid)s ours %(ours)s" -msgstr "" +msgstr "Pont inconnu %(dpid)s ours %(ours)s" -#: neutron/plugins/ofagent/agent/arp_lib.py:147 -#, python-format -msgid "packet-in dpid %(dpid)s in_port %(port)s pkt %(pkt)s" -msgstr "" - -#: neutron/plugins/ofagent/agent/arp_lib.py:152 +#: neutron/plugins/ofagent/agent/arp_lib.py:163 msgid "drop non tenant packet" msgstr "" -#: neutron/plugins/ofagent/agent/arp_lib.py:157 -msgid "drop non-ethernet packet" -msgstr "" - -#: neutron/plugins/ofagent/agent/arp_lib.py:162 -msgid "drop non-arp packet" -msgstr "" - -#: neutron/plugins/ofagent/agent/arp_lib.py:171 +#: neutron/plugins/ofagent/agent/arp_lib.py:182 #, python-format msgid "unknown network %s" -msgstr "" +msgstr "réseau inconnu %s " #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:165 msgid "Agent initialized successfully, now running... " -msgstr "" +msgstr "Agent initialisé avec succès, en cours d'exécution... " #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:452 #, python-format msgid "Assigning %(vlan_id)s as local vlan for net-id=%(net_uuid)s" msgstr "" +"Affectation de %(vlan_id)s comme réseau local virtuel pour net-id = " +"%(net_uuid)s" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:502 #, python-format msgid "Reclaiming vlan = %(vlan_id)s from net-id = %(net_uuid)s" msgstr "" +"Récupération du réseau local virtuel = %(vlan_id)s à partir de net-id = " +"%(net_uuid)s" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:570 #, python-format msgid "port_unbound() net_uuid %s not in local_vlan_map" -msgstr "" +msgstr "port_unbound() net_uuid %s absent de local_vlan_map" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:651 #, python-format msgid "Mapping physical network %(physical_network)s to bridge %(bridge)s" -msgstr "" +msgstr "Mappage du réseau physique %(physical_network)s sur le pont %(bridge)s" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:785 #, python-format @@ -222,26 +276,63 @@ msgstr "" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:799 #, python-format msgid "Port %(device)s updated. Details: %(details)s" -msgstr "" +msgstr "Port %(device)s mis à jour. Détails : %(details)s" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:818 #, python-format msgid "Configuration for device %s completed." -msgstr "" +msgstr "Configuration complète de l'équipement %s" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:829 #, python-format msgid "Attachment %s removed" -msgstr "" +msgstr "Connexion %s retirée" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:912 msgid "Agent tunnel out of sync with plugin!" +msgstr "Tunnel d'agent désynchronisé avec le plug-in !" + +#: neutron/services/vpn/plugin.py:45 +#, python-format +msgid "VPN plugin using service driver: %s" msgstr "" -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:57 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:335 +msgid "Sending status report update to plugin" +msgstr "" + +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:715 +#, python-format +msgid "FAILED: Create of IPSec site-to-site connection %s" +msgstr "ECHEC: Création de la connexion site à site IPsec %s" + +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:718 +#, python-format +msgid "SUCCESS: Created IPSec site-to-site connection %s" +msgstr "SUCCES: Création de la connexion site à site IPsec %s" + +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:733 +#, python-format +msgid "SUCCESS: Deleted IPSec site-to-site connection %s" +msgstr "" + +#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:56 #, python-format msgid "Scanning config files %s for Cisco CSR configurations" msgstr "" +"Analyse des fichiers de configuration %s pour la configuration du Cisco CSR" + +#: neutron/services/vpn/service_drivers/cisco_csr_db.py:226 +#, python-format +msgid "" +"Mapped connection %(conn_id)s to Tunnel%(tunnel_id)d using IKE policy ID " +"%(ike_id)d and IPSec policy ID %(ipsec_id)d" +msgstr "" + +#: neutron/services/vpn/service_drivers/cisco_csr_db.py:238 +#, python-format +msgid "Removed mapping for connection %s" +msgstr "" #: neutron/tests/unit/vmware/apiclient/test_api_eventlet_request.py:63 #, python-format @@ -251,4 +342,4 @@ msgstr "" #: neutron/tests/unit/vmware/apiclient/test_api_eventlet_request.py:75 #, python-format msgid "_handle_request called: %s" -msgstr "" +msgstr "_handle_request called: %s" diff --git a/neutron/locale/it/LC_MESSAGES/neutron-log-info.po b/neutron/locale/it/LC_MESSAGES/neutron-log-info.po index b9b624e916d..bd448f861d9 100644 --- a/neutron/locale/it/LC_MESSAGES/neutron-log-info.po +++ b/neutron/locale/it/LC_MESSAGES/neutron-log-info.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Neutron\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-10-08 06:09+0000\n" -"PO-Revision-Date: 2014-08-17 05:19+0000\n" +"POT-Creation-Date: 2014-10-22 06:19+0000\n" +"PO-Revision-Date: 2014-10-21 10:51+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: Italian (http://www.transifex.com/projects/p/neutron/language/" "it/)\n" @@ -26,6 +26,53 @@ msgid "" "Inserting policy:%(new_policy)s in place of deprecated policy:%(old_policy)s" msgstr "" +#: neutron/agent/securitygroups_rpc.py:80 +msgid "Disabled security-group extension." +msgstr "Estensione di security-group disabilitata." + +#: neutron/agent/securitygroups_rpc.py:82 +msgid "Disabled allowed-address-pairs extension." +msgstr "" + +#: neutron/agent/securitygroups_rpc.py:198 +#, python-format +msgid "" +"Skipping method %s as firewall is disabled or configured as " +"NoopFirewallDriver." +msgstr "" + +#: neutron/agent/securitygroups_rpc.py:209 +#, python-format +msgid "Preparing filters for devices %s" +msgstr "Preparazione filtri per i dispositivi %s" + +#: neutron/agent/securitygroups_rpc.py:239 +#, python-format +msgid "Security group rule updated %r" +msgstr "Regola gruppo di sicurezza aggiornata %r" + +#: neutron/agent/securitygroups_rpc.py:246 +#, python-format +msgid "Security group member updated %r" +msgstr "Membro gruppo di sicurezza aggiornato %r" + +#: neutron/agent/securitygroups_rpc.py:268 +msgid "Provider rule updated" +msgstr "Provider regola aggiornato" + +#: neutron/agent/securitygroups_rpc.py:280 +#, python-format +msgid "Remove device filter for %r" +msgstr "Rimuovi filtro dispositivo per %r" + +#: neutron/agent/securitygroups_rpc.py:290 +msgid "Refresh firewall rules" +msgstr "Aggiorna regole firewall" + +#: neutron/agent/securitygroups_rpc.py:294 +msgid "No ports here to refresh firewall" +msgstr "" + #: neutron/agent/linux/ovs_lib.py:422 #, python-format msgid "Port %(port_id)s not present in bridge %(br_name)s" @@ -35,7 +82,7 @@ msgstr "" msgid "IPv6 is not enabled on this system." msgstr "" -#: neutron/db/l3_agentschedulers_db.py:82 +#: neutron/db/l3_agentschedulers_db.py:83 msgid "" "Skipping period L3 agent status check because automatic router rescheduling " "is disabled." @@ -60,6 +107,21 @@ msgstr "" msgid "%d probe(s) deleted" msgstr "" +#: neutron/openstack/common/eventlet_backdoor.py:140 +#, python-format +msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" +msgstr "" + +#: neutron/openstack/common/lockutils.py:82 +#, python-format +msgid "Created lock path: %s" +msgstr "Preato percorso di blocco : %s" + +#: neutron/openstack/common/lockutils.py:194 +#, python-format +msgid "Failed to remove file %(file)s" +msgstr "Tentativo fallito nella rimozione di %(file)s" + #: neutron/openstack/common/periodic_task.py:126 #, python-format msgid "Skipping periodic task %(task)s because its interval is negative" @@ -71,54 +133,54 @@ msgstr "" msgid "Skipping periodic task %(task)s because it is disabled" msgstr "Abbadono dell'attività periodica %(task)s perché è disabilitata" -#: neutron/openstack/common/service.py:176 +#: neutron/openstack/common/service.py:174 #, python-format msgid "Caught %s, exiting" msgstr "Rilevato %s, esistente" -#: neutron/openstack/common/service.py:240 +#: neutron/openstack/common/service.py:232 msgid "Parent process has died unexpectedly, exiting" msgstr "Il processo principale è stato interrotto inaspettatamente, uscire" -#: neutron/openstack/common/service.py:271 +#: neutron/openstack/common/service.py:263 #, python-format msgid "Child caught %s, exiting" msgstr "Cogliere Child %s, uscendo" -#: neutron/openstack/common/service.py:310 +#: neutron/openstack/common/service.py:302 msgid "Forking too fast, sleeping" msgstr "Sblocco troppo veloce, attendere" -#: neutron/openstack/common/service.py:329 +#: neutron/openstack/common/service.py:321 #, python-format msgid "Started child %d" msgstr "Child avviato %d" -#: neutron/openstack/common/service.py:339 +#: neutron/openstack/common/service.py:331 #, python-format msgid "Starting %d workers" msgstr "Avvio %d operatori" -#: neutron/openstack/common/service.py:356 +#: neutron/openstack/common/service.py:348 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "Child %(pid)d interrotto dal segnale %(sig)d" -#: neutron/openstack/common/service.py:360 +#: neutron/openstack/common/service.py:352 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "Child %(pid)s terminato con stato %(code)d" -#: neutron/openstack/common/service.py:399 +#: neutron/openstack/common/service.py:391 #, python-format msgid "Caught %s, stopping children" msgstr "Intercettato %s, arresto in corso dei children" -#: neutron/openstack/common/service.py:408 +#: neutron/openstack/common/service.py:400 msgid "Wait called after thread killed. Cleaning up." msgstr "Attendere la chiamata dopo l'uccisione de filo. Bonifica." -#: neutron/openstack/common/service.py:424 +#: neutron/openstack/common/service.py:416 #, python-format msgid "Waiting on %d children to exit" msgstr "In attesa %d degli elementi secondari per uscire" @@ -159,60 +221,47 @@ msgstr "" msgid "Sync between Neutron and VSD completed successfully" msgstr "" -#: neutron/plugins/ofagent/agent/arp_lib.py:137 +#: neutron/plugins/ofagent/agent/arp_lib.py:142 msgid "No bridge is set" msgstr "" -#: neutron/plugins/ofagent/agent/arp_lib.py:140 +#: neutron/plugins/ofagent/agent/arp_lib.py:145 #, python-format msgid "Unknown bridge %(dpid)s ours %(ours)s" msgstr "" -#: neutron/plugins/ofagent/agent/arp_lib.py:147 -#, python-format -msgid "packet-in dpid %(dpid)s in_port %(port)s pkt %(pkt)s" -msgstr "" - -#: neutron/plugins/ofagent/agent/arp_lib.py:152 +#: neutron/plugins/ofagent/agent/arp_lib.py:163 msgid "drop non tenant packet" msgstr "" -#: neutron/plugins/ofagent/agent/arp_lib.py:157 -msgid "drop non-ethernet packet" -msgstr "" - -#: neutron/plugins/ofagent/agent/arp_lib.py:162 -msgid "drop non-arp packet" -msgstr "" - -#: neutron/plugins/ofagent/agent/arp_lib.py:171 +#: neutron/plugins/ofagent/agent/arp_lib.py:182 #, python-format msgid "unknown network %s" msgstr "" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:165 msgid "Agent initialized successfully, now running... " -msgstr "" +msgstr "Agent inizializzato correttamente, ora in esecuzione... " #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:452 #, python-format msgid "Assigning %(vlan_id)s as local vlan for net-id=%(net_uuid)s" -msgstr "" +msgstr "Assegnazione %(vlan_id)s come vlan locale per net-id=%(net_uuid)s" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:502 #, python-format msgid "Reclaiming vlan = %(vlan_id)s from net-id = %(net_uuid)s" -msgstr "" +msgstr "Recupero vlan = %(vlan_id)s da net-id = %(net_uuid)s" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:570 #, python-format msgid "port_unbound() net_uuid %s not in local_vlan_map" -msgstr "" +msgstr "port_unbound() net_uuid %s non in local_vlan_map" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:651 #, python-format msgid "Mapping physical network %(physical_network)s to bridge %(bridge)s" -msgstr "" +msgstr "Associazione rete fisica %(physical_network)s al bridge %(bridge)s" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:785 #, python-format @@ -224,7 +273,7 @@ msgstr "" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:799 #, python-format msgid "Port %(device)s updated. Details: %(details)s" -msgstr "" +msgstr "Porta %(device)s aggiornata. Dettagli: %(details)s" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:818 #, python-format @@ -234,17 +283,53 @@ msgstr "" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:829 #, python-format msgid "Attachment %s removed" -msgstr "" +msgstr "Collegamento %s rimosso" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:912 msgid "Agent tunnel out of sync with plugin!" +msgstr "Il tunnel agent non è sincronizzato con il plugin!" + +#: neutron/services/vpn/plugin.py:45 +#, python-format +msgid "VPN plugin using service driver: %s" msgstr "" -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:57 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:335 +msgid "Sending status report update to plugin" +msgstr "" + +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:715 +#, python-format +msgid "FAILED: Create of IPSec site-to-site connection %s" +msgstr "" + +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:718 +#, python-format +msgid "SUCCESS: Created IPSec site-to-site connection %s" +msgstr "" + +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:733 +#, python-format +msgid "SUCCESS: Deleted IPSec site-to-site connection %s" +msgstr "" + +#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:56 #, python-format msgid "Scanning config files %s for Cisco CSR configurations" msgstr "" +#: neutron/services/vpn/service_drivers/cisco_csr_db.py:226 +#, python-format +msgid "" +"Mapped connection %(conn_id)s to Tunnel%(tunnel_id)d using IKE policy ID " +"%(ike_id)d and IPSec policy ID %(ipsec_id)d" +msgstr "" + +#: neutron/services/vpn/service_drivers/cisco_csr_db.py:238 +#, python-format +msgid "Removed mapping for connection %s" +msgstr "" + #: neutron/tests/unit/vmware/apiclient/test_api_eventlet_request.py:63 #, python-format msgid "spawned: %d" diff --git a/neutron/locale/ja/LC_MESSAGES/neutron-log-info.po b/neutron/locale/ja/LC_MESSAGES/neutron-log-info.po index 425a7815f4f..72d4cc36e39 100644 --- a/neutron/locale/ja/LC_MESSAGES/neutron-log-info.po +++ b/neutron/locale/ja/LC_MESSAGES/neutron-log-info.po @@ -3,12 +3,13 @@ # This file is distributed under the same license as the neutron project. # # Translators: +# Kuo(Kyohei MORIYAMA) <>, 2014 msgid "" msgstr "" "Project-Id-Version: Neutron\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-10-08 06:09+0000\n" -"PO-Revision-Date: 2014-07-18 20:49+0000\n" +"POT-Creation-Date: 2014-10-22 06:19+0000\n" +"PO-Revision-Date: 2014-10-21 11:04+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: Japanese (http://www.transifex.com/projects/p/neutron/" "language/ja/)\n" @@ -25,6 +26,53 @@ msgid "" "Inserting policy:%(new_policy)s in place of deprecated policy:%(old_policy)s" msgstr "" +#: neutron/agent/securitygroups_rpc.py:80 +msgid "Disabled security-group extension." +msgstr "security-group 拡張を無効にしました。" + +#: neutron/agent/securitygroups_rpc.py:82 +msgid "Disabled allowed-address-pairs extension." +msgstr "" + +#: neutron/agent/securitygroups_rpc.py:198 +#, python-format +msgid "" +"Skipping method %s as firewall is disabled or configured as " +"NoopFirewallDriver." +msgstr "" + +#: neutron/agent/securitygroups_rpc.py:209 +#, python-format +msgid "Preparing filters for devices %s" +msgstr "デバイス %s のフィルターを準備中" + +#: neutron/agent/securitygroups_rpc.py:239 +#, python-format +msgid "Security group rule updated %r" +msgstr "セキュリティー・グループ・ルールが %r を更新しました" + +#: neutron/agent/securitygroups_rpc.py:246 +#, python-format +msgid "Security group member updated %r" +msgstr "セキュリティー・グループ・メンバーが %r を更新しました" + +#: neutron/agent/securitygroups_rpc.py:268 +msgid "Provider rule updated" +msgstr "プロバイダー・ルールが更新されました" + +#: neutron/agent/securitygroups_rpc.py:280 +#, python-format +msgid "Remove device filter for %r" +msgstr "%r のデバイス・フィルターを削除" + +#: neutron/agent/securitygroups_rpc.py:290 +msgid "Refresh firewall rules" +msgstr "ファイアウォール・ルールの最新表示" + +#: neutron/agent/securitygroups_rpc.py:294 +msgid "No ports here to refresh firewall" +msgstr "" + #: neutron/agent/linux/ovs_lib.py:422 #, python-format msgid "Port %(port_id)s not present in bridge %(br_name)s" @@ -32,9 +80,9 @@ msgstr "" #: neutron/common/ipv6_utils.py:62 msgid "IPv6 is not enabled on this system." -msgstr "" +msgstr " このシステムでは、 IPv6が有効ではありません。" -#: neutron/db/l3_agentschedulers_db.py:82 +#: neutron/db/l3_agentschedulers_db.py:83 msgid "" "Skipping period L3 agent status check because automatic router rescheduling " "is disabled." @@ -59,6 +107,21 @@ msgstr "" msgid "%d probe(s) deleted" msgstr "" +#: neutron/openstack/common/eventlet_backdoor.py:140 +#, python-format +msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" +msgstr "Eventlet backdoorは、プロセス%(pid)dの%(port)sをリスニングしています。" + +#: neutron/openstack/common/lockutils.py:82 +#, python-format +msgid "Created lock path: %s" +msgstr "作成されたロックのパス: %s" + +#: neutron/openstack/common/lockutils.py:194 +#, python-format +msgid "Failed to remove file %(file)s" +msgstr "%(file)sの削除に失敗しました" + #: neutron/openstack/common/periodic_task.py:126 #, python-format msgid "Skipping periodic task %(task)s because its interval is negative" @@ -69,54 +132,54 @@ msgstr "タスクの間隔が負であるため、定期タスク %(task)s を msgid "Skipping periodic task %(task)s because it is disabled" msgstr "タスクが使用不可であるため、定期タスク %(task)s をスキップしています" -#: neutron/openstack/common/service.py:176 +#: neutron/openstack/common/service.py:174 #, python-format msgid "Caught %s, exiting" msgstr "%s が見つかりました。終了しています" -#: neutron/openstack/common/service.py:240 +#: neutron/openstack/common/service.py:232 msgid "Parent process has died unexpectedly, exiting" msgstr "親プロセスが予期せずに停止しました。終了しています" -#: neutron/openstack/common/service.py:271 +#: neutron/openstack/common/service.py:263 #, python-format msgid "Child caught %s, exiting" msgstr "" -#: neutron/openstack/common/service.py:310 +#: neutron/openstack/common/service.py:302 msgid "Forking too fast, sleeping" msgstr "fork が早すぎます。スリープ状態にしています" -#: neutron/openstack/common/service.py:329 +#: neutron/openstack/common/service.py:321 #, python-format msgid "Started child %d" msgstr "子 %d を開始しました" -#: neutron/openstack/common/service.py:339 +#: neutron/openstack/common/service.py:331 #, python-format msgid "Starting %d workers" msgstr "%d ワーカーを開始しています" -#: neutron/openstack/common/service.py:356 +#: neutron/openstack/common/service.py:348 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "子 %(pid)d がシグナル %(sig)d によって強制終了されました" -#: neutron/openstack/common/service.py:360 +#: neutron/openstack/common/service.py:352 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "子 %(pid)s が状況 %(code)d で終了しました" -#: neutron/openstack/common/service.py:399 +#: neutron/openstack/common/service.py:391 #, python-format msgid "Caught %s, stopping children" msgstr "%s が見つかりました。子を停止しています" -#: neutron/openstack/common/service.py:408 +#: neutron/openstack/common/service.py:400 msgid "Wait called after thread killed. Cleaning up." msgstr "" -#: neutron/openstack/common/service.py:424 +#: neutron/openstack/common/service.py:416 #, python-format msgid "Waiting on %d children to exit" msgstr "%d 個の子で終了を待機しています" @@ -147,7 +210,7 @@ msgstr "" #: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:379 #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:907 msgid "Agent out of sync with plugin!" -msgstr "" +msgstr "エージェントがプラグインと非同期です。" #: neutron/plugins/nuage/syncmanager.py:46 msgid "Starting the sync between Neutron and VSD" @@ -157,60 +220,50 @@ msgstr "" msgid "Sync between Neutron and VSD completed successfully" msgstr "" -#: neutron/plugins/ofagent/agent/arp_lib.py:137 +#: neutron/plugins/ofagent/agent/arp_lib.py:142 msgid "No bridge is set" msgstr "" -#: neutron/plugins/ofagent/agent/arp_lib.py:140 +#: neutron/plugins/ofagent/agent/arp_lib.py:145 #, python-format msgid "Unknown bridge %(dpid)s ours %(ours)s" msgstr "" -#: neutron/plugins/ofagent/agent/arp_lib.py:147 -#, python-format -msgid "packet-in dpid %(dpid)s in_port %(port)s pkt %(pkt)s" -msgstr "" - -#: neutron/plugins/ofagent/agent/arp_lib.py:152 +#: neutron/plugins/ofagent/agent/arp_lib.py:163 msgid "drop non tenant packet" msgstr "" -#: neutron/plugins/ofagent/agent/arp_lib.py:157 -msgid "drop non-ethernet packet" -msgstr "" - -#: neutron/plugins/ofagent/agent/arp_lib.py:162 -msgid "drop non-arp packet" -msgstr "" - -#: neutron/plugins/ofagent/agent/arp_lib.py:171 +#: neutron/plugins/ofagent/agent/arp_lib.py:182 #, python-format msgid "unknown network %s" msgstr "" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:165 msgid "Agent initialized successfully, now running... " -msgstr "" +msgstr "エージェントが正常に初期化されました。現在実行中です... " #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:452 #, python-format msgid "Assigning %(vlan_id)s as local vlan for net-id=%(net_uuid)s" msgstr "" +"%(vlan_id)s を net-id=%(net_uuid)s のローカル VLAN として割り当てています" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:502 #, python-format msgid "Reclaiming vlan = %(vlan_id)s from net-id = %(net_uuid)s" -msgstr "" +msgstr "VLAN = %(vlan_id)s を net-id = %(net_uuid)s から再利用中" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:570 #, python-format msgid "port_unbound() net_uuid %s not in local_vlan_map" -msgstr "" +msgstr "port_unbound() net_uuid %s が local_vlan_map にありません" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:651 #, python-format msgid "Mapping physical network %(physical_network)s to bridge %(bridge)s" msgstr "" +"物理ネットワーク %(physical_network)s をブリッジ %(bridge)s にマップしていま" +"す" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:785 #, python-format @@ -222,7 +275,7 @@ msgstr "" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:799 #, python-format msgid "Port %(device)s updated. Details: %(details)s" -msgstr "" +msgstr "ポート %(device)s が更新されました。詳細: %(details)s" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:818 #, python-format @@ -232,17 +285,53 @@ msgstr "" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:829 #, python-format msgid "Attachment %s removed" -msgstr "" +msgstr "接続機構 %s が削除されました" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:912 msgid "Agent tunnel out of sync with plugin!" +msgstr "エージェント・トンネルがプラグインと非同期です" + +#: neutron/services/vpn/plugin.py:45 +#, python-format +msgid "VPN plugin using service driver: %s" msgstr "" -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:57 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:335 +msgid "Sending status report update to plugin" +msgstr "" + +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:715 +#, python-format +msgid "FAILED: Create of IPSec site-to-site connection %s" +msgstr "" + +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:718 +#, python-format +msgid "SUCCESS: Created IPSec site-to-site connection %s" +msgstr "" + +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:733 +#, python-format +msgid "SUCCESS: Deleted IPSec site-to-site connection %s" +msgstr "" + +#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:56 #, python-format msgid "Scanning config files %s for Cisco CSR configurations" msgstr "" +#: neutron/services/vpn/service_drivers/cisco_csr_db.py:226 +#, python-format +msgid "" +"Mapped connection %(conn_id)s to Tunnel%(tunnel_id)d using IKE policy ID " +"%(ike_id)d and IPSec policy ID %(ipsec_id)d" +msgstr "" + +#: neutron/services/vpn/service_drivers/cisco_csr_db.py:238 +#, python-format +msgid "Removed mapping for connection %s" +msgstr "" + #: neutron/tests/unit/vmware/apiclient/test_api_eventlet_request.py:63 #, python-format msgid "spawned: %d" diff --git a/neutron/locale/ko_KR/LC_MESSAGES/neutron-log-info.po b/neutron/locale/ko_KR/LC_MESSAGES/neutron-log-info.po index 08451b31541..6a97c247d01 100644 --- a/neutron/locale/ko_KR/LC_MESSAGES/neutron-log-info.po +++ b/neutron/locale/ko_KR/LC_MESSAGES/neutron-log-info.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Neutron\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-10-08 06:09+0000\n" -"PO-Revision-Date: 2014-07-18 20:49+0000\n" +"POT-Creation-Date: 2014-10-22 06:19+0000\n" +"PO-Revision-Date: 2014-10-21 10:51+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: Korean (Korea) (http://www.transifex.com/projects/p/neutron/" "language/ko_KR/)\n" @@ -25,6 +25,53 @@ msgid "" "Inserting policy:%(new_policy)s in place of deprecated policy:%(old_policy)s" msgstr "" +#: neutron/agent/securitygroups_rpc.py:80 +msgid "Disabled security-group extension." +msgstr "보안 그룹 확장을 사용하지 않습니다. " + +#: neutron/agent/securitygroups_rpc.py:82 +msgid "Disabled allowed-address-pairs extension." +msgstr "" + +#: neutron/agent/securitygroups_rpc.py:198 +#, python-format +msgid "" +"Skipping method %s as firewall is disabled or configured as " +"NoopFirewallDriver." +msgstr "" + +#: neutron/agent/securitygroups_rpc.py:209 +#, python-format +msgid "Preparing filters for devices %s" +msgstr "%s 디바이스에 대한 필터 준비" + +#: neutron/agent/securitygroups_rpc.py:239 +#, python-format +msgid "Security group rule updated %r" +msgstr "보안 그룹 규칙이 %r을(를) 업데이트함" + +#: neutron/agent/securitygroups_rpc.py:246 +#, python-format +msgid "Security group member updated %r" +msgstr "보안 그룹 멤버가 %r을(를) 업데이트함" + +#: neutron/agent/securitygroups_rpc.py:268 +msgid "Provider rule updated" +msgstr "제공자 규칙이 업데이트됨" + +#: neutron/agent/securitygroups_rpc.py:280 +#, python-format +msgid "Remove device filter for %r" +msgstr "%r의 디바이스 필터 제거" + +#: neutron/agent/securitygroups_rpc.py:290 +msgid "Refresh firewall rules" +msgstr "방화벽 규칙 새로 고치기" + +#: neutron/agent/securitygroups_rpc.py:294 +msgid "No ports here to refresh firewall" +msgstr "" + #: neutron/agent/linux/ovs_lib.py:422 #, python-format msgid "Port %(port_id)s not present in bridge %(br_name)s" @@ -34,7 +81,7 @@ msgstr "" msgid "IPv6 is not enabled on this system." msgstr "" -#: neutron/db/l3_agentschedulers_db.py:82 +#: neutron/db/l3_agentschedulers_db.py:83 msgid "" "Skipping period L3 agent status check because automatic router rescheduling " "is disabled." @@ -59,6 +106,21 @@ msgstr "" msgid "%d probe(s) deleted" msgstr "" +#: neutron/openstack/common/eventlet_backdoor.py:140 +#, python-format +msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" +msgstr "Eventlet 백도어는 프로세스 %(pid)d 일 동안 %(port)s에서 수신" + +#: neutron/openstack/common/lockutils.py:82 +#, python-format +msgid "Created lock path: %s" +msgstr "생성된 lock path: %s" + +#: neutron/openstack/common/lockutils.py:194 +#, python-format +msgid "Failed to remove file %(file)s" +msgstr "%(file)s 화일 제거 실패." + #: neutron/openstack/common/periodic_task.py:126 #, python-format msgid "Skipping periodic task %(task)s because its interval is negative" @@ -69,54 +131,54 @@ msgstr "간격이 음수이기 때문에 주기적 태스크 %(task)s을(를) msgid "Skipping periodic task %(task)s because it is disabled" msgstr "사용 안하기 때문에 주기적 태스크 %(task)s을(를) 건너뜀" -#: neutron/openstack/common/service.py:176 +#: neutron/openstack/common/service.py:174 #, python-format msgid "Caught %s, exiting" msgstr "%s 발견, 종료 중" -#: neutron/openstack/common/service.py:240 +#: neutron/openstack/common/service.py:232 msgid "Parent process has died unexpectedly, exiting" msgstr "상위 프로세스가 예기치 않게 정지했습니다. 종료 중" -#: neutron/openstack/common/service.py:271 +#: neutron/openstack/common/service.py:263 #, python-format msgid "Child caught %s, exiting" -msgstr "" +msgstr "자식으로 된 %s가 존재함." -#: neutron/openstack/common/service.py:310 +#: neutron/openstack/common/service.py:302 msgid "Forking too fast, sleeping" msgstr "포크가 너무 빠름. 정지 중" -#: neutron/openstack/common/service.py:329 +#: neutron/openstack/common/service.py:321 #, python-format msgid "Started child %d" msgstr "%d 하위를 시작했음" -#: neutron/openstack/common/service.py:339 +#: neutron/openstack/common/service.py:331 #, python-format msgid "Starting %d workers" msgstr "%d 작업자 시작 중" -#: neutron/openstack/common/service.py:356 +#: neutron/openstack/common/service.py:348 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "%(pid)d 하위가 %(sig)d 신호에 의해 강제 종료됨" -#: neutron/openstack/common/service.py:360 +#: neutron/openstack/common/service.py:352 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "%(pid)s 하위가 %(code)d 상태와 함께 종료했음" -#: neutron/openstack/common/service.py:399 +#: neutron/openstack/common/service.py:391 #, python-format msgid "Caught %s, stopping children" msgstr "%s 발견, 하위 중지 중" -#: neutron/openstack/common/service.py:408 +#: neutron/openstack/common/service.py:400 msgid "Wait called after thread killed. Cleaning up." -msgstr "" +msgstr "쓰레드가 죽기를 기다려서, 지웁니다. " -#: neutron/openstack/common/service.py:424 +#: neutron/openstack/common/service.py:416 #, python-format msgid "Waiting on %d children to exit" msgstr "%d 하위에서 종료하기를 대기 중임" @@ -147,7 +209,7 @@ msgstr "" #: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:379 #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:907 msgid "Agent out of sync with plugin!" -msgstr "" +msgstr "에이전트가 플러그인과 동기화되지 않았습니다!" #: neutron/plugins/nuage/syncmanager.py:46 msgid "Starting the sync between Neutron and VSD" @@ -157,60 +219,47 @@ msgstr "" msgid "Sync between Neutron and VSD completed successfully" msgstr "" -#: neutron/plugins/ofagent/agent/arp_lib.py:137 +#: neutron/plugins/ofagent/agent/arp_lib.py:142 msgid "No bridge is set" msgstr "" -#: neutron/plugins/ofagent/agent/arp_lib.py:140 +#: neutron/plugins/ofagent/agent/arp_lib.py:145 #, python-format msgid "Unknown bridge %(dpid)s ours %(ours)s" msgstr "" -#: neutron/plugins/ofagent/agent/arp_lib.py:147 -#, python-format -msgid "packet-in dpid %(dpid)s in_port %(port)s pkt %(pkt)s" -msgstr "" - -#: neutron/plugins/ofagent/agent/arp_lib.py:152 +#: neutron/plugins/ofagent/agent/arp_lib.py:163 msgid "drop non tenant packet" msgstr "" -#: neutron/plugins/ofagent/agent/arp_lib.py:157 -msgid "drop non-ethernet packet" -msgstr "" - -#: neutron/plugins/ofagent/agent/arp_lib.py:162 -msgid "drop non-arp packet" -msgstr "" - -#: neutron/plugins/ofagent/agent/arp_lib.py:171 +#: neutron/plugins/ofagent/agent/arp_lib.py:182 #, python-format msgid "unknown network %s" msgstr "" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:165 msgid "Agent initialized successfully, now running... " -msgstr "" +msgstr "에이전트가 초기화되었으며, 지금 실행 중... " #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:452 #, python-format msgid "Assigning %(vlan_id)s as local vlan for net-id=%(net_uuid)s" -msgstr "" +msgstr "%(vlan_id)s을(를) net-id=%(net_uuid)s에 대한 로컬 vlan으로 지정 중" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:502 #, python-format msgid "Reclaiming vlan = %(vlan_id)s from net-id = %(net_uuid)s" -msgstr "" +msgstr "net-id = %(net_uuid)s에서 vlan = %(vlan_id)s 재확보 중" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:570 #, python-format msgid "port_unbound() net_uuid %s not in local_vlan_map" -msgstr "" +msgstr "port_unbound() net_uuid %s이(가) local_vlan_map에 있지 않음" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:651 #, python-format msgid "Mapping physical network %(physical_network)s to bridge %(bridge)s" -msgstr "" +msgstr "실제 네트워크 %(physical_network)s을(를) 브릿지 %(bridge)s에 맵핑 중" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:785 #, python-format @@ -222,7 +271,7 @@ msgstr "" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:799 #, python-format msgid "Port %(device)s updated. Details: %(details)s" -msgstr "" +msgstr "%(device)s 포트가 업데이트되었습니다. 세부사항: %(details)s" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:818 #, python-format @@ -232,17 +281,53 @@ msgstr "" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:829 #, python-format msgid "Attachment %s removed" -msgstr "" +msgstr "첨부 %s이(가) 제거됨" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:912 msgid "Agent tunnel out of sync with plugin!" +msgstr "에이전트 터널이 플러그인과 동기화되지 않았습니다!" + +#: neutron/services/vpn/plugin.py:45 +#, python-format +msgid "VPN plugin using service driver: %s" msgstr "" -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:57 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:335 +msgid "Sending status report update to plugin" +msgstr "" + +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:715 +#, python-format +msgid "FAILED: Create of IPSec site-to-site connection %s" +msgstr "" + +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:718 +#, python-format +msgid "SUCCESS: Created IPSec site-to-site connection %s" +msgstr "" + +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:733 +#, python-format +msgid "SUCCESS: Deleted IPSec site-to-site connection %s" +msgstr "" + +#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:56 #, python-format msgid "Scanning config files %s for Cisco CSR configurations" msgstr "" +#: neutron/services/vpn/service_drivers/cisco_csr_db.py:226 +#, python-format +msgid "" +"Mapped connection %(conn_id)s to Tunnel%(tunnel_id)d using IKE policy ID " +"%(ike_id)d and IPSec policy ID %(ipsec_id)d" +msgstr "" + +#: neutron/services/vpn/service_drivers/cisco_csr_db.py:238 +#, python-format +msgid "Removed mapping for connection %s" +msgstr "" + #: neutron/tests/unit/vmware/apiclient/test_api_eventlet_request.py:63 #, python-format msgid "spawned: %d" diff --git a/neutron/locale/neutron-log-error.pot b/neutron/locale/neutron-log-error.pot index 1db4fd12003..fd84af58a4a 100644 --- a/neutron/locale/neutron-log-error.pot +++ b/neutron/locale/neutron-log-error.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: neutron 2015.1.dev60.gc38f68c\n" +"Project-Id-Version: neutron 2015.1.dev166.gf1384cc\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-10-10 06:42+0000\n" +"POT-Creation-Date: 2014-10-22 06:20+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -29,7 +29,7 @@ msgstr "" msgid "Policy check error while calling %s!" msgstr "" -#: neutron/agent/l3_agent.py:1844 +#: neutron/agent/l3_agent.py:1852 #, python-format msgid "Removing incompatible router '%s'" msgstr "" @@ -71,6 +71,15 @@ msgid "" "disable nova notifications or install python-novaclient." msgstr "" +#: neutron/db/l3_agentschedulers_db.py:141 +#, python-format +msgid "Failed to reschedule router %s" +msgstr "" + +#: neutron/db/l3_agentschedulers_db.py:146 +msgid "Exception encountered during router rescheduling." +msgstr "" + #: neutron/openstack/common/excutils.py:76 #, python-format msgid "Original exception being dropped: %s" @@ -81,16 +90,25 @@ msgstr "" msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" +#: neutron/openstack/common/lockutils.py:117 +#, python-format +msgid "Could not release the acquired lock `%s`" +msgstr "" + +#: neutron/openstack/common/loopingcall.py:95 +msgid "in fixed duration looping call" +msgstr "" + +#: neutron/openstack/common/loopingcall.py:138 +msgid "in dynamic looping call" +msgstr "" + #: neutron/openstack/common/periodic_task.py:202 #, python-format msgid "Error during %(full_task_name)s: %(e)s" msgstr "" -#: neutron/openstack/common/service.py:188 -msgid "Exception during rpc cleanup." -msgstr "" - -#: neutron/openstack/common/service.py:277 +#: neutron/openstack/common/service.py:269 msgid "Unhandled exception" msgstr "" @@ -213,7 +231,7 @@ msgstr "" msgid "Error while processing VIF ports" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:2099 +#: neutron/plugins/vmware/plugins/base.py:2098 #, python-format msgid "" "Rolling back database changes for gateway device %s because of an error " @@ -225,52 +243,103 @@ msgstr "" msgid "Not enough candidates, a HA router needs at least %s agents" msgstr "" -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:62 +#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:123 +#, python-format +msgid "%(method)s: Unable to connect to CSR(%(host)s)" +msgstr "" + +#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:128 +#, python-format +msgid "%(method)s: Unexpected error for CSR (%(host)s): %(error)s" +msgstr "" + +#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:158 +#, python-format +msgid "Failed authentication with CSR %(host)s [%(status)s]" +msgstr "" + +#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:193 +#, python-format +msgid "%(method)s: Request timeout for CSR(%(host)s)" +msgstr "" + +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:621 +#, python-format +msgid "Unable to create %(resource)s %(which)s: %(status)d" +msgstr "" + +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:634 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:662 +#, python-format +msgid "Internal error - '%s' is not defined" +msgstr "" + +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:741 +#, python-format +msgid "Unable to change %(tunnel)s admin state to %(state)s" +msgstr "" + +#: neutron/services/vpn/device_drivers/ipsec.py:248 +#, python-format +msgid "Failed to enable vpn process on router %s" +msgstr "" + +#: neutron/services/vpn/device_drivers/ipsec.py:259 +#, python-format +msgid "Failed to disable vpn process on router %s" +msgstr "" + +#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:61 #, python-format msgid "Config file parse error: %s" msgstr "" -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:76 +#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:75 #, python-format msgid "Ignoring Cisco CSR configuration entry - router IP %s is not valid" msgstr "" -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:89 +#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:88 #, python-format msgid "Ignoring Cisco CSR for router %(router)s - missing %(field)s setting" msgstr "" -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:97 +#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:96 #, python-format msgid "Ignoring Cisco CSR for router %s - timeout is not a floating point number" msgstr "" -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:113 +#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:105 +#, python-format +msgid "Ignoring Cisco CSR for subnet %s - REST management is not an IP address" +msgstr "" + +#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:112 #, python-format msgid "Ignoring Cisco CSR for router %s - local tunnel is not an IP address" msgstr "" -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:119 +#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:118 #, python-format msgid "Malformed interface name for Cisco CSR router entry - %s" msgstr "" -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:155 -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:202 +#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:154 +#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:201 msgid "No routers found in INI file!" msgstr "" -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:174 +#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:173 #, python-format msgid "Unable to lookup router ID based on router's public IP (%s) in INI file" msgstr "" -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:177 +#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:176 #, python-format msgid "No matching routers on host %s" msgstr "" -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:211 +#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:210 #, python-format msgid "Unable to find host for router %s" msgstr "" diff --git a/neutron/locale/neutron-log-info.pot b/neutron/locale/neutron-log-info.pot index 935e71d39bf..c37d770305a 100644 --- a/neutron/locale/neutron-log-info.pot +++ b/neutron/locale/neutron-log-info.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: neutron 2015.1.dev36.g63e2efb\n" +"Project-Id-Version: neutron 2015.1.dev166.gf1384cc\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-10-08 06:09+0000\n" +"POT-Creation-Date: 2014-10-22 06:19+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -24,6 +24,53 @@ msgid "" "policy:%(old_policy)s" msgstr "" +#: neutron/agent/securitygroups_rpc.py:80 +msgid "Disabled security-group extension." +msgstr "" + +#: neutron/agent/securitygroups_rpc.py:82 +msgid "Disabled allowed-address-pairs extension." +msgstr "" + +#: neutron/agent/securitygroups_rpc.py:198 +#, python-format +msgid "" +"Skipping method %s as firewall is disabled or configured as " +"NoopFirewallDriver." +msgstr "" + +#: neutron/agent/securitygroups_rpc.py:209 +#, python-format +msgid "Preparing filters for devices %s" +msgstr "" + +#: neutron/agent/securitygroups_rpc.py:239 +#, python-format +msgid "Security group rule updated %r" +msgstr "" + +#: neutron/agent/securitygroups_rpc.py:246 +#, python-format +msgid "Security group member updated %r" +msgstr "" + +#: neutron/agent/securitygroups_rpc.py:268 +msgid "Provider rule updated" +msgstr "" + +#: neutron/agent/securitygroups_rpc.py:280 +#, python-format +msgid "Remove device filter for %r" +msgstr "" + +#: neutron/agent/securitygroups_rpc.py:290 +msgid "Refresh firewall rules" +msgstr "" + +#: neutron/agent/securitygroups_rpc.py:294 +msgid "No ports here to refresh firewall" +msgstr "" + #: neutron/agent/linux/ovs_lib.py:422 #, python-format msgid "Port %(port_id)s not present in bridge %(br_name)s" @@ -33,7 +80,7 @@ msgstr "" msgid "IPv6 is not enabled on this system." msgstr "" -#: neutron/db/l3_agentschedulers_db.py:82 +#: neutron/db/l3_agentschedulers_db.py:83 msgid "" "Skipping period L3 agent status check because automatic router " "rescheduling is disabled." @@ -58,6 +105,21 @@ msgstr "" msgid "%d probe(s) deleted" msgstr "" +#: neutron/openstack/common/eventlet_backdoor.py:140 +#, python-format +msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" +msgstr "" + +#: neutron/openstack/common/lockutils.py:82 +#, python-format +msgid "Created lock path: %s" +msgstr "" + +#: neutron/openstack/common/lockutils.py:194 +#, python-format +msgid "Failed to remove file %(file)s" +msgstr "" + #: neutron/openstack/common/periodic_task.py:126 #, python-format msgid "Skipping periodic task %(task)s because its interval is negative" @@ -68,54 +130,54 @@ msgstr "" msgid "Skipping periodic task %(task)s because it is disabled" msgstr "" -#: neutron/openstack/common/service.py:176 +#: neutron/openstack/common/service.py:174 #, python-format msgid "Caught %s, exiting" msgstr "" -#: neutron/openstack/common/service.py:240 +#: neutron/openstack/common/service.py:232 msgid "Parent process has died unexpectedly, exiting" msgstr "" -#: neutron/openstack/common/service.py:271 +#: neutron/openstack/common/service.py:263 #, python-format msgid "Child caught %s, exiting" msgstr "" -#: neutron/openstack/common/service.py:310 +#: neutron/openstack/common/service.py:302 msgid "Forking too fast, sleeping" msgstr "" -#: neutron/openstack/common/service.py:329 +#: neutron/openstack/common/service.py:321 #, python-format msgid "Started child %d" msgstr "" -#: neutron/openstack/common/service.py:339 +#: neutron/openstack/common/service.py:331 #, python-format msgid "Starting %d workers" msgstr "" -#: neutron/openstack/common/service.py:356 +#: neutron/openstack/common/service.py:348 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" -#: neutron/openstack/common/service.py:360 +#: neutron/openstack/common/service.py:352 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" -#: neutron/openstack/common/service.py:399 +#: neutron/openstack/common/service.py:391 #, python-format msgid "Caught %s, stopping children" msgstr "" -#: neutron/openstack/common/service.py:408 +#: neutron/openstack/common/service.py:400 msgid "Wait called after thread killed. Cleaning up." msgstr "" -#: neutron/openstack/common/service.py:424 +#: neutron/openstack/common/service.py:416 #, python-format msgid "Waiting on %d children to exit" msgstr "" @@ -156,33 +218,20 @@ msgstr "" msgid "Sync between Neutron and VSD completed successfully" msgstr "" -#: neutron/plugins/ofagent/agent/arp_lib.py:137 +#: neutron/plugins/ofagent/agent/arp_lib.py:142 msgid "No bridge is set" msgstr "" -#: neutron/plugins/ofagent/agent/arp_lib.py:140 +#: neutron/plugins/ofagent/agent/arp_lib.py:145 #, python-format msgid "Unknown bridge %(dpid)s ours %(ours)s" msgstr "" -#: neutron/plugins/ofagent/agent/arp_lib.py:147 -#, python-format -msgid "packet-in dpid %(dpid)s in_port %(port)s pkt %(pkt)s" -msgstr "" - -#: neutron/plugins/ofagent/agent/arp_lib.py:152 +#: neutron/plugins/ofagent/agent/arp_lib.py:163 msgid "drop non tenant packet" msgstr "" -#: neutron/plugins/ofagent/agent/arp_lib.py:157 -msgid "drop non-ethernet packet" -msgstr "" - -#: neutron/plugins/ofagent/agent/arp_lib.py:162 -msgid "drop non-arp packet" -msgstr "" - -#: neutron/plugins/ofagent/agent/arp_lib.py:171 +#: neutron/plugins/ofagent/agent/arp_lib.py:182 #, python-format msgid "unknown network %s" msgstr "" @@ -237,11 +286,47 @@ msgstr "" msgid "Agent tunnel out of sync with plugin!" msgstr "" -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:57 +#: neutron/services/vpn/plugin.py:45 +#, python-format +msgid "VPN plugin using service driver: %s" +msgstr "" + +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:335 +msgid "Sending status report update to plugin" +msgstr "" + +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:715 +#, python-format +msgid "FAILED: Create of IPSec site-to-site connection %s" +msgstr "" + +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:718 +#, python-format +msgid "SUCCESS: Created IPSec site-to-site connection %s" +msgstr "" + +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:733 +#, python-format +msgid "SUCCESS: Deleted IPSec site-to-site connection %s" +msgstr "" + +#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:56 #, python-format msgid "Scanning config files %s for Cisco CSR configurations" msgstr "" +#: neutron/services/vpn/service_drivers/cisco_csr_db.py:226 +#, python-format +msgid "" +"Mapped connection %(conn_id)s to Tunnel%(tunnel_id)d using IKE policy ID " +"%(ike_id)d and IPSec policy ID %(ipsec_id)d" +msgstr "" + +#: neutron/services/vpn/service_drivers/cisco_csr_db.py:238 +#, python-format +msgid "Removed mapping for connection %s" +msgstr "" + #: neutron/tests/unit/vmware/apiclient/test_api_eventlet_request.py:63 #, python-format msgid "spawned: %d" diff --git a/neutron/locale/neutron-log-warning.pot b/neutron/locale/neutron-log-warning.pot index 4854c4c3cef..afd67a31f93 100644 --- a/neutron/locale/neutron-log-warning.pot +++ b/neutron/locale/neutron-log-warning.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: neutron 2015.1.dev36.g63e2efb\n" +"Project-Id-Version: neutron 2015.1.dev166.gf1384cc\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-10-08 06:09+0000\n" +"POT-Creation-Date: 2014-10-22 06:19+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -29,7 +29,7 @@ msgstr "" msgid "Unable to find data type descriptor for attribute %s" msgstr "" -#: neutron/agent/l3_agent.py:545 +#: neutron/agent/l3_agent.py:541 #, python-format msgid "" "l3-agent cannot check service plugins enabled at the neutron server when " @@ -38,14 +38,14 @@ msgid "" "warning. Detail message: %s" msgstr "" -#: neutron/agent/l3_agent.py:557 +#: neutron/agent/l3_agent.py:553 #, python-format msgid "" "l3-agent cannot check service plugins enabled on the neutron server. " "Retrying. Detail message: %s" msgstr "" -#: neutron/agent/securitygroups_rpc.py:183 +#: neutron/agent/securitygroups_rpc.py:186 msgid "" "security_group_info_for_devices rpc call not supported by the server, " "falling back to old security_group_rules_for_devices which scales worse." @@ -67,26 +67,36 @@ msgstr "" msgid "Unable to parse interface details. Exception: %s" msgstr "" -#: neutron/db/l3_agentschedulers_db.py:105 +#: neutron/db/l3_agentschedulers_db.py:106 msgid "" "Time since last L3 agent reschedule check has exceeded the interval " "between checks. Waiting before check to allow agents to send a heartbeat " "in case there was a clock adjustment." msgstr "" -#: neutron/db/l3_agentschedulers_db.py:127 +#: neutron/db/l3_agentschedulers_db.py:128 #, python-format msgid "" "Rescheduling router %(router)s from agent %(agent)s because the agent did" " not report to the server in the last %(dead_time)s seconds." msgstr "" -#: neutron/db/l3_hamode_db.py:405 +#: neutron/db/l3_hamode_db.py:406 #, python-format msgid "The router %(router_id)s is bound multiple times on the agent %(host)s" msgstr "" -#: neutron/openstack/common/service.py:364 +#: neutron/db/vpn/vpn_db.py:660 +#, python-format +msgid "vpnservice %s in db is already deleted" +msgstr "" + +#: neutron/openstack/common/loopingcall.py:87 +#, python-format +msgid "task %(func_name)s run outlasted interval by %(delay).2f sec" +msgstr "" + +#: neutron/openstack/common/service.py:356 #, python-format msgid "pid %d not in child list" msgstr "" @@ -178,3 +188,18 @@ msgstr "" msgid "Device %s not defined on plugin" msgstr "" +#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:114 +#, python-format +msgid "%(method)s: Request timeout%(ssl)s (%(timeout).3f sec) for CSR(%(host)s)" +msgstr "" + +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:647 +#, python-format +msgid "Unable to delete %(resource)s %(which)s: %(status)d" +msgstr "" + +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:729 +#, python-format +msgid "Unable to find connection %s" +msgstr "" + diff --git a/neutron/locale/neutron.pot b/neutron/locale/neutron.pot index ea94d2459a2..5e119ec7972 100644 --- a/neutron/locale/neutron.pot +++ b/neutron/locale/neutron.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: neutron 2015.1.dev60.gc38f68c\n" +"Project-Id-Version: neutron 2015.1.dev166.gf1384cc\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-10-10 06:42+0000\n" +"POT-Creation-Date: 2014-10-22 06:19+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -408,7 +408,7 @@ msgstr "" msgid "Number of threads to use during sync process." msgstr "" -#: neutron/agent/dhcp_agent.py:65 neutron/agent/l3_agent.py:502 +#: neutron/agent/dhcp_agent.py:65 neutron/agent/l3_agent.py:499 #: neutron/agent/metadata/namespace_proxy.py:165 msgid "Location of Metadata Proxy UNIX domain socket" msgstr "" @@ -488,8 +488,8 @@ msgid "" "port %(port_id)s, for router %(router_id)s will be considered" msgstr "" -#: neutron/agent/dhcp_agent.py:582 neutron/agent/l3_agent.py:2009 -#: neutron/agent/metadata/agent.py:354 +#: neutron/agent/dhcp_agent.py:582 neutron/agent/l3_agent.py:2017 +#: neutron/agent/metadata/agent.py:355 #: neutron/plugins/cisco/cfg_agent/cfg_agent.py:326 #: neutron/services/metering/agents/metering_agent.py:270 msgid "" @@ -497,8 +497,8 @@ msgid "" " will be disabled." msgstr "" -#: neutron/agent/dhcp_agent.py:588 neutron/agent/l3_agent.py:2014 -#: neutron/agent/metadata/agent.py:359 +#: neutron/agent/dhcp_agent.py:588 neutron/agent/l3_agent.py:2022 +#: neutron/agent/metadata/agent.py:360 #: neutron/plugins/ibm/agent/sdnve_neutron_agent.py:108 #: neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py:793 #: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:216 @@ -515,7 +515,7 @@ msgstr "" msgid "Agent updated: %(payload)s" msgstr "" -#: neutron/agent/dhcp_agent.py:597 neutron/agent/l3_agent.py:2019 +#: neutron/agent/dhcp_agent.py:597 neutron/agent/l3_agent.py:2027 #: neutron/services/metering/agents/metering_agent.py:278 #, python-format msgid "agent_updated by server side %s!" @@ -525,7 +525,7 @@ msgstr "" msgid "Cannot allocate link local address" msgstr "" -#: neutron/agent/l3_agent.py:463 +#: neutron/agent/l3_agent.py:460 msgid "" "The working mode for the agent. Allowed modes are: 'legacy' - this " "preserves the existing behavior where the L3 agent is deployed on a " @@ -537,207 +537,207 @@ msgid "" "centralized node (or in single-host deployments, e.g. devstack)" msgstr "" -#: neutron/agent/l3_agent.py:476 neutron/debug/debug_agent.py:41 +#: neutron/agent/l3_agent.py:473 neutron/debug/debug_agent.py:41 msgid "Name of bridge used for external network traffic." msgstr "" -#: neutron/agent/l3_agent.py:480 +#: neutron/agent/l3_agent.py:477 msgid "TCP Port used by Neutron metadata namespace proxy." msgstr "" -#: neutron/agent/l3_agent.py:484 +#: neutron/agent/l3_agent.py:481 msgid "" "Send this many gratuitous ARPs for HA setup, if less than or equal to 0, " "the feature is disabled" msgstr "" -#: neutron/agent/l3_agent.py:487 +#: neutron/agent/l3_agent.py:484 msgid "" "If namespaces is disabled, the l3 agent can only configure a router that " "has the matching router ID." msgstr "" -#: neutron/agent/l3_agent.py:492 +#: neutron/agent/l3_agent.py:489 msgid "Agent should implement routers with no gateway" msgstr "" -#: neutron/agent/l3_agent.py:494 +#: neutron/agent/l3_agent.py:491 msgid "UUID of external network for routers implemented by the agents." msgstr "" -#: neutron/agent/l3_agent.py:497 +#: neutron/agent/l3_agent.py:494 msgid "Allow running metadata proxy." msgstr "" -#: neutron/agent/l3_agent.py:499 +#: neutron/agent/l3_agent.py:496 msgid "Delete namespace after removing a router." msgstr "" -#: neutron/agent/l3_agent.py:522 +#: neutron/agent/l3_agent.py:519 #, python-format msgid "Error importing interface driver '%s'" msgstr "" -#: neutron/agent/l3_agent.py:594 neutron/agent/linux/dhcp.py:785 +#: neutron/agent/l3_agent.py:592 neutron/agent/linux/dhcp.py:786 #: neutron/services/metering/drivers/iptables/iptables_driver.py:90 msgid "An interface driver must be specified" msgstr "" -#: neutron/agent/l3_agent.py:599 +#: neutron/agent/l3_agent.py:597 msgid "Router id is required if not using namespaces." msgstr "" -#: neutron/agent/l3_agent.py:617 +#: neutron/agent/l3_agent.py:615 msgid "RuntimeError in obtaining router list for namespace cleanup." msgstr "" -#: neutron/agent/l3_agent.py:654 +#: neutron/agent/l3_agent.py:651 #, python-format msgid "Failed to destroy stale router namespace %s" msgstr "" -#: neutron/agent/l3_agent.py:672 neutron/agent/linux/dhcp.py:235 +#: neutron/agent/l3_agent.py:669 neutron/agent/linux/dhcp.py:235 #, python-format msgid "Failed trying to delete namespace: %s" msgstr "" -#: neutron/agent/l3_agent.py:760 +#: neutron/agent/l3_agent.py:757 msgid "" "The 'gateway_external_network_id' option must be configured for this " "agent as Neutron has more than one external network." msgstr "" -#: neutron/agent/l3_agent.py:790 +#: neutron/agent/l3_agent.py:794 #, python-format msgid "Info for router %s were not found. Skipping router removal" msgstr "" -#: neutron/agent/l3_agent.py:865 +#: neutron/agent/l3_agent.py:869 #: neutron/plugins/cisco/cfg_agent/service_helpers/routing_svc_helper.py:633 #: neutron/services/firewall/agents/varmour/varmour_router.py:100 #, python-format msgid "Router port %s has no IP address" msgstr "" -#: neutron/agent/l3_agent.py:867 neutron/db/l3_db.py:1005 +#: neutron/agent/l3_agent.py:871 neutron/db/l3_db.py:1013 #: neutron/plugins/cisco/cfg_agent/service_helpers/routing_svc_helper.py:635 #: neutron/services/firewall/agents/varmour/varmour_router.py:103 #, python-format msgid "Ignoring multiple IPs on router port %s" msgstr "" -#: neutron/agent/l3_agent.py:928 +#: neutron/agent/l3_agent.py:932 #, python-format msgid "Deleting stale internal router device: %s" msgstr "" -#: neutron/agent/l3_agent.py:965 +#: neutron/agent/l3_agent.py:969 #, python-format msgid "Deleting stale external router device: %s" msgstr "" -#: neutron/agent/l3_agent.py:1133 +#: neutron/agent/l3_agent.py:1139 #, python-format msgid "Unable to configure IP address for floating IP: %s" msgstr "" -#: neutron/agent/l3_agent.py:1216 +#: neutron/agent/l3_agent.py:1222 #, python-format msgid "Failed sending gratuitous ARP: %s" msgstr "" -#: neutron/agent/l3_agent.py:1278 +#: neutron/agent/l3_agent.py:1287 msgid "DVR: no map match_port found!" msgstr "" -#: neutron/agent/l3_agent.py:1482 +#: neutron/agent/l3_agent.py:1491 msgid "DVR: error adding redirection logic" msgstr "" -#: neutron/agent/l3_agent.py:1494 +#: neutron/agent/l3_agent.py:1503 msgid "DVR: removed snat failed" msgstr "" -#: neutron/agent/l3_agent.py:1595 +#: neutron/agent/l3_agent.py:1604 msgid "Missing subnet/agent_gateway_port" msgstr "" -#: neutron/agent/l3_agent.py:1716 +#: neutron/agent/l3_agent.py:1724 #, python-format msgid "Got router deleted notification for %s" msgstr "" -#: neutron/agent/l3_agent.py:1737 +#: neutron/agent/l3_agent.py:1745 msgid "DVR: Failed updating arp entry" msgstr "" -#: neutron/agent/l3_agent.py:1764 +#: neutron/agent/l3_agent.py:1772 #, python-format msgid "Got routers updated notification :%s" msgstr "" -#: neutron/agent/l3_agent.py:1774 +#: neutron/agent/l3_agent.py:1782 #, python-format msgid "Got router removed from agent :%r" msgstr "" -#: neutron/agent/l3_agent.py:1780 +#: neutron/agent/l3_agent.py:1788 #, python-format msgid "Got router added to agent :%r" msgstr "" -#: neutron/agent/l3_agent.py:1786 +#: neutron/agent/l3_agent.py:1794 #, python-format msgid "The external network bridge '%s' does not exist" msgstr "" -#: neutron/agent/l3_agent.py:1826 +#: neutron/agent/l3_agent.py:1834 #, python-format msgid "Failed to fetch router information for '%s'" msgstr "" -#: neutron/agent/l3_agent.py:1867 +#: neutron/agent/l3_agent.py:1875 #, python-format msgid "Starting _sync_routers_task - fullsync:%s" msgstr "" -#: neutron/agent/l3_agent.py:1885 +#: neutron/agent/l3_agent.py:1893 #, python-format msgid "Processing :%r" msgstr "" -#: neutron/agent/l3_agent.py:1893 +#: neutron/agent/l3_agent.py:1901 msgid "_sync_routers_task successfully completed" msgstr "" -#: neutron/agent/l3_agent.py:1895 +#: neutron/agent/l3_agent.py:1903 msgid "Failed synchronizing routers due to RPC error" msgstr "" -#: neutron/agent/l3_agent.py:1898 +#: neutron/agent/l3_agent.py:1906 #: neutron/services/metering/agents/metering_agent.py:59 msgid "Failed synchronizing routers" msgstr "" -#: neutron/agent/l3_agent.py:1921 +#: neutron/agent/l3_agent.py:1929 msgid "L3 agent started" msgstr "" -#: neutron/agent/l3_agent.py:1940 -#, python-format -msgid "Added route entry is '%s'" -msgstr "" - #: neutron/agent/l3_agent.py:1948 #, python-format +msgid "Added route entry is '%s'" +msgstr "" + +#: neutron/agent/l3_agent.py:1956 +#, python-format msgid "Removed route entry is '%s'" msgstr "" -#: neutron/agent/l3_agent.py:1982 +#: neutron/agent/l3_agent.py:1990 msgid "Report state task started" msgstr "" -#: neutron/agent/l3_agent.py:2006 +#: neutron/agent/l3_agent.py:2014 msgid "Report state task successfully completed" msgstr "" @@ -802,115 +802,78 @@ msgstr "" msgid "DVR functionality requires a server upgrade." msgstr "" -#: neutron/agent/securitygroups_rpc.py:33 +#: neutron/agent/securitygroups_rpc.py:36 msgid "Driver for security groups firewall in the L2 agent" msgstr "" -#: neutron/agent/securitygroups_rpc.py:37 +#: neutron/agent/securitygroups_rpc.py:40 msgid "" "Controls whether the neutron security group API is enabled in the server." " It should be false when using no security groups or using the nova " "security group API." msgstr "" -#: neutron/agent/securitygroups_rpc.py:44 +#: neutron/agent/securitygroups_rpc.py:47 msgid "Use ipset to speed-up the iptables based security groups." msgstr "" -#: neutron/agent/securitygroups_rpc.py:64 -#: neutron/agent/securitygroups_rpc.py:156 +#: neutron/agent/securitygroups_rpc.py:67 +#: neutron/agent/securitygroups_rpc.py:159 msgid "Driver configuration doesn't match with enable_security_group" msgstr "" -#: neutron/agent/securitygroups_rpc.py:77 -msgid "Disabled security-group extension." -msgstr "" - -#: neutron/agent/securitygroups_rpc.py:79 -msgid "Disabled allowed-address-pairs extension." -msgstr "" - -#: neutron/agent/securitygroups_rpc.py:87 +#: neutron/agent/securitygroups_rpc.py:90 #, python-format msgid "Get security group rules for devices via rpc %r" msgstr "" -#: neutron/agent/securitygroups_rpc.py:111 +#: neutron/agent/securitygroups_rpc.py:114 msgid "" "Security group agent binding currently not set. This should be set by the" " end of the init process." msgstr "" -#: neutron/agent/securitygroups_rpc.py:122 +#: neutron/agent/securitygroups_rpc.py:125 #, python-format msgid "Security group rule updated on remote: %s" msgstr "" -#: neutron/agent/securitygroups_rpc.py:134 +#: neutron/agent/securitygroups_rpc.py:137 #, python-format msgid "Security group member updated on remote: %s" msgstr "" -#: neutron/agent/securitygroups_rpc.py:141 -#: neutron/agent/securitygroups_rpc.py:252 +#: neutron/agent/securitygroups_rpc.py:144 msgid "Provider rule updated" msgstr "" -#: neutron/agent/securitygroups_rpc.py:154 +#: neutron/agent/securitygroups_rpc.py:157 #, python-format msgid "Init firewall settings (driver=%s)" msgstr "" -#: neutron/agent/securitygroups_rpc.py:193 -#, python-format -msgid "Preparing filters for devices %s" -msgstr "" - -#: neutron/agent/securitygroups_rpc.py:223 -#, python-format -msgid "Security group rule updated %r" -msgstr "" - -#: neutron/agent/securitygroups_rpc.py:230 -#, python-format -msgid "Security group member updated %r" -msgstr "" - -#: neutron/agent/securitygroups_rpc.py:244 +#: neutron/agent/securitygroups_rpc.py:260 #, python-format msgid "" "Adding %s devices to the list of devices for which firewall needs to be " "refreshed" msgstr "" -#: neutron/agent/securitygroups_rpc.py:264 -#, python-format -msgid "Remove device filter for %r" -msgstr "" - -#: neutron/agent/securitygroups_rpc.py:273 -msgid "Refresh firewall rules" -msgstr "" - -#: neutron/agent/securitygroups_rpc.py:277 -msgid "No ports here to refresh firewall" -msgstr "" - -#: neutron/agent/securitygroups_rpc.py:291 +#: neutron/agent/securitygroups_rpc.py:308 #, python-format msgid "Update port filter for %s" msgstr "" -#: neutron/agent/securitygroups_rpc.py:314 +#: neutron/agent/securitygroups_rpc.py:331 #, python-format msgid "Preparing device filters for %d new devices" msgstr "" -#: neutron/agent/securitygroups_rpc.py:327 +#: neutron/agent/securitygroups_rpc.py:344 msgid "Refreshing firewall for all filtered devices" msgstr "" -#: neutron/agent/securitygroups_rpc.py:335 +#: neutron/agent/securitygroups_rpc.py:352 #, python-format msgid "Refreshing firewall for %d devices" msgstr "" @@ -1102,34 +1065,34 @@ msgstr "" msgid "Done building host file %s" msgstr "" -#: neutron/agent/linux/dhcp.py:792 +#: neutron/agent/linux/dhcp.py:793 #, python-format msgid "Error importing interface driver '%(driver)s': %(inner)s" msgstr "" -#: neutron/agent/linux/dhcp.py:832 +#: neutron/agent/linux/dhcp.py:833 #, python-format msgid "Setting gateway for dhcp netns on net %(n)s to %(ip)s" msgstr "" -#: neutron/agent/linux/dhcp.py:842 +#: neutron/agent/linux/dhcp.py:843 #, python-format msgid "Removing gateway for dhcp netns on net %s" msgstr "" -#: neutron/agent/linux/dhcp.py:886 +#: neutron/agent/linux/dhcp.py:887 #, python-format msgid "" "DHCP port %(device_id)s on network %(network_id)s does not yet exist. " "Checking for a reserved port." msgstr "" -#: neutron/agent/linux/dhcp.py:900 +#: neutron/agent/linux/dhcp.py:901 #, python-format msgid "DHCP port %(device_id)s on network %(network_id)s does not yet exist." msgstr "" -#: neutron/agent/linux/dhcp.py:935 neutron/debug/debug_agent.py:67 +#: neutron/agent/linux/dhcp.py:936 neutron/debug/debug_agent.py:67 #, python-format msgid "Reusing existing device: %s." msgstr "" @@ -1476,32 +1439,32 @@ msgid "" "_get_ports method." msgstr "" -#: neutron/agent/metadata/agent.py:228 +#: neutron/agent/metadata/agent.py:229 msgid "" "The remote metadata server responded with Forbidden. This response " "usually occurs when shared secrets do not match." msgstr "" -#: neutron/agent/metadata/agent.py:241 +#: neutron/agent/metadata/agent.py:242 #: neutron/agent/metadata/namespace_proxy.py:120 msgid "Remote metadata server experienced an internal server error." msgstr "" -#: neutron/agent/metadata/agent.py:247 +#: neutron/agent/metadata/agent.py:248 #: neutron/agent/metadata/namespace_proxy.py:126 #, python-format msgid "Unexpected response code: %s" msgstr "" -#: neutron/agent/metadata/agent.py:299 +#: neutron/agent/metadata/agent.py:300 msgid "Location for Metadata Proxy UNIX domain socket" msgstr "" -#: neutron/agent/metadata/agent.py:302 +#: neutron/agent/metadata/agent.py:303 msgid "Number of separate worker processes for metadata server" msgstr "" -#: neutron/agent/metadata/agent.py:306 +#: neutron/agent/metadata/agent.py:307 msgid "Number of backlog requests to configure the metadata server socket with" msgstr "" @@ -1811,10 +1774,6 @@ msgstr "" msgid "Update dhcp port %(port)s from %(host)s." msgstr "" -#: neutron/api/rpc/handlers/dvr_rpc.py:128 -msgid "DVR agent binding currently not set." -msgstr "" - #: neutron/api/rpc/handlers/l3_rpc.py:70 msgid "" "No plugin for L3 routing registered! Will reply to l3 agent with empty " @@ -2676,7 +2635,7 @@ msgid "" "therefore results cannot be cached for %(func_name)s." msgstr "" -#: neutron/common/utils.py:118 neutron/openstack/common/fileutils.py:63 +#: neutron/common/utils.py:118 #, python-format msgid "Reloading cached file %s" msgstr "" @@ -2790,84 +2749,91 @@ msgstr "" msgid "IP address %s is not a valid IP for the defined subnet" msgstr "" -#: neutron/db/db_base_plugin_v2.py:458 neutron/db/db_base_plugin_v2.py:491 +#: neutron/db/db_base_plugin_v2.py:453 +#, python-format +msgid "" +"IPv6 address %(address)s can not be directly assigned to a port on subnet" +" %(id)s with %(mode)s address mode" +msgstr "" + +#: neutron/db/db_base_plugin_v2.py:465 neutron/db/db_base_plugin_v2.py:507 #: neutron/plugins/opencontrail/contrail_plugin.py:388 msgid "Exceeded maximim amount of fixed ips per port" msgstr "" -#: neutron/db/db_base_plugin_v2.py:506 +#: neutron/db/db_base_plugin_v2.py:522 #, python-format msgid "Port update. Hold %s" msgstr "" -#: neutron/db/db_base_plugin_v2.py:513 +#: neutron/db/db_base_plugin_v2.py:529 #, python-format msgid "Port update. Adding %s" msgstr "" -#: neutron/db/db_base_plugin_v2.py:587 +#: neutron/db/db_base_plugin_v2.py:604 msgid "0 is not allowed as CIDR prefix length" msgstr "" -#: neutron/db/db_base_plugin_v2.py:597 +#: neutron/db/db_base_plugin_v2.py:614 #, python-format msgid "" "Requested subnet with cidr: %(cidr)s for network: %(network_id)s overlaps" " with another subnet" msgstr "" -#: neutron/db/db_base_plugin_v2.py:602 +#: neutron/db/db_base_plugin_v2.py:619 #, python-format msgid "" "Validation for CIDR: %(new_cidr)s failed - overlaps with subnet " "%(subnet_id)s (CIDR: %(cidr)s)" msgstr "" -#: neutron/db/db_base_plugin_v2.py:622 +#: neutron/db/db_base_plugin_v2.py:639 msgid "Performing IP validity checks on allocation pools" msgstr "" -#: neutron/db/db_base_plugin_v2.py:629 +#: neutron/db/db_base_plugin_v2.py:646 #, python-format msgid "Found invalid IP address in pool: %(start)s - %(end)s:" msgstr "" -#: neutron/db/db_base_plugin_v2.py:636 +#: neutron/db/db_base_plugin_v2.py:653 msgid "Specified IP addresses do not match the subnet IP version" msgstr "" -#: neutron/db/db_base_plugin_v2.py:640 +#: neutron/db/db_base_plugin_v2.py:657 #, python-format msgid "Start IP (%(start)s) is greater than end IP (%(end)s)" msgstr "" -#: neutron/db/db_base_plugin_v2.py:645 +#: neutron/db/db_base_plugin_v2.py:662 #, python-format msgid "Found pool larger than subnet CIDR:%(start)s - %(end)s" msgstr "" -#: neutron/db/db_base_plugin_v2.py:658 +#: neutron/db/db_base_plugin_v2.py:675 msgid "Checking for overlaps among allocation pools and gateway ip" msgstr "" -#: neutron/db/db_base_plugin_v2.py:669 +#: neutron/db/db_base_plugin_v2.py:686 #, python-format msgid "Found overlapping ranges: %(l_range)s and %(r_range)s" msgstr "" -#: neutron/db/db_base_plugin_v2.py:682 neutron/db/db_base_plugin_v2.py:686 +#: neutron/db/db_base_plugin_v2.py:699 neutron/db/db_base_plugin_v2.py:703 #, python-format msgid "Invalid route: %s" msgstr "" -#: neutron/db/db_base_plugin_v2.py:764 +#: neutron/db/db_base_plugin_v2.py:781 #, python-format msgid "" "Invalid CIDR %s for IPv6 address mode. OpenStack uses the EUI-64 address " "format, which requires the prefix to be /64." msgstr "" -#: neutron/db/db_base_plugin_v2.py:772 +#: neutron/db/db_base_plugin_v2.py:789 #, python-format msgid "" "ipv6_ra_mode set to '%(ra_mode)s' with ipv6_address_mode set to " @@ -2875,49 +2841,49 @@ msgid "" "the same value" msgstr "" -#: neutron/db/db_base_plugin_v2.py:780 +#: neutron/db/db_base_plugin_v2.py:797 msgid "" "ipv6_ra_mode or ipv6_address_mode cannot be set when enable_dhcp is set " "to False." msgstr "" -#: neutron/db/db_base_plugin_v2.py:786 +#: neutron/db/db_base_plugin_v2.py:803 msgid "Cannot disable enable_dhcp with ipv6 attributes set" msgstr "" -#: neutron/db/db_base_plugin_v2.py:878 +#: neutron/db/db_base_plugin_v2.py:895 #, python-format msgid "An exception occurred while creating the %(resource)s:%(item)s" msgstr "" -#: neutron/db/db_base_plugin_v2.py:975 +#: neutron/db/db_base_plugin_v2.py:992 #, python-format msgid "%(name)s '%(addr)s' does not match the ip_version '%(ip_version)s'" msgstr "" -#: neutron/db/db_base_plugin_v2.py:999 +#: neutron/db/db_base_plugin_v2.py:1016 msgid "Gateway is not valid on subnet" msgstr "" -#: neutron/db/db_base_plugin_v2.py:1019 neutron/db/db_base_plugin_v2.py:1033 +#: neutron/db/db_base_plugin_v2.py:1036 neutron/db/db_base_plugin_v2.py:1050 #: neutron/plugins/opencontrail/contrail_plugin.py:312 msgid "new subnet" msgstr "" -#: neutron/db/db_base_plugin_v2.py:1026 +#: neutron/db/db_base_plugin_v2.py:1043 #, python-format msgid "Error parsing dns address %s" msgstr "" -#: neutron/db/db_base_plugin_v2.py:1042 +#: neutron/db/db_base_plugin_v2.py:1059 msgid "ipv6_ra_mode is not valid when ip_version is 4" msgstr "" -#: neutron/db/db_base_plugin_v2.py:1046 +#: neutron/db/db_base_plugin_v2.py:1063 msgid "ipv6_address_mode is not valid when ip_version is 4" msgstr "" -#: neutron/db/db_base_plugin_v2.py:1414 +#: neutron/db/db_base_plugin_v2.py:1432 #, python-format msgid "" "Ignoring PortNotFound when deleting port '%s'. The port has already been " @@ -2960,15 +2926,15 @@ msgstr "" msgid "Removed routes are %s" msgstr "" -#: neutron/db/l3_agentschedulers_db.py:48 +#: neutron/db/l3_agentschedulers_db.py:49 msgid "Driver to use for scheduling router to a default L3 agent" msgstr "" -#: neutron/db/l3_agentschedulers_db.py:51 +#: neutron/db/l3_agentschedulers_db.py:52 msgid "Allow auto scheduling of routers to L3 agent." msgstr "" -#: neutron/db/l3_agentschedulers_db.py:53 +#: neutron/db/l3_agentschedulers_db.py:54 msgid "" "Automatically reschedule routers from offline L3 agents to online L3 " "agents." @@ -2989,90 +2955,90 @@ msgstr "" msgid "Network %s is not an external network" msgstr "" -#: neutron/db/l3_db.py:403 +#: neutron/db/l3_db.py:407 #, python-format msgid "Router already has a port on subnet %s" msgstr "" -#: neutron/db/l3_db.py:417 +#: neutron/db/l3_db.py:421 #, python-format msgid "" "Cidr %(subnet_cidr)s of subnet %(subnet_id)s overlaps with cidr %(cidr)s " "of subnet %(sub_id)s" msgstr "" -#: neutron/db/l3_db.py:433 neutron/db/l3_db.py:576 neutron/db/l3_dvr_db.py:239 +#: neutron/db/l3_db.py:437 neutron/db/l3_db.py:584 neutron/db/l3_dvr_db.py:239 #: neutron/plugins/bigswitch/l3_router_plugin.py:170 #: neutron/plugins/bigswitch/l3_router_plugin.py:179 #: neutron/plugins/opencontrail/contrail_plugin.py:499 msgid "Either subnet_id or port_id must be specified" msgstr "" -#: neutron/db/l3_db.py:436 neutron/plugins/opencontrail/contrail_plugin.py:509 +#: neutron/db/l3_db.py:440 neutron/plugins/opencontrail/contrail_plugin.py:509 msgid "Cannot specify both subnet-id and port-id" msgstr "" -#: neutron/db/l3_db.py:449 +#: neutron/db/l3_db.py:453 msgid "Router port must have exactly one fixed IP" msgstr "" -#: neutron/db/l3_db.py:463 +#: neutron/db/l3_db.py:467 msgid "Subnet for router interface must have a gateway IP" msgstr "" -#: neutron/db/l3_db.py:624 neutron/plugins/nec/nec_router.py:195 +#: neutron/db/l3_db.py:632 neutron/plugins/nec/nec_router.py:195 #, python-format msgid "Cannot add floating IP to port on subnet %s which has no gateway_ip" msgstr "" -#: neutron/db/l3_db.py:660 +#: neutron/db/l3_db.py:668 #, python-format msgid "" "Port %(port_id)s is associated with a different tenant than Floating IP " "%(floatingip_id)s and therefore cannot be bound." msgstr "" -#: neutron/db/l3_db.py:664 +#: neutron/db/l3_db.py:672 #, python-format msgid "" "Cannot create floating IP and bind it to Port %s, since that port is " "owned by a different tenant." msgstr "" -#: neutron/db/l3_db.py:676 +#: neutron/db/l3_db.py:684 #, python-format msgid "Port %(id)s does not have fixed ip %(address)s" msgstr "" -#: neutron/db/l3_db.py:683 +#: neutron/db/l3_db.py:691 #, python-format msgid "Cannot add floating IP to port %s that hasno fixed IP addresses" msgstr "" -#: neutron/db/l3_db.py:687 +#: neutron/db/l3_db.py:695 #, python-format msgid "" "Port %s has multiple fixed IPs. Must provide a specific IP when " "assigning a floating IP" msgstr "" -#: neutron/db/l3_db.py:717 neutron/plugins/vmware/plugins/base.py:1814 +#: neutron/db/l3_db.py:725 neutron/plugins/vmware/plugins/base.py:1813 msgid "fixed_ip_address cannot be specified without a port_id" msgstr "" -#: neutron/db/l3_db.py:757 +#: neutron/db/l3_db.py:765 #, python-format msgid "Network %s is not a valid external network" msgstr "" -#: neutron/db/l3_db.py:890 +#: neutron/db/l3_db.py:898 #, python-format msgid "" "Port %(port_id)s has owner %(port_owner)s, but no IP address, so it can " "be deleted" msgstr "" -#: neutron/db/l3_db.py:1011 +#: neutron/db/l3_db.py:1019 #, python-format msgid "Skipping port %s as no IP is configure on it" msgstr "" @@ -3131,12 +3097,12 @@ msgstr "" msgid "Resource type '%(resource_type)s' is longer than %(maxlen)d characters" msgstr "" -#: neutron/db/securitygroups_rpc_base.py:56 +#: neutron/db/securitygroups_rpc_base.py:57 #, python-format msgid "%s must implement get_port_from_device." msgstr "" -#: neutron/db/securitygroups_rpc_base.py:344 +#: neutron/db/securitygroups_rpc_base.py:349 #, python-format msgid "No valid gateway port on subnet %s is found for IPv6 RA" msgstr "" @@ -3330,7 +3296,7 @@ msgid "The %s tunnel type to migrate from" msgstr "" #: neutron/db/migration/migrate_to_ml2.py:462 -#: neutron/plugins/openvswitch/common/config.py:80 +#: neutron/plugins/openvswitch/common/config.py:67 msgid "The UDP port to use for VXLAN tunnels." msgstr "" @@ -3367,11 +3333,6 @@ msgstr "" msgid "Table %(old_t)r was renamed to %(new_t)r" msgstr "" -#: neutron/db/vpn/vpn_db.py:649 -#, python-format -msgid "vpnservice %s in db is already deleted" -msgstr "" - #: neutron/debug/commands.py:33 msgid "Unimplemented commands" msgstr "" @@ -3979,15 +3940,15 @@ msgstr "" msgid "Plugin does not support updating provider attributes" msgstr "" -#: neutron/extensions/quotasv2.py:67 +#: neutron/extensions/quotasv2.py:66 msgid "POST requests are not supported on this resource." msgstr "" -#: neutron/extensions/quotasv2.py:86 +#: neutron/extensions/quotasv2.py:85 msgid "Only admin is authorized to access quotas for another tenant" msgstr "" -#: neutron/extensions/quotasv2.py:91 +#: neutron/extensions/quotasv2.py:90 msgid "Only admin can view or configure quota" msgstr "" @@ -4153,27 +4114,32 @@ msgstr "" #: neutron/extensions/vpnaas.py:68 #, python-format +msgid "Subnet %(subnet_id)s is used by VPNService %(vpnservice_id)s" +msgstr "" + +#: neutron/extensions/vpnaas.py:72 +#, python-format msgid "Invalid state %(state)s of vpnaas resource %(id)s for updating" msgstr "" -#: neutron/extensions/vpnaas.py:73 +#: neutron/extensions/vpnaas.py:77 #, python-format msgid "" "IPsecPolicy %(ipsecpolicy_id)s is in use by existing IPsecSiteConnection " "and can't be updated or deleted" msgstr "" -#: neutron/extensions/vpnaas.py:78 +#: neutron/extensions/vpnaas.py:82 #, python-format msgid "Can not load driver :%(device_driver)s" msgstr "" -#: neutron/extensions/vpnaas.py:82 +#: neutron/extensions/vpnaas.py:86 #, python-format msgid "Subnet %(subnet_id)s is not connected to Router %(router_id)s" msgstr "" -#: neutron/extensions/vpnaas.py:87 +#: neutron/extensions/vpnaas.py:91 #, python-format msgid "Router %(router_id)s has no external network gateway set" msgstr "" @@ -4223,11 +4189,6 @@ msgstr "" msgid "Nova event response: %s" msgstr "" -#: neutron/openstack/common/eventlet_backdoor.py:140 -#, python-format -msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" -msgstr "" - #: neutron/openstack/common/gettextutils.py:320 msgid "Message objects do not support addition." msgstr "" @@ -4238,84 +4199,31 @@ msgid "" "characters. Please use unicode() or translate() instead." msgstr "" -#: neutron/openstack/common/lockutils.py:103 +#: neutron/openstack/common/lockutils.py:101 #, python-format -msgid "Could not release the acquired lock `%s`" +msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" -#: neutron/openstack/common/lockutils.py:168 -#, python-format -msgid "Got semaphore \"%(lock)s\"" -msgstr "" - -#: neutron/openstack/common/lockutils.py:177 -#, python-format -msgid "Attempting to grab file lock \"%(lock)s\"" -msgstr "" - -#: neutron/openstack/common/lockutils.py:187 -#, python-format -msgid "Created lock path: %s" -msgstr "" - -#: neutron/openstack/common/lockutils.py:205 -#, python-format -msgid "Got file lock \"%(lock)s\" at %(path)s" -msgstr "" - -#: neutron/openstack/common/lockutils.py:209 -#, python-format -msgid "Released file lock \"%(lock)s\" at %(path)s" -msgstr "" - -#: neutron/openstack/common/lockutils.py:247 -#, python-format -msgid "Got semaphore / lock \"%(function)s\"" -msgstr "" - -#: neutron/openstack/common/lockutils.py:251 -#, python-format -msgid "Semaphore / lock released \"%(function)s\"" -msgstr "" - -#: neutron/openstack/common/log.py:327 +#: neutron/openstack/common/log.py:287 #, python-format msgid "Deprecated: %s" msgstr "" -#: neutron/openstack/common/log.py:436 +#: neutron/openstack/common/log.py:395 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" -#: neutron/openstack/common/log.py:486 +#: neutron/openstack/common/log.py:456 #, python-format msgid "syslog facility must be one of: %s" msgstr "" -#: neutron/openstack/common/log.py:729 +#: neutron/openstack/common/log.py:707 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" -#: neutron/openstack/common/loopingcall.py:82 -#, python-format -msgid "task run outlasted interval by %s sec" -msgstr "" - -#: neutron/openstack/common/loopingcall.py:89 -msgid "in fixed duration looping call" -msgstr "" - -#: neutron/openstack/common/loopingcall.py:129 -#, python-format -msgid "Dynamic looping call sleeping for %.02f seconds" -msgstr "" - -#: neutron/openstack/common/loopingcall.py:136 -msgid "in dynamic looping call" -msgstr "" - #: neutron/openstack/common/periodic_task.py:40 #, python-format msgid "Unexpected argument for periodic task creation: %(arg)s." @@ -4370,32 +4278,6 @@ msgstr "" msgid "process_input not supported over SSH" msgstr "" -#: neutron/openstack/common/sslutils.py:50 -#, python-format -msgid "Unable to find cert_file : %s" -msgstr "" - -#: neutron/openstack/common/sslutils.py:53 -#, python-format -msgid "Unable to find ca_file : %s" -msgstr "" - -#: neutron/openstack/common/sslutils.py:56 -#, python-format -msgid "Unable to find key_file : %s" -msgstr "" - -#: neutron/openstack/common/sslutils.py:59 -msgid "" -"When running server in SSL mode, you must specify both a cert_file and " -"key_file option value in your configuration file" -msgstr "" - -#: neutron/openstack/common/sslutils.py:98 -#, python-format -msgid "Invalid SSL version : %s" -msgstr "" - #: neutron/openstack/common/strutils.py:92 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" @@ -4411,20 +4293,6 @@ msgstr "" msgid "Invalid string format: %s" msgstr "" -#: neutron/openstack/common/versionutils.py:69 -#, python-format -msgid "" -"%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " -"may be removed in %(remove_in)s." -msgstr "" - -#: neutron/openstack/common/versionutils.py:73 -#, python-format -msgid "" -"%(what)s is deprecated as of %(as_of)s and may be removed in " -"%(remove_in)s. It will not be superseded." -msgstr "" - #: neutron/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" @@ -4570,7 +4438,7 @@ msgstr "" msgid "Syntax error in server config file, aborting plugin" msgstr "" -#: neutron/plugins/bigswitch/plugin.py:124 neutron/plugins/ml2/db.py:212 +#: neutron/plugins/bigswitch/plugin.py:124 neutron/plugins/ml2/db.py:215 #, python-format msgid "get_port_and_sgs() called for port_id %s" msgstr "" @@ -4761,113 +4629,113 @@ msgstr "" msgid "Server requires synchronization, but no topology function was defined." msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:465 +#: neutron/plugins/bigswitch/servermanager.py:463 #, python-format msgid "" "ServerProxy: %(action)s failure for servers: %(server)r Response: " "%(response)s" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:471 +#: neutron/plugins/bigswitch/servermanager.py:469 #, python-format msgid "" "ServerProxy: Error details: status=%(status)d, reason=%(reason)r, " "ret=%(ret)s, data=%(data)r" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:478 +#: neutron/plugins/bigswitch/servermanager.py:476 #, python-format msgid "ServerProxy: %(action)s failure for all servers: %(server)r" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:503 +#: neutron/plugins/bigswitch/servermanager.py:501 #, python-format msgid "" "NeutronRestProxyV2: Received and ignored error code %(code)s on " "%(action)s action to resource %(resource)s" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:513 +#: neutron/plugins/bigswitch/servermanager.py:511 #, python-format msgid "Unable to create remote router: %s" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:519 +#: neutron/plugins/bigswitch/servermanager.py:517 #, python-format msgid "Unable to update remote router: %s" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:524 +#: neutron/plugins/bigswitch/servermanager.py:522 #, python-format msgid "Unable to delete remote router: %s" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:530 +#: neutron/plugins/bigswitch/servermanager.py:528 #, python-format msgid "Unable to add router interface: %s" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:535 +#: neutron/plugins/bigswitch/servermanager.py:533 #, python-format msgid "Unable to delete remote intf: %s" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:541 +#: neutron/plugins/bigswitch/servermanager.py:539 #, python-format msgid "Unable to create remote network: %s" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:547 -#: neutron/plugins/bigswitch/servermanager.py:552 +#: neutron/plugins/bigswitch/servermanager.py:545 +#: neutron/plugins/bigswitch/servermanager.py:550 #, python-format msgid "Unable to update remote network: %s" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:561 +#: neutron/plugins/bigswitch/servermanager.py:559 #, python-format msgid "No device MAC attached to port %s. Skipping notification to controller." msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:566 +#: neutron/plugins/bigswitch/servermanager.py:564 #, python-format msgid "Unable to create remote port: %s" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:571 +#: neutron/plugins/bigswitch/servermanager.py:569 #, python-format msgid "Unable to delete remote port: %s" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:581 +#: neutron/plugins/bigswitch/servermanager.py:579 #, python-format msgid "Unable to create floating IP: %s" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:586 +#: neutron/plugins/bigswitch/servermanager.py:584 #, python-format msgid "Unable to update floating IP: %s" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:591 +#: neutron/plugins/bigswitch/servermanager.py:589 #, python-format msgid "Unable to delete floating IP: %s" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:596 +#: neutron/plugins/bigswitch/servermanager.py:594 #, python-format msgid "Unable to retrieve switch: %s" msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:601 +#: neutron/plugins/bigswitch/servermanager.py:599 msgid "Backend server(s) do not support automated consitency checks." msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:605 +#: neutron/plugins/bigswitch/servermanager.py:603 #, python-format msgid "Consistency watchdog disabled by polling interval setting of %s." msgstr "" -#: neutron/plugins/bigswitch/servermanager.py:617 +#: neutron/plugins/bigswitch/servermanager.py:615 msgid "Encountered an error checking controller health." msgstr "" @@ -5779,92 +5647,88 @@ msgid "" "ID %(tenant_id)s" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:960 -msgid "_get_profile_bindings()" -msgstr "" - -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1116 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:1126 msgid "segment_range not required for TRUNK" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1122 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:1132 msgid "multicast_ip_range not required" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1249 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:1259 msgid "Invalid segment range. example range: 500-550" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1262 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:1272 msgid "Invalid multicast ip address range. example range: 224.1.1.1-224.1.1.10" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1269 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:1279 #, python-format msgid "%s is not a valid multicast ip address" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1273 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:1283 #, python-format msgid "%s is reserved multicast ip address" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1277 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:1287 #, python-format msgid "%s is not a valid ip address" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1281 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:1291 #, python-format msgid "" "Invalid multicast IP range '%(min_ip)s-%(max_ip)s': Range should be from " "low address to high address" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1294 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:1304 msgid "Arguments segment_type missing for network profile" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1303 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:1313 msgid "segment_type should either be vlan, overlay, multi-segment or trunk" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1309 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:1319 msgid "Argument physical_network missing for network profile" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1315 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:1325 msgid "segment_range not required for trunk" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1321 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:1331 msgid "Argument sub_type missing for network profile" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1328 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:1338 msgid "Argument segment_range missing for network profile" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1339 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:1349 msgid "Argument multicast_ip_range missing for VXLAN multicast network profile" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1367 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:1377 #, python-format msgid "Segment range is invalid, select from %(min)s-%(nmin)s, %(nmax)s-%(max)s" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1385 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:1395 #, python-format msgid "segment range is invalid. Valid range is : %(min)s-%(max)s" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1399 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:1409 #, python-format msgid "NetworkProfile name %s already exists" msgstr "" -#: neutron/plugins/cisco/db/n1kv_db_v2.py:1416 +#: neutron/plugins/cisco/db/n1kv_db_v2.py:1426 msgid "Segment range overlaps with another profile" msgstr "" @@ -6182,7 +6046,9 @@ msgstr "" #: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:319 #, python-format -msgid "Failed to delete %(resource_name) %(net_id)s for service vm due to %(err)s" +msgid "" +"Failed to delete %(resource_name)s %(net_id)s for service vm due to " +"%(err)s" msgstr "" #: neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py:411 @@ -6458,30 +6324,30 @@ msgstr "" msgid "_send_update_port_request: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:847 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:846 #, python-format msgid "_send_delete_port_request: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:876 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:875 #, python-format msgid "Create network: profile_id=%s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:884 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:883 #, python-format msgid "" "Physical_network %(phy_net)s, seg_type %(net_type)s, seg_id %(seg_id)s, " "multicast_ip %(multicast_ip)s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:896 -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:906 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:895 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:905 #, python-format msgid "Seg list %s " msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:947 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:946 #: neutron/plugins/hyperv/hyperv_neutron_plugin.py:254 #: neutron/plugins/ibm/sdnve_neutron_plugin.py:196 #: neutron/plugins/metaplugin/meta_neutron_plugin.py:226 @@ -6490,84 +6356,84 @@ msgstr "" msgid "Created network: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1005 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1004 #, python-format msgid "Updated network: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1019 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1018 #, python-format msgid "Cannot delete network '%s', delete the associated subnet first" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1023 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1022 #, python-format msgid "Cannot delete network '%s' that is member of a trunk segment" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1027 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1026 #, python-format msgid "Cannot delete network '%s' that is a member of a multi-segment network" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1055 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1054 #, python-format msgid "Get network: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1077 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1076 msgid "Get networks" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1128 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1127 #, python-format msgid "Create port: profile_id=%s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1175 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1174 #: neutron/plugins/ibm/sdnve_neutron_plugin.py:303 #, python-format msgid "Created port: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1186 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1185 #, python-format msgid "Update port: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1249 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1248 #, python-format msgid "Get port: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1269 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1268 msgid "Get ports" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1285 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1284 msgid "Create subnet" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1295 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1294 #, python-format msgid "Created subnet: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1310 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1309 msgid "Update subnet" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1325 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1324 #, python-format msgid "Delete subnet: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1340 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1339 #, python-format msgid "Get subnet: %s" msgstr "" -#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1360 +#: neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py:1359 msgid "Get subnets" msgstr "" @@ -6842,7 +6708,7 @@ msgstr "" #: neutron/plugins/mlnx/common/config.py:67 #: neutron/plugins/nec/common/config.py:28 #: neutron/plugins/oneconvergence/lib/config.py:47 -#: neutron/plugins/openvswitch/common/config.py:66 +#: neutron/plugins/openvswitch/common/config.py:53 #: neutron/plugins/ryu/common/config.py:43 #: neutron/plugins/sriovnicagent/common/config.py:58 msgid "" @@ -8171,99 +8037,99 @@ msgstr "" msgid "Tried to delete non-existent DHCP" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:225 +#: neutron/plugins/midonet/midonet_lib.py:226 #, python-format msgid "MidoClient.delete_port called: id=%(id)s, delete_chains=%(delete_chains)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:240 +#: neutron/plugins/midonet/midonet_lib.py:241 #, python-format msgid "MidoClient.get_port called: id=%(id)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:254 +#: neutron/plugins/midonet/midonet_lib.py:255 #, python-format msgid "MidoClient.add_bridge_port called: bridge=%(bridge)s, kwargs=%(kwargs)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:266 +#: neutron/plugins/midonet/midonet_lib.py:267 #, python-format msgid "MidoClient.update_port called: id=%(id)s, kwargs=%(kwargs)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:291 +#: neutron/plugins/midonet/midonet_lib.py:292 #, python-format msgid "MidoClient.create_router called: kwargs=%(kwargs)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:301 +#: neutron/plugins/midonet/midonet_lib.py:302 #, python-format msgid "MidoClient.delete_router called: id=%(id)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:311 +#: neutron/plugins/midonet/midonet_lib.py:312 #, python-format msgid "MidoClient.get_router called: id=%(id)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:325 +#: neutron/plugins/midonet/midonet_lib.py:326 #, python-format msgid "MidoClient.update_router called: id=%(id)s, kwargs=%(kwargs)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:346 +#: neutron/plugins/midonet/midonet_lib.py:347 #, python-format msgid "" "MidoClient.add_dhcp_route_option called: bridge=%(bridge)s, " "cidr=%(cidr)s, gw_ip=%(gw_ip)sdst_ip=%(dst_ip)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:354 +#: neutron/plugins/midonet/midonet_lib.py:355 msgid "Tried to access non-existent DHCP" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:386 +#: neutron/plugins/midonet/midonet_lib.py:387 #, python-format msgid "MidoClient.unlink called: port=%(port)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:391 +#: neutron/plugins/midonet/midonet_lib.py:392 #, python-format msgid "Attempted to unlink a port that was not linked. %s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:397 +#: neutron/plugins/midonet/midonet_lib.py:398 #, python-format msgid "" "MidoClient.remove_rules_by_property called: tenant_id=%(tenant_id)s, " "chain_name=%(chain_name)skey=%(key)s, value=%(value)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:424 +#: neutron/plugins/midonet/midonet_lib.py:425 #, python-format msgid "" "MidoClient.create_router_chains called: router=%(router)s, " "inbound_chain_name=%(in_chain)s, outbound_chain_name=%(out_chain)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:447 +#: neutron/plugins/midonet/midonet_lib.py:448 #, python-format msgid "MidoClient.delete_router_chains called: id=%(id)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:462 +#: neutron/plugins/midonet/midonet_lib.py:463 #, python-format msgid "MidoClient.delete_port_chains called: id=%(id)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:474 +#: neutron/plugins/midonet/midonet_lib.py:475 #, python-format msgid "" "MidoClient.get_link_port called: router=%(router)s, " "peer_router_id=%(peer_router_id)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:513 +#: neutron/plugins/midonet/midonet_lib.py:514 #, python-format msgid "" "MidoClient.add_static_nat called: tenant_id=%(tenant_id)s, " @@ -8271,17 +8137,17 @@ msgid "" "port_id=%(port_id)s, nat_type=%(nat_type)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:521 +#: neutron/plugins/midonet/midonet_lib.py:522 #, python-format msgid "Invalid NAT type passed in %s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:573 +#: neutron/plugins/midonet/midonet_lib.py:574 #, python-format msgid "MidoClient.remote_static_route called: router=%(router)s, ip=%(ip)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:584 +#: neutron/plugins/midonet/midonet_lib.py:585 #, python-format msgid "" "MidoClient.update_port_chains called: " @@ -8289,62 +8155,62 @@ msgid "" "outbound_chain_id=%(outbound_chain_id)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:595 +#: neutron/plugins/midonet/midonet_lib.py:596 #, python-format msgid "MidoClient.create_chain called: tenant_id=%(tenant_id)s name=%(name)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:603 +#: neutron/plugins/midonet/midonet_lib.py:604 #, python-format msgid "MidoClient.delete_chain called: id=%(id)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:609 +#: neutron/plugins/midonet/midonet_lib.py:610 #, python-format msgid "" "MidoClient.delete_chains_by_names called: tenant_id=%(tenant_id)s " "names=%(names)s " msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:620 +#: neutron/plugins/midonet/midonet_lib.py:621 #, python-format msgid "" "MidoClient.get_chain_by_name called: tenant_id=%(tenant_id)s " "name=%(name)s " msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:631 +#: neutron/plugins/midonet/midonet_lib.py:632 #, python-format msgid "" "MidoClient.get_port_group_by_name called: tenant_id=%(tenant_id)s " "name=%(name)s " msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:645 +#: neutron/plugins/midonet/midonet_lib.py:646 #, python-format msgid "MidoClient.create_port_group called: tenant_id=%(tenant_id)s name=%(name)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:654 +#: neutron/plugins/midonet/midonet_lib.py:655 #, python-format msgid "" "MidoClient.delete_port_group_by_name called: tenant_id=%(tenant_id)s " "name=%(name)s " msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:660 +#: neutron/plugins/midonet/midonet_lib.py:661 #, python-format msgid "Deleting pg %(id)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:666 +#: neutron/plugins/midonet/midonet_lib.py:667 #, python-format msgid "" "MidoClient.add_port_to_port_group_by_name called: tenant_id=%(tenant_id)s" " name=%(name)s port_id=%(port_id)s" msgstr "" -#: neutron/plugins/midonet/midonet_lib.py:680 +#: neutron/plugins/midonet/midonet_lib.py:681 #, python-format msgid "MidoClient.remove_port_from_port_groups called: port_id=%(port_id)s" msgstr "" @@ -8606,23 +8472,23 @@ msgid "" "neutron.ml2.extension_drivers namespace." msgstr "" -#: neutron/plugins/ml2/db.py:54 +#: neutron/plugins/ml2/db.py:56 #, python-format msgid "Added segment %(id)s of type %(network_type)s for network %(network_id)s" msgstr "" -#: neutron/plugins/ml2/db.py:197 neutron/plugins/ml2/db.py:249 +#: neutron/plugins/ml2/db.py:200 neutron/plugins/ml2/db.py:252 #: neutron/plugins/ml2/plugin.py:1058 #, python-format msgid "Multiple ports have port_id starting with %s" msgstr "" -#: neutron/plugins/ml2/db.py:203 +#: neutron/plugins/ml2/db.py:206 #, python-format msgid "get_port_from_device_mac() called for mac %s" msgstr "" -#: neutron/plugins/ml2/db.py:245 +#: neutron/plugins/ml2/db.py:248 #, python-format msgid "No binding found for port %(port_id)s" msgstr "" @@ -8673,93 +8539,93 @@ msgstr "" msgid "Initializing driver for type '%s'" msgstr "" -#: neutron/plugins/ml2/managers.py:169 neutron/plugins/ml2/managers.py:178 +#: neutron/plugins/ml2/managers.py:170 neutron/plugins/ml2/managers.py:179 #: neutron/plugins/ml2/drivers/type_tunnel.py:179 #, python-format msgid "network_type value '%s' not supported" msgstr "" -#: neutron/plugins/ml2/managers.py:204 neutron/plugins/ml2/managers.py:231 +#: neutron/plugins/ml2/managers.py:205 neutron/plugins/ml2/managers.py:232 #, python-format msgid "Failed to release segment '%s' because network type is not supported." msgstr "" -#: neutron/plugins/ml2/managers.py:247 +#: neutron/plugins/ml2/managers.py:248 #, python-format msgid "Configured mechanism driver names: %s" msgstr "" -#: neutron/plugins/ml2/managers.py:253 +#: neutron/plugins/ml2/managers.py:254 #, python-format msgid "Loaded mechanism driver names: %s" msgstr "" -#: neutron/plugins/ml2/managers.py:265 +#: neutron/plugins/ml2/managers.py:266 #, python-format msgid "Registered mechanism drivers: %s" msgstr "" -#: neutron/plugins/ml2/managers.py:272 +#: neutron/plugins/ml2/managers.py:273 #, python-format msgid "Initializing mechanism driver '%s'" msgstr "" -#: neutron/plugins/ml2/managers.py:294 +#: neutron/plugins/ml2/managers.py:295 #, python-format msgid "Mechanism driver '%(name)s' failed in %(method)s" msgstr "" -#: neutron/plugins/ml2/managers.py:596 +#: neutron/plugins/ml2/managers.py:597 #, python-format msgid "Mechanism driver %s failed in bind_port" msgstr "" -#: neutron/plugins/ml2/managers.py:600 +#: neutron/plugins/ml2/managers.py:601 #, python-format msgid "Failed to bind port %(port)s on host %(host)s" msgstr "" -#: neutron/plugins/ml2/managers.py:613 +#: neutron/plugins/ml2/managers.py:614 #, python-format msgid "Configured extension driver names: %s" msgstr "" -#: neutron/plugins/ml2/managers.py:619 +#: neutron/plugins/ml2/managers.py:620 #, python-format msgid "Loaded extension driver names: %s" msgstr "" -#: neutron/plugins/ml2/managers.py:630 +#: neutron/plugins/ml2/managers.py:631 #, python-format msgid "Registered extension drivers: %s" msgstr "" -#: neutron/plugins/ml2/managers.py:636 +#: neutron/plugins/ml2/managers.py:637 #, python-format msgid "Initializing extension driver '%s'" msgstr "" -#: neutron/plugins/ml2/managers.py:644 +#: neutron/plugins/ml2/managers.py:645 #, python-format msgid "Got %(alias)s extension from driver '%(drv)s'" msgstr "" -#: neutron/plugins/ml2/managers.py:655 +#: neutron/plugins/ml2/managers.py:656 #, python-format msgid "Extension driver '%(name)s' failed in %(method)s" msgstr "" -#: neutron/plugins/ml2/managers.py:691 +#: neutron/plugins/ml2/managers.py:692 #, python-format msgid "Extended network dict for driver '%(drv)s'" msgstr "" -#: neutron/plugins/ml2/managers.py:698 +#: neutron/plugins/ml2/managers.py:699 #, python-format msgid "Extended subnet dict for driver '%(drv)s'" msgstr "" -#: neutron/plugins/ml2/managers.py:705 +#: neutron/plugins/ml2/managers.py:706 #, python-format msgid "Extended port dict for driver '%(drv)s'" msgstr "" @@ -9193,34 +9059,46 @@ msgstr "" msgid "Unable to reach EOS" msgstr "" -#: neutron/plugins/ml2/drivers/arista/arista_l3_driver.py:129 +#: neutron/plugins/ml2/drivers/arista/arista_l3_driver.py:131 msgid "Required option primary_l3_host is not set" msgstr "" -#: neutron/plugins/ml2/drivers/arista/arista_l3_driver.py:135 +#: neutron/plugins/ml2/drivers/arista/arista_l3_driver.py:137 msgid "VRFs are not supported MLAG config mode" msgstr "" -#: neutron/plugins/ml2/drivers/arista/arista_l3_driver.py:139 +#: neutron/plugins/ml2/drivers/arista/arista_l3_driver.py:141 msgid "Required option secondary_l3_host is not set" msgstr "" -#: neutron/plugins/ml2/drivers/arista/arista_l3_driver.py:143 +#: neutron/plugins/ml2/drivers/arista/arista_l3_driver.py:145 msgid "Required option primary_l3_host_username is not set" msgstr "" -#: neutron/plugins/ml2/drivers/arista/arista_l3_driver.py:324 +#: neutron/plugins/ml2/drivers/arista/arista_l3_driver.py:261 +#: neutron/plugins/ml2/drivers/arista/arista_l3_driver.py:280 +#, python-format +msgid "Failed to create router %s on EOS" +msgstr "" + +#: neutron/plugins/ml2/drivers/arista/arista_l3_driver.py:322 +#: neutron/plugins/ml2/drivers/arista/arista_l3_driver.py:354 +#, python-format +msgid "Failed to add interface to router %s on EOS" +msgstr "" + +#: neutron/plugins/ml2/drivers/arista/arista_l3_driver.py:372 #: neutron/plugins/ml2/drivers/arista/mechanism_arista.py:453 #, python-format msgid "Executing command on Arista EOS: %s" msgstr "" -#: neutron/plugins/ml2/drivers/arista/arista_l3_driver.py:330 +#: neutron/plugins/ml2/drivers/arista/arista_l3_driver.py:378 #, python-format msgid "Results of execution on Arista EOS: %s" msgstr "" -#: neutron/plugins/ml2/drivers/arista/arista_l3_driver.py:333 +#: neutron/plugins/ml2/drivers/arista/arista_l3_driver.py:381 #, python-format msgid "Error occured while trying to execute commands %(cmd)s on EOS %(host)s" msgstr "" @@ -9824,16 +9702,16 @@ msgstr "" msgid "Experimental L2 population driver" msgstr "" -#: neutron/plugins/ml2/drivers/l2pop/mech_driver.py:163 +#: neutron/plugins/ml2/drivers/l2pop/mech_driver.py:149 msgid "Unable to retrieve the agent ip, check the agent configuration." msgstr "" -#: neutron/plugins/ml2/drivers/l2pop/mech_driver.py:169 +#: neutron/plugins/ml2/drivers/l2pop/mech_driver.py:155 #, python-format msgid "Port %(port)s updated by agent %(agent)s isn't bound to any segment" msgstr "" -#: neutron/plugins/ml2/drivers/l2pop/mech_driver.py:222 +#: neutron/plugins/ml2/drivers/l2pop/mech_driver.py:208 #, python-format msgid "" "Unable to retrieve the agent ip, check the agent %(agent_host)s " @@ -11439,16 +11317,16 @@ msgstr "" #: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1029 #: neutron/tests/unit/ofagent/test_ofa_neutron_agent.py:799 -#: neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py:1273 +#: neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py:1287 msgid "ofport should have a value that can be interpreted as an integer" msgstr "" #: neutron/plugins/openvswitch/agent/ovs_neutron_agent.py:1032 #: neutron/tests/unit/ofagent/test_ofa_neutron_agent.py:782 #: neutron/tests/unit/ofagent/test_ofa_neutron_agent.py:802 -#: neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py:1256 -#: neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py:1276 -#: neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py:1293 +#: neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py:1270 +#: neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py:1290 +#: neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py:1307 #, python-format msgid "Failed to set-up %(type)s tunnel port to %(ip)s" msgstr "" @@ -11628,54 +11506,36 @@ msgid "List of :. Deprecated for ofagent." msgstr "" #: neutron/plugins/openvswitch/common/config.py:47 -msgid "Network type for tenant networks (local, vlan, gre, vxlan, or none)." -msgstr "" - -#: neutron/plugins/openvswitch/common/config.py:51 -msgid "List of :: or ." -msgstr "" - -#: neutron/plugins/openvswitch/common/config.py:55 -msgid "List of :." -msgstr "" - -#: neutron/plugins/openvswitch/common/config.py:57 -msgid "" -"The type of tunnels to use when utilizing tunnels, either 'gre' or " -"'vxlan'." -msgstr "" - -#: neutron/plugins/openvswitch/common/config.py:60 msgid "" "Use veths instead of patch ports to interconnect the integration bridge " "to physical bridges." msgstr "" -#: neutron/plugins/openvswitch/common/config.py:70 +#: neutron/plugins/openvswitch/common/config.py:57 msgid "Minimize polling by monitoring ovsdb for interface changes." msgstr "" -#: neutron/plugins/openvswitch/common/config.py:74 +#: neutron/plugins/openvswitch/common/config.py:61 msgid "" "The number of seconds to wait before respawning the ovsdb monitor after " "losing communication with it." msgstr "" -#: neutron/plugins/openvswitch/common/config.py:77 +#: neutron/plugins/openvswitch/common/config.py:64 msgid "Network types supported by the agent (gre and/or vxlan)." msgstr "" -#: neutron/plugins/openvswitch/common/config.py:82 +#: neutron/plugins/openvswitch/common/config.py:69 msgid "MTU size of veth interfaces" msgstr "" -#: neutron/plugins/openvswitch/common/config.py:84 +#: neutron/plugins/openvswitch/common/config.py:71 msgid "" "Use ML2 l2population mechanism driver to learn remote MAC and IPs and " "improve tunnel scalability." msgstr "" -#: neutron/plugins/openvswitch/common/config.py:87 +#: neutron/plugins/openvswitch/common/config.py:74 msgid "" "Enable local ARP responder if it is supported. Requires OVS 2.1 and ML2 " "l2population driver. Allows the switch (when supporting an overlay) to " @@ -11683,13 +11543,13 @@ msgid "" "broadcast into the overlay." msgstr "" -#: neutron/plugins/openvswitch/common/config.py:93 +#: neutron/plugins/openvswitch/common/config.py:80 msgid "" "Set or un-set the don't fragment (DF) bit on outgoing IP packet carrying " "GRE/VXLAN tunnel." msgstr "" -#: neutron/plugins/openvswitch/common/config.py:96 +#: neutron/plugins/openvswitch/common/config.py:83 msgid "Make the l2 agent run in DVR mode." msgstr "" @@ -12062,26 +11922,26 @@ msgid "" "cluster" msgstr "" -#: neutron/plugins/vmware/api_client/base.py:150 +#: neutron/plugins/vmware/api_client/base.py:151 #, python-format msgid "[%(rid)d] Connection returned in bad state, reconnecting to %(conn)s" msgstr "" -#: neutron/plugins/vmware/api_client/base.py:176 +#: neutron/plugins/vmware/api_client/base.py:173 #, python-format msgid "[%(rid)d] Released connection %(conn)s. %(qsize)d connection(s) available." msgstr "" -#: neutron/plugins/vmware/api_client/base.py:186 +#: neutron/plugins/vmware/api_client/base.py:183 #, python-format msgid "Login request for an invalid connection: '%s'" msgstr "" -#: neutron/plugins/vmware/api_client/base.py:197 +#: neutron/plugins/vmware/api_client/base.py:194 msgid "Waiting for auth to complete" msgstr "" -#: neutron/plugins/vmware/api_client/base.py:239 +#: neutron/plugins/vmware/api_client/base.py:236 #, python-format msgid "Invalid conn_params value: '%s'" msgstr "" @@ -13344,71 +13204,71 @@ msgid "" "for NSX communication errors." msgstr "" -#: neutron/plugins/vmware/plugins/base.py:213 +#: neutron/plugins/vmware/plugins/base.py:212 #, python-format msgid "Unable to process default l2 gw service:%s" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:250 +#: neutron/plugins/vmware/plugins/base.py:249 #: neutron/plugins/vmware/plugins/service.py:439 #, python-format msgid "Unable to create port on NSX logical router %s" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:253 +#: neutron/plugins/vmware/plugins/base.py:252 #, python-format msgid "" "Unable to create logical router port for neutron port id %(port_id)s on " "router %(nsx_router_id)s" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:338 +#: neutron/plugins/vmware/plugins/base.py:337 #, python-format msgid "" "Unable to plug attachment in NSX logical router port %(r_port_id)s, " "associated with Neutron %(q_port_id)s" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:344 +#: neutron/plugins/vmware/plugins/base.py:343 #, python-format msgid "" "Unable to plug attachment in router port %(r_port_id)s for neutron port " "id %(q_port_id)s on router %(router_id)s" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:390 +#: neutron/plugins/vmware/plugins/base.py:389 msgid "An exception occurred while selecting logical switch for the port" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:430 +#: neutron/plugins/vmware/plugins/base.py:429 #, python-format msgid "" "An exception occurred while creating the neutron port %s on the NSX " "plaform" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:442 -#: neutron/plugins/vmware/plugins/base.py:494 -#: neutron/plugins/vmware/plugins/base.py:692 +#: neutron/plugins/vmware/plugins/base.py:441 +#: neutron/plugins/vmware/plugins/base.py:493 +#: neutron/plugins/vmware/plugins/base.py:691 #, python-format msgid "" "NSX plugin does not support regular VIF ports on external networks. Port " "%s will be down." msgstr "" -#: neutron/plugins/vmware/plugins/base.py:474 +#: neutron/plugins/vmware/plugins/base.py:473 #, python-format msgid "" "Concurrent network deletion detected; Back-end Port %(nsx_id)s creation " "to be rolled back for Neutron port: %(neutron_id)s" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:513 +#: neutron/plugins/vmware/plugins/base.py:512 #, python-format msgid "Port %s not found in NSX" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:522 +#: neutron/plugins/vmware/plugins/base.py:521 #, python-format msgid "" "Neutron port %(port_id)s not found on NSX backend. Terminating delete " @@ -13416,266 +13276,266 @@ msgid "" "%(router_id)s" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:537 +#: neutron/plugins/vmware/plugins/base.py:536 #, python-format msgid "" "Ignoring exception as this means the peer for port '%s' has already been " "deleted." msgstr "" -#: neutron/plugins/vmware/plugins/base.py:549 +#: neutron/plugins/vmware/plugins/base.py:548 #, python-format msgid "" "It is not allowed to create router interface ports on external networks " "as '%s'" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:587 +#: neutron/plugins/vmware/plugins/base.py:586 #, python-format msgid "" "device_id field must be populated in order to create an external gateway " "port for network %s" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:597 +#: neutron/plugins/vmware/plugins/base.py:596 #, python-format msgid "The gateway port for the NSX router %s was not found on the backend" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:673 -#: neutron/plugins/vmware/plugins/base.py:1749 +#: neutron/plugins/vmware/plugins/base.py:672 +#: neutron/plugins/vmware/plugins/base.py:1748 #, python-format msgid "Logical router resource %s not found on NSX platform" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:677 -#: neutron/plugins/vmware/plugins/base.py:1753 +#: neutron/plugins/vmware/plugins/base.py:676 +#: neutron/plugins/vmware/plugins/base.py:1752 msgid "Unable to update logical routeron NSX Platform" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:765 +#: neutron/plugins/vmware/plugins/base.py:764 #, python-format msgid "%s required" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:770 +#: neutron/plugins/vmware/plugins/base.py:769 msgid "Segmentation ID cannot be specified with flat network type" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:774 +#: neutron/plugins/vmware/plugins/base.py:773 msgid "Segmentation ID must be specified with vlan network type" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:778 -#: neutron/plugins/vmware/plugins/base.py:794 +#: neutron/plugins/vmware/plugins/base.py:777 +#: neutron/plugins/vmware/plugins/base.py:793 #, python-format msgid "%(segmentation_id)s out of range (%(min_id)s through %(max_id)s)" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:800 +#: neutron/plugins/vmware/plugins/base.py:799 #, python-format msgid "%(net_type_param)s %(net_type_value)s not supported" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:883 +#: neutron/plugins/vmware/plugins/base.py:882 #, python-format msgid "Maximum number of logical ports reached for logical network %s" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:929 +#: neutron/plugins/vmware/plugins/base.py:928 #, python-format msgid "" "Network with admin_state_up=False are not yet supported by this plugin. " "Ignoring setting for network %s" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1007 +#: neutron/plugins/vmware/plugins/base.py:1006 #, python-format msgid "The following logical switches were not found on the NSX backend:%s" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1044 +#: neutron/plugins/vmware/plugins/base.py:1043 msgid "admin_state_up=False networks are not supported." msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1064 +#: neutron/plugins/vmware/plugins/base.py:1063 #, python-format msgid "Unable to find NSX mappings for neutron network:%s" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1071 +#: neutron/plugins/vmware/plugins/base.py:1070 #, python-format msgid "" "Logical switch update on NSX backend failed. Neutron network " "id:%(net_id)s; NSX lswitch id:%(lswitch_id)s;Error:%(error)s" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1151 +#: neutron/plugins/vmware/plugins/base.py:1150 #, python-format msgid "Logical switch for network %s was not found in NSX." msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1162 +#: neutron/plugins/vmware/plugins/base.py:1161 msgid "Unable to create port or set port attachment in NSX." msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1285 +#: neutron/plugins/vmware/plugins/base.py:1284 #, python-format msgid "Unable to update port id: %s." msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1368 +#: neutron/plugins/vmware/plugins/base.py:1367 msgid "" "Cannot create a distributed router with the NSX platform currently in " "execution. Please, try without specifying the 'distributed' attribute." msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1374 +#: neutron/plugins/vmware/plugins/base.py:1373 msgid "Unable to create logical router on NSX Platform" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1385 +#: neutron/plugins/vmware/plugins/base.py:1384 #, python-format msgid "" "Unable to create L3GW port on logical router %(router_uuid)s. Verify " "Default Layer-3 Gateway service %(def_l3_gw_svc)s id is correct" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1395 +#: neutron/plugins/vmware/plugins/base.py:1394 #, python-format msgid "Unable to create router %s on NSX backend" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1424 -#: neutron/plugins/vmware/plugins/base.py:1509 +#: neutron/plugins/vmware/plugins/base.py:1423 +#: neutron/plugins/vmware/plugins/base.py:1508 #: neutron/plugins/vmware/plugins/service.py:201 #: neutron/plugins/vmware/plugins/service.py:1240 #, python-format msgid "Network '%s' is not a valid external network" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1473 +#: neutron/plugins/vmware/plugins/base.py:1472 #, python-format msgid "Failed to set gateway info for router being created:%s - removing router" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1476 +#: neutron/plugins/vmware/plugins/base.py:1475 #, python-format msgid "" "Create router failed while setting external gateway. Router:%s has been " "removed from DB and backend" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1518 +#: neutron/plugins/vmware/plugins/base.py:1517 msgid "" "'routes' cannot contain route '0.0.0.0/0', this must be updated through " "the default gateway attribute" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1534 +#: neutron/plugins/vmware/plugins/base.py:1533 #, python-format msgid "Logical router %s not found on NSX Platform" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1538 +#: neutron/plugins/vmware/plugins/base.py:1537 msgid "Unable to update logical router on NSX Platform" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1540 +#: neutron/plugins/vmware/plugins/base.py:1539 msgid "" "Request cannot contain 'routes' with the NSX platform currently in " "execution. Please, try without specifying the static routes." msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1597 +#: neutron/plugins/vmware/plugins/base.py:1596 #, python-format msgid "Logical router '%s' not found on NSX Platform" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1601 +#: neutron/plugins/vmware/plugins/base.py:1600 #, python-format msgid "Unable to delete logical router '%s' on NSX Platform" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1611 +#: neutron/plugins/vmware/plugins/base.py:1610 #, python-format msgid "" "Unable to remove NSX mapping for Neutron router %(router_id)s because of " "the following exception:%(d_exc)s" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1785 +#: neutron/plugins/vmware/plugins/base.py:1784 #, python-format msgid "" "An error occurred while removing NAT rules on the NSX platform for " "floating ip:%s" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1790 +#: neutron/plugins/vmware/plugins/base.py:1789 msgid "An incorrect number of matching NAT rules was found on the NSX platform" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1932 +#: neutron/plugins/vmware/plugins/base.py:1931 #, python-format msgid "" "An error occurred while creating NAT rules on the NSX platform for " "floating ip:%(floating_ip)s mapped to internal ip:%(internal_ip)s" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1938 +#: neutron/plugins/vmware/plugins/base.py:1937 msgid "Failed to update NAT rules for floatingip update" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:1980 +#: neutron/plugins/vmware/plugins/base.py:1979 #, python-format msgid "Nat rules not found in nsx for port: %s" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:2020 +#: neutron/plugins/vmware/plugins/base.py:2019 #, python-format msgid "Unable to create l2_gw_service for: %s" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:2043 +#: neutron/plugins/vmware/plugins/base.py:2042 msgid "" "Unable to remove gateway service from NSX plaform - the resource was not " "found" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:2072 +#: neutron/plugins/vmware/plugins/base.py:2071 #, python-format msgid "Unable to update name on NSX backend for network gateway: %s" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:2279 +#: neutron/plugins/vmware/plugins/base.py:2278 #, python-format msgid "" "Removal of gateway device: %(neutron_id)s failed on NSX backend (NSX " "id:%(nsx_id)s) because the NSX resource was not found" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:2286 +#: neutron/plugins/vmware/plugins/base.py:2285 #, python-format msgid "" "Removal of gateway device: %(neutron_id)s failed on NSX backend (NSX " "id:%(nsx_id)s). Neutron and NSX states have diverged." msgstr "" -#: neutron/plugins/vmware/plugins/base.py:2334 +#: neutron/plugins/vmware/plugins/base.py:2333 #, python-format msgid "" "Error while updating security profile %(uuid)s with name %(name)s: " "%(error)s." msgstr "" -#: neutron/plugins/vmware/plugins/base.py:2366 +#: neutron/plugins/vmware/plugins/base.py:2365 #, python-format msgid "" "The NSX security profile %(sec_profile_id)s, associated with the Neutron " "security group %(sec_group_id)s was not found on the backend" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:2374 +#: neutron/plugins/vmware/plugins/base.py:2373 #, python-format msgid "" "An exception occurred while removing the NSX security profile " @@ -13683,12 +13543,12 @@ msgid "" "%(sec_group_id)s" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:2381 +#: neutron/plugins/vmware/plugins/base.py:2380 #, python-format msgid "Unable to remove security group %s from backend" msgstr "" -#: neutron/plugins/vmware/plugins/base.py:2394 +#: neutron/plugins/vmware/plugins/base.py:2393 #, python-format msgid "Port values not valid for protocol: %s" msgstr "" @@ -14761,38 +14621,38 @@ msgstr "" msgid "L3 Router Service Plugin for basic L3 using the APIC" msgstr "" -#: neutron/services/l3_router/l3_arista.py:113 +#: neutron/services/l3_router/l3_arista.py:112 #, python-format msgid "Error creating router on Arista HW router=%s " msgstr "" -#: neutron/services/l3_router/l3_arista.py:136 +#: neutron/services/l3_router/l3_arista.py:135 #, python-format msgid "Error updating router on Arista HW router=%s " msgstr "" -#: neutron/services/l3_router/l3_arista.py:151 +#: neutron/services/l3_router/l3_arista.py:150 #, python-format msgid "Error deleting router on Arista HW router %(r)s exception=%(e)s" msgstr "" -#: neutron/services/l3_router/l3_arista.py:197 +#: neutron/services/l3_router/l3_arista.py:196 #, python-format msgid "Error Adding subnet %(subnet)s to router %(router_id)s on Arista HW" msgstr "" -#: neutron/services/l3_router/l3_arista.py:231 +#: neutron/services/l3_router/l3_arista.py:230 #, python-format msgid "" "Error removing interface %(interface)s from router %(router_id)s on " "Arista HWException =(exc)s" msgstr "" -#: neutron/services/l3_router/l3_arista.py:246 +#: neutron/services/l3_router/l3_arista.py:245 msgid "Syncing Neutron Router DB <-> EOS" msgstr "" -#: neutron/services/l3_router/l3_arista.py:277 +#: neutron/services/l3_router/l3_arista.py:276 #, python-format msgid "Error Adding interface %(subnet_id)s to router %(router_id)s on Arista HW" msgstr "" @@ -15590,351 +15450,86 @@ msgstr "" msgid "The vpn device drivers Neutron will use" msgstr "" -#: neutron/services/vpn/plugin.py:44 -#, python-format -msgid "VPN plugin using service driver: %s" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:87 -#, python-format -msgid "RESPONSE: %s" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:100 -#, python-format -msgid "%(method)s: Request for %(resource)s payload: %(payload)s" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:107 -#, python-format -msgid "%(method)s Took %(time).2f seconds to process" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:113 -#, python-format -msgid "%(method)s: Request timeout%(ssl)s (%(timeout).3f sec) for CSR(%(host)s)" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:122 -#, python-format -msgid "%(method)s: Unable to connect to CSR(%(host)s)" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:126 -#, python-format -msgid "%(method)s: Unexpected error for CSR (%(host)s): %(error)s" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:132 -#, python-format -msgid "%(method)s: Completed [%(status)s]" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:147 -#, python-format -msgid "%(auth)s with CSR %(host)s" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:154 -#, python-format -msgid "Successfully authenticated with CSR %s" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:156 -#, python-format -msgid "Failed authentication with CSR %(host)s [%(status)s]" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_csr_rest_client.py:191 -#, python-format -msgid "%(method)s: Request timeout for CSR(%(host)s)" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:40 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:41 msgid "Status check interval for Cisco CSR IPSec connections" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:51 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:52 #, python-format msgid "Cisco CSR failed to create %(resource)s (%(which)s)" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:55 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:56 #, python-format msgid "Cisco CSR failed to change %(tunnel)s admin state to %(state)s" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:60 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:61 #, python-format msgid "" "Required %(resource)s attribute %(attr)s mapping for Cisco CSR is missing" " in device driver" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:65 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:66 #, python-format msgid "" "Device driver does not have a mapping of '%(value)s for attribute " "%(attr)s of %(resource)s" msgstr "" -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:128 -#, python-format -msgid "Handling VPN service update notification '%s'" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:150 -#, python-format -msgid "Update: Existing connection %s changed" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:157 -#, python-format -msgid "Update: Connection %s no longer admin down" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:163 -#, python-format -msgid "Update: Connection %s forced to admin down" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:171 -#, python-format -msgid "Update: Created new connection %s in admin down state" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:176 -#, python-format -msgid "Update: Created new connection %s" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:187 -#, python-format -msgid "Update: Existing VPN service %s detected" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:191 -#, python-format -msgid "Update: New VPN service %s detected" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:202 -msgid "Update: Completed update processing" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:232 -#, python-format -msgid "Mark: %(service)d VPN services and %(conn)d IPSec connections marked dirty" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:254 -#, python-format -msgid "" -"Sweep: Removed %(service)d dirty VPN service%(splural)s and %(conn)d " -"dirty IPSec connection%(cplural)s" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:269 -#, python-format -msgid "Report: Collecting status for IPSec connections on VPN service %s" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:275 -#, python-format -msgid "Connection %s forced down" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:279 -#, python-format -msgid "Connection %(conn)s reported %(status)s" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:284 -#, python-format -msgid "Report: Adding info for IPSec connection %s" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:304 -#, python-format -msgid "Report: Adding info for VPN service %s" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:326 -msgid "Report: Starting status report processing" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:328 -#, python-format -msgid "Report: Collecting status for VPN service %s" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:334 -msgid "Sending status report update to plugin" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:336 -msgid "Report: Completed status report processing" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:620 -#, python-format -msgid "Unable to create %(resource)s %(which)s: %(status)d" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:633 -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:661 -#, python-format -msgid "Internal error - '%s' is not defined" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:646 -#, python-format -msgid "Unable to delete %(resource)s %(which)s: %(status)d" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:655 -#, python-format -msgid "Performing rollback action %(action)s for resource %(resource)s" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:681 -#, python-format -msgid "Creating IPSec connection %s" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:714 -#, python-format -msgid "FAILED: Create of IPSec site-to-site connection %s" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:717 -#, python-format -msgid "SUCCESS: Created IPSec site-to-site connection %s" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:726 -#, python-format -msgid "Deleting IPSec connection %s" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:728 -#, python-format -msgid "Unable to find connection %s" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:732 -#, python-format -msgid "SUCCESS: Deleted IPSec site-to-site connection %s" -msgstr "" - -#: neutron/services/vpn/device_drivers/cisco_ipsec.py:740 -#, python-format -msgid "Unable to change %(tunnel)s admin state to %(state)s" -msgstr "" - -#: neutron/services/vpn/device_drivers/ipsec.py:46 +#: neutron/services/vpn/device_drivers/ipsec.py:47 msgid "Location to store ipsec server config files" msgstr "" -#: neutron/services/vpn/device_drivers/ipsec.py:49 +#: neutron/services/vpn/device_drivers/ipsec.py:50 msgid "Interval for checking ipsec status" msgstr "" -#: neutron/services/vpn/device_drivers/ipsec.py:59 +#: neutron/services/vpn/device_drivers/ipsec.py:60 msgid "Template file for ipsec configuration" msgstr "" -#: neutron/services/vpn/device_drivers/ipsec.py:65 +#: neutron/services/vpn/device_drivers/ipsec.py:66 msgid "Template file for ipsec secret configuration" msgstr "" -#: neutron/services/vpn/device_drivers/ipsec.py:247 -#, python-format -msgid "Failed to enable vpn process on router %s" -msgstr "" - -#: neutron/services/vpn/device_drivers/ipsec.py:258 -#, python-format -msgid "Failed to disable vpn process on router %s" -msgstr "" - -#: neutron/services/vpn/service_drivers/__init__.py:97 -#, python-format -msgid "Notify agent at %(topic)s.%(host)s the message %(method)s %(args)s" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:66 +#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:65 #, python-format msgid "Unable to parse config files %s for Cisco CSR info" msgstr "" -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:106 -#, python-format -msgid "Ignoring Cisco CSR for subnet %s - REST management is not an IP address" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_csr_db.py:44 +#: neutron/services/vpn/service_drivers/cisco_csr_db.py:45 #, python-format msgid "Fatal - %(reason)s" msgstr "" -#: neutron/services/vpn/service_drivers/cisco_csr_db.py:78 +#: neutron/services/vpn/service_drivers/cisco_csr_db.py:79 #, python-format msgid "No available Cisco CSR %(type)s IDs from %(min)d..%(max)d" msgstr "" -#: neutron/services/vpn/service_drivers/cisco_csr_db.py:133 +#: neutron/services/vpn/service_drivers/cisco_csr_db.py:134 #, python-format msgid "" "Database inconsistency between IPSec connection and Cisco CSR mapping " "table (%s)" msgstr "" -#: neutron/services/vpn/service_drivers/cisco_csr_db.py:159 -#, python-format -msgid "Reserved new CSR ID %(csr_id)d for %(policy)s ID %(policy_id)s" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_csr_db.py:186 -#, python-format -msgid "" -"Mappings for IPSec connection %(conn)s - tunnel=%(tunnel)s " -"ike_policy=%(csr_ike)d ipsec_policy=%(csr_ipsec)d" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_csr_db.py:195 +#: neutron/services/vpn/service_drivers/cisco_csr_db.py:196 #, python-format msgid "" "Existing entry for IPSec connection %s not found in Cisco CSR mapping " "table" msgstr "" -#: neutron/services/vpn/service_drivers/cisco_csr_db.py:222 +#: neutron/services/vpn/service_drivers/cisco_csr_db.py:223 #, python-format msgid "" "Attempt to create duplicate entry in Cisco CSR mapping table for " "connection %s" msgstr "" -#: neutron/services/vpn/service_drivers/cisco_csr_db.py:225 -#, python-format -msgid "" -"Mapped connection %(conn_id)s to Tunnel%(tunnel_id)d using IKE policy ID " -"%(ike_id)d and IPSec policy ID %(ipsec_id)d" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_csr_db.py:237 -#, python-format -msgid "Removed mapping for connection %s" -msgstr "" - -#: neutron/services/vpn/service_drivers/cisco_ipsec.py:104 -#, python-format -msgid "" -"Notify agent at %(topic)s.%(host)s the message %(method)s %(args)s for " -"router %(router)s" -msgstr "" - #: neutron/services/vpn/service_drivers/cisco_validator.py:32 #, python-format msgid "" diff --git a/neutron/locale/pt_BR/LC_MESSAGES/neutron-log-info.po b/neutron/locale/pt_BR/LC_MESSAGES/neutron-log-info.po index 748a66dc1bf..d917fbebeb8 100644 --- a/neutron/locale/pt_BR/LC_MESSAGES/neutron-log-info.po +++ b/neutron/locale/pt_BR/LC_MESSAGES/neutron-log-info.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Neutron\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-10-08 06:09+0000\n" -"PO-Revision-Date: 2014-08-12 21:40+0000\n" +"POT-Creation-Date: 2014-10-22 06:19+0000\n" +"PO-Revision-Date: 2014-10-21 10:51+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/" "neutron/language/pt_BR/)\n" @@ -27,6 +27,53 @@ msgstr "" "Inserindo política: %(new_policy)s no lugar de política deprecada: " "%(old_policy)s" +#: neutron/agent/securitygroups_rpc.py:80 +msgid "Disabled security-group extension." +msgstr "Extensão de grupo de segurança desativada." + +#: neutron/agent/securitygroups_rpc.py:82 +msgid "Disabled allowed-address-pairs extension." +msgstr "" + +#: neutron/agent/securitygroups_rpc.py:198 +#, python-format +msgid "" +"Skipping method %s as firewall is disabled or configured as " +"NoopFirewallDriver." +msgstr "" + +#: neutron/agent/securitygroups_rpc.py:209 +#, python-format +msgid "Preparing filters for devices %s" +msgstr "Preparando filtros para dispositivos %s" + +#: neutron/agent/securitygroups_rpc.py:239 +#, python-format +msgid "Security group rule updated %r" +msgstr "Regra do grupo de segurança atualizada %r" + +#: neutron/agent/securitygroups_rpc.py:246 +#, python-format +msgid "Security group member updated %r" +msgstr "Membro do grupo de segurança atualizado %r" + +#: neutron/agent/securitygroups_rpc.py:268 +msgid "Provider rule updated" +msgstr "Regra do provedor atualizada" + +#: neutron/agent/securitygroups_rpc.py:280 +#, python-format +msgid "Remove device filter for %r" +msgstr "Remover filtro de dispositivo para %r" + +#: neutron/agent/securitygroups_rpc.py:290 +msgid "Refresh firewall rules" +msgstr "Atualizar regras de firewall" + +#: neutron/agent/securitygroups_rpc.py:294 +msgid "No ports here to refresh firewall" +msgstr "Nenhuma porta aqui para atualizar firewall" + #: neutron/agent/linux/ovs_lib.py:422 #, python-format msgid "Port %(port_id)s not present in bridge %(br_name)s" @@ -36,7 +83,7 @@ msgstr "" msgid "IPv6 is not enabled on this system." msgstr "" -#: neutron/db/l3_agentschedulers_db.py:82 +#: neutron/db/l3_agentschedulers_db.py:83 msgid "" "Skipping period L3 agent status check because automatic router rescheduling " "is disabled." @@ -61,6 +108,21 @@ msgstr "" msgid "%d probe(s) deleted" msgstr "" +#: neutron/openstack/common/eventlet_backdoor.py:140 +#, python-format +msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" +msgstr "Backdoor de Eventlet escutando na porta %(port)s pelo processo %(pid)d" + +#: neutron/openstack/common/lockutils.py:82 +#, python-format +msgid "Created lock path: %s" +msgstr "Criado caminho de lock: %s" + +#: neutron/openstack/common/lockutils.py:194 +#, python-format +msgid "Failed to remove file %(file)s" +msgstr "" + #: neutron/openstack/common/periodic_task.py:126 #, python-format msgid "Skipping periodic task %(task)s because its interval is negative" @@ -71,54 +133,54 @@ msgstr "Ignorando tarefa periódica %(task)s porque seu intervalo é negativo" msgid "Skipping periodic task %(task)s because it is disabled" msgstr "Ignorando tarefa periódica %(task)s porque ela está desativada" -#: neutron/openstack/common/service.py:176 +#: neutron/openstack/common/service.py:174 #, python-format msgid "Caught %s, exiting" msgstr "%s capturadas, saindo" -#: neutron/openstack/common/service.py:240 +#: neutron/openstack/common/service.py:232 msgid "Parent process has died unexpectedly, exiting" msgstr "Processo pai saiu inesperadamente, saindo" -#: neutron/openstack/common/service.py:271 +#: neutron/openstack/common/service.py:263 #, python-format msgid "Child caught %s, exiting" -msgstr "" +msgstr "Filho capturado %s, terminando" -#: neutron/openstack/common/service.py:310 +#: neutron/openstack/common/service.py:302 msgid "Forking too fast, sleeping" msgstr "Bifurcação muito rápida, suspendendo" -#: neutron/openstack/common/service.py:329 +#: neutron/openstack/common/service.py:321 #, python-format msgid "Started child %d" msgstr "Filho %d iniciado" -#: neutron/openstack/common/service.py:339 +#: neutron/openstack/common/service.py:331 #, python-format msgid "Starting %d workers" msgstr "Iniciando %d trabalhadores" -#: neutron/openstack/common/service.py:356 +#: neutron/openstack/common/service.py:348 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "%(pid)d filho eliminado pelo sinal %(sig)d" -#: neutron/openstack/common/service.py:360 +#: neutron/openstack/common/service.py:352 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "Filho %(pid)s encerrando com status %(code)d" -#: neutron/openstack/common/service.py:399 +#: neutron/openstack/common/service.py:391 #, python-format msgid "Caught %s, stopping children" msgstr "%s capturado, parando filhos" -#: neutron/openstack/common/service.py:408 +#: neutron/openstack/common/service.py:400 msgid "Wait called after thread killed. Cleaning up." -msgstr "" +msgstr "Espera requisitada depois que thread foi morta. Limpando." -#: neutron/openstack/common/service.py:424 +#: neutron/openstack/common/service.py:416 #, python-format msgid "Waiting on %d children to exit" msgstr "Aguardando em %d filhos para sair" @@ -126,7 +188,7 @@ msgstr "Aguardando em %d filhos para sair" #: neutron/plugins/ml2/drivers/type_tunnel.py:79 #, python-format msgid "%(type)s ID ranges: %(range)s" -msgstr "" +msgstr "%(type)s faixas de ID: %(range)s" #: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:78 msgid "APIC service agent starting ..." @@ -159,60 +221,47 @@ msgstr "" msgid "Sync between Neutron and VSD completed successfully" msgstr "" -#: neutron/plugins/ofagent/agent/arp_lib.py:137 +#: neutron/plugins/ofagent/agent/arp_lib.py:142 msgid "No bridge is set" msgstr "" -#: neutron/plugins/ofagent/agent/arp_lib.py:140 +#: neutron/plugins/ofagent/agent/arp_lib.py:145 #, python-format msgid "Unknown bridge %(dpid)s ours %(ours)s" msgstr "" -#: neutron/plugins/ofagent/agent/arp_lib.py:147 -#, python-format -msgid "packet-in dpid %(dpid)s in_port %(port)s pkt %(pkt)s" -msgstr "" - -#: neutron/plugins/ofagent/agent/arp_lib.py:152 +#: neutron/plugins/ofagent/agent/arp_lib.py:163 msgid "drop non tenant packet" msgstr "" -#: neutron/plugins/ofagent/agent/arp_lib.py:157 -msgid "drop non-ethernet packet" -msgstr "" - -#: neutron/plugins/ofagent/agent/arp_lib.py:162 -msgid "drop non-arp packet" -msgstr "" - -#: neutron/plugins/ofagent/agent/arp_lib.py:171 +#: neutron/plugins/ofagent/agent/arp_lib.py:182 #, python-format msgid "unknown network %s" msgstr "" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:165 msgid "Agent initialized successfully, now running... " -msgstr "" +msgstr "Agente inicializado com êxito; em execução agora... " #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:452 #, python-format msgid "Assigning %(vlan_id)s as local vlan for net-id=%(net_uuid)s" -msgstr "" +msgstr "Designando %(vlan_id)s como vlan local para net-id=%(net_uuid)s" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:502 #, python-format msgid "Reclaiming vlan = %(vlan_id)s from net-id = %(net_uuid)s" -msgstr "" +msgstr "Recuperando vlan = %(vlan_id)s a partir de net-id = %(net_uuid)s" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:570 #, python-format msgid "port_unbound() net_uuid %s not in local_vlan_map" -msgstr "" +msgstr "port_unbound() net_uuid %s não em local_vlan_map" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:651 #, python-format msgid "Mapping physical network %(physical_network)s to bridge %(bridge)s" -msgstr "" +msgstr "Mapeamento de rede física %(physical_network)s para a ponte %(bridge)s" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:785 #, python-format @@ -224,7 +273,7 @@ msgstr "" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:799 #, python-format msgid "Port %(device)s updated. Details: %(details)s" -msgstr "" +msgstr "Porta %(device)s atualizada. Detalhes: %(details)s" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:818 #, python-format @@ -234,17 +283,53 @@ msgstr "" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:829 #, python-format msgid "Attachment %s removed" -msgstr "" +msgstr "Anexo %s removido" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:912 msgid "Agent tunnel out of sync with plugin!" +msgstr "Túnel do agente fora de sincronização com o plug-in!" + +#: neutron/services/vpn/plugin.py:45 +#, python-format +msgid "VPN plugin using service driver: %s" msgstr "" -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:57 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:335 +msgid "Sending status report update to plugin" +msgstr "" + +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:715 +#, python-format +msgid "FAILED: Create of IPSec site-to-site connection %s" +msgstr "" + +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:718 +#, python-format +msgid "SUCCESS: Created IPSec site-to-site connection %s" +msgstr "" + +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:733 +#, python-format +msgid "SUCCESS: Deleted IPSec site-to-site connection %s" +msgstr "" + +#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:56 #, python-format msgid "Scanning config files %s for Cisco CSR configurations" msgstr "" +#: neutron/services/vpn/service_drivers/cisco_csr_db.py:226 +#, python-format +msgid "" +"Mapped connection %(conn_id)s to Tunnel%(tunnel_id)d using IKE policy ID " +"%(ike_id)d and IPSec policy ID %(ipsec_id)d" +msgstr "" + +#: neutron/services/vpn/service_drivers/cisco_csr_db.py:238 +#, python-format +msgid "Removed mapping for connection %s" +msgstr "" + #: neutron/tests/unit/vmware/apiclient/test_api_eventlet_request.py:63 #, python-format msgid "spawned: %d" diff --git a/neutron/locale/te_IN/LC_MESSAGES/neutron-log-info.po b/neutron/locale/te_IN/LC_MESSAGES/neutron-log-info.po index cde87d0fd32..dbd824f2f20 100644 --- a/neutron/locale/te_IN/LC_MESSAGES/neutron-log-info.po +++ b/neutron/locale/te_IN/LC_MESSAGES/neutron-log-info.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Neutron\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-10-08 06:09+0000\n" -"PO-Revision-Date: 2014-08-17 05:19+0000\n" +"POT-Creation-Date: 2014-10-22 06:19+0000\n" +"PO-Revision-Date: 2014-10-21 10:35+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: Telugu (India) (http://www.transifex.com/projects/p/neutron/" "language/te_IN/)\n" @@ -26,6 +26,53 @@ msgid "" "Inserting policy:%(new_policy)s in place of deprecated policy:%(old_policy)s" msgstr "చేర్చడం విధానం:%(new_policy)s నిరాశపర్చింది విధానం స్థానంలో :%(old_policy)s" +#: neutron/agent/securitygroups_rpc.py:80 +msgid "Disabled security-group extension." +msgstr "" + +#: neutron/agent/securitygroups_rpc.py:82 +msgid "Disabled allowed-address-pairs extension." +msgstr "" + +#: neutron/agent/securitygroups_rpc.py:198 +#, python-format +msgid "" +"Skipping method %s as firewall is disabled or configured as " +"NoopFirewallDriver." +msgstr "" + +#: neutron/agent/securitygroups_rpc.py:209 +#, python-format +msgid "Preparing filters for devices %s" +msgstr "" + +#: neutron/agent/securitygroups_rpc.py:239 +#, python-format +msgid "Security group rule updated %r" +msgstr "" + +#: neutron/agent/securitygroups_rpc.py:246 +#, python-format +msgid "Security group member updated %r" +msgstr "" + +#: neutron/agent/securitygroups_rpc.py:268 +msgid "Provider rule updated" +msgstr "" + +#: neutron/agent/securitygroups_rpc.py:280 +#, python-format +msgid "Remove device filter for %r" +msgstr "" + +#: neutron/agent/securitygroups_rpc.py:290 +msgid "Refresh firewall rules" +msgstr "" + +#: neutron/agent/securitygroups_rpc.py:294 +msgid "No ports here to refresh firewall" +msgstr "" + #: neutron/agent/linux/ovs_lib.py:422 #, python-format msgid "Port %(port_id)s not present in bridge %(br_name)s" @@ -35,7 +82,7 @@ msgstr "" msgid "IPv6 is not enabled on this system." msgstr "" -#: neutron/db/l3_agentschedulers_db.py:82 +#: neutron/db/l3_agentschedulers_db.py:83 msgid "" "Skipping period L3 agent status check because automatic router rescheduling " "is disabled." @@ -60,6 +107,21 @@ msgstr "" msgid "%d probe(s) deleted" msgstr "" +#: neutron/openstack/common/eventlet_backdoor.py:140 +#, python-format +msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" +msgstr "" + +#: neutron/openstack/common/lockutils.py:82 +#, python-format +msgid "Created lock path: %s" +msgstr "" + +#: neutron/openstack/common/lockutils.py:194 +#, python-format +msgid "Failed to remove file %(file)s" +msgstr "" + #: neutron/openstack/common/periodic_task.py:126 #, python-format msgid "Skipping periodic task %(task)s because its interval is negative" @@ -70,54 +132,54 @@ msgstr "దాని విరామం ప్రతికూల ఎందుక msgid "Skipping periodic task %(task)s because it is disabled" msgstr "అది అసాధ్యమని ఎందుకంటే ఆవర్తన పని %(task)s దాటవేయడం" -#: neutron/openstack/common/service.py:176 +#: neutron/openstack/common/service.py:174 #, python-format msgid "Caught %s, exiting" msgstr "%s క్యాచ్ నిష్క్రమించే" -#: neutron/openstack/common/service.py:240 +#: neutron/openstack/common/service.py:232 msgid "Parent process has died unexpectedly, exiting" msgstr "parrent ప్రక్రియ నిష్క్రమించే, అనుకోకుండా మరణించాడు," -#: neutron/openstack/common/service.py:271 +#: neutron/openstack/common/service.py:263 #, python-format msgid "Child caught %s, exiting" msgstr "చైల్డ్ నిష్క్రమించే,%s క్యాచ్" -#: neutron/openstack/common/service.py:310 +#: neutron/openstack/common/service.py:302 msgid "Forking too fast, sleeping" msgstr "Forking చాలా వేగంగా, పడుకుంది " -#: neutron/openstack/common/service.py:329 +#: neutron/openstack/common/service.py:321 #, python-format msgid "Started child %d" msgstr "మొదలైంది పిల్లల%d" -#: neutron/openstack/common/service.py:339 +#: neutron/openstack/common/service.py:331 #, python-format msgid "Starting %d workers" msgstr "%d కార్మికులు ప్రారంభిస్తోంది" -#: neutron/openstack/common/service.py:356 +#: neutron/openstack/common/service.py:348 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "చైల్డ్ %(pid)d సిగ్నల్ ద్వారా హత్య %(sig)d" -#: neutron/openstack/common/service.py:360 +#: neutron/openstack/common/service.py:352 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "చైల్డ్ %(pid)s స్థితి తో నిష్క్రమించారు %(code)d " -#: neutron/openstack/common/service.py:399 +#: neutron/openstack/common/service.py:391 #, python-format msgid "Caught %s, stopping children" msgstr " పిల్లలు ఆపటం %s దోరికిను " -#: neutron/openstack/common/service.py:408 +#: neutron/openstack/common/service.py:400 msgid "Wait called after thread killed. Cleaning up." msgstr "థ్రెడ్ మృతి తర్వాత అని వేచి. క్లీనింగ్ అప్." -#: neutron/openstack/common/service.py:424 +#: neutron/openstack/common/service.py:416 #, python-format msgid "Waiting on %d children to exit" msgstr "%d పిల్లల వెయిటింగ్ నిష్క్రమణ" @@ -158,33 +220,20 @@ msgstr "" msgid "Sync between Neutron and VSD completed successfully" msgstr "" -#: neutron/plugins/ofagent/agent/arp_lib.py:137 +#: neutron/plugins/ofagent/agent/arp_lib.py:142 msgid "No bridge is set" msgstr "" -#: neutron/plugins/ofagent/agent/arp_lib.py:140 +#: neutron/plugins/ofagent/agent/arp_lib.py:145 #, python-format msgid "Unknown bridge %(dpid)s ours %(ours)s" msgstr "" -#: neutron/plugins/ofagent/agent/arp_lib.py:147 -#, python-format -msgid "packet-in dpid %(dpid)s in_port %(port)s pkt %(pkt)s" -msgstr "" - -#: neutron/plugins/ofagent/agent/arp_lib.py:152 +#: neutron/plugins/ofagent/agent/arp_lib.py:163 msgid "drop non tenant packet" msgstr "" -#: neutron/plugins/ofagent/agent/arp_lib.py:157 -msgid "drop non-ethernet packet" -msgstr "" - -#: neutron/plugins/ofagent/agent/arp_lib.py:162 -msgid "drop non-arp packet" -msgstr "" - -#: neutron/plugins/ofagent/agent/arp_lib.py:171 +#: neutron/plugins/ofagent/agent/arp_lib.py:182 #, python-format msgid "unknown network %s" msgstr "" @@ -239,11 +288,47 @@ msgstr "" msgid "Agent tunnel out of sync with plugin!" msgstr "" -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:57 +#: neutron/services/vpn/plugin.py:45 +#, python-format +msgid "VPN plugin using service driver: %s" +msgstr "" + +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:335 +msgid "Sending status report update to plugin" +msgstr "" + +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:715 +#, python-format +msgid "FAILED: Create of IPSec site-to-site connection %s" +msgstr "" + +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:718 +#, python-format +msgid "SUCCESS: Created IPSec site-to-site connection %s" +msgstr "" + +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:733 +#, python-format +msgid "SUCCESS: Deleted IPSec site-to-site connection %s" +msgstr "" + +#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:56 #, python-format msgid "Scanning config files %s for Cisco CSR configurations" msgstr "" +#: neutron/services/vpn/service_drivers/cisco_csr_db.py:226 +#, python-format +msgid "" +"Mapped connection %(conn_id)s to Tunnel%(tunnel_id)d using IKE policy ID " +"%(ike_id)d and IPSec policy ID %(ipsec_id)d" +msgstr "" + +#: neutron/services/vpn/service_drivers/cisco_csr_db.py:238 +#, python-format +msgid "Removed mapping for connection %s" +msgstr "" + #: neutron/tests/unit/vmware/apiclient/test_api_eventlet_request.py:63 #, python-format msgid "spawned: %d" diff --git a/neutron/locale/vi_VN/LC_MESSAGES/neutron-log-info.po b/neutron/locale/vi_VN/LC_MESSAGES/neutron-log-info.po index 35144b47c8f..85658836266 100644 --- a/neutron/locale/vi_VN/LC_MESSAGES/neutron-log-info.po +++ b/neutron/locale/vi_VN/LC_MESSAGES/neutron-log-info.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Neutron\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-10-08 06:09+0000\n" -"PO-Revision-Date: 2014-07-18 20:49+0000\n" +"POT-Creation-Date: 2014-10-22 06:19+0000\n" +"PO-Revision-Date: 2014-10-21 10:51+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: Vietnamese (Viet Nam) (http://www.transifex.com/projects/p/" "neutron/language/vi_VN/)\n" @@ -25,6 +25,53 @@ msgid "" "Inserting policy:%(new_policy)s in place of deprecated policy:%(old_policy)s" msgstr "" +#: neutron/agent/securitygroups_rpc.py:80 +msgid "Disabled security-group extension." +msgstr "" + +#: neutron/agent/securitygroups_rpc.py:82 +msgid "Disabled allowed-address-pairs extension." +msgstr "" + +#: neutron/agent/securitygroups_rpc.py:198 +#, python-format +msgid "" +"Skipping method %s as firewall is disabled or configured as " +"NoopFirewallDriver." +msgstr "" + +#: neutron/agent/securitygroups_rpc.py:209 +#, python-format +msgid "Preparing filters for devices %s" +msgstr "" + +#: neutron/agent/securitygroups_rpc.py:239 +#, python-format +msgid "Security group rule updated %r" +msgstr "" + +#: neutron/agent/securitygroups_rpc.py:246 +#, python-format +msgid "Security group member updated %r" +msgstr "" + +#: neutron/agent/securitygroups_rpc.py:268 +msgid "Provider rule updated" +msgstr "" + +#: neutron/agent/securitygroups_rpc.py:280 +#, python-format +msgid "Remove device filter for %r" +msgstr "" + +#: neutron/agent/securitygroups_rpc.py:290 +msgid "Refresh firewall rules" +msgstr "" + +#: neutron/agent/securitygroups_rpc.py:294 +msgid "No ports here to refresh firewall" +msgstr "" + #: neutron/agent/linux/ovs_lib.py:422 #, python-format msgid "Port %(port_id)s not present in bridge %(br_name)s" @@ -34,7 +81,7 @@ msgstr "" msgid "IPv6 is not enabled on this system." msgstr "" -#: neutron/db/l3_agentschedulers_db.py:82 +#: neutron/db/l3_agentschedulers_db.py:83 msgid "" "Skipping period L3 agent status check because automatic router rescheduling " "is disabled." @@ -59,6 +106,21 @@ msgstr "" msgid "%d probe(s) deleted" msgstr "" +#: neutron/openstack/common/eventlet_backdoor.py:140 +#, python-format +msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" +msgstr "Eventlet backdoor lắng nghe trên %(port)s đối với tiến trình %(pid)d" + +#: neutron/openstack/common/lockutils.py:82 +#, python-format +msgid "Created lock path: %s" +msgstr "Con đường khóa được tạo: %s" + +#: neutron/openstack/common/lockutils.py:194 +#, python-format +msgid "Failed to remove file %(file)s" +msgstr "Không thể loại bỏ tập tin %(file)s" + #: neutron/openstack/common/periodic_task.py:126 #, python-format msgid "Skipping periodic task %(task)s because its interval is negative" @@ -69,54 +131,54 @@ msgstr "" msgid "Skipping periodic task %(task)s because it is disabled" msgstr "" -#: neutron/openstack/common/service.py:176 +#: neutron/openstack/common/service.py:174 #, python-format msgid "Caught %s, exiting" msgstr "Bắt %s, thoát" -#: neutron/openstack/common/service.py:240 +#: neutron/openstack/common/service.py:232 msgid "Parent process has died unexpectedly, exiting" msgstr "Tiến trình cha bị chết đột ngột, thoát" -#: neutron/openstack/common/service.py:271 +#: neutron/openstack/common/service.py:263 #, python-format msgid "Child caught %s, exiting" msgstr "Tiến trình con bắt %s, thoát" -#: neutron/openstack/common/service.py:310 +#: neutron/openstack/common/service.py:302 msgid "Forking too fast, sleeping" msgstr "Tạo tiến trình con quá nhanh, nghỉ" -#: neutron/openstack/common/service.py:329 +#: neutron/openstack/common/service.py:321 #, python-format msgid "Started child %d" msgstr "Tiến trình con đã được khởi động %d " -#: neutron/openstack/common/service.py:339 +#: neutron/openstack/common/service.py:331 #, python-format msgid "Starting %d workers" msgstr "Khởi động %d động cơ" -#: neutron/openstack/common/service.py:356 +#: neutron/openstack/common/service.py:348 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "Tiến trình con %(pid)d bị huỷ bởi tín hiệu %(sig)d" -#: neutron/openstack/common/service.py:360 +#: neutron/openstack/common/service.py:352 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "Tiến trình con %(pid)s đã thiaast với trạng thái %(code)d" -#: neutron/openstack/common/service.py:399 +#: neutron/openstack/common/service.py:391 #, python-format msgid "Caught %s, stopping children" msgstr "Bắt %s, đang dừng tiến trình con" -#: neutron/openstack/common/service.py:408 +#: neutron/openstack/common/service.py:400 msgid "Wait called after thread killed. Cleaning up." msgstr "Chờ đợi được gọi sau khi luồng bị huỷ. Làm sạch." -#: neutron/openstack/common/service.py:424 +#: neutron/openstack/common/service.py:416 #, python-format msgid "Waiting on %d children to exit" msgstr "Chờ đợi %d tiến trình con để thoát " @@ -157,33 +219,20 @@ msgstr "" msgid "Sync between Neutron and VSD completed successfully" msgstr "" -#: neutron/plugins/ofagent/agent/arp_lib.py:137 +#: neutron/plugins/ofagent/agent/arp_lib.py:142 msgid "No bridge is set" msgstr "" -#: neutron/plugins/ofagent/agent/arp_lib.py:140 +#: neutron/plugins/ofagent/agent/arp_lib.py:145 #, python-format msgid "Unknown bridge %(dpid)s ours %(ours)s" msgstr "" -#: neutron/plugins/ofagent/agent/arp_lib.py:147 -#, python-format -msgid "packet-in dpid %(dpid)s in_port %(port)s pkt %(pkt)s" -msgstr "" - -#: neutron/plugins/ofagent/agent/arp_lib.py:152 +#: neutron/plugins/ofagent/agent/arp_lib.py:163 msgid "drop non tenant packet" msgstr "" -#: neutron/plugins/ofagent/agent/arp_lib.py:157 -msgid "drop non-ethernet packet" -msgstr "" - -#: neutron/plugins/ofagent/agent/arp_lib.py:162 -msgid "drop non-arp packet" -msgstr "" - -#: neutron/plugins/ofagent/agent/arp_lib.py:171 +#: neutron/plugins/ofagent/agent/arp_lib.py:182 #, python-format msgid "unknown network %s" msgstr "" @@ -238,11 +287,47 @@ msgstr "" msgid "Agent tunnel out of sync with plugin!" msgstr "" -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:57 +#: neutron/services/vpn/plugin.py:45 +#, python-format +msgid "VPN plugin using service driver: %s" +msgstr "" + +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:335 +msgid "Sending status report update to plugin" +msgstr "" + +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:715 +#, python-format +msgid "FAILED: Create of IPSec site-to-site connection %s" +msgstr "" + +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:718 +#, python-format +msgid "SUCCESS: Created IPSec site-to-site connection %s" +msgstr "" + +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:733 +#, python-format +msgid "SUCCESS: Deleted IPSec site-to-site connection %s" +msgstr "" + +#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:56 #, python-format msgid "Scanning config files %s for Cisco CSR configurations" msgstr "" +#: neutron/services/vpn/service_drivers/cisco_csr_db.py:226 +#, python-format +msgid "" +"Mapped connection %(conn_id)s to Tunnel%(tunnel_id)d using IKE policy ID " +"%(ike_id)d and IPSec policy ID %(ipsec_id)d" +msgstr "" + +#: neutron/services/vpn/service_drivers/cisco_csr_db.py:238 +#, python-format +msgid "Removed mapping for connection %s" +msgstr "" + #: neutron/tests/unit/vmware/apiclient/test_api_eventlet_request.py:63 #, python-format msgid "spawned: %d" diff --git a/neutron/locale/zh_CN/LC_MESSAGES/neutron-log-info.po b/neutron/locale/zh_CN/LC_MESSAGES/neutron-log-info.po index 95f1d74629b..010daf996d3 100644 --- a/neutron/locale/zh_CN/LC_MESSAGES/neutron-log-info.po +++ b/neutron/locale/zh_CN/LC_MESSAGES/neutron-log-info.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Neutron\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-10-08 06:09+0000\n" -"PO-Revision-Date: 2014-08-12 21:40+0000\n" +"POT-Creation-Date: 2014-10-22 06:19+0000\n" +"PO-Revision-Date: 2014-10-21 10:51+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: Chinese (China) (http://www.transifex.com/projects/p/neutron/" "language/zh_CN/)\n" @@ -25,6 +25,53 @@ msgid "" "Inserting policy:%(new_policy)s in place of deprecated policy:%(old_policy)s" msgstr "在被废弃的策略:%(old_policy)s位置上插入策略:%(new_policy)s " +#: neutron/agent/securitygroups_rpc.py:80 +msgid "Disabled security-group extension." +msgstr "已禁用安全组扩展。" + +#: neutron/agent/securitygroups_rpc.py:82 +msgid "Disabled allowed-address-pairs extension." +msgstr "" + +#: neutron/agent/securitygroups_rpc.py:198 +#, python-format +msgid "" +"Skipping method %s as firewall is disabled or configured as " +"NoopFirewallDriver." +msgstr "" + +#: neutron/agent/securitygroups_rpc.py:209 +#, python-format +msgid "Preparing filters for devices %s" +msgstr "正在为设备 %s 准备过滤器" + +#: neutron/agent/securitygroups_rpc.py:239 +#, python-format +msgid "Security group rule updated %r" +msgstr "已更新安全组规则 %r" + +#: neutron/agent/securitygroups_rpc.py:246 +#, python-format +msgid "Security group member updated %r" +msgstr "已更新安全组成员 %r" + +#: neutron/agent/securitygroups_rpc.py:268 +msgid "Provider rule updated" +msgstr "已更新提供程序规则" + +#: neutron/agent/securitygroups_rpc.py:280 +#, python-format +msgid "Remove device filter for %r" +msgstr "请为 %r 除去设备过滤器" + +#: neutron/agent/securitygroups_rpc.py:290 +msgid "Refresh firewall rules" +msgstr "请刷新防火墙规则" + +#: neutron/agent/securitygroups_rpc.py:294 +msgid "No ports here to refresh firewall" +msgstr "" + #: neutron/agent/linux/ovs_lib.py:422 #, python-format msgid "Port %(port_id)s not present in bridge %(br_name)s" @@ -34,7 +81,7 @@ msgstr "" msgid "IPv6 is not enabled on this system." msgstr "" -#: neutron/db/l3_agentschedulers_db.py:82 +#: neutron/db/l3_agentschedulers_db.py:83 msgid "" "Skipping period L3 agent status check because automatic router rescheduling " "is disabled." @@ -59,6 +106,21 @@ msgstr "" msgid "%d probe(s) deleted" msgstr "" +#: neutron/openstack/common/eventlet_backdoor.py:140 +#, python-format +msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" +msgstr "Eventlet为进程 %(pid)d 在后台监听 %(port)s " + +#: neutron/openstack/common/lockutils.py:82 +#, python-format +msgid "Created lock path: %s" +msgstr "已创建锁路径:%s" + +#: neutron/openstack/common/lockutils.py:194 +#, python-format +msgid "Failed to remove file %(file)s" +msgstr "移动文件%(file)s失败" + #: neutron/openstack/common/periodic_task.py:126 #, python-format msgid "Skipping periodic task %(task)s because its interval is negative" @@ -69,54 +131,54 @@ msgstr "正在跳过周期性任务 %(task)s,因为其时间间隔为负" msgid "Skipping periodic task %(task)s because it is disabled" msgstr "正在跳过周期性任务 %(task)s,因为它已禁用" -#: neutron/openstack/common/service.py:176 +#: neutron/openstack/common/service.py:174 #, python-format msgid "Caught %s, exiting" msgstr "捕获到 %s,正在退出" -#: neutron/openstack/common/service.py:240 +#: neutron/openstack/common/service.py:232 msgid "Parent process has died unexpectedly, exiting" msgstr "父进程已意外终止,正在退出" -#: neutron/openstack/common/service.py:271 +#: neutron/openstack/common/service.py:263 #, python-format msgid "Child caught %s, exiting" msgstr "" -#: neutron/openstack/common/service.py:310 +#: neutron/openstack/common/service.py:302 msgid "Forking too fast, sleeping" msgstr "派生速度太快,正在休眠" -#: neutron/openstack/common/service.py:329 +#: neutron/openstack/common/service.py:321 #, python-format msgid "Started child %d" msgstr "已启动子代 %d" -#: neutron/openstack/common/service.py:339 +#: neutron/openstack/common/service.py:331 #, python-format msgid "Starting %d workers" msgstr "正在启动 %d 工作程序" -#: neutron/openstack/common/service.py:356 +#: neutron/openstack/common/service.py:348 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "信号 %(sig)d 已终止子代 %(pid)d" -#: neutron/openstack/common/service.py:360 +#: neutron/openstack/common/service.py:352 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "子代 %(pid)s 已退出,状态为 %(code)d" -#: neutron/openstack/common/service.py:399 +#: neutron/openstack/common/service.py:391 #, python-format msgid "Caught %s, stopping children" msgstr "捕获到 %s,正在停止子代" -#: neutron/openstack/common/service.py:408 +#: neutron/openstack/common/service.py:400 msgid "Wait called after thread killed. Cleaning up." msgstr "" -#: neutron/openstack/common/service.py:424 +#: neutron/openstack/common/service.py:416 #, python-format msgid "Waiting on %d children to exit" msgstr "正在等待 %d 个子代退出" @@ -157,60 +219,47 @@ msgstr "" msgid "Sync between Neutron and VSD completed successfully" msgstr "" -#: neutron/plugins/ofagent/agent/arp_lib.py:137 +#: neutron/plugins/ofagent/agent/arp_lib.py:142 msgid "No bridge is set" msgstr "" -#: neutron/plugins/ofagent/agent/arp_lib.py:140 +#: neutron/plugins/ofagent/agent/arp_lib.py:145 #, python-format msgid "Unknown bridge %(dpid)s ours %(ours)s" msgstr "" -#: neutron/plugins/ofagent/agent/arp_lib.py:147 -#, python-format -msgid "packet-in dpid %(dpid)s in_port %(port)s pkt %(pkt)s" -msgstr "" - -#: neutron/plugins/ofagent/agent/arp_lib.py:152 +#: neutron/plugins/ofagent/agent/arp_lib.py:163 msgid "drop non tenant packet" msgstr "" -#: neutron/plugins/ofagent/agent/arp_lib.py:157 -msgid "drop non-ethernet packet" -msgstr "" - -#: neutron/plugins/ofagent/agent/arp_lib.py:162 -msgid "drop non-arp packet" -msgstr "" - -#: neutron/plugins/ofagent/agent/arp_lib.py:171 +#: neutron/plugins/ofagent/agent/arp_lib.py:182 #, python-format msgid "unknown network %s" msgstr "" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:165 msgid "Agent initialized successfully, now running... " -msgstr "" +msgstr "代理已成功初始化,现在正在运行..." #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:452 #, python-format msgid "Assigning %(vlan_id)s as local vlan for net-id=%(net_uuid)s" -msgstr "" +msgstr "对于网络标识 %(net_uuid)s,正在将 %(vlan_id)s 分配为本地 vlan" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:502 #, python-format msgid "Reclaiming vlan = %(vlan_id)s from net-id = %(net_uuid)s" -msgstr "" +msgstr "正在从网络标识 %(net_uuid)s 恢复 vlan %(vlan_id)s" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:570 #, python-format msgid "port_unbound() net_uuid %s not in local_vlan_map" -msgstr "" +msgstr "port_unbound() net_uuid %s 未在 local_vlan_map 中" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:651 #, python-format msgid "Mapping physical network %(physical_network)s to bridge %(bridge)s" -msgstr "" +msgstr "正在将物理网络 %(physical_network)s 映射至网桥 %(bridge)s" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:785 #, python-format @@ -222,7 +271,7 @@ msgstr "" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:799 #, python-format msgid "Port %(device)s updated. Details: %(details)s" -msgstr "" +msgstr "端口 %(device)s 已更新。详细信息:%(details)s" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:818 #, python-format @@ -232,17 +281,53 @@ msgstr "" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:829 #, python-format msgid "Attachment %s removed" -msgstr "" +msgstr "已除去附件 %s" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:912 msgid "Agent tunnel out of sync with plugin!" +msgstr "代理隧道与插件不同步!" + +#: neutron/services/vpn/plugin.py:45 +#, python-format +msgid "VPN plugin using service driver: %s" msgstr "" -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:57 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:335 +msgid "Sending status report update to plugin" +msgstr "" + +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:715 +#, python-format +msgid "FAILED: Create of IPSec site-to-site connection %s" +msgstr "" + +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:718 +#, python-format +msgid "SUCCESS: Created IPSec site-to-site connection %s" +msgstr "" + +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:733 +#, python-format +msgid "SUCCESS: Deleted IPSec site-to-site connection %s" +msgstr "" + +#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:56 #, python-format msgid "Scanning config files %s for Cisco CSR configurations" msgstr "" +#: neutron/services/vpn/service_drivers/cisco_csr_db.py:226 +#, python-format +msgid "" +"Mapped connection %(conn_id)s to Tunnel%(tunnel_id)d using IKE policy ID " +"%(ike_id)d and IPSec policy ID %(ipsec_id)d" +msgstr "" + +#: neutron/services/vpn/service_drivers/cisco_csr_db.py:238 +#, python-format +msgid "Removed mapping for connection %s" +msgstr "" + #: neutron/tests/unit/vmware/apiclient/test_api_eventlet_request.py:63 #, python-format msgid "spawned: %d" diff --git a/neutron/locale/zh_TW/LC_MESSAGES/neutron-log-info.po b/neutron/locale/zh_TW/LC_MESSAGES/neutron-log-info.po index a3410ed0b3c..535b7ae53f7 100644 --- a/neutron/locale/zh_TW/LC_MESSAGES/neutron-log-info.po +++ b/neutron/locale/zh_TW/LC_MESSAGES/neutron-log-info.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Neutron\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-10-08 06:09+0000\n" -"PO-Revision-Date: 2014-07-18 20:49+0000\n" +"POT-Creation-Date: 2014-10-22 06:19+0000\n" +"PO-Revision-Date: 2014-10-21 10:35+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/neutron/" "language/zh_TW/)\n" @@ -25,6 +25,53 @@ msgid "" "Inserting policy:%(new_policy)s in place of deprecated policy:%(old_policy)s" msgstr "" +#: neutron/agent/securitygroups_rpc.py:80 +msgid "Disabled security-group extension." +msgstr "已停用安全群組延伸。" + +#: neutron/agent/securitygroups_rpc.py:82 +msgid "Disabled allowed-address-pairs extension." +msgstr "" + +#: neutron/agent/securitygroups_rpc.py:198 +#, python-format +msgid "" +"Skipping method %s as firewall is disabled or configured as " +"NoopFirewallDriver." +msgstr "" + +#: neutron/agent/securitygroups_rpc.py:209 +#, python-format +msgid "Preparing filters for devices %s" +msgstr "正在準備裝置 %s 的過濾器" + +#: neutron/agent/securitygroups_rpc.py:239 +#, python-format +msgid "Security group rule updated %r" +msgstr "安全群組規則已更新 %r" + +#: neutron/agent/securitygroups_rpc.py:246 +#, python-format +msgid "Security group member updated %r" +msgstr "安全群組成員已更新 %r" + +#: neutron/agent/securitygroups_rpc.py:268 +msgid "Provider rule updated" +msgstr "已更新提供者規則" + +#: neutron/agent/securitygroups_rpc.py:280 +#, python-format +msgid "Remove device filter for %r" +msgstr "移除 %r 的裝置過濾器" + +#: neutron/agent/securitygroups_rpc.py:290 +msgid "Refresh firewall rules" +msgstr "重新整理防火牆規則" + +#: neutron/agent/securitygroups_rpc.py:294 +msgid "No ports here to refresh firewall" +msgstr "" + #: neutron/agent/linux/ovs_lib.py:422 #, python-format msgid "Port %(port_id)s not present in bridge %(br_name)s" @@ -34,7 +81,7 @@ msgstr "" msgid "IPv6 is not enabled on this system." msgstr "" -#: neutron/db/l3_agentschedulers_db.py:82 +#: neutron/db/l3_agentschedulers_db.py:83 msgid "" "Skipping period L3 agent status check because automatic router rescheduling " "is disabled." @@ -59,6 +106,21 @@ msgstr "" msgid "%d probe(s) deleted" msgstr "" +#: neutron/openstack/common/eventlet_backdoor.py:140 +#, python-format +msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" +msgstr "" + +#: neutron/openstack/common/lockutils.py:82 +#, python-format +msgid "Created lock path: %s" +msgstr "" + +#: neutron/openstack/common/lockutils.py:194 +#, python-format +msgid "Failed to remove file %(file)s" +msgstr "" + #: neutron/openstack/common/periodic_task.py:126 #, python-format msgid "Skipping periodic task %(task)s because its interval is negative" @@ -69,54 +131,54 @@ msgstr "正在跳過定期作業 %(task)s,因為其間隔為負數" msgid "Skipping periodic task %(task)s because it is disabled" msgstr "正在跳過定期作業 %(task)s,因為它已停用" -#: neutron/openstack/common/service.py:176 +#: neutron/openstack/common/service.py:174 #, python-format msgid "Caught %s, exiting" msgstr "已捕捉到 %s,正在結束" -#: neutron/openstack/common/service.py:240 +#: neutron/openstack/common/service.py:232 msgid "Parent process has died unexpectedly, exiting" msgstr "母程序已非預期地當掉,正在結束" -#: neutron/openstack/common/service.py:271 +#: neutron/openstack/common/service.py:263 #, python-format msgid "Child caught %s, exiting" msgstr "" -#: neutron/openstack/common/service.py:310 +#: neutron/openstack/common/service.py:302 msgid "Forking too fast, sleeping" msgstr "分岔太快,正在休眠" -#: neutron/openstack/common/service.py:329 +#: neutron/openstack/common/service.py:321 #, python-format msgid "Started child %d" msgstr "已開始子行程 %d" -#: neutron/openstack/common/service.py:339 +#: neutron/openstack/common/service.py:331 #, python-format msgid "Starting %d workers" msgstr "正在啟動 %d 個工作程式" -#: neutron/openstack/common/service.py:356 +#: neutron/openstack/common/service.py:348 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "信號 %(sig)d 結束了子項 %(pid)d" -#: neutron/openstack/common/service.py:360 +#: neutron/openstack/common/service.py:352 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "子項 %(pid)s 已結束,狀態為 %(code)d" -#: neutron/openstack/common/service.py:399 +#: neutron/openstack/common/service.py:391 #, python-format msgid "Caught %s, stopping children" msgstr "已捕捉到 %s,正在停止子項" -#: neutron/openstack/common/service.py:408 +#: neutron/openstack/common/service.py:400 msgid "Wait called after thread killed. Cleaning up." msgstr "" -#: neutron/openstack/common/service.py:424 +#: neutron/openstack/common/service.py:416 #, python-format msgid "Waiting on %d children to exit" msgstr "正在等待 %d 個子項結束" @@ -147,7 +209,7 @@ msgstr "" #: neutron/plugins/mlnx/agent/eswitch_neutron_agent.py:379 #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:907 msgid "Agent out of sync with plugin!" -msgstr "" +msgstr "代理程式與外掛程式不同步!" #: neutron/plugins/nuage/syncmanager.py:46 msgid "Starting the sync between Neutron and VSD" @@ -157,60 +219,47 @@ msgstr "" msgid "Sync between Neutron and VSD completed successfully" msgstr "" -#: neutron/plugins/ofagent/agent/arp_lib.py:137 +#: neutron/plugins/ofagent/agent/arp_lib.py:142 msgid "No bridge is set" msgstr "" -#: neutron/plugins/ofagent/agent/arp_lib.py:140 +#: neutron/plugins/ofagent/agent/arp_lib.py:145 #, python-format msgid "Unknown bridge %(dpid)s ours %(ours)s" msgstr "" -#: neutron/plugins/ofagent/agent/arp_lib.py:147 -#, python-format -msgid "packet-in dpid %(dpid)s in_port %(port)s pkt %(pkt)s" -msgstr "" - -#: neutron/plugins/ofagent/agent/arp_lib.py:152 +#: neutron/plugins/ofagent/agent/arp_lib.py:163 msgid "drop non tenant packet" msgstr "" -#: neutron/plugins/ofagent/agent/arp_lib.py:157 -msgid "drop non-ethernet packet" -msgstr "" - -#: neutron/plugins/ofagent/agent/arp_lib.py:162 -msgid "drop non-arp packet" -msgstr "" - -#: neutron/plugins/ofagent/agent/arp_lib.py:171 +#: neutron/plugins/ofagent/agent/arp_lib.py:182 #, python-format msgid "unknown network %s" msgstr "" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:165 msgid "Agent initialized successfully, now running... " -msgstr "" +msgstr "已順利地起始設定代理程式,現正在執行中..." #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:452 #, python-format msgid "Assigning %(vlan_id)s as local vlan for net-id=%(net_uuid)s" -msgstr "" +msgstr "正在將 %(vlan_id)s 指派為 net-id = %(net_uuid)s 的本端 VLAN" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:502 #, python-format msgid "Reclaiming vlan = %(vlan_id)s from net-id = %(net_uuid)s" -msgstr "" +msgstr "正在從 net-id = %(net_uuid)s 收回 VLAN = %(vlan_id)s" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:570 #, python-format msgid "port_unbound() net_uuid %s not in local_vlan_map" -msgstr "" +msgstr "port_unbound() net_uuid %s 不在 local_vlan_map 中" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:651 #, python-format msgid "Mapping physical network %(physical_network)s to bridge %(bridge)s" -msgstr "" +msgstr "正在將實體網路 %(physical_network)s 對映到橋接器 %(bridge)s" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:785 #, python-format @@ -222,7 +271,7 @@ msgstr "" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:799 #, python-format msgid "Port %(device)s updated. Details: %(details)s" -msgstr "" +msgstr "已更新埠 %(device)s。詳細資料:%(details)s" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:818 #, python-format @@ -232,17 +281,53 @@ msgstr "" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:829 #, python-format msgid "Attachment %s removed" -msgstr "" +msgstr "已移除連接裝置 %s" #: neutron/plugins/ofagent/agent/ofa_neutron_agent.py:912 msgid "Agent tunnel out of sync with plugin!" +msgstr "代理程式通道與外掛程式不同步!" + +#: neutron/services/vpn/plugin.py:45 +#, python-format +msgid "VPN plugin using service driver: %s" msgstr "" -#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:57 +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:335 +msgid "Sending status report update to plugin" +msgstr "" + +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:715 +#, python-format +msgid "FAILED: Create of IPSec site-to-site connection %s" +msgstr "" + +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:718 +#, python-format +msgid "SUCCESS: Created IPSec site-to-site connection %s" +msgstr "" + +#: neutron/services/vpn/device_drivers/cisco_ipsec.py:733 +#, python-format +msgid "SUCCESS: Deleted IPSec site-to-site connection %s" +msgstr "" + +#: neutron/services/vpn/service_drivers/cisco_cfg_loader.py:56 #, python-format msgid "Scanning config files %s for Cisco CSR configurations" msgstr "" +#: neutron/services/vpn/service_drivers/cisco_csr_db.py:226 +#, python-format +msgid "" +"Mapped connection %(conn_id)s to Tunnel%(tunnel_id)d using IKE policy ID " +"%(ike_id)d and IPSec policy ID %(ipsec_id)d" +msgstr "" + +#: neutron/services/vpn/service_drivers/cisco_csr_db.py:238 +#, python-format +msgid "Removed mapping for connection %s" +msgstr "" + #: neutron/tests/unit/vmware/apiclient/test_api_eventlet_request.py:63 #, python-format msgid "spawned: %d" From 62588957fbeccfb4f80eaa72bef2b86b6f08dcf8 Mon Sep 17 00:00:00 2001 From: Kevin Benton Date: Wed, 22 Oct 2014 13:04:03 -0700 Subject: [PATCH 128/128] Big Switch: Switch to TLSv1 in server manager Switch to TLSv1 for the connections to the backend controllers. The default SSLv3 is no longer considered secure. TLSv1 was chosen over .1 or .2 because the .1 and .2 weren't added until python 2.7.9 so TLSv1 is the only compatible option for py26. Closes-Bug: #1384487 Change-Id: I68bd72fc4d90a102003d9ce48c47a4a6a3dd6e03 --- neutron/plugins/bigswitch/servermanager.py | 9 +++++---- neutron/tests/unit/bigswitch/test_servermanager.py | 9 ++++++--- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/neutron/plugins/bigswitch/servermanager.py b/neutron/plugins/bigswitch/servermanager.py index 0a86ff43743..5adb02d5a66 100644 --- a/neutron/plugins/bigswitch/servermanager.py +++ b/neutron/plugins/bigswitch/servermanager.py @@ -637,8 +637,9 @@ class HTTPSConnectionWithValidation(httplib.HTTPSConnection): if self.combined_cert: self.sock = ssl.wrap_socket(sock, self.key_file, self.cert_file, cert_reqs=ssl.CERT_REQUIRED, - ca_certs=self.combined_cert) + ca_certs=self.combined_cert, + ssl_version=ssl.PROTOCOL_TLSv1) else: - self.sock = ssl.wrap_socket(sock, self.key_file, - self.cert_file, - cert_reqs=ssl.CERT_NONE) + self.sock = ssl.wrap_socket(sock, self.key_file, self.cert_file, + cert_reqs=ssl.CERT_NONE, + ssl_version=ssl.PROTOCOL_TLSv1) diff --git a/neutron/tests/unit/bigswitch/test_servermanager.py b/neutron/tests/unit/bigswitch/test_servermanager.py index 43723fe8f98..efab0c41ede 100644 --- a/neutron/tests/unit/bigswitch/test_servermanager.py +++ b/neutron/tests/unit/bigswitch/test_servermanager.py @@ -465,7 +465,8 @@ class ServerManagerTests(test_rp.BigSwitchProxyPluginV2TestCase): ('www.example.org', 443), 90, '127.0.0.1' )]) self.wrap_mock.assert_has_calls([mock.call( - self.socket_mock(), None, None, cert_reqs=ssl.CERT_NONE + self.socket_mock(), None, None, cert_reqs=ssl.CERT_NONE, + ssl_version=ssl.PROTOCOL_TLSv1 )]) self.assertEqual(con.sock, self.wrap_mock()) @@ -480,7 +481,8 @@ class ServerManagerTests(test_rp.BigSwitchProxyPluginV2TestCase): )]) self.wrap_mock.assert_has_calls([mock.call( self.socket_mock(), None, None, ca_certs='SOMECERTS.pem', - cert_reqs=ssl.CERT_REQUIRED + cert_reqs=ssl.CERT_REQUIRED, + ssl_version=ssl.PROTOCOL_TLSv1 )]) self.assertEqual(con.sock, self.wrap_mock()) @@ -500,7 +502,8 @@ class ServerManagerTests(test_rp.BigSwitchProxyPluginV2TestCase): ('www.example.org', 443), 90, '127.0.0.1' )]) self.wrap_mock.assert_has_calls([mock.call( - self.socket_mock(), None, None, cert_reqs=ssl.CERT_NONE + self.socket_mock(), None, None, cert_reqs=ssl.CERT_NONE, + ssl_version=ssl.PROTOCOL_TLSv1 )]) # _tunnel() doesn't take any args tunnel_mock.assert_has_calls([mock.call()])