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:
commit
c089154a94
124
.pylintrc
124
.pylintrc
|
@ -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
|
||||
|
|
|
@ -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
|
||||
-------------------
|
||||
|
|
|
@ -1,2 +1,11 @@
|
|||
Neutron Database Layer
|
||||
======================
|
||||
|
||||
|
||||
Testing database and models sync
|
||||
--------------------------------
|
||||
|
||||
.. automodule:: neutron.tests.unit.db.test_migration
|
||||
|
||||
.. autoclass:: _TestModelsMigrations
|
||||
:members:
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
|
@ -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.
|
|
@ -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':
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
try:
|
||||
self.neutron_service_plugins = (
|
||||
self.plugin_rpc.get_service_plugin_list(self.context))
|
||||
except n_rpc.RemoteError as e:
|
||||
LOG.warning(_('l3-agent cannot check service plugins '
|
||||
'enabled at the neutron server when startup '
|
||||
'due to RPC error. It happens when the server '
|
||||
'does not support this RPC API. If the error '
|
||||
'is UnsupportedVersion you can ignore '
|
||||
'this warning. Detail message: %s'), e)
|
||||
self.neutron_service_plugins = None
|
||||
# This is the first place where we contact neutron-server on startup
|
||||
# so retry in case its not ready to respond.
|
||||
retry_count = 5
|
||||
while True:
|
||||
retry_count = retry_count - 1
|
||||
try:
|
||||
self.neutron_service_plugins = (
|
||||
self.plugin_rpc.get_service_plugin_list(self.context))
|
||||
except n_rpc.RemoteError as e:
|
||||
with excutils.save_and_reraise_exception() as ctx:
|
||||
ctx.reraise = False
|
||||
LOG.warning(_LW('l3-agent cannot check service plugins '
|
||||
'enabled at the neutron server when '
|
||||
'startup due to RPC error. It happens '
|
||||
'when the server does not support this '
|
||||
'RPC API. If the error is '
|
||||
'UnsupportedVersion you can ignore this '
|
||||
'warning. Detail message: %s'), e)
|
||||
self.neutron_service_plugins = None
|
||||
except messaging.MessagingTimeout as e:
|
||||
with excutils.save_and_reraise_exception() as ctx:
|
||||
if retry_count > 0:
|
||||
ctx.reraise = False
|
||||
LOG.warning(_LW('l3-agent cannot check service '
|
||||
'plugins enabled on the neutron '
|
||||
'server. Retrying. '
|
||||
'Detail message: %s'), e)
|
||||
continue
|
||||
break
|
||||
|
||||
self._clean_stale_namespaces = self.conf.use_namespaces
|
||||
|
||||
# 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,16 +616,22 @@ 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
|
||||
|
||||
This routine is called when self._clean_stale_namespaces is True.
|
||||
This routine is called when self._clean_stale_namespaces is True.
|
||||
|
||||
The argument router_namespaces is the list of all routers namespaces
|
||||
The argument router_ids is the list of ids for known routers.
|
||||
"""
|
||||
ns_to_ignore = set(NS_PREFIX + id for id in router_ids)
|
||||
ns_to_ignore.update(SNAT_NS_PREFIX + id for id in router_ids)
|
||||
# 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,9 +1104,11 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback,
|
|||
if ri.router['distributed']:
|
||||
# filter out only FIPs for this host/agent
|
||||
floating_ips = [i for i in floating_ips if i['host'] == self.host]
|
||||
if floating_ips and self.agent_gateway_port is None:
|
||||
self._create_agent_gateway_port(ri, floating_ips[0]
|
||||
['floating_network_id'])
|
||||
if floating_ips:
|
||||
is_first = self._fip_ns_subscribe(ri.router_id)
|
||||
if is_first:
|
||||
self._create_agent_gateway_port(ri, floating_ips[0]
|
||||
['floating_network_id'])
|
||||
|
||||
if self.agent_gateway_port:
|
||||
if floating_ips and ri.dist_fip_count == 0:
|
||||
|
@ -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,10 +1705,10 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback,
|
|||
self.local_subnets.release(ri.router_id)
|
||||
ri.rtr_fip_subnet = None
|
||||
ns_ip.del_veth(fip_2_rtr_name)
|
||||
# clean up fip-namespace if this is the last FIP
|
||||
self.agent_fip_count = self.agent_fip_count - 1
|
||||
if self.agent_fip_count == 0:
|
||||
self._destroy_fip_namespace(fip_ns_name)
|
||||
is_last = self._fip_ns_unsubscribe(ri.router_id)
|
||||
# clean up fip-namespace if this is the last FIP
|
||||
if is_last:
|
||||
self._destroy_fip_namespace(fip_ns_name)
|
||||
|
||||
def floating_forward_rules(self, floating_ip, fixed_ip):
|
||||
return [('PREROUTING', '-d %s -j DNAT --to %s' %
|
||||
|
@ -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
|
||||
|
||||
# If namespaces are disabled, only process the router associated
|
||||
# with the configured agent id.
|
||||
if (not self.conf.use_namespaces and
|
||||
router['id'] != self.conf.router_id):
|
||||
raise n_exc.RouterNotCompatibleWithAgent(router_id=router['id'])
|
||||
|
||||
# Either ex_net_id or handle_internal_only_routers must be set
|
||||
ex_net_id = (router['external_gateway_info'] or {}).get('network_id')
|
||||
if not ex_net_id and not self.conf.handle_internal_only_routers:
|
||||
raise n_exc.RouterNotCompatibleWithAgent(router_id=router['id'])
|
||||
|
||||
# If target_ex_net_id and ex_net_id are set they must be equal
|
||||
target_ex_net_id = self._fetch_external_net_id()
|
||||
# if routers are all the routers we have (They are from router sync on
|
||||
# starting or when error occurs during running), we seek the
|
||||
# routers which should be removed.
|
||||
# If routers are from server side notification, we seek them
|
||||
# from subset of incoming routers and ones we have now.
|
||||
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')
|
||||
if not ex_net_id and not self.conf.handle_internal_only_routers:
|
||||
continue
|
||||
if (target_ex_net_id and ex_net_id and
|
||||
ex_net_id != target_ex_net_id):
|
||||
# Double check that our single external_net_id has not changed
|
||||
# by forcing a check by RPC.
|
||||
if (ex_net_id != self._fetch_external_net_id(force=True)):
|
||||
continue
|
||||
cur_router_ids.add(r['id'])
|
||||
if r['id'] not in self.router_info:
|
||||
self._router_added(r['id'], r)
|
||||
ri = self.router_info[r['id']]
|
||||
ri.router = r
|
||||
pool.spawn_n(self.process_router, ri)
|
||||
# identify and remove routers that no longer exist
|
||||
for router_id in prev_router_ids - cur_router_ids:
|
||||
pool.spawn_n(self._router_removed, router_id)
|
||||
pool.waitall()
|
||||
if (target_ex_net_id and ex_net_id and ex_net_id != target_ex_net_id):
|
||||
# Double check that our single external_net_id has not changed
|
||||
# by forcing a check by RPC.
|
||||
if ex_net_id != self._fetch_external_net_id(force=True):
|
||||
raise n_exc.RouterNotCompatibleWithAgent(
|
||||
router_id=router['id'])
|
||||
|
||||
if router['id'] not in self.router_info:
|
||||
self._router_added(router['id'], router)
|
||||
ri = self.router_info[router['id']]
|
||||
ri.router = router
|
||||
self.process_router(ri)
|
||||
|
||||
def _process_router_update(self):
|
||||
for rp, update in self._queue.each_update_to_next_router():
|
||||
|
@ -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(
|
||||
|
|
|
@ -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.
|
|
@ -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:
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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'])
|
||||
|
|
|
@ -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.'
|
|
@ -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(
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -22,6 +22,7 @@ from neutron.agent.linux import ip_lib
|
|||
from neutron.agent.linux import utils
|
||||
from neutron.common import exceptions
|
||||
from neutron.openstack.common import excutils
|
||||
from neutron.openstack.common.gettextutils import _LI, _LW
|
||||
from neutron.openstack.common import jsonutils
|
||||
from neutron.openstack.common import log as logging
|
||||
from neutron.plugins.common import constants
|
||||
|
@ -401,29 +402,28 @@ class OVSBridge(BaseOVS):
|
|||
# an exeception which will be captured in this block.
|
||||
# We won't deal with the possibility of ovs-vsctl return multiple
|
||||
# rows since the interface identifier is unique
|
||||
data = json_result['data'][0]
|
||||
port_name = data[name_idx]
|
||||
switch = get_bridge_for_iface(self.root_helper, port_name)
|
||||
if switch != self.br_name:
|
||||
LOG.info(_("Port: %(port_name)s is on %(switch)s,"
|
||||
" not on %(br_name)s"), {'port_name': port_name,
|
||||
'switch': switch,
|
||||
'br_name': self.br_name})
|
||||
return
|
||||
ofport = data[ofport_idx]
|
||||
# ofport must be integer otherwise return None
|
||||
if not isinstance(ofport, int) or ofport == -1:
|
||||
LOG.warn(_("ofport: %(ofport)s for VIF: %(vif)s is not a "
|
||||
"positive integer"), {'ofport': ofport,
|
||||
'vif': port_id})
|
||||
return
|
||||
# Find VIF's mac address in external ids
|
||||
ext_id_dict = dict((item[0], item[1]) for item in
|
||||
data[ext_ids_idx][1])
|
||||
vif_mac = ext_id_dict['attached-mac']
|
||||
return VifPort(port_name, ofport, port_id, vif_mac, self)
|
||||
except Exception as e:
|
||||
LOG.warn(_("Unable to parse interface details. Exception: %s"), e)
|
||||
for data in json_result['data']:
|
||||
port_name = data[name_idx]
|
||||
switch = get_bridge_for_iface(self.root_helper, port_name)
|
||||
if switch != self.br_name:
|
||||
continue
|
||||
ofport = data[ofport_idx]
|
||||
# ofport must be integer otherwise return None
|
||||
if not isinstance(ofport, int) or ofport == -1:
|
||||
LOG.warn(_LW("ofport: %(ofport)s for VIF: %(vif)s is not a"
|
||||
" positive integer"), {'ofport': ofport,
|
||||
'vif': port_id})
|
||||
return
|
||||
# Find VIF's mac address in external ids
|
||||
ext_id_dict = dict((item[0], item[1]) for item in
|
||||
data[ext_ids_idx][1])
|
||||
vif_mac = ext_id_dict['attached-mac']
|
||||
return VifPort(port_name, ofport, port_id, vif_mac, self)
|
||||
LOG.info(_LI("Port %(port_id)s not present in bridge %(br_name)s"),
|
||||
{'port_id': port_id, 'br_name': self.br_name})
|
||||
except Exception as error:
|
||||
LOG.warn(_LW("Unable to parse interface details. Exception: %s"),
|
||||
error)
|
||||
return
|
||||
|
||||
def delete_ports(self, all_ports=False):
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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.
|
|
@ -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."""
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -14,11 +14,14 @@
|
|||
# under the License.
|
||||
#
|
||||
|
||||
import functools
|
||||
|
||||
from oslo.config import cfg
|
||||
from oslo import messaging
|
||||
|
||||
from neutron.agent import firewall
|
||||
from neutron.common import topics
|
||||
from neutron.openstack.common.gettextutils import _LW
|
||||
from neutron.openstack.common.gettextutils import _LI, _LW
|
||||
from neutron.openstack.common import importutils
|
||||
from neutron.openstack.common import log as logging
|
||||
|
||||
|
@ -74,9 +77,9 @@ def _disable_extension(extension, aliases):
|
|||
|
||||
def disable_security_group_extension_by_config(aliases):
|
||||
if not is_firewall_enabled():
|
||||
LOG.info(_('Disabled security-group extension.'))
|
||||
LOG.info(_LI('Disabled security-group extension.'))
|
||||
_disable_extension('security-group', aliases)
|
||||
LOG.info(_('Disabled allowed-address-pairs extension.'))
|
||||
LOG.info(_LI('Disabled allowed-address-pairs extension.'))
|
||||
_disable_extension('allowed-address-pairs', aliases)
|
||||
|
||||
|
||||
|
@ -187,10 +190,23 @@ class SecurityGroupAgentRpcMixin(object):
|
|||
return False
|
||||
return True
|
||||
|
||||
def skip_if_noopfirewall_or_firewall_disabled(func):
|
||||
@functools.wraps(func)
|
||||
def decorated_function(self, *args, **kwargs):
|
||||
if (isinstance(self.firewall, firewall.NoopFirewallDriver) or
|
||||
not is_firewall_enabled()):
|
||||
LOG.info(_LI("Skipping method %s as firewall is disabled "
|
||||
"or configured as NoopFirewallDriver."),
|
||||
func.__name__)
|
||||
else:
|
||||
return func(self, *args, **kwargs)
|
||||
return decorated_function
|
||||
|
||||
@skip_if_noopfirewall_or_firewall_disabled
|
||||
def prepare_devices_filter(self, device_ids):
|
||||
if not device_ids:
|
||||
return
|
||||
LOG.info(_("Preparing filters for devices %s"), device_ids)
|
||||
LOG.info(_LI("Preparing filters for devices %s"), device_ids)
|
||||
if self.use_enhanced_rpc:
|
||||
devices_info = self.plugin_rpc.security_group_info_for_devices(
|
||||
self.context, list(device_ids))
|
||||
|
@ -220,15 +236,15 @@ class SecurityGroupAgentRpcMixin(object):
|
|||
remote_sg_id, member_ips)
|
||||
|
||||
def security_groups_rule_updated(self, security_groups):
|
||||
LOG.info(_("Security group "
|
||||
"rule updated %r"), security_groups)
|
||||
LOG.info(_LI("Security group "
|
||||
"rule updated %r"), security_groups)
|
||||
self._security_group_updated(
|
||||
security_groups,
|
||||
'security_groups')
|
||||
|
||||
def security_groups_member_updated(self, security_groups):
|
||||
LOG.info(_("Security group "
|
||||
"member updated %r"), security_groups)
|
||||
LOG.info(_LI("Security group "
|
||||
"member updated %r"), security_groups)
|
||||
self._security_group_updated(
|
||||
security_groups,
|
||||
'security_group_source_groups')
|
||||
|
@ -249,7 +265,7 @@ class SecurityGroupAgentRpcMixin(object):
|
|||
self.refresh_firewall(devices)
|
||||
|
||||
def security_groups_provider_updated(self):
|
||||
LOG.info(_("Provider rule updated"))
|
||||
LOG.info(_LI("Provider rule updated"))
|
||||
if self.defer_refresh_firewall:
|
||||
# NOTE(salv-orlando): A 'global refresh' might not be
|
||||
# necessary if the subnet for which the provider rules
|
||||
|
@ -261,7 +277,7 @@ class SecurityGroupAgentRpcMixin(object):
|
|||
def remove_devices_filter(self, device_ids):
|
||||
if not device_ids:
|
||||
return
|
||||
LOG.info(_("Remove device filter for %r"), device_ids)
|
||||
LOG.info(_LI("Remove device filter for %r"), device_ids)
|
||||
with self.firewall.defer_apply():
|
||||
for device_id in device_ids:
|
||||
device = self.firewall.ports.get(device_id)
|
||||
|
@ -269,12 +285,13 @@ class SecurityGroupAgentRpcMixin(object):
|
|||
continue
|
||||
self.firewall.remove_port_filter(device)
|
||||
|
||||
@skip_if_noopfirewall_or_firewall_disabled
|
||||
def refresh_firewall(self, device_ids=None):
|
||||
LOG.info(_("Refresh firewall rules"))
|
||||
LOG.info(_LI("Refresh firewall rules"))
|
||||
if not device_ids:
|
||||
device_ids = self.firewall.ports.keys()
|
||||
if not device_ids:
|
||||
LOG.info(_("No ports here to refresh firewall"))
|
||||
LOG.info(_LI("No ports here to refresh firewall"))
|
||||
return
|
||||
if self.use_enhanced_rpc:
|
||||
devices_info = self.plugin_rpc.security_group_info_for_devices(
|
||||
|
|
|
@ -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')
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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},
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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.
|
|
@ -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():
|
||||
|
|
|
@ -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 '
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -449,7 +449,14 @@ class NeutronDbPluginV2(neutron_plugin_base_v2.NeutronPluginBaseV2,
|
|||
msg = _('IP address %s is not a valid IP for the defined '
|
||||
'subnet') % fixed['ip_address']
|
||||
raise n_exc.InvalidInput(error_message=msg)
|
||||
|
||||
if self._check_if_subnet_uses_eui64(subnet):
|
||||
msg = (_("IPv6 address %(address)s can not be directly "
|
||||
"assigned to a port on subnet %(id)s with "
|
||||
"%(mode)s address mode") %
|
||||
{'address': fixed['ip_address'],
|
||||
'id': subnet_id,
|
||||
'mode': subnet['ipv6_address_mode']})
|
||||
raise n_exc.InvalidInput(error_message=msg)
|
||||
fixed_ip_set.append({'subnet_id': subnet_id,
|
||||
'ip_address': fixed['ip_address']})
|
||||
else:
|
||||
|
@ -459,7 +466,7 @@ class NeutronDbPluginV2(neutron_plugin_base_v2.NeutronPluginBaseV2,
|
|||
raise n_exc.InvalidInput(error_message=msg)
|
||||
return fixed_ip_set
|
||||
|
||||
def _allocate_fixed_ips(self, context, fixed_ips):
|
||||
def _allocate_fixed_ips(self, context, fixed_ips, mac_address):
|
||||
"""Allocate IP addresses according to the configured fixed_ips."""
|
||||
ips = []
|
||||
for fixed in fixed_ips:
|
||||
|
@ -472,15 +479,24 @@ class NeutronDbPluginV2(neutron_plugin_base_v2.NeutronPluginBaseV2,
|
|||
# Only subnet ID is specified => need to generate IP
|
||||
# from subnet
|
||||
else:
|
||||
subnets = [self._get_subnet(context, fixed['subnet_id'])]
|
||||
# IP address allocation
|
||||
result = self._generate_ip(context, subnets)
|
||||
ips.append({'ip_address': result['ip_address'],
|
||||
'subnet_id': result['subnet_id']})
|
||||
subnet = self._get_subnet(context, fixed['subnet_id'])
|
||||
if (subnet['ip_version'] == 6 and
|
||||
self._check_if_subnet_uses_eui64(subnet)):
|
||||
prefix = subnet['cidr']
|
||||
ip_address = ipv6_utils.get_ipv6_addr_by_EUI64(
|
||||
prefix, mac_address)
|
||||
ips.append({'ip_address': ip_address.format(),
|
||||
'subnet_id': subnet['id']})
|
||||
else:
|
||||
subnets = [subnet]
|
||||
# IP address allocation
|
||||
result = self._generate_ip(context, subnets)
|
||||
ips.append({'ip_address': result['ip_address'],
|
||||
'subnet_id': result['subnet_id']})
|
||||
return ips
|
||||
|
||||
def _update_ips_for_port(self, context, network_id, port_id, original_ips,
|
||||
new_ips):
|
||||
new_ips, mac_address):
|
||||
"""Add or remove IPs from the port."""
|
||||
ips = []
|
||||
# These ips are still on the port and haven't been removed
|
||||
|
@ -511,7 +527,7 @@ class NeutronDbPluginV2(neutron_plugin_base_v2.NeutronPluginBaseV2,
|
|||
|
||||
if to_add:
|
||||
LOG.debug(_("Port update. Adding %s"), to_add)
|
||||
ips = self._allocate_fixed_ips(context, to_add)
|
||||
ips = self._allocate_fixed_ips(context, to_add, mac_address)
|
||||
return ips, prev_ips
|
||||
|
||||
def _allocate_ips_for_port(self, context, port):
|
||||
|
@ -529,7 +545,9 @@ class NeutronDbPluginV2(neutron_plugin_base_v2.NeutronPluginBaseV2,
|
|||
configured_ips = self._test_fixed_ips_for_port(context,
|
||||
p["network_id"],
|
||||
p['fixed_ips'])
|
||||
ips = self._allocate_fixed_ips(context, configured_ips)
|
||||
ips = self._allocate_fixed_ips(context,
|
||||
configured_ips,
|
||||
p['mac_address'])
|
||||
else:
|
||||
filter = {'network_id': [p['network_id']]}
|
||||
subnets = self.get_subnets(context, filters=filter)
|
||||
|
@ -548,10 +566,9 @@ class NeutronDbPluginV2(neutron_plugin_base_v2.NeutronPluginBaseV2,
|
|||
# subnet from the array of subnets that will be passed
|
||||
# to the _generate_ip() function call, since we just
|
||||
# generated an IP.
|
||||
mac = p['mac_address']
|
||||
prefix = subnet['cidr']
|
||||
ip_address = ipv6_utils.get_ipv6_addr_by_EUI64(
|
||||
prefix, mac)
|
||||
prefix, p['mac_address'])
|
||||
if not self._check_unique_ip(
|
||||
context, p['network_id'],
|
||||
subnet['id'], ip_address.format()):
|
||||
|
@ -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'])
|
||||
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:
|
||||
|
|
|
@ -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.
|
|
@ -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,14 +273,14 @@ class Firewall_db_mixin(firewall.FirewallPluginBase, base_db.CommonDbMixin):
|
|||
status = (const.CREATED
|
||||
if cfg.CONF.router_distributed else const.PENDING_CREATE)
|
||||
with context.session.begin(subtransactions=True):
|
||||
firewall_db = Firewall(id=uuidutils.generate_uuid(),
|
||||
tenant_id=tenant_id,
|
||||
name=fw['name'],
|
||||
description=fw['description'],
|
||||
firewall_policy_id=
|
||||
fw['firewall_policy_id'],
|
||||
admin_state_up=fw['admin_state_up'],
|
||||
status=status)
|
||||
firewall_db = Firewall(
|
||||
id=uuidutils.generate_uuid(),
|
||||
tenant_id=tenant_id,
|
||||
name=fw['name'],
|
||||
description=fw['description'],
|
||||
firewall_policy_id=fw['firewall_policy_id'],
|
||||
admin_state_up=fw['admin_state_up'],
|
||||
status=status)
|
||||
context.session.add(firewall_db)
|
||||
return self._make_firewall_dict(firewall_db)
|
||||
|
||||
|
@ -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,28 +396,35 @@ class Firewall_db_mixin(firewall.FirewallPluginBase, base_db.CommonDbMixin):
|
|||
dst_port_min, dst_port_max = self._get_min_max_ports_from_range(
|
||||
fwr['destination_port'])
|
||||
with context.session.begin(subtransactions=True):
|
||||
fwr_db = FirewallRule(id=uuidutils.generate_uuid(),
|
||||
tenant_id=tenant_id,
|
||||
name=fwr['name'],
|
||||
description=fwr['description'],
|
||||
shared=fwr['shared'],
|
||||
protocol=fwr['protocol'],
|
||||
ip_version=fwr['ip_version'],
|
||||
source_ip_address=fwr['source_ip_address'],
|
||||
destination_ip_address=
|
||||
fwr['destination_ip_address'],
|
||||
source_port_range_min=src_port_min,
|
||||
source_port_range_max=src_port_max,
|
||||
destination_port_range_min=dst_port_min,
|
||||
destination_port_range_max=dst_port_max,
|
||||
action=fwr['action'],
|
||||
enabled=fwr['enabled'])
|
||||
fwr_db = FirewallRule(
|
||||
id=uuidutils.generate_uuid(),
|
||||
tenant_id=tenant_id,
|
||||
name=fwr['name'],
|
||||
description=fwr['description'],
|
||||
shared=fwr['shared'],
|
||||
protocol=fwr['protocol'],
|
||||
ip_version=fwr['ip_version'],
|
||||
source_ip_address=fwr['source_ip_address'],
|
||||
destination_ip_address=fwr['destination_ip_address'],
|
||||
source_port_range_min=src_port_min,
|
||||
source_port_range_max=src_port_max,
|
||||
destination_port_range_min=dst_port_min,
|
||||
destination_port_range_max=dst_port_max,
|
||||
action=fwr['action'],
|
||||
enabled=fwr['enabled'])
|
||||
context.session.add(fwr_db)
|
||||
return self._make_firewall_rule_dict(fwr_db)
|
||||
|
||||
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.
|
||||
|
|
|
@ -26,6 +26,7 @@ from sqlalchemy.orm import joinedload
|
|||
from sqlalchemy import sql
|
||||
|
||||
from neutron.common import constants
|
||||
from neutron.common import rpc as n_rpc
|
||||
from neutron.common import utils as n_utils
|
||||
from neutron import context as n_ctx
|
||||
from neutron.db import agents_db
|
||||
|
@ -34,7 +35,7 @@ from neutron.db import l3_attrs_db
|
|||
from neutron.db import model_base
|
||||
from neutron.extensions import l3agentscheduler
|
||||
from neutron import manager
|
||||
from neutron.openstack.common.gettextutils import _LI, _LW
|
||||
from neutron.openstack.common.gettextutils import _LE, _LI, _LW
|
||||
from neutron.openstack.common import log as logging
|
||||
from neutron.openstack.common import loopingcall
|
||||
from neutron.openstack.common import timeutils
|
||||
|
@ -122,15 +123,28 @@ class L3AgentSchedulerDbMixin(l3agentscheduler.L3AgentSchedulerPluginBase,
|
|||
RouterL3AgentBinding.router_id).
|
||||
filter(sa.or_(l3_attrs_db.RouterExtraAttributes.ha == sql.false(),
|
||||
l3_attrs_db.RouterExtraAttributes.ha == sql.null())))
|
||||
|
||||
for binding in down_bindings:
|
||||
LOG.warn(_LW("Rescheduling router %(router)s from agent %(agent)s "
|
||||
"because the agent did not report to the server in "
|
||||
"the last %(dead_time)s seconds."),
|
||||
{'router': binding.router_id,
|
||||
'agent': binding.l3_agent_id,
|
||||
'dead_time': agent_dead_limit})
|
||||
self.reschedule_router(context, binding.router_id)
|
||||
try:
|
||||
for binding in down_bindings:
|
||||
LOG.warn(_LW(
|
||||
"Rescheduling router %(router)s from agent %(agent)s "
|
||||
"because the agent did not report to the server in "
|
||||
"the last %(dead_time)s seconds."),
|
||||
{'router': binding.router_id,
|
||||
'agent': binding.l3_agent_id,
|
||||
'dead_time': agent_dead_limit})
|
||||
try:
|
||||
self.reschedule_router(context, binding.router_id)
|
||||
except (l3agentscheduler.RouterReschedulingFailed,
|
||||
n_rpc.RemoteError):
|
||||
# Catch individual router rescheduling errors here
|
||||
# so one broken one doesn't stop the iteration.
|
||||
LOG.exception(_LE("Failed to reschedule router %s"),
|
||||
binding.router_id)
|
||||
except db_exc.DBError:
|
||||
# Catch DB errors here so a transient DB connectivity issue
|
||||
# doesn't stop the loopingcall.
|
||||
LOG.exception(_LE("Exception encountered during router "
|
||||
"rescheduling."))
|
||||
|
||||
def validate_agent_router_combination(self, context, agent, router):
|
||||
"""Validate if the router can be correctly assigned to the agent.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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':
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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.
|
|
@ -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.
|
|
@ -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']
|
||||
|
|
|
@ -100,6 +100,7 @@ def run_migrations_online():
|
|||
context.run_migrations()
|
||||
finally:
|
||||
connection.close()
|
||||
engine.dispose()
|
||||
|
||||
|
||||
if context.is_offline_mode():
|
||||
|
|
|
@ -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')
|
|
@ -27,6 +27,7 @@ down_revision = '37f322991f59'
|
|||
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
from sqlalchemy.engine import reflection
|
||||
|
||||
TABLE_NAME = 'routerl3agentbindings'
|
||||
PK_NAME = 'pk_routerl3agentbindings'
|
||||
|
@ -49,7 +50,7 @@ def upgrade():
|
|||
# and all the duplicate records which violate the PK
|
||||
# constraint need to be removed.
|
||||
context = op.get_context()
|
||||
if context.bind.dialect.name == 'postgresql':
|
||||
if context.bind.dialect.name in ('postgresql', 'ibm_db_sa'):
|
||||
op.execute('DELETE FROM %(table)s WHERE id in ('
|
||||
'SELECT %(table)s.id FROM %(table)s LEFT OUTER JOIN '
|
||||
'(SELECT MIN(id) as id, router_id, l3_agent_id '
|
||||
|
@ -65,6 +66,19 @@ def upgrade():
|
|||
|
||||
op.drop_column(TABLE_NAME, 'id')
|
||||
|
||||
# DB2 doesn't support nullable column in primary key
|
||||
if context.bind.dialect.name == 'ibm_db_sa':
|
||||
op.alter_column(
|
||||
table_name=TABLE_NAME,
|
||||
column_name='router_id',
|
||||
nullable=False
|
||||
)
|
||||
op.alter_column(
|
||||
table_name=TABLE_NAME,
|
||||
column_name='l3_agent_id',
|
||||
nullable=False
|
||||
)
|
||||
|
||||
op.create_primary_key(
|
||||
name=PK_NAME,
|
||||
table_name=TABLE_NAME,
|
||||
|
@ -79,16 +93,32 @@ def downgrade():
|
|||
|
||||
# Drop the existed foreign key constraints
|
||||
# In order to perform primary key changes
|
||||
op.drop_constraint(
|
||||
name=fk_names[dialect]['l3_agent_id'],
|
||||
table_name=TABLE_NAME,
|
||||
type_='foreignkey'
|
||||
)
|
||||
op.drop_constraint(
|
||||
name=fk_names[dialect]['router_id'],
|
||||
table_name=TABLE_NAME,
|
||||
type_='foreignkey'
|
||||
)
|
||||
db2fks = {}
|
||||
if dialect == 'ibm_db_sa':
|
||||
# NOTE(mriedem): In DB2 the foreign key names are randomly generated
|
||||
# if you didn't originally explicitly name them, so the name is like
|
||||
# SQLxxxxx where the suffix is a random integer. Therefore we go
|
||||
# through and just drop all of the foreign keys and save them so we
|
||||
# can re-create them later after the primary key is dropped.
|
||||
inspector = reflection.Inspector.from_engine(op.get_bind().engine)
|
||||
db2fks = inspector.get_foreign_keys(TABLE_NAME)
|
||||
for fk in db2fks:
|
||||
op.drop_constraint(
|
||||
name=fk.get('name'),
|
||||
table_name=TABLE_NAME,
|
||||
type_='foreignkey'
|
||||
)
|
||||
else:
|
||||
op.drop_constraint(
|
||||
name=fk_names[dialect]['l3_agent_id'],
|
||||
table_name=TABLE_NAME,
|
||||
type_='foreignkey'
|
||||
)
|
||||
op.drop_constraint(
|
||||
name=fk_names[dialect]['router_id'],
|
||||
table_name=TABLE_NAME,
|
||||
type_='foreignkey'
|
||||
)
|
||||
|
||||
op.drop_constraint(
|
||||
name=PK_NAME,
|
||||
|
@ -101,27 +131,46 @@ def downgrade():
|
|||
sa.Column('id', sa.String(32))
|
||||
)
|
||||
|
||||
# Restore the foreign key constraints
|
||||
op.create_foreign_key(
|
||||
name=fk_names[dialect]['router_id'],
|
||||
source=TABLE_NAME,
|
||||
referent='routers',
|
||||
local_cols=['router_id'],
|
||||
remote_cols=['id'],
|
||||
ondelete='CASCADE'
|
||||
)
|
||||
|
||||
op.create_foreign_key(
|
||||
name=fk_names[dialect]['l3_agent_id'],
|
||||
source=TABLE_NAME,
|
||||
referent='agents',
|
||||
local_cols=['l3_agent_id'],
|
||||
remote_cols=['id'],
|
||||
ondelete='CASCADE'
|
||||
)
|
||||
if dialect == 'ibm_db_sa':
|
||||
# DB2 doesn't support nullable column in primary key
|
||||
op.alter_column(
|
||||
table_name=TABLE_NAME,
|
||||
column_name='id',
|
||||
nullable=False
|
||||
)
|
||||
|
||||
op.create_primary_key(
|
||||
name=PK_NAME,
|
||||
table_name=TABLE_NAME,
|
||||
cols=['id']
|
||||
)
|
||||
|
||||
# Restore the foreign key constraints
|
||||
if dialect == 'ibm_db_sa':
|
||||
for fk in db2fks:
|
||||
op.create_foreign_key(
|
||||
name=fk.get('name'),
|
||||
source=TABLE_NAME,
|
||||
referent=fk.get('referred_table'),
|
||||
local_cols=fk.get('constrained_columns'),
|
||||
remote_cols=fk.get('referred_columns'),
|
||||
ondelete='CASCADE'
|
||||
)
|
||||
else:
|
||||
op.create_foreign_key(
|
||||
name=fk_names[dialect]['router_id'],
|
||||
source=TABLE_NAME,
|
||||
referent='routers',
|
||||
local_cols=['router_id'],
|
||||
remote_cols=['id'],
|
||||
ondelete='CASCADE'
|
||||
)
|
||||
|
||||
op.create_foreign_key(
|
||||
name=fk_names[dialect]['l3_agent_id'],
|
||||
source=TABLE_NAME,
|
||||
referent='agents',
|
||||
local_cols=['l3_agent_id'],
|
||||
remote_cols=['id'],
|
||||
ondelete='CASCADE'
|
||||
)
|
||||
|
|
|
@ -29,6 +29,7 @@ import sqlalchemy as sa
|
|||
|
||||
|
||||
def upgrade():
|
||||
context = op.get_context()
|
||||
op.create_table(
|
||||
'router_extra_attributes',
|
||||
sa.Column('router_id', sa.String(length=36), nullable=False),
|
||||
|
@ -38,8 +39,15 @@ def upgrade():
|
|||
['router_id'], ['routers.id'], ondelete='CASCADE'),
|
||||
sa.PrimaryKeyConstraint('router_id')
|
||||
)
|
||||
op.execute("INSERT INTO router_extra_attributes SELECT id as router_id, "
|
||||
"False as distributed from routers")
|
||||
if context.bind.dialect.name == 'ibm_db_sa':
|
||||
# NOTE(mriedem): DB2 stores booleans as 0 and 1.
|
||||
op.execute("INSERT INTO router_extra_attributes "
|
||||
"SELECT id as router_id, "
|
||||
"0 as distributed from routers")
|
||||
else:
|
||||
op.execute("INSERT INTO router_extra_attributes "
|
||||
"SELECT id as router_id, "
|
||||
"False as distributed from routers")
|
||||
|
||||
|
||||
def downgrade():
|
||||
|
|
|
@ -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'
|
||||
)
|
|
@ -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')
|
|
@ -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 "
|
||||
|
|
|
@ -1 +1 @@
|
|||
1680e1f0c4dc
|
||||
1f71e54a85e7
|
||||
|
|
|
@ -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
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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,7 +132,8 @@ class BaseMigrateToMl2_Icehouse(object):
|
|||
metadata = sa.MetaData()
|
||||
check_db_schema_version(engine, metadata)
|
||||
|
||||
self.define_ml2_tables(metadata)
|
||||
if hasattr(self, 'define_ml2_tables'):
|
||||
self.define_ml2_tables(metadata)
|
||||
|
||||
# Autoload the ports table to ensure that foreign keys to it and
|
||||
# the network table can be created for the new tables.
|
||||
|
@ -144,7 +146,8 @@ class BaseMigrateToMl2_Icehouse(object):
|
|||
self.migrate_vlan_allocations(engine)
|
||||
self.migrate_port_bindings(engine, metadata)
|
||||
|
||||
self.drop_old_tables(engine, save_tables)
|
||||
if hasattr(self, 'drop_old_tables'):
|
||||
self.drop_old_tables(engine, save_tables)
|
||||
|
||||
def migrate_segment_dict(self, binding):
|
||||
binding['id'] = uuidutils.generate_uuid()
|
||||
|
@ -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
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 = {
|
||||
|
|
|
@ -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.
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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.
|
|
@ -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):
|
||||
|
|
|
@ -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'}}
|
||||
|
|
|
@ -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}
|
||||
}
|
||||
}}}}
|
||||
|
||||
|
||||
|
|
|
@ -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}
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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 ""
|
|
@ -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"
|
||||
|
|
|
@ -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 ""
|
|
@ -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 ""
|
|
@ -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"
|
||||
|
|
|
@ -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 ""
|
|
@ -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"
|
|
@ -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 ""
|
|
@ -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"
|
||||
|
|
|
@ -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
|
@ -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 ""
|
|
@ -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"
|
||||
|
|
|
@ -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 ""
|
|
@ -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"
|
|
@ -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 ""
|
|
@ -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"
|
||||
|
|
|
@ -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 ""
|
|
@ -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 ""
|
|
@ -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"
|
||||
|
|
|
@ -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 ""
|
|
@ -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 ""
|
|
@ -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 " このシステムでは、 IPv6が有効ではありません。"
|
||||
|
||||
#: 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"
|
||||
|
|
|
@ -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 ""
|
|
@ -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 ""
|
|
@ -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"
|
||||
|
|
|
@ -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 ""
|
|
@ -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
Loading…
Reference in New Issue