trunk merge

This commit is contained in:
Sandy Walsh
2011-09-09 12:58:29 -07:00
18 changed files with 656 additions and 1520 deletions

View File

@@ -62,6 +62,7 @@ Joshua McKenty <jmckenty@gmail.com>
Justin Santa Barbara <justin@fathomdb.com>
Justin Shepherd <jshepher@rackspace.com>
Kei Masumoto <masumotok@nttdata.co.jp>
Keisuke Tagami <tagami.keisuke@lab.ntt.co.jp>
masumoto<masumotok@nttdata.co.jp>
Ken Pepple <ken.pepple@gmail.com>
Kevin Bringard <kbringard@attinteractive.com>

View File

@@ -110,7 +110,6 @@ class AbstractScheduler(driver.Scheduler):
flavor_id = instance_type['flavorid']
reservation_id = instance_properties['reservation_id']
files = kwargs['injected_files']
ipgroup = None # Not supported in OS API ... yet
child_zone = zone_info['child_zone']
child_blob = zone_info['child_blob']
zone = db.zone_get(context, child_zone)
@@ -124,8 +123,17 @@ class AbstractScheduler(driver.Scheduler):
except novaclient_exceptions.BadRequest, e:
raise exception.NotAuthorized(_("Bad credentials attempting "
"to talk to zone at %(url)s.") % locals())
nova.servers.create(name, image_ref, flavor_id, ipgroup, meta, files,
child_blob, reservation_id=reservation_id)
# NOTE(Vek): Novaclient has two different calling conventions
# for this call, depending on whether you're using
# 1.0 or 1.1 API: in 1.0, there's an ipgroups
# argument after flavor_id which isn't present in
# 1.1. To work around this, all the extra
# arguments are passed as keyword arguments
# (there's a reasonable default for ipgroups in the
# novaclient call).
nova.servers.create(name, image_ref, flavor_id,
meta=meta, files=files, zone_blob=child_blob,
reservation_id=reservation_id)
def _provision_resource_from_blob(self, context, build_plan_item,
instance_id, request_spec, kwargs):
@@ -269,9 +277,6 @@ class AbstractScheduler(driver.Scheduler):
# Filter local hosts based on requirements ...
filtered_hosts = self.filter_hosts(topic, request_spec,
unfiltered_hosts)
if not filtered_hosts:
LOG.warn(_("No hosts available"))
return []
# weigh the selected hosts.
# weighted_hosts = [{weight=weight, hostname=hostname,

View File

@@ -103,23 +103,6 @@ def update_service_capabilities(context, service_name, host, capabilities):
return rpc.fanout_cast(context, 'scheduler', kwargs)
def _wrap_method(function, self):
"""Wrap method to supply self."""
def _wrap(*args, **kwargs):
return function(self, *args, **kwargs)
return _wrap
def _process(func, context, zone):
"""Worker stub for green thread pool. Give the worker
an authenticated nova client and zone info. This call
is done on behalf of the user."""
nova = novaclient.Client(zone.username, zone.password, None,
zone.api_url, token=context.auth_token)
nova.authenticate()
return func(nova, zone)
def call_zone_method(context, method_name, errors_to_ignore=None,
novaclient_collection_name='zones', zones=None,
*args, **kwargs):
@@ -169,9 +152,35 @@ def child_zone_helper(context, zone_list, func):
For example, if you are calling server.pause(), the list will
be whatever the response from server.pause() is. One entry
per child zone called."""
def _wrap_method(function, arg1):
"""Wrap method to supply an argument."""
def _wrap(*args, **kwargs):
return function(arg1, *args, **kwargs)
return _wrap
def _process(func, context, zone):
"""Worker stub for green thread pool. Give the worker
an authenticated nova client and zone info."""
try:
nova = novaclient.Client(zone.username, zone.password, None,
zone.api_url, token=context.auth_token)
nova.authenticate()
except novaclient_exceptions.BadRequest, e:
url = zone.api_url
LOG.warn(_("Failed request to zone; URL=%(url)s: %(e)s")
% locals())
# This is being returned instead of raised, so that when
# results are processed in unmarshal_result() after the
# greenpool.imap completes, the exception can be raised
# there if no other zones had a response.
return exception.ZoneRequestError()
else:
return func(nova, zone)
green_pool = greenpool.GreenPool()
return [result for result in green_pool.imap(
_wrap_method(_process, context, func), zone_list)]
_wrap_method(_process, func, context), zone_list)]
def _issue_novaclient_command(nova, zone, collection,
@@ -263,6 +272,8 @@ class reroute_compute(object):
if not FLAGS.enable_zone_routing:
raise exception.InstanceNotFound(instance_id=item_uuid)
self.item_uuid = item_uuid
zones = db.zone_get_all(context)
if not zones:
raise exception.InstanceNotFound(instance_id=item_uuid)
@@ -345,9 +356,13 @@ class reroute_compute(object):
dict {'server':{k:v}}. Others may return a list of them, like
{'servers':[{k,v}]}"""
reduced_response = []
found_exception = None
for zone_response in zone_responses:
if not zone_response:
continue
if isinstance(zone_response, BaseException):
found_exception = zone_response
continue
server = zone_response.__dict__
@@ -358,7 +373,9 @@ class reroute_compute(object):
reduced_response.append(dict(server=server))
if reduced_response:
return reduced_response[0] # first for now.
return {}
elif found_exception:
raise found_exception
raise exception.InstanceNotFound(instance_id=self.item_uuid)
def redirect_handler(f):

View File

@@ -55,5 +55,17 @@ class BaseScheduler(abstract_scheduler.AbstractScheduler):
scheduling objectives
"""
# NOTE(sirp): The default logic is the same as the NoopCostFunction
return [dict(weight=1, hostname=hostname, capabilities=capabilities)
for hostname, capabilities in hosts]
hosts = [dict(weight=1, hostname=hostname, capabilities=capabilities)
for hostname, capabilities in hosts]
# NOTE(Vek): What we actually need to return is enough hosts
# for all the instances!
num_instances = request_spec.get('num_instances', 1)
instances = []
while num_instances > len(hosts):
instances.extend(hosts)
num_instances -= len(hosts)
if num_instances > 0:
instances.extend(hosts[:num_instances])
return instances

View File

@@ -26,6 +26,7 @@ from nova import test
from nova.compute import api as compute_api
from nova.scheduler import driver
from nova.scheduler import abstract_scheduler
from nova.scheduler import base_scheduler
from nova.scheduler import zone_manager
@@ -65,6 +66,11 @@ class FakeAbstractScheduler(abstract_scheduler.AbstractScheduler):
pass
class FakeBaseScheduler(base_scheduler.BaseScheduler):
# No need to stub anything at the moment
pass
class FakeZoneManager(zone_manager.ZoneManager):
def __init__(self):
self.service_states = {
@@ -365,3 +371,52 @@ class AbstractSchedulerTestCase(test.TestCase):
self.assertEqual(fixture._decrypt_blob(test_data),
json.dumps(test_data))
def test_empty_local_hosts(self):
"""
Create a nested set of FakeZones, try to build multiple instances
and ensure that a select call returns the appropriate build plan.
"""
sched = FakeAbstractScheduler()
self.stubs.Set(sched, '_call_zone_method', fake_call_zone_method)
self.stubs.Set(nova.db, 'zone_get_all', fake_zone_get_all)
zm = FakeZoneManager()
# patch this to have no local hosts
zm.service_states = {}
sched.set_zone_manager(zm)
fake_context = {}
build_plan = sched.select(fake_context,
{'instance_type': {'memory_mb': 512},
'num_instances': 4})
# 0 from local zones, 12 from remotes
self.assertEqual(12, len(build_plan))
class BaseSchedulerTestCase(test.TestCase):
"""Test case for Base Scheduler."""
def test_weigh_hosts(self):
"""
Try to weigh a short list of hosts and make sure enough
entries for a larger number instances are returned.
"""
sched = FakeBaseScheduler()
# Fake out a list of hosts
zm = FakeZoneManager()
hostlist = [(host, services['compute'])
for host, services in zm.service_states.items()
if 'compute' in services]
# Call weigh_hosts()
num_instances = len(hostlist) * 2 + len(hostlist) / 2
instlist = sched.weigh_hosts('compute',
dict(num_instances=num_instances),
hostlist)
# Should be enough entries to cover all instances
self.assertEqual(len(instlist), num_instances)

View File

@@ -486,11 +486,9 @@ class CloudTestCase(test.TestCase):
inst2 = db.instance_create(self.context, args2)
db.instance_destroy(self.context, inst1.id)
result = self.cloud.describe_instances(self.context)
self.assertEqual(len(result['reservationSet']), 1)
result1 = result['reservationSet'][0]['instancesSet']
self.assertEqual(result1[0]['instanceId'],
ec2utils.id_to_ec2_id(inst1.id))
result2 = result['reservationSet'][1]['instancesSet']
self.assertEqual(result2[0]['instanceId'],
ec2utils.id_to_ec2_id(inst2.id))
def _block_device_mapping_create(self, instance_id, mappings):

View File

@@ -37,61 +37,20 @@ from nova.compute import power_state
from nova.compute import vm_states
from nova.virt.libvirt import connection
from nova.virt.libvirt import firewall
from nova.tests import fake_network
libvirt = None
FLAGS = flags.FLAGS
_fake_network_info = fake_network.fake_get_instance_nw_info
_ipv4_like = fake_network.ipv4_like
def _concurrency(wait, done, target):
wait.wait()
done.send()
def _create_network_info(count=1, ipv6=None):
if ipv6 is None:
ipv6 = FLAGS.use_ipv6
fake = 'fake'
fake_ip = '10.11.12.13'
fake_ip_2 = '0.0.0.1'
fake_ip_3 = '0.0.0.1'
fake_vlan = 100
fake_bridge_interface = 'eth0'
network = {'bridge': fake,
'cidr': fake_ip,
'cidr_v6': fake_ip,
'gateway_v6': fake,
'vlan': fake_vlan,
'bridge_interface': fake_bridge_interface}
mapping = {'mac': fake,
'dhcp_server': '10.0.0.1',
'gateway': fake,
'gateway6': fake,
'ips': [{'ip': fake_ip}, {'ip': fake_ip}]}
if ipv6:
mapping['ip6s'] = [{'ip': fake_ip},
{'ip': fake_ip_2},
{'ip': fake_ip_3}]
return [(network, mapping) for x in xrange(0, count)]
def _setup_networking(instance_id, ip='1.2.3.4', mac='56:12:12:12:12:12'):
ctxt = context.get_admin_context()
network_ref = db.project_get_networks(ctxt,
'fake',
associate=True)[0]
vif = {'address': mac,
'network_id': network_ref['id'],
'instance_id': instance_id}
vif_ref = db.virtual_interface_create(ctxt, vif)
fixed_ip = {'address': ip,
'network_id': network_ref['id'],
'virtual_interface_id': vif_ref['id']}
db.fixed_ip_create(ctxt, fixed_ip)
db.fixed_ip_update(ctxt, ip, {'allocated': True,
'instance_id': instance_id})
class CacheConcurrencyTestCase(test.TestCase):
def setUp(self):
super(CacheConcurrencyTestCase, self).setUp()
@@ -163,7 +122,6 @@ class LibvirtConnTestCase(test.TestCase):
self.context = context.get_admin_context()
self.flags(instances_path='')
self.call_libvirt_dependant_setup = False
self.test_ip = '10.11.12.13'
test_instance = {'memory_kb': '1024000',
'basepath': '/some/path',
@@ -277,12 +235,12 @@ class LibvirtConnTestCase(test.TestCase):
instance_ref = db.instance_create(self.context, self.test_instance)
result = conn._prepare_xml_info(instance_ref,
_create_network_info(),
_fake_network_info(self.stubs, 1),
False)
self.assertTrue(len(result['nics']) == 1)
result = conn._prepare_xml_info(instance_ref,
_create_network_info(2),
_fake_network_info(self.stubs, 2),
False)
self.assertTrue(len(result['nics']) == 2)
@@ -407,7 +365,7 @@ class LibvirtConnTestCase(test.TestCase):
def test_multi_nic(self):
instance_data = dict(self.test_instance)
network_info = _create_network_info(2)
network_info = _fake_network_info(self.stubs, 2)
conn = connection.LibvirtConnection(True)
instance_ref = db.instance_create(self.context, instance_data)
xml = conn.to_xml(instance_ref, network_info, False)
@@ -417,15 +375,14 @@ class LibvirtConnTestCase(test.TestCase):
parameters = interfaces[0].findall('./filterref/parameter')
self.assertEquals(interfaces[0].get('type'), 'bridge')
self.assertEquals(parameters[0].get('name'), 'IP')
self.assertEquals(parameters[0].get('value'), '10.11.12.13')
self.assertTrue(_ipv4_like(parameters[0].get('value'), '192.168'))
self.assertEquals(parameters[1].get('name'), 'DHCPSERVER')
self.assertEquals(parameters[1].get('value'), '10.0.0.1')
self.assertTrue(_ipv4_like(parameters[1].get('value'), '192.168.*.1'))
def _check_xml_and_container(self, instance):
user_context = context.RequestContext(self.user_id,
self.project_id)
instance_ref = db.instance_create(user_context, instance)
_setup_networking(instance_ref['id'], self.test_ip)
self.flags(libvirt_type='lxc')
conn = connection.LibvirtConnection(True)
@@ -433,7 +390,7 @@ class LibvirtConnTestCase(test.TestCase):
uri = conn.get_uri()
self.assertEquals(uri, 'lxc:///')
network_info = _create_network_info()
network_info = _fake_network_info(self.stubs, 1)
xml = conn.to_xml(instance_ref, network_info)
tree = xml_to_tree(xml)
@@ -457,8 +414,6 @@ class LibvirtConnTestCase(test.TestCase):
network_ref = db.project_get_networks(context.get_admin_context(),
self.project_id)[0]
_setup_networking(instance_ref['id'], self.test_ip)
type_uri_map = {'qemu': ('qemu:///system',
[(lambda t: t.find('.').get('type'), 'qemu'),
(lambda t: t.find('./os/type').text, 'hvm'),
@@ -504,9 +459,11 @@ class LibvirtConnTestCase(test.TestCase):
common_checks = [
(lambda t: t.find('.').tag, 'domain'),
(lambda t: t.find(parameter).get('name'), 'IP'),
(lambda t: t.find(parameter).get('value'), '10.11.12.13'),
(lambda t: _ipv4_like(t.find(parameter).get('value'), '192.168'),
True),
(lambda t: t.findall(parameter)[1].get('name'), 'DHCPSERVER'),
(lambda t: t.findall(parameter)[1].get('value'), '10.0.0.1'),
(lambda t: _ipv4_like(t.findall(parameter)[1].get('value'),
'192.168.*.1'), True),
(lambda t: t.find('./devices/serial/source').get(
'path').split('/')[1], 'console.log'),
(lambda t: t.find('./memory').text, '2097152')]
@@ -531,7 +488,7 @@ class LibvirtConnTestCase(test.TestCase):
uri = conn.get_uri()
self.assertEquals(uri, expected_uri)
network_info = _create_network_info()
network_info = _fake_network_info(self.stubs, 1)
xml = conn.to_xml(instance_ref, network_info, rescue)
tree = xml_to_tree(xml)
for i, (check, expected_result) in enumerate(checks):
@@ -646,7 +603,7 @@ class LibvirtConnTestCase(test.TestCase):
self.create_fake_libvirt_mock()
instance_ref = db.instance_create(self.context, self.test_instance)
network_info = _create_network_info()
network_info = _fake_network_info(self.stubs, 1)
# Start test
self.mox.ReplayAll()
@@ -830,7 +787,7 @@ class LibvirtConnTestCase(test.TestCase):
conn.firewall_driver.setattr('setup_basic_filtering', fake_none)
conn.firewall_driver.setattr('prepare_instance_filter', fake_none)
network_info = _create_network_info()
network_info = _fake_network_info(self.stubs, 1)
try:
conn.spawn(self.context, instance, network_info)
@@ -923,7 +880,6 @@ class IptablesFirewallTestCase(test.TestCase):
"""setup_basic_rules in nwfilter calls this."""
pass
self.fake_libvirt_connection = FakeLibvirtConnection()
self.test_ip = '10.11.12.13'
self.fw = firewall.IptablesFirewallDriver(
get_connection=lambda: self.fake_libvirt_connection)
@@ -987,10 +943,6 @@ class IptablesFirewallTestCase(test.TestCase):
def test_static_filters(self):
instance_ref = self._create_instance_ref()
src_instance_ref = self._create_instance_ref()
src_ip = '10.11.12.14'
src_mac = '56:12:12:12:12:13'
_setup_networking(instance_ref['id'], self.test_ip, src_mac)
_setup_networking(src_instance_ref['id'], src_ip)
admin_ctxt = context.get_admin_context()
secgroup = db.security_group_create(admin_ctxt,
@@ -1061,10 +1013,17 @@ class IptablesFirewallTestCase(test.TestCase):
return '', ''
print cmd, kwargs
def get_fixed_ips(*args, **kwargs):
ips = []
for network, info in network_info:
ips.extend(info['ips'])
return [ip['ip'] for ip in ips]
from nova.network import linux_net
linux_net.iptables_manager.execute = fake_iptables_execute
network_info = _create_network_info()
network_info = _fake_network_info(self.stubs, 1)
self.stubs.Set(db, 'instance_get_fixed_addresses', get_fixed_ips)
self.fw.prepare_instance_filter(instance_ref, network_info)
self.fw.apply_instance_filter(instance_ref, network_info)
@@ -1078,7 +1037,8 @@ class IptablesFirewallTestCase(test.TestCase):
instance_chain = None
for rule in self.out_rules:
# This is pretty crude, but it'll do for now
if '-d 10.11.12.13 -j' in rule:
# last two octets change
if re.search('-d 192.168.[0-9]{1,3}.[0-9]{1,3} -j', rule):
instance_chain = rule.split(' ')[-1]
break
self.assertTrue(instance_chain, "The instance chain wasn't added")
@@ -1101,10 +1061,11 @@ class IptablesFirewallTestCase(test.TestCase):
self.assertTrue(len(filter(regex.match, self.out_rules)) > 0,
"ICMP Echo Request acceptance rule wasn't added")
regex = re.compile('-A .* -j ACCEPT -p tcp -m multiport '
'--dports 80:81 -s %s' % (src_ip,))
self.assertTrue(len(filter(regex.match, self.out_rules)) > 0,
"TCP port 80/81 acceptance rule wasn't added")
for ip in get_fixed_ips():
regex = re.compile('-A .* -j ACCEPT -p tcp -m multiport '
'--dports 80:81 -s %s' % ip)
self.assertTrue(len(filter(regex.match, self.out_rules)) > 0,
"TCP port 80/81 acceptance rule wasn't added")
regex = re.compile('-A .* -j ACCEPT -p tcp '
'-m multiport --dports 80:81 -s 192.168.10.0/24')
@@ -1114,24 +1075,27 @@ class IptablesFirewallTestCase(test.TestCase):
def test_filters_for_instance_with_ip_v6(self):
self.flags(use_ipv6=True)
network_info = _create_network_info()
network_info = _fake_network_info(self.stubs, 1)
rulesv4, rulesv6 = self.fw._filters_for_instance("fake", network_info)
self.assertEquals(len(rulesv4), 2)
self.assertEquals(len(rulesv6), 3)
self.assertEquals(len(rulesv6), 1)
def test_filters_for_instance_without_ip_v6(self):
self.flags(use_ipv6=False)
network_info = _create_network_info()
network_info = _fake_network_info(self.stubs, 1)
rulesv4, rulesv6 = self.fw._filters_for_instance("fake", network_info)
self.assertEquals(len(rulesv4), 2)
self.assertEquals(len(rulesv6), 0)
def test_multinic_iptables(self):
ipv4_rules_per_network = 2
ipv6_rules_per_network = 3
ipv4_rules_per_addr = 1
ipv4_addr_per_network = 2
ipv6_rules_per_addr = 1
ipv6_addr_per_network = 1
networks_count = 5
instance_ref = self._create_instance_ref()
network_info = _create_network_info(networks_count)
network_info = _fake_network_info(self.stubs, networks_count,
ipv4_addr_per_network)
ipv4_len = len(self.fw.iptables.ipv4['filter'].rules)
ipv6_len = len(self.fw.iptables.ipv6['filter'].rules)
inst_ipv4, inst_ipv6 = self.fw.instance_rules(instance_ref,
@@ -1142,9 +1106,9 @@ class IptablesFirewallTestCase(test.TestCase):
ipv4_network_rules = len(ipv4) - len(inst_ipv4) - ipv4_len
ipv6_network_rules = len(ipv6) - len(inst_ipv6) - ipv6_len
self.assertEquals(ipv4_network_rules,
ipv4_rules_per_network * networks_count)
ipv4_rules_per_addr * ipv4_addr_per_network * networks_count)
self.assertEquals(ipv6_network_rules,
ipv6_rules_per_network * networks_count)
ipv6_rules_per_addr * ipv6_addr_per_network * networks_count)
def test_do_refresh_security_group_rules(self):
instance_ref = self._create_instance_ref()
@@ -1170,8 +1134,7 @@ class IptablesFirewallTestCase(test.TestCase):
fakefilter.nwfilterLookupByName
instance_ref = self._create_instance_ref()
_setup_networking(instance_ref['id'], self.test_ip)
network_info = _create_network_info()
network_info = _fake_network_info(self.stubs, 1)
self.fw.setup_basic_filtering(instance_ref, network_info)
self.fw.prepare_instance_filter(instance_ref, network_info)
self.fw.apply_instance_filter(instance_ref, network_info)
@@ -1186,13 +1149,12 @@ class IptablesFirewallTestCase(test.TestCase):
def test_provider_firewall_rules(self):
# setup basic instance data
instance_ref = self._create_instance_ref()
_setup_networking(instance_ref['id'], self.test_ip)
# FRAGILE: peeks at how the firewall names chains
chain_name = 'inst-%s' % instance_ref['id']
# create a firewall via setup_basic_filtering like libvirt_conn.spawn
# should have a chain with 0 rules
network_info = _create_network_info(1)
network_info = _fake_network_info(self.stubs, 1)
self.fw.setup_basic_filtering(instance_ref, network_info)
self.assertTrue('provider' in self.fw.iptables.ipv4['filter'].chains)
rules = [rule for rule in self.fw.iptables.ipv4['filter'].rules
@@ -1256,7 +1218,6 @@ class NWFilterTestCase(test.TestCase):
self.fake_libvirt_connection = Mock()
self.test_ip = '10.11.12.13'
self.fw = firewall.NWFilterFirewall(
lambda: self.fake_libvirt_connection)
@@ -1372,11 +1333,9 @@ class NWFilterTestCase(test.TestCase):
instance_ref = self._create_instance()
inst_id = instance_ref['id']
_setup_networking(instance_ref['id'], self.test_ip)
def _ensure_all_called():
def _ensure_all_called(mac):
instance_filter = 'nova-instance-%s-%s' % (instance_ref['name'],
'fake')
mac.translate(None, ':'))
secgroup_filter = 'nova-secgroup-%s' % self.security_group['id']
for required in [secgroup_filter, 'allow-dhcp-server',
'no-arp-spoofing', 'no-ip-spoofing',
@@ -1392,17 +1351,22 @@ class NWFilterTestCase(test.TestCase):
self.security_group.id)
instance = db.instance_get(self.context, inst_id)
network_info = _create_network_info()
network_info = _fake_network_info(self.stubs, 1)
# since there is one (network_info) there is one vif
# pass this vif's mac to _ensure_all_called()
# to set the instance_filter properly
mac = network_info[0][1]['mac']
self.fw.setup_basic_filtering(instance, network_info)
self.fw.prepare_instance_filter(instance, network_info)
self.fw.apply_instance_filter(instance, network_info)
_ensure_all_called()
_ensure_all_called(mac)
self.teardown_security_group()
db.instance_destroy(context.get_admin_context(), instance_ref['id'])
def test_create_network_filters(self):
instance_ref = self._create_instance()
network_info = _create_network_info(3)
network_info = _fake_network_info(self.stubs, 3)
result = self.fw._create_network_filters(instance_ref,
network_info,
"fake")
@@ -1425,8 +1389,7 @@ class NWFilterTestCase(test.TestCase):
instance = db.instance_get(self.context, inst_id)
_setup_networking(instance_ref['id'], self.test_ip)
network_info = _create_network_info()
network_info = _fake_network_info(self.stubs, 1)
self.fw.setup_basic_filtering(instance, network_info)
self.fw.prepare_instance_filter(instance, network_info)
self.fw.apply_instance_filter(instance, network_info)

347
nova/tests/test_linux_net.py Executable file
View File

@@ -0,0 +1,347 @@
# vim: tabstop=4 shiftwidth=4 softtabstop=4
# Copyright 2011 NTT
# All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from nova import context
from nova import db
from nova import exception
from nova import flags
from nova import log as logging
from nova import test
from nova import utils
from nova.network import manager as network_manager
from nova.network import linux_net
import mox
FLAGS = flags.FLAGS
LOG = logging.getLogger('nova.tests.network')
HOST = "testhost"
instances = [{'id': 0,
'host': 'fake_instance00',
'hostname': 'fake_instance00'},
{'id': 1,
'host': 'fake_instance01',
'hostname': 'fake_instance01'}]
addresses = [{"address": "10.0.0.1"},
{"address": "10.0.0.2"},
{"address": "10.0.0.3"},
{"address": "10.0.0.4"},
{"address": "10.0.0.5"},
{"address": "10.0.0.6"}]
networks = [{'id': 0,
'uuid': "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
'label': 'test0',
'injected': False,
'multi_host': False,
'cidr': '192.168.0.0/24',
'cidr_v6': '2001:db8::/64',
'gateway_v6': '2001:db8::1',
'netmask_v6': '64',
'netmask': '255.255.255.0',
'bridge': 'fa0',
'bridge_interface': 'fake_fa0',
'gateway': '192.168.0.1',
'broadcast': '192.168.0.255',
'dns1': '192.168.0.1',
'dns2': '192.168.0.2',
'dhcp_server': '0.0.0.0',
'dhcp_start': '192.168.100.1',
'vlan': None,
'host': None,
'project_id': 'fake_project',
'vpn_public_address': '192.168.0.2'},
{'id': 1,
'uuid': "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb",
'label': 'test1',
'injected': False,
'multi_host': False,
'cidr': '192.168.1.0/24',
'cidr_v6': '2001:db9::/64',
'gateway_v6': '2001:db9::1',
'netmask_v6': '64',
'netmask': '255.255.255.0',
'bridge': 'fa1',
'bridge_interface': 'fake_fa1',
'gateway': '192.168.1.1',
'broadcast': '192.168.1.255',
'dns1': '192.168.0.1',
'dns2': '192.168.0.2',
'dhcp_server': '0.0.0.0',
'dhcp_start': '192.168.100.1',
'vlan': None,
'host': None,
'project_id': 'fake_project',
'vpn_public_address': '192.168.1.2'}]
fixed_ips = [{'id': 0,
'network_id': 0,
'address': '192.168.0.100',
'instance_id': 0,
'allocated': True,
'virtual_interface_id': 0,
'virtual_interface': addresses[0],
'instance': instances[0],
'floating_ips': []},
{'id': 1,
'network_id': 1,
'address': '192.168.1.100',
'instance_id': 0,
'allocated': True,
'virtual_interface_id': 1,
'virtual_interface': addresses[1],
'instance': instances[0],
'floating_ips': []},
{'id': 2,
'network_id': 1,
'address': '192.168.0.101',
'instance_id': 1,
'allocated': True,
'virtual_interface_id': 2,
'virtual_interface': addresses[2],
'instance': instances[1],
'floating_ips': []},
{'id': 3,
'network_id': 0,
'address': '192.168.1.101',
'instance_id': 1,
'allocated': True,
'virtual_interface_id': 3,
'virtual_interface': addresses[3],
'instance': instances[1],
'floating_ips': []},
{'id': 4,
'network_id': 0,
'address': '192.168.0.102',
'instance_id': 0,
'allocated': True,
'virtual_interface_id': 4,
'virtual_interface': addresses[4],
'instance': instances[0],
'floating_ips': []},
{'id': 5,
'network_id': 1,
'address': '192.168.1.102',
'instance_id': 1,
'allocated': True,
'virtual_interface_id': 5,
'virtual_interface': addresses[5],
'instance': instances[1],
'floating_ips': []}]
vifs = [{'id': 0,
'address': 'DE:AD:BE:EF:00:00',
'uuid': '00000000-0000-0000-0000-0000000000000000',
'network_id': 0,
'network': networks[0],
'instance_id': 0},
{'id': 1,
'address': 'DE:AD:BE:EF:00:01',
'uuid': '00000000-0000-0000-0000-0000000000000001',
'network_id': 1,
'network': networks[1],
'instance_id': 0},
{'id': 2,
'address': 'DE:AD:BE:EF:00:02',
'uuid': '00000000-0000-0000-0000-0000000000000002',
'network_id': 1,
'network': networks[1],
'instance_id': 1},
{'id': 3,
'address': 'DE:AD:BE:EF:00:03',
'uuid': '00000000-0000-0000-0000-0000000000000003',
'network_id': 0,
'network': networks[0],
'instance_id': 1},
{'id': 4,
'address': 'DE:AD:BE:EF:00:04',
'uuid': '00000000-0000-0000-0000-0000000000000004',
'network_id': 0,
'network': networks[0],
'instance_id': 0},
{'id': 5,
'address': 'DE:AD:BE:EF:00:05',
'uuid': '00000000-0000-0000-0000-0000000000000005',
'network_id': 1,
'network': networks[1],
'instance_id': 1}]
class LinuxNetworkTestCase(test.TestCase):
def setUp(self):
super(LinuxNetworkTestCase, self).setUp()
network_driver = FLAGS.network_driver
self.driver = utils.import_object(network_driver)
self.driver.db = db
def test_update_dhcp_for_nw00(self):
self.flags(use_single_default_gateway=True)
self.mox.StubOutWithMock(db, 'network_get_associated_fixed_ips')
self.mox.StubOutWithMock(db, 'virtual_interface_get_by_instance')
db.network_get_associated_fixed_ips(mox.IgnoreArg(),
mox.IgnoreArg())\
.AndReturn([fixed_ips[0],
fixed_ips[3]])
db.network_get_associated_fixed_ips(mox.IgnoreArg(),
mox.IgnoreArg())\
.AndReturn([fixed_ips[0],
fixed_ips[3]])
db.virtual_interface_get_by_instance(mox.IgnoreArg(),
mox.IgnoreArg())\
.AndReturn([vifs[0], vifs[1]])
db.virtual_interface_get_by_instance(mox.IgnoreArg(),
mox.IgnoreArg())\
.AndReturn([vifs[2], vifs[3]])
self.mox.ReplayAll()
self.driver.update_dhcp(None, "eth0", networks[0])
def test_update_dhcp_for_nw01(self):
self.flags(use_single_default_gateway=True)
self.mox.StubOutWithMock(db, 'network_get_associated_fixed_ips')
self.mox.StubOutWithMock(db, 'virtual_interface_get_by_instance')
db.network_get_associated_fixed_ips(mox.IgnoreArg(),
mox.IgnoreArg())\
.AndReturn([fixed_ips[1],
fixed_ips[2]])
db.network_get_associated_fixed_ips(mox.IgnoreArg(),
mox.IgnoreArg())\
.AndReturn([fixed_ips[1],
fixed_ips[2]])
db.virtual_interface_get_by_instance(mox.IgnoreArg(),
mox.IgnoreArg())\
.AndReturn([vifs[0], vifs[1]])
db.virtual_interface_get_by_instance(mox.IgnoreArg(),
mox.IgnoreArg())\
.AndReturn([vifs[2], vifs[3]])
self.mox.ReplayAll()
self.driver.update_dhcp(None, "eth0", networks[0])
def test_get_dhcp_hosts_for_nw00(self):
self.flags(use_single_default_gateway=True)
self.mox.StubOutWithMock(db, 'network_get_associated_fixed_ips')
db.network_get_associated_fixed_ips(mox.IgnoreArg(),
mox.IgnoreArg())\
.AndReturn([fixed_ips[0],
fixed_ips[3]])
self.mox.ReplayAll()
expected = \
"10.0.0.1,fake_instance00.novalocal,"\
"192.168.0.100,net:NW-i00000000-0\n"\
"10.0.0.4,fake_instance01.novalocal,"\
"192.168.1.101,net:NW-i00000001-0"
actual_hosts = self.driver.get_dhcp_hosts(None, networks[1])
self.assertEquals(actual_hosts, expected)
def test_get_dhcp_hosts_for_nw01(self):
self.flags(use_single_default_gateway=True)
self.mox.StubOutWithMock(db, 'network_get_associated_fixed_ips')
db.network_get_associated_fixed_ips(mox.IgnoreArg(),
mox.IgnoreArg())\
.AndReturn([fixed_ips[1],
fixed_ips[2]])
self.mox.ReplayAll()
expected = \
"10.0.0.2,fake_instance00.novalocal,"\
"192.168.1.100,net:NW-i00000000-1\n"\
"10.0.0.3,fake_instance01.novalocal,"\
"192.168.0.101,net:NW-i00000001-1"
actual_hosts = self.driver.get_dhcp_hosts(None, networks[0])
self.assertEquals(actual_hosts, expected)
def test_get_dhcp_opts_for_nw00(self):
self.mox.StubOutWithMock(db, 'network_get_associated_fixed_ips')
self.mox.StubOutWithMock(db, 'virtual_interface_get_by_instance')
db.network_get_associated_fixed_ips(mox.IgnoreArg(),
mox.IgnoreArg())\
.AndReturn([fixed_ips[0],
fixed_ips[3],
fixed_ips[4]])
db.virtual_interface_get_by_instance(mox.IgnoreArg(),
mox.IgnoreArg())\
.AndReturn([vifs[0],
vifs[1],
vifs[4]])
db.virtual_interface_get_by_instance(mox.IgnoreArg(),
mox.IgnoreArg())\
.AndReturn([vifs[2],
vifs[3],
vifs[5]])
self.mox.ReplayAll()
expected_opts = 'NW-i00000001-0,3'
actual_opts = self.driver.get_dhcp_opts(None, networks[0])
self.assertEquals(actual_opts, expected_opts)
def test_get_dhcp_opts_for_nw01(self):
self.mox.StubOutWithMock(db, 'network_get_associated_fixed_ips')
self.mox.StubOutWithMock(db, 'virtual_interface_get_by_instance')
db.network_get_associated_fixed_ips(mox.IgnoreArg(),
mox.IgnoreArg())\
.AndReturn([fixed_ips[1],
fixed_ips[2],
fixed_ips[5]])
db.virtual_interface_get_by_instance(mox.IgnoreArg(),
mox.IgnoreArg())\
.AndReturn([vifs[0],
vifs[1],
vifs[4]])
db.virtual_interface_get_by_instance(mox.IgnoreArg(),
mox.IgnoreArg())\
.AndReturn([vifs[2],
vifs[3],
vifs[5]])
self.mox.ReplayAll()
expected_opts = "NW-i00000000-1,3"
actual_opts = self.driver.get_dhcp_opts(None, networks[1])
self.assertEquals(actual_opts, expected_opts)
def test_dhcp_opts_not_default_gateway_network(self):
expected = "NW-i00000000-0,3"
actual = self.driver._host_dhcp_opts(fixed_ips[0])
self.assertEquals(actual, expected)
def test_host_dhcp_without_default_gateway_network(self):
expected = ("10.0.0.1,fake_instance00.novalocal,192.168.0.100")
actual = self.driver._host_dhcp(fixed_ips[0])
self.assertEquals(actual, expected)

View File

@@ -14,6 +14,7 @@
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
import mox
from nova import context
from nova import db
@@ -21,9 +22,7 @@ from nova import exception
from nova import log as logging
from nova import test
from nova.network import manager as network_manager
import mox
from nova.tests import fake_network
LOG = logging.getLogger('nova.tests.network')
@@ -58,7 +57,7 @@ networks = [{'id': 0,
'dns1': '192.168.0.1',
'dns2': '192.168.0.2',
'vlan': None,
'host': None,
'host': HOST,
'project_id': 'fake_project',
'vpn_public_address': '192.168.0.2'},
{'id': 1,
@@ -78,7 +77,7 @@ networks = [{'id': 0,
'dns1': '192.168.0.1',
'dns2': '192.168.0.2',
'vlan': None,
'host': None,
'host': HOST,
'project_id': 'fake_project',
'vpn_public_address': '192.168.1.2'}]
@@ -138,60 +137,50 @@ class FlatNetworkTestCase(test.TestCase):
is_admin=False)
def test_get_instance_nw_info(self):
self.mox.StubOutWithMock(db, 'fixed_ip_get_by_instance')
self.mox.StubOutWithMock(db, 'virtual_interface_get_by_instance')
self.mox.StubOutWithMock(db, 'instance_type_get')
fake_get_instance_nw_info = fake_network.fake_get_instance_nw_info
db.fixed_ip_get_by_instance(mox.IgnoreArg(),
mox.IgnoreArg()).AndReturn(fixed_ips)
db.virtual_interface_get_by_instance(mox.IgnoreArg(),
mox.IgnoreArg()).AndReturn(vifs)
db.instance_type_get(mox.IgnoreArg(),
mox.IgnoreArg()).AndReturn(flavor)
self.mox.ReplayAll()
nw_info = fake_get_instance_nw_info(self.stubs, 0, 2)
self.assertFalse(nw_info)
nw_info = self.network.get_instance_nw_info(None, 0, 0, None)
self.assertTrue(nw_info)
for i, nw in enumerate(nw_info):
i8 = i + 8
check = {'bridge': 'fa%s' % i,
for i, (nw, info) in enumerate(nw_info):
check = {'bridge': 'fake_br%d' % i,
'cidr': '192.168.%s.0/24' % i,
'cidr_v6': '2001:db%s::/64' % i8,
'cidr_v6': '2001:db8:0:%x::/64' % i,
'id': i,
'multi_host': False,
'injected': 'DONTCARE',
'bridge_interface': 'fake_fa%s' % i,
'injected': False,
'bridge_interface': 'fake_eth%d' % i,
'vlan': None}
self.assertDictMatch(nw[0], check)
self.assertDictMatch(nw, check)
check = {'broadcast': '192.168.%s.255' % i,
'dhcp_server': '192.168.%s.1' % i,
'dns': 'DONTCARE',
'gateway': '192.168.%s.1' % i,
'gateway6': '2001:db%s::1' % i8,
check = {'broadcast': '192.168.%d.255' % i,
'dhcp_server': '192.168.%d.1' % i,
'dns': ['192.168.%d.3' % n, '192.168.%d.4' % n],
'gateway': '192.168.%d.1' % i,
'gateway6': '2001:db8:0:%x::1' % i,
'ip6s': 'DONTCARE',
'ips': 'DONTCARE',
'label': 'test%s' % i,
'mac': 'DE:AD:BE:EF:00:0%s' % i,
'vif_uuid': ('00000000-0000-0000-0000-000000000000000%s' %
i),
'rxtx_cap': 'DONTCARE',
'label': 'test%d' % i,
'mac': 'DE:AD:BE:EF:00:%02x' % i,
'vif_uuid':
'00000000-0000-0000-0000-00000000000000%02d' % i,
'rxtx_cap': 3,
'should_create_vlan': False,
'should_create_bridge': False}
self.assertDictMatch(nw[1], check)
self.assertDictMatch(info, check)
check = [{'enabled': 'DONTCARE',
'ip': '2001:db%s::dcad:beff:feef:%s' % (i8, i),
'ip': '2001:db8::dcad:beff:feef:%s' % i,
'netmask': '64'}]
self.assertDictListMatch(nw[1]['ip6s'], check)
self.assertDictListMatch(info['ip6s'], check)
check = [{'enabled': '1',
'ip': '192.168.%s.100' % i,
'netmask': '255.255.255.0'}]
self.assertDictListMatch(nw[1]['ips'], check)
num_fixed_ips = len(info['ips'])
check = [{'enabled': 'DONTCARE',
'ip': '192.168.%d.1%02d' % (i, ip_num),
'netmask': '255.255.255.0'}
for ip_num in xrange(num_fixed_ips)]
self.assertDictListMatch(info['ips'], check)
def test_validate_networks(self):
self.mox.StubOutWithMock(db, 'network_get_all_by_uuids')
@@ -252,6 +241,34 @@ class FlatNetworkTestCase(test.TestCase):
self.network.validate_networks(None, requested_networks)
def test_add_fixed_ip_instance_without_vpn_requested_networks(self):
self.mox.StubOutWithMock(db, 'network_get')
self.mox.StubOutWithMock(db, 'network_update')
self.mox.StubOutWithMock(db, 'fixed_ip_associate_pool')
self.mox.StubOutWithMock(db, 'instance_get')
self.mox.StubOutWithMock(db,
'virtual_interface_get_by_instance_and_network')
self.mox.StubOutWithMock(db, 'fixed_ip_update')
db.fixed_ip_update(mox.IgnoreArg(),
mox.IgnoreArg(),
mox.IgnoreArg())
db.virtual_interface_get_by_instance_and_network(mox.IgnoreArg(),
mox.IgnoreArg(), mox.IgnoreArg()).AndReturn({'id': 0})
db.instance_get(mox.IgnoreArg(),
mox.IgnoreArg()).AndReturn({'security_groups':
[{'id': 0}]})
db.fixed_ip_associate_pool(mox.IgnoreArg(),
mox.IgnoreArg(),
mox.IgnoreArg()).AndReturn('192.168.0.101')
db.network_get(mox.IgnoreArg(),
mox.IgnoreArg()).AndReturn(networks[0])
db.network_update(mox.IgnoreArg(), mox.IgnoreArg(), mox.IgnoreArg())
self.mox.ReplayAll()
self.network.add_fixed_ip_to_instance(self.context, 1, HOST,
networks[0]['id'])
class VlanNetworkTestCase(test.TestCase):
def setUp(self):
@@ -392,6 +409,32 @@ class VlanNetworkTestCase(test.TestCase):
mox.IgnoreArg(),
mox.IgnoreArg())
def test_add_fixed_ip_instance_without_vpn_requested_networks(self):
self.mox.StubOutWithMock(db, 'network_get')
self.mox.StubOutWithMock(db, 'fixed_ip_associate_pool')
self.mox.StubOutWithMock(db, 'instance_get')
self.mox.StubOutWithMock(db,
'virtual_interface_get_by_instance_and_network')
self.mox.StubOutWithMock(db, 'fixed_ip_update')
db.fixed_ip_update(mox.IgnoreArg(),
mox.IgnoreArg(),
mox.IgnoreArg())
db.virtual_interface_get_by_instance_and_network(mox.IgnoreArg(),
mox.IgnoreArg(), mox.IgnoreArg()).AndReturn({'id': 0})
db.instance_get(mox.IgnoreArg(),
mox.IgnoreArg()).AndReturn({'security_groups':
[{'id': 0}]})
db.fixed_ip_associate_pool(mox.IgnoreArg(),
mox.IgnoreArg(),
mox.IgnoreArg()).AndReturn('192.168.0.101')
db.network_get(mox.IgnoreArg(),
mox.IgnoreArg()).AndReturn(networks[0])
self.mox.ReplayAll()
self.network.add_fixed_ip_to_instance(self.context, 1, HOST,
networks[0]['id'])
class CommonNetworkTestCase(test.TestCase):

View File

@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: nova\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-02-21 10:03-0500\n"
"PO-Revision-Date: 2011-02-07 12:45+0000\n"
"Last-Translator: David Pravec <Unknown>\n"
"PO-Revision-Date: 2011-08-23 11:22+0000\n"
"Last-Translator: Thierry Carrez <thierry.carrez+lp@gmail.com>\n"
"Language-Team: Czech <cs@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-08-03 04:43+0000\n"
"X-Generator: Launchpad (build 13573)\n"
"X-Launchpad-Export-Date: 2011-08-24 04:47+0000\n"
"X-Generator: Launchpad (build 13697)\n"
#: ../nova/scheduler/chance.py:37 ../nova/scheduler/zone.py:55
#: ../nova/scheduler/simple.py:75 ../nova/scheduler/simple.py:110
@@ -2789,21 +2789,3 @@ msgstr ""
#, python-format
msgid "Removing user %(user)s from project %(project)s"
msgstr ""
#, python-format
#~ msgid "AMQP server on %s:%d is unreachable. Trying again in %d seconds."
#~ msgstr "AMQP server na %s:%d není dosažitelný. Zkusím znovu za %d sekund."
#, python-format
#~ msgid ""
#~ "%s\n"
#~ "Command: %s\n"
#~ "Exit code: %s\n"
#~ "Stdout: %r\n"
#~ "Stderr: %r"
#~ msgstr ""
#~ "%s\n"
#~ "Příkaz: %s\n"
#~ "Vrácená hodnota: %s\n"
#~ "Stdout: %r\n"
#~ "Stderr: %r"

View File

@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: nova\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-02-21 10:03-0500\n"
"PO-Revision-Date: 2011-06-06 07:58+0000\n"
"Last-Translator: Christian Berendt <Unknown>\n"
"PO-Revision-Date: 2011-08-23 11:23+0000\n"
"Last-Translator: Thierry Carrez <thierry.carrez+lp@gmail.com>\n"
"Language-Team: German <de@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-08-03 04:44+0000\n"
"X-Generator: Launchpad (build 13573)\n"
"X-Launchpad-Export-Date: 2011-08-24 04:47+0000\n"
"X-Generator: Launchpad (build 13697)\n"
#: ../nova/scheduler/chance.py:37 ../nova/scheduler/zone.py:55
#: ../nova/scheduler/simple.py:75 ../nova/scheduler/simple.py:110
@@ -2798,42 +2798,6 @@ msgstr ""
msgid "Removing user %(user)s from project %(project)s"
msgstr ""
#, python-format
#~ msgid ""
#~ "%s\n"
#~ "Command: %s\n"
#~ "Exit code: %s\n"
#~ "Stdout: %r\n"
#~ "Stderr: %r"
#~ msgstr ""
#~ "%s\n"
#~ "Kommando: %s\n"
#~ "Exit Code: %s\n"
#~ "Stdout: %r\n"
#~ "Stderr: %r"
#, python-format
#~ msgid "(%s) publish (key: %s) %s"
#~ msgstr "(%s) öffentlich (Schlüssel: %s) %s"
#, python-format
#~ msgid "Getting from %s: %s"
#~ msgstr "Beziehe von %s: %s"
#, python-format
#~ msgid "AMQP server on %s:%d is unreachable. Trying again in %d seconds."
#~ msgstr ""
#~ "Der AMQP server %s:%d ist nicht erreichbar. Erneuter Versuch in %d Sekunden."
#, python-format
#~ msgid "volume %s: creating lv of size %sG"
#~ msgstr "Volume %s: erstelle LV mit %sG"
#, python-format
#~ msgid "Data store %s is unreachable. Trying again in %d seconds."
#~ msgstr ""
#~ "Datastore %s ist nicht erreichbar. Versuche es erneut in %d Sekunden."
#~ msgid "Full set of FLAGS:"
#~ msgstr "Alle vorhandenen FLAGS:"

484
po/es.po
View File

@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: nova\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-02-21 10:03-0500\n"
"PO-Revision-Date: 2011-08-01 03:23+0000\n"
"Last-Translator: Juan Alfredo Salas Santillana <Unknown>\n"
"PO-Revision-Date: 2011-08-23 11:22+0000\n"
"Last-Translator: Thierry Carrez <thierry.carrez+lp@gmail.com>\n"
"Language-Team: Spanish <es@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-08-03 04:44+0000\n"
"X-Generator: Launchpad (build 13573)\n"
"X-Launchpad-Export-Date: 2011-08-24 04:47+0000\n"
"X-Generator: Launchpad (build 13697)\n"
#: ../nova/scheduler/chance.py:37 ../nova/scheduler/zone.py:55
#: ../nova/scheduler/simple.py:75 ../nova/scheduler/simple.py:110
@@ -2838,221 +2838,16 @@ msgstr "Agregando usuario %(user)s al proyecto %(project)s"
msgid "Removing user %(user)s from project %(project)s"
msgstr "Eliminando el usuario %(user)s del proyecto %(project)s"
#, python-format
#~ msgid ""
#~ "%s\n"
#~ "Command: %s\n"
#~ "Exit code: %s\n"
#~ "Stdout: %r\n"
#~ "Stderr: %r"
#~ msgstr ""
#~ "%s\n"
#~ "Comando: %s\n"
#~ "Código de salida: %s\n"
#~ "Stdout: %s\n"
#~ "Stderr: %r"
#, python-format
#~ msgid "(%s) publish (key: %s) %s"
#~ msgstr "(%s) públicar (clave: %s) %s"
#, python-format
#~ msgid "AMQP server on %s:%d is unreachable. Trying again in %d seconds."
#~ msgstr ""
#~ "El servidor AMQP en %s:%d no se puede alcanzar. Se reintentará en %d "
#~ "segundos."
#, python-format
#~ msgid "Binding %s to %s with key %s"
#~ msgstr "Asociando %s a %s con clave %s"
#, python-format
#~ msgid "Getting from %s: %s"
#~ msgstr "Obteniendo desde %s: %s"
#, python-format
#~ msgid "Starting %s node"
#~ msgstr "Inciando nodo %s"
#, python-format
#~ msgid "Data store %s is unreachable. Trying again in %d seconds."
#~ msgstr ""
#~ "El almacen de datos %s es inalcanzable. Reintentandolo en %d segundos."
#, python-format
#~ msgid "Serving %s"
#~ msgstr "Sirviendo %s"
#, python-format
#~ msgid "Couldn't get IP, using 127.0.0.1 %s"
#~ msgstr "No puedo obtener IP, usando 127.0.0.1 %s"
#, python-format
#~ msgid ""
#~ "Access key %s has had %d failed authentications and will be locked out for "
#~ "%d minutes."
#~ msgstr ""
#~ "La clave de acceso %s ha tenido %d fallos de autenticación y se bloqueará "
#~ "por %d minutos."
#, python-format
#~ msgid "arg: %s\t\tval: %s"
#~ msgstr "arg: %s \t \t val: %s"
#, python-format
#~ msgid "Authenticated Request For %s:%s)"
#~ msgstr "Solicitud de autenticación para %s:%s"
#, python-format
#~ msgid "Adding role %s to user %s for project %s"
#~ msgstr "Añadiendo rol %s al usuario %s para el proyecto %s"
#, python-format
#~ msgid "Removing role %s from user %s for project %s"
#~ msgstr "Eliminando rol %s del usuario %s para el proyecto %s"
#, python-format
#~ msgid "Unauthorized request for controller=%s and action=%s"
#~ msgstr "Solicitud no autorizada para controller=%s y action=%s"
#, python-format
#~ msgid "Getting x509 for user: %s on project: %s"
#~ msgstr "Obteniendo x509 para el usuario: %s en el proyecto %s"
#, python-format
#~ msgid "Create project %s managed by %s"
#~ msgstr "Creación del proyecto %s gestionada por %s"
#, python-format
#~ msgid "Removing user %s from project %s"
#~ msgstr "Eliminando usuario %s del proyecto %s"
#, python-format
#~ msgid "Adding user %s to project %s"
#~ msgstr "Añadiendo usuario %s al proyecto %s"
#, python-format
#~ msgid "Unsupported API request: controller = %s,action = %s"
#~ msgstr "Solicitud de API no soportada: controller=%s,action=%s"
#, python-format
#~ msgid "Associate address %s to instance %s"
#~ msgstr "Asociar dirección %s a la instancia %s"
#, python-format
#~ msgid "Attach volume %s to instacne %s at %s"
#~ msgstr "Asociar volumen %s a la instancia %s en %s"
#, python-format
#~ msgid "Registered image %s with id %s"
#~ msgstr "Registrada imagen %s con id %s"
#, python-format
#~ msgid "User %s is already a member of the group %s"
#~ msgstr "El usuario %s ya es miembro de el grupo %s"
#, python-format
#~ msgid "User %s is not a member of project %s"
#~ msgstr "El usuario %s no es miembro del proyecto %s"
#, python-format
#~ msgid "failed authorization: no project named %s (user=%s)"
#~ msgstr ""
#~ "fallo de autorización: no existe proyecto con el nombre %s (usuario=%s)"
#, python-format
#~ msgid "Failed authorization: user %s not admin and not member of project %s"
#~ msgstr ""
#~ "Fallo de autorización: el usuario %s no es administrador y no es miembro del "
#~ "proyecto %s"
#, python-format
#~ msgid "Created user %s (admin: %r)"
#~ msgstr "Creado usuario %s (administrador: %r)"
#, python-format
#~ msgid "Created project %s with manager %s"
#~ msgstr "Proyecto %s creado con administrador %s"
#, python-format
#~ msgid "Removing role %s from user %s on project %s"
#~ msgstr "Eliminando rol %s al usuario %s en el proyecto %s"
#, python-format
#~ msgid "Adding role %s to user %s in project %s"
#~ msgstr "Añadiendo rol %s al usuario %s en el proyecto %s"
#, python-format
#~ msgid "Remove user %s from project %s"
#~ msgstr "Eliminar usuario %s del proyecto %s"
#, python-format
#~ msgid "Admin status set to %r for user %s"
#~ msgstr "El estado del administrador se ha fijado a %r para el usuario %s"
#, python-format
#~ msgid "Going to try and terminate %s"
#~ msgstr "Se va a probar y terminar %s"
#, python-format
#~ msgid "Casting to scheduler for %s/%s's instance %s"
#~ msgstr "Llamando al planificar para %s/%s insntancia %s"
#, python-format
#~ msgid "Quota exceeeded for %s, tried to run %s instances"
#~ msgstr "Quota superada por %s, intentando lanzar %s instancias"
#, python-format
#~ msgid "check_instance_lock: arguments: |%s| |%s| |%s|"
#~ msgstr "check_instance_lock: arguments: |%s| |%s| |%s|"
#, python-format
#~ msgid "Input partition size not evenly divisible by sector size: %d / %d"
#~ msgstr ""
#~ "El tamaño de la partición de entrada no es divisible de forma uniforme por "
#~ "el tamaño del sector: %d / %d"
#, python-format
#~ msgid "Bytes for local storage not evenly divisible by sector size: %d / %d"
#~ msgstr ""
#~ "Los bytes del almacenamiento local no son divisibles de forma uniforme por "
#~ "el tamaño del sector: %d / %d"
#, python-format
#~ msgid "volume %s: creating lv of size %sG"
#~ msgstr "volumen %s: creando lv de tamaño %sG"
#, python-format
#~ msgid "Disassociating address %s"
#~ msgstr "Desasociando la dirección %s"
#, python-format
#~ msgid "trying to reboot a non-running instance: %s (state: %s excepted: %s)"
#~ msgstr ""
#~ "intentando reiniciar una instancia que no está en ejecución: %s (estado: %s "
#~ "esperado: %s)"
#, python-format
#~ msgid ""
#~ "trying to snapshot a non-running instance: %s (state: %s excepted: %s)"
#~ msgstr ""
#~ "intentando crear un snapshot de una instancia que no está en ejecución: %s "
#~ "(estado: %s esperado: %s)"
#, python-format
#~ msgid "Detach volume %s from mountpoint %s on instance %s"
#~ msgstr "Desvinculando volumen %s del punto de montaje %s en la instancia %s"
#~ msgid "unexpected exception getting connection"
#~ msgstr "excepción inexperada al obtener la conexión"
#~ msgid "unexpected error during update"
#~ msgstr "error inesperado durante la actualización"
#, python-format
#~ msgid "Cannot get blockstats for \"%s\" on \"%s\""
#~ msgstr "No puedo obtener estadísticas del bloque para \"%s\" en \"%s\""
#, python-format
#~ msgid "updating %s..."
#~ msgstr "actualizando %s..."
@@ -3061,285 +2856,14 @@ msgstr "Eliminando el usuario %(user)s del proyecto %(project)s"
#~ msgid "Found instance: %s"
#~ msgstr "Encontrada interfaz: %s"
#, python-format
#~ msgid "Cannot get ifstats for \"%s\" on \"%s\""
#~ msgstr "No puedo obtener estadísticas de la interfaz para \"%s\" en \"%s\""
#, python-format
#~ msgid "No instance for id %s"
#~ msgstr "No hay instancia con id %s"
#, python-format
#~ msgid "no keypair for user %s, name %s"
#~ msgstr "no hay par de claves para el usuario %s, nombre %s"
#, python-format
#~ msgid "No service for %s, %s"
#~ msgstr "No hay servicio para %s, %s"
#, python-format
#~ msgid "No volume for id %s"
#~ msgstr "No hay volumen para el id %s"
#, python-format
#~ msgid "No security group named %s for project: %s"
#~ msgstr "No hay un grupo de seguridad con nombre %s para el proyecto: %s"
#, python-format
#~ msgid "Parallax returned HTTP error %d from request for /images/detail"
#~ msgstr ""
#~ "Parallax ha devuelto un error HTTP %d para la petición para /images/detail"
#, python-format
#~ msgid "Parallax returned HTTP error %d from request for /images"
#~ msgstr "Parallax ha devuelto un error HTTP %d a la petición para /images"
#, python-format
#~ msgid "IP %s leased to bad mac %s vs %s"
#~ msgstr "IP %s asociada a una mac incorrecta %s vs %s"
#, python-format
#~ msgid "Unauthorized attempt to get object %s from bucket %s"
#~ msgstr "Intento no autorizado de obtener el objeto %s en el cubo %s"
#, python-format
#~ msgid "Getting object: %s / %s"
#~ msgstr "Obteniendo objeto: %s / %s"
#, python-format
#~ msgid "Putting object: %s / %s"
#~ msgstr "Colocando objeto: %s / %s"
#, python-format
#~ msgid "Unauthorized attempt to upload object %s to bucket %s"
#~ msgstr "Intento no autorizado de subir el objeto %s al cubo %s"
#, python-format
#~ msgid "Deleting object: %s / %s"
#~ msgstr "Eliminando objeto: %s / %s"
#, python-format
#~ msgid "Toggling publicity flag of image %s %r"
#~ msgstr "Cambiando los atributos de publicidad de la imagen %s %r"
#, python-format
#~ msgid "Creating disk for %s by attaching disk file %s"
#~ msgstr ""
#~ "Creando disco para %s a través de la asignación del fichero de disco %s"
#, python-format
#~ msgid "WMI job succeeded: %s, Elapsed=%s "
#~ msgstr "Trabajo WMI ha tenido exito: %s, Transcurrido=%s "
#, python-format
#~ msgid "Created switch port %s on switch %s"
#~ msgstr "Creado puerto %s en el switch %s"
#, python-format
#~ msgid "instance %s: deleting instance files %s"
#~ msgstr "instancia %s: eliminando los ficheros de la instancia %s"
#, python-format
#~ msgid "Finished retreving %s -- placed in %s"
#~ msgstr "Finalizada la obtención de %s -- coloado en %s"
#, python-format
#~ msgid "Failed to change vm state of %s to %s"
#~ msgstr "Fallo al cambiar el estado de la vm de %s a %s"
#, python-format
#~ msgid "Successfully changed vm state of %s to %s"
#~ msgstr "Cambio de estado de la vm con éxito de %s a %s"
#, python-format
#~ msgid ""
#~ "Got Info for vm %s: state=%s, mem=%s, num_cpu=%s, "
#~ "cpu_time=%s"
#~ msgstr ""
#~ "Obtenida información para vm %s: state=%s, mem=%s, num_cpu=%s, cpu_time=%s"
#, python-format
#~ msgid "instance %s: ignoring error injecting data into image %s (%s)"
#~ msgstr ""
#~ "instancia %s: ignorando el error al inyectar datos en la imagen %s (%s)"
#, python-format
#~ msgid "Contents of file %s: %r"
#~ msgstr "Contenidos del fichero %s: %r"
#, python-format
#~ msgid "instance %s: injecting net into image %s"
#~ msgstr "instancia %s: inyectando red en la imagen %s"
#, python-format
#~ msgid "instance %s: injecting key into image %s"
#~ msgstr "instancia %s: inyectando clave en la imagen %s"
#, python-format
#~ msgid "data: %r, fpath: %r"
#~ msgstr "datos: %r, fpath: %r"
#, python-format
#~ msgid "Task [%s] %s status: %s %s"
#~ msgstr "Tarea [%s] %s estado: %s %s"
#, python-format
#~ msgid "Task [%s] %s status: success %s"
#~ msgstr "Tarea [%s] %s estado: éxito %s"
#, python-format
#~ msgid "Calling %s %s"
#~ msgstr "Llamando %s %s"
#, python-format
#~ msgid "%s: _db_content => %s"
#~ msgstr "%s: _db_content => %s"
#, python-format
#~ msgid "Created VBD %s for VM %s, VDI %s."
#~ msgstr "Creado VBD %s for VM %s, VDI %s."
#, python-format
#~ msgid "Creating VBD for VM %s, VDI %s ... "
#~ msgstr "Creando VBD para VM %s, VDI %s... "
#, python-format
#~ msgid "Created VIF %s for VM %s, network %s."
#~ msgstr "Creado VIF %s para VM %s, red %s."
#, python-format
#~ msgid "Creating VIF for VM %s, network %s."
#~ msgstr "Creando VIF para VM %s, red %s."
#, python-format
#~ msgid "Created VM %s as %s."
#~ msgstr "Creada VM %s cómo %s"
#, python-format
#~ msgid "Asking xapi to upload %s as '%s'"
#~ msgstr "Solicitando a xapi la subida de %s cómo %s'"
#, python-format
#~ msgid "VHD %s has parent %s"
#~ msgstr "VHD %s tiene cómo padre a %s"
#, python-format
#~ msgid "Asking xapi to fetch %s as %s"
#~ msgstr "Solicitando a xapi obtener %s cómo %s"
#, python-format
#~ msgid "PV Kernel in VDI:%d"
#~ msgstr "PV Kernel en VDI:%d"
#, python-format
#~ msgid "Unexpected number of VDIs (%s) found for VM %s"
#~ msgstr "Número no esperado de VDIs (%s) encontrados para VM %s"
#, python-format
#~ msgid "Parent %s doesn't match original parent %s, waiting for coalesce..."
#~ msgstr ""
#~ "El padre %s no concuerda con el padre original %s, esperando la unión..."
#, python-format
#~ msgid "suspend: instance not present %s"
#~ msgstr "suspendido: instancia no encontrada: %s"
#, python-format
#~ msgid "Introduced %s as %s."
#~ msgstr "Introducido %s cómo %s."
#, python-format
#~ msgid "resume: instance not present %s"
#~ msgstr "reanudar: instancia no encontrada %s"
#, python-format
#~ msgid "Instance not found %s"
#~ msgstr "instancia no encontrada %s"
#, python-format
#~ msgid "Ignoring exception %s when getting PBDs for %s"
#~ msgstr "Ignorando excepción %s al obtener PBDs de %s"
#, python-format
#~ msgid "Unable to create VDI on SR %s for instance %s"
#~ msgstr "Inpoisble crear VDI en SR %s para la instancia %s"
#, python-format
#~ msgid "Unable to obtain target information %s, %s"
#~ msgstr "Imposible obtener información del destino %s, %s"
#, python-format
#~ msgid "Ignoring exception %s when forgetting SR %s"
#~ msgstr "Ignorando excepción %s al olvidar SR %s"
#, python-format
#~ msgid "Ignoring exception %s when unplugging PBD %s"
#~ msgstr "Ignorando excepción %s al desconectar PBD %s"
#, python-format
#~ msgid "Attach_volume: %s, %s, %s"
#~ msgstr "Attach_volume: %s, %s, %s"
#, python-format
#~ msgid "Unable to use SR %s for instance %s"
#~ msgstr "Imposible utilizar SR %s para la instancia %s"
#, python-format
#~ msgid "Mountpoint %s attached to instance %s"
#~ msgstr "Punto de montaje %s unido a la instancia %s"
#, python-format
#~ msgid "Detach_volume: %s, %s"
#~ msgstr "Detach_volume: %s, %s"
#, python-format
#~ msgid "Mountpoint %s detached from instance %s"
#~ msgstr "Punto d emontaje %s desasociado de la instancia %s"
#, python-format
#~ msgid "Quota exceeeded for %s, tried to create %sG volume"
#~ msgstr "Quota excedida para %s, intentando crear el volumen %sG"
#, python-format
#~ msgid "Volume quota exceeded. You cannot create a volume of size %s"
#~ msgstr "Quota de volumen superada. No puedes crear un volumen de tamaño %s"
#, python-format
#~ msgid "instance %s: attach failed %s, removing"
#~ msgstr "instalación %s: asociación fallida %s, eliminando"
#, python-format
#~ msgid "instance %s: attaching volume %s to %s"
#~ msgstr "instancia %s: asociando volumen %s a %s"
#, python-format
#~ msgid "Snapshotting VM %s with label '%s'..."
#~ msgstr "Creando snapshot de la VM %s con la etiqueta '%s'..."
#, python-format
#~ msgid "Created snapshot %s from VM %s."
#~ msgstr "Creando snapshot %s de la VM %s"
#, python-format
#~ msgid "Unable to Snapshot %s: %s"
#~ msgstr "Incapaz de realizar snapshot %s: %s"
#, python-format
#~ msgid "Adding sitewide role %s to user %s"
#~ msgstr "Añadiendo rol global %s al usuario %s"
#, python-format
#~ msgid "Removing sitewide role %s from user %s"
#~ msgstr "Eliminando rol global %s del usuario %s"
#, python-format
#~ msgid "Del: disk %s vm %s"
#~ msgstr "Del: disco %s vm %s"
#, python-format
#~ msgid "Spawning VM %s created %s."
#~ msgstr "Iniciando VM %s creado %s."
#~ msgid "No such process"
#~ msgstr "No existe el proceso"

View File

@@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-08-22 04:48+0000\n"
"X-Launchpad-Export-Date: 2011-08-23 05:21+0000\n"
"X-Generator: Launchpad (build 13697)\n"
#: ../nova/scheduler/chance.py:37 ../nova/scheduler/zone.py:55

479
po/ja.po
View File

@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: nova\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-02-21 10:03-0500\n"
"PO-Revision-Date: 2011-05-10 10:26+0000\n"
"Last-Translator: Akira YOSHIYAMA <Unknown>\n"
"PO-Revision-Date: 2011-08-23 11:22+0000\n"
"Last-Translator: Thierry Carrez <thierry.carrez+lp@gmail.com>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-08-03 04:44+0000\n"
"X-Generator: Launchpad (build 13573)\n"
"X-Launchpad-Export-Date: 2011-08-24 04:47+0000\n"
"X-Generator: Launchpad (build 13697)\n"
#: ../nova/scheduler/chance.py:37 ../nova/scheduler/zone.py:55
#: ../nova/scheduler/simple.py:75 ../nova/scheduler/simple.py:110
@@ -2840,44 +2840,6 @@ msgstr "ユーザ %(user)s をプロジェクト %(project)s に追加します
msgid "Removing user %(user)s from project %(project)s"
msgstr "ユーザ %(user)s をプロジェクト %(project)s から削除します。"
#, python-format
#~ msgid ""
#~ "%s\n"
#~ "Command: %s\n"
#~ "Exit code: %s\n"
#~ "Stdout: %r\n"
#~ "Stderr: %r"
#~ msgstr ""
#~ "%s\n"
#~ "コマンド: %s\n"
#~ "終了コード: %s\n"
#~ "標準出力: %r\n"
#~ "標準エラー出力: %r"
#, python-format
#~ msgid "(%s) publish (key: %s) %s"
#~ msgstr "(%s) パブリッシュ (key: %s) %s"
#, python-format
#~ msgid "Binding %s to %s with key %s"
#~ msgstr "%s を %s にキー %s でバインドします。"
#, python-format
#~ msgid "Getting from %s: %s"
#~ msgstr "%s から %s を取得"
#, python-format
#~ msgid "AMQP server on %s:%d is unreachable. Trying again in %d seconds."
#~ msgstr "AMQPサーバ %s:%d に接続できません。 %d 秒後に再度試みます。"
#, python-format
#~ msgid "Starting %s node"
#~ msgstr "ノード %s を開始します。"
#, python-format
#~ msgid "Data store %s is unreachable. Trying again in %d seconds."
#~ msgstr "データストア %s に接続できません。 %d 秒後に再接続します。"
#, python-format
#~ msgid "Serving %s"
#~ msgstr "%s サービスの開始"
@@ -2889,166 +2851,6 @@ msgstr "ユーザ %(user)s をプロジェクト %(project)s から削除しま
#~ msgid "pidfile %s does not exist. Daemon not running?\n"
#~ msgstr "pidfile %s が存在しません。デーモンは実行中ですか?\n"
#, python-format
#~ msgid "Couldn't get IP, using 127.0.0.1 %s"
#~ msgstr "IPを取得できません。127.0.0.1 を %s として使います。"
#, python-format
#~ msgid ""
#~ "Access key %s has had %d failed authentications and will be locked out for "
#~ "%d minutes."
#~ msgstr "アクセスキー %s は %d 回認証に失敗したため、%d 分間ロックされます。"
#, python-format
#~ msgid "Authenticated Request For %s:%s)"
#~ msgstr "リクエストを認証しました: %s:%s"
#, python-format
#~ msgid "arg: %s\t\tval: %s"
#~ msgstr "引数(arg): %s\t値(val): %s"
#, python-format
#~ msgid "Unauthorized request for controller=%s and action=%s"
#~ msgstr "許可されていないリクエスト: controller=%s, action %sです。"
#, python-format
#~ msgid "Adding role %s to user %s for project %s"
#~ msgstr "Adding role: ロール %s をユーザ %s、プロジェクト %s に追加します。"
#, python-format
#~ msgid "Adding sitewide role %s to user %s"
#~ msgstr "Adding sitewide role: サイトワイドのロール %s をユーザ %s に追加します。"
#, python-format
#~ msgid "Removing role %s from user %s for project %s"
#~ msgstr "Removing role: ロール %s をユーザ %s プロジェクト %s から削除します。"
#, python-format
#~ msgid "Removing sitewide role %s from user %s"
#~ msgstr "Removing sitewide role: サイトワイドのロール %s をユーザ %s から削除します。"
#, python-format
#~ msgid "Getting x509 for user: %s on project: %s"
#~ msgstr "Getting X509: x509の取得 ユーザ %s, プロジェクト %s"
#, python-format
#~ msgid "Create project %s managed by %s"
#~ msgstr "Create project: プロジェクト %s %s により管理される)を作成します。"
#, python-format
#~ msgid "Adding user %s to project %s"
#~ msgstr "Adding user: ユーザ %s をプロジェクト %s に追加します。"
#, python-format
#~ msgid "Removing user %s from project %s"
#~ msgstr "Removing user: ユーザ %s をプロジェクト %s から削除します。"
#, python-format
#~ msgid "Unsupported API request: controller = %s,action = %s"
#~ msgstr "サポートされていないAPIリクエストです。 controller = %s,action = %s"
#, python-format
#~ msgid "Attach volume %s to instacne %s at %s"
#~ msgstr "Attach volume: ボリューム%s をインスタンス %s にデバイス %s でアタッチします。"
#, python-format
#~ msgid "Associate address %s to instance %s"
#~ msgstr "Associate address: アドレス %s をインスタンス %s に関連付けます。"
#, python-format
#~ msgid "Registered image %s with id %s"
#~ msgstr "Registered image: イメージ %s をid %s で登録します。"
#, python-format
#~ msgid "User %s is already a member of the group %s"
#~ msgstr "ユーザ %s は既にグループ %s のメンバーです。"
#, python-format
#~ msgid "failed authorization: no project named %s (user=%s)"
#~ msgstr "Failed authorization: 認証に失敗しました。プロジェクト名 %s (ユーザ = %s) は存在しません。"
#, python-format
#~ msgid "Failed authorization: user %s not admin and not member of project %s"
#~ msgstr ""
#~ "Failed authorization: 認証に失敗しました: ユーザ %s は管理者ではなくかつプロジェクト %s のメンバーではありません。"
#, python-format
#~ msgid "User %s is not a member of project %s"
#~ msgstr "ユーザ %s はプロジェクト %s のメンバーではありません。"
#, python-format
#~ msgid "Adding role %s to user %s in project %s"
#~ msgstr "Adding role: ロール %s をユーザ %s (プロジェクト %s の) に追加します。"
#, python-format
#~ msgid "Removing role %s from user %s on project %s"
#~ msgstr "Removing role: ロール %s をユーザ %s (プロジェクト %s の)から削除します。"
#, python-format
#~ msgid "Created project %s with manager %s"
#~ msgstr "Created project: プロジェクト %s (マネージャ %s)を作成します。"
#, python-format
#~ msgid "Remove user %s from project %s"
#~ msgstr "Remove user: ユーザ %s をプロジェクト %s から削除します。"
#, python-format
#~ msgid "Created user %s (admin: %r)"
#~ msgstr "Created user: ユーザ %s (admin: %r) を作成しました。"
#, python-format
#~ msgid "Admin status set to %r for user %s"
#~ msgstr "Admin status set: 管理者ステータス %r をユーザ %s に設定します。"
#, python-format
#~ msgid "Quota exceeeded for %s, tried to run %s instances"
#~ msgstr "%s のクオータ上限を超えました。%s インスタンスを実行しようとしました。"
#, python-format
#~ msgid "Casting to scheduler for %s/%s's instance %s"
#~ msgstr "スケジューラに対して %s/%s のインスタンス %s を送信します。"
#, python-format
#~ msgid "Going to try and terminate %s"
#~ msgstr "%s を終了します。"
#, python-format
#~ msgid "Input partition size not evenly divisible by sector size: %d / %d"
#~ msgstr "インプットパーティションサイズがセクターサイズで割り切れません。 %d / %d"
#, python-format
#~ msgid "Bytes for local storage not evenly divisible by sector size: %d / %d"
#~ msgstr "ローカルストレージのバイト数がセクターサイズで割り切れません: %d / %d"
#, python-format
#~ msgid "check_instance_lock: arguments: |%s| |%s| |%s|"
#~ msgstr "check_instance_lock: arguments: |%s| |%s| |%s|"
#, python-format
#~ msgid "Disassociating address %s"
#~ msgstr "アドレス %s の関連付けを解除(disassociate)しています。"
#, python-format
#~ msgid "trying to reboot a non-running instance: %s (state: %s excepted: %s)"
#~ msgstr "実行していないインスタンスの再起動を試みます。%s (状態: %s 期待する状態: %s)"
#, python-format
#~ msgid ""
#~ "trying to snapshot a non-running instance: %s (state: %s excepted: %s)"
#~ msgstr "実行していないインスタンスのスナップショット取得を試みます。%s (状態: %s 期待する状態: %s)"
#, python-format
#~ msgid "instance %s: attaching volume %s to %s"
#~ msgstr "attaching volume: インスタンス %s についてボリューム %s を %s にアタッチします。"
#, python-format
#~ msgid "instance %s: attach failed %s, removing"
#~ msgstr "インスタンス %s: %sのアタッチに失敗しました。リムーブします。"
#, python-format
#~ msgid "Detach volume %s from mountpoint %s on instance %s"
#~ msgstr "Detach volume: ボリューム %s をマウントポイント %s (インスタンス%s)からデタッチします。"
#, python-format
#~ msgid "updating %s..."
#~ msgstr "%s の情報の更新…"
@@ -3056,14 +2858,6 @@ msgstr "ユーザ %(user)s をプロジェクト %(project)s から削除しま
#~ msgid "unexpected error during update"
#~ msgstr "更新の最中に予期しないエラーが発生しました。"
#, python-format
#~ msgid "Cannot get blockstats for \"%s\" on \"%s\""
#~ msgstr "ブロックデバイス \"%s\" の統計を \"%s\" について取得できません。"
#, python-format
#~ msgid "Cannot get ifstats for \"%s\" on \"%s\""
#~ msgstr "インタフェース \"%s\" の統計を \"%s\" について取得できません。"
#~ msgid "unexpected exception getting connection"
#~ msgstr "接続に際し予期しないエラーが発生しました。"
@@ -3071,279 +2865,14 @@ msgstr "ユーザ %(user)s をプロジェクト %(project)s から削除しま
#~ msgid "Found instance: %s"
#~ msgstr "インスタンス %s が見つかりました。"
#, python-format
#~ msgid "No service for %s, %s"
#~ msgstr "%s, %s のserviceが存在しません。"
#, python-format
#~ msgid "No instance for id %s"
#~ msgstr "id %s のinstanceが存在しません。"
#, python-format
#~ msgid "no keypair for user %s, name %s"
#~ msgstr "ユーザ %s, ネーム%s に該当するキーペアが存在しません。"
#, python-format
#~ msgid "No volume for id %s"
#~ msgstr "id %s に該当するボリュームが存在しません。"
#, python-format
#~ msgid "No security group named %s for project: %s"
#~ msgstr "セキュリティグループ名 %s がプロジェクト %s に存在しません。"
#, python-format
#~ msgid "Parallax returned HTTP error %d from request for /images"
#~ msgstr "Parallax がHTTPエラー%d を /images に対するリクエストに対して返しました。"
#, python-format
#~ msgid "Parallax returned HTTP error %d from request for /images/detail"
#~ msgstr "Parallax がHTTPエラー %d を /images/detail に対するリクエストに対して返しました"
#, python-format
#~ msgid "IP %s leased to bad mac %s vs %s"
#~ msgstr "IP %s が期待した mac %s ではなく %s にリースされました。"
#, python-format
#~ msgid "IP %s released from bad mac %s vs %s"
#~ msgstr "IP %s がmac %s ではない mac %s への割当から開放されました。"
#, python-format
#~ msgid "Getting object: %s / %s"
#~ msgstr "オブジェクトの取得: %s / %s"
#, python-format
#~ msgid "Unauthorized attempt to get object %s from bucket %s"
#~ msgstr ""
#~ "Unauthorized attempt to get object: オブジェクト %s のバケット %s からの取得は許可されていません。"
#, python-format
#~ msgid "Putting object: %s / %s"
#~ msgstr "オブジェクトの格納:: %s / %s"
#, python-format
#~ msgid "Unauthorized attempt to upload object %s to bucket %s"
#~ msgstr ""
#~ "Unauthorized attempt to upload: オブジェクト %s のバケット %s へのアップロードは許可されていません。"
#, python-format
#~ msgid "Deleting object: %s / %s"
#~ msgstr "オブジェクトを削除しています。: %s / %s"
#, python-format
#~ msgid "Toggling publicity flag of image %s %r"
#~ msgstr "Toggling publicity flag: イメージ %s の公開フラグを %r に更新します。"
#, python-format
#~ msgid "Casting to %s %s for %s"
#~ msgstr "メッセージのcast: %s %s for %s"
#, python-format
#~ msgid "Nested received %s, %s"
#~ msgstr "ネスとした受信: %s, %s"
#, python-format
#~ msgid "Creating disk for %s by attaching disk file %s"
#~ msgstr "%s のディスクをディスクファイル %s をアタッチして作成します。"
#, python-format
#~ msgid "Created switch port %s on switch %s"
#~ msgstr "スイッチポート %s をスイッチ %s に作成しました。"
#, python-format
#~ msgid "WMI job succeeded: %s, Elapsed=%s "
#~ msgstr "WMIジョブが成功しました: %s, 経過時間=%s "
#, python-format
#~ msgid "Del: disk %s vm %s"
#~ msgstr "Del: 削除: disk %s vm %s"
#, python-format
#~ msgid ""
#~ "Got Info for vm %s: state=%s, mem=%s, num_cpu=%s, "
#~ "cpu_time=%s"
#~ msgstr ""
#~ "vm %s の情報の取得: state=%s, mem=%s, num_cpu=%s, cpu_time=%s"
#, python-format
#~ msgid "Successfully changed vm state of %s to %s"
#~ msgstr "vmの状態の %s から %s への変更に成功しました。"
#, python-format
#~ msgid "Failed to change vm state of %s to %s"
#~ msgstr "VMの状態の %s から %s への変更に失敗しました。"
#, python-format
#~ msgid "Finished retreving %s -- placed in %s"
#~ msgstr "%s を取得しました。格納先: %s"
#, python-format
#~ msgid "instance %s: deleting instance files %s"
#~ msgstr "インスタンス %s: インスタンスファイル %s を削除しています。"
#, python-format
#~ msgid "data: %r, fpath: %r"
#~ msgstr "データ:%r ファイルパス: %r"
#, python-format
#~ msgid "Contents of file %s: %r"
#~ msgstr "ファイル %s の中身: %r"
#, python-format
#~ msgid "instance %s: injecting key into image %s"
#~ msgstr "インスタンス %s にキー %s をインジェクトします。"
#, python-format
#~ msgid "instance %s: injecting net into image %s"
#~ msgstr "インスタンス %s のネットワーク設定をイメージ %s にインジェクトします。"
#, python-format
#~ msgid "instance %s: ignoring error injecting data into image %s (%s)"
#~ msgstr "インスタンス %s: データをイメージ %s にインジェクトする際にエラーが発生しました。(%s)"
#, python-format
#~ msgid "Task [%s] %s status: success %s"
#~ msgstr "タスク [%s] %s ステータス: success %s"
#, python-format
#~ msgid "Task [%s] %s status: %s %s"
#~ msgstr "タスク [%s] %s ステータス: %s %s"
#, python-format
#~ msgid "%s: _db_content => %s"
#~ msgstr "%s: _db_content => %s"
#, python-format
#~ msgid "Calling %s %s"
#~ msgstr "呼び出し: %s %s"
#, python-format
#~ msgid "Created VM %s as %s."
#~ msgstr "VM %s を %s として作成しました。"
#, python-format
#~ msgid "Creating VBD for VM %s, VDI %s ... "
#~ msgstr "VM %s, VDI %s のVBDを作成します… "
#, python-format
#~ msgid "Created VBD %s for VM %s, VDI %s."
#~ msgstr "VBD %s を VM %s, VDI %s に対して作成しました。"
#, python-format
#~ msgid "Creating VIF for VM %s, network %s."
#~ msgstr "VM %s, ネットワーク %s を作成します。"
#, python-format
#~ msgid "Created VIF %s for VM %s, network %s."
#~ msgstr "VIF %s を VM %s, ネットワーク %s に作成しました。"
#, python-format
#~ msgid "Snapshotting VM %s with label '%s'..."
#~ msgstr "VM %s のスナップショットをラベル '%s' で作成します。"
#, python-format
#~ msgid "Created snapshot %s from VM %s."
#~ msgstr "スナップショット %s を VM %s について作成しました。"
#, python-format
#~ msgid "Asking xapi to upload %s as '%s'"
#~ msgstr "xapiに対して %s を '%s' としてアップロードするように指示します。"
#, python-format
#~ msgid "Asking xapi to fetch %s as %s"
#~ msgstr "xapi に対して %s を %s として取得するように指示します。"
#, python-format
#~ msgid "PV Kernel in VDI:%d"
#~ msgstr "VDIのPV Kernel: %d"
#, python-format
#~ msgid "VHD %s has parent %s"
#~ msgstr "VHD %s のペアレントは %s です。"
#, python-format
#~ msgid "Parent %s doesn't match original parent %s, waiting for coalesce..."
#~ msgstr "ペアレント %s がオリジナルのペアレント %s と一致しません。合致するのを待ちます…"
#, python-format
#~ msgid "Unexpected number of VDIs (%s) found for VM %s"
#~ msgstr "予期しない数 (%s) のVDIがVM %s に存在します。"
#, python-format
#~ msgid "Spawning VM %s created %s."
#~ msgstr "VM %s の生成(spawning) により %s を作成しました。"
#, python-format
#~ msgid "Unable to Snapshot %s: %s"
#~ msgstr "%s のスナップショットに失敗しました: %s"
#, python-format
#~ msgid "suspend: instance not present %s"
#~ msgstr "suspend: インスタンス %s は存在しません。"
#, python-format
#~ msgid "resume: instance not present %s"
#~ msgstr "resume: インスタンス %s は存在しません。"
#, python-format
#~ msgid "Instance not found %s"
#~ msgstr "インスタンス %s が見つかりません。"
#, python-format
#~ msgid "Introduced %s as %s."
#~ msgstr "%s を %s として introduce しました。"
#, python-format
#~ msgid "Ignoring exception %s when getting PBDs for %s"
#~ msgstr "例外 %s が %s のPBDを取得する際に発生しましたが無視します。"
#, python-format
#~ msgid "Ignoring exception %s when unplugging PBD %s"
#~ msgstr "例外 %s が %s のPBDをunplugする際に発生しましたが無視します。"
#, python-format
#~ msgid "Ignoring exception %s when forgetting SR %s"
#~ msgstr "例外 %s がSR %s をforgetする際に発生しましたが無視します。"
#, python-format
#~ msgid "Unable to obtain target information %s, %s"
#~ msgstr "ターゲットの情報を取得できません。 %s, %s"
#, python-format
#~ msgid "Attach_volume: %s, %s, %s"
#~ msgstr "Attach_volume: ボリュームのアタッチ: %s, %s, %s"
#, python-format
#~ msgid "Unable to create VDI on SR %s for instance %s"
#~ msgstr "SR %s にインスタンス %s のVDIを作成できません。"
#, python-format
#~ msgid "Unable to use SR %s for instance %s"
#~ msgstr "SR %s をインスタンス %s に対して利用できません。"
#, python-format
#~ msgid "Mountpoint %s attached to instance %s"
#~ msgstr "マウントポイント %s をインスタンス %s にアタッチしました。"
#, python-format
#~ msgid "Detach_volume: %s, %s"
#~ msgstr "Detach_volume: ボリュームのデタッチ: %s, %s"
#, python-format
#~ msgid "Mountpoint %s detached from instance %s"
#~ msgstr "マウントポイント %s をインスタンス %s からデタッチしました。"
#, python-format
#~ msgid "Quota exceeeded for %s, tried to create %sG volume"
#~ msgstr "%sのクオータを超えています。サイズ %sG のボリュームの作成を行おうとしました。"
#, python-format
#~ msgid "Volume quota exceeded. You cannot create a volume of size %s"
#~ msgstr "ボリュームのクオータを超えています。%sの大きさのボリュームは作成できません。"
#, python-format
#~ msgid "volume %s: creating lv of size %sG"
#~ msgstr "ボリューム%sの%sGのlv (論理ボリューム) を作成します。"
#~ msgid "Wrong number of arguments."
#~ msgstr "引数の数が異なります。"

View File

@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: nova\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-02-21 10:03-0500\n"
"PO-Revision-Date: 2011-07-25 17:40+0000\n"
"Last-Translator: msinhore <msinhore@gmail.com>\n"
"PO-Revision-Date: 2011-09-02 12:17+0000\n"
"Last-Translator: Robson Negreiros Bezerra <Unknown>\n"
"Language-Team: Brazilian Portuguese <pt_BR@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-08-03 04:44+0000\n"
"X-Generator: Launchpad (build 13573)\n"
"X-Launchpad-Export-Date: 2011-09-03 05:50+0000\n"
"X-Generator: Launchpad (build 13830)\n"
#: ../nova/scheduler/chance.py:37 ../nova/scheduler/zone.py:55
#: ../nova/scheduler/simple.py:75 ../nova/scheduler/simple.py:110
@@ -453,11 +453,13 @@ msgid ""
"Detach volume %(volume_id)s from mountpoint %(mp)s on instance "
"%(instance_id)s"
msgstr ""
"Desconectando volume %(volume_id)s do ponto de montagem %(mp)s na instância "
"%(instance_id)s"
#: ../nova/compute/manager.py:588
#, python-format
msgid "Detaching volume from unknown instance %s"
msgstr ""
msgstr "Desconectando volume da instância desconhecida %s"
#: ../nova/scheduler/simple.py:53
#, python-format
@@ -708,7 +710,7 @@ msgstr "Ligação %(queue)s para %(exchange)s com chave %(routing_key)s"
#: ../nova/fakerabbit.py:121
#, python-format
msgid "Getting from %(queue)s: %(message)s"
msgstr ""
msgstr "Recebendo de %(queue)s: %(message)s"
#: ../nova/virt/xenapi/vm_utils.py:135 ../nova/virt/hyperv.py:171
#, python-format
@@ -808,7 +810,7 @@ msgstr "Kernel/Ramdisk %s destruidos"
#: ../nova/virt/xenapi/vm_utils.py:361
#, python-format
msgid "Asking xapi to fetch %(url)s as %(access)s"
msgstr ""
msgstr "Requisitando à xapi a busca da url %(url)s como %(access)s"
#: ../nova/virt/xenapi/vm_utils.py:386 ../nova/virt/xenapi/vm_utils.py:402
#, python-format
@@ -880,58 +882,59 @@ msgstr ""
#: ../nova/virt/xenapi/vm_utils.py:590
#, python-format
msgid "No VDIs found for VM %s"
msgstr ""
msgstr "Nenhum VDIs encontrado para MV %s"
#: ../nova/virt/xenapi/vm_utils.py:594
#, python-format
msgid "Unexpected number of VDIs (%(num_vdis)s) found for VM %(vm_ref)s"
msgstr ""
"Número de VDIs inesperado (%(num_vdis)s) encontrado para MV %(vm_ref)s"
#: ../nova/virt/xenapi/vm_utils.py:653
#: ../plugins/xenserver/xenapi/etc/xapi.d/plugins/pluginlib_nova.py:188
#, python-format
msgid "Creating VBD for VDI %s ... "
msgstr ""
msgstr "Criando VBD para VDI %s ... "
#: ../nova/virt/xenapi/vm_utils.py:655
#: ../plugins/xenserver/xenapi/etc/xapi.d/plugins/pluginlib_nova.py:190
#, python-format
msgid "Creating VBD for VDI %s done."
msgstr ""
msgstr "O VBD para VDI %s foi criado."
#: ../nova/virt/xenapi/vm_utils.py:657
#: ../plugins/xenserver/xenapi/etc/xapi.d/plugins/pluginlib_nova.py:192
#, python-format
msgid "Plugging VBD %s ... "
msgstr ""
msgstr "Conectando VBD %s ... "
#: ../nova/virt/xenapi/vm_utils.py:659
#: ../plugins/xenserver/xenapi/etc/xapi.d/plugins/pluginlib_nova.py:194
#, python-format
msgid "Plugging VBD %s done."
msgstr ""
msgstr "O VDB %s foi conectado."
#: ../nova/virt/xenapi/vm_utils.py:661
#, python-format
msgid "VBD %(vbd)s plugged as %(orig_dev)s"
msgstr ""
msgstr "VBD %(vbd)s conectado como %(orig_dev)s"
#: ../nova/virt/xenapi/vm_utils.py:664
#, python-format
msgid "VBD %(vbd)s plugged into wrong dev, remapping to %(dev)s"
msgstr ""
msgstr "VBD %(vbd)s conectado no device errado, remapeando para %(dev)s"
#: ../nova/virt/xenapi/vm_utils.py:668
#: ../plugins/xenserver/xenapi/etc/xapi.d/plugins/pluginlib_nova.py:197
#, python-format
msgid "Destroying VBD for VDI %s ... "
msgstr ""
msgstr "Destruindo VBD para o VDI %s ... "
#: ../nova/virt/xenapi/vm_utils.py:671
#: ../plugins/xenserver/xenapi/etc/xapi.d/plugins/pluginlib_nova.py:200
#, python-format
msgid "Destroying VBD for VDI %s done."
msgstr ""
msgstr "O VBD para o VDI %s foi destruído."
#: ../nova/virt/xenapi/vm_utils.py:683
#: ../plugins/xenserver/xenapi/etc/xapi.d/plugins/pluginlib_nova.py:211
@@ -952,7 +955,7 @@ msgstr ""
#: ../plugins/xenserver/xenapi/etc/xapi.d/plugins/pluginlib_nova.py:223
#, python-format
msgid "Ignoring XenAPI.Failure in VBD.unplug: %s"
msgstr ""
msgstr "Ignorando XenAPI.Failure em VBD.unplug: %s"
#: ../nova/virt/xenapi/vm_utils.py:704
#: ../plugins/xenserver/xenapi/etc/xapi.d/plugins/pluginlib_nova.py:66
@@ -2824,47 +2827,6 @@ msgstr ""
msgid "Removing user %(user)s from project %(project)s"
msgstr ""
#, python-format
#~ msgid ""
#~ "%s\n"
#~ "Command: %s\n"
#~ "Exit code: %s\n"
#~ "Stdout: %r\n"
#~ "Stderr: %r"
#~ msgstr ""
#~ "%s\n"
#~ "Comando: %s\n"
#~ "Código de retorno: %s\n"
#~ "Stdout: %r\n"
#~ "Stderr: %r"
#, python-format
#~ msgid "(%s) publish (key: %s) %s"
#~ msgstr "(%s) publicar (key: %s) %s"
#, python-format
#~ msgid "AMQP server on %s:%d is unreachable. Trying again in %d seconds."
#~ msgstr ""
#~ "Servidor AMQP em %s:%d inatingível. Tentando novamente em %d segundos."
#, python-format
#~ msgid "Binding %s to %s with key %s"
#~ msgstr "Atribuindo %s para %s com chave %s"
#, python-format
#~ msgid "Getting from %s: %s"
#~ msgstr "Obtendo de %s: %s"
#, python-format
#~ msgid "Starting %s node"
#~ msgstr "Iniciando nó %s"
#, python-format
#~ msgid "Data store %s is unreachable. Trying again in %d seconds."
#~ msgstr ""
#~ "Repositório de dados %s não pode ser atingido. Tentando novamente em %d "
#~ "segundos."
#~ msgid "Full set of FLAGS:"
#~ msgstr "Conjunto completo de FLAGS:"
@@ -2876,115 +2838,6 @@ msgstr ""
#~ msgid "Serving %s"
#~ msgstr "Servindo %s"
#, python-format
#~ msgid "Couldn't get IP, using 127.0.0.1 %s"
#~ msgstr "Não foi possível obter IP, usando 127.0.0.1 %s"
#, python-format
#~ msgid ""
#~ "Access key %s has had %d failed authentications and will be locked out for "
#~ "%d minutes."
#~ msgstr ""
#~ "Chave de acesso %s tem %d falhas de autenticação e vai ser bloqueada por %d "
#~ "minutos."
#, python-format
#~ msgid "arg: %s\t\tval: %s"
#~ msgstr "argumento: %s\t\tvalor: %s"
#, python-format
#~ msgid "Authenticated Request For %s:%s)"
#~ msgstr "Pedido de Autenticação Para: %s:%s"
#, python-format
#~ msgid "Adding sitewide role %s to user %s"
#~ msgstr "Adicionando papel em todo site %s ao usuário %s"
#, python-format
#~ msgid "Adding role %s to user %s for project %s"
#~ msgstr "Adicionando papel %s ao usuário %s para o projeto %s"
#, python-format
#~ msgid "Unauthorized request for controller=%s and action=%s"
#~ msgstr "Requisição não autorizada para controlador=%s e ação=%s"
#, python-format
#~ msgid "Removing role %s from user %s for project %s"
#~ msgstr "Removendo papel %s do usuário %s para o projeto %s"
#, python-format
#~ msgid "Getting x509 for user: %s on project: %s"
#~ msgstr "Obtendo x509 para usuário: %s do projeto: %s"
#, python-format
#~ msgid "Create project %s managed by %s"
#~ msgstr "Criar projeto %s gerenciado por %s"
#, python-format
#~ msgid "Removing user %s from project %s"
#~ msgstr "Excluindo usuário %s do projeto %s"
#, python-format
#~ msgid "Adding user %s to project %s"
#~ msgstr "Adicionando usuário %s ao projeto %s"
#, python-format
#~ msgid "Unsupported API request: controller = %s,action = %s"
#~ msgstr "Requisição de API não suportada: controlador = %s,ação = %s"
#, python-format
#~ msgid "Removing sitewide role %s from user %s"
#~ msgstr "Removendo papel %s em todo site do usuário %s"
#, python-format
#~ msgid "Associate address %s to instance %s"
#~ msgstr "Atribuir endereço %s à instância %s"
#, python-format
#~ msgid "Attach volume %s to instacne %s at %s"
#~ msgstr "Anexar volume %s para instância %s em %s"
#, python-format
#~ msgid "Registered image %s with id %s"
#~ msgstr "Registrada imagem %s com id %s"
#, python-format
#~ msgid "User %s is already a member of the group %s"
#~ msgstr "Usuário %s já pertence ao grupo %s"
#, python-format
#~ msgid "User %s is not a member of project %s"
#~ msgstr "Usuário %s não é membro do projeto %s"
#, python-format
#~ msgid "failed authorization: no project named %s (user=%s)"
#~ msgstr "falha de autorização: nenhum projeto de nome %s (usuário=%s)"
#, python-format
#~ msgid "Failed authorization: user %s not admin and not member of project %s"
#~ msgstr ""
#~ "Falha de autorização: usuário %s não é administrador nem membro do projeto %s"
#, python-format
#~ msgid "Created project %s with manager %s"
#~ msgstr "Criado projeto %s com gerente %s"
#, python-format
#~ msgid "Removing role %s from user %s on project %s"
#~ msgstr "Removendo papel %s do usuário %s no projeto %s"
#, python-format
#~ msgid "Adding role %s to user %s in project %s"
#~ msgstr "Adicionando papel %s ao usuário %s no projeto %s"
#, python-format
#~ msgid "Remove user %s from project %s"
#~ msgstr "Remover usuário %s do projeto %s"
#, python-format
#~ msgid "Created user %s (admin: %r)"
#~ msgstr "Criado usuário %s (administrador: %r)"
#~ msgid "No such process"
#~ msgstr "Processo inexistente"

126
po/ru.po
View File

@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: nova\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-02-21 10:03-0500\n"
"PO-Revision-Date: 2011-07-09 07:20+0000\n"
"Last-Translator: ilya kislicyn <Unknown>\n"
"PO-Revision-Date: 2011-08-23 11:22+0000\n"
"Last-Translator: Thierry Carrez <thierry.carrez+lp@gmail.com>\n"
"Language-Team: Russian <ru@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-08-03 04:44+0000\n"
"X-Generator: Launchpad (build 13573)\n"
"X-Launchpad-Export-Date: 2011-08-24 04:47+0000\n"
"X-Generator: Launchpad (build 13697)\n"
#: ../nova/scheduler/chance.py:37 ../nova/scheduler/zone.py:55
#: ../nova/scheduler/simple.py:75 ../nova/scheduler/simple.py:110
@@ -2793,58 +2793,6 @@ msgstr ""
#~ msgid "Starting %s"
#~ msgstr "Запускается %s"
#, python-format
#~ msgid "arg: %s\t\tval: %s"
#~ msgstr "arg: %s\t\tval: %s"
#, python-format
#~ msgid "Adding role %s to user %s for project %s"
#~ msgstr "Добавление роли %s для пользователя %s для проекта %s"
#, python-format
#~ msgid "Removing role %s from user %s for project %s"
#~ msgstr "Удаление роли %s пользователя %s для проекта %s"
#, python-format
#~ msgid "Create project %s managed by %s"
#~ msgstr "Создать проект %s под управлением %s"
#, python-format
#~ msgid "Removing user %s from project %s"
#~ msgstr "Удаление пользователя %s с проекта %s"
#, python-format
#~ msgid "Adding user %s to project %s"
#~ msgstr "Добавление пользователя %s к проекту %s"
#, python-format
#~ msgid "User %s is already a member of the group %s"
#~ msgstr "Пользователь %s уже член группы %s"
#, python-format
#~ msgid "User %s is not a member of project %s"
#~ msgstr "Пользователь %s не является членом группы %s"
#, python-format
#~ msgid "Created project %s with manager %s"
#~ msgstr "Создан проект %s под управлением %s"
#, python-format
#~ msgid "Removing role %s from user %s on project %s"
#~ msgstr "Удаление роли %s пользователя %s в проекте %s"
#, python-format
#~ msgid "Remove user %s from project %s"
#~ msgstr "Удалить пользователя %s из проекта %s"
#, python-format
#~ msgid "Created user %s (admin: %r)"
#~ msgstr "Создан пользователь %s (администратор: %r)"
#, python-format
#~ msgid "Adding role %s to user %s in project %s"
#~ msgstr "Добавление роли %s для пользователя %s в проект %s"
#~ msgid "unexpected error during update"
#~ msgstr "неожиданная ошибка во время обновления"
@@ -2852,75 +2800,9 @@ msgstr ""
#~ msgid "updating %s..."
#~ msgstr "обновление %s..."
#, python-format
#~ msgid "Getting object: %s / %s"
#~ msgstr "Получение объекта: %s / %s"
#, python-format
#~ msgid "Deleting object: %s / %s"
#~ msgstr "Удаление объекта: %s / %s"
#, python-format
#~ msgid "%s: _db_content => %s"
#~ msgstr "%s: _db_content => %s"
#, python-format
#~ msgid "Calling %s %s"
#~ msgstr "Звонок %s %s"
#, python-format
#~ msgid ""
#~ "%s\n"
#~ "Command: %s\n"
#~ "Exit code: %s\n"
#~ "Stdout: %r\n"
#~ "Stderr: %r"
#~ msgstr ""
#~ "%s\n"
#~ "Команда: %s\n"
#~ "Код завершения: %s\n"
#~ "Stdout: %r\n"
#~ "Stderr: %r"
#, python-format
#~ msgid "AMQP server on %s:%d is unreachable. Trying again in %d seconds."
#~ msgstr "AMQP сервер %s:%d недоступен. Повторная попытка через %d секунд."
#, python-format
#~ msgid "Putting object: %s / %s"
#~ msgstr "Вставка объекта: %s / %s"
#, python-format
#~ msgid "Starting %s node"
#~ msgstr "Запускается нода %s"
#, python-format
#~ msgid "Data store %s is unreachable. Trying again in %d seconds."
#~ msgstr "Хранилище данных %s недоступно. Повторная попытка через %d секунд."
#, python-format
#~ msgid "Couldn't get IP, using 127.0.0.1 %s"
#~ msgstr "Не удалось получить IP, используем 127.0.0.1 %s"
#, python-format
#~ msgid "pidfile %s does not exist. Daemon not running?\n"
#~ msgstr "pidfile %s не обнаружен. Демон не запущен?\n"
#, python-format
#~ msgid "Getting from %s: %s"
#~ msgstr "Получение из %s: %s"
#, python-format
#~ msgid ""
#~ "Access key %s has had %d failed authentications and will be locked out for "
#~ "%d minutes."
#~ msgstr ""
#~ "Ключ доступа %s имеет %d неудачных попыток аутентификации и будет "
#~ "заблокирован на %d минут."
#, python-format
#~ msgid "Authenticated Request For %s:%s)"
#~ msgstr "Запрос аутентификации для %s:%s)"
#~ msgid "Wrong number of arguments."
#~ msgstr "Неверное число аргументов."

View File

@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: nova\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-02-21 10:03-0500\n"
"PO-Revision-Date: 2011-02-17 03:24+0000\n"
"Last-Translator: John Michael Baterna <Unknown>\n"
"PO-Revision-Date: 2011-08-23 11:21+0000\n"
"Last-Translator: Thierry Carrez <thierry.carrez+lp@gmail.com>\n"
"Language-Team: Tagalog <tl@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-08-03 04:44+0000\n"
"X-Generator: Launchpad (build 13573)\n"
"X-Launchpad-Export-Date: 2011-08-24 04:47+0000\n"
"X-Generator: Launchpad (build 13697)\n"
#: ../nova/scheduler/chance.py:37 ../nova/scheduler/zone.py:55
#: ../nova/scheduler/simple.py:75 ../nova/scheduler/simple.py:110
@@ -2789,8 +2789,3 @@ msgstr ""
#, python-format
msgid "Removing user %(user)s from project %(project)s"
msgstr ""
#, python-format
#~ msgid "AMQP server on %s:%d is unreachable. Trying again in %d seconds."
#~ msgstr ""
#~ "Hindi makita o maabot ang AMQP server sa %s:%d. Muling subukan sa %d segundo."

View File

@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: nova\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-02-21 10:03-0500\n"
"PO-Revision-Date: 2011-02-03 22:02+0000\n"
"Last-Translator: Wladimir Rossinski <Unknown>\n"
"PO-Revision-Date: 2011-08-23 11:21+0000\n"
"Last-Translator: Thierry Carrez <thierry.carrez+lp@gmail.com>\n"
"Language-Team: Ukrainian <uk@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-08-03 04:44+0000\n"
"X-Generator: Launchpad (build 13573)\n"
"X-Launchpad-Export-Date: 2011-08-24 04:47+0000\n"
"X-Generator: Launchpad (build 13697)\n"
#: ../nova/scheduler/chance.py:37 ../nova/scheduler/zone.py:55
#: ../nova/scheduler/simple.py:75 ../nova/scheduler/simple.py:110
@@ -2788,10 +2788,6 @@ msgstr ""
msgid "Removing user %(user)s from project %(project)s"
msgstr ""
#, python-format
#~ msgid "AMQP server on %s:%d is unreachable. Trying again in %d seconds."
#~ msgstr "AMQP сервер %s:%d недоступний. Спроба під'єднання через %d секунд."
#, python-format
#~ msgid "Starting %s"
#~ msgstr "Запускається %s"
@@ -2799,33 +2795,3 @@ msgstr ""
#, python-format
#~ msgid "Serving %s"
#~ msgstr "Обслуговування %s"
#, python-format
#~ msgid "Couldn't get IP, using 127.0.0.1 %s"
#~ msgstr "Не вдалось отримати IP, використовуючи 127.0.0.1 %s"
#, python-format
#~ msgid "Removing user %s from project %s"
#~ msgstr "Вилучення користувача %s з проекту %s"
#, python-format
#~ msgid "Adding user %s to project %s"
#~ msgstr "Долучення користувача %s до проекту %s"
#, python-format
#~ msgid ""
#~ "%s\n"
#~ "Command: %s\n"
#~ "Exit code: %s\n"
#~ "Stdout: %r\n"
#~ "Stderr: %r"
#~ msgstr ""
#~ "%s\n"
#~ "Команда: %s\n"
#~ "Код завершення: %s\n"
#~ "Stdout: %r\n"
#~ "Stderr: %r"
#, python-format
#~ msgid "Getting from %s: %s"
#~ msgstr "Отримання з %s: %s"