merged with nova trunk.
This commit is contained in:
1
Authors
1
Authors
@@ -64,6 +64,7 @@ Kirill Shileev <kshileev@gmail.com>
|
||||
Koji Iida <iida.koji@lab.ntt.co.jp>
|
||||
Lorin Hochstein <lorin@isi.edu>
|
||||
Lvov Maxim <usrleon@gmail.com>
|
||||
Mandell Degerness <mdegerne@gmail.com>
|
||||
Mark Washenberger <mark.washenberger@rackspace.com>
|
||||
Masanori Itoh <itoumsn@nttdata.co.jp>
|
||||
Matt Dietz <matt.dietz@rackspace.com>
|
||||
|
119
HACKING
119
HACKING
@@ -5,12 +5,23 @@ Step 1: Read http://www.python.org/dev/peps/pep-0008/
|
||||
Step 2: Read http://www.python.org/dev/peps/pep-0008/ again
|
||||
Step 3: Read on
|
||||
|
||||
|
||||
General
|
||||
-------
|
||||
- Put two newlines between top-level code (funcs, classes, etc)
|
||||
- Put one newline between methods in classes and anywhere else
|
||||
- Do not write "except:", use "except Exception:" at the very least
|
||||
- Include your name with TODOs as in "#TODO(termie)"
|
||||
- Do not name anything the same name as a built-in or reserved word
|
||||
|
||||
|
||||
Imports
|
||||
-------
|
||||
- thou shalt not import objects, only modules
|
||||
- thou shalt not import more than one module per line
|
||||
- thou shalt not make relative imports
|
||||
- thou shalt organize your imports according to the following template
|
||||
- Do not import objects, only modules
|
||||
- Do not import more than one module per line
|
||||
- Do not make relative imports
|
||||
- Order your imports by the full module path
|
||||
- Organize your imports according to the following template
|
||||
|
||||
::
|
||||
# vim: tabstop=4 shiftwidth=4 softtabstop=4
|
||||
@@ -22,16 +33,6 @@ Imports
|
||||
{{begin your code}}
|
||||
|
||||
|
||||
General
|
||||
-------
|
||||
- thou shalt put two newlines twixt toplevel code (funcs, classes, etc)
|
||||
- thou shalt put one newline twixt methods in classes and anywhere else
|
||||
- thou shalt not write "except:", use "except Exception:" at the very least
|
||||
- thou shalt include your name with TODOs as in "TODO(termie)"
|
||||
- thou shalt not name anything the same name as a builtin or reserved word
|
||||
- thou shalt not violate causality in our time cone, or else
|
||||
|
||||
|
||||
Human Alphabetical Order Examples
|
||||
---------------------------------
|
||||
::
|
||||
@@ -42,11 +43,13 @@ Human Alphabetical Order Examples
|
||||
import time
|
||||
import unittest
|
||||
|
||||
from nova import flags
|
||||
from nova import test
|
||||
import nova.api.ec2
|
||||
from nova.api import openstack
|
||||
from nova.auth import users
|
||||
from nova.endpoint import api
|
||||
import nova.flags
|
||||
from nova.endpoint import cloud
|
||||
from nova import test
|
||||
|
||||
|
||||
Docstrings
|
||||
----------
|
||||
@@ -70,6 +73,88 @@ Docstrings
|
||||
|
||||
:param foo: the foo parameter
|
||||
:param bar: the bar parameter
|
||||
:returns: return_type -- description of the return value
|
||||
:returns: description of the return value
|
||||
:raises: AttributeError, KeyError
|
||||
|
||||
"""
|
||||
|
||||
|
||||
Dictionaries/Lists
|
||||
------------------
|
||||
If a dictionary (dict) or list object is longer than 80 characters, its
|
||||
items should be split with newlines. Embedded iterables should have their
|
||||
items indented. Additionally, the last item in the dictionary should have
|
||||
a trailing comma. This increases readability and simplifies future diffs.
|
||||
|
||||
Example:
|
||||
|
||||
my_dictionary = {
|
||||
"image": {
|
||||
"name": "Just a Snapshot",
|
||||
"size": 2749573,
|
||||
"properties": {
|
||||
"user_id": 12,
|
||||
"arch": "x86_64",
|
||||
},
|
||||
"things": [
|
||||
"thing_one",
|
||||
"thing_two",
|
||||
],
|
||||
"status": "ACTIVE",
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
Calling Methods
|
||||
---------------
|
||||
Calls to methods 80 characters or longer should format each argument with
|
||||
newlines. This is not a requirement, but a guideline.
|
||||
|
||||
unnecessarily_long_function_name('string one',
|
||||
'string two',
|
||||
kwarg1=constants.ACTIVE,
|
||||
kwarg2=['a', 'b', 'c'])
|
||||
|
||||
|
||||
Rather than constructing parameters inline, it is better to break things up:
|
||||
|
||||
list_of_strings = [
|
||||
'what_a_long_string',
|
||||
'not as long',
|
||||
]
|
||||
|
||||
dict_of_numbers = {
|
||||
'one': 1,
|
||||
'two': 2,
|
||||
'twenty four': 24,
|
||||
}
|
||||
|
||||
object_one.call_a_method('string three',
|
||||
'string four',
|
||||
kwarg1=list_of_strings,
|
||||
kwarg2=dict_of_numbers)
|
||||
|
||||
|
||||
Internationalization (i18n) Strings
|
||||
-----------------------------------
|
||||
In order to support multiple languages, we have a mechanism to support
|
||||
automatic translations of exception and log strings.
|
||||
|
||||
Example:
|
||||
msg = _("An error occurred")
|
||||
raise HTTPBadRequest(explanation=msg)
|
||||
|
||||
If you have a variable to place within the string, first internationalize
|
||||
the template string then do the replacement.
|
||||
|
||||
Example:
|
||||
msg = _("Missing parameter: %s") % ("flavor",)
|
||||
LOG.error(msg)
|
||||
|
||||
If you have multiple variables to place in the string, use keyword
|
||||
parameters. This helps our translators reorder parameters when needed.
|
||||
|
||||
Example:
|
||||
msg = _("The server with id %(s_id)s has no key %(m_key)s")
|
||||
LOG.error(msg % {"s_id": "1234", "m_key": "imageId"})
|
||||
|
@@ -114,11 +114,11 @@ class AjaxConsoleProxy(object):
|
||||
AjaxConsoleProxy.tokens[kwargs['token']] = \
|
||||
{'args': kwargs, 'last_activity': time.time()}
|
||||
|
||||
conn = rpc.Connection.instance(new=True)
|
||||
consumer = rpc.TopicAdapterConsumer(
|
||||
connection=conn,
|
||||
proxy=TopicProxy,
|
||||
topic=FLAGS.ajax_console_proxy_topic)
|
||||
conn = rpc.create_connection(new=True)
|
||||
consumer = rpc.create_consumer(
|
||||
conn,
|
||||
FLAGS.ajax_console_proxy_topic,
|
||||
TopicProxy)
|
||||
|
||||
def delete_expired_tokens():
|
||||
now = time.time()
|
||||
|
@@ -1,59 +0,0 @@
|
||||
#!/usr/bin/env python
|
||||
# vim: tabstop=4 shiftwidth=4 softtabstop=4
|
||||
|
||||
# Copyright 2010 United States Government as represented by the
|
||||
# Administrator of the National Aeronautics and Space Administration.
|
||||
# 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.
|
||||
|
||||
"""
|
||||
Daemon for Nova RRD based instance resource monitoring.
|
||||
"""
|
||||
|
||||
import gettext
|
||||
import os
|
||||
import sys
|
||||
from twisted.application import service
|
||||
|
||||
# If ../nova/__init__.py exists, add ../ to Python search path, so that
|
||||
# it will override what happens to be installed in /usr/(local/)lib/python...
|
||||
possible_topdir = os.path.normpath(os.path.join(os.path.abspath(sys.argv[0]),
|
||||
os.pardir,
|
||||
os.pardir))
|
||||
if os.path.exists(os.path.join(possible_topdir, 'nova', '__init__.py')):
|
||||
sys.path.insert(0, possible_topdir)
|
||||
|
||||
gettext.install('nova', unicode=1)
|
||||
|
||||
from nova import log as logging
|
||||
from nova import utils
|
||||
from nova import twistd
|
||||
from nova.compute import monitor
|
||||
|
||||
LOG = logging.getLogger('nova.instancemonitor')
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
utils.default_flagfile()
|
||||
twistd.serve(__file__)
|
||||
|
||||
if __name__ == '__builtin__':
|
||||
LOG.warn(_('Starting instance monitor'))
|
||||
# pylint: disable=C0103
|
||||
monitor = monitor.InstanceMonitor()
|
||||
|
||||
# This is the parent service that twistd will be looking for when it
|
||||
# parses this file, return it so that we can get it into globals below
|
||||
application = service.Application('nova-instancemonitor')
|
||||
monitor.setServiceParent(application)
|
@@ -81,7 +81,6 @@ class LogReader(object):
|
||||
if level == 'ERROR':
|
||||
self.handle_logged_error(line)
|
||||
elif level == '[-]' and self.last_error:
|
||||
# twisted stack trace line
|
||||
clean_line = " ".join(line.split(" ")[6:])
|
||||
self.last_error.trace = self.last_error.trace + clean_line
|
||||
else:
|
||||
|
@@ -56,6 +56,7 @@
|
||||
import gettext
|
||||
import glob
|
||||
import json
|
||||
import math
|
||||
import netaddr
|
||||
import os
|
||||
import sys
|
||||
@@ -662,8 +663,9 @@ class NetworkCommands(object):
|
||||
# check for certain required inputs
|
||||
if not label:
|
||||
raise exception.NetworkNotCreated(req='--label')
|
||||
if not fixed_range_v4:
|
||||
raise exception.NetworkNotCreated(req='--fixed_range_v4')
|
||||
if not (fixed_range_v4 or fixed_range_v6):
|
||||
req = '--fixed_range_v4 or --fixed_range_v6'
|
||||
raise exception.NetworkNotCreated(req=req)
|
||||
|
||||
bridge = bridge or FLAGS.flat_network_bridge
|
||||
if not bridge:
|
||||
@@ -689,21 +691,21 @@ class NetworkCommands(object):
|
||||
if FLAGS.network_manager in interface_required:
|
||||
raise exception.NetworkNotCreated(req='--bridge_interface')
|
||||
|
||||
if FLAGS.use_ipv6:
|
||||
fixed_range_v6 = fixed_range_v6 or FLAGS.fixed_range_v6
|
||||
if not fixed_range_v6:
|
||||
raise exception.NetworkNotCreated(req='with use_ipv6, '
|
||||
'--fixed_range_v6')
|
||||
gateway_v6 = gateway_v6 or FLAGS.gateway_v6
|
||||
if not gateway_v6:
|
||||
raise exception.NetworkNotCreated(req='with use_ipv6, '
|
||||
'--gateway_v6')
|
||||
|
||||
# sanitize other input using FLAGS if necessary
|
||||
if not num_networks:
|
||||
num_networks = FLAGS.num_networks
|
||||
if not network_size:
|
||||
network_size = FLAGS.network_size
|
||||
fixnet = netaddr.IPNetwork(fixed_range_v4)
|
||||
each_subnet_size = fixnet.size / int(num_networks)
|
||||
if each_subnet_size > FLAGS.network_size:
|
||||
network_size = FLAGS.network_size
|
||||
subnet = 32 - int(math.log(network_size, 2))
|
||||
oversize_msg = _('Subnet(s) too large, defaulting to /%s.'
|
||||
' To override, specify network_size flag.'
|
||||
) % subnet
|
||||
print oversize_msg
|
||||
else:
|
||||
network_size = fixnet.size
|
||||
if not multi_host:
|
||||
multi_host = FLAGS.multi_host
|
||||
else:
|
||||
@@ -735,8 +737,8 @@ class NetworkCommands(object):
|
||||
def list(self):
|
||||
"""List all created networks"""
|
||||
print "%-18s\t%-15s\t%-15s\t%-15s\t%-15s\t%-15s\t%-15s" % (
|
||||
_('network'),
|
||||
_('netmask'),
|
||||
_('IPv4'),
|
||||
_('IPv6'),
|
||||
_('start address'),
|
||||
_('DNS1'),
|
||||
_('DNS2'),
|
||||
@@ -745,7 +747,7 @@ class NetworkCommands(object):
|
||||
for network in db.network_get_all(context.get_admin_context()):
|
||||
print "%-18s\t%-15s\t%-15s\t%-15s\t%-15s\t%-15s\t%-15s" % (
|
||||
network.cidr,
|
||||
network.netmask,
|
||||
network.cidr_v6,
|
||||
network.dhcp_start,
|
||||
network.dns1,
|
||||
network.dns2,
|
||||
|
@@ -18,7 +18,7 @@
|
||||
# under the License.
|
||||
|
||||
"""
|
||||
Twisted daemon for nova objectstore. Supports S3 API.
|
||||
Daemon for nova objectstore. Supports S3 API.
|
||||
"""
|
||||
|
||||
import gettext
|
||||
|
@@ -387,3 +387,8 @@ DEFINE_list('zone_capabilities',
|
||||
'Key/Multi-value list representng capabilities of this zone')
|
||||
DEFINE_string('build_plan_encryption_key', None,
|
||||
'128bit (hex) encryption key for scheduler build plans.')
|
||||
|
||||
DEFINE_bool('start_guests_on_host_boot', False,
|
||||
'Whether to restart guests when the host reboots')
|
||||
DEFINE_bool('resume_guests_state_on_host_boot', False,
|
||||
'Whether to start guests, that was running before the host reboot')
|
||||
|
@@ -80,6 +80,10 @@ def notify(publisher_id, event_type, priority, payload):
|
||||
if priority not in log_levels:
|
||||
raise BadPriorityException(
|
||||
_('%s not in valid priorities' % priority))
|
||||
|
||||
# Ensure everything is JSON serializable.
|
||||
payload = utils.to_primitive(payload, convert_instances=True)
|
||||
|
||||
driver = utils.import_object(FLAGS.notification_driver)
|
||||
msg = dict(message_id=str(uuid.uuid4()),
|
||||
publisher_id=publisher_id,
|
||||
|
@@ -21,13 +21,9 @@ import random
|
||||
|
||||
from nova import context
|
||||
from nova import db
|
||||
from nova import flags
|
||||
from nova import test
|
||||
from nova.virt import hyperv
|
||||
|
||||
FLAGS = flags.FLAGS
|
||||
FLAGS.connection_type = 'hyperv'
|
||||
|
||||
|
||||
class HyperVTestCase(test.TestCase):
|
||||
"""Test cases for the Hyper-V driver"""
|
||||
@@ -36,6 +32,7 @@ class HyperVTestCase(test.TestCase):
|
||||
self.user_id = 'fake'
|
||||
self.project_id = 'fake'
|
||||
self.context = context.RequestContext(self.user_id, self.project_id)
|
||||
self.flags(connection_type='hyperv')
|
||||
|
||||
def test_create_destroy(self):
|
||||
"""Create a VM and destroy it"""
|
||||
|
@@ -19,12 +19,9 @@ Tests For Scheduler Host Filters.
|
||||
import json
|
||||
|
||||
from nova import exception
|
||||
from nova import flags
|
||||
from nova import test
|
||||
from nova.scheduler import host_filter
|
||||
|
||||
FLAGS = flags.FLAGS
|
||||
|
||||
|
||||
class FakeZoneManager:
|
||||
pass
|
||||
@@ -57,9 +54,9 @@ class HostFilterTestCase(test.TestCase):
|
||||
'host_name-label': 'xs-%s' % multiplier}
|
||||
|
||||
def setUp(self):
|
||||
self.old_flag = FLAGS.default_host_filter
|
||||
FLAGS.default_host_filter = \
|
||||
'nova.scheduler.host_filter.AllHostsFilter'
|
||||
super(HostFilterTestCase, self).setUp()
|
||||
default_host_filter = 'nova.scheduler.host_filter.AllHostsFilter'
|
||||
self.flags(default_host_filter=default_host_filter)
|
||||
self.instance_type = dict(name='tiny',
|
||||
memory_mb=50,
|
||||
vcpus=10,
|
||||
@@ -98,9 +95,6 @@ class HostFilterTestCase(test.TestCase):
|
||||
host09['xpu_arch'] = 'fermi'
|
||||
host09['xpu_info'] = 'Tesla 2150'
|
||||
|
||||
def tearDown(self):
|
||||
FLAGS.default_host_filter = self.old_flag
|
||||
|
||||
def test_choose_filter(self):
|
||||
# Test default filter ...
|
||||
hf = host_filter.choose_host_filter()
|
||||
|
@@ -16,13 +16,11 @@
|
||||
Tests For Least Cost Scheduler
|
||||
"""
|
||||
|
||||
from nova import flags
|
||||
from nova import test
|
||||
from nova.scheduler import least_cost
|
||||
from nova.tests.scheduler import test_zone_aware_scheduler
|
||||
|
||||
MB = 1024 * 1024
|
||||
FLAGS = flags.FLAGS
|
||||
|
||||
|
||||
class FakeHost(object):
|
||||
@@ -95,10 +93,9 @@ class LeastCostSchedulerTestCase(test.TestCase):
|
||||
self.assertWeights(expected, num, request_spec, hosts)
|
||||
|
||||
def test_noop_cost_fn(self):
|
||||
FLAGS.least_cost_scheduler_cost_functions = [
|
||||
'nova.scheduler.least_cost.noop_cost_fn',
|
||||
]
|
||||
FLAGS.noop_cost_fn_weight = 1
|
||||
self.flags(least_cost_scheduler_cost_functions=[
|
||||
'nova.scheduler.least_cost.noop_cost_fn'],
|
||||
noop_cost_fn_weight=1)
|
||||
|
||||
num = 1
|
||||
request_spec = {}
|
||||
@@ -109,10 +106,9 @@ class LeastCostSchedulerTestCase(test.TestCase):
|
||||
self.assertWeights(expected, num, request_spec, hosts)
|
||||
|
||||
def test_cost_fn_weights(self):
|
||||
FLAGS.least_cost_scheduler_cost_functions = [
|
||||
'nova.scheduler.least_cost.noop_cost_fn',
|
||||
]
|
||||
FLAGS.noop_cost_fn_weight = 2
|
||||
self.flags(least_cost_scheduler_cost_functions=[
|
||||
'nova.scheduler.least_cost.noop_cost_fn'],
|
||||
noop_cost_fn_weight=2)
|
||||
|
||||
num = 1
|
||||
request_spec = {}
|
||||
@@ -123,10 +119,9 @@ class LeastCostSchedulerTestCase(test.TestCase):
|
||||
self.assertWeights(expected, num, request_spec, hosts)
|
||||
|
||||
def test_compute_fill_first_cost_fn(self):
|
||||
FLAGS.least_cost_scheduler_cost_functions = [
|
||||
'nova.scheduler.least_cost.compute_fill_first_cost_fn',
|
||||
]
|
||||
FLAGS.compute_fill_first_cost_fn_weight = 1
|
||||
self.flags(least_cost_scheduler_cost_functions=[
|
||||
'nova.scheduler.least_cost.compute_fill_first_cost_fn'],
|
||||
compute_fill_first_cost_fn_weight=1)
|
||||
|
||||
num = 1
|
||||
instance_type = {'memory_mb': 1024}
|
||||
|
@@ -83,9 +83,9 @@ class user_and_project_generator(object):
|
||||
|
||||
class _AuthManagerBaseTestCase(test.TestCase):
|
||||
def setUp(self):
|
||||
FLAGS.auth_driver = self.auth_driver
|
||||
super(_AuthManagerBaseTestCase, self).setUp()
|
||||
self.flags(connection_type='fake')
|
||||
self.flags(auth_driver=self.auth_driver,
|
||||
connection_type='fake')
|
||||
self.manager = manager.AuthManager(new=True)
|
||||
self.manager.mc.cache = {}
|
||||
|
||||
|
@@ -101,11 +101,9 @@ class CloudTestCase(test.TestCase):
|
||||
"""Makes sure describe regions runs without raising an exception"""
|
||||
result = self.cloud.describe_regions(self.context)
|
||||
self.assertEqual(len(result['regionInfo']), 1)
|
||||
regions = FLAGS.region_list
|
||||
FLAGS.region_list = ["one=test_host1", "two=test_host2"]
|
||||
self.flags(region_list=["one=test_host1", "two=test_host2"])
|
||||
result = self.cloud.describe_regions(self.context)
|
||||
self.assertEqual(len(result['regionInfo']), 2)
|
||||
FLAGS.region_list = regions
|
||||
|
||||
def test_describe_addresses(self):
|
||||
"""Makes sure describe addresses runs without raising an exception"""
|
||||
|
@@ -496,8 +496,8 @@ class ComputeTestCase(test.TestCase):
|
||||
db.instance_update(self.context, instance_id,
|
||||
{'instance_type_id': inst_type['id']})
|
||||
|
||||
self.assertRaises(exception.ApiError, self.compute_api.resize,
|
||||
context, instance_id, 1)
|
||||
self.assertRaises(exception.CannotResizeToSmallerSize,
|
||||
self.compute_api.resize, context, instance_id, 1)
|
||||
|
||||
self.compute.terminate_instance(context, instance_id)
|
||||
|
||||
@@ -508,8 +508,8 @@ class ComputeTestCase(test.TestCase):
|
||||
|
||||
self.compute.run_instance(self.context, instance_id)
|
||||
|
||||
self.assertRaises(exception.ApiError, self.compute_api.resize,
|
||||
context, instance_id, 1)
|
||||
self.assertRaises(exception.CannotResizeToSameSize,
|
||||
self.compute_api.resize, context, instance_id, 1)
|
||||
|
||||
self.compute.terminate_instance(context, instance_id)
|
||||
|
||||
@@ -535,7 +535,9 @@ class ComputeTestCase(test.TestCase):
|
||||
|
||||
db.instance_update(self.context, instance_id, {'host': 'foo'})
|
||||
|
||||
self.compute.prep_resize(context, inst_ref['uuid'], 3)
|
||||
new_instance_type_ref = db.instance_type_get_by_flavor_id(context, 3)
|
||||
self.compute.prep_resize(context, inst_ref['uuid'],
|
||||
new_instance_type_ref['id'])
|
||||
|
||||
migration_ref = db.migration_get_by_instance_and_status(context,
|
||||
inst_ref['uuid'], 'pre-migrating')
|
||||
|
@@ -57,7 +57,7 @@ class DbApiTestCase(test.TestCase):
|
||||
def test_instance_get_project_vpn(self):
|
||||
values = {'instance_type_id': FLAGS.default_instance_type,
|
||||
'image_ref': FLAGS.vpn_image_id,
|
||||
'project_id': self.project_id
|
||||
'project_id': self.project_id,
|
||||
}
|
||||
instance = db.instance_create(self.context, values)
|
||||
result = db.instance_get_project_vpn(self.context.elevated(),
|
||||
@@ -67,7 +67,7 @@ class DbApiTestCase(test.TestCase):
|
||||
def test_instance_get_project_vpn_joins(self):
|
||||
values = {'instance_type_id': FLAGS.default_instance_type,
|
||||
'image_ref': FLAGS.vpn_image_id,
|
||||
'project_id': self.project_id
|
||||
'project_id': self.project_id,
|
||||
}
|
||||
instance = db.instance_create(self.context, values)
|
||||
_setup_networking(instance['id'])
|
||||
|
@@ -19,12 +19,9 @@ Tests For Scheduler Host Filters.
|
||||
import json
|
||||
|
||||
from nova import exception
|
||||
from nova import flags
|
||||
from nova import test
|
||||
from nova.scheduler import host_filter
|
||||
|
||||
FLAGS = flags.FLAGS
|
||||
|
||||
|
||||
class FakeZoneManager:
|
||||
pass
|
||||
@@ -57,9 +54,9 @@ class HostFilterTestCase(test.TestCase):
|
||||
'host_name-label': 'xs-%s' % multiplier}
|
||||
|
||||
def setUp(self):
|
||||
self.old_flag = FLAGS.default_host_filter
|
||||
FLAGS.default_host_filter = \
|
||||
'nova.scheduler.host_filter.AllHostsFilter'
|
||||
super(HostFilterTestCase, self).setUp()
|
||||
default_host_filter = 'nova.scheduler.host_filter.AllHostsFilter'
|
||||
self.flags(default_host_filter=default_host_filter)
|
||||
self.instance_type = dict(name='tiny',
|
||||
memory_mb=50,
|
||||
vcpus=10,
|
||||
@@ -76,9 +73,6 @@ class HostFilterTestCase(test.TestCase):
|
||||
states['host%02d' % (x + 1)] = {'compute': self._host_caps(x)}
|
||||
self.zone_manager.service_states = states
|
||||
|
||||
def tearDown(self):
|
||||
FLAGS.default_host_filter = self.old_flag
|
||||
|
||||
def test_choose_filter(self):
|
||||
# Test default filter ...
|
||||
hf = host_filter.choose_host_filter()
|
||||
|
@@ -38,7 +38,6 @@ from nova.virt.libvirt import firewall
|
||||
|
||||
libvirt = None
|
||||
FLAGS = flags.FLAGS
|
||||
flags.DECLARE('instances_path', 'nova.compute.manager')
|
||||
|
||||
|
||||
def _concurrency(wait, done, target):
|
||||
@@ -93,6 +92,7 @@ def _setup_networking(instance_id, ip='1.2.3.4'):
|
||||
class CacheConcurrencyTestCase(test.TestCase):
|
||||
def setUp(self):
|
||||
super(CacheConcurrencyTestCase, self).setUp()
|
||||
self.flags(instances_path='nova.compute.manager')
|
||||
|
||||
def fake_exists(fname):
|
||||
basedir = os.path.join(FLAGS.instances_path, '_base')
|
||||
@@ -158,7 +158,7 @@ class LibvirtConnTestCase(test.TestCase):
|
||||
self.context = context.RequestContext(self.user_id, self.project_id)
|
||||
self.network = utils.import_object(FLAGS.network_manager)
|
||||
self.context = context.get_admin_context()
|
||||
FLAGS.instances_path = ''
|
||||
self.flags(instances_path='')
|
||||
self.call_libvirt_dependant_setup = False
|
||||
self.test_ip = '10.11.12.13'
|
||||
|
||||
@@ -323,7 +323,7 @@ class LibvirtConnTestCase(test.TestCase):
|
||||
if not self.lazy_load_library_exists():
|
||||
return
|
||||
|
||||
FLAGS.image_service = 'nova.image.fake.FakeImageService'
|
||||
self.flags(image_service='nova.image.fake.FakeImageService')
|
||||
|
||||
# Start test
|
||||
image_service = utils.import_object(FLAGS.image_service)
|
||||
@@ -347,7 +347,7 @@ class LibvirtConnTestCase(test.TestCase):
|
||||
self.mox.ReplayAll()
|
||||
|
||||
conn = connection.LibvirtConnection(False)
|
||||
conn.snapshot(instance_ref, recv_meta['id'])
|
||||
conn.snapshot(self.context, instance_ref, recv_meta['id'])
|
||||
|
||||
snapshot = image_service.show(context, recv_meta['id'])
|
||||
self.assertEquals(snapshot['properties']['image_state'], 'available')
|
||||
@@ -358,7 +358,7 @@ class LibvirtConnTestCase(test.TestCase):
|
||||
if not self.lazy_load_library_exists():
|
||||
return
|
||||
|
||||
FLAGS.image_service = 'nova.image.fake.FakeImageService'
|
||||
self.flags(image_service='nova.image.fake.FakeImageService')
|
||||
|
||||
# Start test
|
||||
image_service = utils.import_object(FLAGS.image_service)
|
||||
@@ -387,7 +387,7 @@ class LibvirtConnTestCase(test.TestCase):
|
||||
self.mox.ReplayAll()
|
||||
|
||||
conn = connection.LibvirtConnection(False)
|
||||
conn.snapshot(instance_ref, recv_meta['id'])
|
||||
conn.snapshot(self.context, instance_ref, recv_meta['id'])
|
||||
|
||||
snapshot = image_service.show(context, recv_meta['id'])
|
||||
self.assertEquals(snapshot['properties']['image_state'], 'available')
|
||||
@@ -522,7 +522,7 @@ class LibvirtConnTestCase(test.TestCase):
|
||||
'disk.local')]
|
||||
|
||||
for (libvirt_type, (expected_uri, checks)) in type_uri_map.iteritems():
|
||||
FLAGS.libvirt_type = libvirt_type
|
||||
self.flags(libvirt_type=libvirt_type)
|
||||
conn = connection.LibvirtConnection(True)
|
||||
|
||||
uri = conn.get_uri()
|
||||
@@ -547,9 +547,9 @@ class LibvirtConnTestCase(test.TestCase):
|
||||
# checking against that later on. This way we make sure the
|
||||
# implementation doesn't fiddle around with the FLAGS.
|
||||
testuri = 'something completely different'
|
||||
FLAGS.libvirt_uri = testuri
|
||||
self.flags(libvirt_uri=testuri)
|
||||
for (libvirt_type, (expected_uri, checks)) in type_uri_map.iteritems():
|
||||
FLAGS.libvirt_type = libvirt_type
|
||||
self.flags(libvirt_type=libvirt_type)
|
||||
conn = connection.LibvirtConnection(True)
|
||||
uri = conn.get_uri()
|
||||
self.assertEquals(uri, testuri)
|
||||
@@ -557,8 +557,7 @@ class LibvirtConnTestCase(test.TestCase):
|
||||
|
||||
def test_update_available_resource_works_correctly(self):
|
||||
"""Confirm compute_node table is updated successfully."""
|
||||
org_path = FLAGS.instances_path = ''
|
||||
FLAGS.instances_path = '.'
|
||||
self.flags(instances_path='.')
|
||||
|
||||
# Prepare mocks
|
||||
def getVersion():
|
||||
@@ -605,12 +604,10 @@ class LibvirtConnTestCase(test.TestCase):
|
||||
self.assertTrue(compute_node['hypervisor_version'] > 0)
|
||||
|
||||
db.service_destroy(self.context, service_ref['id'])
|
||||
FLAGS.instances_path = org_path
|
||||
|
||||
def test_update_resource_info_no_compute_record_found(self):
|
||||
"""Raise exception if no recorde found on services table."""
|
||||
org_path = FLAGS.instances_path = ''
|
||||
FLAGS.instances_path = '.'
|
||||
self.flags(instances_path='.')
|
||||
self.create_fake_libvirt_mock()
|
||||
|
||||
self.mox.ReplayAll()
|
||||
@@ -619,8 +616,6 @@ class LibvirtConnTestCase(test.TestCase):
|
||||
conn.update_available_resource,
|
||||
self.context, 'dummy')
|
||||
|
||||
FLAGS.instances_path = org_path
|
||||
|
||||
def test_ensure_filtering_rules_for_instance_timeout(self):
|
||||
"""ensure_filtering_fules_for_instance() finishes with timeout."""
|
||||
# Skip if non-libvirt environment
|
||||
@@ -737,7 +732,7 @@ class LibvirtConnTestCase(test.TestCase):
|
||||
network_info = _create_network_info()
|
||||
|
||||
try:
|
||||
conn.spawn(instance, network_info)
|
||||
conn.spawn(self.context, instance, network_info)
|
||||
except Exception, e:
|
||||
count = (0 <= str(e.message).find('Unexpected method call'))
|
||||
|
||||
|
@@ -17,7 +17,6 @@
|
||||
|
||||
from nova import db
|
||||
from nova import exception
|
||||
from nova import flags
|
||||
from nova import log as logging
|
||||
from nova import test
|
||||
from nova.network import manager as network_manager
|
||||
@@ -26,7 +25,6 @@ from nova.network import manager as network_manager
|
||||
import mox
|
||||
|
||||
|
||||
FLAGS = flags.FLAGS
|
||||
LOG = logging.getLogger('nova.tests.network')
|
||||
|
||||
|
||||
|
@@ -20,13 +20,11 @@ Unit Tests for remote procedure calls using queue
|
||||
"""
|
||||
|
||||
from nova import context
|
||||
from nova import flags
|
||||
from nova import log as logging
|
||||
from nova import rpc
|
||||
from nova import test
|
||||
|
||||
|
||||
FLAGS = flags.FLAGS
|
||||
LOG = logging.getLogger('nova.tests.rpc')
|
||||
|
||||
|
||||
|
@@ -1,12 +1,32 @@
|
||||
# vim: tabstop=4 shiftwidth=4 softtabstop=4
|
||||
|
||||
# Copyright (c) 2010 Openstack, LLC.
|
||||
# Administrator of the National Aeronautics and Space Administration.
|
||||
# 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.
|
||||
|
||||
"""
|
||||
Tests For RPC AMQP.
|
||||
"""
|
||||
|
||||
from nova import context
|
||||
from nova import flags
|
||||
from nova import log as logging
|
||||
from nova import rpc
|
||||
from nova.rpc import amqp
|
||||
from nova import test
|
||||
|
||||
|
||||
FLAGS = flags.FLAGS
|
||||
LOG = logging.getLogger('nova.tests.rpc')
|
||||
|
||||
|
||||
|
@@ -1,53 +0,0 @@
|
||||
# vim: tabstop=4 shiftwidth=4 softtabstop=4
|
||||
|
||||
# Copyright 2010 United States Government as represented by the
|
||||
# Administrator of the National Aeronautics and Space Administration.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import StringIO
|
||||
import sys
|
||||
|
||||
from nova import twistd
|
||||
from nova import exception
|
||||
from nova import flags
|
||||
from nova import test
|
||||
|
||||
|
||||
FLAGS = flags.FLAGS
|
||||
|
||||
|
||||
class TwistdTestCase(test.TestCase):
|
||||
def setUp(self):
|
||||
super(TwistdTestCase, self).setUp()
|
||||
self.Options = twistd.WrapTwistedOptions(twistd.TwistdServerOptions)
|
||||
sys.stdout = StringIO.StringIO()
|
||||
|
||||
def tearDown(self):
|
||||
super(TwistdTestCase, self).tearDown()
|
||||
sys.stdout = sys.__stdout__
|
||||
|
||||
def test_basic(self):
|
||||
options = self.Options()
|
||||
argv = options.parseOptions()
|
||||
|
||||
def test_logfile(self):
|
||||
options = self.Options()
|
||||
argv = options.parseOptions(['--logfile=foo'])
|
||||
self.assertEqual(FLAGS.logfile, 'foo')
|
||||
|
||||
def test_help(self):
|
||||
options = self.Options()
|
||||
self.assertRaises(SystemExit, options.parseOptions, ['--help'])
|
||||
self.assert_('pidfile' in sys.stdout.getvalue())
|
@@ -40,6 +40,7 @@ class VMWareAPIVMTestCase(test.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
super(VMWareAPIVMTestCase, self).setUp()
|
||||
self.context = context.RequestContext('fake', 'fake', False)
|
||||
self.flags(vmwareapi_host_ip='test_url',
|
||||
vmwareapi_host_username='test_username',
|
||||
vmwareapi_host_password='test_pass')
|
||||
@@ -94,7 +95,7 @@ class VMWareAPIVMTestCase(test.TestCase):
|
||||
"""Create and spawn the VM."""
|
||||
self._create_instance_in_the_db()
|
||||
self.type_data = db.instance_type_get_by_name(None, 'm1.large')
|
||||
self.conn.spawn(self.instance, self.network_info)
|
||||
self.conn.spawn(self.context, self.instance, self.network_info)
|
||||
self._check_vm_record()
|
||||
|
||||
def _check_vm_record(self):
|
||||
@@ -156,14 +157,14 @@ class VMWareAPIVMTestCase(test.TestCase):
|
||||
self._create_vm()
|
||||
info = self.conn.get_info(1)
|
||||
self._check_vm_info(info, power_state.RUNNING)
|
||||
self.conn.snapshot(self.instance, "Test-Snapshot")
|
||||
self.conn.snapshot(self.context, self.instance, "Test-Snapshot")
|
||||
info = self.conn.get_info(1)
|
||||
self._check_vm_info(info, power_state.RUNNING)
|
||||
|
||||
def test_snapshot_non_existent(self):
|
||||
self._create_instance_in_the_db()
|
||||
self.assertRaises(Exception, self.conn.snapshot, self.instance,
|
||||
"Test-Snapshot")
|
||||
self.assertRaises(Exception, self.conn.snapshot, self.context,
|
||||
self.instance, "Test-Snapshot")
|
||||
|
||||
def test_reboot(self):
|
||||
self._create_vm()
|
||||
|
@@ -71,9 +71,9 @@ class XenAPIVolumeTestCase(test.TestCase):
|
||||
self.user_id = 'fake'
|
||||
self.project_id = 'fake'
|
||||
self.context = context.RequestContext(self.user_id, self.project_id)
|
||||
FLAGS.target_host = '127.0.0.1'
|
||||
FLAGS.xenapi_connection_url = 'test_url'
|
||||
FLAGS.xenapi_connection_password = 'test_pass'
|
||||
self.flags(target_host='127.0.0.1',
|
||||
xenapi_connection_url='test_url',
|
||||
xenapi_connection_password='test_pass')
|
||||
db_fakes.stub_out_db_instance_api(self.stubs)
|
||||
stubs.stub_out_get_target(self.stubs)
|
||||
xenapi_fake.reset()
|
||||
@@ -170,6 +170,10 @@ def reset_network(*args):
|
||||
pass
|
||||
|
||||
|
||||
def _find_rescue_vbd_ref(*args):
|
||||
pass
|
||||
|
||||
|
||||
class XenAPIVMTestCase(test.TestCase):
|
||||
"""Unit tests for VM operations."""
|
||||
def setUp(self):
|
||||
@@ -189,6 +193,8 @@ class XenAPIVMTestCase(test.TestCase):
|
||||
stubs.stubout_stream_disk(self.stubs)
|
||||
stubs.stubout_is_vdi_pv(self.stubs)
|
||||
self.stubs.Set(vmops.VMOps, 'reset_network', reset_network)
|
||||
self.stubs.Set(vmops.VMOps, '_find_rescue_vbd_ref',
|
||||
_find_rescue_vbd_ref)
|
||||
stubs.stub_out_vm_methods(self.stubs)
|
||||
glance_stubs.stubout_glance_client(self.stubs)
|
||||
fake_utils.stub_out_utils_execute(self.stubs)
|
||||
@@ -226,7 +232,7 @@ class XenAPIVMTestCase(test.TestCase):
|
||||
'mac': 'DE:AD:BE:EF:00:00',
|
||||
'rxtx_cap': 3})]
|
||||
instance = db.instance_create(self.context, values)
|
||||
self.conn.spawn(instance, network_info)
|
||||
self.conn.spawn(self.context, instance, network_info)
|
||||
|
||||
gt1 = eventlet.spawn(_do_build, 1, self.project_id, self.user_id)
|
||||
gt2 = eventlet.spawn(_do_build, 2, self.project_id, self.user_id)
|
||||
@@ -256,14 +262,15 @@ class XenAPIVMTestCase(test.TestCase):
|
||||
instance = self._create_instance()
|
||||
|
||||
name = "MySnapshot"
|
||||
self.assertRaises(exception.Error, self.conn.snapshot, instance, name)
|
||||
self.assertRaises(exception.Error, self.conn.snapshot,
|
||||
self.context, instance, name)
|
||||
|
||||
def test_instance_snapshot(self):
|
||||
stubs.stubout_instance_snapshot(self.stubs)
|
||||
instance = self._create_instance()
|
||||
|
||||
name = "MySnapshot"
|
||||
template_vm_ref = self.conn.snapshot(instance, name)
|
||||
template_vm_ref = self.conn.snapshot(self.context, instance, name)
|
||||
|
||||
def ensure_vm_was_torn_down():
|
||||
vm_labels = []
|
||||
@@ -396,7 +403,7 @@ class XenAPIVMTestCase(test.TestCase):
|
||||
instance_type_id="3", os_type="linux",
|
||||
architecture="x86-64", instance_id=1,
|
||||
check_injection=False,
|
||||
create_record=True):
|
||||
create_record=True, empty_dns=False):
|
||||
stubs.stubout_loopingcall_start(self.stubs)
|
||||
if create_record:
|
||||
values = {'id': instance_id,
|
||||
@@ -425,14 +432,23 @@ class XenAPIVMTestCase(test.TestCase):
|
||||
'label': 'fake',
|
||||
'mac': 'DE:AD:BE:EF:00:00',
|
||||
'rxtx_cap': 3})]
|
||||
self.conn.spawn(instance, network_info)
|
||||
if empty_dns:
|
||||
network_info[0][1]['dns'] = []
|
||||
|
||||
self.conn.spawn(self.context, instance, network_info)
|
||||
self.create_vm_record(self.conn, os_type, instance_id)
|
||||
self.check_vm_record(self.conn, check_injection)
|
||||
self.assertTrue(instance.os_type)
|
||||
self.assertTrue(instance.architecture)
|
||||
|
||||
def test_spawn_empty_dns(self):
|
||||
""""Test spawning with an empty dns list"""
|
||||
self._test_spawn(glance_stubs.FakeGlance.IMAGE_VHD, None, None,
|
||||
os_type="linux", architecture="x86-64",
|
||||
empty_dns=True)
|
||||
self.check_vm_params_for_linux()
|
||||
|
||||
def test_spawn_not_enough_memory(self):
|
||||
FLAGS.xenapi_image_service = 'glance'
|
||||
self.assertRaises(Exception,
|
||||
self._test_spawn,
|
||||
1, 2, 3, "4") # m1.xlarge
|
||||
@@ -444,7 +460,6 @@ class XenAPIVMTestCase(test.TestCase):
|
||||
|
||||
"""
|
||||
vdi_recs_start = self._list_vdis()
|
||||
FLAGS.xenapi_image_service = 'glance'
|
||||
stubs.stubout_fetch_image_glance_disk(self.stubs)
|
||||
self.assertRaises(xenapi_fake.Failure,
|
||||
self._test_spawn, 1, 2, 3)
|
||||
@@ -459,7 +474,6 @@ class XenAPIVMTestCase(test.TestCase):
|
||||
|
||||
"""
|
||||
vdi_recs_start = self._list_vdis()
|
||||
FLAGS.xenapi_image_service = 'glance'
|
||||
stubs.stubout_create_vm(self.stubs)
|
||||
self.assertRaises(xenapi_fake.Failure,
|
||||
self._test_spawn, 1, 2, 3)
|
||||
@@ -467,40 +481,12 @@ class XenAPIVMTestCase(test.TestCase):
|
||||
vdi_recs_end = self._list_vdis()
|
||||
self._check_vdis(vdi_recs_start, vdi_recs_end)
|
||||
|
||||
def test_spawn_raw_objectstore(self):
|
||||
# TODO(vish): deprecated
|
||||
from nova.auth import manager
|
||||
authman = manager.AuthManager()
|
||||
authman.create_user('fake', 'fake')
|
||||
authman.create_project('fake', 'fake')
|
||||
try:
|
||||
FLAGS.xenapi_image_service = 'objectstore'
|
||||
self._test_spawn(1, None, None)
|
||||
finally:
|
||||
authman.delete_project('fake')
|
||||
authman.delete_user('fake')
|
||||
|
||||
def test_spawn_objectstore(self):
|
||||
# TODO(vish): deprecated
|
||||
from nova.auth import manager
|
||||
authman = manager.AuthManager()
|
||||
authman.create_user('fake', 'fake')
|
||||
authman.create_project('fake', 'fake')
|
||||
try:
|
||||
FLAGS.xenapi_image_service = 'objectstore'
|
||||
self._test_spawn(1, 2, 3)
|
||||
finally:
|
||||
authman.delete_project('fake')
|
||||
authman.delete_user('fake')
|
||||
|
||||
@stub_vm_utils_with_vdi_attached_here
|
||||
def test_spawn_raw_glance(self):
|
||||
FLAGS.xenapi_image_service = 'glance'
|
||||
self._test_spawn(glance_stubs.FakeGlance.IMAGE_RAW, None, None)
|
||||
self.check_vm_params_for_linux()
|
||||
|
||||
def test_spawn_vhd_glance_linux(self):
|
||||
FLAGS.xenapi_image_service = 'glance'
|
||||
self._test_spawn(glance_stubs.FakeGlance.IMAGE_VHD, None, None,
|
||||
os_type="linux", architecture="x86-64")
|
||||
self.check_vm_params_for_linux()
|
||||
@@ -529,20 +515,17 @@ class XenAPIVMTestCase(test.TestCase):
|
||||
self.assertEqual(len(self.vm['VBDs']), 1)
|
||||
|
||||
def test_spawn_vhd_glance_windows(self):
|
||||
FLAGS.xenapi_image_service = 'glance'
|
||||
self._test_spawn(glance_stubs.FakeGlance.IMAGE_VHD, None, None,
|
||||
os_type="windows", architecture="i386")
|
||||
self.check_vm_params_for_windows()
|
||||
|
||||
def test_spawn_glance(self):
|
||||
FLAGS.xenapi_image_service = 'glance'
|
||||
self._test_spawn(glance_stubs.FakeGlance.IMAGE_MACHINE,
|
||||
glance_stubs.FakeGlance.IMAGE_KERNEL,
|
||||
glance_stubs.FakeGlance.IMAGE_RAMDISK)
|
||||
self.check_vm_params_for_linux_with_external_kernel()
|
||||
|
||||
def test_spawn_netinject_file(self):
|
||||
FLAGS.xenapi_image_service = 'glance'
|
||||
db_fakes.stub_out_db_instance_api(self.stubs, injected=True)
|
||||
|
||||
self._tee_executed = False
|
||||
@@ -568,7 +551,6 @@ class XenAPIVMTestCase(test.TestCase):
|
||||
# Capture the sudo tee .../etc/network/interfaces command
|
||||
(r'(sudo\s+)?tee.*interfaces', _tee_handler),
|
||||
])
|
||||
FLAGS.xenapi_image_service = 'glance'
|
||||
self._test_spawn(glance_stubs.FakeGlance.IMAGE_MACHINE,
|
||||
glance_stubs.FakeGlance.IMAGE_KERNEL,
|
||||
glance_stubs.FakeGlance.IMAGE_RAMDISK,
|
||||
@@ -576,7 +558,6 @@ class XenAPIVMTestCase(test.TestCase):
|
||||
self.assertTrue(self._tee_executed)
|
||||
|
||||
def test_spawn_netinject_xenstore(self):
|
||||
FLAGS.xenapi_image_service = 'glance'
|
||||
db_fakes.stub_out_db_instance_api(self.stubs, injected=True)
|
||||
|
||||
self._tee_executed = False
|
||||
@@ -621,7 +602,7 @@ class XenAPIVMTestCase(test.TestCase):
|
||||
self.assertFalse(self._tee_executed)
|
||||
|
||||
def test_spawn_vlanmanager(self):
|
||||
self.flags(xenapi_image_service='glance',
|
||||
self.flags(image_service='nova.image.glance.GlanceImageService',
|
||||
network_manager='nova.network.manager.VlanManager',
|
||||
vlan_interface='fake0')
|
||||
|
||||
@@ -665,7 +646,7 @@ class XenAPIVMTestCase(test.TestCase):
|
||||
self.flags(flat_injected=False)
|
||||
instance = self._create_instance()
|
||||
conn = xenapi_conn.get_connection(False)
|
||||
conn.rescue(instance, None, [])
|
||||
conn.rescue(self.context, instance, None, [])
|
||||
|
||||
def test_unrescue(self):
|
||||
instance = self._create_instance()
|
||||
@@ -702,7 +683,7 @@ class XenAPIVMTestCase(test.TestCase):
|
||||
'mac': 'DE:AD:BE:EF:00:00',
|
||||
'rxtx_cap': 3})]
|
||||
if spawn:
|
||||
self.conn.spawn(instance, network_info)
|
||||
self.conn.spawn(self.context, instance, network_info)
|
||||
return instance
|
||||
|
||||
|
||||
@@ -754,9 +735,9 @@ class XenAPIMigrateInstance(test.TestCase):
|
||||
def setUp(self):
|
||||
super(XenAPIMigrateInstance, self).setUp()
|
||||
self.stubs = stubout.StubOutForTesting()
|
||||
FLAGS.target_host = '127.0.0.1'
|
||||
FLAGS.xenapi_connection_url = 'test_url'
|
||||
FLAGS.xenapi_connection_password = 'test_pass'
|
||||
self.flags(target_host='127.0.0.1',
|
||||
xenapi_connection_url='test_url',
|
||||
xenapi_connection_password='test_pass')
|
||||
db_fakes.stub_out_db_instance_api(self.stubs)
|
||||
stubs.stub_out_get_target(self.stubs)
|
||||
xenapi_fake.reset()
|
||||
@@ -789,12 +770,18 @@ class XenAPIMigrateInstance(test.TestCase):
|
||||
def test_finish_migrate(self):
|
||||
instance = db.instance_create(self.context, self.values)
|
||||
self.called = False
|
||||
self.fake_vm_start_called = False
|
||||
|
||||
def fake_vm_start(*args, **kwargs):
|
||||
self.fake_vm_start_called = True
|
||||
|
||||
def fake_vdi_resize(*args, **kwargs):
|
||||
self.called = True
|
||||
|
||||
self.stubs.Set(stubs.FakeSessionForMigrationTests,
|
||||
"VDI_resize_online", fake_vdi_resize)
|
||||
self.stubs.Set(vmops.VMOps, '_start', fake_vm_start)
|
||||
|
||||
stubs.stubout_session(self.stubs, stubs.FakeSessionForMigrationTests)
|
||||
stubs.stubout_loopingcall_start(self.stubs)
|
||||
conn = xenapi_conn.get_connection(False)
|
||||
@@ -812,9 +799,11 @@ class XenAPIMigrateInstance(test.TestCase):
|
||||
'label': 'fake',
|
||||
'mac': 'DE:AD:BE:EF:00:00',
|
||||
'rxtx_cap': 3})]
|
||||
conn.finish_migration(instance, dict(base_copy='hurr', cow='durr'),
|
||||
network_info, resize_instance=True)
|
||||
conn.finish_migration(self.context, instance,
|
||||
dict(base_copy='hurr', cow='durr'),
|
||||
network_info, resize_instance=True)
|
||||
self.assertEqual(self.called, True)
|
||||
self.assertEqual(self.fake_vm_start_called, True)
|
||||
|
||||
def test_finish_migrate_no_local_storage(self):
|
||||
tiny_type_id = \
|
||||
@@ -844,8 +833,9 @@ class XenAPIMigrateInstance(test.TestCase):
|
||||
'label': 'fake',
|
||||
'mac': 'DE:AD:BE:EF:00:00',
|
||||
'rxtx_cap': 3})]
|
||||
conn.finish_migration(instance, dict(base_copy='hurr', cow='durr'),
|
||||
network_info, resize_instance=True)
|
||||
conn.finish_migration(self.context, instance,
|
||||
dict(base_copy='hurr', cow='durr'),
|
||||
network_info, resize_instance=True)
|
||||
|
||||
def test_finish_migrate_no_resize_vdi(self):
|
||||
instance = db.instance_create(self.context, self.values)
|
||||
@@ -874,8 +864,9 @@ class XenAPIMigrateInstance(test.TestCase):
|
||||
'rxtx_cap': 3})]
|
||||
|
||||
# Resize instance would be determined by the compute call
|
||||
conn.finish_migration(instance, dict(base_copy='hurr', cow='durr'),
|
||||
network_info, resize_instance=False)
|
||||
conn.finish_migration(self.context, instance,
|
||||
dict(base_copy='hurr', cow='durr'),
|
||||
network_info, resize_instance=False)
|
||||
|
||||
|
||||
class XenAPIImageTypeTestCase(test.TestCase):
|
||||
@@ -915,7 +906,6 @@ class XenAPIDetermineDiskImageTestCase(test.TestCase):
|
||||
|
||||
def test_instance_disk(self):
|
||||
"""If a kernel is specified, the image type is DISK (aka machine)."""
|
||||
FLAGS.xenapi_image_service = 'objectstore'
|
||||
self.fake_instance.image_ref = glance_stubs.FakeGlance.IMAGE_MACHINE
|
||||
self.fake_instance.kernel_id = glance_stubs.FakeGlance.IMAGE_KERNEL
|
||||
self.assert_disk_type(vm_utils.ImageType.DISK)
|
||||
@@ -925,7 +915,6 @@ class XenAPIDetermineDiskImageTestCase(test.TestCase):
|
||||
If the kernel isn't specified, and we're not using Glance, then
|
||||
DISK_RAW is assumed.
|
||||
"""
|
||||
FLAGS.xenapi_image_service = 'objectstore'
|
||||
self.fake_instance.image_ref = glance_stubs.FakeGlance.IMAGE_RAW
|
||||
self.fake_instance.kernel_id = None
|
||||
self.assert_disk_type(vm_utils.ImageType.DISK_RAW)
|
||||
@@ -935,7 +924,6 @@ class XenAPIDetermineDiskImageTestCase(test.TestCase):
|
||||
If we're using Glance, then defer to the image_type field, which in
|
||||
this case will be 'raw'.
|
||||
"""
|
||||
FLAGS.xenapi_image_service = 'glance'
|
||||
self.fake_instance.image_ref = glance_stubs.FakeGlance.IMAGE_RAW
|
||||
self.fake_instance.kernel_id = None
|
||||
self.assert_disk_type(vm_utils.ImageType.DISK_RAW)
|
||||
@@ -945,7 +933,6 @@ class XenAPIDetermineDiskImageTestCase(test.TestCase):
|
||||
If we're using Glance, then defer to the image_type field, which in
|
||||
this case will be 'vhd'.
|
||||
"""
|
||||
FLAGS.xenapi_image_service = 'glance'
|
||||
self.fake_instance.image_ref = glance_stubs.FakeGlance.IMAGE_VHD
|
||||
self.fake_instance.kernel_id = None
|
||||
self.assert_disk_type(vm_utils.ImageType.DISK_VHD)
|
||||
|
@@ -28,8 +28,8 @@ from nova import utils
|
||||
|
||||
def stubout_instance_snapshot(stubs):
|
||||
@classmethod
|
||||
def fake_fetch_image(cls, session, instance_id, image, user, project,
|
||||
type):
|
||||
def fake_fetch_image(cls, context, session, instance_id, image, user,
|
||||
project, type):
|
||||
from nova.virt.xenapi.fake import create_vdi
|
||||
name_label = "instance-%s" % instance_id
|
||||
#TODO: create fake SR record
|
||||
@@ -227,7 +227,7 @@ def stub_out_vm_methods(stubs):
|
||||
def fake_release_bootlock(self, vm):
|
||||
pass
|
||||
|
||||
def fake_spawn_rescue(self, inst):
|
||||
def fake_spawn_rescue(self, context, inst, network_info):
|
||||
inst._rescue = False
|
||||
|
||||
stubs.Set(vmops.VMOps, "_shutdown", fake_shutdown)
|
||||
|
267
nova/twistd.py
267
nova/twistd.py
@@ -1,267 +0,0 @@
|
||||
# vim: tabstop=4 shiftwidth=4 softtabstop=4
|
||||
|
||||
# Copyright 2010 United States Government as represented by the
|
||||
# Administrator of the National Aeronautics and Space Administration.
|
||||
# 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.
|
||||
|
||||
"""
|
||||
Twisted daemon helpers, specifically to parse out gFlags from twisted flags,
|
||||
manage pid files and support syslogging.
|
||||
"""
|
||||
|
||||
import gflags
|
||||
import os
|
||||
import signal
|
||||
import sys
|
||||
import time
|
||||
from twisted.scripts import twistd
|
||||
from twisted.python import log
|
||||
from twisted.python import reflect
|
||||
from twisted.python import runtime
|
||||
from twisted.python import usage
|
||||
|
||||
from nova import flags
|
||||
from nova import log as logging
|
||||
|
||||
|
||||
if runtime.platformType == "win32":
|
||||
from twisted.scripts._twistw import ServerOptions
|
||||
else:
|
||||
from twisted.scripts._twistd_unix import ServerOptions
|
||||
|
||||
|
||||
FLAGS = flags.FLAGS
|
||||
|
||||
|
||||
class TwistdServerOptions(ServerOptions):
|
||||
def parseArgs(self, *args):
|
||||
return
|
||||
|
||||
|
||||
class FlagParser(object):
|
||||
# this is a required attribute for gflags
|
||||
syntactic_help = ''
|
||||
|
||||
def __init__(self, parser):
|
||||
self.parser = parser
|
||||
|
||||
def Parse(self, s):
|
||||
return self.parser(s)
|
||||
|
||||
|
||||
def WrapTwistedOptions(wrapped):
|
||||
class TwistedOptionsToFlags(wrapped):
|
||||
subCommands = None
|
||||
|
||||
def __init__(self):
|
||||
# NOTE(termie): _data exists because Twisted stuff expects
|
||||
# to be able to set arbitrary things that are
|
||||
# not actual flags
|
||||
self._data = {}
|
||||
self._flagHandlers = {}
|
||||
self._paramHandlers = {}
|
||||
|
||||
# Absorb the twistd flags into our FLAGS
|
||||
self._absorbFlags()
|
||||
self._absorbParameters()
|
||||
self._absorbHandlers()
|
||||
|
||||
wrapped.__init__(self)
|
||||
|
||||
def _absorbFlags(self):
|
||||
twistd_flags = []
|
||||
reflect.accumulateClassList(self.__class__, 'optFlags',
|
||||
twistd_flags)
|
||||
for flag in twistd_flags:
|
||||
key = flag[0].replace('-', '_')
|
||||
if hasattr(FLAGS, key):
|
||||
continue
|
||||
flags.DEFINE_boolean(key, None, str(flag[-1]))
|
||||
|
||||
def _absorbParameters(self):
|
||||
twistd_params = []
|
||||
reflect.accumulateClassList(self.__class__, 'optParameters',
|
||||
twistd_params)
|
||||
for param in twistd_params:
|
||||
key = param[0].replace('-', '_')
|
||||
if hasattr(FLAGS, key):
|
||||
continue
|
||||
if len(param) > 4:
|
||||
flags.DEFINE(FlagParser(param[4]),
|
||||
key, param[2], str(param[3]),
|
||||
serializer=gflags.ArgumentSerializer())
|
||||
else:
|
||||
flags.DEFINE_string(key, param[2], str(param[3]))
|
||||
|
||||
def _absorbHandlers(self):
|
||||
twistd_handlers = {}
|
||||
reflect.addMethodNamesToDict(self.__class__, twistd_handlers,
|
||||
"opt_")
|
||||
|
||||
# NOTE(termie): Much of the following is derived/copied from
|
||||
# twisted.python.usage with the express purpose of
|
||||
# providing compatibility
|
||||
for name in twistd_handlers.keys():
|
||||
method = getattr(self, 'opt_' + name)
|
||||
|
||||
takesArg = not usage.flagFunction(method, name)
|
||||
doc = getattr(method, '__doc__', None)
|
||||
if not doc:
|
||||
doc = 'undocumented'
|
||||
|
||||
if not takesArg:
|
||||
if name not in FLAGS:
|
||||
flags.DEFINE_boolean(name, None, doc)
|
||||
self._flagHandlers[name] = method
|
||||
else:
|
||||
if name not in FLAGS:
|
||||
flags.DEFINE_string(name, None, doc)
|
||||
self._paramHandlers[name] = method
|
||||
|
||||
def _doHandlers(self):
|
||||
for flag, handler in self._flagHandlers.iteritems():
|
||||
if self[flag]:
|
||||
handler()
|
||||
for param, handler in self._paramHandlers.iteritems():
|
||||
if self[param] is not None:
|
||||
handler(self[param])
|
||||
|
||||
def __str__(self):
|
||||
return str(FLAGS)
|
||||
|
||||
def parseOptions(self, options=None):
|
||||
if options is None:
|
||||
options = sys.argv
|
||||
else:
|
||||
options.insert(0, '')
|
||||
|
||||
args = FLAGS(options)
|
||||
logging.setup()
|
||||
argv = args[1:]
|
||||
# ignore subcommands
|
||||
|
||||
try:
|
||||
self.parseArgs(*argv)
|
||||
except TypeError:
|
||||
raise usage.UsageError(_("Wrong number of arguments."))
|
||||
|
||||
self.postOptions()
|
||||
return args
|
||||
|
||||
def parseArgs(self, *args):
|
||||
# TODO(termie): figure out a decent way of dealing with args
|
||||
#return
|
||||
wrapped.parseArgs(self, *args)
|
||||
|
||||
def postOptions(self):
|
||||
self._doHandlers()
|
||||
|
||||
wrapped.postOptions(self)
|
||||
|
||||
def __getitem__(self, key):
|
||||
key = key.replace('-', '_')
|
||||
try:
|
||||
return getattr(FLAGS, key)
|
||||
except (AttributeError, KeyError):
|
||||
return self._data[key]
|
||||
|
||||
def __setitem__(self, key, value):
|
||||
key = key.replace('-', '_')
|
||||
try:
|
||||
return setattr(FLAGS, key, value)
|
||||
except (AttributeError, KeyError):
|
||||
self._data[key] = value
|
||||
|
||||
def get(self, key, default):
|
||||
key = key.replace('-', '_')
|
||||
try:
|
||||
return getattr(FLAGS, key)
|
||||
except (AttributeError, KeyError):
|
||||
self._data.get(key, default)
|
||||
|
||||
return TwistedOptionsToFlags
|
||||
|
||||
|
||||
def stop(pidfile):
|
||||
"""
|
||||
Stop the daemon
|
||||
"""
|
||||
# Get the pid from the pidfile
|
||||
try:
|
||||
pf = file(pidfile, 'r')
|
||||
pid = int(pf.read().strip())
|
||||
pf.close()
|
||||
except IOError:
|
||||
pid = None
|
||||
|
||||
if not pid:
|
||||
message = _("pidfile %s does not exist. Daemon not running?\n")
|
||||
sys.stderr.write(message % pidfile)
|
||||
# Not an error in a restart
|
||||
return
|
||||
|
||||
# Try killing the daemon process
|
||||
try:
|
||||
while 1:
|
||||
os.kill(pid, signal.SIGKILL)
|
||||
time.sleep(0.1)
|
||||
except OSError, err:
|
||||
err = str(err)
|
||||
if err.find(_("No such process")) > 0:
|
||||
if os.path.exists(pidfile):
|
||||
os.remove(pidfile)
|
||||
else:
|
||||
print str(err)
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
def serve(filename):
|
||||
logging.debug(_("Serving %s") % filename)
|
||||
name = os.path.basename(filename)
|
||||
OptionsClass = WrapTwistedOptions(TwistdServerOptions)
|
||||
options = OptionsClass()
|
||||
argv = options.parseOptions()
|
||||
FLAGS.python = filename
|
||||
FLAGS.no_save = True
|
||||
if not FLAGS.pidfile:
|
||||
FLAGS.pidfile = '%s.pid' % name
|
||||
elif FLAGS.pidfile.endswith('twistd.pid'):
|
||||
FLAGS.pidfile = FLAGS.pidfile.replace('twistd.pid', '%s.pid' % name)
|
||||
if not FLAGS.prefix:
|
||||
FLAGS.prefix = name
|
||||
elif FLAGS.prefix.endswith('twisted'):
|
||||
FLAGS.prefix = FLAGS.prefix.replace('twisted', name)
|
||||
|
||||
action = 'start'
|
||||
if len(argv) > 1:
|
||||
action = argv.pop()
|
||||
|
||||
if action == 'stop':
|
||||
stop(FLAGS.pidfile)
|
||||
sys.exit()
|
||||
elif action == 'restart':
|
||||
stop(FLAGS.pidfile)
|
||||
elif action == 'start':
|
||||
pass
|
||||
else:
|
||||
print 'usage: %s [options] [start|stop|restart]' % argv[0]
|
||||
sys.exit(1)
|
||||
|
||||
logging.debug(_("Full set of FLAGS:"))
|
||||
for flag in FLAGS:
|
||||
logging.debug("%s : %s" % (flag, FLAGS.get(flag, None)))
|
||||
|
||||
logging.audit(_("Starting %s"), name)
|
||||
twistd.runApp(options)
|
59
po/ast.po
59
po/ast.po
@@ -125,33 +125,6 @@ msgstr ""
|
||||
msgid "compute.api::resume %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/twistd.py:157
|
||||
msgid "Wrong number of arguments."
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/twistd.py:209
|
||||
#, python-format
|
||||
msgid "pidfile %s does not exist. Daemon not running?\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/twistd.py:221
|
||||
msgid "No such process"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/twistd.py:230 ../nova/service.py:224
|
||||
#, python-format
|
||||
msgid "Serving %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/twistd.py:262 ../nova/service.py:225
|
||||
msgid "Full set of FLAGS:"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/twistd.py:266
|
||||
#, python-format
|
||||
msgid "Starting %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/virt/xenapi/volumeops.py:48 ../nova/virt/xenapi/volumeops.py:101
|
||||
#: ../nova/db/sqlalchemy/api.py:731 ../nova/virt/libvirt_conn.py:741
|
||||
#: ../nova/api/ec2/__init__.py:317
|
||||
@@ -1778,34 +1751,6 @@ msgstr ""
|
||||
msgid "Got exception: %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:259
|
||||
#, python-format
|
||||
msgid "updating %s..."
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:289
|
||||
msgid "unexpected error during update"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:356
|
||||
#, python-format
|
||||
msgid "Cannot get blockstats for \"%(disk)s\" on \"%(iid)s\""
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:379
|
||||
#, python-format
|
||||
msgid "Cannot get ifstats for \"%(interface)s\" on \"%(iid)s\""
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:414
|
||||
msgid "unexpected exception getting connection"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:429
|
||||
#, python-format
|
||||
msgid "Found instance: %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/volume/san.py:67
|
||||
#, python-format
|
||||
msgid "Could not find iSCSI export for volume %s"
|
||||
@@ -2263,10 +2208,6 @@ msgstr ""
|
||||
msgid "You must implement __call__"
|
||||
msgstr ""
|
||||
|
||||
#: ../bin/nova-instancemonitor.py:55
|
||||
msgid "Starting instance monitor"
|
||||
msgstr ""
|
||||
|
||||
#: ../bin/nova-dhcpbridge.py:58
|
||||
msgid "leasing ip"
|
||||
msgstr ""
|
||||
|
59
po/cs.po
59
po/cs.po
@@ -125,33 +125,6 @@ msgstr ""
|
||||
msgid "compute.api::resume %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/twistd.py:157
|
||||
msgid "Wrong number of arguments."
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/twistd.py:209
|
||||
#, python-format
|
||||
msgid "pidfile %s does not exist. Daemon not running?\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/twistd.py:221
|
||||
msgid "No such process"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/twistd.py:230 ../nova/service.py:224
|
||||
#, python-format
|
||||
msgid "Serving %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/twistd.py:262 ../nova/service.py:225
|
||||
msgid "Full set of FLAGS:"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/twistd.py:266
|
||||
#, python-format
|
||||
msgid "Starting %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/virt/xenapi/volumeops.py:48 ../nova/virt/xenapi/volumeops.py:101
|
||||
#: ../nova/db/sqlalchemy/api.py:731 ../nova/virt/libvirt_conn.py:741
|
||||
#: ../nova/api/ec2/__init__.py:317
|
||||
@@ -1778,34 +1751,6 @@ msgstr ""
|
||||
msgid "Got exception: %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:259
|
||||
#, python-format
|
||||
msgid "updating %s..."
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:289
|
||||
msgid "unexpected error during update"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:356
|
||||
#, python-format
|
||||
msgid "Cannot get blockstats for \"%(disk)s\" on \"%(iid)s\""
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:379
|
||||
#, python-format
|
||||
msgid "Cannot get ifstats for \"%(interface)s\" on \"%(iid)s\""
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:414
|
||||
msgid "unexpected exception getting connection"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:429
|
||||
#, python-format
|
||||
msgid "Found instance: %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/volume/san.py:67
|
||||
#, python-format
|
||||
msgid "Could not find iSCSI export for volume %s"
|
||||
@@ -2265,10 +2210,6 @@ msgstr ""
|
||||
msgid "You must implement __call__"
|
||||
msgstr ""
|
||||
|
||||
#: ../bin/nova-instancemonitor.py:55
|
||||
msgid "Starting instance monitor"
|
||||
msgstr ""
|
||||
|
||||
#: ../bin/nova-dhcpbridge.py:58
|
||||
msgid "leasing ip"
|
||||
msgstr ""
|
||||
|
59
po/da.po
59
po/da.po
@@ -125,33 +125,6 @@ msgstr ""
|
||||
msgid "compute.api::resume %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/twistd.py:157
|
||||
msgid "Wrong number of arguments."
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/twistd.py:209
|
||||
#, python-format
|
||||
msgid "pidfile %s does not exist. Daemon not running?\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/twistd.py:221
|
||||
msgid "No such process"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/twistd.py:230 ../nova/service.py:224
|
||||
#, python-format
|
||||
msgid "Serving %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/twistd.py:262 ../nova/service.py:225
|
||||
msgid "Full set of FLAGS:"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/twistd.py:266
|
||||
#, python-format
|
||||
msgid "Starting %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/virt/xenapi/volumeops.py:48 ../nova/virt/xenapi/volumeops.py:101
|
||||
#: ../nova/db/sqlalchemy/api.py:731 ../nova/virt/libvirt_conn.py:741
|
||||
#: ../nova/api/ec2/__init__.py:317
|
||||
@@ -1778,34 +1751,6 @@ msgstr ""
|
||||
msgid "Got exception: %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:259
|
||||
#, python-format
|
||||
msgid "updating %s..."
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:289
|
||||
msgid "unexpected error during update"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:356
|
||||
#, python-format
|
||||
msgid "Cannot get blockstats for \"%(disk)s\" on \"%(iid)s\""
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:379
|
||||
#, python-format
|
||||
msgid "Cannot get ifstats for \"%(interface)s\" on \"%(iid)s\""
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:414
|
||||
msgid "unexpected exception getting connection"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:429
|
||||
#, python-format
|
||||
msgid "Found instance: %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/volume/san.py:67
|
||||
#, python-format
|
||||
msgid "Could not find iSCSI export for volume %s"
|
||||
@@ -2263,10 +2208,6 @@ msgstr ""
|
||||
msgid "You must implement __call__"
|
||||
msgstr ""
|
||||
|
||||
#: ../bin/nova-instancemonitor.py:55
|
||||
msgid "Starting instance monitor"
|
||||
msgstr ""
|
||||
|
||||
#: ../bin/nova-dhcpbridge.py:58
|
||||
msgid "leasing ip"
|
||||
msgstr ""
|
||||
|
59
po/de.po
59
po/de.po
@@ -131,33 +131,6 @@ msgstr ""
|
||||
msgid "compute.api::resume %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/twistd.py:157
|
||||
msgid "Wrong number of arguments."
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/twistd.py:209
|
||||
#, python-format
|
||||
msgid "pidfile %s does not exist. Daemon not running?\n"
|
||||
msgstr "PID-Datei %s existiert nicht. Läuft der Daemon nicht?\n"
|
||||
|
||||
#: ../nova/twistd.py:221
|
||||
msgid "No such process"
|
||||
msgstr "Kein passender Prozess gefunden"
|
||||
|
||||
#: ../nova/twistd.py:230 ../nova/service.py:224
|
||||
#, python-format
|
||||
msgid "Serving %s"
|
||||
msgstr "Bedient %s"
|
||||
|
||||
#: ../nova/twistd.py:262 ../nova/service.py:225
|
||||
msgid "Full set of FLAGS:"
|
||||
msgstr "Alle vorhandenen FLAGS:"
|
||||
|
||||
#: ../nova/twistd.py:266
|
||||
#, python-format
|
||||
msgid "Starting %s"
|
||||
msgstr "%s wird gestartet"
|
||||
|
||||
#: ../nova/virt/xenapi/volumeops.py:48 ../nova/virt/xenapi/volumeops.py:101
|
||||
#: ../nova/db/sqlalchemy/api.py:731 ../nova/virt/libvirt_conn.py:741
|
||||
#: ../nova/api/ec2/__init__.py:317
|
||||
@@ -1785,34 +1758,6 @@ msgstr ""
|
||||
msgid "Got exception: %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:259
|
||||
#, python-format
|
||||
msgid "updating %s..."
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:289
|
||||
msgid "unexpected error during update"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:356
|
||||
#, python-format
|
||||
msgid "Cannot get blockstats for \"%(disk)s\" on \"%(iid)s\""
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:379
|
||||
#, python-format
|
||||
msgid "Cannot get ifstats for \"%(interface)s\" on \"%(iid)s\""
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:414
|
||||
msgid "unexpected exception getting connection"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:429
|
||||
#, python-format
|
||||
msgid "Found instance: %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/volume/san.py:67
|
||||
#, python-format
|
||||
msgid "Could not find iSCSI export for volume %s"
|
||||
@@ -2270,10 +2215,6 @@ msgstr ""
|
||||
msgid "You must implement __call__"
|
||||
msgstr ""
|
||||
|
||||
#: ../bin/nova-instancemonitor.py:55
|
||||
msgid "Starting instance monitor"
|
||||
msgstr ""
|
||||
|
||||
#: ../bin/nova-dhcpbridge.py:58
|
||||
msgid "leasing ip"
|
||||
msgstr ""
|
||||
|
59
po/en_AU.po
59
po/en_AU.po
@@ -125,33 +125,6 @@ msgstr ""
|
||||
msgid "compute.api::resume %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/twistd.py:157
|
||||
msgid "Wrong number of arguments."
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/twistd.py:209
|
||||
#, python-format
|
||||
msgid "pidfile %s does not exist. Daemon not running?\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/twistd.py:221
|
||||
msgid "No such process"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/twistd.py:230 ../nova/service.py:224
|
||||
#, python-format
|
||||
msgid "Serving %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/twistd.py:262 ../nova/service.py:225
|
||||
msgid "Full set of FLAGS:"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/twistd.py:266
|
||||
#, python-format
|
||||
msgid "Starting %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/virt/xenapi/volumeops.py:48 ../nova/virt/xenapi/volumeops.py:101
|
||||
#: ../nova/db/sqlalchemy/api.py:731 ../nova/virt/libvirt_conn.py:741
|
||||
#: ../nova/api/ec2/__init__.py:317
|
||||
@@ -1778,34 +1751,6 @@ msgstr ""
|
||||
msgid "Got exception: %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:259
|
||||
#, python-format
|
||||
msgid "updating %s..."
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:289
|
||||
msgid "unexpected error during update"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:356
|
||||
#, python-format
|
||||
msgid "Cannot get blockstats for \"%(disk)s\" on \"%(iid)s\""
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:379
|
||||
#, python-format
|
||||
msgid "Cannot get ifstats for \"%(interface)s\" on \"%(iid)s\""
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:414
|
||||
msgid "unexpected exception getting connection"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:429
|
||||
#, python-format
|
||||
msgid "Found instance: %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/volume/san.py:67
|
||||
#, python-format
|
||||
msgid "Could not find iSCSI export for volume %s"
|
||||
@@ -2263,10 +2208,6 @@ msgstr ""
|
||||
msgid "You must implement __call__"
|
||||
msgstr ""
|
||||
|
||||
#: ../bin/nova-instancemonitor.py:55
|
||||
msgid "Starting instance monitor"
|
||||
msgstr ""
|
||||
|
||||
#: ../bin/nova-dhcpbridge.py:58
|
||||
msgid "leasing ip"
|
||||
msgstr ""
|
||||
|
59
po/en_GB.po
59
po/en_GB.po
@@ -130,33 +130,6 @@ msgstr "compute.api::suspend %s"
|
||||
msgid "compute.api::resume %s"
|
||||
msgstr "compute.api::resume %s"
|
||||
|
||||
#: ../nova/twistd.py:157
|
||||
msgid "Wrong number of arguments."
|
||||
msgstr "Wrong number of arguments."
|
||||
|
||||
#: ../nova/twistd.py:209
|
||||
#, python-format
|
||||
msgid "pidfile %s does not exist. Daemon not running?\n"
|
||||
msgstr "pidfile %s does not exist. Daemon not running?\n"
|
||||
|
||||
#: ../nova/twistd.py:221
|
||||
msgid "No such process"
|
||||
msgstr "No such process"
|
||||
|
||||
#: ../nova/twistd.py:230 ../nova/service.py:224
|
||||
#, python-format
|
||||
msgid "Serving %s"
|
||||
msgstr "Serving %s"
|
||||
|
||||
#: ../nova/twistd.py:262 ../nova/service.py:225
|
||||
msgid "Full set of FLAGS:"
|
||||
msgstr "Full set of FLAGS:"
|
||||
|
||||
#: ../nova/twistd.py:266
|
||||
#, python-format
|
||||
msgid "Starting %s"
|
||||
msgstr "Starting %s"
|
||||
|
||||
#: ../nova/virt/xenapi/volumeops.py:48 ../nova/virt/xenapi/volumeops.py:101
|
||||
#: ../nova/db/sqlalchemy/api.py:731 ../nova/virt/libvirt_conn.py:741
|
||||
#: ../nova/api/ec2/__init__.py:317
|
||||
@@ -1803,34 +1776,6 @@ msgstr ""
|
||||
msgid "Got exception: %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:259
|
||||
#, python-format
|
||||
msgid "updating %s..."
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:289
|
||||
msgid "unexpected error during update"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:356
|
||||
#, python-format
|
||||
msgid "Cannot get blockstats for \"%(disk)s\" on \"%(iid)s\""
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:379
|
||||
#, python-format
|
||||
msgid "Cannot get ifstats for \"%(interface)s\" on \"%(iid)s\""
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:414
|
||||
msgid "unexpected exception getting connection"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:429
|
||||
#, python-format
|
||||
msgid "Found instance: %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/volume/san.py:67
|
||||
#, python-format
|
||||
msgid "Could not find iSCSI export for volume %s"
|
||||
@@ -2288,10 +2233,6 @@ msgstr ""
|
||||
msgid "You must implement __call__"
|
||||
msgstr ""
|
||||
|
||||
#: ../bin/nova-instancemonitor.py:55
|
||||
msgid "Starting instance monitor"
|
||||
msgstr ""
|
||||
|
||||
#: ../bin/nova-dhcpbridge.py:58
|
||||
msgid "leasing ip"
|
||||
msgstr ""
|
||||
|
59
po/es.po
59
po/es.po
@@ -130,33 +130,6 @@ msgstr "compute.api::suspend %s"
|
||||
msgid "compute.api::resume %s"
|
||||
msgstr "compute.api::resume %s"
|
||||
|
||||
#: ../nova/twistd.py:157
|
||||
msgid "Wrong number of arguments."
|
||||
msgstr "Cantidad de argumentos incorrecta"
|
||||
|
||||
#: ../nova/twistd.py:209
|
||||
#, python-format
|
||||
msgid "pidfile %s does not exist. Daemon not running?\n"
|
||||
msgstr "El \"pidfile\" %s no existe. Quizás el servicio no este corriendo.\n"
|
||||
|
||||
#: ../nova/twistd.py:221
|
||||
msgid "No such process"
|
||||
msgstr "No existe el proceso"
|
||||
|
||||
#: ../nova/twistd.py:230 ../nova/service.py:224
|
||||
#, python-format
|
||||
msgid "Serving %s"
|
||||
msgstr "Sirviendo %s"
|
||||
|
||||
#: ../nova/twistd.py:262 ../nova/service.py:225
|
||||
msgid "Full set of FLAGS:"
|
||||
msgstr "Conjunto completo de opciones (FLAGS):"
|
||||
|
||||
#: ../nova/twistd.py:266
|
||||
#, python-format
|
||||
msgid "Starting %s"
|
||||
msgstr "Iniciando %s"
|
||||
|
||||
#: ../nova/virt/xenapi/volumeops.py:48 ../nova/virt/xenapi/volumeops.py:101
|
||||
#: ../nova/db/sqlalchemy/api.py:731 ../nova/virt/libvirt_conn.py:741
|
||||
#: ../nova/api/ec2/__init__.py:317
|
||||
@@ -1819,34 +1792,6 @@ msgstr ""
|
||||
msgid "Got exception: %s"
|
||||
msgstr "Obtenida excepción %s"
|
||||
|
||||
#: ../nova/compute/monitor.py:259
|
||||
#, python-format
|
||||
msgid "updating %s..."
|
||||
msgstr "actualizando %s..."
|
||||
|
||||
#: ../nova/compute/monitor.py:289
|
||||
msgid "unexpected error during update"
|
||||
msgstr "error inesperado durante la actualización"
|
||||
|
||||
#: ../nova/compute/monitor.py:356
|
||||
#, python-format
|
||||
msgid "Cannot get blockstats for \"%(disk)s\" on \"%(iid)s\""
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:379
|
||||
#, python-format
|
||||
msgid "Cannot get ifstats for \"%(interface)s\" on \"%(iid)s\""
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:414
|
||||
msgid "unexpected exception getting connection"
|
||||
msgstr "excepción inexperada al obtener la conexión"
|
||||
|
||||
#: ../nova/compute/monitor.py:429
|
||||
#, python-format
|
||||
msgid "Found instance: %s"
|
||||
msgstr "Encontrada interfaz: %s"
|
||||
|
||||
#: ../nova/volume/san.py:67
|
||||
#, python-format
|
||||
msgid "Could not find iSCSI export for volume %s"
|
||||
@@ -2309,10 +2254,6 @@ msgstr ""
|
||||
msgid "You must implement __call__"
|
||||
msgstr ""
|
||||
|
||||
#: ../bin/nova-instancemonitor.py:55
|
||||
msgid "Starting instance monitor"
|
||||
msgstr ""
|
||||
|
||||
#: ../bin/nova-dhcpbridge.py:58
|
||||
msgid "leasing ip"
|
||||
msgstr ""
|
||||
|
61
po/fr.po
61
po/fr.po
@@ -133,35 +133,6 @@ msgstr "compute.api::suspend %s"
|
||||
msgid "compute.api::resume %s"
|
||||
msgstr "compute.api::resume %s"
|
||||
|
||||
#: ../nova/twistd.py:157
|
||||
msgid "Wrong number of arguments."
|
||||
msgstr "Nombre d'arguments incorrect."
|
||||
|
||||
#: ../nova/twistd.py:209
|
||||
#, python-format
|
||||
msgid "pidfile %s does not exist. Daemon not running?\n"
|
||||
msgstr ""
|
||||
"Le fichier pid %s n'existe pas. Est-ce que le processus est en cours "
|
||||
"d'exécution ?\n"
|
||||
|
||||
#: ../nova/twistd.py:221
|
||||
msgid "No such process"
|
||||
msgstr "Aucun processus de ce type"
|
||||
|
||||
#: ../nova/twistd.py:230 ../nova/service.py:224
|
||||
#, python-format
|
||||
msgid "Serving %s"
|
||||
msgstr "En train de servir %s"
|
||||
|
||||
#: ../nova/twistd.py:262 ../nova/service.py:225
|
||||
msgid "Full set of FLAGS:"
|
||||
msgstr "Ensemble de propriétés complet :"
|
||||
|
||||
#: ../nova/twistd.py:266
|
||||
#, python-format
|
||||
msgid "Starting %s"
|
||||
msgstr "Démarrage de %s"
|
||||
|
||||
#: ../nova/virt/xenapi/volumeops.py:48 ../nova/virt/xenapi/volumeops.py:101
|
||||
#: ../nova/db/sqlalchemy/api.py:731 ../nova/virt/libvirt_conn.py:741
|
||||
#: ../nova/api/ec2/__init__.py:317
|
||||
@@ -1865,34 +1836,6 @@ msgstr "Tâche [%(name)s] %(task)s état : %(status)s %(error_info)s"
|
||||
msgid "Got exception: %s"
|
||||
msgstr "Reçu exception : %s"
|
||||
|
||||
#: ../nova/compute/monitor.py:259
|
||||
#, python-format
|
||||
msgid "updating %s..."
|
||||
msgstr "mise à jour %s..."
|
||||
|
||||
#: ../nova/compute/monitor.py:289
|
||||
msgid "unexpected error during update"
|
||||
msgstr "erreur inopinée pendant la ise à jour"
|
||||
|
||||
#: ../nova/compute/monitor.py:356
|
||||
#, python-format
|
||||
msgid "Cannot get blockstats for \"%(disk)s\" on \"%(iid)s\""
|
||||
msgstr "Ne peut pas récupérer blockstats pour \"%(disk)s\" sur \"%(iid)s\""
|
||||
|
||||
#: ../nova/compute/monitor.py:379
|
||||
#, python-format
|
||||
msgid "Cannot get ifstats for \"%(interface)s\" on \"%(iid)s\""
|
||||
msgstr "Ne peut pas récupérer ifstats pour \"%(interface)s\" sur \"%(iid)s\""
|
||||
|
||||
#: ../nova/compute/monitor.py:414
|
||||
msgid "unexpected exception getting connection"
|
||||
msgstr "erreur inopinée pendant la connexion"
|
||||
|
||||
#: ../nova/compute/monitor.py:429
|
||||
#, python-format
|
||||
msgid "Found instance: %s"
|
||||
msgstr "Instance trouvée : %s"
|
||||
|
||||
#: ../nova/volume/san.py:67
|
||||
#, python-format
|
||||
msgid "Could not find iSCSI export for volume %s"
|
||||
@@ -2373,10 +2316,6 @@ msgstr "Démarrage %(arg0)s sur %(host)s:%(port)s"
|
||||
msgid "You must implement __call__"
|
||||
msgstr "Vous devez implémenter __call__"
|
||||
|
||||
#: ../bin/nova-instancemonitor.py:55
|
||||
msgid "Starting instance monitor"
|
||||
msgstr "Démarrage du superviseur d'instance"
|
||||
|
||||
#: ../bin/nova-dhcpbridge.py:58
|
||||
msgid "leasing ip"
|
||||
msgstr "Allocation IP"
|
||||
|
60
po/it.po
60
po/it.po
@@ -134,34 +134,6 @@ msgstr "compute.api::suspend %s"
|
||||
msgid "compute.api::resume %s"
|
||||
msgstr "compute.api::resume %s"
|
||||
|
||||
#: ../nova/twistd.py:157
|
||||
msgid "Wrong number of arguments."
|
||||
msgstr "Numero errato di argomenti"
|
||||
|
||||
#: ../nova/twistd.py:209
|
||||
#, python-format
|
||||
msgid "pidfile %s does not exist. Daemon not running?\n"
|
||||
msgstr ""
|
||||
"Il pidfile %s non esiste. Assicurarsi che il demone é in esecuzione.\n"
|
||||
|
||||
#: ../nova/twistd.py:221
|
||||
msgid "No such process"
|
||||
msgstr "Nessun processo trovato"
|
||||
|
||||
#: ../nova/twistd.py:230 ../nova/service.py:224
|
||||
#, python-format
|
||||
msgid "Serving %s"
|
||||
msgstr "Servire %s"
|
||||
|
||||
#: ../nova/twistd.py:262 ../nova/service.py:225
|
||||
msgid "Full set of FLAGS:"
|
||||
msgstr "Insieme di FLAGS:"
|
||||
|
||||
#: ../nova/twistd.py:266
|
||||
#, python-format
|
||||
msgid "Starting %s"
|
||||
msgstr "Avvio di %s"
|
||||
|
||||
#: ../nova/virt/xenapi/volumeops.py:48 ../nova/virt/xenapi/volumeops.py:101
|
||||
#: ../nova/db/sqlalchemy/api.py:731 ../nova/virt/libvirt_conn.py:741
|
||||
#: ../nova/api/ec2/__init__.py:317
|
||||
@@ -1791,34 +1763,6 @@ msgstr ""
|
||||
msgid "Got exception: %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:259
|
||||
#, python-format
|
||||
msgid "updating %s..."
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:289
|
||||
msgid "unexpected error during update"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:356
|
||||
#, python-format
|
||||
msgid "Cannot get blockstats for \"%(disk)s\" on \"%(iid)s\""
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:379
|
||||
#, python-format
|
||||
msgid "Cannot get ifstats for \"%(interface)s\" on \"%(iid)s\""
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:414
|
||||
msgid "unexpected exception getting connection"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:429
|
||||
#, python-format
|
||||
msgid "Found instance: %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/volume/san.py:67
|
||||
#, python-format
|
||||
msgid "Could not find iSCSI export for volume %s"
|
||||
@@ -2278,10 +2222,6 @@ msgstr ""
|
||||
msgid "You must implement __call__"
|
||||
msgstr ""
|
||||
|
||||
#: ../bin/nova-instancemonitor.py:55
|
||||
msgid "Starting instance monitor"
|
||||
msgstr ""
|
||||
|
||||
#: ../bin/nova-dhcpbridge.py:58
|
||||
msgid "leasing ip"
|
||||
msgstr ""
|
||||
|
59
po/ja.po
59
po/ja.po
@@ -130,33 +130,6 @@ msgstr "例外: compute.api::suspend %s"
|
||||
msgid "compute.api::resume %s"
|
||||
msgstr "例外: compute.api::resume %s"
|
||||
|
||||
#: ../nova/twistd.py:157
|
||||
msgid "Wrong number of arguments."
|
||||
msgstr "引数の数が異なります。"
|
||||
|
||||
#: ../nova/twistd.py:209
|
||||
#, python-format
|
||||
msgid "pidfile %s does not exist. Daemon not running?\n"
|
||||
msgstr "pidfile %s が存在しません。デーモンは実行中ですか?\n"
|
||||
|
||||
#: ../nova/twistd.py:221
|
||||
msgid "No such process"
|
||||
msgstr "そのようなプロセスはありません"
|
||||
|
||||
#: ../nova/twistd.py:230 ../nova/service.py:224
|
||||
#, python-format
|
||||
msgid "Serving %s"
|
||||
msgstr "%s サービスの開始"
|
||||
|
||||
#: ../nova/twistd.py:262 ../nova/service.py:225
|
||||
msgid "Full set of FLAGS:"
|
||||
msgstr "FLAGSの一覧:"
|
||||
|
||||
#: ../nova/twistd.py:266
|
||||
#, python-format
|
||||
msgid "Starting %s"
|
||||
msgstr "%s を起動中"
|
||||
|
||||
#: ../nova/virt/xenapi/volumeops.py:48 ../nova/virt/xenapi/volumeops.py:101
|
||||
#: ../nova/db/sqlalchemy/api.py:731 ../nova/virt/libvirt_conn.py:741
|
||||
#: ../nova/api/ec2/__init__.py:317
|
||||
@@ -1808,34 +1781,6 @@ msgstr "タスク [%(name)s] %(task)s 状態: %(status)s %(error_info)s"
|
||||
msgid "Got exception: %s"
|
||||
msgstr "例外 %s が発生しました。"
|
||||
|
||||
#: ../nova/compute/monitor.py:259
|
||||
#, python-format
|
||||
msgid "updating %s..."
|
||||
msgstr "%s の情報の更新…"
|
||||
|
||||
#: ../nova/compute/monitor.py:289
|
||||
msgid "unexpected error during update"
|
||||
msgstr "更新の最中に予期しないエラーが発生しました。"
|
||||
|
||||
#: ../nova/compute/monitor.py:356
|
||||
#, python-format
|
||||
msgid "Cannot get blockstats for \"%(disk)s\" on \"%(iid)s\""
|
||||
msgstr "\"%(iid)s\" 上の \"%(disk)s\" 用のブロック統計(blockstats)が取得できません"
|
||||
|
||||
#: ../nova/compute/monitor.py:379
|
||||
#, python-format
|
||||
msgid "Cannot get ifstats for \"%(interface)s\" on \"%(iid)s\""
|
||||
msgstr "\"%(iid)s\" 上の %(interface)s\" 用インターフェース統計(ifstats)が取得できません"
|
||||
|
||||
#: ../nova/compute/monitor.py:414
|
||||
msgid "unexpected exception getting connection"
|
||||
msgstr "接続に際し予期しないエラーが発生しました。"
|
||||
|
||||
#: ../nova/compute/monitor.py:429
|
||||
#, python-format
|
||||
msgid "Found instance: %s"
|
||||
msgstr "インスタンス %s が見つかりました。"
|
||||
|
||||
#: ../nova/volume/san.py:67
|
||||
#, python-format
|
||||
msgid "Could not find iSCSI export for volume %s"
|
||||
@@ -2311,10 +2256,6 @@ msgstr "%(host)s:%(port)s 上で %(arg0)s を開始しています"
|
||||
msgid "You must implement __call__"
|
||||
msgstr "__call__ を実装しなければなりません"
|
||||
|
||||
#: ../bin/nova-instancemonitor.py:55
|
||||
msgid "Starting instance monitor"
|
||||
msgstr "インスタンスモニタを開始しています"
|
||||
|
||||
#: ../bin/nova-dhcpbridge.py:58
|
||||
msgid "leasing ip"
|
||||
msgstr "IP アドレスをリースしました"
|
||||
|
59
po/nova.pot
59
po/nova.pot
@@ -125,33 +125,6 @@ msgstr ""
|
||||
msgid "compute.api::resume %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/twistd.py:157
|
||||
msgid "Wrong number of arguments."
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/twistd.py:209
|
||||
#, python-format
|
||||
msgid "pidfile %s does not exist. Daemon not running?\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/twistd.py:221
|
||||
msgid "No such process"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/twistd.py:230 ../nova/service.py:224
|
||||
#, python-format
|
||||
msgid "Serving %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/twistd.py:262 ../nova/service.py:225
|
||||
msgid "Full set of FLAGS:"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/twistd.py:266
|
||||
#, python-format
|
||||
msgid "Starting %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/virt/xenapi/volumeops.py:48 ../nova/virt/xenapi/volumeops.py:101
|
||||
#: ../nova/db/sqlalchemy/api.py:731 ../nova/virt/libvirt_conn.py:741
|
||||
#: ../nova/api/ec2/__init__.py:317
|
||||
@@ -1778,34 +1751,6 @@ msgstr ""
|
||||
msgid "Got exception: %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:259
|
||||
#, python-format
|
||||
msgid "updating %s..."
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:289
|
||||
msgid "unexpected error during update"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:356
|
||||
#, python-format
|
||||
msgid "Cannot get blockstats for \"%(disk)s\" on \"%(iid)s\""
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:379
|
||||
#, python-format
|
||||
msgid "Cannot get ifstats for \"%(interface)s\" on \"%(iid)s\""
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:414
|
||||
msgid "unexpected exception getting connection"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:429
|
||||
#, python-format
|
||||
msgid "Found instance: %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/volume/san.py:67
|
||||
#, python-format
|
||||
msgid "Could not find iSCSI export for volume %s"
|
||||
@@ -2263,10 +2208,6 @@ msgstr ""
|
||||
msgid "You must implement __call__"
|
||||
msgstr ""
|
||||
|
||||
#: ../bin/nova-instancemonitor.py:55
|
||||
msgid "Starting instance monitor"
|
||||
msgstr ""
|
||||
|
||||
#: ../bin/nova-dhcpbridge.py:58
|
||||
msgid "leasing ip"
|
||||
msgstr ""
|
||||
|
60
po/pt_BR.po
60
po/pt_BR.po
@@ -126,34 +126,6 @@ msgstr "compute.api::suspend %s"
|
||||
msgid "compute.api::resume %s"
|
||||
msgstr "compute.api::resume %s"
|
||||
|
||||
#: ../nova/twistd.py:157
|
||||
msgid "Wrong number of arguments."
|
||||
msgstr "Número errado de argumentos."
|
||||
|
||||
#: ../nova/twistd.py:209
|
||||
#, python-format
|
||||
msgid "pidfile %s does not exist. Daemon not running?\n"
|
||||
msgstr ""
|
||||
"Arquivo do id do processo (pidfile) %s não existe. O Daemon está parado?\n"
|
||||
|
||||
#: ../nova/twistd.py:221
|
||||
msgid "No such process"
|
||||
msgstr "Processo inexistente"
|
||||
|
||||
#: ../nova/twistd.py:230 ../nova/service.py:224
|
||||
#, python-format
|
||||
msgid "Serving %s"
|
||||
msgstr "Servindo %s"
|
||||
|
||||
#: ../nova/twistd.py:262 ../nova/service.py:225
|
||||
msgid "Full set of FLAGS:"
|
||||
msgstr "Conjunto completo de FLAGS:"
|
||||
|
||||
#: ../nova/twistd.py:266
|
||||
#, python-format
|
||||
msgid "Starting %s"
|
||||
msgstr "Iniciando %s"
|
||||
|
||||
#: ../nova/virt/xenapi/volumeops.py:48 ../nova/virt/xenapi/volumeops.py:101
|
||||
#: ../nova/db/sqlalchemy/api.py:731 ../nova/virt/libvirt_conn.py:741
|
||||
#: ../nova/api/ec2/__init__.py:317
|
||||
@@ -1804,34 +1776,6 @@ msgstr ""
|
||||
msgid "Got exception: %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:259
|
||||
#, python-format
|
||||
msgid "updating %s..."
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:289
|
||||
msgid "unexpected error during update"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:356
|
||||
#, python-format
|
||||
msgid "Cannot get blockstats for \"%(disk)s\" on \"%(iid)s\""
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:379
|
||||
#, python-format
|
||||
msgid "Cannot get ifstats for \"%(interface)s\" on \"%(iid)s\""
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:414
|
||||
msgid "unexpected exception getting connection"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:429
|
||||
#, python-format
|
||||
msgid "Found instance: %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/volume/san.py:67
|
||||
#, python-format
|
||||
msgid "Could not find iSCSI export for volume %s"
|
||||
@@ -2290,10 +2234,6 @@ msgstr ""
|
||||
msgid "You must implement __call__"
|
||||
msgstr ""
|
||||
|
||||
#: ../bin/nova-instancemonitor.py:55
|
||||
msgid "Starting instance monitor"
|
||||
msgstr ""
|
||||
|
||||
#: ../bin/nova-dhcpbridge.py:58
|
||||
msgid "leasing ip"
|
||||
msgstr ""
|
||||
|
59
po/ru.po
59
po/ru.po
@@ -125,33 +125,6 @@ msgstr ""
|
||||
msgid "compute.api::resume %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/twistd.py:157
|
||||
msgid "Wrong number of arguments."
|
||||
msgstr "Неверное число аргументов."
|
||||
|
||||
#: ../nova/twistd.py:209
|
||||
#, python-format
|
||||
msgid "pidfile %s does not exist. Daemon not running?\n"
|
||||
msgstr "pidfile %s не обнаружен. Демон не запущен?\n"
|
||||
|
||||
#: ../nova/twistd.py:221
|
||||
msgid "No such process"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/twistd.py:230 ../nova/service.py:224
|
||||
#, python-format
|
||||
msgid "Serving %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/twistd.py:262 ../nova/service.py:225
|
||||
msgid "Full set of FLAGS:"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/twistd.py:266
|
||||
#, python-format
|
||||
msgid "Starting %s"
|
||||
msgstr "Запускается %s"
|
||||
|
||||
#: ../nova/virt/xenapi/volumeops.py:48 ../nova/virt/xenapi/volumeops.py:101
|
||||
#: ../nova/db/sqlalchemy/api.py:731 ../nova/virt/libvirt_conn.py:741
|
||||
#: ../nova/api/ec2/__init__.py:317
|
||||
@@ -1779,34 +1752,6 @@ msgstr ""
|
||||
msgid "Got exception: %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:259
|
||||
#, python-format
|
||||
msgid "updating %s..."
|
||||
msgstr "обновление %s..."
|
||||
|
||||
#: ../nova/compute/monitor.py:289
|
||||
msgid "unexpected error during update"
|
||||
msgstr "неожиданная ошибка во время обновления"
|
||||
|
||||
#: ../nova/compute/monitor.py:356
|
||||
#, python-format
|
||||
msgid "Cannot get blockstats for \"%(disk)s\" on \"%(iid)s\""
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:379
|
||||
#, python-format
|
||||
msgid "Cannot get ifstats for \"%(interface)s\" on \"%(iid)s\""
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:414
|
||||
msgid "unexpected exception getting connection"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:429
|
||||
#, python-format
|
||||
msgid "Found instance: %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/volume/san.py:67
|
||||
#, python-format
|
||||
msgid "Could not find iSCSI export for volume %s"
|
||||
@@ -2264,10 +2209,6 @@ msgstr ""
|
||||
msgid "You must implement __call__"
|
||||
msgstr ""
|
||||
|
||||
#: ../bin/nova-instancemonitor.py:55
|
||||
msgid "Starting instance monitor"
|
||||
msgstr ""
|
||||
|
||||
#: ../bin/nova-dhcpbridge.py:58
|
||||
msgid "leasing ip"
|
||||
msgstr ""
|
||||
|
59
po/tl.po
59
po/tl.po
@@ -125,33 +125,6 @@ msgstr ""
|
||||
msgid "compute.api::resume %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/twistd.py:157
|
||||
msgid "Wrong number of arguments."
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/twistd.py:209
|
||||
#, python-format
|
||||
msgid "pidfile %s does not exist. Daemon not running?\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/twistd.py:221
|
||||
msgid "No such process"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/twistd.py:230 ../nova/service.py:224
|
||||
#, python-format
|
||||
msgid "Serving %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/twistd.py:262 ../nova/service.py:225
|
||||
msgid "Full set of FLAGS:"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/twistd.py:266
|
||||
#, python-format
|
||||
msgid "Starting %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/virt/xenapi/volumeops.py:48 ../nova/virt/xenapi/volumeops.py:101
|
||||
#: ../nova/db/sqlalchemy/api.py:731 ../nova/virt/libvirt_conn.py:741
|
||||
#: ../nova/api/ec2/__init__.py:317
|
||||
@@ -1778,34 +1751,6 @@ msgstr ""
|
||||
msgid "Got exception: %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:259
|
||||
#, python-format
|
||||
msgid "updating %s..."
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:289
|
||||
msgid "unexpected error during update"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:356
|
||||
#, python-format
|
||||
msgid "Cannot get blockstats for \"%(disk)s\" on \"%(iid)s\""
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:379
|
||||
#, python-format
|
||||
msgid "Cannot get ifstats for \"%(interface)s\" on \"%(iid)s\""
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:414
|
||||
msgid "unexpected exception getting connection"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:429
|
||||
#, python-format
|
||||
msgid "Found instance: %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/volume/san.py:67
|
||||
#, python-format
|
||||
msgid "Could not find iSCSI export for volume %s"
|
||||
@@ -2265,10 +2210,6 @@ msgstr ""
|
||||
msgid "You must implement __call__"
|
||||
msgstr ""
|
||||
|
||||
#: ../bin/nova-instancemonitor.py:55
|
||||
msgid "Starting instance monitor"
|
||||
msgstr ""
|
||||
|
||||
#: ../bin/nova-dhcpbridge.py:58
|
||||
msgid "leasing ip"
|
||||
msgstr ""
|
||||
|
59
po/uk.po
59
po/uk.po
@@ -125,33 +125,6 @@ msgstr ""
|
||||
msgid "compute.api::resume %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/twistd.py:157
|
||||
msgid "Wrong number of arguments."
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/twistd.py:209
|
||||
#, python-format
|
||||
msgid "pidfile %s does not exist. Daemon not running?\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/twistd.py:221
|
||||
msgid "No such process"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/twistd.py:230 ../nova/service.py:224
|
||||
#, python-format
|
||||
msgid "Serving %s"
|
||||
msgstr "Обслуговування %s"
|
||||
|
||||
#: ../nova/twistd.py:262 ../nova/service.py:225
|
||||
msgid "Full set of FLAGS:"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/twistd.py:266
|
||||
#, python-format
|
||||
msgid "Starting %s"
|
||||
msgstr "Запускається %s"
|
||||
|
||||
#: ../nova/virt/xenapi/volumeops.py:48 ../nova/virt/xenapi/volumeops.py:101
|
||||
#: ../nova/db/sqlalchemy/api.py:731 ../nova/virt/libvirt_conn.py:741
|
||||
#: ../nova/api/ec2/__init__.py:317
|
||||
@@ -1778,34 +1751,6 @@ msgstr ""
|
||||
msgid "Got exception: %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:259
|
||||
#, python-format
|
||||
msgid "updating %s..."
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:289
|
||||
msgid "unexpected error during update"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:356
|
||||
#, python-format
|
||||
msgid "Cannot get blockstats for \"%(disk)s\" on \"%(iid)s\""
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:379
|
||||
#, python-format
|
||||
msgid "Cannot get ifstats for \"%(interface)s\" on \"%(iid)s\""
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:414
|
||||
msgid "unexpected exception getting connection"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:429
|
||||
#, python-format
|
||||
msgid "Found instance: %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/volume/san.py:67
|
||||
#, python-format
|
||||
msgid "Could not find iSCSI export for volume %s"
|
||||
@@ -2263,10 +2208,6 @@ msgstr ""
|
||||
msgid "You must implement __call__"
|
||||
msgstr ""
|
||||
|
||||
#: ../bin/nova-instancemonitor.py:55
|
||||
msgid "Starting instance monitor"
|
||||
msgstr ""
|
||||
|
||||
#: ../bin/nova-dhcpbridge.py:58
|
||||
msgid "leasing ip"
|
||||
msgstr ""
|
||||
|
59
po/zh_CN.po
59
po/zh_CN.po
@@ -17,11 +17,6 @@ msgstr ""
|
||||
"X-Launchpad-Export-Date: 2011-07-23 05:12+0000\n"
|
||||
"X-Generator: Launchpad (build 13405)\n"
|
||||
|
||||
#: ../nova/twistd.py:266
|
||||
#, python-format
|
||||
msgid "Starting %s"
|
||||
msgstr "启动 %s 中"
|
||||
|
||||
#: ../nova/scheduler/chance.py:37 ../nova/scheduler/zone.py:55
|
||||
#: ../nova/scheduler/simple.py:75 ../nova/scheduler/simple.py:110
|
||||
#: ../nova/scheduler/simple.py:122
|
||||
@@ -135,28 +130,6 @@ msgstr ""
|
||||
msgid "compute.api::resume %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/twistd.py:157
|
||||
msgid "Wrong number of arguments."
|
||||
msgstr "错误参数个数。"
|
||||
|
||||
#: ../nova/twistd.py:209
|
||||
#, python-format
|
||||
msgid "pidfile %s does not exist. Daemon not running?\n"
|
||||
msgstr "pidfile %s 不存在,守护进程是否运行?\n"
|
||||
|
||||
#: ../nova/twistd.py:221
|
||||
msgid "No such process"
|
||||
msgstr "没有该进程"
|
||||
|
||||
#: ../nova/twistd.py:230 ../nova/service.py:224
|
||||
#, python-format
|
||||
msgid "Serving %s"
|
||||
msgstr "正在为 %s 服务"
|
||||
|
||||
#: ../nova/twistd.py:262 ../nova/service.py:225
|
||||
msgid "Full set of FLAGS:"
|
||||
msgstr "FLAGS全集:"
|
||||
|
||||
#: ../nova/virt/xenapi/volumeops.py:48 ../nova/virt/xenapi/volumeops.py:101
|
||||
#: ../nova/db/sqlalchemy/api.py:731 ../nova/virt/libvirt_conn.py:741
|
||||
#: ../nova/api/ec2/__init__.py:317
|
||||
@@ -1785,34 +1758,6 @@ msgstr ""
|
||||
msgid "Got exception: %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:259
|
||||
#, python-format
|
||||
msgid "updating %s..."
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:289
|
||||
msgid "unexpected error during update"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:356
|
||||
#, python-format
|
||||
msgid "Cannot get blockstats for \"%(disk)s\" on \"%(iid)s\""
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:379
|
||||
#, python-format
|
||||
msgid "Cannot get ifstats for \"%(interface)s\" on \"%(iid)s\""
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:414
|
||||
msgid "unexpected exception getting connection"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:429
|
||||
#, python-format
|
||||
msgid "Found instance: %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/volume/san.py:67
|
||||
#, python-format
|
||||
msgid "Could not find iSCSI export for volume %s"
|
||||
@@ -2270,10 +2215,6 @@ msgstr ""
|
||||
msgid "You must implement __call__"
|
||||
msgstr ""
|
||||
|
||||
#: ../bin/nova-instancemonitor.py:55
|
||||
msgid "Starting instance monitor"
|
||||
msgstr ""
|
||||
|
||||
#: ../bin/nova-dhcpbridge.py:58
|
||||
msgid "leasing ip"
|
||||
msgstr ""
|
||||
|
59
po/zh_TW.po
59
po/zh_TW.po
@@ -125,33 +125,6 @@ msgstr ""
|
||||
msgid "compute.api::resume %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/twistd.py:157
|
||||
msgid "Wrong number of arguments."
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/twistd.py:209
|
||||
#, python-format
|
||||
msgid "pidfile %s does not exist. Daemon not running?\n"
|
||||
msgstr "pidfile %s 不存在. Daemon未啟動?\n"
|
||||
|
||||
#: ../nova/twistd.py:221
|
||||
msgid "No such process"
|
||||
msgstr "沒有此一程序"
|
||||
|
||||
#: ../nova/twistd.py:230 ../nova/service.py:224
|
||||
#, python-format
|
||||
msgid "Serving %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/twistd.py:262 ../nova/service.py:225
|
||||
msgid "Full set of FLAGS:"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/twistd.py:266
|
||||
#, python-format
|
||||
msgid "Starting %s"
|
||||
msgstr "正在啟動 %s"
|
||||
|
||||
#: ../nova/virt/xenapi/volumeops.py:48 ../nova/virt/xenapi/volumeops.py:101
|
||||
#: ../nova/db/sqlalchemy/api.py:731 ../nova/virt/libvirt_conn.py:741
|
||||
#: ../nova/api/ec2/__init__.py:317
|
||||
@@ -1778,34 +1751,6 @@ msgstr ""
|
||||
msgid "Got exception: %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:259
|
||||
#, python-format
|
||||
msgid "updating %s..."
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:289
|
||||
msgid "unexpected error during update"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:356
|
||||
#, python-format
|
||||
msgid "Cannot get blockstats for \"%(disk)s\" on \"%(iid)s\""
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:379
|
||||
#, python-format
|
||||
msgid "Cannot get ifstats for \"%(interface)s\" on \"%(iid)s\""
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:414
|
||||
msgid "unexpected exception getting connection"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/compute/monitor.py:429
|
||||
#, python-format
|
||||
msgid "Found instance: %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../nova/volume/san.py:67
|
||||
#, python-format
|
||||
msgid "Could not find iSCSI export for volume %s"
|
||||
@@ -2263,10 +2208,6 @@ msgstr ""
|
||||
msgid "You must implement __call__"
|
||||
msgstr ""
|
||||
|
||||
#: ../bin/nova-instancemonitor.py:55
|
||||
msgid "Starting instance monitor"
|
||||
msgstr ""
|
||||
|
||||
#: ../bin/nova-dhcpbridge.py:58
|
||||
msgid "leasing ip"
|
||||
msgstr ""
|
||||
|
Reference in New Issue
Block a user