Merge remote-tracking branch 'origin' into merge-branch

This commit merges the master neutron branch into the feature/lbaasv2
branch. This is needed to get the feature/lbaasv2 branch building again.

Change-Id: Iba59aa20adc6b369b4b9d250afee406159287ba1
This commit is contained in:
Kyle Mestery 2014-10-24 10:53:51 +00:00
commit c089154a94
398 changed files with 11085 additions and 35020 deletions

124
.pylintrc
View File

@ -2,17 +2,97 @@
[MASTER]
# Add <file or directory> 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,
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 +101,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 +109,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

View File

@ -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
-------------------

View File

@ -1,2 +1,11 @@
Neutron Database Layer
======================
Testing database and models sync
--------------------------------
.. automodule:: neutron.tests.unit.db.test_migration
.. autoclass:: _TestModelsMigrations
:members:

View File

@ -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 =
@ -555,6 +560,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

View File

@ -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

View File

@ -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
# <physical_network>[:<vlan_min>:<vlan_max>] 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 <tun_min>:<tun_max> 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

View File

@ -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

View File

@ -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.

View File

@ -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.

View File

@ -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':

View File

@ -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

View File

@ -242,12 +242,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)

View File

@ -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
@ -34,13 +35,15 @@ 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
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
from neutron.openstack.common import importutils
from neutron.openstack.common import log as logging
from neutron.openstack.common import loopingcall
@ -241,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
@ -254,7 +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_PREFIX + router_id if use_namespaces else None
self.ns_name = ns_name
self.iptables_manager = iptables_manager.IptablesManager(
root_helper=root_helper,
use_ipv6=use_ipv6,
@ -518,31 +521,47 @@ 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.updated_routers = set()
self.removed_routers = set()
self.sync_progress = False
# Get the list of service plugins from Neutron Server
# 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:
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)
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
# 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)
@ -554,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.
@ -588,6 +616,11 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback,
'for namespace cleanup.'))
return set()
def _get_routers_namespaces(self, 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):
"""Destroy stale router namespaces on host when L3 agent restarts
@ -596,8 +629,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(NS_PREFIX + id for id in router_ids)
ns_to_ignore.update(SNAT_NS_PREFIX + 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)
@ -610,7 +644,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:
@ -620,8 +653,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)
@ -670,6 +701,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):
@ -727,9 +762,14 @@ 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)
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)
@ -768,15 +808,13 @@ 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)
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 +822,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
@ -948,7 +986,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 +1000,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:
@ -1066,7 +1104,9 @@ 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:
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'])
@ -1115,6 +1155,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)
@ -1215,6 +1258,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)
@ -1384,7 +1430,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
@ -1626,7 +1672,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):
@ -1660,9 +1705,9 @@ 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)
is_last = self._fip_ns_unsubscribe(ri.router_id)
# 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:
if is_last:
self._destroy_fip_namespace(fip_ns_name)
def floating_forward_rules(self, floating_ip, fixed_ip):
@ -1742,51 +1787,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, all_routers=False):
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
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.
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])
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')
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:
continue
if (target_ex_net_id and ex_net_id and
ex_net_id != target_ex_net_id):
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 (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 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():
@ -1810,7 +1842,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)
@ -1820,12 +1860,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]
@ -1851,8 +1885,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)
@ -1946,7 +1978,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(

View File

@ -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.

View File

@ -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:

View File

@ -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,

View File

@ -23,8 +23,10 @@ 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.gettextutils import _LE
from neutron.openstack.common import importutils
from neutron.openstack.common import log as logging
@ -71,7 +73,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
@ -110,6 +112,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 +126,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)
@ -150,7 +192,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)
@ -159,7 +201,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,
@ -254,7 +297,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,
@ -293,14 +337,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):
@ -367,10 +412,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)

View File

@ -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'])

View File

@ -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.'

View File

@ -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):
@ -560,7 +579,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(

View File

@ -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.

View File

@ -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,19 +402,15 @@ 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]
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:
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
continue
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 "
LOG.warn(_LW("ofport: %(ofport)s for VIF: %(vif)s is not a"
" positive integer"), {'ofport': ofport,
'vif': port_id})
return
@ -422,8 +419,11 @@ class OVSBridge(BaseOVS):
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)
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):

View File

@ -14,9 +14,9 @@
# under the License.
import fcntl
import glob
import os
import shlex
import shutil
import socket
import struct
import tempfile
@ -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:
@ -129,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):
@ -163,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)

View File

@ -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.

View File

@ -38,7 +38,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__)
@ -210,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,
@ -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:
@ -278,16 +280,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."""

View File

@ -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:

View File

@ -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,14 +236,14 @@ class SecurityGroupAgentRpcMixin(object):
remote_sg_id, member_ips)
def security_groups_rule_updated(self, security_groups):
LOG.info(_("Security group "
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 "
LOG.info(_LI("Security group "
"member updated %r"), security_groups)
self._security_group_updated(
security_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(

View File

@ -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')

View File

@ -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)

View File

@ -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},

View File

@ -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,

View File

@ -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.

View File

@ -104,11 +104,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():

View File

@ -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 '

View File

@ -147,3 +147,13 @@ IPV6_LLA_PREFIX = 'fe80::/64'
# Linux interface max length
DEVICE_NAME_MAX_LEN = 15
# Device names start with "tap"
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

View File

@ -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")

View File

@ -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,7 +479,16 @@ 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'])]
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'],
@ -480,7 +496,7 @@ class NeutronDbPluginV2(neutron_plugin_base_v2.NeutronPluginBaseV2,
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()):
@ -740,24 +757,32 @@ 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'])
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:
@ -1369,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:

View File

@ -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.

View File

@ -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
@ -180,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']):
@ -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
@ -264,12 +273,12 @@ 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(),
firewall_db = Firewall(
id=uuidutils.generate_uuid(),
tenant_id=tenant_id,
name=fw['name'],
description=fw['description'],
firewall_policy_id=
fw['firewall_policy_id'],
firewall_policy_id=fw['firewall_policy_id'],
admin_state_up=fw['admin_state_up'],
status=status)
context.session.add(firewall_db)
@ -329,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)
@ -381,7 +396,8 @@ 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(),
fwr_db = FirewallRule(
id=uuidutils.generate_uuid(),
tenant_id=tenant_id,
name=fwr['name'],
description=fwr['description'],
@ -389,8 +405,7 @@ class Firewall_db_mixin(firewall.FirewallPluginBase, base_db.CommonDbMixin):
protocol=fwr['protocol'],
ip_version=fwr['ip_version'],
source_ip_address=fwr['source_ip_address'],
destination_ip_address=
fwr['destination_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,
@ -403,6 +418,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 +438,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 +448,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 +495,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.

View File

@ -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())))
try:
for binding in down_bindings:
LOG.warn(_LW("Rescheduling router %(router)s from agent %(agent)s "
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.

View File

@ -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):
@ -101,7 +126,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({
@ -255,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
@ -277,11 +312,16 @@ 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)
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)
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 = (
@ -291,7 +331,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)
@ -313,11 +353,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
@ -331,18 +368,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)
@ -363,15 +395,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")
@ -411,7 +441,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']:
@ -424,19 +454,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'])
@ -449,7 +479,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': ''}})
@ -464,18 +494,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,
@ -483,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(
@ -490,9 +533,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']
@ -513,11 +562,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:
@ -566,10 +616,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,
@ -584,16 +636,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,
@ -932,9 +984,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
@ -1037,10 +1096,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):
@ -1056,13 +1115,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):
@ -1103,7 +1158,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):
@ -1117,7 +1172,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.

View File

@ -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)
@ -314,6 +330,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'])
@ -444,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,
@ -457,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
@ -477,37 +511,39 @@ 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:
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']):
@ -536,11 +572,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,

View File

@ -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':

View File

@ -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

View File

@ -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)

View File

@ -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.

View File

@ -1,13 +0,0 @@
# Copyright (C) 2013 eNovance SAS <licensing@enovance.com>
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.

View File

@ -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']

View File

@ -100,6 +100,7 @@ def run_migrations_online():
context.run_migrations()
finally:
connection.close()
engine.dispose()
if context.is_offline_mode():

View File

@ -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')

View File

@ -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,6 +93,22 @@ def downgrade():
# Drop the existed foreign key constraints
# In order to perform primary key changes
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,
@ -101,7 +131,32 @@ def downgrade():
sa.Column('id', sa.String(32))
)
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,
@ -119,9 +174,3 @@ def downgrade():
remote_cols=['id'],
ondelete='CASCADE'
)
op.create_primary_key(
name=PK_NAME,
table_name=TABLE_NAME,
cols=['id']
)

View File

@ -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,7 +39,14 @@ def upgrade():
['router_id'], ['routers.id'], ondelete='CASCADE'),
sa.PrimaryKeyConstraint('router_id')
)
op.execute("INSERT INTO router_extra_attributes SELECT id as router_id, "
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")

View File

@ -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'
)

View File

@ -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')

View File

@ -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 "

View File

@ -1 +1 @@
1680e1f0c4dc
1f71e54a85e7

View File

@ -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

View File

@ -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

View File

@ -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):
@ -131,6 +132,7 @@ class BaseMigrateToMl2_Icehouse(object):
metadata = sa.MetaData()
check_db_schema_version(engine, metadata)
if hasattr(self, 'define_ml2_tables'):
self.define_ml2_tables(metadata)
# Autoload the ports table to ensure that foreign keys to it and
@ -144,6 +146,7 @@ class BaseMigrateToMl2_Icehouse(object):
self.migrate_vlan_allocations(engine)
self.migrate_port_bindings(engine, metadata)
if hasattr(self, 'drop_old_tables'):
self.drop_old_tables(engine, save_tables)
def migrate_segment_dict(self, binding):
@ -210,6 +213,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 +361,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 +372,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 +380,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 +425,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 +460,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

View File

@ -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)
@ -177,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,

View File

@ -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

View File

@ -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
@ -153,8 +154,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']
@ -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
@ -218,7 +219,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)
@ -230,27 +231,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):
@ -268,7 +274,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))
@ -279,14 +286,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
@ -329,7 +335,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'])
@ -338,12 +344,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))
@ -416,8 +421,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 = {

View File

@ -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.

View File

@ -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
@ -601,6 +602,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):
@ -646,7 +657,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

View File

@ -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.

View File

@ -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]
@ -139,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):

View File

@ -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'}}

View File

@ -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}
}
}}}}

View File

@ -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}

View File

@ -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

View File

@ -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")

View File

@ -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)

View File

@ -1,263 +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-15 06:11+0000\n"
"PO-Revision-Date: 2014-06-30 20:07+0000\n"
"Last-Translator: openstackjenkins <jenkins@openstack.org>\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:115
#, python-format
msgid ""
"Backward compatibility unavailable for deprecated policy %s. The policy will "
"not be enforced"
msgstr ""
#: neutron/policy.py:280
#, 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:230
#, 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
#, python-format
msgid "respawning %(service)s for uuid %(uuid)s"
msgstr ""
#: neutron/agent/linux/external_process.py:256
msgid "Exiting agent as programmed in check_child_processes_actions"
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:283
#, python-format
msgid "Unable to delete port '%(pname)s' on switch. Exception: %(exp)s"
msgstr ""
#: neutron/plugins/ml2/drivers/type_gre.py:80
#, python-format
msgid "Skipping unreasonable gre ID range %(tun_min)s:%(tun_max)s"
msgstr ""
#: neutron/plugins/ml2/drivers/type_vxlan.py:87
#, 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
msgid "APIC service agent: failed in reporting state"
msgstr ""
#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:207
#, python-format
msgid "No such interface (ignored): %s"
msgstr ""
#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:257
msgid "APIC service agent: exception in LLDP parsing"
msgstr ""
#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:312
#, python-format
msgid "APIC service agent: can not get MACaddr for %s"
msgstr ""
#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:328
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:56
#, 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:2089
#, 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 ""

View File

@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Neutron\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2014-09-14 06:10+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 <jenkins@openstack.org>\n"
"Language-Team: German (http://www.transifex.com/projects/p/neutron/language/"
"de/)\n"
@ -20,17 +20,69 @@ 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/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"
msgstr ""
#: neutron/common/ipv6_utils.py:62
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."
@ -55,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"
@ -66,73 +133,78 @@ 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"
#: 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,68 +214,57 @@ 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 ""
#: 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
@ -215,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
@ -225,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"

View File

@ -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 <jenkins@openstack.org>\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 ""

View File

@ -1,263 +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-15 06:11+0000\n"
"PO-Revision-Date: 2014-06-30 20:07+0000\n"
"Last-Translator: openstackjenkins <jenkins@openstack.org>\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:115
#, python-format
msgid ""
"Backward compatibility unavailable for deprecated policy %s. The policy will "
"not be enforced"
msgstr ""
#: neutron/policy.py:280
#, 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:230
#, 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
#, python-format
msgid "respawning %(service)s for uuid %(uuid)s"
msgstr ""
#: neutron/agent/linux/external_process.py:256
msgid "Exiting agent as programmed in check_child_processes_actions"
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:283
#, python-format
msgid "Unable to delete port '%(pname)s' on switch. Exception: %(exp)s"
msgstr ""
#: neutron/plugins/ml2/drivers/type_gre.py:80
#, python-format
msgid "Skipping unreasonable gre ID range %(tun_min)s:%(tun_max)s"
msgstr ""
#: neutron/plugins/ml2/drivers/type_vxlan.py:87
#, 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
msgid "APIC service agent: failed in reporting state"
msgstr ""
#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:207
#, python-format
msgid "No such interface (ignored): %s"
msgstr ""
#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:257
msgid "APIC service agent: exception in LLDP parsing"
msgstr ""
#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:312
#, python-format
msgid "APIC service agent: can not get MACaddr for %s"
msgstr ""
#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:328
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:56
#, 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:2089
#, 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 ""

View File

@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Neutron\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2014-09-14 06:10+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 <jenkins@openstack.org>\n"
"Language-Team: English (Australia) (http://www.transifex.com/projects/p/"
"neutron/language/en_AU/)\n"
@ -19,17 +19,69 @@ 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/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"
msgstr ""
#: neutron/common/ipv6_utils.py:62
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."
@ -54,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"
@ -64,72 +131,77 @@ 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"
#: 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,41 +211,28 @@ 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 ""
#: 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 ""
@ -228,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"

View File

@ -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 <jenkins@openstack.org>\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 ""

View File

@ -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 <EMAIL@ADDRESS>\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"

View File

@ -1,268 +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 <andi@gowling.com>, 2014
msgid ""
msgstr ""
"Project-Id-Version: Neutron\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2014-09-15 06:11+0000\n"
"PO-Revision-Date: 2014-08-12 21:24+0000\n"
"Last-Translator: openstackjenkins <jenkins@openstack.org>\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:115
#, 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:280
#, 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:230
#, 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
#, python-format
msgid "respawning %(service)s for uuid %(uuid)s"
msgstr ""
#: neutron/agent/linux/external_process.py:256
msgid "Exiting agent as programmed in check_child_processes_actions"
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:283
#, python-format
msgid "Unable to delete port '%(pname)s' on switch. Exception: %(exp)s"
msgstr ""
#: neutron/plugins/ml2/drivers/type_gre.py:80
#, python-format
msgid "Skipping unreasonable gre ID range %(tun_min)s:%(tun_max)s"
msgstr ""
#: neutron/plugins/ml2/drivers/type_vxlan.py:87
#, 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
msgid "APIC service agent: failed in reporting state"
msgstr ""
#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:207
#, python-format
msgid "No such interface (ignored): %s"
msgstr ""
#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:257
msgid "APIC service agent: exception in LLDP parsing"
msgstr ""
#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:312
#, python-format
msgid "APIC service agent: can not get MACaddr for %s"
msgstr ""
#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:328
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:56
#, 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:2089
#, 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 ""

View File

@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Neutron\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2014-09-14 06:10+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 <jenkins@openstack.org>\n"
"Language-Team: English (United Kingdom) (http://www.transifex.com/projects/p/"
"neutron/language/en_GB/)\n"
@ -20,18 +20,70 @@ 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/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"
msgstr ""
#: neutron/common/ipv6_utils.py:62
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."
@ -56,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"
@ -66,72 +133,77 @@ 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"
#: 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,41 +213,28 @@ 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 ""
#: 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 ""
@ -230,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"

View File

@ -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 <andi@gowling.com>, 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 <andi@gowling.com>\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 ""

File diff suppressed because it is too large Load Diff

View File

@ -1,263 +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-15 06:11+0000\n"
"PO-Revision-Date: 2014-06-30 20:07+0000\n"
"Last-Translator: openstackjenkins <jenkins@openstack.org>\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:115
#, python-format
msgid ""
"Backward compatibility unavailable for deprecated policy %s. The policy will "
"not be enforced"
msgstr ""
#: neutron/policy.py:280
#, 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:230
#, 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
#, python-format
msgid "respawning %(service)s for uuid %(uuid)s"
msgstr ""
#: neutron/agent/linux/external_process.py:256
msgid "Exiting agent as programmed in check_child_processes_actions"
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:283
#, python-format
msgid "Unable to delete port '%(pname)s' on switch. Exception: %(exp)s"
msgstr ""
#: neutron/plugins/ml2/drivers/type_gre.py:80
#, python-format
msgid "Skipping unreasonable gre ID range %(tun_min)s:%(tun_max)s"
msgstr ""
#: neutron/plugins/ml2/drivers/type_vxlan.py:87
#, 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
msgid "APIC service agent: failed in reporting state"
msgstr ""
#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:207
#, python-format
msgid "No such interface (ignored): %s"
msgstr ""
#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:257
msgid "APIC service agent: exception in LLDP parsing"
msgstr ""
#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:312
#, python-format
msgid "APIC service agent: can not get MACaddr for %s"
msgstr ""
#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:328
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:56
#, 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:2089
#, 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 ""

View File

@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Neutron\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2014-09-14 06:10+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 <jenkins@openstack.org>\n"
"Language-Team: Spanish (http://www.transifex.com/projects/p/neutron/language/"
"es/)\n"
@ -19,17 +19,69 @@ 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/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"
msgstr ""
#: neutron/common/ipv6_utils.py:62
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."
@ -54,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"
@ -64,72 +131,77 @@ 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"
#: 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 ""
@ -137,43 +209,30 @@ 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: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 ""
#: 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 ""
@ -181,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
@ -212,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
@ -222,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"

View File

@ -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 <jenkins@openstack.org>\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 ""

View File

@ -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 <EMAIL@ADDRESS>\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"

View File

@ -1,263 +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-15 06:11+0000\n"
"PO-Revision-Date: 2014-06-30 20:07+0000\n"
"Last-Translator: openstackjenkins <jenkins@openstack.org>\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:115
#, python-format
msgid ""
"Backward compatibility unavailable for deprecated policy %s. The policy will "
"not be enforced"
msgstr ""
#: neutron/policy.py:280
#, 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:230
#, 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
#, python-format
msgid "respawning %(service)s for uuid %(uuid)s"
msgstr ""
#: neutron/agent/linux/external_process.py:256
msgid "Exiting agent as programmed in check_child_processes_actions"
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:283
#, python-format
msgid "Unable to delete port '%(pname)s' on switch. Exception: %(exp)s"
msgstr ""
#: neutron/plugins/ml2/drivers/type_gre.py:80
#, python-format
msgid "Skipping unreasonable gre ID range %(tun_min)s:%(tun_max)s"
msgstr ""
#: neutron/plugins/ml2/drivers/type_vxlan.py:87
#, 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
msgid "APIC service agent: failed in reporting state"
msgstr ""
#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:207
#, python-format
msgid "No such interface (ignored): %s"
msgstr ""
#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:257
msgid "APIC service agent: exception in LLDP parsing"
msgstr ""
#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:312
#, python-format
msgid "APIC service agent: can not get MACaddr for %s"
msgstr ""
#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:328
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:56
#, 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:2089
#, 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 ""

View File

@ -3,12 +3,13 @@
# This file is distributed under the same license as the neutron project.
#
# Translators:
# Maxime COQUEREL <max.coquerel@gmail.com>, 2014
msgid ""
msgstr ""
"Project-Id-Version: Neutron\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2014-09-14 06:10+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 <jenkins@openstack.org>\n"
"Language-Team: French (http://www.transifex.com/projects/p/neutron/language/"
"fr/)\n"
@ -19,17 +20,69 @@ 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/common/ipv6_utils.py:62
msgid "IPv6 is not enabled on this system."
#: 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/db/l3_agentschedulers_db.py:82
#: 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"
msgstr ""
#: neutron/common/ipv6_utils.py:62
msgid "IPv6 is not enabled on this system."
msgstr "IPv6 n'est pas activé sur le système."
#: neutron/db/l3_agentschedulers_db.py:83
msgid ""
"Skipping period L3 agent status check because automatic router rescheduling "
"is disabled."
@ -54,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"
@ -64,72 +132,77 @@ 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"
#: 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 ""
msgstr "Démarrage du service de l'agent APIC"
#: 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 ""
msgstr "service de l'agent APIC démarré"
#: 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,68 +212,59 @@ 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 ""
#: 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
@ -212,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
@ -241,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"

View File

@ -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 <jenkins@openstack.org>\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 ""

View File

@ -1,264 +0,0 @@
# Translations template for neutron.
# Copyright (C) 2014 ORGANIZATION
# This file is distributed under the same license as the neutron project.
#
# Translators:
# PierAlberto <pieralbertopierini@gmail.com>, 2014
msgid ""
msgstr ""
"Project-Id-Version: Neutron\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2014-09-15 06:11+0000\n"
"PO-Revision-Date: 2014-07-06 03:50+0000\n"
"Last-Translator: PierAlberto <pieralbertopierini@gmail.com>\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:115
#, python-format
msgid ""
"Backward compatibility unavailable for deprecated policy %s. The policy will "
"not be enforced"
msgstr ""
#: neutron/policy.py:280
#, 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:230
#, 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
#, python-format
msgid "respawning %(service)s for uuid %(uuid)s"
msgstr ""
#: neutron/agent/linux/external_process.py:256
msgid "Exiting agent as programmed in check_child_processes_actions"
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:283
#, python-format
msgid "Unable to delete port '%(pname)s' on switch. Exception: %(exp)s"
msgstr ""
#: neutron/plugins/ml2/drivers/type_gre.py:80
#, python-format
msgid "Skipping unreasonable gre ID range %(tun_min)s:%(tun_max)s"
msgstr ""
#: neutron/plugins/ml2/drivers/type_vxlan.py:87
#, 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
msgid "APIC service agent: failed in reporting state"
msgstr ""
#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:207
#, python-format
msgid "No such interface (ignored): %s"
msgstr ""
#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:257
msgid "APIC service agent: exception in LLDP parsing"
msgstr ""
#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:312
#, python-format
msgid "APIC service agent: can not get MACaddr for %s"
msgstr ""
#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:328
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:56
#, 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:2089
#, 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 ""

View File

@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Neutron\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2014-09-14 06:10+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 <jenkins@openstack.org>\n"
"Language-Team: Italian (http://www.transifex.com/projects/p/neutron/language/"
"it/)\n"
@ -20,17 +20,69 @@ 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/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"
msgstr ""
#: neutron/common/ipv6_utils.py:62
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."
@ -55,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"
@ -66,72 +133,77 @@ 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"
#: 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,68 +213,55 @@ 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 ""
#: 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
@ -214,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
@ -224,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"

View File

@ -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 <jenkins@openstack.org>\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 ""

View File

@ -1,263 +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-15 06:11+0000\n"
"PO-Revision-Date: 2014-06-30 20:07+0000\n"
"Last-Translator: openstackjenkins <jenkins@openstack.org>\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:115
#, python-format
msgid ""
"Backward compatibility unavailable for deprecated policy %s. The policy will "
"not be enforced"
msgstr ""
#: neutron/policy.py:280
#, 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:230
#, 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
#, python-format
msgid "respawning %(service)s for uuid %(uuid)s"
msgstr ""
#: neutron/agent/linux/external_process.py:256
msgid "Exiting agent as programmed in check_child_processes_actions"
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:283
#, python-format
msgid "Unable to delete port '%(pname)s' on switch. Exception: %(exp)s"
msgstr ""
#: neutron/plugins/ml2/drivers/type_gre.py:80
#, python-format
msgid "Skipping unreasonable gre ID range %(tun_min)s:%(tun_max)s"
msgstr ""
#: neutron/plugins/ml2/drivers/type_vxlan.py:87
#, 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
msgid "APIC service agent: failed in reporting state"
msgstr ""
#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:207
#, python-format
msgid "No such interface (ignored): %s"
msgstr ""
#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:257
msgid "APIC service agent: exception in LLDP parsing"
msgstr ""
#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:312
#, python-format
msgid "APIC service agent: can not get MACaddr for %s"
msgstr ""
#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:328
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:56
#, 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:2089
#, 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 ""

View File

@ -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-09-14 06:10+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 <jenkins@openstack.org>\n"
"Language-Team: Japanese (http://www.transifex.com/projects/p/neutron/"
"language/ja/)\n"
@ -19,17 +20,69 @@ 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/common/ipv6_utils.py:62
msgid "IPv6 is not enabled on this system."
#: 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/db/l3_agentschedulers_db.py:82
#: 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"
msgstr ""
#: neutron/common/ipv6_utils.py:62
msgid "IPv6 is not enabled on this system."
msgstr " このシステムでは、 IP6が有効ではありません。"
#: neutron/db/l3_agentschedulers_db.py:83
msgid ""
"Skipping period L3 agent status check because automatic router rescheduling "
"is disabled."
@ -54,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"
@ -64,72 +132,77 @@ 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 個の子で終了を待機しています"
#: 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 ""
@ -137,70 +210,60 @@ 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: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 ""
#: 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
@ -212,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
@ -222,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"

View File

@ -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 <jenkins@openstack.org>\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 ""

View File

@ -1,263 +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-15 06:11+0000\n"
"PO-Revision-Date: 2014-06-30 20:07+0000\n"
"Last-Translator: openstackjenkins <jenkins@openstack.org>\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:115
#, python-format
msgid ""
"Backward compatibility unavailable for deprecated policy %s. The policy will "
"not be enforced"
msgstr ""
#: neutron/policy.py:280
#, 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:230
#, 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
#, python-format
msgid "respawning %(service)s for uuid %(uuid)s"
msgstr ""
#: neutron/agent/linux/external_process.py:256
msgid "Exiting agent as programmed in check_child_processes_actions"
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:283
#, python-format
msgid "Unable to delete port '%(pname)s' on switch. Exception: %(exp)s"
msgstr ""
#: neutron/plugins/ml2/drivers/type_gre.py:80
#, python-format
msgid "Skipping unreasonable gre ID range %(tun_min)s:%(tun_max)s"
msgstr ""
#: neutron/plugins/ml2/drivers/type_vxlan.py:87
#, 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
msgid "APIC service agent: failed in reporting state"
msgstr ""
#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:207
#, python-format
msgid "No such interface (ignored): %s"
msgstr ""
#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:257
msgid "APIC service agent: exception in LLDP parsing"
msgstr ""
#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:312
#, python-format
msgid "APIC service agent: can not get MACaddr for %s"
msgstr ""
#: neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py:328
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:56
#, 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:2089
#, 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 ""

View File

@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Neutron\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2014-09-14 06:10+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 <jenkins@openstack.org>\n"
"Language-Team: Korean (Korea) (http://www.transifex.com/projects/p/neutron/"
"language/ko_KR/)\n"
@ -19,17 +19,69 @@ 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/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"
msgstr ""
#: neutron/common/ipv6_utils.py:62
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."
@ -54,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"
@ -64,72 +131,77 @@ 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 하위에서 종료하기를 대기 중임"
#: 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 ""
@ -137,70 +209,57 @@ 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: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 ""
#: 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
@ -212,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
@ -222,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"

View File

@ -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 <jenkins@openstack.org>\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 ""

View File

@ -6,9 +6,9 @@
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: neutron 2014.2.dev123.g62ae82d\n"
"Project-Id-Version: neutron 2015.1.dev166.gf1384cc\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2014-09-15 06:11+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 <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -17,45 +17,69 @@ 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 ""
#: neutron/agent/l3_agent.py:1852
#, 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:230
#: 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:250
#: neutron/agent/linux/external_process.py:247
#, python-format
msgid "respawning %(service)s for uuid %(uuid)s"
msgstr ""
#: neutron/agent/linux/external_process.py:256
#: neutron/agent/linux/external_process.py:253
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/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"
@ -66,53 +90,62 @@ 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 ""
#: 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 +153,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 +231,7 @@ msgstr ""
msgid "Error while processing VIF ports"
msgstr ""
#: neutron/plugins/vmware/plugins/base.py:2089
#: neutron/plugins/vmware/plugins/base.py:2098
#, python-format
msgid ""
"Rolling back database changes for gateway device %s because of an error "
@ -210,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 ""

Some files were not shown because too many files have changed in this diff Show More