removing compute monitor
This commit is contained in:
@@ -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':
|
if level == 'ERROR':
|
||||||
self.handle_logged_error(line)
|
self.handle_logged_error(line)
|
||||||
elif level == '[-]' and self.last_error:
|
elif level == '[-]' and self.last_error:
|
||||||
# twisted stack trace line
|
|
||||||
clean_line = " ".join(line.split(" ")[6:])
|
clean_line = " ".join(line.split(" ")[6:])
|
||||||
self.last_error.trace = self.last_error.trace + clean_line
|
self.last_error.trace = self.last_error.trace + clean_line
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Twisted daemon for nova objectstore. Supports S3 API.
|
Daemon for nova objectstore. Supports S3 API.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import gettext
|
import gettext
|
||||||
|
|||||||
@@ -75,7 +75,7 @@ if [ "$CMD" == "install" ]; then
|
|||||||
sudo modprobe kvm
|
sudo modprobe kvm
|
||||||
sudo /etc/init.d/libvirt-bin restart
|
sudo /etc/init.d/libvirt-bin restart
|
||||||
sudo modprobe nbd
|
sudo modprobe nbd
|
||||||
sudo apt-get install -y python-twisted python-mox python-ipy python-paste
|
sudo apt-get install -y python-mox python-ipy python-paste
|
||||||
sudo apt-get install -y python-migrate python-gflags python-greenlet
|
sudo apt-get install -y python-migrate python-gflags python-greenlet
|
||||||
sudo apt-get install -y python-libvirt python-libxml2 python-routes
|
sudo apt-get install -y python-libvirt python-libxml2 python-routes
|
||||||
sudo apt-get install -y python-netaddr python-pastedeploy python-eventlet
|
sudo apt-get install -y python-netaddr python-pastedeploy python-eventlet
|
||||||
|
|||||||
@@ -26,7 +26,6 @@
|
|||||||
nova..compute.api.rst
|
nova..compute.api.rst
|
||||||
nova..compute.instance_types.rst
|
nova..compute.instance_types.rst
|
||||||
nova..compute.manager.rst
|
nova..compute.manager.rst
|
||||||
nova..compute.monitor.rst
|
|
||||||
nova..compute.power_state.rst
|
nova..compute.power_state.rst
|
||||||
nova..console.api.rst
|
nova..console.api.rst
|
||||||
nova..console.fake.rst
|
nova..console.fake.rst
|
||||||
@@ -115,13 +114,11 @@
|
|||||||
nova..tests.test_scheduler.rst
|
nova..tests.test_scheduler.rst
|
||||||
nova..tests.test_service.rst
|
nova..tests.test_service.rst
|
||||||
nova..tests.test_test.rst
|
nova..tests.test_test.rst
|
||||||
nova..tests.test_twistd.rst
|
|
||||||
nova..tests.test_utils.rst
|
nova..tests.test_utils.rst
|
||||||
nova..tests.test_virt.rst
|
nova..tests.test_virt.rst
|
||||||
nova..tests.test_volume.rst
|
nova..tests.test_volume.rst
|
||||||
nova..tests.test_xenapi.rst
|
nova..tests.test_xenapi.rst
|
||||||
nova..tests.xenapi.stubs.rst
|
nova..tests.xenapi.stubs.rst
|
||||||
nova..twistd.rst
|
|
||||||
nova..utils.rst
|
nova..utils.rst
|
||||||
nova..version.rst
|
nova..version.rst
|
||||||
nova..virt.connection.rst
|
nova..virt.connection.rst
|
||||||
|
|||||||
@@ -1,6 +0,0 @@
|
|||||||
The :mod:`nova..compute.monitor` Module
|
|
||||||
==============================================================================
|
|
||||||
.. automodule:: nova..compute.monitor
|
|
||||||
:members:
|
|
||||||
:undoc-members:
|
|
||||||
:show-inheritance:
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
The :mod:`nova..tests.test_twistd` Module
|
|
||||||
==============================================================================
|
|
||||||
.. automodule:: nova..tests.test_twistd
|
|
||||||
:members:
|
|
||||||
:undoc-members:
|
|
||||||
:show-inheritance:
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
The :mod:`nova..twistd` Module
|
|
||||||
==============================================================================
|
|
||||||
.. automodule:: nova..twistd
|
|
||||||
:members:
|
|
||||||
:undoc-members:
|
|
||||||
:show-inheritance:
|
|
||||||
@@ -21,7 +21,6 @@ Generating source/api/nova..cloudpipe.pipelib.rst
|
|||||||
Generating source/api/nova..compute.disk.rst
|
Generating source/api/nova..compute.disk.rst
|
||||||
Generating source/api/nova..compute.instance_types.rst
|
Generating source/api/nova..compute.instance_types.rst
|
||||||
Generating source/api/nova..compute.manager.rst
|
Generating source/api/nova..compute.manager.rst
|
||||||
Generating source/api/nova..compute.monitor.rst
|
|
||||||
Generating source/api/nova..compute.power_state.rst
|
Generating source/api/nova..compute.power_state.rst
|
||||||
Generating source/api/nova..context.rst
|
Generating source/api/nova..context.rst
|
||||||
Generating source/api/nova..crypto.rst
|
Generating source/api/nova..crypto.rst
|
||||||
@@ -79,11 +78,9 @@ Generating source/api/nova..tests.rpc_unittest.rst
|
|||||||
Generating source/api/nova..tests.runtime_flags.rst
|
Generating source/api/nova..tests.runtime_flags.rst
|
||||||
Generating source/api/nova..tests.scheduler_unittest.rst
|
Generating source/api/nova..tests.scheduler_unittest.rst
|
||||||
Generating source/api/nova..tests.service_unittest.rst
|
Generating source/api/nova..tests.service_unittest.rst
|
||||||
Generating source/api/nova..tests.twistd_unittest.rst
|
|
||||||
Generating source/api/nova..tests.validator_unittest.rst
|
Generating source/api/nova..tests.validator_unittest.rst
|
||||||
Generating source/api/nova..tests.virt_unittest.rst
|
Generating source/api/nova..tests.virt_unittest.rst
|
||||||
Generating source/api/nova..tests.volume_unittest.rst
|
Generating source/api/nova..tests.volume_unittest.rst
|
||||||
Generating source/api/nova..twistd.rst
|
|
||||||
Generating source/api/nova..utils.rst
|
Generating source/api/nova..utils.rst
|
||||||
Generating source/api/nova..validate.rst
|
Generating source/api/nova..validate.rst
|
||||||
Generating source/api/nova..virt.connection.rst
|
Generating source/api/nova..virt.connection.rst
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ Below you will find a helpful explanation of the different components.
|
|||||||
* Web Dashboard: potential external component that talks to the api
|
* Web Dashboard: potential external component that talks to the api
|
||||||
* api: component that receives http requests, converts commands and communicates with other components via the queue or http (in the case of objectstore)
|
* api: component that receives http requests, converts commands and communicates with other components via the queue or http (in the case of objectstore)
|
||||||
* Auth Manager: component responsible for users/projects/and roles. Can backend to DB or LDAP. This is not a separate binary, but rather a python class that is used by most components in the system.
|
* Auth Manager: component responsible for users/projects/and roles. Can backend to DB or LDAP. This is not a separate binary, but rather a python class that is used by most components in the system.
|
||||||
* objectstore: twisted http server that replicates s3 api and allows storage and retrieval of images
|
* objectstore: http server that replicates s3 api and allows storage and retrieval of images
|
||||||
* scheduler: decides which host gets each vm and volume
|
* scheduler: decides which host gets each vm and volume
|
||||||
* volume: manages dynamically attachable block devices.
|
* volume: manages dynamically attachable block devices.
|
||||||
* network: manages ip forwarding, bridges, and vlans
|
* network: manages ip forwarding, bridges, and vlans
|
||||||
|
|||||||
@@ -118,19 +118,6 @@ The :mod:`nova.virt.fake` Driver
|
|||||||
:show-inheritance:
|
:show-inheritance:
|
||||||
|
|
||||||
|
|
||||||
Monitoring
|
|
||||||
----------
|
|
||||||
|
|
||||||
The :mod:`nova.compute.monitor` Module
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
.. automodule:: nova.compute.monitor
|
|
||||||
:noindex:
|
|
||||||
:members:
|
|
||||||
:undoc-members:
|
|
||||||
:show-inheritance:
|
|
||||||
|
|
||||||
|
|
||||||
Tests
|
Tests
|
||||||
-----
|
-----
|
||||||
|
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ To activate the Nova virtualenv for the extent of your current shell session
|
|||||||
|
|
||||||
Also, make test will automatically use the virtualenv.
|
Also, make test will automatically use the virtualenv.
|
||||||
|
|
||||||
If you don't want to create a virtualenv every time you branch (which takes a while as long as we have the large Twisted project as a dependency) you can reuse a single virtualenv for all branches.
|
If you don't want to create a virtualenv every time you branch you can reuse a single virtualenv for all branches.
|
||||||
|
|
||||||
#. If you don't have a nova/ directory containing trunk/ and other branches, do so now.
|
#. If you don't have a nova/ directory containing trunk/ and other branches, do so now.
|
||||||
#. Go into nova/trunk and install a virtualenv.
|
#. Go into nova/trunk and install a virtualenv.
|
||||||
|
|||||||
@@ -102,16 +102,6 @@ The :mod:`nova.test` Module
|
|||||||
:show-inheritance:
|
:show-inheritance:
|
||||||
|
|
||||||
|
|
||||||
The :mod:`nova.twistd` Module
|
|
||||||
-----------------------------
|
|
||||||
|
|
||||||
.. automodule:: nova.twistd
|
|
||||||
:noindex:
|
|
||||||
:members:
|
|
||||||
:undoc-members:
|
|
||||||
:show-inheritance:
|
|
||||||
|
|
||||||
|
|
||||||
The :mod:`nova.utils` Module
|
The :mod:`nova.utils` Module
|
||||||
----------------------------
|
----------------------------
|
||||||
|
|
||||||
@@ -215,16 +205,6 @@ The :mod:`runtime_flags` Module
|
|||||||
:show-inheritance:
|
:show-inheritance:
|
||||||
|
|
||||||
|
|
||||||
The :mod:`twistd_unittest` Module
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
.. automodule:: nova.tests.twistd_unittest
|
|
||||||
:noindex:
|
|
||||||
:members:
|
|
||||||
:undoc-members:
|
|
||||||
:show-inheritance:
|
|
||||||
|
|
||||||
|
|
||||||
The :mod:`validator_unittest` Module
|
The :mod:`validator_unittest` Module
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
|||||||
@@ -1,435 +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.
|
|
||||||
|
|
||||||
"""
|
|
||||||
Instance Monitoring:
|
|
||||||
|
|
||||||
Optionally may be run on each compute node. Provides RRD
|
|
||||||
based statistics and graphs and makes them internally available
|
|
||||||
in the object store.
|
|
||||||
"""
|
|
||||||
|
|
||||||
import datetime
|
|
||||||
import os
|
|
||||||
import time
|
|
||||||
|
|
||||||
import boto
|
|
||||||
import boto.s3
|
|
||||||
import rrdtool
|
|
||||||
from twisted.internet import task
|
|
||||||
from twisted.application import service
|
|
||||||
|
|
||||||
from nova import flags
|
|
||||||
from nova import log as logging
|
|
||||||
from nova import utils
|
|
||||||
from nova.virt import connection as virt_connection
|
|
||||||
|
|
||||||
|
|
||||||
FLAGS = flags.FLAGS
|
|
||||||
flags.DEFINE_integer('monitoring_instances_delay', 5,
|
|
||||||
'Sleep time between updates')
|
|
||||||
flags.DEFINE_integer('monitoring_instances_step', 300,
|
|
||||||
'Interval of RRD updates')
|
|
||||||
flags.DEFINE_string('monitoring_rrd_path', '$state_path/monitor/instances',
|
|
||||||
'Location of RRD files')
|
|
||||||
|
|
||||||
|
|
||||||
RRD_VALUES = {
|
|
||||||
'cpu': [
|
|
||||||
'DS:cpu:GAUGE:600:0:100',
|
|
||||||
'RRA:AVERAGE:0.5:1:800',
|
|
||||||
'RRA:AVERAGE:0.5:6:800',
|
|
||||||
'RRA:AVERAGE:0.5:24:800',
|
|
||||||
'RRA:AVERAGE:0.5:288:800',
|
|
||||||
'RRA:MAX:0.5:1:800',
|
|
||||||
'RRA:MAX:0.5:6:800',
|
|
||||||
'RRA:MAX:0.5:24:800',
|
|
||||||
'RRA:MAX:0.5:288:800',
|
|
||||||
],
|
|
||||||
'net': [
|
|
||||||
'DS:rx:COUNTER:600:0:1250000',
|
|
||||||
'DS:tx:COUNTER:600:0:1250000',
|
|
||||||
'RRA:AVERAGE:0.5:1:800',
|
|
||||||
'RRA:AVERAGE:0.5:6:800',
|
|
||||||
'RRA:AVERAGE:0.5:24:800',
|
|
||||||
'RRA:AVERAGE:0.5:288:800',
|
|
||||||
'RRA:MAX:0.5:1:800',
|
|
||||||
'RRA:MAX:0.5:6:800',
|
|
||||||
'RRA:MAX:0.5:24:800',
|
|
||||||
'RRA:MAX:0.5:288:800',
|
|
||||||
],
|
|
||||||
'disk': [
|
|
||||||
'DS:rd:COUNTER:600:U:U',
|
|
||||||
'DS:wr:COUNTER:600:U:U',
|
|
||||||
'RRA:AVERAGE:0.5:1:800',
|
|
||||||
'RRA:AVERAGE:0.5:6:800',
|
|
||||||
'RRA:AVERAGE:0.5:24:800',
|
|
||||||
'RRA:AVERAGE:0.5:288:800',
|
|
||||||
'RRA:MAX:0.5:1:800',
|
|
||||||
'RRA:MAX:0.5:6:800',
|
|
||||||
'RRA:MAX:0.5:24:800',
|
|
||||||
'RRA:MAX:0.5:444:800',
|
|
||||||
]}
|
|
||||||
|
|
||||||
|
|
||||||
utcnow = utils.utcnow
|
|
||||||
|
|
||||||
|
|
||||||
LOG = logging.getLogger('nova.compute.monitor')
|
|
||||||
|
|
||||||
|
|
||||||
def update_rrd(instance, name, data):
|
|
||||||
"""
|
|
||||||
Updates the specified RRD file.
|
|
||||||
"""
|
|
||||||
filename = os.path.join(instance.get_rrd_path(), '%s.rrd' % name)
|
|
||||||
|
|
||||||
if not os.path.exists(filename):
|
|
||||||
init_rrd(instance, name)
|
|
||||||
|
|
||||||
timestamp = int(time.mktime(utcnow().timetuple()))
|
|
||||||
rrdtool.update(filename, '%d:%s' % (timestamp, data))
|
|
||||||
|
|
||||||
|
|
||||||
def init_rrd(instance, name):
|
|
||||||
"""
|
|
||||||
Initializes the specified RRD file.
|
|
||||||
"""
|
|
||||||
path = os.path.join(FLAGS.monitoring_rrd_path, instance.instance_id)
|
|
||||||
|
|
||||||
if not os.path.exists(path):
|
|
||||||
os.makedirs(path)
|
|
||||||
|
|
||||||
filename = os.path.join(path, '%s.rrd' % name)
|
|
||||||
|
|
||||||
if not os.path.exists(filename):
|
|
||||||
rrdtool.create(
|
|
||||||
filename,
|
|
||||||
'--step', '%d' % FLAGS.monitoring_instances_step,
|
|
||||||
'--start', '0',
|
|
||||||
*RRD_VALUES[name])
|
|
||||||
|
|
||||||
|
|
||||||
def graph_cpu(instance, duration):
|
|
||||||
"""
|
|
||||||
Creates a graph of cpu usage for the specified instance and duration.
|
|
||||||
"""
|
|
||||||
path = instance.get_rrd_path()
|
|
||||||
filename = os.path.join(path, 'cpu-%s.png' % duration)
|
|
||||||
|
|
||||||
rrdtool.graph(
|
|
||||||
filename,
|
|
||||||
'--disable-rrdtool-tag',
|
|
||||||
'--imgformat', 'PNG',
|
|
||||||
'--width', '400',
|
|
||||||
'--height', '120',
|
|
||||||
'--start', 'now-%s' % duration,
|
|
||||||
'--vertical-label', '% cpu used',
|
|
||||||
'-l', '0',
|
|
||||||
'-u', '100',
|
|
||||||
'DEF:cpu=%s:cpu:AVERAGE' % os.path.join(path, 'cpu.rrd'),
|
|
||||||
'AREA:cpu#eacc00:% CPU',)
|
|
||||||
|
|
||||||
store_graph(instance.instance_id, filename)
|
|
||||||
|
|
||||||
|
|
||||||
def graph_net(instance, duration):
|
|
||||||
"""
|
|
||||||
Creates a graph of network usage for the specified instance and duration.
|
|
||||||
"""
|
|
||||||
path = instance.get_rrd_path()
|
|
||||||
filename = os.path.join(path, 'net-%s.png' % duration)
|
|
||||||
|
|
||||||
rrdtool.graph(
|
|
||||||
filename,
|
|
||||||
'--disable-rrdtool-tag',
|
|
||||||
'--imgformat', 'PNG',
|
|
||||||
'--width', '400',
|
|
||||||
'--height', '120',
|
|
||||||
'--start', 'now-%s' % duration,
|
|
||||||
'--vertical-label', 'bytes/s',
|
|
||||||
'--logarithmic',
|
|
||||||
'--units', 'si',
|
|
||||||
'--lower-limit', '1000',
|
|
||||||
'--rigid',
|
|
||||||
'DEF:rx=%s:rx:AVERAGE' % os.path.join(path, 'net.rrd'),
|
|
||||||
'DEF:tx=%s:tx:AVERAGE' % os.path.join(path, 'net.rrd'),
|
|
||||||
'AREA:rx#00FF00:In traffic',
|
|
||||||
'LINE1:tx#0000FF:Out traffic',)
|
|
||||||
|
|
||||||
store_graph(instance.instance_id, filename)
|
|
||||||
|
|
||||||
|
|
||||||
def graph_disk(instance, duration):
|
|
||||||
"""
|
|
||||||
Creates a graph of disk usage for the specified duration.
|
|
||||||
"""
|
|
||||||
path = instance.get_rrd_path()
|
|
||||||
filename = os.path.join(path, 'disk-%s.png' % duration)
|
|
||||||
|
|
||||||
rrdtool.graph(
|
|
||||||
filename,
|
|
||||||
'--disable-rrdtool-tag',
|
|
||||||
'--imgformat', 'PNG',
|
|
||||||
'--width', '400',
|
|
||||||
'--height', '120',
|
|
||||||
'--start', 'now-%s' % duration,
|
|
||||||
'--vertical-label', 'bytes/s',
|
|
||||||
'--logarithmic',
|
|
||||||
'--units', 'si',
|
|
||||||
'--lower-limit', '1000',
|
|
||||||
'--rigid',
|
|
||||||
'DEF:rd=%s:rd:AVERAGE' % os.path.join(path, 'disk.rrd'),
|
|
||||||
'DEF:wr=%s:wr:AVERAGE' % os.path.join(path, 'disk.rrd'),
|
|
||||||
'AREA:rd#00FF00:Read',
|
|
||||||
'LINE1:wr#0000FF:Write',)
|
|
||||||
|
|
||||||
store_graph(instance.instance_id, filename)
|
|
||||||
|
|
||||||
|
|
||||||
def store_graph(instance_id, filename):
|
|
||||||
"""
|
|
||||||
Transmits the specified graph file to internal object store on cloud
|
|
||||||
controller.
|
|
||||||
"""
|
|
||||||
# TODO(devcamcar): Need to use an asynchronous method to make this
|
|
||||||
# connection. If boto has some separate method that generates
|
|
||||||
# the request it would like to make and another method to parse
|
|
||||||
# the response we can make our own client that does the actual
|
|
||||||
# request and hands it off to the response parser.
|
|
||||||
s3 = boto.s3.connection.S3Connection(
|
|
||||||
aws_access_key_id=FLAGS.aws_access_key_id,
|
|
||||||
aws_secret_access_key=FLAGS.aws_secret_access_key,
|
|
||||||
is_secure=False,
|
|
||||||
calling_format=boto.s3.connection.OrdinaryCallingFormat(),
|
|
||||||
port=FLAGS.s3_port,
|
|
||||||
host=FLAGS.s3_host)
|
|
||||||
bucket_name = '_%s.monitor' % instance_id
|
|
||||||
|
|
||||||
# Object store isn't creating the bucket like it should currently
|
|
||||||
# when it is first requested, so have to catch and create manually.
|
|
||||||
try:
|
|
||||||
bucket = s3.get_bucket(bucket_name)
|
|
||||||
except Exception:
|
|
||||||
bucket = s3.create_bucket(bucket_name)
|
|
||||||
|
|
||||||
key = boto.s3.Key(bucket)
|
|
||||||
key.key = os.path.basename(filename)
|
|
||||||
key.set_contents_from_filename(filename)
|
|
||||||
|
|
||||||
|
|
||||||
class Instance(object):
|
|
||||||
def __init__(self, conn, instance_id):
|
|
||||||
self.conn = conn
|
|
||||||
self.instance_id = instance_id
|
|
||||||
self.last_updated = datetime.datetime.min
|
|
||||||
self.cputime = 0
|
|
||||||
self.cputime_last_updated = None
|
|
||||||
|
|
||||||
init_rrd(self, 'cpu')
|
|
||||||
init_rrd(self, 'net')
|
|
||||||
init_rrd(self, 'disk')
|
|
||||||
|
|
||||||
def needs_update(self):
|
|
||||||
"""
|
|
||||||
Indicates whether this instance is due to have its statistics updated.
|
|
||||||
"""
|
|
||||||
delta = utcnow() - self.last_updated
|
|
||||||
return delta.seconds >= FLAGS.monitoring_instances_step
|
|
||||||
|
|
||||||
def update(self):
|
|
||||||
"""
|
|
||||||
Updates the instances statistics and stores the resulting graphs
|
|
||||||
in the internal object store on the cloud controller.
|
|
||||||
"""
|
|
||||||
LOG.debug(_('updating %s...'), self.instance_id)
|
|
||||||
|
|
||||||
try:
|
|
||||||
data = self.fetch_cpu_stats()
|
|
||||||
if data is not None:
|
|
||||||
LOG.debug('CPU: %s', data)
|
|
||||||
update_rrd(self, 'cpu', data)
|
|
||||||
|
|
||||||
data = self.fetch_net_stats()
|
|
||||||
LOG.debug('NET: %s', data)
|
|
||||||
update_rrd(self, 'net', data)
|
|
||||||
|
|
||||||
data = self.fetch_disk_stats()
|
|
||||||
LOG.debug('DISK: %s', data)
|
|
||||||
update_rrd(self, 'disk', data)
|
|
||||||
|
|
||||||
# TODO(devcamcar): Turn these into pool.ProcessPool.execute() calls
|
|
||||||
# and make the methods @defer.inlineCallbacks.
|
|
||||||
graph_cpu(self, '1d')
|
|
||||||
graph_cpu(self, '1w')
|
|
||||||
graph_cpu(self, '1m')
|
|
||||||
|
|
||||||
graph_net(self, '1d')
|
|
||||||
graph_net(self, '1w')
|
|
||||||
graph_net(self, '1m')
|
|
||||||
|
|
||||||
graph_disk(self, '1d')
|
|
||||||
graph_disk(self, '1w')
|
|
||||||
graph_disk(self, '1m')
|
|
||||||
except Exception:
|
|
||||||
LOG.exception(_('unexpected error during update'))
|
|
||||||
|
|
||||||
self.last_updated = utcnow()
|
|
||||||
|
|
||||||
def get_rrd_path(self):
|
|
||||||
"""
|
|
||||||
Returns the path to where RRD files are stored.
|
|
||||||
"""
|
|
||||||
return os.path.join(FLAGS.monitoring_rrd_path, self.instance_id)
|
|
||||||
|
|
||||||
def fetch_cpu_stats(self):
|
|
||||||
"""
|
|
||||||
Returns cpu usage statistics for this instance.
|
|
||||||
"""
|
|
||||||
info = self.conn.get_info(self.instance_id)
|
|
||||||
|
|
||||||
# Get the previous values.
|
|
||||||
cputime_last = self.cputime
|
|
||||||
cputime_last_updated = self.cputime_last_updated
|
|
||||||
|
|
||||||
# Get the raw CPU time used in nanoseconds.
|
|
||||||
self.cputime = float(info['cpu_time'])
|
|
||||||
self.cputime_last_updated = utcnow()
|
|
||||||
|
|
||||||
LOG.debug('CPU: %d', self.cputime)
|
|
||||||
|
|
||||||
# Skip calculation on first pass. Need delta to get a meaningful value.
|
|
||||||
if cputime_last_updated is None:
|
|
||||||
return None
|
|
||||||
|
|
||||||
# Calculate the number of seconds between samples.
|
|
||||||
d = self.cputime_last_updated - cputime_last_updated
|
|
||||||
t = d.days * 86400 + d.seconds
|
|
||||||
|
|
||||||
LOG.debug('t = %d', t)
|
|
||||||
|
|
||||||
# Calculate change over time in number of nanoseconds of CPU time used.
|
|
||||||
cputime_delta = self.cputime - cputime_last
|
|
||||||
|
|
||||||
LOG.debug('cputime_delta = %s', cputime_delta)
|
|
||||||
|
|
||||||
# Get the number of virtual cpus in this domain.
|
|
||||||
vcpus = int(info['num_cpu'])
|
|
||||||
|
|
||||||
LOG.debug('vcpus = %d', vcpus)
|
|
||||||
|
|
||||||
# Calculate CPU % used and cap at 100.
|
|
||||||
return min(cputime_delta / (t * vcpus * 1.0e9) * 100, 100)
|
|
||||||
|
|
||||||
def fetch_disk_stats(self):
|
|
||||||
"""
|
|
||||||
Returns disk usage statistics for this instance.
|
|
||||||
"""
|
|
||||||
rd = 0
|
|
||||||
wr = 0
|
|
||||||
|
|
||||||
disks = self.conn.get_disks(self.instance_id)
|
|
||||||
|
|
||||||
# Aggregate the read and write totals.
|
|
||||||
for disk in disks:
|
|
||||||
try:
|
|
||||||
rd_req, rd_bytes, wr_req, wr_bytes, errs = \
|
|
||||||
self.conn.block_stats(self.instance_id, disk)
|
|
||||||
rd += rd_bytes
|
|
||||||
wr += wr_bytes
|
|
||||||
except TypeError:
|
|
||||||
iid = self.instance_id
|
|
||||||
LOG.error(_('Cannot get blockstats for "%(disk)s"'
|
|
||||||
' on "%(iid)s"') % locals())
|
|
||||||
raise
|
|
||||||
|
|
||||||
return '%d:%d' % (rd, wr)
|
|
||||||
|
|
||||||
def fetch_net_stats(self):
|
|
||||||
"""
|
|
||||||
Returns network usage statistics for this instance.
|
|
||||||
"""
|
|
||||||
rx = 0
|
|
||||||
tx = 0
|
|
||||||
|
|
||||||
interfaces = self.conn.get_interfaces(self.instance_id)
|
|
||||||
|
|
||||||
# Aggregate the in and out totals.
|
|
||||||
for interface in interfaces:
|
|
||||||
try:
|
|
||||||
stats = self.conn.interface_stats(self.instance_id, interface)
|
|
||||||
rx += stats[0]
|
|
||||||
tx += stats[4]
|
|
||||||
except TypeError:
|
|
||||||
iid = self.instance_id
|
|
||||||
LOG.error(_('Cannot get ifstats for "%(interface)s"'
|
|
||||||
' on "%(iid)s"') % locals())
|
|
||||||
raise
|
|
||||||
|
|
||||||
return '%d:%d' % (rx, tx)
|
|
||||||
|
|
||||||
|
|
||||||
class InstanceMonitor(object, service.Service):
|
|
||||||
"""
|
|
||||||
Monitors the running instances of the current machine.
|
|
||||||
"""
|
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
"""
|
|
||||||
Initialize the monitoring loop.
|
|
||||||
"""
|
|
||||||
self._instances = {}
|
|
||||||
self._loop = task.LoopingCall(self.updateInstances)
|
|
||||||
|
|
||||||
def startService(self):
|
|
||||||
self._instances = {}
|
|
||||||
self._loop.start(interval=FLAGS.monitoring_instances_delay)
|
|
||||||
service.Service.startService(self)
|
|
||||||
|
|
||||||
def stopService(self):
|
|
||||||
self._loop.stop()
|
|
||||||
service.Service.stopService(self)
|
|
||||||
|
|
||||||
def updateInstances(self):
|
|
||||||
"""
|
|
||||||
Update resource usage for all running instances.
|
|
||||||
"""
|
|
||||||
try:
|
|
||||||
conn = virt_connection.get_connection(read_only=True)
|
|
||||||
except Exception, exn:
|
|
||||||
LOG.exception(_('unexpected exception getting connection'))
|
|
||||||
time.sleep(FLAGS.monitoring_instances_delay)
|
|
||||||
return
|
|
||||||
|
|
||||||
domain_ids = conn.list_instances()
|
|
||||||
try:
|
|
||||||
self.updateInstances_(conn, domain_ids)
|
|
||||||
except Exception, exn:
|
|
||||||
LOG.exception('updateInstances_')
|
|
||||||
|
|
||||||
def updateInstances_(self, conn, domain_ids):
|
|
||||||
for domain_id in domain_ids:
|
|
||||||
if not domain_id in self._instances:
|
|
||||||
instance = Instance(conn, domain_id)
|
|
||||||
self._instances[domain_id] = instance
|
|
||||||
LOG.debug(_('Found instance: %s'), domain_id)
|
|
||||||
|
|
||||||
for key in self._instances.keys():
|
|
||||||
instance = self._instances[key]
|
|
||||||
if instance.needs_update():
|
|
||||||
instance.update()
|
|
||||||
@@ -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())
|
|
||||||
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)
|
|
||||||
@@ -340,8 +340,7 @@ class FakeConnection(driver.ComputeDriver):
|
|||||||
only useful for giving back to this layer as a parameter to
|
only useful for giving back to this layer as a parameter to
|
||||||
disk_stats). These IDs only need to be unique for a given instance.
|
disk_stats). These IDs only need to be unique for a given instance.
|
||||||
|
|
||||||
Note that this function takes an instance ID, not a
|
Note that this function takes an instance ID.
|
||||||
compute.service.Instance, so that it can be called by compute.monitor.
|
|
||||||
"""
|
"""
|
||||||
return ['A_DISK']
|
return ['A_DISK']
|
||||||
|
|
||||||
@@ -353,8 +352,7 @@ class FakeConnection(driver.ComputeDriver):
|
|||||||
interface_stats). These IDs only need to be unique for a given
|
interface_stats). These IDs only need to be unique for a given
|
||||||
instance.
|
instance.
|
||||||
|
|
||||||
Note that this function takes an instance ID, not a
|
Note that this function takes an instance ID.
|
||||||
compute.service.Instance, so that it can be called by compute.monitor.
|
|
||||||
"""
|
"""
|
||||||
return ['A_VIF']
|
return ['A_VIF']
|
||||||
|
|
||||||
@@ -374,8 +372,7 @@ class FakeConnection(driver.ComputeDriver):
|
|||||||
having to do the aggregation. On those platforms, this method is
|
having to do the aggregation. On those platforms, this method is
|
||||||
unused.
|
unused.
|
||||||
|
|
||||||
Note that this function takes an instance ID, not a
|
Note that this function takes an instance ID.
|
||||||
compute.service.Instance, so that it can be called by compute.monitor.
|
|
||||||
"""
|
"""
|
||||||
return [0L, 0L, 0L, 0L, None]
|
return [0L, 0L, 0L, 0L, None]
|
||||||
|
|
||||||
@@ -395,8 +392,7 @@ class FakeConnection(driver.ComputeDriver):
|
|||||||
having to do the aggregation. On those platforms, this method is
|
having to do the aggregation. On those platforms, this method is
|
||||||
unused.
|
unused.
|
||||||
|
|
||||||
Note that this function takes an instance ID, not a
|
Note that this function takes an instance ID.
|
||||||
compute.service.Instance, so that it can be called by compute.monitor.
|
|
||||||
"""
|
"""
|
||||||
return [0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L]
|
return [0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L]
|
||||||
|
|
||||||
|
|||||||
@@ -1087,8 +1087,7 @@ class LibvirtConnection(driver.ComputeDriver):
|
|||||||
|
|
||||||
def get_disks(self, instance_name):
|
def get_disks(self, instance_name):
|
||||||
"""
|
"""
|
||||||
Note that this function takes an instance name, not an Instance, so
|
Note that this function takes an instance name.
|
||||||
that it can be called by monitor.
|
|
||||||
|
|
||||||
Returns a list of all block devices for this domain.
|
Returns a list of all block devices for this domain.
|
||||||
"""
|
"""
|
||||||
@@ -1129,8 +1128,7 @@ class LibvirtConnection(driver.ComputeDriver):
|
|||||||
|
|
||||||
def get_interfaces(self, instance_name):
|
def get_interfaces(self, instance_name):
|
||||||
"""
|
"""
|
||||||
Note that this function takes an instance name, not an Instance, so
|
Note that this function takes an instance name.
|
||||||
that it can be called by monitor.
|
|
||||||
|
|
||||||
Returns a list of all network interfaces for this instance.
|
Returns a list of all network interfaces for this instance.
|
||||||
"""
|
"""
|
||||||
@@ -1345,16 +1343,14 @@ class LibvirtConnection(driver.ComputeDriver):
|
|||||||
|
|
||||||
def block_stats(self, instance_name, disk):
|
def block_stats(self, instance_name, disk):
|
||||||
"""
|
"""
|
||||||
Note that this function takes an instance name, not an Instance, so
|
Note that this function takes an instance name.
|
||||||
that it can be called by monitor.
|
|
||||||
"""
|
"""
|
||||||
domain = self._lookup_by_name(instance_name)
|
domain = self._lookup_by_name(instance_name)
|
||||||
return domain.blockStats(disk)
|
return domain.blockStats(disk)
|
||||||
|
|
||||||
def interface_stats(self, instance_name, interface):
|
def interface_stats(self, instance_name, interface):
|
||||||
"""
|
"""
|
||||||
Note that this function takes an instance name, not an Instance, so
|
Note that this function takes an instance name.
|
||||||
that it can be called by monitor.
|
|
||||||
"""
|
"""
|
||||||
domain = self._lookup_by_name(instance_name)
|
domain = self._lookup_by_name(instance_name)
|
||||||
return domain.interfaceStats(interface)
|
return domain.interfaceStats(interface)
|
||||||
|
|||||||
59
po/ast.po
59
po/ast.po
@@ -125,33 +125,6 @@ msgstr ""
|
|||||||
msgid "compute.api::resume %s"
|
msgid "compute.api::resume %s"
|
||||||
msgstr ""
|
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/virt/xenapi/volumeops.py:48 ../nova/virt/xenapi/volumeops.py:101
|
||||||
#: ../nova/db/sqlalchemy/api.py:731 ../nova/virt/libvirt_conn.py:741
|
#: ../nova/db/sqlalchemy/api.py:731 ../nova/virt/libvirt_conn.py:741
|
||||||
#: ../nova/api/ec2/__init__.py:317
|
#: ../nova/api/ec2/__init__.py:317
|
||||||
@@ -1778,34 +1751,6 @@ msgstr ""
|
|||||||
msgid "Got exception: %s"
|
msgid "Got exception: %s"
|
||||||
msgstr ""
|
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
|
#: ../nova/volume/san.py:67
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Could not find iSCSI export for volume %s"
|
msgid "Could not find iSCSI export for volume %s"
|
||||||
@@ -2263,10 +2208,6 @@ msgstr ""
|
|||||||
msgid "You must implement __call__"
|
msgid "You must implement __call__"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../bin/nova-instancemonitor.py:55
|
|
||||||
msgid "Starting instance monitor"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ../bin/nova-dhcpbridge.py:58
|
#: ../bin/nova-dhcpbridge.py:58
|
||||||
msgid "leasing ip"
|
msgid "leasing ip"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|||||||
59
po/cs.po
59
po/cs.po
@@ -125,33 +125,6 @@ msgstr ""
|
|||||||
msgid "compute.api::resume %s"
|
msgid "compute.api::resume %s"
|
||||||
msgstr ""
|
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/virt/xenapi/volumeops.py:48 ../nova/virt/xenapi/volumeops.py:101
|
||||||
#: ../nova/db/sqlalchemy/api.py:731 ../nova/virt/libvirt_conn.py:741
|
#: ../nova/db/sqlalchemy/api.py:731 ../nova/virt/libvirt_conn.py:741
|
||||||
#: ../nova/api/ec2/__init__.py:317
|
#: ../nova/api/ec2/__init__.py:317
|
||||||
@@ -1778,34 +1751,6 @@ msgstr ""
|
|||||||
msgid "Got exception: %s"
|
msgid "Got exception: %s"
|
||||||
msgstr ""
|
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
|
#: ../nova/volume/san.py:67
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Could not find iSCSI export for volume %s"
|
msgid "Could not find iSCSI export for volume %s"
|
||||||
@@ -2265,10 +2210,6 @@ msgstr ""
|
|||||||
msgid "You must implement __call__"
|
msgid "You must implement __call__"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../bin/nova-instancemonitor.py:55
|
|
||||||
msgid "Starting instance monitor"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ../bin/nova-dhcpbridge.py:58
|
#: ../bin/nova-dhcpbridge.py:58
|
||||||
msgid "leasing ip"
|
msgid "leasing ip"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|||||||
59
po/da.po
59
po/da.po
@@ -125,33 +125,6 @@ msgstr ""
|
|||||||
msgid "compute.api::resume %s"
|
msgid "compute.api::resume %s"
|
||||||
msgstr ""
|
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/virt/xenapi/volumeops.py:48 ../nova/virt/xenapi/volumeops.py:101
|
||||||
#: ../nova/db/sqlalchemy/api.py:731 ../nova/virt/libvirt_conn.py:741
|
#: ../nova/db/sqlalchemy/api.py:731 ../nova/virt/libvirt_conn.py:741
|
||||||
#: ../nova/api/ec2/__init__.py:317
|
#: ../nova/api/ec2/__init__.py:317
|
||||||
@@ -1778,34 +1751,6 @@ msgstr ""
|
|||||||
msgid "Got exception: %s"
|
msgid "Got exception: %s"
|
||||||
msgstr ""
|
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
|
#: ../nova/volume/san.py:67
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Could not find iSCSI export for volume %s"
|
msgid "Could not find iSCSI export for volume %s"
|
||||||
@@ -2263,10 +2208,6 @@ msgstr ""
|
|||||||
msgid "You must implement __call__"
|
msgid "You must implement __call__"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../bin/nova-instancemonitor.py:55
|
|
||||||
msgid "Starting instance monitor"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ../bin/nova-dhcpbridge.py:58
|
#: ../bin/nova-dhcpbridge.py:58
|
||||||
msgid "leasing ip"
|
msgid "leasing ip"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|||||||
59
po/de.po
59
po/de.po
@@ -131,33 +131,6 @@ msgstr ""
|
|||||||
msgid "compute.api::resume %s"
|
msgid "compute.api::resume %s"
|
||||||
msgstr ""
|
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/virt/xenapi/volumeops.py:48 ../nova/virt/xenapi/volumeops.py:101
|
||||||
#: ../nova/db/sqlalchemy/api.py:731 ../nova/virt/libvirt_conn.py:741
|
#: ../nova/db/sqlalchemy/api.py:731 ../nova/virt/libvirt_conn.py:741
|
||||||
#: ../nova/api/ec2/__init__.py:317
|
#: ../nova/api/ec2/__init__.py:317
|
||||||
@@ -1785,34 +1758,6 @@ msgstr ""
|
|||||||
msgid "Got exception: %s"
|
msgid "Got exception: %s"
|
||||||
msgstr ""
|
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
|
#: ../nova/volume/san.py:67
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Could not find iSCSI export for volume %s"
|
msgid "Could not find iSCSI export for volume %s"
|
||||||
@@ -2270,10 +2215,6 @@ msgstr ""
|
|||||||
msgid "You must implement __call__"
|
msgid "You must implement __call__"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../bin/nova-instancemonitor.py:55
|
|
||||||
msgid "Starting instance monitor"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ../bin/nova-dhcpbridge.py:58
|
#: ../bin/nova-dhcpbridge.py:58
|
||||||
msgid "leasing ip"
|
msgid "leasing ip"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|||||||
59
po/en_AU.po
59
po/en_AU.po
@@ -125,33 +125,6 @@ msgstr ""
|
|||||||
msgid "compute.api::resume %s"
|
msgid "compute.api::resume %s"
|
||||||
msgstr ""
|
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/virt/xenapi/volumeops.py:48 ../nova/virt/xenapi/volumeops.py:101
|
||||||
#: ../nova/db/sqlalchemy/api.py:731 ../nova/virt/libvirt_conn.py:741
|
#: ../nova/db/sqlalchemy/api.py:731 ../nova/virt/libvirt_conn.py:741
|
||||||
#: ../nova/api/ec2/__init__.py:317
|
#: ../nova/api/ec2/__init__.py:317
|
||||||
@@ -1778,34 +1751,6 @@ msgstr ""
|
|||||||
msgid "Got exception: %s"
|
msgid "Got exception: %s"
|
||||||
msgstr ""
|
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
|
#: ../nova/volume/san.py:67
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Could not find iSCSI export for volume %s"
|
msgid "Could not find iSCSI export for volume %s"
|
||||||
@@ -2263,10 +2208,6 @@ msgstr ""
|
|||||||
msgid "You must implement __call__"
|
msgid "You must implement __call__"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../bin/nova-instancemonitor.py:55
|
|
||||||
msgid "Starting instance monitor"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ../bin/nova-dhcpbridge.py:58
|
#: ../bin/nova-dhcpbridge.py:58
|
||||||
msgid "leasing ip"
|
msgid "leasing ip"
|
||||||
msgstr ""
|
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"
|
msgid "compute.api::resume %s"
|
||||||
msgstr "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/virt/xenapi/volumeops.py:48 ../nova/virt/xenapi/volumeops.py:101
|
||||||
#: ../nova/db/sqlalchemy/api.py:731 ../nova/virt/libvirt_conn.py:741
|
#: ../nova/db/sqlalchemy/api.py:731 ../nova/virt/libvirt_conn.py:741
|
||||||
#: ../nova/api/ec2/__init__.py:317
|
#: ../nova/api/ec2/__init__.py:317
|
||||||
@@ -1803,34 +1776,6 @@ msgstr ""
|
|||||||
msgid "Got exception: %s"
|
msgid "Got exception: %s"
|
||||||
msgstr ""
|
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
|
#: ../nova/volume/san.py:67
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Could not find iSCSI export for volume %s"
|
msgid "Could not find iSCSI export for volume %s"
|
||||||
@@ -2288,10 +2233,6 @@ msgstr ""
|
|||||||
msgid "You must implement __call__"
|
msgid "You must implement __call__"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../bin/nova-instancemonitor.py:55
|
|
||||||
msgid "Starting instance monitor"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ../bin/nova-dhcpbridge.py:58
|
#: ../bin/nova-dhcpbridge.py:58
|
||||||
msgid "leasing ip"
|
msgid "leasing ip"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|||||||
59
po/es.po
59
po/es.po
@@ -130,33 +130,6 @@ msgstr "compute.api::suspend %s"
|
|||||||
msgid "compute.api::resume %s"
|
msgid "compute.api::resume %s"
|
||||||
msgstr "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/virt/xenapi/volumeops.py:48 ../nova/virt/xenapi/volumeops.py:101
|
||||||
#: ../nova/db/sqlalchemy/api.py:731 ../nova/virt/libvirt_conn.py:741
|
#: ../nova/db/sqlalchemy/api.py:731 ../nova/virt/libvirt_conn.py:741
|
||||||
#: ../nova/api/ec2/__init__.py:317
|
#: ../nova/api/ec2/__init__.py:317
|
||||||
@@ -1819,34 +1792,6 @@ msgstr ""
|
|||||||
msgid "Got exception: %s"
|
msgid "Got exception: %s"
|
||||||
msgstr "Obtenida excepción %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
|
#: ../nova/volume/san.py:67
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Could not find iSCSI export for volume %s"
|
msgid "Could not find iSCSI export for volume %s"
|
||||||
@@ -2309,10 +2254,6 @@ msgstr ""
|
|||||||
msgid "You must implement __call__"
|
msgid "You must implement __call__"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../bin/nova-instancemonitor.py:55
|
|
||||||
msgid "Starting instance monitor"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ../bin/nova-dhcpbridge.py:58
|
#: ../bin/nova-dhcpbridge.py:58
|
||||||
msgid "leasing ip"
|
msgid "leasing ip"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|||||||
61
po/fr.po
61
po/fr.po
@@ -133,35 +133,6 @@ msgstr "compute.api::suspend %s"
|
|||||||
msgid "compute.api::resume %s"
|
msgid "compute.api::resume %s"
|
||||||
msgstr "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/virt/xenapi/volumeops.py:48 ../nova/virt/xenapi/volumeops.py:101
|
||||||
#: ../nova/db/sqlalchemy/api.py:731 ../nova/virt/libvirt_conn.py:741
|
#: ../nova/db/sqlalchemy/api.py:731 ../nova/virt/libvirt_conn.py:741
|
||||||
#: ../nova/api/ec2/__init__.py:317
|
#: ../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"
|
msgid "Got exception: %s"
|
||||||
msgstr "Reçu 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
|
#: ../nova/volume/san.py:67
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Could not find iSCSI export for volume %s"
|
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__"
|
msgid "You must implement __call__"
|
||||||
msgstr "Vous devez implémenter __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
|
#: ../bin/nova-dhcpbridge.py:58
|
||||||
msgid "leasing ip"
|
msgid "leasing ip"
|
||||||
msgstr "Allocation 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"
|
msgid "compute.api::resume %s"
|
||||||
msgstr "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/virt/xenapi/volumeops.py:48 ../nova/virt/xenapi/volumeops.py:101
|
||||||
#: ../nova/db/sqlalchemy/api.py:731 ../nova/virt/libvirt_conn.py:741
|
#: ../nova/db/sqlalchemy/api.py:731 ../nova/virt/libvirt_conn.py:741
|
||||||
#: ../nova/api/ec2/__init__.py:317
|
#: ../nova/api/ec2/__init__.py:317
|
||||||
@@ -1791,34 +1763,6 @@ msgstr ""
|
|||||||
msgid "Got exception: %s"
|
msgid "Got exception: %s"
|
||||||
msgstr ""
|
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
|
#: ../nova/volume/san.py:67
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Could not find iSCSI export for volume %s"
|
msgid "Could not find iSCSI export for volume %s"
|
||||||
@@ -2278,10 +2222,6 @@ msgstr ""
|
|||||||
msgid "You must implement __call__"
|
msgid "You must implement __call__"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../bin/nova-instancemonitor.py:55
|
|
||||||
msgid "Starting instance monitor"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ../bin/nova-dhcpbridge.py:58
|
#: ../bin/nova-dhcpbridge.py:58
|
||||||
msgid "leasing ip"
|
msgid "leasing ip"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|||||||
59
po/ja.po
59
po/ja.po
@@ -130,33 +130,6 @@ msgstr "例外: compute.api::suspend %s"
|
|||||||
msgid "compute.api::resume %s"
|
msgid "compute.api::resume %s"
|
||||||
msgstr "例外: 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/virt/xenapi/volumeops.py:48 ../nova/virt/xenapi/volumeops.py:101
|
||||||
#: ../nova/db/sqlalchemy/api.py:731 ../nova/virt/libvirt_conn.py:741
|
#: ../nova/db/sqlalchemy/api.py:731 ../nova/virt/libvirt_conn.py:741
|
||||||
#: ../nova/api/ec2/__init__.py:317
|
#: ../nova/api/ec2/__init__.py:317
|
||||||
@@ -1808,34 +1781,6 @@ msgstr "タスク [%(name)s] %(task)s 状態: %(status)s %(error_info)s"
|
|||||||
msgid "Got exception: %s"
|
msgid "Got exception: %s"
|
||||||
msgstr "例外 %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
|
#: ../nova/volume/san.py:67
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Could not find iSCSI export for volume %s"
|
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__"
|
msgid "You must implement __call__"
|
||||||
msgstr "__call__ を実装しなければなりません"
|
msgstr "__call__ を実装しなければなりません"
|
||||||
|
|
||||||
#: ../bin/nova-instancemonitor.py:55
|
|
||||||
msgid "Starting instance monitor"
|
|
||||||
msgstr "インスタンスモニタを開始しています"
|
|
||||||
|
|
||||||
#: ../bin/nova-dhcpbridge.py:58
|
#: ../bin/nova-dhcpbridge.py:58
|
||||||
msgid "leasing ip"
|
msgid "leasing ip"
|
||||||
msgstr "IP アドレスをリースしました"
|
msgstr "IP アドレスをリースしました"
|
||||||
|
|||||||
59
po/nova.pot
59
po/nova.pot
@@ -125,33 +125,6 @@ msgstr ""
|
|||||||
msgid "compute.api::resume %s"
|
msgid "compute.api::resume %s"
|
||||||
msgstr ""
|
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/virt/xenapi/volumeops.py:48 ../nova/virt/xenapi/volumeops.py:101
|
||||||
#: ../nova/db/sqlalchemy/api.py:731 ../nova/virt/libvirt_conn.py:741
|
#: ../nova/db/sqlalchemy/api.py:731 ../nova/virt/libvirt_conn.py:741
|
||||||
#: ../nova/api/ec2/__init__.py:317
|
#: ../nova/api/ec2/__init__.py:317
|
||||||
@@ -1778,34 +1751,6 @@ msgstr ""
|
|||||||
msgid "Got exception: %s"
|
msgid "Got exception: %s"
|
||||||
msgstr ""
|
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
|
#: ../nova/volume/san.py:67
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Could not find iSCSI export for volume %s"
|
msgid "Could not find iSCSI export for volume %s"
|
||||||
@@ -2263,10 +2208,6 @@ msgstr ""
|
|||||||
msgid "You must implement __call__"
|
msgid "You must implement __call__"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../bin/nova-instancemonitor.py:55
|
|
||||||
msgid "Starting instance monitor"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ../bin/nova-dhcpbridge.py:58
|
#: ../bin/nova-dhcpbridge.py:58
|
||||||
msgid "leasing ip"
|
msgid "leasing ip"
|
||||||
msgstr ""
|
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"
|
msgid "compute.api::resume %s"
|
||||||
msgstr "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/virt/xenapi/volumeops.py:48 ../nova/virt/xenapi/volumeops.py:101
|
||||||
#: ../nova/db/sqlalchemy/api.py:731 ../nova/virt/libvirt_conn.py:741
|
#: ../nova/db/sqlalchemy/api.py:731 ../nova/virt/libvirt_conn.py:741
|
||||||
#: ../nova/api/ec2/__init__.py:317
|
#: ../nova/api/ec2/__init__.py:317
|
||||||
@@ -1804,34 +1776,6 @@ msgstr ""
|
|||||||
msgid "Got exception: %s"
|
msgid "Got exception: %s"
|
||||||
msgstr ""
|
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
|
#: ../nova/volume/san.py:67
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Could not find iSCSI export for volume %s"
|
msgid "Could not find iSCSI export for volume %s"
|
||||||
@@ -2290,10 +2234,6 @@ msgstr ""
|
|||||||
msgid "You must implement __call__"
|
msgid "You must implement __call__"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../bin/nova-instancemonitor.py:55
|
|
||||||
msgid "Starting instance monitor"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ../bin/nova-dhcpbridge.py:58
|
#: ../bin/nova-dhcpbridge.py:58
|
||||||
msgid "leasing ip"
|
msgid "leasing ip"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|||||||
59
po/ru.po
59
po/ru.po
@@ -125,33 +125,6 @@ msgstr ""
|
|||||||
msgid "compute.api::resume %s"
|
msgid "compute.api::resume %s"
|
||||||
msgstr ""
|
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/virt/xenapi/volumeops.py:48 ../nova/virt/xenapi/volumeops.py:101
|
||||||
#: ../nova/db/sqlalchemy/api.py:731 ../nova/virt/libvirt_conn.py:741
|
#: ../nova/db/sqlalchemy/api.py:731 ../nova/virt/libvirt_conn.py:741
|
||||||
#: ../nova/api/ec2/__init__.py:317
|
#: ../nova/api/ec2/__init__.py:317
|
||||||
@@ -1779,34 +1752,6 @@ msgstr ""
|
|||||||
msgid "Got exception: %s"
|
msgid "Got exception: %s"
|
||||||
msgstr ""
|
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
|
#: ../nova/volume/san.py:67
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Could not find iSCSI export for volume %s"
|
msgid "Could not find iSCSI export for volume %s"
|
||||||
@@ -2264,10 +2209,6 @@ msgstr ""
|
|||||||
msgid "You must implement __call__"
|
msgid "You must implement __call__"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../bin/nova-instancemonitor.py:55
|
|
||||||
msgid "Starting instance monitor"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ../bin/nova-dhcpbridge.py:58
|
#: ../bin/nova-dhcpbridge.py:58
|
||||||
msgid "leasing ip"
|
msgid "leasing ip"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|||||||
59
po/tl.po
59
po/tl.po
@@ -125,33 +125,6 @@ msgstr ""
|
|||||||
msgid "compute.api::resume %s"
|
msgid "compute.api::resume %s"
|
||||||
msgstr ""
|
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/virt/xenapi/volumeops.py:48 ../nova/virt/xenapi/volumeops.py:101
|
||||||
#: ../nova/db/sqlalchemy/api.py:731 ../nova/virt/libvirt_conn.py:741
|
#: ../nova/db/sqlalchemy/api.py:731 ../nova/virt/libvirt_conn.py:741
|
||||||
#: ../nova/api/ec2/__init__.py:317
|
#: ../nova/api/ec2/__init__.py:317
|
||||||
@@ -1778,34 +1751,6 @@ msgstr ""
|
|||||||
msgid "Got exception: %s"
|
msgid "Got exception: %s"
|
||||||
msgstr ""
|
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
|
#: ../nova/volume/san.py:67
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Could not find iSCSI export for volume %s"
|
msgid "Could not find iSCSI export for volume %s"
|
||||||
@@ -2265,10 +2210,6 @@ msgstr ""
|
|||||||
msgid "You must implement __call__"
|
msgid "You must implement __call__"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../bin/nova-instancemonitor.py:55
|
|
||||||
msgid "Starting instance monitor"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ../bin/nova-dhcpbridge.py:58
|
#: ../bin/nova-dhcpbridge.py:58
|
||||||
msgid "leasing ip"
|
msgid "leasing ip"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|||||||
59
po/uk.po
59
po/uk.po
@@ -125,33 +125,6 @@ msgstr ""
|
|||||||
msgid "compute.api::resume %s"
|
msgid "compute.api::resume %s"
|
||||||
msgstr ""
|
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/virt/xenapi/volumeops.py:48 ../nova/virt/xenapi/volumeops.py:101
|
||||||
#: ../nova/db/sqlalchemy/api.py:731 ../nova/virt/libvirt_conn.py:741
|
#: ../nova/db/sqlalchemy/api.py:731 ../nova/virt/libvirt_conn.py:741
|
||||||
#: ../nova/api/ec2/__init__.py:317
|
#: ../nova/api/ec2/__init__.py:317
|
||||||
@@ -1778,34 +1751,6 @@ msgstr ""
|
|||||||
msgid "Got exception: %s"
|
msgid "Got exception: %s"
|
||||||
msgstr ""
|
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
|
#: ../nova/volume/san.py:67
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Could not find iSCSI export for volume %s"
|
msgid "Could not find iSCSI export for volume %s"
|
||||||
@@ -2263,10 +2208,6 @@ msgstr ""
|
|||||||
msgid "You must implement __call__"
|
msgid "You must implement __call__"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../bin/nova-instancemonitor.py:55
|
|
||||||
msgid "Starting instance monitor"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ../bin/nova-dhcpbridge.py:58
|
#: ../bin/nova-dhcpbridge.py:58
|
||||||
msgid "leasing ip"
|
msgid "leasing ip"
|
||||||
msgstr ""
|
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-Launchpad-Export-Date: 2011-07-23 05:12+0000\n"
|
||||||
"X-Generator: Launchpad (build 13405)\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/chance.py:37 ../nova/scheduler/zone.py:55
|
||||||
#: ../nova/scheduler/simple.py:75 ../nova/scheduler/simple.py:110
|
#: ../nova/scheduler/simple.py:75 ../nova/scheduler/simple.py:110
|
||||||
#: ../nova/scheduler/simple.py:122
|
#: ../nova/scheduler/simple.py:122
|
||||||
@@ -135,28 +130,6 @@ msgstr ""
|
|||||||
msgid "compute.api::resume %s"
|
msgid "compute.api::resume %s"
|
||||||
msgstr ""
|
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/virt/xenapi/volumeops.py:48 ../nova/virt/xenapi/volumeops.py:101
|
||||||
#: ../nova/db/sqlalchemy/api.py:731 ../nova/virt/libvirt_conn.py:741
|
#: ../nova/db/sqlalchemy/api.py:731 ../nova/virt/libvirt_conn.py:741
|
||||||
#: ../nova/api/ec2/__init__.py:317
|
#: ../nova/api/ec2/__init__.py:317
|
||||||
@@ -1785,34 +1758,6 @@ msgstr ""
|
|||||||
msgid "Got exception: %s"
|
msgid "Got exception: %s"
|
||||||
msgstr ""
|
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
|
#: ../nova/volume/san.py:67
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Could not find iSCSI export for volume %s"
|
msgid "Could not find iSCSI export for volume %s"
|
||||||
@@ -2270,10 +2215,6 @@ msgstr ""
|
|||||||
msgid "You must implement __call__"
|
msgid "You must implement __call__"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../bin/nova-instancemonitor.py:55
|
|
||||||
msgid "Starting instance monitor"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ../bin/nova-dhcpbridge.py:58
|
#: ../bin/nova-dhcpbridge.py:58
|
||||||
msgid "leasing ip"
|
msgid "leasing ip"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|||||||
59
po/zh_TW.po
59
po/zh_TW.po
@@ -125,33 +125,6 @@ msgstr ""
|
|||||||
msgid "compute.api::resume %s"
|
msgid "compute.api::resume %s"
|
||||||
msgstr ""
|
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/virt/xenapi/volumeops.py:48 ../nova/virt/xenapi/volumeops.py:101
|
||||||
#: ../nova/db/sqlalchemy/api.py:731 ../nova/virt/libvirt_conn.py:741
|
#: ../nova/db/sqlalchemy/api.py:731 ../nova/virt/libvirt_conn.py:741
|
||||||
#: ../nova/api/ec2/__init__.py:317
|
#: ../nova/api/ec2/__init__.py:317
|
||||||
@@ -1778,34 +1751,6 @@ msgstr ""
|
|||||||
msgid "Got exception: %s"
|
msgid "Got exception: %s"
|
||||||
msgstr ""
|
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
|
#: ../nova/volume/san.py:67
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Could not find iSCSI export for volume %s"
|
msgid "Could not find iSCSI export for volume %s"
|
||||||
@@ -2263,10 +2208,6 @@ msgstr ""
|
|||||||
msgid "You must implement __call__"
|
msgid "You must implement __call__"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../bin/nova-instancemonitor.py:55
|
|
||||||
msgid "Starting instance monitor"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ../bin/nova-dhcpbridge.py:58
|
#: ../bin/nova-dhcpbridge.py:58
|
||||||
msgid "leasing ip"
|
msgid "leasing ip"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|||||||
1
setup.py
1
setup.py
@@ -124,7 +124,6 @@ setup(name='nova',
|
|||||||
'bin/nova-dhcpbridge',
|
'bin/nova-dhcpbridge',
|
||||||
'bin/nova-direct-api',
|
'bin/nova-direct-api',
|
||||||
'bin/nova-import-canonical-imagestore',
|
'bin/nova-import-canonical-imagestore',
|
||||||
'bin/nova-instancemonitor',
|
|
||||||
'bin/nova-logspool',
|
'bin/nova-logspool',
|
||||||
'bin/nova-manage',
|
'bin/nova-manage',
|
||||||
'bin/nova-network',
|
'bin/nova-network',
|
||||||
|
|||||||
@@ -1,24 +0,0 @@
|
|||||||
# HG changeset patch
|
|
||||||
# User Soren Hansen <soren@linux2go.dk>
|
|
||||||
# Date 1297678255 -3600
|
|
||||||
# Node ID 4c846d555010bb5a91ab4da78dfe596451313742
|
|
||||||
# Parent 5b7e9946c79f005c028eb63207cf5eb7bb21d1c3
|
|
||||||
Don't attempt to wrap GreenPipes in GreenPipe
|
|
||||||
|
|
||||||
If the os module is monkeypatched, Python's standard subprocess module
|
|
||||||
will return greenio.GreenPipe instances for Popen objects' stdin, stdout,
|
|
||||||
and stderr attributes. However, eventlet.green.subprocess tries to wrap
|
|
||||||
these attributes in another greenio.GreenPipe, which GreenPipe refuses.
|
|
||||||
|
|
||||||
diff -r 5b7e9946c79f -r 4c846d555010 eventlet/green/subprocess.py
|
|
||||||
--- a/eventlet/green/subprocess.py Sat Feb 05 13:05:05 2011 -0800
|
|
||||||
+++ b/eventlet/green/subprocess.py Mon Feb 14 11:10:55 2011 +0100
|
|
||||||
@@ -27,7 +27,7 @@
|
|
||||||
# eventlet.processes.Process.run() method.
|
|
||||||
for attr in "stdin", "stdout", "stderr":
|
|
||||||
pipe = getattr(self, attr)
|
|
||||||
- if pipe is not None:
|
|
||||||
+ if pipe is not None and not type(pipe) == greenio.GreenPipe:
|
|
||||||
wrapped_pipe = greenio.GreenPipe(pipe, pipe.mode, bufsize)
|
|
||||||
setattr(self, attr, wrapped_pipe)
|
|
||||||
__init__.__doc__ = subprocess_orig.Popen.__init__.__doc__
|
|
||||||
@@ -31,7 +31,6 @@ import sys
|
|||||||
ROOT = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
|
ROOT = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
|
||||||
VENV = os.path.join(ROOT, '.nova-venv')
|
VENV = os.path.join(ROOT, '.nova-venv')
|
||||||
PIP_REQUIRES = os.path.join(ROOT, 'tools', 'pip-requires')
|
PIP_REQUIRES = os.path.join(ROOT, 'tools', 'pip-requires')
|
||||||
TWISTED_NOVA = 'http://nova.openstack.org/Twisted-10.0.0Nova.tar.gz'
|
|
||||||
PY_VERSION = "python%s.%s" % (sys.version_info[0], sys.version_info[1])
|
PY_VERSION = "python%s.%s" % (sys.version_info[0], sys.version_info[1])
|
||||||
|
|
||||||
|
|
||||||
@@ -106,20 +105,12 @@ def install_dependencies(venv=VENV):
|
|||||||
'greenlet'], redirect_output=False)
|
'greenlet'], redirect_output=False)
|
||||||
run_command(['tools/with_venv.sh', 'pip', 'install', '-E', venv, '-r',
|
run_command(['tools/with_venv.sh', 'pip', 'install', '-E', venv, '-r',
|
||||||
PIP_REQUIRES], redirect_output=False)
|
PIP_REQUIRES], redirect_output=False)
|
||||||
run_command(['tools/with_venv.sh', 'pip', 'install', '-E', venv,
|
|
||||||
TWISTED_NOVA], redirect_output=False)
|
|
||||||
|
|
||||||
# Tell the virtual env how to "import nova"
|
# Tell the virtual env how to "import nova"
|
||||||
pthfile = os.path.join(venv, "lib", PY_VERSION, "site-packages",
|
pthfile = os.path.join(venv, "lib", PY_VERSION, "site-packages",
|
||||||
"nova.pth")
|
"nova.pth")
|
||||||
f = open(pthfile, 'w')
|
f = open(pthfile, 'w')
|
||||||
f.write("%s\n" % ROOT)
|
f.write("%s\n" % ROOT)
|
||||||
# Patch eventlet (see FAQ # 1485)
|
|
||||||
patchsrc = os.path.join(ROOT, 'tools', 'eventlet-patch')
|
|
||||||
patchfile = os.path.join(venv, "lib", PY_VERSION, "site-packages",
|
|
||||||
"eventlet", "green", "subprocess.py")
|
|
||||||
patch_cmd = "patch %s %s" % (patchfile, patchsrc)
|
|
||||||
os.system(patch_cmd)
|
|
||||||
|
|
||||||
|
|
||||||
def print_help():
|
def print_help():
|
||||||
|
|||||||
@@ -20,13 +20,13 @@ mox==0.5.3
|
|||||||
greenlet==0.3.1
|
greenlet==0.3.1
|
||||||
nose
|
nose
|
||||||
bzr
|
bzr
|
||||||
Twisted>=10.1.0
|
|
||||||
PasteDeploy
|
PasteDeploy
|
||||||
paste
|
paste
|
||||||
sqlalchemy-migrate
|
sqlalchemy-migrate
|
||||||
netaddr
|
netaddr
|
||||||
sphinx
|
sphinx
|
||||||
glance
|
glance
|
||||||
|
xattr>=0.6.0
|
||||||
nova-adminclient
|
nova-adminclient
|
||||||
suds==0.4
|
suds==0.4
|
||||||
coverage
|
coverage
|
||||||
|
|||||||
Reference in New Issue
Block a user