diff -Nru ceilometer-6.0.0/AUTHORS ceilometer-6.1.3/AUTHORS --- ceilometer-6.0.0/AUTHORS 2016-04-07 07:32:03.000000000 +0000 +++ ceilometer-6.1.3/AUTHORS 2016-07-21 10:23:54.000000000 +0000 @@ -65,6 +65,7 @@ Doug Hellmann Drew Thorstensen Edwin Zhai +Emilien Macchi Emma Foley Endre Karlson Eoghan Glynn @@ -118,10 +119,12 @@ Kamil Rykowski Keith Byrne Ken Pepple +Ken'ichi Ohmichi Ken'ichi Ohmichi Kennan Kennan Kevin McDonald +Kirill Bespalov Kishore Juigil Koert van der Veer Komei Shimamura @@ -256,6 +259,7 @@ florent fujioka yuuichi gengjh +ghanshyam gord chung guillaume pernot hgangwx diff -Nru ceilometer-6.0.0/ceilometer/api/controllers/v2/events.py ceilometer-6.1.3/ceilometer/api/controllers/v2/events.py --- ceilometer-6.0.0/ceilometer/api/controllers/v2/events.py 2016-04-07 07:30:27.000000000 +0000 +++ ceilometer-6.1.3/ceilometer/api/controllers/v2/events.py 2016-07-21 10:20:12.000000000 +0000 @@ -192,9 +192,21 @@ {'operator': i.op, 'supported': base.operation_kind}) raise base.ClientSideError(error) if i.field in evt_model_filter: - if i.op != 'eq': + if i.op != 'eq' and i.field in ('event_type', 'message_id'): error = (_('Operator %(operator)s is not supported. Only' - ' equality operator is available for field' + ' `eq\' operator is available for field' + ' %(field)s') % + {'operator': i.op, 'field': i.field}) + raise base.ClientSideError(error) + if i.op != 'ge' and i.field == 'start_timestamp': + error = (_('Operator %(operator)s is not supported. Only' + ' `ge\' operator is available for field' + ' %(field)s') % + {'operator': i.op, 'field': i.field}) + raise base.ClientSideError(error) + if i.op != 'le' and i.field == 'end_timestamp': + error = (_('Operator %(operator)s is not supported. Only' + ' `le\' operator is available for field' ' %(field)s') % {'operator': i.op, 'field': i.field}) raise base.ClientSideError(error) diff -Nru ceilometer-6.0.0/ceilometer/dispatcher/gnocchi.py ceilometer-6.1.3/ceilometer/dispatcher/gnocchi.py --- ceilometer-6.0.0/ceilometer/dispatcher/gnocchi.py 2016-04-07 07:30:27.000000000 +0000 +++ ceilometer-6.1.3/ceilometer/dispatcher/gnocchi.py 2016-07-21 10:20:12.000000000 +0000 @@ -363,8 +363,8 @@ if retry: self._gnocchi.metric.add_measures(metric_name, measures, resource_id) - LOG.debug("Measure posted on metric %s of resource %s", - metric_name, resource_id) + LOG.debug("Measure posted on metric %s of resource %s", + metric_name, resource_id) if resource_extra: self._if_not_cached("update", resource_type, resource, diff -Nru ceilometer-6.0.0/ceilometer/event/storage/impl_sqlalchemy.py ceilometer-6.1.3/ceilometer/event/storage/impl_sqlalchemy.py --- ceilometer-6.0.0/ceilometer/event/storage/impl_sqlalchemy.py 2016-04-07 07:30:27.000000000 +0000 +++ ceilometer-6.1.3/ceilometer/event/storage/impl_sqlalchemy.py 2016-07-21 10:20:12.000000000 +0000 @@ -142,7 +142,20 @@ path = os.path.join(os.path.abspath(os.path.dirname(__file__)), '..', '..', 'storage', 'sqlalchemy', 'migrate_repo') - migration.db_sync(self._engine_facade.get_engine(), path) + engine = self._engine_facade.get_engine() + + from migrate import exceptions as migrate_exc + from migrate.versioning import api + from migrate.versioning import repository + + repo = repository.Repository(path) + try: + api.db_version(engine, repo) + except migrate_exc.DatabaseNotControlledError: + models.Base.metadata.create_all(engine) + api.version_control(engine, repo, repo.latest) + else: + migration.db_sync(engine, path) def clear(self): engine = self._engine_facade.get_engine() diff -Nru ceilometer-6.0.0/ceilometer/locale/ceilometer-log-error.pot ceilometer-6.1.3/ceilometer/locale/ceilometer-log-error.pot --- ceilometer-6.0.0/ceilometer/locale/ceilometer-log-error.pot 2016-04-07 07:30:27.000000000 +0000 +++ ceilometer-6.1.3/ceilometer/locale/ceilometer-log-error.pot 1970-01-01 00:00:00.000000000 +0000 @@ -1,181 +0,0 @@ -# Translations template for ceilometer. -# Copyright (C) 2016 ORGANIZATION -# This file is distributed under the same license as the ceilometer project. -# FIRST AUTHOR , 2016. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: ceilometer 6.0.0.0b4.dev6\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2016-03-07 06:08+0000\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.2.0\n" - -#: ceilometer/collector.py:176 -#, python-format -msgid "Dispatcher failed to handle the %s, requeue it." -msgstr "" - -#: ceilometer/coordination.py:50 -msgid "" -"Group ID: %{group_id}s, Members: %{members}s, Me: %{me}s: Current agent " -"is not part of group and cannot take tasks" -msgstr "" - -#: ceilometer/coordination.py:88 ceilometer/coordination.py:100 -msgid "Error connecting to coordination backend." -msgstr "" - -#: ceilometer/coordination.py:115 -msgid "Error sending a heartbeat to coordination backend." -msgstr "" - -#: ceilometer/coordination.py:146 -#, python-format -msgid "Error joining partitioning group %s, re-trying" -msgstr "" - -#: ceilometer/coordination.py:198 -msgid "Error getting group membership info from coordination backend." -msgstr "" - -#: ceilometer/service_base.py:118 -#, python-format -msgid "Unable to load changed pipeline: %s" -msgstr "" - -#: ceilometer/service_base.py:140 -#, python-format -msgid "Unable to load changed event pipeline: %s" -msgstr "" - -#: ceilometer/agent/manager.py:467 -#, python-format -msgid "Skipping %(name)s, keystone issue: %(exc)s" -msgstr "" - -#: ceilometer/agent/plugin_base.py:109 -msgid "Fail to process notification" -msgstr "" - -#: ceilometer/api/hooks.py:65 -#, python-format -msgid "Failed to connect to db, purpose %(purpose)s retry later: %(err)s" -msgstr "" - -#: ceilometer/compute/pollsters/memory.py:108 -#, python-format -msgid "Could not get Resident Memory Usage for %(id)s: %(e)s" -msgstr "" - -#: ceilometer/dispatcher/database.py:54 -#, python-format -msgid "Failed to connect to db, purpose %(purpose)s re-try later: %(err)s" -msgstr "" - -#: ceilometer/dispatcher/database.py:97 -#, python-format -msgid "Failed to record metering data: %s" -msgstr "" - -#: ceilometer/dispatcher/database.py:128 -#, python-format -msgid "Error processing event and it will be dropped: %s" -msgstr "" - -#: ceilometer/dispatcher/gnocchi.py:102 -#, python-format -msgid "Required field %s not specified" -msgstr "" - -#: ceilometer/dispatcher/gnocchi.py:105 -#, python-format -msgid "Required field %(field)s should be a %(type)s" -msgstr "" - -#: ceilometer/dispatcher/gnocchi.py:234 -msgid "Failed to connect to Gnocchi." -msgstr "" - -#: ceilometer/dispatcher/gnocchi.py:250 -#, python-format -msgid "Failed to load resource due to error %s" -msgstr "" - -#: ceilometer/dispatcher/http.py:126 -msgid "Status Code: %{code}s. Failed todispatch event: %{event}s" -msgstr "" - -#: ceilometer/event/endpoint.py:69 -msgid "Fail to process a notification" -msgstr "" - -#: ceilometer/event/storage/impl_elasticsearch.py:110 -#: ceilometer/event/storage/impl_hbase.py:121 -#: ceilometer/event/storage/impl_sqlalchemy.py:203 -#: ceilometer/event/storage/impl_sqlalchemy.py:205 -#: ceilometer/event/storage/pymongo_base.py:69 -#, python-format -msgid "Failed to record event: %s" -msgstr "" - -#: ceilometer/hardware/pollsters/generic.py:69 -#, python-format -msgid "Missing field %s" -msgstr "" - -#: ceilometer/hardware/pollsters/generic.py:72 -#, python-format -msgid "Unrecognized type value %s" -msgstr "" - -#: ceilometer/hardware/pollsters/generic.py:107 -msgid "Passed resource dict must contain keys resource_id and resource_url." -msgstr "" - -#: ceilometer/hardware/pollsters/generic.py:126 -#, python-format -msgid "Cannot load inspector %(name)s: %(err)s" -msgstr "" - -#: ceilometer/hardware/pollsters/generic.py:149 -#, python-format -msgid "Skip invalid resource %s" -msgstr "" - -#: ceilometer/hardware/pollsters/generic.py:177 -#, python-format -msgid "inspector call failed for %(ident)s host %(host)s: %(err)s" -msgstr "" - -#: ceilometer/hardware/pollsters/generic.py:227 -#: ceilometer/meter/notifications.py:197 -#, python-format -msgid "Error loading meter definition : %(err)s" -msgstr "" - -#: ceilometer/meter/notifications.py:65 -#, python-format -msgid "Required fields %s not specified" -msgstr "" - -#: ceilometer/meter/notifications.py:74 -#, python-format -msgid "Invalid type %s specified" -msgstr "" - -#: ceilometer/publisher/kafka_broker.py:83 -#, python-format -msgid "Failed to connect to Kafka service: %s" -msgstr "" - -#: ceilometer/publisher/messaging.py:168 -msgid "Failed to retry to send sample data with max_retry times" -msgstr "" - diff -Nru ceilometer-6.0.0/ceilometer/locale/ceilometer-log-info.pot ceilometer-6.1.3/ceilometer/locale/ceilometer-log-info.pot --- ceilometer-6.0.0/ceilometer/locale/ceilometer-log-info.pot 2016-04-07 07:30:27.000000000 +0000 +++ ceilometer-6.1.3/ceilometer/locale/ceilometer-log-info.pot 1970-01-01 00:00:00.000000000 +0000 @@ -1,163 +0,0 @@ -# Translations template for ceilometer. -# Copyright (C) 2016 ORGANIZATION -# This file is distributed under the same license as the ceilometer project. -# FIRST AUTHOR , 2016. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: ceilometer 6.0.0.0b3.dev49\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2016-02-08 06:51+0000\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.2.0\n" - -#: ceilometer/coordination.py:87 -msgid "Coordination backend started successfully." -msgstr "" - -#: ceilometer/coordination.py:136 -#, python-format -msgid "Joined partitioning group %s" -msgstr "" - -#: ceilometer/coordination.py:157 -#, python-format -msgid "Left partitioning group %s" -msgstr "" - -#: ceilometer/declarative.py:165 -#, python-format -msgid "Definitions: %s" -msgstr "" - -#: ceilometer/notification.py:306 -msgid "Reloading notification agent and listeners." -msgstr "" - -#: ceilometer/pipeline.py:409 -#, python-format -msgid "" -"Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" -" %(param)s" -msgstr "" - -#: ceilometer/pipeline.py:705 ceilometer/pipeline.py:767 -msgid "detected decoupled pipeline config format" -msgstr "" - -#: ceilometer/pipeline.py:791 ceilometer/pipeline.py:810 -#, python-format -msgid "Pipeline config: %s" -msgstr "" - -#: ceilometer/service_base.py:86 -msgid "Pipeline configuration file has been updated." -msgstr "" - -#: ceilometer/service_base.py:92 -msgid "Detected change in pipeline configuration." -msgstr "" - -#: ceilometer/agent/manager.py:178 -#, python-format -msgid "Skip pollster %(name)s, no %(p_context)sresources found this cycle" -msgstr "" - -#: ceilometer/agent/manager.py:183 -#, python-format -msgid "Polling pollster %(poll)s in the context of %(src)s" -msgstr "" - -#: ceilometer/agent/manager.py:487 -msgid "Reconfiguring polling tasks." -msgstr "" - -#: ceilometer/api/app.py:109 -#, python-format -msgid "Starting server in PID %s" -msgstr "" - -#: ceilometer/api/app.py:110 -msgid "Configuration:" -msgstr "" - -#: ceilometer/api/app.py:114 -#, python-format -msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" -msgstr "" - -#: ceilometer/api/app.py:118 -#, python-format -msgid "serving on http://%(host)s:%(port)s" -msgstr "" - -#: ceilometer/api/controllers/v2/utils.py:47 -#, python-format -msgid "No limit value provided, result set will be limited to %(limit)d." -msgstr "" - -#: ceilometer/cmd/storage.py:44 -msgid "Nothing to clean, database metering time to live is disabled" -msgstr "" - -#: ceilometer/cmd/storage.py:53 -msgid "Nothing to clean, database event time to live is disabled" -msgstr "" - -#: ceilometer/event/storage/impl_elasticsearch.py:107 -#: ceilometer/event/storage/impl_sqlalchemy.py:201 -#: ceilometer/event/storage/pymongo_base.py:67 -#, python-format -msgid "Duplicate event detected, skipping it: %s" -msgstr "" - -#: ceilometer/event/storage/impl_log.py:33 -#, python-format -msgid "Dropping event data with TTL %d" -msgstr "" - -#: ceilometer/event/storage/impl_sqlalchemy.py:439 -#, python-format -msgid "%d events are removed from database" -msgstr "" - -#: ceilometer/publisher/messaging.py:93 -#, python-format -msgid "Publishing policy set to %s" -msgstr "" - -#: ceilometer/storage/impl_log.py:41 -#, python-format -msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" -msgstr "" - -#: ceilometer/storage/impl_log.py:53 -#, python-format -msgid "Dropping metering data with TTL %d" -msgstr "" - -#: ceilometer/storage/impl_sqlalchemy.py:368 -#, python-format -msgid "%d samples removed from database" -msgstr "" - -#: ceilometer/storage/impl_sqlalchemy.py:404 -msgid "Expired residual resource and meter definition data" -msgstr "" - -#: ceilometer/storage/mongo/utils.py:259 -#, python-format -msgid "Connecting to %(db)s on %(nodelist)s" -msgstr "" - -#: ceilometer/storage/mongo/utils.py:462 -#, python-format -msgid "Index %s will be recreate." -msgstr "" - diff -Nru ceilometer-6.0.0/ceilometer/locale/ceilometer-log-warning.pot ceilometer-6.1.3/ceilometer/locale/ceilometer-log-warning.pot --- ceilometer-6.0.0/ceilometer/locale/ceilometer-log-warning.pot 2016-04-07 07:30:27.000000000 +0000 +++ ceilometer-6.1.3/ceilometer/locale/ceilometer-log-warning.pot 1970-01-01 00:00:00.000000000 +0000 @@ -1,164 +0,0 @@ -# Translations template for ceilometer. -# Copyright (C) 2016 ORGANIZATION -# This file is distributed under the same license as the ceilometer project. -# FIRST AUTHOR , 2016. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: ceilometer 6.0.0.0b4.dev34\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2016-03-11 06:17+0000\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.2.0\n" - -#: ceilometer/coordination.py:186 -msgid "" -"Cannot extract tasks because agent failed to join group properly. " -"Rejoining group." -msgstr "" - -#: ceilometer/notification.py:194 -msgid "" -"Non-metric meters may be collected. It is highly advisable to disable " -"these meters using ceilometer.conf or the pipeline.yaml" -msgstr "" - -#: ceilometer/pipeline.py:582 -#, python-format -msgid "" -"metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s has no" -" volume (volume: None), the sample will be dropped" -msgstr "" - -#: ceilometer/pipeline.py:595 -#, python-format -msgid "" -"metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s has " -"volume which is not a number (volume: %(counter_volume)s), the sample " -"will be dropped" -msgstr "" - -#: ceilometer/agent/manager.py:452 -#, python-format -msgid "Skipping %(name)s, %(service_type)s service is not registered in keystone" -msgstr "" - -#: ceilometer/agent/discovery/endpoint.py:44 -#, python-format -msgid "No endpoints found for service %s" -msgstr "" - -#: ceilometer/api/app.py:75 -msgid "" -"pecan_debug cannot be enabled, if workers is > 1, the value is overrided " -"with False" -msgstr "" - -#: ceilometer/api/controllers/v2/root.py:123 -msgid "Can't connect to keystone, assuming gnocchi is disabled and retry later" -msgstr "" - -#: ceilometer/api/controllers/v2/root.py:127 -msgid "" -"ceilometer-api started with gnocchi enabled. The resources/meters/samples" -" URLs are disabled." -msgstr "" - -#: ceilometer/api/controllers/v2/root.py:149 -msgid "Can't connect to keystone, assuming aodh is disabled and retry later." -msgstr "" - -#: ceilometer/api/controllers/v2/root.py:152 -msgid "" -"ceilometer-api started with aodh enabled. Alarms URLs will be redirected " -"to aodh endpoint." -msgstr "" - -#: ceilometer/cmd/polling.py:55 -#, python-format -msgid "Duplicated values: %s found in CLI options, auto de-duplicated" -msgstr "" - -#: ceilometer/compute/pollsters/memory.py:56 -#: ceilometer/compute/pollsters/memory.py:99 -#, python-format -msgid "" -"Cannot inspect data of %(pollster)s for %(instance_id)s, non-fatal " -"reason: %(exc)s" -msgstr "" - -#: ceilometer/dispatcher/__init__.py:68 -#, python-format -msgid "Failed to load any dispatchers for %s" -msgstr "" - -#: ceilometer/dispatcher/database.py:102 -#, python-format -msgid "message signature invalid, discarding message: %r" -msgstr "" - -#: ceilometer/dispatcher/database.py:131 ceilometer/dispatcher/http.py:130 -#, python-format -msgid "event signature invalid, discarding event: %s" -msgstr "" - -#: ceilometer/dispatcher/gnocchi.py:215 -#, python-format -msgid "unable to configure oslo_cache: %s" -msgstr "" - -#: ceilometer/event/trait_plugins.py:126 -#, python-format -msgid "" -"split plugin is deprecated, add \".`split(%(sep)s, %(segment)d, " -"%(max_split)d)`\" to your jsonpath instead" -msgstr "" - -#: ceilometer/event/trait_plugins.py:216 -msgid "" -"Timedelta plugin is required two timestamp fields to create timedelta " -"value." -msgstr "" - -#: ceilometer/event/trait_plugins.py:224 -#, python-format -msgid "" -"Failed to parse date from set fields, both fields %(start)s and %(end)s " -"must be datetime: %(err)s" -msgstr "" - -#: ceilometer/hardware/pollsters/generic.py:65 -#, python-format -msgid "Ignore unrecognized field %s" -msgstr "" - -#: ceilometer/meter/notifications.py:189 -#, python-format -msgid "Skipping duplicate meter definition %s" -msgstr "" - -#: ceilometer/network/floatingip.py:66 -#, python-format -msgid "Invalid status, skipping IP address %s" -msgstr "" - -#: ceilometer/transformer/conversions.py:88 -#, python-format -msgid "Dropping out of time order sample: %s" -msgstr "" - -#: ceilometer/transformer/conversions.py:94 -msgid "Negative delta detected, dropping value" -msgstr "" - -#: ceilometer/transformer/conversions.py:100 -#, python-format -msgid "Dropping sample with no predecessor: %s" -msgstr "" - diff -Nru ceilometer-6.0.0/ceilometer/locale/ceilometer.pot ceilometer-6.1.3/ceilometer/locale/ceilometer.pot --- ceilometer-6.0.0/ceilometer/locale/ceilometer.pot 2016-04-07 07:30:28.000000000 +0000 +++ ceilometer-6.1.3/ceilometer/locale/ceilometer.pot 1970-01-01 00:00:00.000000000 +0000 @@ -1,570 +0,0 @@ -# Translations template for ceilometer. -# Copyright (C) 2016 ORGANIZATION -# This file is distributed under the same license as the ceilometer project. -# FIRST AUTHOR , 2016. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: ceilometer 6.0.0.0rc2.dev9\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2016-03-29 06:16+0000\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.2.0\n" - -#: ceilometer/collector.py:134 -#, python-format -msgid "UDP: Cannot decode data sent by %s" -msgstr "" - -#: ceilometer/collector.py:141 -msgid "UDP: Unable to store meter" -msgstr "" - -#: ceilometer/declarative.py:44 -#, python-format -msgid "The field 'fields' is required for %s" -msgstr "" - -#: ceilometer/declarative.py:57 -#, python-format -msgid "Plugin specified, but no plugin name supplied for %s" -msgstr "" - -#: ceilometer/declarative.py:66 -#, python-format -msgid "No plugin named %(plugin)s available for %(name)s" -msgstr "" - -#: ceilometer/declarative.py:92 -#, python-format -msgid "Parse error in JSONPath specification '%(jsonpath)s' for %(name)s: %(err)s" -msgstr "" - -#: ceilometer/declarative.py:157 -#, python-format -msgid "" -"Invalid YAML syntax in Definitions file %(file)s at line: %(line)s, " -"column: %(column)s." -msgstr "" - -#: ceilometer/declarative.py:163 -#, python-format -msgid "YAML error reading Definitions file %(file)s" -msgstr "" - -#: ceilometer/notification.py:206 -#, python-format -msgid "Failed to load any notification handlers for %s" -msgstr "" - -#: ceilometer/pipeline.py:390 -#, python-format -msgid "Unable to load publisher %s" -msgstr "" - -#: ceilometer/pipeline.py:428 -#, python-format -msgid "Pipeline %(pipeline)s: %(status)s after error from publisher %(pub)s" -msgstr "" - -#: ceilometer/pipeline.py:458 -#, python-format -msgid "" -"Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " -"%(smp)s" -msgstr "" - -#: ceilometer/pipeline.py:495 -#, python-format -msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" -msgstr "" - -#: ceilometer/pipeline.py:511 -#, python-format -msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" -msgstr "" - -#: ceilometer/agent/manager.py:207 -#, python-format -msgid "Prevent pollster %(name)s for polling source %(source)s anymore!" -msgstr "" - -#: ceilometer/agent/manager.py:213 -#, python-format -msgid "Continue after error from %(name)s: %(error)s" -msgstr "" - -#: ceilometer/agent/manager.py:289 -#, python-format -msgid "Skip loading extension for %s" -msgstr "" - -#: ceilometer/agent/manager.py:292 -#, python-format -msgid "Failed to import extension for %(name)s: %(error)s" -msgstr "" - -#: ceilometer/agent/manager.py:470 -#, python-format -msgid "Unable to discover resources: %s" -msgstr "" - -#: ceilometer/agent/manager.py:472 -#, python-format -msgid "Unknown discovery extension: %s" -msgstr "" - -#: ceilometer/agent/manager.py:481 -msgid "Error stopping pollster." -msgstr "" - -#: ceilometer/api/middleware.py:102 -#, python-format -msgid "Error parsing HTTP response: %s" -msgstr "" - -#: ceilometer/api/controllers/v2/base.py:50 -#, python-format -msgid "%(entity)s %(id)s Not Found" -msgstr "" - -#: ceilometer/api/controllers/v2/base.py:59 -#, python-format -msgid "Not Authorized to access %(aspect)s %(id)s" -msgstr "" - -#: ceilometer/api/controllers/v2/base.py:220 -#, python-format -msgid "Unable to convert the value %(value)s to the expected data type %(type)s." -msgstr "" - -#: ceilometer/api/controllers/v2/base.py:225 -#, python-format -msgid "" -"The data type %(type)s is not supported. The supported data type list is:" -" %(supported)s" -msgstr "" - -#: ceilometer/api/controllers/v2/base.py:230 -#, python-format -msgid "" -"Unexpected exception converting %(value)s to the expected data type " -"%(type)s." -msgstr "" - -#: ceilometer/api/controllers/v2/events.py:190 -#, python-format -msgid "" -"Operator %(operator)s is not supported. The supported operators are: " -"%(supported)s" -msgstr "" - -#: ceilometer/api/controllers/v2/events.py:196 -#, python-format -msgid "" -"Operator %(operator)s is not supported. Only equality operator is " -"available for field %(field)s" -msgstr "" - -#: ceilometer/api/controllers/v2/events.py:303 -msgid "Event" -msgstr "" - -#: ceilometer/api/controllers/v2/events.py:306 -#, python-format -msgid "More than one event with id %s returned from storage driver" -msgstr "" - -#: ceilometer/api/controllers/v2/meters.py:308 -msgid "Samples should be included in request body" -msgstr "" - -#: ceilometer/api/controllers/v2/meters.py:394 -msgid "Period must be positive." -msgstr "" - -#: ceilometer/api/controllers/v2/meters.py:423 -#, python-format -msgid "Invalid period %(period)s: %(err)s" -msgstr "" - -#: ceilometer/api/controllers/v2/query.py:203 -#, python-format -msgid "Filter expression not valid: %s" -msgstr "" - -#: ceilometer/api/controllers/v2/query.py:218 -#, python-format -msgid "Order-by expression not valid: %s" -msgstr "" - -#: ceilometer/api/controllers/v2/query.py:316 -#, python-format -msgid "String %s is not a valid isotime" -msgstr "" - -#: ceilometer/api/controllers/v2/query.py:317 -#, python-format -msgid "Failed to parse the timestamp value %s" -msgstr "" - -#: ceilometer/api/controllers/v2/resources.py:128 -msgid "Resource" -msgstr "" - -#: ceilometer/api/controllers/v2/root.py:66 -msgid "alarms URLs is unavailable when Aodh is disabled or unavailable." -msgstr "" - -#: ceilometer/api/controllers/v2/root.py:169 -msgid "direct option cannot be true when Gnocchi is enabled." -msgstr "" - -#: ceilometer/api/controllers/v2/samples.py:144 -msgid "Sample" -msgstr "" - -#: ceilometer/api/controllers/v2/utils.py:50 -msgid "Limit must be positive" -msgstr "" - -#: ceilometer/compute/pollsters/cpu.py:61 -#, python-format -msgid "could not get CPU time for %(id)s: %(e)s" -msgstr "" - -#: ceilometer/compute/pollsters/cpu.py:92 -#, python-format -msgid "Could not get CPU Util for %(id)s: %(e)s" -msgstr "" - -#: ceilometer/compute/pollsters/disk.py:174 -#: ceilometer/compute/pollsters/disk.py:312 -#: ceilometer/compute/pollsters/disk.py:447 -#: ceilometer/compute/pollsters/disk.py:517 -#: ceilometer/compute/pollsters/net.py:110 -#, python-format -msgid "Ignoring instance %(name)s: %(error)s" -msgstr "" - -#: ceilometer/compute/pollsters/disk.py:645 -#, python-format -msgid "Ignoring instance %(name)s (%(instance_id)s) : %(error)s" -msgstr "" - -#: ceilometer/compute/pollsters/memory.py:65 -#, python-format -msgid "Could not get Memory Usage for %(id)s: %(e)s" -msgstr "" - -#: ceilometer/compute/virt/inspector.py:314 -#, python-format -msgid "Unable to load the hypervisor inspector: %s" -msgstr "" - -#: ceilometer/compute/virt/libvirt/inspector.py:103 -#, python-format -msgid "" -"Error from libvirt while looking up instance : " -"[Error Code %(error_code)s] %(ex)s" -msgstr "" - -#: ceilometer/compute/virt/libvirt/inspector.py:123 -#, python-format -msgid "" -"Failed to inspect data of instance , domain " -"state is SHUTOFF." -msgstr "" - -#: ceilometer/compute/virt/libvirt/inspector.py:193 -#, python-format -msgid "" -"Failed to inspect memory usage of instance , " -"can not get info from libvirt." -msgstr "" - -#: ceilometer/compute/virt/libvirt/inspector.py:201 -#, python-format -msgid "" -"Failed to inspect memory usage of %(instance_uuid)s, can not get info " -"from libvirt: %(error)s" -msgstr "" - -#: ceilometer/compute/virt/vmware/inspector.py:106 -#: ceilometer/compute/virt/vmware/inspector.py:123 -#: ceilometer/compute/virt/vmware/inspector.py:155 -#: ceilometer/compute/virt/vmware/inspector.py:168 -#, python-format -msgid "VM %s not found in VMware vSphere" -msgstr "" - -#: ceilometer/compute/virt/xenapi/inspector.py:66 -msgid "XenAPI not installed" -msgstr "" - -#: ceilometer/compute/virt/xenapi/inspector.py:72 -msgid "Must specify connection_url, and connection_password to use" -msgstr "" - -#: ceilometer/compute/virt/xenapi/inspector.py:87 -#, python-format -msgid "Could not connect slave host: %s " -msgstr "" - -#: ceilometer/compute/virt/xenapi/inspector.py:90 -#, python-format -msgid "Could not connect to XenAPI: %s" -msgstr "" - -#: ceilometer/compute/virt/xenapi/inspector.py:113 -#, python-format -msgid "VM %s not found in XenServer" -msgstr "" - -#: ceilometer/compute/virt/xenapi/inspector.py:116 -#, python-format -msgid "Multiple VM %s found in XenServer" -msgstr "" - -#: ceilometer/compute/virt/xenapi/inspector.py:129 -#, python-format -msgid "Could not get VM %s CPU Utilization" -msgstr "" - -#: ceilometer/dispatcher/gnocchi.py:59 -msgid "" -"The Yaml file that defines mapping between samples and gnocchi " -"resources/metrics" -msgstr "" - -#: ceilometer/dispatcher/http.py:76 -msgid "" -"Dispatcher target was not set, no meter will be posted. Set the target in" -" the ceilometer.conf file" -msgstr "" - -#: ceilometer/dispatcher/http.py:104 -#, python-format -msgid "Failed to record metering data: %s" -msgstr "" - -#: ceilometer/dispatcher/http.py:107 -#, python-format -msgid "message signature invalid, discarding message: %r" -msgstr "" - -#: ceilometer/event/converter.py:62 -#, python-format -msgid "Invalid trait type '%(type)s' for trait %(trait)s" -msgstr "" - -#: ceilometer/event/converter.py:106 -#, python-format -msgid "Required field %s not specified" -msgstr "" - -#: ceilometer/event/converter.py:283 -#, python-format -msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" -msgstr "" - -#: ceilometer/hardware/discovery.py:95 -#, python-format -msgid "Couldn't obtain IP address of instance %s" -msgstr "" - -#: ceilometer/ipmi/platform/intel_node_manager.py:300 -msgid "Node Manager init failed" -msgstr "" - -#: ceilometer/ipmi/platform/ipmi_sensor.py:101 -msgid "Wrong sensor type" -msgstr "" - -#: ceilometer/ipmi/platform/ipmitool.py:39 -msgid "parse IPMI sensor data failed,unknown sensor type" -msgstr "" - -#: ceilometer/ipmi/platform/ipmitool.py:80 -msgid "parse IPMI sensor data failed,No data retrieved from given input" -msgstr "" - -#: ceilometer/ipmi/platform/ipmitool.py:102 -msgid "ipmitool output length mismatch" -msgstr "" - -#: ceilometer/ipmi/platform/ipmitool.py:128 -msgid "running ipmitool failure" -msgstr "" - -#: ceilometer/ipmi/pollsters/node.py:66 -#, python-format -msgid "Polling %(name)s failed for %(cnt)s times!" -msgstr "" - -#: ceilometer/ipmi/pollsters/node.py:71 ceilometer/ipmi/pollsters/sensor.py:74 -#, python-format -msgid "Pollster for %s is disabled!" -msgstr "" - -#: ceilometer/ipmi/pollsters/sensor.py:68 -#, python-format -msgid "Polling %(mtr)s sensor failed for %(cnt)s times!" -msgstr "" - -#: ceilometer/network/services/fwaas.py:48 -#, python-format -msgid "Unknown status %(stat)s received on fw %(id)s,skipping sample" -msgstr "" - -#: ceilometer/network/services/lbaas.py:88 -#, python-format -msgid "Unknown status %(stat)s received on pool %(id)s, skipping sample" -msgstr "" - -#: ceilometer/network/services/lbaas.py:136 -#, python-format -msgid "Unknown status %(stat)s received on vip %(id)s, skipping sample" -msgstr "" - -#: ceilometer/network/services/lbaas.py:177 -#, python-format -msgid "Unknown status %(stat)s received on member %(id)s, skipping sample" -msgstr "" - -#: ceilometer/network/services/lbaas.py:297 -#, python-format -msgid "Ignoring pool %(pool_id)s" -msgstr "" - -#: ceilometer/network/services/lbaas.py:307 -#, python-format -msgid "Ignoring loadbalancer %(loadbalancer_id)s" -msgstr "" - -#: ceilometer/network/services/lbaas.py:412 -#, python-format -msgid "Unknown status %(stat)s received on listener %(id)s, skipping sample" -msgstr "" - -#: ceilometer/network/services/lbaas.py:456 -#, python-format -msgid "Unknown status %(stat)s received on Load Balancer %(id)s, skipping sample" -msgstr "" - -#: ceilometer/network/services/vpnaas.py:49 -#, python-format -msgid "Unknown status %(stat)s received on vpn %(id)s, skipping sample" -msgstr "" - -#: ceilometer/network/statistics/opencontrail/client.py:58 -#, python-format -msgid "Opencontrail API returned %(status)s %(reason)s" -msgstr "" - -#: ceilometer/network/statistics/opendaylight/client.py:232 -#: ceilometer/tests/unit/network/statistics/opendaylight/test_client.py:146 -#, python-format -msgid "OpenDaylitght API returned %(status)s %(reason)s" -msgstr "" - -#: ceilometer/network/statistics/opendaylight/driver.py:169 -msgid "Request failed to connect to OpenDaylight with NorthBound REST API" -msgstr "" - -#: ceilometer/objectstore/rgw_client.py:48 -#, python-format -msgid "RGW AdminOps API returned %(status)s %(reason)s" -msgstr "" - -#: ceilometer/publisher/file.py:62 -msgid "The path for the file publisher is required" -msgstr "" - -#: ceilometer/publisher/file.py:76 -msgid "max_bytes and backup_count should be numbers." -msgstr "" - -#: ceilometer/publisher/messaging.py:95 -#, python-format -msgid "Publishing policy is unknown (%s) force to default" -msgstr "" - -#: ceilometer/publisher/messaging.py:147 -#, python-format -msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" -msgstr "" - -#: ceilometer/publisher/messaging.py:159 -#, python-format -msgid "Failed to publish %d datapoints, queue them" -msgstr "" - -#: ceilometer/publisher/messaging.py:163 -#, python-format -msgid "Failed to publish %d datapoints, dropping them" -msgstr "" - -#: ceilometer/publisher/udp.py:67 -msgid "Unable to send sample over UDP" -msgstr "" - -#: ceilometer/storage/impl_sqlalchemy.py:314 -#, python-format -msgid "Unknown metadata type. Key (%s) will not be queryable." -msgstr "" - -#: ceilometer/storage/hbase/utils.py:474 -#, python-format -msgid "Cannot create table %(table_name)s it already exists. Ignoring error" -msgstr "" - -#: ceilometer/storage/mongo/utils.py:270 -#, python-format -msgid "Unable to connect to the database server: %(errmsg)s." -msgstr "" - -#: ceilometer/storage/mongo/utils.py:412 -#, python-format -msgid "" -"Unable to reconnect to the primary mongodb after %(retries)d retries. " -"Giving up." -msgstr "" - -#: ceilometer/storage/mongo/utils.py:416 -#, python-format -msgid "" -"Unable to reconnect to the primary mongodb: %(errmsg)s. Trying again in " -"%(retry_interval)d seconds." -msgstr "" - -#: ceilometer/transformer/arithmetic.py:57 -#, python-format -msgid "Arithmetic transformer must use at least one meter in expression '%s'" -msgstr "" - -#: ceilometer/transformer/arithmetic.py:79 -msgid "Expression evaluated to a NaN value!" -msgstr "" - -#: ceilometer/transformer/arithmetic.py:95 -#, python-format -msgid "Unable to evaluate expression %(expr)s: %(exc)s" -msgstr "" - -#: ceilometer/transformer/conversions.py:198 -#, python-format -msgid "dropping out of time order sample: %s" -msgstr "" - -#: ceilometer/transformer/conversions.py:216 -#, python-format -msgid "dropping sample with no predecessor: %s" -msgstr "" - diff -Nru ceilometer-6.0.0/ceilometer/locale/de/LC_MESSAGES/ceilometer-log-error.po ceilometer-6.1.3/ceilometer/locale/de/LC_MESSAGES/ceilometer-log-error.po --- ceilometer-6.0.0/ceilometer/locale/de/LC_MESSAGES/ceilometer-log-error.po 2016-04-07 07:30:27.000000000 +0000 +++ ceilometer-6.1.3/ceilometer/locale/de/LC_MESSAGES/ceilometer-log-error.po 2016-07-21 10:20:12.000000000 +0000 @@ -1,9 +1,9 @@ # Monika Wolf , 2016. #zanata msgid "" msgstr "" -"Project-Id-Version: ceilometer 6.0.0.0b4.dev6\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2016-03-04 20:29+0000\n" +"Project-Id-Version: ceilometer 6.0.1.dev11\n" +"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" +"POT-Creation-Date: 2016-05-19 11:00+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" diff -Nru ceilometer-6.0.0/ceilometer/locale/de/LC_MESSAGES/ceilometer-log-info.po ceilometer-6.1.3/ceilometer/locale/de/LC_MESSAGES/ceilometer-log-info.po --- ceilometer-6.0.0/ceilometer/locale/de/LC_MESSAGES/ceilometer-log-info.po 2016-04-07 07:30:27.000000000 +0000 +++ ceilometer-6.1.3/ceilometer/locale/de/LC_MESSAGES/ceilometer-log-info.po 2016-07-21 10:20:12.000000000 +0000 @@ -1,15 +1,14 @@ -# Monika Wolf , 2016. #zanata -# Robert Simai , 2016. #zanata +# Frank Kloeker , 2016. #zanata msgid "" msgstr "" -"Project-Id-Version: ceilometer 6.0.0.0b4.dev21\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2016-03-08 04:34+0000\n" +"Project-Id-Version: ceilometer 6.0.1.dev11\n" +"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" +"POT-Creation-Date: 2016-05-19 11:00+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"PO-Revision-Date: 2016-03-07 04:27+0000\n" -"Last-Translator: Robert Simai \n" +"PO-Revision-Date: 2016-04-04 05:06+0000\n" +"Last-Translator: Monika Wolf \n" "Language-Team: German\n" "Language: de\n" "X-Generator: Zanata 3.7.3\n" diff -Nru ceilometer-6.0.0/ceilometer/locale/de/LC_MESSAGES/ceilometer-log-warning.po ceilometer-6.1.3/ceilometer/locale/de/LC_MESSAGES/ceilometer-log-warning.po --- ceilometer-6.0.0/ceilometer/locale/de/LC_MESSAGES/ceilometer-log-warning.po 2016-04-07 07:30:27.000000000 +0000 +++ ceilometer-6.1.3/ceilometer/locale/de/LC_MESSAGES/ceilometer-log-warning.po 2016-07-21 10:20:12.000000000 +0000 @@ -1,9 +1,9 @@ # Monika Wolf , 2016. #zanata msgid "" msgstr "" -"Project-Id-Version: ceilometer 6.0.0.0b4.dev34\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2016-03-09 20:26+0000\n" +"Project-Id-Version: ceilometer 6.0.1.dev11\n" +"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" +"POT-Creation-Date: 2016-05-19 11:00+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" diff -Nru ceilometer-6.0.0/ceilometer/locale/de/LC_MESSAGES/ceilometer.po ceilometer-6.1.3/ceilometer/locale/de/LC_MESSAGES/ceilometer.po --- ceilometer-6.0.0/ceilometer/locale/de/LC_MESSAGES/ceilometer.po 2016-04-07 07:30:27.000000000 +0000 +++ ceilometer-6.1.3/ceilometer/locale/de/LC_MESSAGES/ceilometer.po 2016-07-21 10:20:12.000000000 +0000 @@ -6,19 +6,16 @@ # Carsten Duch , 2014 # Christian Berendt , 2014 # Ettore Atalan , 2014 -# OpenStack Infra , 2015. #zanata -# Tom Cocozzello , 2015. #zanata -# Monika Wolf , 2016. #zanata -# Tom Cocozzello , 2016. #zanata +# Frank Kloeker , 2016. #zanata msgid "" msgstr "" -"Project-Id-Version: ceilometer 6.0.0.0b4.dev50\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2016-03-19 00:57+0000\n" +"Project-Id-Version: ceilometer 6.0.1.dev11\n" +"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" +"POT-Creation-Date: 2016-05-19 11:00+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"PO-Revision-Date: 2016-03-14 08:40+0000\n" +"PO-Revision-Date: 2016-04-04 05:03+0000\n" "Last-Translator: Monika Wolf \n" "Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -210,7 +207,7 @@ msgstr "Kein Plug-in mit dem Namen %(plugin)s verfügbar für %(name)s." msgid "Node Manager init failed" -msgstr "Initialisierung von Node Manager fehlgeschlagen" +msgstr "Initialisierung von Knoten-Manager fehlgeschlagen" #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" @@ -490,6 +487,11 @@ msgid "YAML error reading Definitions file %(file)s" msgstr "YAML-Fehler beim Lesen von Definitionsdatei %(file)s." +msgid "alarms URLs is unavailable when Aodh is disabled or unavailable." +msgstr "" +"Alarm-URLs sind nicht verfügbar, wenn Aodh inaktiviert oder nicht verfügbar " +"ist." + #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "Abruf von CPU-Zeit nicht möglich für %(id)s: %(e)s" diff -Nru ceilometer-6.0.0/ceilometer/locale/es/LC_MESSAGES/ceilometer-log-error.po ceilometer-6.1.3/ceilometer/locale/es/LC_MESSAGES/ceilometer-log-error.po --- ceilometer-6.0.0/ceilometer/locale/es/LC_MESSAGES/ceilometer-log-error.po 2016-04-07 07:30:27.000000000 +0000 +++ ceilometer-6.1.3/ceilometer/locale/es/LC_MESSAGES/ceilometer-log-error.po 2016-07-21 10:20:12.000000000 +0000 @@ -1,9 +1,9 @@ # Eugènia Torrella , 2016. #zanata msgid "" msgstr "" -"Project-Id-Version: ceilometer 6.0.0.0b4.dev50\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2016-03-19 00:57+0000\n" +"Project-Id-Version: ceilometer 6.0.1.dev11\n" +"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" +"POT-Creation-Date: 2016-05-19 11:00+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" diff -Nru ceilometer-6.0.0/ceilometer/locale/es/LC_MESSAGES/ceilometer-log-info.po ceilometer-6.1.3/ceilometer/locale/es/LC_MESSAGES/ceilometer-log-info.po --- ceilometer-6.0.0/ceilometer/locale/es/LC_MESSAGES/ceilometer-log-info.po 2016-04-07 07:30:27.000000000 +0000 +++ ceilometer-6.1.3/ceilometer/locale/es/LC_MESSAGES/ceilometer-log-info.po 2016-07-21 10:20:12.000000000 +0000 @@ -1,9 +1,9 @@ # Eugènia Torrella , 2016. #zanata msgid "" msgstr "" -"Project-Id-Version: ceilometer 6.0.0.0b4.dev50\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2016-03-19 00:57+0000\n" +"Project-Id-Version: ceilometer 6.0.1.dev11\n" +"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" +"POT-Creation-Date: 2016-05-19 11:00+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" diff -Nru ceilometer-6.0.0/ceilometer/locale/es/LC_MESSAGES/ceilometer.po ceilometer-6.1.3/ceilometer/locale/es/LC_MESSAGES/ceilometer.po --- ceilometer-6.0.0/ceilometer/locale/es/LC_MESSAGES/ceilometer.po 2016-04-07 07:30:28.000000000 +0000 +++ ceilometer-6.1.3/ceilometer/locale/es/LC_MESSAGES/ceilometer.po 2016-07-21 10:20:12.000000000 +0000 @@ -5,19 +5,16 @@ # Translators: # Rafael Rivero , 2015 # Marian Tort , 2015. #zanata -# OpenStack Infra , 2015. #zanata -# Tom Cocozzello , 2015. #zanata # Eugènia Torrella , 2016. #zanata -# Tom Cocozzello , 2016. #zanata msgid "" msgstr "" -"Project-Id-Version: ceilometer 6.0.0.0rc2.dev7\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2016-03-23 09:32+0000\n" +"Project-Id-Version: ceilometer 6.0.1.dev11\n" +"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" +"POT-Creation-Date: 2016-05-19 11:00+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"PO-Revision-Date: 2016-03-24 11:03+0000\n" +"PO-Revision-Date: 2016-04-24 07:03+0000\n" "Last-Translator: Eugènia Torrella \n" "Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -27,7 +24,7 @@ #, python-format msgid "%(entity)s %(id)s Not Found" -msgstr "%(entity)s %(id)s No encontrado" +msgstr "No se ha encontrado %(entity)s %(id)s" #, python-format msgid "Arithmetic transformer must use at least one meter in expression '%s'" @@ -46,15 +43,15 @@ #, python-format msgid "Could not connect slave host: %s " -msgstr "No se ha podido conectar con el host esclavo: %s" +msgstr "No se ha podido conectar el host esclavo: %s" #, python-format msgid "Could not connect to XenAPI: %s" -msgstr "No se puede conectar a XenAPI: %s" +msgstr "No se ha podido conectar con XenAPI: %s" #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" -msgstr "No se ha podido obtener CPU Util para %(id)s: %(e)s" +msgstr "No se ha podido obtener la utilización de CPU para %(id)s: %(e)s" #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" @@ -62,7 +59,7 @@ #, python-format msgid "Could not get VM %s CPU Utilization" -msgstr "No se puede obtener la utilización de CPU de VM %s" +msgstr "No se ha podido obtener la utilización de CPU de la VM %s" #, python-format msgid "Couldn't obtain IP address of instance %s" @@ -72,8 +69,8 @@ "Dispatcher target was not set, no meter will be posted. Set the target in " "the ceilometer.conf file" msgstr "" -"No se ha establecido el destino de asignador, no se enviará ningún medidor. " -"Establezca el destino en el archivo ceilometer.conf" +"No se ha definido el destino del asignador, no se enviará ningún medidor. " +"Defina el destino en el archivo ceilometer.conf" #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" @@ -89,10 +86,10 @@ #, python-format msgid "Error parsing HTTP response: %s" -msgstr "Error analizándo respuesta HTTP: %s." +msgstr "Error al analizar la respuesta HTTP: %s." msgid "Error stopping pollster." -msgstr "Error al detener el pollster." +msgstr "Error al detener el sondeador." msgid "Event" msgstr "Suceso" @@ -130,15 +127,15 @@ #, python-format msgid "Failed to load any notification handlers for %s" -msgstr "No se ha podido cargar ningún manejador de notificación para %s" +msgstr "No se ha podido cargar ningún manejador de notificaciones para %s" #, python-format msgid "Failed to parse the timestamp value %s" -msgstr "No se ha podido analizar el valor de indicación de fecha y hora %s" +msgstr "No se ha podido analizar el valor de la indicación de fecha y hora %s" #, python-format msgid "Failed to publish %d datapoints, dropping them" -msgstr "No se han podido publicar los puntos de datos %d, descartándolos" +msgstr "No se han podido publicar los puntos de datos %d, se descartarán" #, python-format msgid "Failed to publish %d datapoints, queue them" @@ -146,7 +143,7 @@ #, python-format msgid "Failed to record metering data: %s" -msgstr "No se ha podido registrar los datos de medición: %s" +msgstr "No se han podido registrar los datos de medición: %s" #, python-format msgid "Filter expression not valid: %s" @@ -173,12 +170,12 @@ "Invalid YAML syntax in Definitions file %(file)s at line: %(line)s, column: " "%(column)s." msgstr "" -"Sintaxis de YAML no válida en archivo de definiciones %(file)s en la línea: " +"Sintaxis de YAML no válida en archivo de definiciones %(file)s, en la línea: " "%(line)s, columna: %(column)s." #, python-format msgid "Invalid period %(period)s: %(err)s" -msgstr "Periodo no válido %(period)s: %(err)s" +msgstr "Período no válido %(period)s: %(err)s" #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" @@ -190,7 +187,8 @@ #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" -"Se ha devuelto más de un suceso con el %s del controlador de almacenamiento" +"Se ha devuelto más de un suceso con el id %s del controlador de " +"almacenamiento" #, python-format msgid "Multiple VM %s found in XenServer" @@ -198,7 +196,8 @@ msgid "Must specify connection_url, and connection_password to use" msgstr "" -"Debe especificar el url_conexión y la contraseña_conexión para utilizar" +"Debe especificar los valores de connection_url y connection_password a " +"utilizar" #, python-format msgid "No plugin named %(plugin)s available for %(name)s" @@ -209,7 +208,7 @@ #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" -msgstr "No está autorizado para acceder a %(aspect)s %(id)s" +msgstr "No tiene autorización para acceder a %(aspect)s %(id)s" #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" @@ -224,26 +223,26 @@ "Operator %(operator)s is not supported. Only equality operator is available " "for field %(field)s" msgstr "" -"El operador %(operator)s no se admite. Solo hay disponible el operador de " -"igualdad para el campo %(field)s" +"El operador %(operator)s no se admite. En el campo %(field)s solo se puede " +"utilizar el operador de igualdad" #, python-format msgid "" "Operator %(operator)s is not supported. The supported operators are: " "%(supported)s" msgstr "" -"El operador %(operator)s no está admitido. Los operadores admitidos son: " +"El operador %(operator)s no se admite. Los operadores admitidos son: " "%(supported)s" #, python-format msgid "Order-by expression not valid: %s" -msgstr "Expresión de ordenar por no válida: %s" +msgstr "Expresión de Ordenar por no válida: %s" #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(name)s: %(err)s" msgstr "" -"Error de análisis en especificación de JSONPath '%(jsonpath)s' para " +"Error de análisis en la especificación de JSONPath '%(jsonpath)s' para " "%(name)s: %(err)s" msgid "Period must be positive." @@ -258,7 +257,7 @@ #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" -"Interconexión %(pipeline)s: Continúe tras el error de la aplicación de " +"Interconexión %(pipeline)s: Continuar tras error de la aplicación de " "publicación %(pub)s" #, python-format @@ -270,7 +269,7 @@ "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" -"Interconexión %(pipeline)s: Salga tras error del transformador %(trans)s " +"Interconexión %(pipeline)s: Salir tras error del transformador %(trans)s " "para %(smp)s" #, python-format @@ -281,7 +280,7 @@ #, python-format msgid "Polling %(mtr)s sensor failed for %(cnt)s times!" -msgstr "¡El sensor de sondeo %(mtr)s ha fallado %(cnt)s veces!" +msgstr "El sondeo al sensor %(mtr)s ha fallado %(cnt)s veces." #, python-format msgid "Polling %(name)s failed for %(cnt)s times!" @@ -289,24 +288,24 @@ #, python-format msgid "Pollster for %s is disabled!" -msgstr "¡El Pollster para %s está inhabilitado!" +msgstr "El sondeador de %s está deshabilitado." #, python-format msgid "Prevent pollster %(name)s for polling source %(source)s anymore!" -msgstr "¡Impedir pollster %(name)s para el origen de sondeo %(source)s ahora!" +msgstr "" +"Impedir que el sondeador %(name)s actúe más en el origen de sondeo %(source)s" #, python-format msgid "" "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" -"Se supera la longitud máxima de aplicación de publicación local_queue, " -"descartando los ejemplos más antiguos %d" +"Se ha superado la longitud máxima de aplicación de publicación local_queue, " +"se descartarán los ejemplos más antiguos %d" #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" -"No se conoce la política de publicación (%s) forzar para tomar el valor " -"predeterminado" +"No se conoce la política de publicación (%s), forzar al valor predeterminado" #, python-format msgid "RGW AdminOps API returned %(status)s %(reason)s" @@ -314,12 +313,12 @@ msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" -"La solicitud no ha podido conectar con OpenDaylight con la API REST " -"NorthBound" +"Ha fallado la solicitud de establecer conexión con OpenDaylight con la API " +"REST NorthBound" #, python-format msgid "Required field %s not specified" -msgstr "Campo necesario %s no especificado" +msgstr "No se ha especificado el campo obligatorio %s" msgid "Resource" msgstr "Recurso" @@ -328,30 +327,30 @@ msgstr "Muestra" msgid "Samples should be included in request body" -msgstr "Los ejemplos se deben incluir en el cuerpo de la solicitud" +msgstr "Se deben incluir ejemplos en el cuerpo de la solicitud" #, python-format msgid "Skip loading extension for %s" -msgstr "Omitir la extensión de carga para %s" +msgstr "Omitir la carga de la extensión de %s" #, python-format msgid "String %s is not a valid isotime" -msgstr "La serie %s no es una hora iso válida" +msgstr "La cadena %s no es una hora ISO válida" msgid "" "The Yaml file that defines mapping between samples and gnocchi resources/" "metrics" msgstr "" -"El archivo Yaml que define la correlación entre los ejemplos y recursos/" -"métricas gnocchi" +"El archivo Yaml que define la correlación entre los ejemplos y los recursos/" +"métricas de gnocchi" #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is: " "%(supported)s" msgstr "" -"El tipo de datos %(type)s no es compatible. La lista de tipo de datos " -"admitido es: %(supported)s" +"El tipo de datos %(type)s no es compatible. La lista de tipos de datos " +"admitidos es: %(supported)s" #, python-format msgid "The field 'fields' is required for %s" @@ -359,11 +358,11 @@ msgid "The path for the file publisher is required" msgstr "" -"La vía de acceso para la aplicación de publicación de archivos es necesaria" +"La vía de acceso para la aplicación de publicación de archivos es obligatoria" #, python-format msgid "UDP: Cannot decode data sent by %s" -msgstr "UDP: no se pueden decodificar los datos enviados por %s" +msgstr "UDP: no se pueden descodificar los datos enviados por %s" msgid "UDP: Unable to store meter" msgstr "UDP: no se puede almacenar el medidor" @@ -401,7 +400,7 @@ "up." msgstr "" "No se ha podido volver a conectar con la mongodb primaria después de " -"%(retries)d intentos. Se va a abandonar." +"%(retries)d intentos. Abandonando." #, python-format msgid "" @@ -418,7 +417,7 @@ msgid "" "Unexpected exception converting %(value)s to the expected data type %(type)s." msgstr "" -"Excepción inesperada al convertir %(value)s al tipo de dato esperado " +"Excepción inesperada al convertir %(value)s al tipo de datos esperado " "%(type)s." #, python-format @@ -463,22 +462,22 @@ #, python-format msgid "Unknown status %(stat)s received on vip %(id)s, skipping sample" msgstr "" -"Se ha recibido un estado desconocido %(stat)s en vip %(id)s, se omitirá el " -"ejemplo" +"Se ha recibido un estado desconocido %(stat)s en el vip %(id)s, se omitirá " +"el ejemplo" #, python-format msgid "Unknown status %(stat)s received on vpn %(id)s, skipping sample" msgstr "" -"Se ha recibido un estado desconocido %(stat)s en vpn %(id)s, se omitirá el " -"ejemplo" +"Se ha recibido un estado desconocido %(stat)s en la vpn %(id)s, se omitirá " +"el ejemplo" #, python-format msgid "VM %s not found in VMware vSphere" -msgstr "VM %s no se ha encontrado en VMware vSphere" +msgstr "No se ha encontrado la VM %s en VMware vSphere" #, python-format msgid "VM %s not found in XenServer" -msgstr "No se han encontrado VM %s en XenServer" +msgstr "No se ha encontrado la VM %s en XenServer" msgid "Wrong sensor type" msgstr "Tipo de sensor incorrecto" @@ -490,9 +489,14 @@ msgid "YAML error reading Definitions file %(file)s" msgstr "Error de YAML al leer el archivo de definiciones %(file)s" +msgid "alarms URLs is unavailable when Aodh is disabled or unavailable." +msgstr "" +"Cuando Aodh está deshabilitado o no disponible, los URL de las alarmas no " +"están disponibles." + #, python-format msgid "could not get CPU time for %(id)s: %(e)s" -msgstr "no se ha podido obtener tiempo de CPU para %(id)s: %(e)s" +msgstr "no se ha podido obtener el tiempo de CPU para %(id)s: %(e)s" msgid "direct option cannot be true when Gnocchi is enabled." msgstr "" @@ -501,30 +505,30 @@ #, python-format msgid "dropping out of time order sample: %s" -msgstr "saliendo del ejemplo de orden de tiempo: %s" +msgstr "descartando el ejemplo de orden de plazo tiempo excedido: %s" #, python-format msgid "dropping sample with no predecessor: %s" msgstr "eliminando la muestra sin predecesor: %s" msgid "ipmitool output length mismatch" -msgstr "la longitud de salida de ipmitool no coincide" +msgstr "no coincidencia en la longitud de salida de ipmitool" msgid "max_bytes and backup_count should be numbers." msgstr "max_bytes y backup_count deben ser números." #, python-format msgid "message signature invalid, discarding message: %r" -msgstr "firma de mensaje no válida, descartando mensaje: %r" +msgstr "firma de mensaje no válida, descartando el mensaje: %r" msgid "parse IPMI sensor data failed,No data retrieved from given input" msgstr "" -"ha fallado el análisis de datos de sensor IPMI,no se ha recuperado ningún " -"dato de la entrada" +"ha fallado el análisis de datos de sensor IPMI, no se ha recuperado ningún " +"dato de la entrada indicada" msgid "parse IPMI sensor data failed,unknown sensor type" msgstr "" -"ha fallado el análisis de datos de sensor IPMI,tipo de sensor desconocido" +"ha fallado el análisis de datos de sensor IPMI, tipo de sensor desconocido" msgid "running ipmitool failure" msgstr "fallo de ejecución de ipmitool" diff -Nru ceilometer-6.0.0/ceilometer/locale/fr/LC_MESSAGES/ceilometer.po ceilometer-6.1.3/ceilometer/locale/fr/LC_MESSAGES/ceilometer.po --- ceilometer-6.0.0/ceilometer/locale/fr/LC_MESSAGES/ceilometer.po 2016-04-07 07:30:27.000000000 +0000 +++ ceilometer-6.1.3/ceilometer/locale/fr/LC_MESSAGES/ceilometer.po 2016-07-21 10:20:12.000000000 +0000 @@ -21,20 +21,17 @@ # EVEILLARD , 2013 # Corinne Verheyde , 2013 # Corinne Verheyde , 2013 -# OpenStack Infra , 2015. #zanata -# Tom Cocozzello , 2015. #zanata -# Corinne Verheyde , 2016. #zanata -# Tom Cocozzello , 2016. #zanata +# leroy , 2016. #zanata msgid "" msgstr "" -"Project-Id-Version: ceilometer 6.0.0.0b4.dev34\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2016-03-09 20:26+0000\n" +"Project-Id-Version: ceilometer 6.0.1.dev11\n" +"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" +"POT-Creation-Date: 2016-05-19 11:00+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"PO-Revision-Date: 2016-03-09 05:03+0000\n" -"Last-Translator: Corinne Verheyde \n" +"PO-Revision-Date: 2016-04-24 08:42+0000\n" +"Last-Translator: leroy \n" "Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "Generated-By: Babel 2.0\n" @@ -43,12 +40,12 @@ #, python-format msgid "%(entity)s %(id)s Not Found" -msgstr "%(entity)s %(id)s n'a pas été trouvé" +msgstr "%(entity)s %(id)s non trouvé" #, python-format msgid "Arithmetic transformer must use at least one meter in expression '%s'" msgstr "" -"Le transformateur arithmétique doit utiliser au moins un mètre dans " +"Le transformateur arithmétique doit utiliser au moins un compteur dans " "l'expression '%s'" #, python-format @@ -59,28 +56,27 @@ #, python-format msgid "Continue after error from %(name)s: %(error)s" -msgstr "Continue après l'erreur %(name)s: %(error)s " +msgstr "Continuer après l'erreur de %(name)s : %(error)s " #, python-format msgid "Could not connect slave host: %s " -msgstr "Impossible de se connecter à l'hôte slave: %s " +msgstr "Impossible de se connecter à l'hôte esclave : %s " #, python-format msgid "Could not connect to XenAPI: %s" -msgstr "Connexion impossible XenAPI: %s" +msgstr "Impossible de se connecter à XenAPI : %s" #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" -msgstr "Ne peut pas recevoir l'utilisation CPU pour %(id)s: %(e)s" +msgstr "Impossible d'obtenir l'utilisation UC pour %(id)s : %(e)s" #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" -msgstr "" -"Impossible de récupérer l'utilisation de la mémoire pour %(id)s : %(e)s" +msgstr "Impossible d'obtenir l'utilisation de la mémoire pour %(id)s : %(e)s" #, python-format msgid "Could not get VM %s CPU Utilization" -msgstr "Impossible d'obtenir l'utilisation CPU de la VM %s" +msgstr "Impossible d'obtenir l'utilisation UC de la machine virtuelle %s" #, python-format msgid "Couldn't obtain IP address of instance %s" @@ -90,12 +86,12 @@ "Dispatcher target was not set, no meter will be posted. Set the target in " "the ceilometer.conf file" msgstr "" -"La cible du répartiteur n'était pas définie, aucun compteur ne sera envoyé. " +"La cible du répartiteur n'était pas définie, aucun compteur ne sera publié. " "Définissez la cible dans le fichier ceilometer.conf" #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" -msgstr "Suppression du %(type)s de notification (uuid:%(msgid)s)" +msgstr "Suppression de la notification %(type)s (uuid : %(msgid)s)" #, python-format msgid "" @@ -107,7 +103,7 @@ #, python-format msgid "Error parsing HTTP response: %s" -msgstr "Erreur lors de l'analyse syntaxique de la réponse: %s" +msgstr "Erreur lors de l'analyse syntaxique de la réponse HTTP : %s" msgid "Error stopping pollster." msgstr "Erreur lors de l'arrêt du sondeur." @@ -116,18 +112,18 @@ msgstr "Événement" msgid "Expression evaluated to a NaN value!" -msgstr "Expression évaluée avec une valeur not-a-number !" +msgstr "Expression évaluée avec une valeur NaN !" #, python-format msgid "Failed to import extension for %(name)s: %(error)s" -msgstr "Echec de l'importation de l'extension pour %(name)s: %(error)s" +msgstr "Échec de l'importation de l'extension pour %(name)s : %(error)s" #, python-format msgid "" "Failed to inspect data of instance , domain state " "is SHUTOFF." msgstr "" -"Echec de l'inspection des données de l'instance . " +"Échec de l'inspection des données de l'instance . " "Le domaine est à l'état SHUTOFF (INTERRUPTION)." #, python-format @@ -135,7 +131,7 @@ "Failed to inspect memory usage of %(instance_uuid)s, can not get info from " "libvirt: %(error)s" msgstr "" -"Echec de l'inspection de l'utilisation de la mémoire de %(instance_uuid)s. " +"Échec de l'inspection de l'utilisation de la mémoire de %(instance_uuid)s. " "Impossible d'obtenir des informations de libvirt : %(error)s" #, python-format @@ -143,46 +139,45 @@ "Failed to inspect memory usage of instance , can " "not get info from libvirt." msgstr "" -"Echec de l'inspection de l'utilisation de la mémoire de l'instance . Impossible d'obtenir des informations de libvirt." #, python-format msgid "Failed to load any notification handlers for %s" -msgstr "Échec du chargement de tous les gestionnaires de notification pour %s" +msgstr "Échec du chargement des gestionnaires de notification pour %s" #, python-format msgid "Failed to parse the timestamp value %s" -msgstr "Echec de l'analyse syntaxique de la valeur d'horodatage %s" +msgstr "Échec de l'analyse syntaxique de la valeur d'horodatage %s" #, python-format msgid "Failed to publish %d datapoints, dropping them" -msgstr "Echec de la publication des points de données %d. Suppression en cours" +msgstr "Échec de la publication de %d points de données. Suppression en cours" #, python-format msgid "Failed to publish %d datapoints, queue them" msgstr "" -"Echec de la publication des points de données %d. Mettez-les en file " -"d'attente" +"Échec de la publication de %d points de données. Mise en file d'attente" #, python-format msgid "Failed to record metering data: %s" -msgstr "Impossible d'enregistrer les données de mesure: %s" +msgstr "Impossible d'enregistrer les données de mesure : %s" #, python-format msgid "Filter expression not valid: %s" -msgstr "Filtre de l'expression n'est pas valide: %s" +msgstr "Expression de filtre non valide : %s" #, python-format msgid "Ignoring instance %(name)s (%(instance_id)s) : %(error)s" -msgstr "L'instance %(name)s est ignorée (%(instance_id)s) : %(error)s" +msgstr "Instance %(name)s ignorée (%(instance_id)s) : %(error)s" #, python-format msgid "Ignoring instance %(name)s: %(error)s" -msgstr "instance %(name)s: %(error)s ignoré" +msgstr "Instance %(name)s : %(error)s ignorée" #, python-format msgid "Ignoring loadbalancer %(loadbalancer_id)s" -msgstr "Loadbalancer %(loadbalancer_id)s ignoré" +msgstr "Équilibreur de charge %(loadbalancer_id)s ignoré" #, python-format msgid "Ignoring pool %(pool_id)s" @@ -209,27 +204,27 @@ #, python-format msgid "More than one event with id %s returned from storage driver" -msgstr "" -"Plus d'un événement avec l'identificateur %s a été renvoyé à partir du " -"pilote de stockage" +msgstr "Plusieurs événements avec l'ID %s retournés par le pilote de stockage" #, python-format msgid "Multiple VM %s found in XenServer" msgstr "Plusieurs machines virtuelles %s trouvées dans XenServer" msgid "Must specify connection_url, and connection_password to use" -msgstr "Il faut indiquer connection_url et connection_password pour utiliser" +msgstr "" +"connection_url et connection_password doivent être indiqués pour " +"l'utilisation de" #, python-format msgid "No plugin named %(plugin)s available for %(name)s" -msgstr "Aucun plugin nommé %(plugin)s n'est disponible pour %(name)s" +msgstr "Aucun plug-in nommé %(plugin)s n'est disponible pour %(name)s" msgid "Node Manager init failed" -msgstr "Echec de l'initialisation du gestionnaire de noeud" +msgstr "Échec de l'initialisation du gestionnaire de nœud" #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" -msgstr "Non autorisé à accéder %(aspect)s %(id)s " +msgstr "Non autorisé à accéder à %(aspect)s %(id)s " #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" @@ -244,27 +239,27 @@ "Operator %(operator)s is not supported. Only equality operator is available " "for field %(field)s" msgstr "" -"Opérateur %(operator)s non supporté. Seul l'opérateur égalité est disponible " -"pour le champ %(field)s" +"Opérateur %(operator)s non pris en charge. Seul l'opérateur d'égalité est " +"disponible pour la zone %(field)s" #, python-format msgid "" "Operator %(operator)s is not supported. The supported operators are: " "%(supported)s" msgstr "" -"L'opérateur %(operator)s n'est pas supporté. Les opérateurs supportés sont: " -"%(supported)s" +"L'opérateur %(operator)s n'est pas pris en charge. Les opérateurs pris en " +"charge sont les suivants : %(supported)s" #, python-format msgid "Order-by expression not valid: %s" -msgstr "L'expression de tri n'est pas valide : %s" +msgstr "Expression Order-by non valide : %s" #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(name)s: %(err)s" msgstr "" -"Erreur d'analyse dans la spécification JSONPath '%(jsonpath)s' pour " -"%(name)s : %(err)s" +"Erreur d'analyse syntaxique dans la spécification JSONPath '%(jsonpath)s' " +"pour %(name)s : %(err)s" msgid "Period must be positive." msgstr "La période doit être positive." @@ -272,27 +267,28 @@ #, python-format msgid "Pipeline %(pipeline)s: %(status)s after error from publisher %(pub)s" msgstr "" -"Pipeline %(pipeline)s : statut %(status)s après erreur du diffuseur %(pub)s" +"Pipeline %(pipeline)s : Statut %(status)s après erreur de l'éditeur %(pub)s" #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" -msgstr "Pipeline %(pipeline)s: Reprise après une erreur de l'éditeur %(pub)s" +msgstr "Pipeline %(pipeline)s : Reprise après une erreur de l'éditeur %(pub)s" #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" -msgstr "Pipeline %(pipeline)s: Erreur à la purge du transformateur %(trans)s" +msgstr "" +"Pipeline %(pipeline)s : Erreur lors de la purge du transformateur %(trans)s" #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" -"Pipeline %(pipeline)s: Sortie après erreur du transformateur %(trans)s pour " +"Pipeline %(pipeline)s : Sortie après erreur du transformateur %(trans)s pour " "%(smp)s" #, python-format msgid "Plugin specified, but no plugin name supplied for %s" -msgstr "Plugin spécifié, mais aucun nom de plugin n'est fourni pour %s" +msgstr "Plug-in spécifié, mais aucun nom de plug-in fourni pour %s" #, python-format msgid "Polling %(mtr)s sensor failed for %(cnt)s times!" @@ -300,26 +296,28 @@ #, python-format msgid "Polling %(name)s failed for %(cnt)s times!" -msgstr "Sondage de %(name)s %(cnt)s fois en échec!" +msgstr "Échec du sondage de %(name)s pendant %(cnt)s fois !" #, python-format msgid "Pollster for %s is disabled!" -msgstr "Le pollster pour %s est désactivé !" +msgstr "Le sondeur pour %s est désactivé !" #, python-format msgid "Prevent pollster %(name)s for polling source %(source)s anymore!" -msgstr "Empêcher le pollster %(name)s d'interroger la source %(source)s !" +msgstr "Empêcher le sondeur %(name)s d'interroger la source %(source)s !" #, python-format msgid "" "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" -"La longueur maximale de local_queue du diffuseur est dépassée, suppression " +"La longueur maximale de local_queue de l'éditeur est dépassée, suppression " "des %d échantillons les plus anciens" #, python-format msgid "Publishing policy is unknown (%s) force to default" -msgstr "La politique de publication est inconnue (%s) forcé le défaut" +msgstr "" +"La stratégie de publication est inconnue (%s), forcée sur stratégie par " +"défaut" #, python-format msgid "RGW AdminOps API returned %(status)s %(reason)s" @@ -327,58 +325,57 @@ msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" -"La demande n'a pas réussi à se connecter à OpenDaylight avec l'API REST " -"NorthBound" +"La demande n'a pas pu se connecter à OpenDaylight avec l'API REST NorthBound" #, python-format msgid "Required field %s not specified" -msgstr "Champ requis %s non spécifiée" +msgstr "Zone obligatoire %s non spécifiée" msgid "Resource" msgstr "Ressource" msgid "Sample" -msgstr "Echantillon" +msgstr "Échantillon" msgid "Samples should be included in request body" -msgstr "Des exemples doivent être inclus dans le corps de demande" +msgstr "Des exemples doivent être inclus dans le corps de la demande" #, python-format msgid "Skip loading extension for %s" -msgstr "Passer le chargement de l'extension pour %s" +msgstr "Omettre le chargement de l'extension pour %s" #, python-format msgid "String %s is not a valid isotime" -msgstr "La chaine de caractère %s n'est pas valide isotime" +msgstr "La chaine %s n'est pas un isotime valide" msgid "" "The Yaml file that defines mapping between samples and gnocchi resources/" "metrics" msgstr "" -"Fichier Yaml qui définit le mappage entre les exemples et les ressources " -"gnocchi /les métriques" +"Fichier Yaml qui définit le mappage entre les échantillons et les ressources/" +"métriques gnocchi" #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is: " "%(supported)s" msgstr "" -"Le type de données %(type)s n'est pas supporté. Les types de données " -"supportés sont: %(supported)s" +"Le type de données %(type)s n'est pas pris en charge. La liste de types de " +"données pris en charge est la suivante : %(supported)s" #, python-format msgid "The field 'fields' is required for %s" -msgstr "Le champ 'fields' est requis pour %s" +msgstr "La zone 'fields' est obligatoire pour %s" msgid "The path for the file publisher is required" -msgstr "Le chemin du éditeur de fichier est obligatoire " +msgstr "Le chemin de l'éditeur de fichier est obligatoire " #, python-format msgid "UDP: Cannot decode data sent by %s" -msgstr "UDP: Impossible de décoder les données envoyées par %s" +msgstr "UDP : Impossible de décoder les données envoyées par %s" msgid "UDP: Unable to store meter" -msgstr "UDP: Impossible de stocker les mesures" +msgstr "UDP: Impossible de stocker le compteur" #, python-format msgid "Unable to connect to the database server: %(errmsg)s." @@ -388,12 +385,12 @@ msgid "" "Unable to convert the value %(value)s to the expected data type %(type)s." msgstr "" -"Impossible de convertir la valeur %(value)s vers le type de données attendu " +"Impossible de convertir la valeur %(value)s dans le type de données attendu " "%(type)s." #, python-format msgid "Unable to discover resources: %s" -msgstr "Impossible de découvrir les ressources: %s" +msgstr "Impossible de découvrir les ressources : %s" #, python-format msgid "Unable to evaluate expression %(expr)s: %(exc)s" @@ -405,15 +402,15 @@ #, python-format msgid "Unable to load the hypervisor inspector: %s" -msgstr "Impossible de télécharger l'inspecteur hypervisor: %s" +msgstr "Impossible de télécharger l'inspecteur d'hyperviseur : %s" #, python-format msgid "" "Unable to reconnect to the primary mongodb after %(retries)d retries. Giving " "up." msgstr "" -"Impossible de se reconnecter au serveur mongodb principal après %(retries)d " -"tentatives. Abandon." +"Impossible de se reconnecter au serveur mongodb principal au bout de " +"%(retries)d tentatives. Abandon." #, python-format msgid "" @@ -424,105 +421,115 @@ "Nouvelle tentative dans %(retry_interval)d secondes." msgid "Unable to send sample over UDP" -msgstr "Impossible d'envoyer l'échantillon en UDP" +msgstr "Impossible d'envoyer l'échantillon sur UDP" #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type %(type)s." msgstr "" "Exception inattendue lors de la conversion de %(value)s dans le type de " -"donnée attendue %(type)s." +"donnée attendu %(type)s." #, python-format msgid "Unknown discovery extension: %s" -msgstr "Découverte d'une extension inconnue: %s" +msgstr "Extension de découverte inconnue : %s" #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." -msgstr "Type de métadonnées inconnu, la clé (%s) n'est pas requêtable" +msgstr "Type de métadonnées inconnu. La clé (%s) ne peut pas être interrogée." #, python-format msgid "" "Unknown status %(stat)s received on Load Balancer %(id)s, skipping sample" msgstr "" -"Statut %(stat)s inconnu reçu sur le Load Balancer %(id)s, échantillon ignoré" +"Statut %(stat)s inconnu reçu sur l'équilibreur de charge %(id)s, " +"échantillon ignoré" #, python-format msgid "Unknown status %(stat)s received on fw %(id)s,skipping sample" -msgstr "Etat %(stat)s inconnu reçu sur le pare-feu %(id)s, échantillon ignoré" +msgstr "" +"Statut %(stat)s inconnu reçu sur le pare-feu %(id)s, échantillon ignoré" #, python-format msgid "Unknown status %(stat)s received on listener %(id)s, skipping sample" -msgstr "Etat %(stat)s inconnu reçu sur le listener %(id)s, échantillon ignoré" +msgstr "" +"Statut %(stat)s inconnu reçu sur le programme d'écoute %(id)s, échantillon " +"ignoré" #, python-format msgid "Unknown status %(stat)s received on member %(id)s, skipping sample" -msgstr "Etat %(stat)s inconnu reçu sur le membre %(id)s, échantillon ignoré" +msgstr "Statut %(stat)s inconnu reçu sur le membre %(id)s, échantillon ignoré" #, python-format msgid "Unknown status %(stat)s received on pool %(id)s, skipping sample" -msgstr "Etat %(stat)s inconnu reçu sur le pool %(id)s, échantillon ignoré" +msgstr "Statut %(stat)s inconnu reçu sur le pool %(id)s, échantillon ignoré" #, python-format msgid "Unknown status %(stat)s received on vip %(id)s, skipping sample" msgstr "" -"Etat %(stat)s inconnu reçu sur l'IP virtuelle %(id)s, échantillon ignoré" +"Statut %(stat)s inconnu reçu sur l'IP virtuelle %(id)s, échantillon ignoré" #, python-format msgid "Unknown status %(stat)s received on vpn %(id)s, skipping sample" -msgstr "Etat %(stat)s inconnu reçu sur le vpn %(id)s, échantillon ignoré" +msgstr "Statut %(stat)s inconnu reçu sur le VPN %(id)s, échantillon ignoré" #, python-format msgid "VM %s not found in VMware vSphere" -msgstr "La machine virtuelle %s est introuvable dans VMware vSphere" +msgstr "Machine virtuelle %s non trouvée dans VMware vSphere" #, python-format msgid "VM %s not found in XenServer" msgstr "VM %s non trouvé dans XenServer" msgid "Wrong sensor type" -msgstr "Type de détecteur incorrect" +msgstr "Type de détecteur erroné" msgid "XenAPI not installed" -msgstr "XenAPI n'est pas installé" +msgstr "XenAPI non installé" #, python-format msgid "YAML error reading Definitions file %(file)s" msgstr "Erreur YAML lors de la lecture du fichier de définitions %(file)s" +msgid "alarms URLs is unavailable when Aodh is disabled or unavailable." +msgstr "" +"Les URL d'alarmes ne sont pas disponibles lorsque Aodh est désactivé ou non " +"disponible." + #, python-format msgid "could not get CPU time for %(id)s: %(e)s" -msgstr "impossible d'obtenir le temps UC pour %(id)s : %(e)s" +msgstr "ne peut pas obtenir le temps UC pour %(id)s : %(e)s" msgid "direct option cannot be true when Gnocchi is enabled." -msgstr "L'option directe ne peut pas être à vrai si Gnocchi est activé." +msgstr "" +"L'option directe ne peut pas être définie sur vrai si Gnocchi est activé." #, python-format msgid "dropping out of time order sample: %s" -msgstr "suppression de l'exemple de classement dans le temps : %s" +msgstr "suppression de l'échantillon de classement temporel : %s" #, python-format msgid "dropping sample with no predecessor: %s" -msgstr "abandon de l'échantillon sans prédécesseur: %s" +msgstr "abandon de l'échantillon sans prédécesseur : %s" msgid "ipmitool output length mismatch" -msgstr "Non-concordance de longueur de la sortie ipmitool" +msgstr "Non concordance de longueur de la sortie ipmitool" msgid "max_bytes and backup_count should be numbers." -msgstr "max_bytes et backup_count doivent etre des chiffres." +msgstr "max_bytes et backup_count doivent être des nombres." #, python-format msgid "message signature invalid, discarding message: %r" -msgstr "signature du message invalide, message ignoré: %r" +msgstr "signature de message non valide, message ignoré : %r" msgid "parse IPMI sensor data failed,No data retrieved from given input" msgstr "" -"Echec de l'analyse des données du détecteur IPMI, aucune donnée extraite à " +"Échec de l'analyse des données du détecteur IPMI. Aucune donnée extraite à " "partir de l'entrée fournie" msgid "parse IPMI sensor data failed,unknown sensor type" msgstr "" -"Echec de l'analyse des données du détecteur IPMI, type de détecteur inconnu" +"Échec de l'analyse des données du détecteur IPMI, type de détecteur inconnu" msgid "running ipmitool failure" -msgstr "Echec d'exécution d'ipmitool" +msgstr "Échec d'exécution d'ipmitool" diff -Nru ceilometer-6.0.0/ceilometer/locale/it/LC_MESSAGES/ceilometer.po ceilometer-6.1.3/ceilometer/locale/it/LC_MESSAGES/ceilometer.po --- ceilometer-6.0.0/ceilometer/locale/it/LC_MESSAGES/ceilometer.po 2016-04-07 07:30:28.000000000 +0000 +++ ceilometer-6.1.3/ceilometer/locale/it/LC_MESSAGES/ceilometer.po 2016-07-21 10:20:12.000000000 +0000 @@ -9,9 +9,9 @@ # Tom Cocozzello , 2016. #zanata msgid "" msgstr "" -"Project-Id-Version: ceilometer 6.0.0.0rc2.dev1\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2016-03-20 20:02+0000\n" +"Project-Id-Version: ceilometer 6.0.1.dev11\n" +"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" +"POT-Creation-Date: 2016-05-19 11:00+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" diff -Nru ceilometer-6.0.0/ceilometer/locale/ja/LC_MESSAGES/ceilometer.po ceilometer-6.1.3/ceilometer/locale/ja/LC_MESSAGES/ceilometer.po --- ceilometer-6.0.0/ceilometer/locale/ja/LC_MESSAGES/ceilometer.po 2016-04-07 07:30:28.000000000 +0000 +++ ceilometer-6.1.3/ceilometer/locale/ja/LC_MESSAGES/ceilometer.po 2016-07-21 10:20:12.000000000 +0000 @@ -10,9 +10,9 @@ # 笹原 昌美 , 2016. #zanata msgid "" msgstr "" -"Project-Id-Version: ceilometer 6.0.0.0rc2.dev9\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2016-03-28 22:52+0000\n" +"Project-Id-Version: ceilometer 6.0.1.dev11\n" +"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" +"POT-Creation-Date: 2016-05-19 11:00+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" diff -Nru ceilometer-6.0.0/ceilometer/locale/ko_KR/LC_MESSAGES/ceilometer-log-error.po ceilometer-6.1.3/ceilometer/locale/ko_KR/LC_MESSAGES/ceilometer-log-error.po --- ceilometer-6.0.0/ceilometer/locale/ko_KR/LC_MESSAGES/ceilometer-log-error.po 2016-04-07 07:30:28.000000000 +0000 +++ ceilometer-6.1.3/ceilometer/locale/ko_KR/LC_MESSAGES/ceilometer-log-error.po 2016-07-21 10:20:12.000000000 +0000 @@ -1,13 +1,14 @@ # SeYeon Lee , 2016. #zanata +# Sungjin Kang , 2016. #zanata msgid "" msgstr "" -"Project-Id-Version: ceilometer 6.0.0.0rc2.dev1\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2016-03-20 20:02+0000\n" +"Project-Id-Version: ceilometer 6.0.1.dev11\n" +"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" +"POT-Creation-Date: 2016-05-19 11:00+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"PO-Revision-Date: 2016-03-21 03:28+0000\n" +"PO-Revision-Date: 2016-04-25 02:00+0000\n" "Last-Translator: SeYeon Lee \n" "Language-Team: Korean (South Korea)\n" "Language: ko-KR\n" @@ -27,7 +28,7 @@ msgstr "디스패처에서 %s을(를) 처리하지 못하여 다시 대기열에 둡니다." msgid "Error connecting to coordination backend." -msgstr "조정 백엔드에 연결하는 중에 오류가 발생했습니다." +msgstr "조정 백엔드를 연결하는 중에 오류가 발생했습니다." msgid "Error getting group membership info from coordination backend." msgstr "조정 백엔드에서 그룹 멤버십 정보를 가져오는 중에 오류가 발생했습니다." @@ -35,18 +36,19 @@ #, python-format msgid "Error joining partitioning group %s, re-trying" msgstr "" -"파티션 지정 그룹 %s을(를) 결합하는 중에 오류가 발생하여, 다시 시도 중입니다." +"파티션 지정 그룹 %s을(를) 결합하는 중에 오류가 발생하여 다시 시도하는 중입니" +"다." #, python-format msgid "Error loading meter definition : %(err)s" -msgstr "미터 정의 로드 오류 : %(err)s" +msgstr "측정 정의 로드 오류 : %(err)s" #, python-format msgid "Error processing event and it will be dropped: %s" msgstr "이벤트 처리 중 오류가 발생하므로 삭제됨: %s" msgid "Error sending a heartbeat to coordination backend." -msgstr "하트비트를 조정 백엔드에 보내는 중에 오류가 발생했습니다." +msgstr "하트비트를 조정 백엔드에서 보내는 중에 오류가 발생했습니다." msgid "Fail to process a notification" msgstr "알림을 처리하는 데 실패" @@ -63,11 +65,11 @@ #, python-format msgid "Failed to connect to db, purpose %(purpose)s re-try later: %(err)s" -msgstr "db에 연결하는 데 실패, %(purpose)s 용도를 나중에 다시 시도: %(err)s" +msgstr "DB에 연결하는 데 실패, %(purpose)s 용도를 나중에 다시 시도: %(err)s" #, python-format msgid "Failed to connect to db, purpose %(purpose)s retry later: %(err)s" -msgstr "db에 연결하는 데 실패, %(purpose)s 용도를 나중에 다시 시도: %(err)s" +msgstr "DB에 연결하는 데 실패, %(purpose)s 용도를 나중에 다시 시도: %(err)s" #, python-format msgid "Failed to load resource due to error %s" diff -Nru ceilometer-6.0.0/ceilometer/locale/ko_KR/LC_MESSAGES/ceilometer-log-info.po ceilometer-6.1.3/ceilometer/locale/ko_KR/LC_MESSAGES/ceilometer-log-info.po --- ceilometer-6.0.0/ceilometer/locale/ko_KR/LC_MESSAGES/ceilometer-log-info.po 2016-04-07 07:30:28.000000000 +0000 +++ ceilometer-6.1.3/ceilometer/locale/ko_KR/LC_MESSAGES/ceilometer-log-info.po 2016-07-21 10:20:12.000000000 +0000 @@ -1,13 +1,13 @@ -# SeYeon Lee , 2016. #zanata +# Sungjin Kang , 2016. #zanata msgid "" msgstr "" -"Project-Id-Version: ceilometer 6.0.0.0rc2.dev1\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2016-03-20 20:02+0000\n" +"Project-Id-Version: ceilometer 6.0.1.dev11\n" +"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" +"POT-Creation-Date: 2016-05-19 11:00+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"PO-Revision-Date: 2016-03-21 03:56+0000\n" +"PO-Revision-Date: 2016-04-07 03:39+0000\n" "Last-Translator: SeYeon Lee \n" "Language-Team: Korean (South Korea)\n" "Language: ko-KR\n" @@ -106,7 +106,7 @@ #, python-format msgid "Skip pollster %(name)s, no %(p_context)sresources found this cycle" -msgstr "pollster %(name)s 건너뛰기, %(p_context)s 자원에서 이 주기를 발견함" +msgstr "Pollster %(name)s 건너뛰기, %(p_context)s 자원에서 이 주기를 발견함" #, python-format msgid "Starting server in PID %s" diff -Nru ceilometer-6.0.0/ceilometer/locale/ko_KR/LC_MESSAGES/ceilometer-log-warning.po ceilometer-6.1.3/ceilometer/locale/ko_KR/LC_MESSAGES/ceilometer-log-warning.po --- ceilometer-6.0.0/ceilometer/locale/ko_KR/LC_MESSAGES/ceilometer-log-warning.po 2016-04-07 07:30:28.000000000 +0000 +++ ceilometer-6.1.3/ceilometer/locale/ko_KR/LC_MESSAGES/ceilometer-log-warning.po 2016-07-21 10:20:12.000000000 +0000 @@ -1,13 +1,13 @@ -# SeYeon Lee , 2016. #zanata +# Sungjin Kang , 2016. #zanata msgid "" msgstr "" -"Project-Id-Version: ceilometer 6.0.0.0rc2.dev1\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2016-03-20 20:02+0000\n" +"Project-Id-Version: ceilometer 6.0.1.dev11\n" +"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" +"POT-Creation-Date: 2016-05-19 11:00+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"PO-Revision-Date: 2016-03-21 04:18+0000\n" +"PO-Revision-Date: 2016-04-07 03:34+0000\n" "Last-Translator: SeYeon Lee \n" "Language-Team: Korean (South Korea)\n" "Language: ko-KR\n" @@ -16,12 +16,12 @@ msgid "Can't connect to keystone, assuming aodh is disabled and retry later." msgstr "" -"keystone에 연결할 수 없습니다 . aodh가 사용되지 않는다고 가정하여 나중에 다" +"Keystone에 연결할 수 없습니다 . Aodh가 사용되지 않는다고 가정하여 나중에 다" "시 시도합니다." msgid "Can't connect to keystone, assuming gnocchi is disabled and retry later" msgstr "" -"keystone에 연결할 수 없습니다. gnocchi가 사용되지 않는다고 가정하여 나중에 다" +"Keystone에 연결할 수 없습니다. Gnocchi가 사용되지 않는다고 가정하여 나중에 다" "시 시도합니다." msgid "" @@ -60,7 +60,7 @@ "Failed to parse date from set fields, both fields %(start)s and %(end)s must " "be datetime: %(err)s" msgstr "" -"설정 필드에서 데이터를 구문 분석하는 데 실패, 두 필드 %(start)s 및 %(end)s은" +"설정 필드에서 데이터를 구문 분석하는 데 실패, 두 필드 %(start)s 와 %(end)s은" "(는) 모두 datetime임: %(err)s" #, python-format @@ -92,7 +92,7 @@ #, python-format msgid "Skipping duplicate meter definition %s" -msgstr "중복 미터 정의 %s 건너뛰기" +msgstr "중복 측정 정의 %s 건너뛰기" msgid "" "Timedelta plugin is required two timestamp fields to create timedelta value." @@ -104,14 +104,14 @@ "ceilometer-api started with aodh enabled. Alarms URLs will be redirected to " "aodh endpoint." msgstr "" -"aodh가 사용된 상태로 ceilometer-api가 시작되었습니다. 알람 URL이 aodh 엔드포" +"Aodh가 사용된 상태로 ceilometer-api가 시작되었습니다. 알람 URL이 aodh 엔드포" "인트로 경로가 재지정됩니다." msgid "" "ceilometer-api started with gnocchi enabled. The resources/meters/samples " "URLs are disabled." msgstr "" -"gnocchi를 사용한 상태로 ceilometer-api가 시작되었습니다. 자원/미터/샘플 URL" +"Gnocchi를 사용한 상태로 ceilometer-api가 시작되었습니다. 자원/측정/샘플 URL" "을 사용하지 않습니다." #, python-format diff -Nru ceilometer-6.0.0/ceilometer/locale/ko_KR/LC_MESSAGES/ceilometer.po ceilometer-6.1.3/ceilometer/locale/ko_KR/LC_MESSAGES/ceilometer.po --- ceilometer-6.0.0/ceilometer/locale/ko_KR/LC_MESSAGES/ceilometer.po 2016-04-07 07:30:27.000000000 +0000 +++ ceilometer-6.1.3/ceilometer/locale/ko_KR/LC_MESSAGES/ceilometer.po 2016-07-21 10:20:12.000000000 +0000 @@ -8,18 +8,16 @@ # Seunghyo Chun , 2013 # Sungjin Kang , 2013 # Sungjin Kang , 2013 -# Lucas Palm , 2015. #zanata -# OpenStack Infra , 2015. #zanata -# Lucas Palm , 2016. #zanata +# Sungjin Kang , 2016. #zanata msgid "" msgstr "" -"Project-Id-Version: ceilometer 6.0.0.0b4.dev6\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2016-03-04 20:29+0000\n" +"Project-Id-Version: ceilometer 6.0.1.dev11\n" +"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" +"POT-Creation-Date: 2016-05-19 11:00+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"PO-Revision-Date: 2016-02-03 05:50+0000\n" +"PO-Revision-Date: 2016-04-07 03:48+0000\n" "Last-Translator: Lucas Palm \n" "Language: ko-KR\n" "Plural-Forms: nplurals=1; plural=0;\n" @@ -44,6 +42,10 @@ msgstr "%(name)s에서 오류 후 계속: %(error)s" #, python-format +msgid "Could not connect slave host: %s " +msgstr "슬레이브 호스트를 연결할 수 없음: %s " + +#, python-format msgid "Could not connect to XenAPI: %s" msgstr "XenAPI를 연결할 수 없음: %s" @@ -61,7 +63,7 @@ #, python-format msgid "Couldn't obtain IP address of instance %s" -msgstr "%s 인스턴스의 IP 주소를 얻을 수 없음" +msgstr "%s 인스턴스 IP 주소를 얻을 수 없음" msgid "" "Dispatcher target was not set, no meter will be posted. Set the target in " @@ -87,7 +89,7 @@ msgstr "HTTP 응답 구문 분석 중 오류 발생: %s" msgid "Error stopping pollster." -msgstr "의견조사자를 중지하는 중에 오류가 발생했습니다. " +msgstr "pollster를 중지하는 중에 오류가 발생했습니다. " msgid "Event" msgstr "이벤트" @@ -104,15 +106,15 @@ "Failed to inspect data of instance , domain state " "is SHUTOFF." msgstr "" -"인스턴스 <이름=%(name)s, id=%(id)s>의 데이터 검사 실패, 도메인 상태가 SHUTOFF" -"입니다." +"인스턴스 데이터 검사 실패, 도메인 상태가 SHUTOFF입" +"니다." #, python-format msgid "" "Failed to inspect memory usage of %(instance_uuid)s, can not get info from " "libvirt: %(error)s" msgstr "" -"%(instance_uuid)s의 메모리 사용량 검사 실패, libvirt에서 정보를 가져올 수 없" +"%(instance_uuid)s 메모리 사용량 검사 실패, libvirt에서 정보를 가져올 수 없" "음: %(error)s" #, python-format @@ -120,16 +122,16 @@ "Failed to inspect memory usage of instance , can " "not get info from libvirt." msgstr "" -"인스턴스 <이름=%(name)s, id=%(id)s>의 메모리 사용량 검사 실패, libvirt에서 정" -"보를 가져올 수 없습니다." +"인스턴스 메모리 사용량 검사 실패, libvirt에서 정보" +"를 가져올 수 없습니다." #, python-format msgid "Failed to load any notification handlers for %s" -msgstr "%s의 알림 핸들러 로드 실패" +msgstr "%s 알림 핸들러 로드 실패" #, python-format msgid "Failed to parse the timestamp value %s" -msgstr "시간소인 값 %s 구문 분석 실패" +msgstr "Timestamp 값 %s 구문 분석 실패" #, python-format msgid "Failed to publish %d datapoints, dropping them" @@ -156,6 +158,22 @@ msgstr "인스턴스 %(name)s 무시 중: %(error)s" #, python-format +msgid "Ignoring loadbalancer %(loadbalancer_id)s" +msgstr "로드 밸런서 %(loadbalancer_id)s 무시" + +#, python-format +msgid "Ignoring pool %(pool_id)s" +msgstr "풀 %(pool_id)s 무시" + +#, python-format +msgid "" +"Invalid YAML syntax in Definitions file %(file)s at line: %(line)s, column: " +"%(column)s." +msgstr "" +"다음에서 정의 파일 %(file)s의 올바르지 않은 YAML 구문: 행: %(line)s, 열: " +"%(column)s" + +#, python-format msgid "Invalid period %(period)s: %(err)s" msgstr "올바르지 않은 기간 %(period)s: %(err)s" @@ -175,7 +193,11 @@ msgstr "여러 VM %s을(를) XenServer에서 찾음 " msgid "Must specify connection_url, and connection_password to use" -msgstr "사용할 connection_url 및 connection_password를 지정해야 함 " +msgstr "사용할 connection_url와 connection_password를 지정해야 함 " + +#, python-format +msgid "No plugin named %(plugin)s available for %(name)s" +msgstr "%(name)s에 대해 %(plugin)s(이)라는 플러그인을 사용할 수 없음" msgid "Node Manager init failed" msgstr "노드 관리자 초기화 실패" @@ -193,42 +215,74 @@ msgstr "Opencontrail API가 %(status)s 리턴: %(reason)s" #, python-format +msgid "" +"Operator %(operator)s is not supported. Only equality operator is available " +"for field %(field)s" +msgstr "" +"연산자 %(operator)s이(가) 지원되지 않습니다. 필드 %(field)s에는 등호 연산자" +"만 사용할 수 있습니다." + +#, python-format +msgid "" +"Operator %(operator)s is not supported. The supported operators are: " +"%(supported)s" +msgstr "" +"연산자 %(operator)s이(가) 지원되지 않습니다. 지원되는 연산자는 %(supported)s" +"입니다. " + +#, python-format msgid "Order-by expression not valid: %s" -msgstr "Order-by 표현식이 올바르지 않음: %s" +msgstr "정렬 표현식이 올바르지 않음: %s" + +#, python-format +msgid "" +"Parse error in JSONPath specification '%(jsonpath)s' for %(name)s: %(err)s" +msgstr "" +" %(name)s에 대한 JSONPath 스펙 '%(jsonpath)s'의 구문 분석 오류: %(err)s" msgid "Period must be positive." msgstr "기간은 양수여야 합니다. " #, python-format msgid "Pipeline %(pipeline)s: %(status)s after error from publisher %(pub)s" -msgstr "파이프라인 %(pipeline)s: 공개자 %(pub)s에서 오류 후 %(status)s" +msgstr "파이프라인 %(pipeline)s: Publisher %(pub)s에서 오류 후 %(status)s" #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" -msgstr "파이프라인 %(pipeline)s: 공개자 %(pub)s에서 오류 후 계속" +msgstr "파이프라인 %(pipeline)s: Publisher %(pub)s에서 오류 후 계속" #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" -msgstr "파이프라인 %(pipeline)s: 변환기 %(trans)s을(를) 비우는 중 오류 발생" +msgstr "" +"파이프라인 %(pipeline)s: Transformer %(trans)s을(를) 비우는 중 오류 발생" #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" -msgstr "파이프라인 %(pipeline)s: %(smp)s의 변환기 %(trans)s에서 오류 후 종료" +msgstr "" +"파이프라인 %(pipeline)s: %(smp)s의 transformer %(trans)s에서 오류 후 종료" + +#, python-format +msgid "Plugin specified, but no plugin name supplied for %s" +msgstr "플러그인이 지정되지 않았지만, %s에 플러그인 이름이 제공되지 않음" #, python-format msgid "Polling %(mtr)s sensor failed for %(cnt)s times!" msgstr "폴링 %(mtr)s 센서가 %(cnt)s번 실패했습니다!" #, python-format +msgid "Polling %(name)s failed for %(cnt)s times!" +msgstr "폴링 %(name)s이(가) %(cnt)s번 실패했습니다!" + +#, python-format msgid "Pollster for %s is disabled!" -msgstr "%s의 의견조사자가 사용 안함으로 설정되어 있습니다!" +msgstr "%s pollster가 사용 안함으로 설정되어 있습니다!" #, python-format msgid "Prevent pollster %(name)s for polling source %(source)s anymore!" msgstr "" -"의견조사자 %(name)s이(가) 소스 %(source)s를 더 이상 폴링하지 않도록 하십시오!" +"Pollster %(name)s이(가) 소스 %(source)s를 더 이상 폴링하지 않도록 하십시오!" #, python-format msgid "" @@ -270,7 +324,7 @@ msgid "" "The Yaml file that defines mapping between samples and gnocchi resources/" "metrics" -msgstr "샘플과 gnocchi resources/ 메트릭 간 맵핑을 정의하는 Yaml 파일" +msgstr "샘플과 gnocchi resources/ metric 간 맵핑을 정의하는 Yaml 파일" #, python-format msgid "" @@ -280,6 +334,10 @@ "데이터 유형 %(type)s이(가) 지원되지 않습니다. 지원되는 데이터 유형 목록은 " "%(supported)s입니다." +#, python-format +msgid "The field 'fields' is required for %s" +msgstr "%s에 'fields' 필드 필요" + msgid "The path for the file publisher is required" msgstr "파일 공개자의 경로가 필요함" @@ -309,7 +367,7 @@ #, python-format msgid "Unable to load publisher %s" -msgstr "공개자 %s을(를) 로드할 수 없음" +msgstr "Publisher %s을(를) 로드할 수 없음" #, python-format msgid "Unable to load the hypervisor inspector: %s" @@ -320,15 +378,15 @@ "Unable to reconnect to the primary mongodb after %(retries)d retries. Giving " "up." msgstr "" -"%(retries)d회 재시도한 이후에는 1차 mongodb에 다시 연결할 수 없습니다. 포기하" -"는 중입니다." +"%(retries)d 회 재시도한 이후에는 1차 mongodb에 다시 연결할 수 없습니다. 포기" +"하는 중입니다." #, python-format msgid "" "Unable to reconnect to the primary mongodb: %(errmsg)s. Trying again in " "%(retry_interval)d seconds." msgstr "" -"1차 mongodb에 다시 연결할 수 없음: %(errmsg)s. %(retry_interval)d초 후에 다" +"1차 mongodb에 다시 연결할 수 없음: %(errmsg)s. %(retry_interval)d 초 후에 다" "시 시도합니다." msgid "Unable to send sample over UDP" @@ -350,11 +408,26 @@ msgstr "알 수 없는 메타데이터 유형입니다. 키(%s)를 조회할 수 없습니다." #, python-format +msgid "" +"Unknown status %(stat)s received on Load Balancer %(id)s, skipping sample" +msgstr "" +"로드 밸런서 %(id)s에서 알 수 없는 상태 %(stat)s이(가) 수신됨. 샘플 건너뛰기" + +#, python-format msgid "Unknown status %(stat)s received on fw %(id)s,skipping sample" msgstr "" "fw %(id)s에서 알 수 없는 상태 %(stat)s이(가) 수신됨. 샘플을 건너뛰는 중" #, python-format +msgid "Unknown status %(stat)s received on listener %(id)s, skipping sample" +msgstr "리스너 %(id)s에서 알 수 없는 상태 %(stat)s이(가) 수신됨. 샘플 건너뛰기" + +#, python-format +msgid "Unknown status %(stat)s received on member %(id)s, skipping sample" +msgstr "" +"멤버 %(id)s에서 알 수 없는 상태 %(stat)s이(가) 수신됨. 샘플을 건너뛰는 중" + +#, python-format msgid "Unknown status %(stat)s received on pool %(id)s, skipping sample" msgstr "" "풀 %(id)s에서 알 수 없는 상태 %(stat)s이(가) 수신됨. 샘플을 건너뛰는 중" @@ -362,7 +435,11 @@ #, python-format msgid "Unknown status %(stat)s received on vip %(id)s, skipping sample" msgstr "" -"vip %(id)s에서 알 수 없는 상태 %(stat)s이(가) 수신됨. 샘플을 건너뛰는 중" +"vIP %(id)s에서 알 수 없는 상태 %(stat)s이(가) 수신됨. 샘플을 건너뛰는 중" + +#, python-format +msgid "Unknown status %(stat)s received on vpn %(id)s, skipping sample" +msgstr "VPN %(id)s에서 알 수 없는 상태 %(stat)s이(가) 수신됨. 샘플 건너뛰기" #, python-format msgid "VM %s not found in VMware vSphere" @@ -379,9 +456,21 @@ msgstr "XenAPI가 설치되지 않음" #, python-format +msgid "YAML error reading Definitions file %(file)s" +msgstr "정의 파일 %(file)s을(를) 읽는 중에 YAML 오류 발생" + +msgid "alarms URLs is unavailable when Aodh is disabled or unavailable." +msgstr "" +"Aodh를 사용하지 않게 설정하거나 사용할 수 없는 경우 경보 URL을 사용할 수 없습" +"니다." + +#, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "%(id)s의 CPU 시간을 가져올 수 없음: %(e)s" +msgid "direct option cannot be true when Gnocchi is enabled." +msgstr "Gnocchi를 사용할 때 직접 옵션은 true일 수 없습니다." + #, python-format msgid "dropping out of time order sample: %s" msgstr "시간 순서 샘플에서 벗어남: %s" @@ -391,7 +480,7 @@ msgstr "선행 작업이 없는 샘플 삭제: %s" msgid "ipmitool output length mismatch" -msgstr "ipmitool 출력 길이 불일치" +msgstr "Ipmitool 출력 길이 불일치" msgid "max_bytes and backup_count should be numbers." msgstr "max_bytes 및 backup_count는 숫자여야 합니다." @@ -408,4 +497,4 @@ msgstr "IPMI 센서 데이터 구문 분석에 실패했음, 알 수 없는 센서 유형" msgid "running ipmitool failure" -msgstr "ipmitool 실행 실패" +msgstr "Ipmitool 실행 실패" diff -Nru ceilometer-6.0.0/ceilometer/locale/pt_BR/LC_MESSAGES/ceilometer.po ceilometer-6.1.3/ceilometer/locale/pt_BR/LC_MESSAGES/ceilometer.po --- ceilometer-6.0.0/ceilometer/locale/pt_BR/LC_MESSAGES/ceilometer.po 2016-04-07 07:30:28.000000000 +0000 +++ ceilometer-6.1.3/ceilometer/locale/pt_BR/LC_MESSAGES/ceilometer.po 2016-07-21 10:20:12.000000000 +0000 @@ -5,20 +5,16 @@ # Translators: # Gabriel Wainer, 2013 # Gabriel Wainer, 2013 -# Andreas Jaeger , 2015. #zanata -# Lucas Palm , 2015. #zanata -# OpenStack Infra , 2015. #zanata # Carlos Marques , 2016. #zanata -# Lucas Palm , 2016. #zanata msgid "" msgstr "" -"Project-Id-Version: ceilometer 6.0.0.0rc2.dev6\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2016-03-22 18:08+0000\n" +"Project-Id-Version: ceilometer 6.0.1.dev11\n" +"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" +"POT-Creation-Date: 2016-05-19 11:00+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"PO-Revision-Date: 2016-03-22 11:05+0000\n" +"PO-Revision-Date: 2016-05-03 10:38+0000\n" "Last-Translator: Carlos Marques \n" "Language: pt-BR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" @@ -38,7 +34,7 @@ #, python-format msgid "Cannot create table %(table_name)s it already exists. Ignoring error" msgstr "" -"Não é possível criar a tabela %(table_name)s; ela já existe. Ignorando erro" +"Não é possível criar a tabela %(table_name)s; ela já existe. Ignorando o erro" #, python-format msgid "Continue after error from %(name)s: %(error)s" @@ -54,11 +50,11 @@ #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" -msgstr "Não foi possível obter Uso de CPU para %(id)s: %(e)s" +msgstr "Não foi possível obter o Uso de CPU para %(id)s: %(e)s" #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" -msgstr "Não foi possível obter de Uso de Memória para %(id)s: %(e)s" +msgstr "Não foi possível obter o Uso de Memória para %(id)s: %(e)s" #, python-format msgid "Could not get VM %s CPU Utilization" @@ -92,7 +88,7 @@ msgstr "Erro ao analisar a resposta de HTTP: %s" msgid "Error stopping pollster." -msgstr "Erro ao parar pesquisador. " +msgstr "Erro ao parar o pesquisador. " msgid "Event" msgstr "Evento" @@ -173,7 +169,7 @@ "Invalid YAML syntax in Definitions file %(file)s at line: %(line)s, column: " "%(column)s." msgstr "" -"Sintaxe YAML inválida no arquivo de definições %(file)s na linha: %(line)s, " +"Sintaxe YAML inválida no arquivo Definitions %(file)s na linha: %(line)s, " "coluna: %(column)s." #, python-format @@ -185,7 +181,7 @@ msgstr "Tipo de traço inválido '%(type)s' para traço %(trait)s" msgid "Limit must be positive" -msgstr "Limite deve ser positivo" +msgstr "O limite deve ser positivo" #, python-format msgid "More than one event with id %s returned from storage driver" @@ -204,7 +200,7 @@ msgstr "Nenhum plug-in nomeado %(plugin)s disponível para %(name)s" msgid "Node Manager init failed" -msgstr "Inicialização do gerenciador de nó com falha" +msgstr "A inicialização do Gerenciador de Nós falhou" #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" @@ -223,8 +219,8 @@ "Operator %(operator)s is not supported. Only equality operator is available " "for field %(field)s" msgstr "" -"O operador %(operator)s não é suportado. Somente operador de igualdade está " -"disponível para o campo %(field)s" +"O operador %(operator)s não é suportado. Somente o operador de igualdade " +"está disponível para o campo %(field)s" #, python-format msgid "" @@ -246,7 +242,7 @@ "%(err)s" msgid "Period must be positive." -msgstr "Período deve ser positivo." +msgstr "O período deve ser positivo." #, python-format msgid "Pipeline %(pipeline)s: %(status)s after error from publisher %(pub)s" @@ -254,18 +250,18 @@ #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" -msgstr "Pipeline %(pipeline)s: Continue após erro do publicador %(pub)s" +msgstr "Pipeline %(pipeline)s: Continuar após erro do publicador %(pub)s" #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" -msgstr "Pipeline %(pipeline)s: Erro ao limpar transformador %(trans)s" +msgstr "Pipeline %(pipeline)s: Erro ao limpar o transformador %(trans)s" #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" -"Pipeline %(pipeline)s: Saia após erro do transformador %(trans)s para %(smp)s" +"Pipeline %(pipeline)s: Sair após erro do transformador %(trans)s para %(smp)s" #, python-format msgid "Plugin specified, but no plugin name supplied for %s" @@ -273,7 +269,7 @@ #, python-format msgid "Polling %(mtr)s sensor failed for %(cnt)s times!" -msgstr "O sensor de pesquisa %(mtr)s falhou para %(cnt)s vezes!" +msgstr "O sensor de pesquisa %(mtr)s falhou %(cnt)s vezes!" #, python-format msgid "Polling %(name)s failed for %(cnt)s times!" @@ -285,26 +281,26 @@ #, python-format msgid "Prevent pollster %(name)s for polling source %(source)s anymore!" -msgstr "" -"Evite o pesquisador %(name)s para a origem de pesquisa %(source)s atualmente!" +msgstr "Impeça o pesquisador %(name)s de sondar a origem %(source)s novamente!" #, python-format msgid "" "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" -"Comprimento máximo de local_queue do publicador foi excedido, descartando %d " -"amostras antigas" +"O comprimento máximo de local_queue do publicador foi excedido, descartando " +"%d amostras mais antigas" #, python-format msgid "Publishing policy is unknown (%s) force to default" -msgstr "Publicando política desconhecida (%s) força para o padrão" +msgstr "A política de publicação é desconhecida (%s), forçar para o padrão" #, python-format msgid "RGW AdminOps API returned %(status)s %(reason)s" msgstr "A API AdminOps RGW retornou %(status)s %(reason)s" msgid "Request failed to connect to OpenDaylight with NorthBound REST API" -msgstr "O pedido falhou ao conectar-se ao OpenDaylight com API REST NorthBound" +msgstr "" +"A solicitação falhou ao conectar-se ao OpenDaylight com a API REST NorthBound" #, python-format msgid "Required field %s not specified" @@ -325,14 +321,14 @@ #, python-format msgid "String %s is not a valid isotime" -msgstr "Sequência %s não é um isotime válido" +msgstr "A sequência %s não é um isotime válido" msgid "" "The Yaml file that defines mapping between samples and gnocchi resources/" "metrics" msgstr "" -"O arquivo Yaml que define o mapeamento entre amostras e recursos gnocchi/" -"métrica" +"O arquivo Yaml que define o mapeamento entre amostras e recursos/métricas " +"gnocchi" #, python-format msgid "" @@ -351,10 +347,10 @@ #, python-format msgid "UDP: Cannot decode data sent by %s" -msgstr "UDP: Não pode decodificar dados enviados por %s" +msgstr "UDP: Não é possível decodificar dados enviados pelo %s" msgid "UDP: Unable to store meter" -msgstr "UDP: Não é possível armazenar medida" +msgstr "UDP: Não é possível armazenar o medidor" #, python-format msgid "Unable to connect to the database server: %(errmsg)s." @@ -364,7 +360,7 @@ msgid "" "Unable to convert the value %(value)s to the expected data type %(type)s." msgstr "" -"Não é possível converter o valor %(value)s para o tipo de dados esperado " +"Não é possível converter o valor %(value)s no tipo de dados esperado " "%(type)s." #, python-format @@ -377,18 +373,18 @@ #, python-format msgid "Unable to load publisher %s" -msgstr "Impossível carregar publicador %s" +msgstr "Não é possível carregar o publicador %s" #, python-format msgid "Unable to load the hypervisor inspector: %s" -msgstr "Impossível carregar o inspetor do hypervisor: %s" +msgstr "Não é possível carregar o inspetor do hypervisor: %s" #, python-format msgid "" "Unable to reconnect to the primary mongodb after %(retries)d retries. Giving " "up." msgstr "" -"Não é possível se reconectar ao mongodb primário após %(retries)d novas " +"Não é possível reconectar-se ao mongodb primário após %(retries)d novas " "tentativas. Desistindo." #, python-format @@ -396,18 +392,17 @@ "Unable to reconnect to the primary mongodb: %(errmsg)s. Trying again in " "%(retry_interval)d seconds." msgstr "" -"Não é possível se reconectar ao mongodb primário: %(errmsg)s. Tentando " +"Não é possível reconectar-se ao mongodb primário: %(errmsg)s. Tentando " "novamente em %(retry_interval)d segundos." msgid "Unable to send sample over UDP" -msgstr "Não é possível enviar amostra sobre UDP" +msgstr "Não é possível enviar a amostra sobre UDP" #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type %(type)s." msgstr "" -"Exceção inesperada convertendo %(value)s para o tipo de dado esperado " -"%(type)s." +"Exceção inesperada ao converter %(value)s no tipo de dados esperado %(type)s." #, python-format msgid "Unknown discovery extension: %s" @@ -415,7 +410,7 @@ #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." -msgstr "Tipo de metada desconhecido. Chave (%s) não será consultável." +msgstr "Tipo de metadados desconhecido. A chave (%s) não será consultável." #, python-format msgid "" @@ -427,8 +422,7 @@ #, python-format msgid "Unknown status %(stat)s received on fw %(id)s,skipping sample" msgstr "" -"Status desconhecido %(stat)s recebido na largura da fonte %(id)s, ignorando " -"a amostra" +"Status desconhecido %(stat)s recebido no fw %(id)s, ignorando a amostra" #, python-format msgid "Unknown status %(stat)s received on listener %(id)s, skipping sample" @@ -443,7 +437,7 @@ #, python-format msgid "Unknown status %(stat)s received on pool %(id)s, skipping sample" msgstr "" -"Status desconhecido %(stat)s recebido no conjunto %(id)s, ignorando amostras" +"Status desconhecido %(stat)s recebido no conjunto %(id)s, ignorando a amostra" #, python-format msgid "Unknown status %(stat)s received on vip %(id)s, skipping sample" @@ -458,7 +452,7 @@ #, python-format msgid "VM %s not found in VMware vSphere" -msgstr "VM %s não localizado no VMware vSphere" +msgstr "Máquina virtual %s não localizada no VMware vSphere" #, python-format msgid "VM %s not found in XenServer" @@ -472,25 +466,30 @@ #, python-format msgid "YAML error reading Definitions file %(file)s" -msgstr "Erro YAML ao ler o arquivo de definições %(file)s" +msgstr "Erro YAML ao ler o arquivo Definitions %(file)s" + +msgid "alarms URLs is unavailable when Aodh is disabled or unavailable." +msgstr "" +"A URL de alarmes está indisponível quando o Aodh está desativado ou " +"indisponível." #, python-format msgid "could not get CPU time for %(id)s: %(e)s" -msgstr "não pôde obter o tempo de CPU para %(id)s: %(e)s" +msgstr "não foi possível obter o tempo de CPU para %(id)s: %(e)s" msgid "direct option cannot be true when Gnocchi is enabled." msgstr "A opção direta não pode ser true quando o Gnocchi está ativado. " #, python-format msgid "dropping out of time order sample: %s" -msgstr "eliminando amostra fora de ordem de tempo: %s" +msgstr "eliminando amostra de pedido fora do prazo: %s" #, python-format msgid "dropping sample with no predecessor: %s" msgstr "descartando amostra sem predecessor: %s" msgid "ipmitool output length mismatch" -msgstr "incompatibilidade no comprimento da saída de ipmitool" +msgstr "incompatibilidade no comprimento da saída do ipmitool" msgid "max_bytes and backup_count should be numbers." msgstr "max_bytes e backup_count devem ser números." @@ -501,11 +500,11 @@ msgid "parse IPMI sensor data failed,No data retrieved from given input" msgstr "" -"análise dos dados do sensor IPMI com falha, nenhum dado recuperado da " -"entrada fornecida" +"A análise dos dados do sensor IPMI falhou. Nenhum dado recuperado da entrada " +"fornecida" msgid "parse IPMI sensor data failed,unknown sensor type" -msgstr "análise dos dados do sensor IPMI com falha,tipo de sensor desconhecido" +msgstr "A análise dos dados do sensor IPMI falhou, tipo de sensor desconhecido" msgid "running ipmitool failure" -msgstr "executando falha de ipmitool" +msgstr "falha ao executar o ipmitool" diff -Nru ceilometer-6.0.0/ceilometer/locale/ru/LC_MESSAGES/ceilometer.po ceilometer-6.1.3/ceilometer/locale/ru/LC_MESSAGES/ceilometer.po --- ceilometer-6.0.0/ceilometer/locale/ru/LC_MESSAGES/ceilometer.po 2016-04-07 07:30:27.000000000 +0000 +++ ceilometer-6.1.3/ceilometer/locale/ru/LC_MESSAGES/ceilometer.po 2016-07-21 10:20:12.000000000 +0000 @@ -9,9 +9,9 @@ # Lucas Palm , 2016. #zanata msgid "" msgstr "" -"Project-Id-Version: ceilometer 6.0.0.0b4.dev34\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2016-03-09 20:26+0000\n" +"Project-Id-Version: ceilometer 6.0.1.dev11\n" +"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" +"POT-Creation-Date: 2016-05-19 11:00+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" diff -Nru ceilometer-6.0.0/ceilometer/locale/zh_CN/LC_MESSAGES/ceilometer-log-error.po ceilometer-6.1.3/ceilometer/locale/zh_CN/LC_MESSAGES/ceilometer-log-error.po --- ceilometer-6.0.0/ceilometer/locale/zh_CN/LC_MESSAGES/ceilometer-log-error.po 1970-01-01 00:00:00.000000000 +0000 +++ ceilometer-6.1.3/ceilometer/locale/zh_CN/LC_MESSAGES/ceilometer-log-error.po 2016-07-21 10:20:12.000000000 +0000 @@ -0,0 +1,151 @@ +# Translations template for ceilometer. +# Copyright (C) 2015 ORGANIZATION +# This file is distributed under the same license as the ceilometer project. +# +# Translators: +# aji.zqfan , 2015 +# Shuwen SUN , 2014 +# OpenStack Infra , 2015. #zanata +# Gaoxiao Zhu , 2016. #zanata +# chunhan , 2016. #zanata +msgid "" +msgstr "" +"Project-Id-Version: ceilometer 6.0.1.dev17\n" +"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" +"POT-Creation-Date: 2016-06-17 10:46+0000\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"PO-Revision-Date: 2016-06-30 02:28+0000\n" +"Last-Translator: chunhan \n" +"Language: zh-CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"Generated-By: Babel 2.0\n" +"X-Generator: Zanata 3.7.3\n" +"Language-Team: Chinese (China)\n" + +#, python-format +msgid "Cannot load inspector %(name)s: %(err)s" +msgstr "无法加载检查器 %(name)s: %(err)s" + +#, python-format +msgid "Could not get Resident Memory Usage for %(id)s: %(e)s" +msgstr "无法为%(id)s获取常驻内存使用量:%(e)s" + +#, python-format +msgid "Dispatcher failed to handle the %s, requeue it." +msgstr "分发器处理%s失败,重新排队" + +msgid "Error connecting to coordination backend." +msgstr "连接到协调器后端出错" + +msgid "Error getting group membership info from coordination backend." +msgstr "从协调器后端获取组成员信息时出错" + +#, python-format +msgid "Error joining partitioning group %s, re-trying" +msgstr "加入分组 %s出错,正在重试" + +#, python-format +msgid "Error loading meter definition : %(err)s" +msgstr "加载计量的定义失败:%(err)s" + +#, python-format +msgid "Error processing event and it will be dropped: %s" +msgstr "处理事件%s时出错,将被丢弃" + +msgid "Error sending a heartbeat to coordination backend." +msgstr "发送心跳信息至协调器后端出错" + +msgid "Fail to process a notification" +msgstr "处理通知失败" + +msgid "Fail to process notification" +msgstr "处理通知失败" + +msgid "Failed to connect to Gnocchi." +msgstr "连接Gnocchi失败。" + +#, python-format +msgid "Failed to connect to Kafka service: %s" +msgstr "连接Kafka服务失败:%s" + +#, python-format +msgid "Failed to connect to db, purpose %(purpose)s re-try later: %(err)s" +msgstr "连接数据库失败,目的%(purpose)s 稍后重试:%(err)s" + +#, python-format +msgid "Failed to connect to db, purpose %(purpose)s retry later: %(err)s" +msgstr "连接数据库失败,目的%(purpose)s 稍后重试:%(err)s" + +#, python-format +msgid "Failed to load resource due to error %s" +msgstr "加载资源失败因为错误%s" + +#, python-format +msgid "Failed to record event: %s" +msgstr "无法记录事件:%s" + +#, python-format +msgid "Failed to record metering data: %s" +msgstr "无法保存监控数据:%s" + +msgid "Failed to retry to send sample data with max_retry times" +msgstr "尝试发送采样数据达到最大重试次数后仍失败" + +msgid "" +"Group ID: %{group_id}s, Members: %{members}s, Me: %{me}s: Current agent is " +"not part of group and cannot take tasks" +msgstr "" +"组ID:%{group_id}s,成员:%{members}s,当前用户%{me}s:当前用户不在组中,无法执" +"行任务" + +#, python-format +msgid "Invalid type %s specified" +msgstr "被指定的类型%s无效" + +#, python-format +msgid "Missing field %s" +msgstr "缺少字段%s" + +msgid "Passed resource dict must contain keys resource_id and resource_url." +msgstr "传入的资源字典必须包含键resource_id和resource_url" + +#, python-format +msgid "Required field %(field)s should be a %(type)s" +msgstr "所需字段%(field)s应为%(type)s类型" + +#, python-format +msgid "Required field %s not specified" +msgstr "未指定所需字段 %s" + +#, python-format +msgid "Required fields %s not specified" +msgstr "必需字段%s未被指定" + +#, python-format +msgid "Skip invalid resource %s" +msgstr "跳过无效资源%s" + +#, python-format +msgid "Skipping %(name)s, keystone issue: %(exc)s" +msgstr "跳过%(name)s,由keystone引起:%(exc)s" + +msgid "Status Code: %{code}s. Failed todispatch event: %{event}s" +msgstr "状态码:%{code}s。分发事件:%{event}s失败" + +#, python-format +msgid "Unable to load changed event pipeline: %s" +msgstr "无法加载更改的事件管道:%s" + +#, python-format +msgid "Unable to load changed pipeline: %s" +msgstr "无法加载更改的管道:%s" + +#, python-format +msgid "Unrecognized type value %s" +msgstr "无法识别的类型值 %s" + +#, python-format +msgid "inspector call failed for %(ident)s host %(host)s: %(err)s" +msgstr "标识为%(ident)s的主机%(host)s检查器调用失败: %(err)s" diff -Nru ceilometer-6.0.0/ceilometer/locale/zh_CN/LC_MESSAGES/ceilometer-log-info.po ceilometer-6.1.3/ceilometer/locale/zh_CN/LC_MESSAGES/ceilometer-log-info.po --- ceilometer-6.0.0/ceilometer/locale/zh_CN/LC_MESSAGES/ceilometer-log-info.po 1970-01-01 00:00:00.000000000 +0000 +++ ceilometer-6.1.3/ceilometer/locale/zh_CN/LC_MESSAGES/ceilometer-log-info.po 2016-07-21 10:20:12.000000000 +0000 @@ -0,0 +1,141 @@ +# Translations template for ceilometer. +# Copyright (C) 2015 ORGANIZATION +# This file is distributed under the same license as the ceilometer project. +# +# Translators: +# aji.zqfan , 2015 +# Lianhao Lu , 2014 +# OpenStack Infra , 2015. #zanata +# chunhan , 2016. #zanata +msgid "" +msgstr "" +"Project-Id-Version: ceilometer 6.0.1.dev17\n" +"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" +"POT-Creation-Date: 2016-06-17 10:46+0000\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"PO-Revision-Date: 2016-06-30 03:01+0000\n" +"Last-Translator: chunhan \n" +"Language: zh-CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"Generated-By: Babel 2.0\n" +"X-Generator: Zanata 3.7.3\n" +"Language-Team: Chinese (China)\n" + +#, python-format +msgid "%d events are removed from database" +msgstr "%d个事件从数据库中被移除" + +#, python-format +msgid "%d samples removed from database" +msgstr "从数据库中移除%d个采样数据。" + +msgid "Configuration:" +msgstr "配置" + +#, python-format +msgid "Connecting to %(db)s on %(nodelist)s" +msgstr "正在连接到%(nodelist)s节点的数据库%(db)s。" + +msgid "Coordination backend started successfully." +msgstr "协调器后台启动成功" + +#, python-format +msgid "Definitions: %s" +msgstr "定义: %s" + +msgid "Detected change in pipeline configuration." +msgstr "检测到管道配置发生改变" + +#, python-format +msgid "Dropping event data with TTL %d" +msgstr "正在根据TTL: %d丢弃事件数据" + +#, python-format +msgid "Dropping metering data with TTL %d" +msgstr "正在根据TTL %d丢弃监控数据" + +#, python-format +msgid "Duplicate event detected, skipping it: %s" +msgstr "检测到重复事件,正在跳过:%s" + +msgid "Expired residual resource and meter definition data" +msgstr "剩余资源和计量表定义数据已过期" + +#, python-format +msgid "Index %s will be recreate." +msgstr "索引%s将被重新创建" + +#, python-format +msgid "Joined partitioning group %s" +msgstr "已加入分组%s" + +#, python-format +msgid "Left partitioning group %s" +msgstr "已离开分组%s" + +#, python-format +msgid "No limit value provided, result set will be limited to %(limit)d." +msgstr "限制值未被提供,结果集应被限制到%(limit)d." + +msgid "Nothing to clean, database event time to live is disabled" +msgstr "事件数据库过期时间未激活,没有数据要清除" + +msgid "Nothing to clean, database metering time to live is disabled" +msgstr "监控数据库过期时间未激活,没有数据要清除" + +#, python-format +msgid "" +"Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter " +"%(param)s" +msgstr "管道%(pipeline)s:使用参数%(param)s初始化变形器实例%(name)s" + +#, python-format +msgid "Pipeline config: %s" +msgstr "管道配置:%s" + +msgid "Pipeline configuration file has been updated." +msgstr "管道配置文件已被更新" + +#, python-format +msgid "Polling pollster %(poll)s in the context of %(src)s" +msgstr "在上下文环境%(src)s执行采集器%(poll)s" + +#, python-format +msgid "Publishing policy set to %s" +msgstr "设置发布策略为%s" + +msgid "Reconfiguring polling tasks." +msgstr "重新配置轮询任务" + +msgid "Reloading notification agent and listeners." +msgstr "重新加载通知代理和jianting" + +#, python-format +msgid "Skip pollster %(name)s, no %(p_context)sresources found this cycle" +msgstr "跳过采集器%(name)s,本周期无法找到上下文为%(p_context)s的资源" + +#, python-format +msgid "Starting server in PID %s" +msgstr "正在启动服务进程PID %s" + +#, python-format +msgid "Swift endpoint not found: %s" +msgstr "对象存储的端点组:%s未被找到" + +msgid "detected decoupled pipeline config format" +msgstr "检测到分离的管道配置格式" + +#, python-format +msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" +msgstr "%(resource_id)s的资源监控数据%(counter_name)s 值为:%(counter_volume)s" + +#, python-format +msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" +msgstr "" +"服务在0.0.0.0:%(sport)s上运行,可以通过http://127.0.0.1:%(vport)s来查看" + +#, python-format +msgid "serving on http://%(host)s:%(port)s" +msgstr "服务在http://%(host)s:%(port)s上运行" diff -Nru ceilometer-6.0.0/ceilometer/locale/zh_CN/LC_MESSAGES/ceilometer-log-warning.po ceilometer-6.1.3/ceilometer/locale/zh_CN/LC_MESSAGES/ceilometer-log-warning.po --- ceilometer-6.0.0/ceilometer/locale/zh_CN/LC_MESSAGES/ceilometer-log-warning.po 1970-01-01 00:00:00.000000000 +0000 +++ ceilometer-6.1.3/ceilometer/locale/zh_CN/LC_MESSAGES/ceilometer-log-warning.po 2016-07-21 10:20:12.000000000 +0000 @@ -0,0 +1,154 @@ +# Translations template for ceilometer. +# Copyright (C) 2015 ORGANIZATION +# This file is distributed under the same license as the ceilometer project. +# +# Translators: +# aji.zqfan , 2015 +# OpenStack Infra , 2015. #zanata +# chunhan , 2016. #zanata +msgid "" +msgstr "" +"Project-Id-Version: ceilometer 6.0.1.dev17\n" +"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" +"POT-Creation-Date: 2016-06-17 10:46+0000\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"PO-Revision-Date: 2016-06-30 03:36+0000\n" +"Last-Translator: chunhan \n" +"Language: zh-CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"Generated-By: Babel 2.0\n" +"X-Generator: Zanata 3.7.3\n" +"Language-Team: Chinese (China)\n" + +msgid "Can't connect to keystone, assuming aodh is disabled and retry later." +msgstr "无法连接到keystone,请保证gnocchi 未开启再重试" + +msgid "Can't connect to keystone, assuming gnocchi is disabled and retry later" +msgstr "无法连接到keystone,请保证gnocchi 未开启再重试" + +msgid "" +"Cannot extract tasks because agent failed to join group properly. Rejoining " +"group." +msgstr "无法获取任务,因为代理加入组失败,正在重新加入" + +#, python-format +msgid "" +"Cannot inspect data of %(pollster)s for %(instance_id)s, non-fatal reason: " +"%(exc)s" +msgstr "" +"采集器%(pollster)s无法为虚拟机%(instance_id)s采集数据,非致命错误:%(exc)s" + +#, python-format +msgid "Dropping out of time order sample: %s" +msgstr "正在丢弃过期的采样数据%s" + +#, python-format +msgid "Dropping sample with no predecessor: %s" +msgstr "正在丢弃没有之前数据的采样值:%s" + +#, python-format +msgid "Duplicated values: %s found in CLI options, auto de-duplicated" +msgstr "重复值:发现控制台参数%s,自动去除重复项" + +#, python-format +msgid "Failed to load any dispatchers for %s" +msgstr "无法为%s加载任何分发器" + +#, python-format +msgid "" +"Failed to parse date from set fields, both fields %(start)s and %(end)s must " +"be datetime: %(err)s" +msgstr "" +"从设定的值中无法解析时间值,%(start)s和%(end)s的值都应为日期时间:%(err)s" + +#, python-format +msgid "Ignore unrecognized field %s" +msgstr "无法识别字段%s" + +#, python-format +msgid "Invalid status, skipping IP address %s" +msgstr "不可用状态,跳过IP地址%s" + +msgid "Negative delta detected, dropping value" +msgstr "检测到负变化量,正在丢弃该值" + +#, python-format +msgid "No endpoints found for service %s" +msgstr "%s服务的入口未找到" + +msgid "" +"Non-metric meters may be collected. It is highly advisable to disable these " +"meters using ceilometer.conf or the pipeline.yaml" +msgstr "" +"非计量指标也许会被收集。强烈建议在ceilometer.conf或者pipeline.yaml中禁用这些" +"指标" + +#, python-format +msgid "" +"Skipping %(name)s, %(service_type)s service is not registered in keystone" +msgstr "忽略%(name)s,因为%(service_type)s 类型的服务在keystone中未注册" + +#, python-format +msgid "Skipping duplicate meter definition %s" +msgstr "跳过重复的度量定义%s" + +msgid "" +"Timedelta plugin is required two timestamp fields to create timedelta value." +msgstr "时间变化插件需要两个时间戳的值来生成时间变化值" + +msgid "" +"ceilometer-api started with aodh enabled. Alarms URLs will be redirected to " +"aodh endpoint." +msgstr "" +"在aodh可用时启动ceilometer-api服务,将导致警告的URLs被重定向至aodh 端点" + +msgid "" +"ceilometer-api started with gnocchi enabled. The resources/meters/samples " +"URLs are disabled." +msgstr "" +"在gnocchi 可用时启动ceilometer-api服务,将导致URLs为/meters/samples的资源将不" +"可用" + +#, python-format +msgid "event signature invalid, discarding event: %s" +msgstr "事件签名无效,丢弃事件:%s" + +#, python-format +msgid "message signature invalid, discarding message: %r" +msgstr "消息签名不合法,丢弃消息:%r" + +#, python-format +msgid "" +"metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s has no " +"volume (volume: None), the sample will be dropped" +msgstr "" +"资源%(resource_id)s在%(timestamp)s时间的监控数据%(counter_name)s 没有值(或为" +"空),采样将被丢弃" + +#, python-format +msgid "" +"metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s has " +"volume which is not a number (volume: %(counter_volume)s), the sample will " +"be dropped" +msgstr "" +"资源%(resource_id)s在%(timestamp)s时间的监控数据%(counter_name)s 有值当不为数" +"字(值为:%(counter_volume)s),采样将被丢弃" + +msgid "" +"pecan_debug cannot be enabled, if workers is > 1, the value is overrided " +"with False" +msgstr "pecan_debug无法被启用,如果api_workers>1,该值会被重置为False" + +#, python-format +msgid "" +"split plugin is deprecated, add \".`split(%(sep)s, %(segment)d, " +"%(max_split)d)`\" to your jsonpath instead" +msgstr "" +"分割插件已被废弃,在你的JSON路径中添加.`split(%(sep)s, %(segment)d, " +"%(max_split)d)`来代替" + +#, python-format +msgid "unable to configure oslo_cache: %s" +msgstr "无法配置配置解析模块缓存:%s" diff -Nru ceilometer-6.0.0/ceilometer/locale/zh_CN/LC_MESSAGES/ceilometer.po ceilometer-6.1.3/ceilometer/locale/zh_CN/LC_MESSAGES/ceilometer.po --- ceilometer-6.0.0/ceilometer/locale/zh_CN/LC_MESSAGES/ceilometer.po 2016-04-07 07:30:27.000000000 +0000 +++ ceilometer-6.1.3/ceilometer/locale/zh_CN/LC_MESSAGES/ceilometer.po 2016-07-21 10:20:12.000000000 +0000 @@ -12,20 +12,16 @@ # Yu Zhang, 2013 # 颜海峰 , 2014 # English translations for ceilometer. -# Lucas Palm , 2015. #zanata -# OpenStack Infra , 2015. #zanata -# Alex Eng , 2016. #zanata -# Daisy , 2016. #zanata # Linda , 2016. #zanata msgid "" msgstr "" -"Project-Id-Version: ceilometer 6.0.0.0b4.dev50\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2016-03-19 00:57+0000\n" +"Project-Id-Version: ceilometer 6.0.1.dev11\n" +"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" +"POT-Creation-Date: 2016-05-19 11:00+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"PO-Revision-Date: 2016-03-16 12:12+0000\n" +"PO-Revision-Date: 2016-04-29 04:40+0000\n" "Last-Translator: Linda \n" "Language: zh-CN\n" "Language-Team: Chinese (China)\n" @@ -35,19 +31,19 @@ #, python-format msgid "%(entity)s %(id)s Not Found" -msgstr "无法找到%(entity)s %(id)s " +msgstr "无法找到 %(entity)s %(id)s " #, python-format msgid "Arithmetic transformer must use at least one meter in expression '%s'" -msgstr "算术变形器在表达式'%s'中必须至少使用一个指标" +msgstr "算术变形器在表达式“%s”中必须至少使用一个指标" #, python-format msgid "Cannot create table %(table_name)s it already exists. Ignoring error" -msgstr "表%(table_name)s已经存在,无法创建。忽略此错误继续执行。" +msgstr "无法创建表 %(table_name)s,因为它已存在。忽略此错误" #, python-format msgid "Continue after error from %(name)s: %(error)s" -msgstr "遇到错误%(name)s:%(error)s,继续执行" +msgstr "%(name)s 出错:%(error)s,继续执行" #, python-format msgid "Could not connect slave host: %s " @@ -55,44 +51,45 @@ #, python-format msgid "Could not connect to XenAPI: %s" -msgstr "无法连接到XenAPI:%s" +msgstr "无法连接到 XenAPI:%s" #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" -msgstr "无法为虚拟机%(id)s获取CPU使用率:%(e)s" +msgstr "无法获取 %(id)s 的 CPU 使用率:%(e)s" #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" -msgstr "无法为%(id)s获取内存使用信息:%(e)s" +msgstr "无法获取 %(id)s 的内存使用情况:%(e)s" #, python-format msgid "Could not get VM %s CPU Utilization" -msgstr "无法获取虚拟机%s的CPU使用率" +msgstr "无法获取 VM %s CPU 使用率" #, python-format msgid "Couldn't obtain IP address of instance %s" -msgstr "无法为实例%s获取IP地址" +msgstr "无法获取实例 %s 的 IP 地址" msgid "" "Dispatcher target was not set, no meter will be posted. Set the target in " "the ceilometer.conf file" -msgstr "分发器目标未设置,没有指标将被发送。在ceilometer.conf文件中设置目标。" +msgstr "" +"未设置分发器目标,将不会发布测量数据。请在 ceilometer.conf 文件中设置目标。" #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" -msgstr "正在丢弃通知%(type)s (uuid:%(msgid)s)" +msgstr "正在删除通知 %(type)s (uuid:%(msgid)s)" #, python-format msgid "" "Error from libvirt while looking up instance : " "[Error Code %(error_code)s] %(ex)s" msgstr "" -"查找实例 <名称为 %(name)s,标识为 %(id)s> 时,libvirt 中出错:[错误代码 " +"查找实例 时,libvirt 中出错:[错误代码 " "%(error_code)s] %(ex)s" #, python-format msgid "Error parsing HTTP response: %s" -msgstr "解析HTTP响应失败: %s" +msgstr "解析 HTTP 响应失败:%s" msgid "Error stopping pollster." msgstr "停止轮询程序时出错。" @@ -101,25 +98,24 @@ msgstr "事件" msgid "Expression evaluated to a NaN value!" -msgstr "表达式计算结果为NaN!" +msgstr "表达式计算结果为 NaN 值!" #, python-format msgid "Failed to import extension for %(name)s: %(error)s" -msgstr "无法为%(name)s引入扩展:%(error)s" +msgstr "未能导入 %(name)s 的扩展:%(error)s" #, python-format msgid "" "Failed to inspect data of instance , domain state " "is SHUTOFF." -msgstr "" -"为虚拟机获取监控数据失败了,虚拟机状态为SHUTOFF" +msgstr "未能检查到实例 的数据,域状态为 SHUTOFF。" #, python-format msgid "" "Failed to inspect memory usage of %(instance_uuid)s, can not get info from " "libvirt: %(error)s" msgstr "" -"为虚拟机%(instance_uuid)s采集内存使用指标失败了,无法从libvirt获取信息:" +"未能检查到 %(instance_uuid)s 的内存使用情况,无法从 libvirt 获取信息:" "%(error)s" #, python-format @@ -127,40 +123,40 @@ "Failed to inspect memory usage of instance , can " "not get info from libvirt." msgstr "" -"为虚拟机采集内存使用指标失败了,无法从libvirt获取信" -"息。" +"未能检查到实例 的内存使用情况,无法从 libvirt 获取" +"信息。" #, python-format msgid "Failed to load any notification handlers for %s" -msgstr "无法为%s加载任何通知处理器" +msgstr "无法为 %s 加载任何通知处理器" #, python-format msgid "Failed to parse the timestamp value %s" -msgstr "解析时间戳%s失败" +msgstr "未能解析时间戳记值 %s" #, python-format msgid "Failed to publish %d datapoints, dropping them" -msgstr "发布%d个数据点时失败,正在将其丢弃" +msgstr "未能发布 %d 个数据点,正在将其删除" #, python-format msgid "Failed to publish %d datapoints, queue them" -msgstr "发布%d个数据点时失败,将其入队" +msgstr "未能发布 %d 个数据点,将其入队" #, python-format msgid "Failed to record metering data: %s" -msgstr "无法保存监控数据:%s" +msgstr "无法记录测量数据:%s" #, python-format msgid "Filter expression not valid: %s" -msgstr "过滤表达式不合法:%s" +msgstr "过滤表达式无效:%s" #, python-format msgid "Ignoring instance %(name)s (%(instance_id)s) : %(error)s" -msgstr "忽略虚拟机%(name)s (%(instance_id)s) : %(error)s" +msgstr "忽略实例 %(name)s (%(instance_id)s):%(error)s" #, python-format msgid "Ignoring instance %(name)s: %(error)s" -msgstr "忽略虚拟机%(name)s:%(error)s" +msgstr "忽略实例 %(name)s:%(error)s" #, python-format msgid "Ignoring loadbalancer %(loadbalancer_id)s" @@ -174,48 +170,49 @@ msgid "" "Invalid YAML syntax in Definitions file %(file)s at line: %(line)s, column: " "%(column)s." -msgstr "定义文件%(file)s中有非法YAML语法,行:%(line)s,列%(column)s。" +msgstr "" +"定义文件 %(file)s 的第 %(line)s 行和第 %(column)s 列中有无效 YAML 语法。" #, python-format msgid "Invalid period %(period)s: %(err)s" -msgstr "非法的间隔%(period)s: %(err)s" +msgstr "无效的时间段 %(period)s:%(err)s" #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" -msgstr "特征%(trait)s包含了不合法的特征类型'%(type)s' " +msgstr "特征 %(trait)s 包含了无效法的特征类型“%(type)s” " msgid "Limit must be positive" -msgstr "limit必须是正数" +msgstr "limit 必须是正数" #, python-format msgid "More than one event with id %s returned from storage driver" -msgstr "从数据库返回了多个id为%s的事件" +msgstr "从存储库驱动程序返回了多个标识为 %s 的事件" #, python-format msgid "Multiple VM %s found in XenServer" -msgstr "多个虚拟机%s在XenServer中被找到" +msgstr "在 XenServer 中找到多个 VM %s" msgid "Must specify connection_url, and connection_password to use" -msgstr "使用时必须指定connection_url和connection_password" +msgstr "使用时必须指定 connection_url 和 connection_password" #, python-format msgid "No plugin named %(plugin)s available for %(name)s" -msgstr "未对 %(name)s 提供名为 %(plugin)s 的插件" +msgstr "未对 %(name)s 提供名为 %(plugin)s 的插件" msgid "Node Manager init failed" msgstr "节点管理器初始化失败" #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" -msgstr "权限不足以访问%(aspect)s %(id)s" +msgstr "未授权访问 %(aspect)s %(id)s" #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" -msgstr "OpenDaylight接口返回状态%(status)s,原因%(reason)s" +msgstr "OpenDaylitght API 返回了状态 %(status)s %(reason)s" #, python-format msgid "Opencontrail API returned %(status)s %(reason)s" -msgstr "Opencontrail接口返回状态%(status)s,原因%(reason)s" +msgstr "Opencontrail API 返回了 %(status)s %(reason)s" #, python-format msgid "" @@ -231,42 +228,42 @@ #, python-format msgid "Order-by expression not valid: %s" -msgstr "orderby表达式不合法:%s" +msgstr "排序依据表达式无效:%s" #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(name)s: %(err)s" -msgstr "对 %(name)s 指定的 JSONPath(即“%(jsonpath)s”)存在解析错误:%(err)s" +msgstr "%(name)s 的 JSONPath 规范“%(jsonpath)s”中存在解析错误:%(err)s" msgid "Period must be positive." -msgstr "period 参数必须是正数" +msgstr "时间段必须是正数。" #, python-format msgid "Pipeline %(pipeline)s: %(status)s after error from publisher %(pub)s" msgstr "" -"管道 %(pipeline)s:在发布程序 %(pub)s 中发生错误之后,处于 %(status)s 状态" +"管道 %(pipeline)s:发布程序 %(pub)s 中发生错误之后,处于 %(status)s 状态" #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" -msgstr "流水线%(pipeline)s:发布器%(pub)s报错,继续执行" +msgstr "管道 %(pipeline)s:发布器 %(pub)s 出错,继续执行" #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" -msgstr "流水线%(pipeline)s:变形器%(trans)s清空数据时出错" +msgstr "管道 %(pipeline)s:清空变形器 %(trans)s 时出错" #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" -msgstr "流水线%(pipeline)s:数据%(smp)s的变形器%(trans)s遇到错误,退出" +msgstr "管道 %(pipeline)s:%(smp)s 的变形器%(trans)s 出错,退出" #, python-format msgid "Plugin specified, but no plugin name supplied for %s" -msgstr "指定了插件,但未对 %s 提供插件名" +msgstr "指定了插件,但没有为 %s 提供插件名" #, python-format msgid "Polling %(mtr)s sensor failed for %(cnt)s times!" -msgstr "拉取%(mtr)s传感器失败了%(cnt)s次!" +msgstr "轮询 %(mtr)s 传感器已失败 %(cnt)s 次!" #, python-format msgid "Polling %(name)s failed for %(cnt)s times!" @@ -274,7 +271,7 @@ #, python-format msgid "Pollster for %s is disabled!" -msgstr "%s的采集器被禁用" +msgstr "已禁用 %s 的采集器!" #, python-format msgid "Prevent pollster %(name)s for polling source %(source)s anymore!" @@ -283,64 +280,64 @@ #, python-format msgid "" "Publisher max local_queue length is exceeded, dropping %d oldest samples" -msgstr "发布的数据量超过本地队列最大长度,正在丢弃最老的%d个数据" +msgstr "超过发布器的本地队列最大长度,正在删除最旧的 %d 个样本" #, python-format msgid "Publishing policy is unknown (%s) force to default" -msgstr "未知的发布策略(%s),强制使用默认策略" +msgstr "未知的发布策略 (%s),强制使用缺省值" #, python-format msgid "RGW AdminOps API returned %(status)s %(reason)s" -msgstr "RGW AdminOps接口返回%(status)s %(reason)s" +msgstr "RGW AdminOps API 返回了 %(status)s %(reason)s" msgid "Request failed to connect to OpenDaylight with NorthBound REST API" -msgstr "请求无法连接到OpenDaylight的北向REST接口" +msgstr "请求无法连接到带有 NorthBound REST API 的 OpenDaylight" #, python-format msgid "Required field %s not specified" -msgstr "必填项%s没有填写" +msgstr "未指定所需字段 %s" msgid "Resource" msgstr "资源" msgid "Sample" -msgstr "数据" +msgstr "样本" msgid "Samples should be included in request body" msgstr "样本应包括在请求主体中" #, python-format msgid "Skip loading extension for %s" -msgstr "跳过为%s加载扩展" +msgstr "跳过 %s 的加载扩展" #, python-format msgid "String %s is not a valid isotime" -msgstr "字符串%s不是个合法的标准时间格式" +msgstr "字符串 %s 是无效的标准时间格式" msgid "" "The Yaml file that defines mapping between samples and gnocchi resources/" "metrics" -msgstr "用于定义样本与 gnocchi 资源/度量值之间的映射的Yaml 文件" +msgstr "定义样本与 gnocchi 资源/度量值之间的映射的 Yaml 文件" #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is: " "%(supported)s" -msgstr "数据类型%(type)s不被支持。支持的数据类型列表:%(supported)s" +msgstr "数据类型 %(type)s 不受支持。受支持的数据类型列表是:%(supported)s" #, python-format msgid "The field 'fields' is required for %s" msgstr "%s 需要字段“fields”" msgid "The path for the file publisher is required" -msgstr "文件发布器必须设置文件路径" +msgstr "需要文件发布器的路径" #, python-format msgid "UDP: Cannot decode data sent by %s" -msgstr "UDP: 无法解码由 %s 发送的数据" +msgstr "UDP:无法解码由 %s 发送的数据" msgid "UDP: Unable to store meter" -msgstr "UDP: 无法存储计量器" +msgstr "UDP:无法存储计量器" #, python-format msgid "Unable to connect to the database server: %(errmsg)s." @@ -349,7 +346,7 @@ #, python-format msgid "" "Unable to convert the value %(value)s to the expected data type %(type)s." -msgstr "无法转换%(value)s到预期的数据类型%(type)s。" +msgstr "无法将值 %(value)s 转换为预期的数据类型 %(type)s。" #, python-format msgid "Unable to discover resources: %s" @@ -357,11 +354,11 @@ #, python-format msgid "Unable to evaluate expression %(expr)s: %(exc)s" -msgstr "无法计算表达式%(expr)s:%(exc)s" +msgstr "无法计算表达式 %(expr)s:%(exc)s" #, python-format msgid "Unable to load publisher %s" -msgstr "无法加载发布器%s" +msgstr "无法加载发布器 %s" #, python-format msgid "Unable to load the hypervisor inspector: %s" @@ -371,30 +368,30 @@ msgid "" "Unable to reconnect to the primary mongodb after %(retries)d retries. Giving " "up." -msgstr "在%(retries)d次尝试后仍无法重连到MongoDB主节点。放弃重连。" +msgstr "在 %(retries)d 次尝试后仍无法重连到主要 MongoDB。放弃重连。" #, python-format msgid "" "Unable to reconnect to the primary mongodb: %(errmsg)s. Trying again in " "%(retry_interval)d seconds." msgstr "" -"无法重连到MongoDB主节点:%(errmsg)s。在%(retry_interval)d秒后进行重试。" +"无法重连到主要 MongoDB:%(errmsg)s。在 %(retry_interval)d 秒后进行重试。" msgid "Unable to send sample over UDP" -msgstr "无法通过UDP发送采样" +msgstr "无法通过 UDP 发送样本" #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type %(type)s." -msgstr "在转换%(value)s到预期的数据类型%(type)s时发生了未预料的异常。" +msgstr "将 %(value)s 转换为预期的数据类型 %(type)s 时发生了意外的异常。" #, python-format msgid "Unknown discovery extension: %s" -msgstr "未知的发现器插件:%s" +msgstr "未知的发现扩展:%s" #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." -msgstr "未知的元数据类型。键(%s)将无法进行查询。" +msgstr "未知的元数据类型。键 (%s) 将无法进行查询。" #, python-format msgid "" @@ -403,7 +400,7 @@ #, python-format msgid "Unknown status %(stat)s received on fw %(id)s,skipping sample" -msgstr "从fw %(id)s收到未知的状态%(stat)s,跳过该采样数据" +msgstr "在 fw %(id)s 上接收到未知状态 %(stat)s,正在跳过样本" #, python-format msgid "Unknown status %(stat)s received on listener %(id)s, skipping sample" @@ -415,11 +412,11 @@ #, python-format msgid "Unknown status %(stat)s received on pool %(id)s, skipping sample" -msgstr "从pool %(id)s收到未知的状态%(stat)s,跳过该采样数据" +msgstr "在池 %(id)s 上接收到未知状态 %(stat)s,正在跳过样本" #, python-format msgid "Unknown status %(stat)s received on vip %(id)s, skipping sample" -msgstr "从vip %(id)s收到未知的状态%(stat)s,跳过该采样数据" +msgstr "在 vip %(id)s 上接收到未知状态 %(stat)s,正在跳过样本" #, python-format msgid "Unknown status %(stat)s received on vpn %(id)s, skipping sample" @@ -427,25 +424,28 @@ #, python-format msgid "VM %s not found in VMware vSphere" -msgstr "在 VMware vSphere 中,找不到 VM %s" +msgstr "在 VMware vSphere 中未找到 VM %s" #, python-format msgid "VM %s not found in XenServer" -msgstr "无法在XenServer中找到虚拟机%s" +msgstr "在 XenServer 中未找到 VM %s" msgid "Wrong sensor type" msgstr "错误的传感器类型" msgid "XenAPI not installed" -msgstr "XenAPI没有安装" +msgstr "没有安装 XenAPI" #, python-format msgid "YAML error reading Definitions file %(file)s" -msgstr "读取定义文件%(file)s时遇到YAML错误" +msgstr "读取定义文件 %(file)s 时遇到 YAML 错误" + +msgid "alarms URLs is unavailable when Aodh is disabled or unavailable." +msgstr "Aodh 被禁用或不可用时,警报 URL 不可用。" #, python-format msgid "could not get CPU time for %(id)s: %(e)s" -msgstr "无法为虚拟机%(id)s获取CPU时间:%(e)s" +msgstr "无法获取 %(id)s 的 CPU 时间:%(e)s" msgid "direct option cannot be true when Gnocchi is enabled." msgstr "启用 Gnocchi 后,direct 选项不能为 true。" @@ -456,23 +456,23 @@ #, python-format msgid "dropping sample with no predecessor: %s" -msgstr "因为之前没有数据(用来计算差值)因而丢弃数据:%s" +msgstr "正在删除没有先前数据的样本:%s" msgid "ipmitool output length mismatch" -msgstr "ipmi输出长度不匹配" +msgstr "ipmitool 输出长度不匹配" msgid "max_bytes and backup_count should be numbers." -msgstr "max_bytes和backup_count必须是整数。" +msgstr "max_bytes 和 backup_count 应该是数字。" #, python-format msgid "message signature invalid, discarding message: %r" -msgstr "消息签名不合法,丢弃消息:%r" +msgstr "消息签名无效,丢弃消息:%r" msgid "parse IPMI sensor data failed,No data retrieved from given input" -msgstr "解析IPMI传感器数据失败,从给定的输入中无法检索到数据" +msgstr "解析 IPMI 传感器数据失败,从给定的输入中无法检索到数据" msgid "parse IPMI sensor data failed,unknown sensor type" -msgstr "解析IPMI传感器数据失败,未知的传感器类型" +msgstr "解析 IPMI 传感器数据失败,未知的传感器类型" msgid "running ipmitool failure" -msgstr "运行ipmitool时失败了" +msgstr "运行 ipmitool 时失败" diff -Nru ceilometer-6.0.0/ceilometer/locale/zh_TW/LC_MESSAGES/ceilometer.po ceilometer-6.1.3/ceilometer/locale/zh_TW/LC_MESSAGES/ceilometer.po --- ceilometer-6.0.0/ceilometer/locale/zh_TW/LC_MESSAGES/ceilometer.po 2016-04-07 07:30:27.000000000 +0000 +++ ceilometer-6.1.3/ceilometer/locale/zh_TW/LC_MESSAGES/ceilometer.po 2016-07-21 10:20:12.000000000 +0000 @@ -4,19 +4,16 @@ # # Translators: # Stefano Maffulli , 2013 -# Lucas Palm , 2015. #zanata -# OpenStack Infra , 2015. #zanata # Jennifer , 2016. #zanata -# Lucas Palm , 2016. #zanata msgid "" msgstr "" -"Project-Id-Version: ceilometer 6.0.0.0b4.dev50\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2016-03-19 00:57+0000\n" +"Project-Id-Version: ceilometer 6.0.1.dev11\n" +"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" +"POT-Creation-Date: 2016-05-19 11:00+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"PO-Revision-Date: 2016-03-15 07:46+0000\n" +"PO-Revision-Date: 2016-04-15 07:53+0000\n" "Last-Translator: Jennifer \n" "Language: zh-TW\n" "Plural-Forms: nplurals=1; plural=0;\n" @@ -67,7 +64,7 @@ msgid "" "Dispatcher target was not set, no meter will be posted. Set the target in " "the ceilometer.conf file" -msgstr "未設定分派器目標,將不公佈任何計量。請在ceilometer.conf 檔中設定目標。" +msgstr "未設定分派器目標,將不公佈任何計量。請在ceilometer.conf 檔中設定目標" #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" @@ -78,7 +75,7 @@ "Error from libvirt while looking up instance : " "[Error Code %(error_code)s] %(ex)s" msgstr "" -"查閱實例 <名稱=%(name)s,ID=%(id)s> 時,libvirt 中發生錯誤:[錯誤碼 " +"查閱實例 時,libvirt 中發生錯誤:[錯誤碼 " "%(error_code)s] %(ex)s" #, python-format @@ -92,7 +89,7 @@ msgstr "事件" msgid "Expression evaluated to a NaN value!" -msgstr "表示式已求值為非數字值!" +msgstr "表示式求值結果為非數字值!" #, python-format msgid "Failed to import extension for %(name)s: %(error)s" @@ -102,21 +99,21 @@ msgid "" "Failed to inspect data of instance , domain state " "is SHUTOFF." -msgstr "無法檢查實例 <名稱=%(name)s,ID=%(id)s> 的資料,網域狀態為 SHUTOFF。" +msgstr "無法檢查實例 的資料,網域狀態為 SHUTOFF。" #, python-format msgid "" "Failed to inspect memory usage of %(instance_uuid)s, can not get info from " "libvirt: %(error)s" msgstr "" -"無法檢查 %(instance_uuid)s 的記憶體用量,無法從 libVirt 取得資訊:%(error)s" +"無法檢查 %(instance_uuid)s 的記憶體用量,無法從 libvirt 取得資訊:%(error)s" #, python-format msgid "" "Failed to inspect memory usage of instance , can " "not get info from libvirt." msgstr "" -"無法檢查實例 <名稱=%(name)s,ID=%(id)s> 的記憶體用量,無法從 libVirt 取得資" +"無法檢查實例 的記憶體用量,無法從 libvirt 取得資" "訊。" #, python-format @@ -163,22 +160,22 @@ msgid "" "Invalid YAML syntax in Definitions file %(file)s at line: %(line)s, column: " "%(column)s." -msgstr "定義檔 %(file)s 第 %(line)s 行第 %(column)s 列中的 YAML 語法無效。" +msgstr "定義檔 %(file)s 第 %(line)s 行第 %(column)s 直欄中的 YAML 語法無效。" #, python-format msgid "Invalid period %(period)s: %(err)s" -msgstr "期間 %(period)s 無效:%(err)s" +msgstr "時間段 %(period)s 無效:%(err)s" #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" -msgstr "特徵 %(trait)s 的特徵類型 '%(type)s' 無效" +msgstr "特質 %(trait)s 的特質類型 '%(type)s' 無效" msgid "Limit must be positive" msgstr "限制值必須是正數" #, python-format msgid "More than one event with id %s returned from storage driver" -msgstr "從儲存體驅動程式傳回了多個 ID 為 %s 的事件" +msgstr "從儲存體驅動程式傳回了多於一個 ID 為 %s 的事件" #, python-format msgid "Multiple VM %s found in XenServer" @@ -228,7 +225,7 @@ msgstr "%(name)s 的 JSONPath 規格 '%(jsonpath)s' 中發生剖析錯誤:%(err)s" msgid "Period must be positive." -msgstr "期間必須是正數。" +msgstr "時間段必須是正數。" #, python-format msgid "Pipeline %(pipeline)s: %(status)s after error from publisher %(pub)s" @@ -246,7 +243,7 @@ msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" -msgstr "管線 %(pipeline)s:%(smp)s 的轉換器 %(trans)s傳回錯誤後結束" +msgstr "管線 %(pipeline)s:%(smp)s 的轉換器 %(trans)s 傳回錯誤後結束" #, python-format msgid "Plugin specified, but no plugin name supplied for %s" @@ -258,7 +255,7 @@ #, python-format msgid "Polling %(name)s failed for %(cnt)s times!" -msgstr "輪詢 %(name)s 失敗了 %(cnt)s 次!" +msgstr "輪詢 %(name)s 已失敗 %(cnt)s 次!" #, python-format msgid "Pollster for %s is disabled!" @@ -308,7 +305,7 @@ msgid "" "The Yaml file that defines mapping between samples and gnocchi resources/" "metrics" -msgstr "用來在範例與 gnocchi 資源/度量之間定義對映的Yaml 檔案" +msgstr "用來定義範例與 gnocchi 資源/度量之間之對映的Yaml 檔案" #, python-format msgid "" @@ -432,6 +429,9 @@ msgid "YAML error reading Definitions file %(file)s" msgstr "讀取定義檔 %(file)s 時發生 YAML 錯誤" +msgid "alarms URLs is unavailable when Aodh is disabled or unavailable." +msgstr "當已停用或無法使用 Aodh 時,無法使用警示 URL" + #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "無法取得 %(id)s 的 CPU 時間:%(e)s" diff -Nru ceilometer-6.0.0/ceilometer/messaging.py ceilometer-6.1.3/ceilometer/messaging.py --- ceilometer-6.0.0/ceilometer/messaging.py 2016-04-07 07:30:27.000000000 +0000 +++ ceilometer-6.1.3/ceilometer/messaging.py 2016-07-21 10:20:12.000000000 +0000 @@ -34,8 +34,9 @@ if not transport or not cache: try: transport = oslo_messaging.get_transport(cfg.CONF, url) - except oslo_messaging.InvalidTransportURL as e: - if not optional or e.url: + except (oslo_messaging.InvalidTransportURL, + oslo_messaging.DriverLoadFailure): + if not optional or url: # NOTE(sileht): oslo_messaging is configured but unloadable # so reraise the exception raise diff -Nru ceilometer-6.0.0/ceilometer/network/services/base.py ceilometer-6.1.3/ceilometer/network/services/base.py --- ceilometer-6.0.0/ceilometer/network/services/base.py 2016-04-07 07:30:27.000000000 +0000 +++ ceilometer-6.1.3/ceilometer/network/services/base.py 2016-07-21 10:20:08.000000000 +0000 @@ -21,6 +21,11 @@ 'inactive': 0, 'active': 1, 'pending_create': 2, + 'down': 3, + 'created': 4, + 'pending_update': 5, + 'pending_delete': 6, + 'error': 7, } diff -Nru ceilometer-6.0.0/ceilometer/neutron_client.py ceilometer-6.1.3/ceilometer/neutron_client.py --- ceilometer-6.0.0/ceilometer/neutron_client.py 2016-04-07 07:30:28.000000000 +0000 +++ ceilometer-6.1.3/ceilometer/neutron_client.py 2016-07-21 10:20:12.000000000 +0000 @@ -139,6 +139,7 @@ fips = self.client.list_floatingips()['floatingips'] return fips + @logged def list_pools_v2(self): """This method is used to get the pools list. @@ -175,6 +176,7 @@ return resources + @logged def list_members_v2(self): """Method is used to list the members info. @@ -199,6 +201,7 @@ resources.append(member) return resources + @logged def list_health_monitors_v2(self): """Method is used to list the health monitors @@ -386,6 +389,7 @@ return status_dict + @logged def list_listener(self): """This method is used to get the list of the listeners.""" resp = self.client.list_listeners() @@ -396,12 +400,14 @@ listener['operating_status'] = status[listener.get('id')] return resources + @logged def list_loadbalancer(self): """This method is used to get the list of the loadbalancers.""" resp = self.client.list_loadbalancers() resources = resp.get('loadbalancers') return resources + @logged def get_loadbalancer_stats(self, loadbalancer_id): """This method is used to get the statistics of the loadbalancer. diff -Nru ceilometer-6.0.0/ceilometer/notification.py ceilometer-6.1.3/ceilometer/notification.py --- ceilometer-6.0.0/ceilometer/notification.py 2016-04-07 07:30:28.000000000 +0000 +++ ceilometer-6.1.3/ceilometer/notification.py 2016-07-21 10:20:12.000000000 +0000 @@ -110,7 +110,7 @@ notifiers.append(oslo_messaging.Notifier( transport, driver=cfg.CONF.publisher_notifier.telemetry_driver, - publisher_id='ceilometer.notification', + publisher_id=pipe.name, topic='%s-%s-%s' % (self.NOTIFICATION_IPC, pipe.name, x))) return notifiers @@ -146,7 +146,12 @@ super(NotificationService, self).start() self.partition_coordinator = None self.coord_lock = threading.Lock() - self.listeners, self.pipeline_listeners = [], [] + + self.listeners = [] + + # NOTE(kbespalov): for the pipeline queues used a single amqp host + # hence only one listener is required + self.pipeline_listener = None self.pipeline_manager = pipeline.setup_pipeline() @@ -174,7 +179,6 @@ self.event_pipe_manager = self._get_event_pipeline_manager( self.transport) - self.listeners, self.pipeline_listeners = [], [] self._configure_main_queue_listeners(self.pipe_manager, self.event_pipe_manager) @@ -188,7 +192,7 @@ self.tg.add_timer(cfg.CONF.coordination.check_watchers, self.partition_coordinator.run_watchers) # configure pipelines after all coordination is configured. - self._configure_pipeline_listeners() + self._configure_pipeline_listener() if not cfg.CONF.notification.disable_non_metric_meters: LOG.warning(_LW('Non-metric meters may be collected. It is highly ' @@ -243,9 +247,9 @@ self.listeners.append(listener) def _refresh_agent(self, event): - self._configure_pipeline_listeners(True) + self._configure_pipeline_listener() - def _configure_pipeline_listeners(self, reuse_listeners=False): + def _configure_pipeline_listener(self): with self.coord_lock: ev_pipes = [] if cfg.CONF.notification.store_events: @@ -256,40 +260,35 @@ self.group_id, range(cfg.CONF.notification.pipeline_processing_queues)) - queue_set = {} - for pipe_set, pipe in itertools.product(partitioned, pipelines): - queue_set['%s-%s-%s' % - (self.NOTIFICATION_IPC, pipe.name, pipe_set)] = pipe + endpoints = [] + targets = [] - if reuse_listeners: - topics = queue_set.keys() - kill_list = [] - for listener in self.pipeline_listeners: - if listener.dispatcher.targets[0].topic in topics: - queue_set.pop(listener.dispatcher.targets[0].topic) - else: - kill_list.append(listener) - for listener in kill_list: - utils.kill_listeners([listener]) - self.pipeline_listeners.remove(listener) - else: - utils.kill_listeners(self.pipeline_listeners) - self.pipeline_listeners = [] + for pipe in pipelines: + if isinstance(pipe, pipeline.EventPipeline): + endpoints.append(pipeline.EventPipelineEndpoint(self.ctxt, + pipe)) + else: + endpoints.append(pipeline.SamplePipelineEndpoint(self.ctxt, + pipe)) - for topic, pipe in queue_set.items(): - LOG.debug('Pipeline endpoint: %s from set: %s', pipe.name, - pipe_set) - pipe_endpoint = (pipeline.EventPipelineEndpoint - if isinstance(pipe, pipeline.EventPipeline) - else pipeline.SamplePipelineEndpoint) - listener = messaging.get_batch_notification_listener( - transport, - [oslo_messaging.Target(topic=topic)], - [pipe_endpoint(self.ctxt, pipe)], - batch_size=cfg.CONF.notification.batch_size, - batch_timeout=cfg.CONF.notification.batch_timeout) - listener.start() - self.pipeline_listeners.append(listener) + for pipe_set, pipe in itertools.product(partitioned, pipelines): + LOG.debug('Pipeline endpoint: %s from set: %s', + pipe.name, pipe_set) + topic = '%s-%s-%s' % (self.NOTIFICATION_IPC, + pipe.name, pipe_set) + targets.append(oslo_messaging.Target(topic=topic)) + + if self.pipeline_listener: + self.pipeline_listener.stop() + self.pipeline_listener.wait() + + self.pipeline_listener = messaging.get_batch_notification_listener( + transport, + targets, + endpoints, + batch_size=cfg.CONF.notification.batch_size, + batch_timeout=cfg.CONF.notification.batch_timeout) + self.pipeline_listener.start() def stop(self): if getattr(self, 'partition_coordinator', None): @@ -297,8 +296,8 @@ listeners = [] if getattr(self, 'listeners', None): listeners.extend(self.listeners) - if getattr(self, 'pipeline_listeners', None): - listeners.extend(self.pipeline_listeners) + if getattr(self, 'pipeline_listener', None): + listeners.append(self.pipeline_listener) utils.kill_listeners(listeners) super(NotificationService, self).stop() @@ -321,4 +320,4 @@ # re-start the pipeline listeners if workload partitioning # is enabled. if cfg.CONF.notification.workload_partitioning: - self._configure_pipeline_listeners() + self._configure_pipeline_listener() diff -Nru ceilometer-6.0.0/ceilometer/objectstore/swift.py ceilometer-6.1.3/ceilometer/objectstore/swift.py --- ceilometer-6.0.0/ceilometer/objectstore/swift.py 2016-04-07 07:30:27.000000000 +0000 +++ ceilometer-6.1.3/ceilometer/objectstore/swift.py 2016-07-21 10:20:12.000000000 +0000 @@ -25,6 +25,7 @@ from swiftclient import client as swift from ceilometer.agent import plugin_base +from ceilometer.i18n import _LI from ceilometer import keystone_client from ceilometer import sample @@ -72,9 +73,10 @@ _Base._ENDPOINT = keystone_client.get_service_catalog( ksclient).url_for( service_type=cfg.CONF.service_types.swift, - interface=conf.interface) - except exceptions.EndpointNotFound: - LOG.debug("Swift endpoint not found") + interface=conf.interface, + region_name=conf.region_name) + except exceptions.EndpointNotFound as e: + LOG.info(_LI("Swift endpoint not found: %s"), e) return _Base._ENDPOINT def _iter_accounts(self, ksclient, cache, tenants): diff -Nru ceilometer-6.0.0/ceilometer/pipeline.py ceilometer-6.1.3/ceilometer/pipeline.py --- ceilometer-6.0.0/ceilometer/pipeline.py 2016-04-07 07:30:28.000000000 +0000 +++ ceilometer-6.1.3/ceilometer/pipeline.py 2016-07-21 10:20:12.000000000 +0000 @@ -81,6 +81,8 @@ class PipelineEndpoint(object): def __init__(self, context, pipeline): + self.filter_rule = oslo_messaging.NotificationFilter( + publisher_id=pipeline.name) self.publish_context = PublishContext(context, [pipeline]) @abc.abstractmethod diff -Nru ceilometer-6.0.0/ceilometer/storage/impl_sqlalchemy.py ceilometer-6.1.3/ceilometer/storage/impl_sqlalchemy.py --- ceilometer-6.0.0/ceilometer/storage/impl_sqlalchemy.py 2016-04-07 07:30:28.000000000 +0000 +++ ceilometer-6.1.3/ceilometer/storage/impl_sqlalchemy.py 2016-07-21 10:20:12.000000000 +0000 @@ -237,7 +237,20 @@ from oslo_db.sqlalchemy import migration path = os.path.join(os.path.abspath(os.path.dirname(__file__)), 'sqlalchemy', 'migrate_repo') - migration.db_sync(self._engine_facade.get_engine(), path) + engine = self._engine_facade.get_engine() + + from migrate import exceptions as migrate_exc + from migrate.versioning import api + from migrate.versioning import repository + + repo = repository.Repository(path) + try: + api.db_version(engine, repo) + except migrate_exc.DatabaseNotControlledError: + models.Base.metadata.create_all(engine) + api.version_control(engine, repo, repo.latest) + else: + migration.db_sync(engine, path) def clear(self): engine = self._engine_facade.get_engine() diff -Nru ceilometer-6.0.0/ceilometer/storage/sqlalchemy/models.py ceilometer-6.1.3/ceilometer/storage/sqlalchemy/models.py --- ceilometer-6.0.0/ceilometer/storage/sqlalchemy/models.py 2016-04-07 07:30:27.000000000 +0000 +++ ceilometer-6.1.3/ceilometer/storage/sqlalchemy/models.py 2016-07-21 10:20:12.000000000 +0000 @@ -34,7 +34,7 @@ class JSONEncodedDict(TypeDecorator): """Represents an immutable structure as a json-encoded string.""" - impl = String + impl = Text @staticmethod def process_bind_param(value, dialect): @@ -78,10 +78,12 @@ return value +_COMMON_TABLE_ARGS = {'mysql_charset': "utf8", 'mysql_engine': "InnoDB"} + + class CeilometerBase(object): """Base class for Ceilometer Models.""" - __table_args__ = {'mysql_charset': "utf8", - 'mysql_engine': "InnoDB"} + __table_args__ = _COMMON_TABLE_ARGS __table_initialized__ = False def __setitem__(self, key, value): @@ -105,6 +107,7 @@ __tablename__ = 'metadata_text' __table_args__ = ( Index('ix_meta_text_key', 'meta_key'), + _COMMON_TABLE_ARGS, ) id = Column(Integer, ForeignKey('resource.internal_id'), primary_key=True) meta_key = Column(String(255), primary_key=True) @@ -117,6 +120,7 @@ __tablename__ = 'metadata_bool' __table_args__ = ( Index('ix_meta_bool_key', 'meta_key'), + _COMMON_TABLE_ARGS, ) id = Column(Integer, ForeignKey('resource.internal_id'), primary_key=True) meta_key = Column(String(255), primary_key=True) @@ -129,6 +133,7 @@ __tablename__ = 'metadata_int' __table_args__ = ( Index('ix_meta_int_key', 'meta_key'), + _COMMON_TABLE_ARGS, ) id = Column(Integer, ForeignKey('resource.internal_id'), primary_key=True) meta_key = Column(String(255), primary_key=True) @@ -141,6 +146,7 @@ __tablename__ = 'metadata_float' __table_args__ = ( Index('ix_meta_float_key', 'meta_key'), + _COMMON_TABLE_ARGS, ) id = Column(Integer, ForeignKey('resource.internal_id'), primary_key=True) meta_key = Column(String(255), primary_key=True) @@ -154,6 +160,7 @@ __table_args__ = ( UniqueConstraint('name', 'type', 'unit', name='def_unique'), Index('ix_meter_name', 'name'), + _COMMON_TABLE_ARGS, ) id = Column(Integer, primary_key=True) name = Column(String(255), nullable=False) @@ -175,6 +182,7 @@ # name='res_def_unique'), Index('ix_resource_resource_id', 'resource_id'), Index('ix_resource_metadata_hash', 'metadata_hash'), + _COMMON_TABLE_ARGS, ) internal_id = Column(Integer, primary_key=True) @@ -209,7 +217,8 @@ Index('ix_sample_timestamp', 'timestamp'), Index('ix_sample_resource_id', 'resource_id'), Index('ix_sample_meter_id', 'meter_id'), - Index('ix_sample_meter_id_resource_id', 'meter_id', 'resource_id') + Index('ix_sample_meter_id_resource_id', 'meter_id', 'resource_id'), + _COMMON_TABLE_ARGS, ) id = Column(Integer, primary_key=True) meter_id = Column(Integer, ForeignKey('meter.id')) @@ -260,7 +269,8 @@ __table_args__ = ( Index('ix_event_message_id', 'message_id'), Index('ix_event_type_id', 'event_type_id'), - Index('ix_event_generated', 'generated') + Index('ix_event_generated', 'generated'), + _COMMON_TABLE_ARGS, ) id = Column(Integer, primary_key=True) message_id = Column(String(50), unique=True) @@ -289,6 +299,7 @@ __tablename__ = 'trait_text' __table_args__ = ( Index('ix_trait_text_event_id_key', 'event_id', 'key'), + _COMMON_TABLE_ARGS, ) event_id = Column(Integer, ForeignKey('event.id'), primary_key=True) key = Column(String(255), primary_key=True) @@ -301,6 +312,7 @@ __tablename__ = 'trait_int' __table_args__ = ( Index('ix_trait_int_event_id_key', 'event_id', 'key'), + _COMMON_TABLE_ARGS, ) event_id = Column(Integer, ForeignKey('event.id'), primary_key=True) key = Column(String(255), primary_key=True) @@ -313,6 +325,7 @@ __tablename__ = 'trait_float' __table_args__ = ( Index('ix_trait_float_event_id_key', 'event_id', 'key'), + _COMMON_TABLE_ARGS, ) event_id = Column(Integer, ForeignKey('event.id'), primary_key=True) key = Column(String(255), primary_key=True) @@ -325,6 +338,7 @@ __tablename__ = 'trait_datetime' __table_args__ = ( Index('ix_trait_datetime_event_id_key', 'event_id', 'key'), + _COMMON_TABLE_ARGS, ) event_id = Column(Integer, ForeignKey('event.id'), primary_key=True) key = Column(String(255), primary_key=True) diff -Nru ceilometer-6.0.0/ceilometer/tests/functional/test_notification.py ceilometer-6.1.3/ceilometer/tests/functional/test_notification.py --- ceilometer-6.0.0/ceilometer/tests/functional/test_notification.py 2016-04-07 07:30:27.000000000 +0000 +++ ceilometer-6.1.3/ceilometer/tests/functional/test_notification.py 2016-07-21 10:20:12.000000000 +0000 @@ -156,10 +156,8 @@ self.srv.listeners[0].dispatcher.endpoints[0]) @mock.patch('ceilometer.pipeline.setup_pipeline', mock.MagicMock()) - @mock.patch.object(oslo_messaging.MessageHandlingServer, 'start', - mock.MagicMock()) - @mock.patch('ceilometer.event.endpoint.EventsNotificationEndpoint') - def test_unique_consumers(self, fake_event_endpoint_class): + @mock.patch('oslo_messaging.get_batch_notification_listener') + def test_unique_consumers(self, mock_listener): def fake_get_notifications_manager_dup_targets(pm): plugin = instance.Instance(pm) @@ -171,7 +169,10 @@ '_get_notifications_manager') as get_nm: get_nm.side_effect = fake_get_notifications_manager_dup_targets self.srv.start() - self.assertEqual(1, len(self.srv.listeners[0].dispatcher.targets)) + self.assertEqual(1, len(mock_listener.call_args_list)) + args, kwargs = mock_listener.call_args + self.assertEqual(1, len(args[1])) + self.assertIsInstance(args[1][0], oslo_messaging.Target) class BaseRealNotification(tests_base.BaseTestCase): @@ -257,7 +258,6 @@ if (len(self.publisher.samples) >= self.expected_samples and len(self.publisher.events) >= self.expected_events): break - self.assertNotEqual(self.srv.listeners, self.srv.pipeline_listeners) self.srv.stop() resources = list(set(s.resource_id for s in self.publisher.samples)) @@ -387,31 +387,71 @@ fake_publisher_cls.return_value = self.publisher self._check_notification_service() - def test_reset_listeners_on_refresh(self): + @mock.patch('oslo_messaging.get_batch_notification_listener') + def test_reset_listener_on_refresh(self, mock_listener): + mock_listener.side_effect = [ + mock.MagicMock(), # main listener + mock.MagicMock(), # pipeline listener + mock.MagicMock(), # refresh pipeline listener + ] + self.srv.start() - listeners = self.srv.pipeline_listeners - self.assertEqual(20, len(listeners)) - self.srv._configure_pipeline_listeners() - self.assertEqual(20, len(self.srv.pipeline_listeners)) - for listener in listeners: - self.assertNotIn(listeners, set(self.srv.pipeline_listeners)) + + def _check_listener_targets(): + args, kwargs = mock_listener.call_args + self.assertEqual(20, len(args[1])) + self.assertIsInstance(args[1][0], oslo_messaging.Target) + + _check_listener_targets() + + listener = self.srv.pipeline_listener + self.srv._configure_pipeline_listener() + self.assertIsNot(listener, self.srv.pipeline_listener) + _check_listener_targets() + self.srv.stop() - def test_retain_common_listeners_on_refresh(self): + @mock.patch('oslo_messaging.get_batch_notification_listener') + def test_retain_common_targets_on_refresh(self, mock_listener): with mock.patch('ceilometer.coordination.PartitionCoordinator' '.extract_my_subset', return_value=[1, 2]): self.srv.start() - self.assertEqual(4, len(self.srv.pipeline_listeners)) - listeners = [listener for listener in self.srv.pipeline_listeners] + listened_before = [target.topic for target in + mock_listener.call_args[0][1]] + self.assertEqual(4, len(listened_before)) with mock.patch('ceilometer.coordination.PartitionCoordinator' '.extract_my_subset', return_value=[1, 3]): self.srv._refresh_agent(None) - self.assertEqual(4, len(self.srv.pipeline_listeners)) - for listener in listeners: - if listener.dispatcher.targets[0].topic.endswith('1'): - self.assertIn(listener, set(self.srv.pipeline_listeners)) - else: - self.assertNotIn(listener, set(self.srv.pipeline_listeners)) + listened_after = [target.topic for target in + mock_listener.call_args[0][1]] + self.assertEqual(4, len(listened_after)) + common = set(listened_before) & set(listened_after) + for topic in common: + self.assertTrue(topic.endswith('1')) + self.srv.stop() + + @mock.patch('oslo_messaging.get_batch_notification_listener') + def test_notify_to_relevant_endpoint(self, mock_listener): + self.srv.start() + + targets = mock_listener.call_args[0][1] + self.assertIsNotEmpty(targets) + + endpoints = {} + for endpoint in mock_listener.call_args[0][2]: + self.assertEqual(1, len(endpoint.publish_context.pipelines)) + pipe = list(endpoint.publish_context.pipelines)[0] + endpoints[pipe.name] = endpoint + + notifiers = [] + notifiers.extend(self.srv.pipe_manager.transporters[0][2]) + notifiers.extend(self.srv.event_pipe_manager.transporters[0][2]) + for notifier in notifiers: + filter_rule = endpoints[notifier.publisher_id].filter_rule + self.assertEqual(True, filter_rule.match(None, + notifier.publisher_id, + None, None, None)) + self.srv.stop() @mock.patch('oslo_messaging.Notifier.sample') diff -Nru ceilometer-6.0.0/ceilometer/tests/tempest/api/base.py ceilometer-6.1.3/ceilometer/tests/tempest/api/base.py --- ceilometer-6.0.0/ceilometer/tests/tempest/api/base.py 2016-04-07 07:30:27.000000000 +0000 +++ ceilometer-6.1.3/ceilometer/tests/tempest/api/base.py 2016-07-21 10:20:08.000000000 +0000 @@ -49,7 +49,7 @@ @classmethod def skip_checks(cls): super(BaseTelemetryTest, cls).skip_checks() - if not CONF.service_available.ceilometer_plugin: + if not CONF.service_available.ceilometer: raise cls.skipException("Ceilometer support is required") @classmethod diff -Nru ceilometer-6.0.0/ceilometer/tests/tempest/api/test_telemetry_notification_api.py ceilometer-6.1.3/ceilometer/tests/tempest/api/test_telemetry_notification_api.py --- ceilometer-6.0.0/ceilometer/tests/tempest/api/test_telemetry_notification_api.py 2016-04-07 07:30:27.000000000 +0000 +++ ceilometer-6.1.3/ceilometer/tests/tempest/api/test_telemetry_notification_api.py 2016-07-21 10:20:08.000000000 +0000 @@ -78,7 +78,7 @@ body = self.create_server() - if CONF.telemetry_plugin.event_enabled: + if CONF.telemetry.event_enabled: query = ('instance_id', 'eq', body['id']) self.await_events(query) diff -Nru ceilometer-6.0.0/ceilometer/tests/tempest/config.py ceilometer-6.1.3/ceilometer/tests/tempest/config.py --- ceilometer-6.0.0/ceilometer/tests/tempest/config.py 2016-04-07 07:30:27.000000000 +0000 +++ ceilometer-6.1.3/ceilometer/tests/tempest/config.py 2016-07-21 10:20:08.000000000 +0000 @@ -20,12 +20,12 @@ title="Available OpenStack Services") ServiceAvailableGroup = [ - cfg.BoolOpt('ceilometer_plugin', + cfg.BoolOpt('ceilometer', default=True, help="Whether or not Ceilometer is expected to be available"), ] -telemetry_group = cfg.OptGroup(name='telemetry_plugin', +telemetry_group = cfg.OptGroup(name='telemetry', title='Telemetry Service Options') TelemetryGroup = [ diff -Nru ceilometer-6.0.0/ceilometer/tests/tempest/exceptions.py ceilometer-6.1.3/ceilometer/tests/tempest/exceptions.py --- ceilometer-6.0.0/ceilometer/tests/tempest/exceptions.py 1970-01-01 00:00:00.000000000 +0000 +++ ceilometer-6.1.3/ceilometer/tests/tempest/exceptions.py 2016-07-21 10:20:08.000000000 +0000 @@ -0,0 +1,169 @@ +# Copyright 2012 OpenStack Foundation +# All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +import testtools + + +class TempestException(Exception): + """Base Tempest Exception + + To correctly use this class, inherit from it and define + a 'message' property. That message will get printf'd + with the keyword arguments provided to the constructor. + """ + message = "An unknown exception occurred" + + def __init__(self, *args, **kwargs): + super(TempestException, self).__init__() + try: + self._error_string = self.message % kwargs + except Exception: + # at least get the core message out if something happened + self._error_string = self.message + if len(args) > 0: + # If there is a non-kwarg parameter, assume it's the error + # message or reason description and tack it on to the end + # of the exception message + # Convert all arguments into their string representations... + args = ["%s" % arg for arg in args] + self._error_string = (self._error_string + + "\nDetails: %s" % '\n'.join(args)) + + def __str__(self): + return self._error_string + + +class RestClientException(TempestException, + testtools.TestCase.failureException): + pass + + +class InvalidConfiguration(TempestException): + message = "Invalid Configuration" + + +class InvalidCredentials(TempestException): + message = "Invalid Credentials" + + +class InvalidServiceTag(TempestException): + message = "Invalid service tag" + + +class InvalidIdentityVersion(TempestException): + message = "Invalid version %(identity_version)s of the identity service" + + +class TimeoutException(TempestException): + message = "Request timed out" + + +class BuildErrorException(TempestException): + message = "Server %(server_id)s failed to build and is in ERROR status" + + +class ImageKilledException(TempestException): + message = "Image %(image_id)s 'killed' while waiting for '%(status)s'" + + +class AddImageException(TempestException): + message = "Image %(image_id)s failed to become ACTIVE in the allotted time" + + +class VolumeBuildErrorException(TempestException): + message = "Volume %(volume_id)s failed to build and is in ERROR status" + + +class VolumeRestoreErrorException(TempestException): + message = "Volume %(volume_id)s failed to restore and is in ERROR status" + + +class SnapshotBuildErrorException(TempestException): + message = "Snapshot %(snapshot_id)s failed to build and is in ERROR status" + + +class VolumeBackupException(TempestException): + message = "Volume backup %(backup_id)s failed and is in ERROR status" + + +class StackBuildErrorException(TempestException): + message = ("Stack %(stack_identifier)s is in %(stack_status)s status " + "due to '%(stack_status_reason)s'") + + +class EndpointNotFound(TempestException): + message = "Endpoint not found" + + +class IdentityError(TempestException): + message = "Got identity error" + + +class ServerUnreachable(TempestException): + message = "The server is not reachable via the configured network" + + +# NOTE(andreaf) This exception is added here to facilitate the migration +# of get_network_from_name and preprov_creds to tempest.lib, and it should +# be migrated along with them +class InvalidTestResource(TempestException): + message = "%(name) is not a valid %(type), or the name is ambiguous" + + +class RFCViolation(RestClientException): + message = "RFC Violation" + + +class InvalidHttpSuccessCode(RestClientException): + message = "The success code is different than the expected one" + + +class BadRequest(RestClientException): + message = "Bad request" + + +class ResponseWithNonEmptyBody(RFCViolation): + message = ("RFC Violation! Response with %(status)d HTTP Status Code " + "MUST NOT have a body") + + +class ResponseWithEntity(RFCViolation): + message = ("RFC Violation! Response with 205 HTTP Status Code " + "MUST NOT have an entity") + + +class InvalidHTTPResponseHeader(RestClientException): + message = "HTTP response header is invalid" + + +class InvalidStructure(TempestException): + message = "Invalid structure of table with details" + + +class CommandFailed(Exception): + def __init__(self, returncode, cmd, output, stderr): + super(CommandFailed, self).__init__() + self.returncode = returncode + self.cmd = cmd + self.stdout = output + self.stderr = stderr + + def __str__(self): + return ("Command '%s' returned non-zero exit status %d.\n" + "stdout:\n%s\n" + "stderr:\n%s" % (self.cmd, + self.returncode, + self.stdout, + self.stderr)) diff -Nru ceilometer-6.0.0/ceilometer/tests/tempest/scenario/test_object_storage_telemetry_middleware.py ceilometer-6.1.3/ceilometer/tests/tempest/scenario/test_object_storage_telemetry_middleware.py --- ceilometer-6.0.0/ceilometer/tests/tempest/scenario/test_object_storage_telemetry_middleware.py 2016-04-07 07:30:27.000000000 +0000 +++ ceilometer-6.1.3/ceilometer/tests/tempest/scenario/test_object_storage_telemetry_middleware.py 2016-07-21 10:20:08.000000000 +0000 @@ -64,7 +64,7 @@ skip_msg = ("%s skipped as swift is not available" % cls.__name__) raise cls.skipException(skip_msg) - if not CONF.service_available.ceilometer_plugin: + if not CONF.service_available.ceilometer: skip_msg = ("%s skipped as ceilometer is not available" % cls.__name__) raise cls.skipException(skip_msg) @@ -139,7 +139,7 @@ return obj_name @test.idempotent_id('6d6b88e5-3e38-41bc-b34a-79f713a6cb85') - @test.services('object_storage', 'telemetry') + @test.services('object_storage') def test_swift_middleware_notifies(self): container_name = self.create_container() obj_name = self.upload_object_to_container(container_name) diff -Nru ceilometer-6.0.0/ceilometer/tests/tempest/service/client.py ceilometer-6.1.3/ceilometer/tests/tempest/service/client.py --- ceilometer-6.0.0/ceilometer/tests/tempest/service/client.py 2016-04-07 07:30:27.000000000 +0000 +++ ceilometer-6.1.3/ceilometer/tests/tempest/service/client.py 2016-07-21 10:20:08.000000000 +0000 @@ -23,11 +23,14 @@ from tempest.lib.services.compute.networks_client import NetworksClient from tempest.lib.services.compute.servers_client import ServersClient from tempest import manager -from tempest.services.image.v1.json.images_client import ImagesClient -from tempest.services.image.v2.json.images_client import ImagesClientV2 from tempest.services.object_storage.container_client import ContainerClient from tempest.services.object_storage.object_client import ObjectClient +from ceilometer.tests.tempest.service.images.v1.images_client import \ + ImagesClient +from ceilometer.tests.tempest.service.images.v2.images_client import \ + ImagesClient as ImagesClientV2 + CONF = config.CONF @@ -134,9 +137,9 @@ image_params.update(default_params) telemetry_params = { - 'service': CONF.telemetry_plugin.catalog_type, + 'service': CONF.telemetry.catalog_type, 'region': CONF.identity.region, - 'endpoint_type': CONF.telemetry_plugin.endpoint_type, + 'endpoint_type': CONF.telemetry.endpoint_type, } telemetry_params.update(default_params) diff -Nru ceilometer-6.0.0/ceilometer/tests/tempest/service/images/glance_http.py ceilometer-6.1.3/ceilometer/tests/tempest/service/images/glance_http.py --- ceilometer-6.0.0/ceilometer/tests/tempest/service/images/glance_http.py 1970-01-01 00:00:00.000000000 +0000 +++ ceilometer-6.1.3/ceilometer/tests/tempest/service/images/glance_http.py 2016-07-21 10:20:08.000000000 +0000 @@ -0,0 +1,361 @@ +# Copyright 2012 OpenStack Foundation +# All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +# Originally copied from python-glanceclient + +import copy +import hashlib +import posixpath +import re +import socket +import struct + +import OpenSSL +from oslo_log import log as logging +import six +from six import moves +from six.moves import http_client as httplib +from six.moves.urllib import parse as urlparse + +from ceilometer.tests.tempest import exceptions as exc + +LOG = logging.getLogger(__name__) +USER_AGENT = 'tempest' +CHUNKSIZE = 1024 * 64 # 64kB +TOKEN_CHARS_RE = re.compile('^[-A-Za-z0-9+/=]*$') + + +class HTTPClient(object): + + def __init__(self, auth_provider, filters, **kwargs): + self.auth_provider = auth_provider + self.filters = filters + self.endpoint = auth_provider.base_url(filters) + endpoint_parts = urlparse.urlparse(self.endpoint) + self.endpoint_scheme = endpoint_parts.scheme + self.endpoint_hostname = endpoint_parts.hostname + self.endpoint_port = endpoint_parts.port + + self.connection_class = self._get_connection_class( + self.endpoint_scheme) + self.connection_kwargs = self._get_connection_kwargs( + self.endpoint_scheme, **kwargs) + + @staticmethod + def _get_connection_class(scheme): + if scheme == 'https': + return VerifiedHTTPSConnection + else: + return httplib.HTTPConnection + + @staticmethod + def _get_connection_kwargs(scheme, **kwargs): + _kwargs = {'timeout': float(kwargs.get('timeout', 600))} + + if scheme == 'https': + _kwargs['ca_certs'] = kwargs.get('ca_certs', None) + _kwargs['cert_file'] = kwargs.get('cert_file', None) + _kwargs['key_file'] = kwargs.get('key_file', None) + _kwargs['insecure'] = kwargs.get('insecure', False) + _kwargs['ssl_compression'] = kwargs.get('ssl_compression', True) + + return _kwargs + + def _get_connection(self): + _class = self.connection_class + try: + return _class(self.endpoint_hostname, self.endpoint_port, + **self.connection_kwargs) + except httplib.InvalidURL: + raise exc.EndpointNotFound + + def _http_request(self, url, method, **kwargs): + """Send an http request with the specified characteristics. + + Wrapper around httplib.HTTP(S)Connection.request to handle tasks such + as setting headers and error handling. + """ + # Copy the kwargs so we can reuse the original in case of redirects + kwargs['headers'] = copy.deepcopy(kwargs.get('headers', {})) + kwargs['headers'].setdefault('User-Agent', USER_AGENT) + + self._log_request(method, url, kwargs['headers']) + + conn = self._get_connection() + + try: + url_parts = urlparse.urlparse(url) + conn_url = posixpath.normpath(url_parts.path) + LOG.debug('Actual Path: {path}'.format(path=conn_url)) + if kwargs['headers'].get('Transfer-Encoding') == 'chunked': + conn.putrequest(method, conn_url) + for header, value in kwargs['headers'].items(): + conn.putheader(header, value) + conn.endheaders() + chunk = kwargs['body'].read(CHUNKSIZE) + # Chunk it, baby... + while chunk: + conn.send('%x\r\n%s\r\n' % (len(chunk), chunk)) + chunk = kwargs['body'].read(CHUNKSIZE) + conn.send('0\r\n\r\n') + else: + conn.request(method, conn_url, **kwargs) + resp = conn.getresponse() + except socket.gaierror as e: + message = ("Error finding address for %(url)s: %(e)s" % + {'url': url, 'e': e}) + raise exc.EndpointNotFound(message) + except (socket.error, socket.timeout) as e: + message = ("Error communicating with %(endpoint)s %(e)s" % + {'endpoint': self.endpoint, 'e': e}) + raise exc.TimeoutException(message) + + body_iter = ResponseBodyIterator(resp) + # Read body into string if it isn't obviously image data + if resp.getheader('content-type', None) != 'application/octet-stream': + body_str = ''.join([body_chunk for body_chunk in body_iter]) + body_iter = six.StringIO(body_str) + self._log_response(resp, None) + else: + self._log_response(resp, body_iter) + + return resp, body_iter + + def _log_request(self, method, url, headers): + LOG.info('Request: ' + method + ' ' + url) + if headers: + headers_out = headers + if 'X-Auth-Token' in headers and headers['X-Auth-Token']: + token = headers['X-Auth-Token'] + if len(token) > 64 and TOKEN_CHARS_RE.match(token): + headers_out = headers.copy() + headers_out['X-Auth-Token'] = "" + LOG.info('Request Headers: ' + str(headers_out)) + + def _log_response(self, resp, body): + status = str(resp.status) + LOG.info("Response Status: " + status) + if resp.getheaders(): + LOG.info('Response Headers: ' + str(resp.getheaders())) + if body: + str_body = str(body) + length = len(body) + LOG.info('Response Body: ' + str_body[:2048]) + if length >= 2048: + self.LOG.debug("Large body (%d) md5 summary: %s", length, + hashlib.md5(str_body).hexdigest()) + + def raw_request(self, method, url, **kwargs): + kwargs.setdefault('headers', {}) + kwargs['headers'].setdefault('Content-Type', + 'application/octet-stream') + if 'body' in kwargs: + if (hasattr(kwargs['body'], 'read') + and method.lower() in ('post', 'put')): + # We use 'Transfer-Encoding: chunked' because + # body size may not always be known in advance. + kwargs['headers']['Transfer-Encoding'] = 'chunked' + + # Decorate the request with auth + req_url, kwargs['headers'], kwargs['body'] = \ + self.auth_provider.auth_request( + method=method, url=url, headers=kwargs['headers'], + body=kwargs.get('body', None), filters=self.filters) + return self._http_request(req_url, method, **kwargs) + + +class OpenSSLConnectionDelegator(object): + """An OpenSSL.SSL.Connection delegator. + + Supplies an additional 'makefile' method which httplib requires + and is not present in OpenSSL.SSL.Connection. + + Note: Since it is not possible to inherit from OpenSSL.SSL.Connection + a delegator must be used. + """ + def __init__(self, *args, **kwargs): + self.connection = OpenSSL.SSL.Connection(*args, **kwargs) + + def __getattr__(self, name): + return getattr(self.connection, name) + + def makefile(self, *args, **kwargs): + # Ensure the socket is closed when this file is closed + kwargs['close'] = True + return socket._fileobject(self.connection, *args, **kwargs) + + +class VerifiedHTTPSConnection(httplib.HTTPSConnection): + """Extended HTTPSConnection which uses OpenSSL library for enhanced SSL + + Note: Much of this functionality can eventually be replaced + with native Python 3.3 code. + """ + def __init__(self, host, port=None, key_file=None, cert_file=None, + ca_certs=None, timeout=None, insecure=False, + ssl_compression=True): + httplib.HTTPSConnection.__init__(self, host, port, + key_file=key_file, + cert_file=cert_file) + self.key_file = key_file + self.cert_file = cert_file + self.timeout = timeout + self.insecure = insecure + self.ssl_compression = ssl_compression + self.ca_certs = ca_certs + self.setcontext() + + @staticmethod + def host_matches_cert(host, x509): + """Verify that the x509 certificate we have received from 'host' + + Identifies the server we are connecting to, ie that the certificate's + Common Name or a Subject Alternative Name matches 'host'. + """ + # First see if we can match the CN + if x509.get_subject().commonName == host: + return True + + # Also try Subject Alternative Names for a match + san_list = None + for i in moves.xrange(x509.get_extension_count()): + ext = x509.get_extension(i) + if ext.get_short_name() == 'subjectAltName': + san_list = str(ext) + for san in ''.join(san_list.split()).split(','): + if san == "DNS:%s" % host: + return True + + # Server certificate does not match host + msg = ('Host "%s" does not match x509 certificate contents: ' + 'CommonName "%s"' % (host, x509.get_subject().commonName)) + if san_list is not None: + msg = msg + ', subjectAltName "%s"' % san_list + raise exc.SSLCertificateError(msg) + + def verify_callback(self, connection, x509, errnum, + depth, preverify_ok): + if x509.has_expired(): + msg = "SSL Certificate expired on '%s'" % x509.get_notAfter() + raise exc.SSLCertificateError(msg) + + if depth == 0 and preverify_ok is True: + # We verify that the host matches against the last + # certificate in the chain + return self.host_matches_cert(self.host, x509) + else: + # Pass through OpenSSL's default result + return preverify_ok + + def setcontext(self): + """Set up the OpenSSL context.""" + self.context = OpenSSL.SSL.Context(OpenSSL.SSL.SSLv23_METHOD) + + if self.ssl_compression is False: + self.context.set_options(0x20000) # SSL_OP_NO_COMPRESSION + + if self.insecure is not True: + self.context.set_verify(OpenSSL.SSL.VERIFY_PEER, + self.verify_callback) + else: + self.context.set_verify(OpenSSL.SSL.VERIFY_NONE, + self.verify_callback) + + if self.cert_file: + try: + self.context.use_certificate_file(self.cert_file) + except Exception as e: + msg = 'Unable to load cert from "%s" %s' % (self.cert_file, e) + raise exc.SSLConfigurationError(msg) + if self.key_file is None: + # We support having key and cert in same file + try: + self.context.use_privatekey_file(self.cert_file) + except Exception as e: + msg = ('No key file specified and unable to load key ' + 'from "%s" %s' % (self.cert_file, e)) + raise exc.SSLConfigurationError(msg) + + if self.key_file: + try: + self.context.use_privatekey_file(self.key_file) + except Exception as e: + msg = 'Unable to load key from "%s" %s' % (self.key_file, e) + raise exc.SSLConfigurationError(msg) + + if self.ca_certs: + try: + self.context.load_verify_locations(self.ca_certs) + except Exception as e: + msg = 'Unable to load CA from "%s" %s' % (self.ca_certs, e) + raise exc.SSLConfigurationError(msg) + else: + self.context.set_default_verify_paths() + + def connect(self): + """Connect to SSL port and apply per-connection parameters.""" + try: + addresses = socket.getaddrinfo(self.host, + self.port, + socket.AF_UNSPEC, + socket.SOCK_STREAM) + except OSError as msg: + raise exc.RestClientException(msg) + for res in addresses: + af, socktype, proto, canonname, sa = res + sock = socket.socket(af, socket.SOCK_STREAM) + + if self.timeout is not None: + # '0' microseconds + sock.setsockopt(socket.SOL_SOCKET, socket.SO_RCVTIMEO, + struct.pack('LL', self.timeout, 0)) + self.sock = OpenSSLConnectionDelegator(self.context, sock) + try: + self.sock.connect(sa) + except OSError as msg: + if self.sock: + self.sock = None + continue + break + if self.sock is None: + # Happen only when all results have failed. + raise exc.RestClientException('Cannot connect to %s' % self.host) + + def close(self): + if self.sock: + # Remove the reference to the socket but don't close it yet. + # Response close will close both socket and associated + # file. Closing socket too soon will cause response + # reads to fail with socket IO error 'Bad file descriptor'. + self.sock = None + httplib.HTTPSConnection.close(self) + + +class ResponseBodyIterator(object): + """A class that acts as an iterator over an HTTP response.""" + + def __init__(self, resp): + self.resp = resp + + def __iter__(self): + while True: + yield self.next() + + def next(self): + chunk = self.resp.read(CHUNKSIZE) + if chunk: + return chunk + else: + raise StopIteration() diff -Nru ceilometer-6.0.0/ceilometer/tests/tempest/service/images/v1/images_client.py ceilometer-6.1.3/ceilometer/tests/tempest/service/images/v1/images_client.py --- ceilometer-6.0.0/ceilometer/tests/tempest/service/images/v1/images_client.py 1970-01-01 00:00:00.000000000 +0000 +++ ceilometer-6.1.3/ceilometer/tests/tempest/service/images/v1/images_client.py 2016-07-21 10:20:12.000000000 +0000 @@ -0,0 +1,257 @@ +# Copyright 2013 IBM Corp. +# 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 copy +import errno +import os + +from oslo_log import log as logging +from oslo_serialization import jsonutils as json +import six +from six.moves.urllib import parse as urllib +from tempest.lib.common import rest_client +from tempest.lib import exceptions as lib_exc + +from ceilometer.tests.tempest.service.images import glance_http + +LOG = logging.getLogger(__name__) + + +class ImagesClient(rest_client.RestClient): + + def __init__(self, auth_provider, catalog_type, region, **kwargs): + super(ImagesClient, self).__init__( + auth_provider, catalog_type, region, **kwargs) + self._http = None + self.dscv = kwargs.get("disable_ssl_certificate_validation") + self.ca_certs = kwargs.get("ca_certs") + + def _image_meta_from_headers(self, headers): + meta = {'properties': {}} + for key, value in six.iteritems(headers): + if key.startswith('x-image-meta-property-'): + _key = key[22:] + meta['properties'][_key] = value + elif key.startswith('x-image-meta-'): + _key = key[13:] + meta[_key] = value + + for key in ['is_public', 'protected', 'deleted']: + if key in meta: + meta[key] = meta[key].strip().lower() in ('t', 'true', 'yes', + '1') + for key in ['size', 'min_ram', 'min_disk']: + if key in meta: + try: + meta[key] = int(meta[key]) + except ValueError: + pass + return meta + + def _image_meta_to_headers(self, fields): + headers = {} + fields_copy = copy.deepcopy(fields) + copy_from = fields_copy.pop('copy_from', None) + if copy_from is not None: + headers['x-glance-api-copy-from'] = copy_from + for key, value in six.iteritems(fields_copy.pop('properties', {})): + headers['x-image-meta-property-%s' % key] = str(value) + for key, value in six.iteritems(fields_copy.pop('api', {})): + headers['x-glance-api-property-%s' % key] = str(value) + for key, value in six.iteritems(fields_copy): + headers['x-image-meta-%s' % key] = str(value) + return headers + + def _get_file_size(self, obj): + """Analyze file-like object and attempt to determine its size. + + :param obj: file-like object, typically redirected from stdin. + :retval The file's size or None if it cannot be determined. + """ + # For large images, we need to supply the size of the + # image file. See LP Bugs #827660 and #845788. + if hasattr(obj, 'seek') and hasattr(obj, 'tell'): + try: + obj.seek(0, os.SEEK_END) + obj_size = obj.tell() + obj.seek(0) + return obj_size + except IOError as e: + if e.errno == errno.ESPIPE: + # Illegal seek. This means the user is trying + # to pipe image data to the client, e.g. + # echo testdata | bin/glance add blah..., or + # that stdin is empty, or that a file-like + # object which doesn't support 'seek/tell' has + # been supplied. + return None + else: + raise + else: + # Cannot determine size of input image + return None + + def _get_http(self): + return glance_http.HTTPClient(auth_provider=self.auth_provider, + filters=self.filters, + insecure=self.dscv, + ca_certs=self.ca_certs) + + def _create_with_data(self, headers, data): + resp, body_iter = self.http.raw_request('POST', '/v1/images', + headers=headers, body=data) + self._error_checker('POST', '/v1/images', headers, data, resp, + body_iter) + body = json.loads(''.join([c for c in body_iter])) + return rest_client.ResponseBody(resp, body) + + def _update_with_data(self, image_id, headers, data): + url = '/v1/images/%s' % image_id + resp, body_iter = self.http.raw_request('PUT', url, headers=headers, + body=data) + self._error_checker('PUT', url, headers, data, + resp, body_iter) + body = json.loads(''.join([c for c in body_iter])) + return rest_client.ResponseBody(resp, body) + + @property + def http(self): + if self._http is None: + self._http = self._get_http() + return self._http + + def create_image(self, **kwargs): + headers = {} + data = kwargs.pop('data', None) + headers.update(self._image_meta_to_headers(kwargs)) + + if data is not None: + return self._create_with_data(headers, data) + + resp, body = self.post('v1/images', None, headers) + self.expected_success(201, resp.status) + body = json.loads(body) + return rest_client.ResponseBody(resp, body) + + def update_image(self, image_id, **kwargs): + headers = {} + data = kwargs.pop('data', None) + headers.update(self._image_meta_to_headers(kwargs)) + + if data is not None: + return self._update_with_data(image_id, headers, data) + + url = 'v1/images/%s' % image_id + resp, body = self.put(url, None, headers) + self.expected_success(200, resp.status) + body = json.loads(body) + return rest_client.ResponseBody(resp, body) + + def delete_image(self, image_id): + url = 'v1/images/%s' % image_id + resp, body = self.delete(url) + self.expected_success(200, resp.status) + return rest_client.ResponseBody(resp, body) + + def list_images(self, detail=False, **kwargs): + """Return a list of all images filtered by input parameters. + + Available params: see http://developer.openstack.org/ + api-ref-image-v1.html#listImage-v1 + + Most parameters except the following are passed to the API without + any changes. + :param changes_since: The name is changed to changes-since + """ + url = 'v1/images' + + if detail: + url += '/detail' + + properties = kwargs.pop('properties', {}) + for key, value in six.iteritems(properties): + kwargs['property-%s' % key] = value + + if kwargs.get('changes_since'): + kwargs['changes-since'] = kwargs.pop('changes_since') + + if len(kwargs) > 0: + url += '?%s' % urllib.urlencode(kwargs) + + resp, body = self.get(url) + self.expected_success(200, resp.status) + body = json.loads(body) + return rest_client.ResponseBody(resp, body) + + def check_image(self, image_id): + """Check image metadata.""" + url = 'v1/images/%s' % image_id + resp, __ = self.head(url) + self.expected_success(200, resp.status) + body = self._image_meta_from_headers(resp) + return rest_client.ResponseBody(resp, body) + + def show_image(self, image_id): + """Get image details plus the image itself.""" + url = 'v1/images/%s' % image_id + resp, body = self.get(url) + self.expected_success(200, resp.status) + return rest_client.ResponseBodyData(resp, body) + + def is_resource_deleted(self, id): + try: + if self.check_image(id)['status'] == 'deleted': + return True + except lib_exc.NotFound: + return True + return False + + @property + def resource_type(self): + """Returns the primary type of resource this client works with.""" + return 'image_meta' + + def list_image_members(self, image_id): + url = 'v1/images/%s/members' % image_id + resp, body = self.get(url) + self.expected_success(200, resp.status) + body = json.loads(body) + return rest_client.ResponseBody(resp, body) + + def list_shared_images(self, tenant_id): + """List shared images with the specified tenant""" + url = 'v1/shared-images/%s' % tenant_id + resp, body = self.get(url) + self.expected_success(200, resp.status) + body = json.loads(body) + return rest_client.ResponseBody(resp, body) + + def add_member(self, member_id, image_id, **kwargs): + """Add a member to an image. + + Available params: see http://developer.openstack.org/ + api-ref-image-v1.html#addMember-v1 + """ + url = 'v1/images/%s/members/%s' % (image_id, member_id) + body = json.dumps({'member': kwargs}) + resp, __ = self.put(url, body) + self.expected_success(204, resp.status) + return rest_client.ResponseBody(resp) + + def delete_member(self, member_id, image_id): + url = 'v1/images/%s/members/%s' % (image_id, member_id) + resp, __ = self.delete(url) + self.expected_success(204, resp.status) + return rest_client.ResponseBody(resp) diff -Nru ceilometer-6.0.0/ceilometer/tests/tempest/service/images/v2/images_client.py ceilometer-6.1.3/ceilometer/tests/tempest/service/images/v2/images_client.py --- ceilometer-6.0.0/ceilometer/tests/tempest/service/images/v2/images_client.py 1970-01-01 00:00:00.000000000 +0000 +++ ceilometer-6.1.3/ceilometer/tests/tempest/service/images/v2/images_client.py 2016-07-21 10:20:08.000000000 +0000 @@ -0,0 +1,245 @@ +# Copyright 2013 IBM Corp. +# All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +from oslo_serialization import jsonutils as json +from six.moves.urllib import parse as urllib + +from tempest.lib.common import rest_client +from tempest.lib import exceptions as lib_exc + +from ceilometer.tests.tempest.service.images import glance_http + + +class ImagesClient(rest_client.RestClient): + + def __init__(self, auth_provider, catalog_type, region, **kwargs): + super(ImagesClient, self).__init__( + auth_provider, catalog_type, region, **kwargs) + self._http = None + self.dscv = kwargs.get("disable_ssl_certificate_validation") + self.ca_certs = kwargs.get("ca_certs") + + def _get_http(self): + return glance_http.HTTPClient(auth_provider=self.auth_provider, + filters=self.filters, + insecure=self.dscv, + ca_certs=self.ca_certs) + + @property + def http(self): + if self._http is None: + self._http = self._get_http() + return self._http + + def update_image(self, image_id, patch): + """Update an image. + + Available params: see http://developer.openstack.org/ + api-ref-image-v2.html#updateImage-v2 + """ + data = json.dumps(patch) + headers = {"Content-Type": "application/openstack-images-v2.0" + "-json-patch"} + resp, body = self.patch('v2/images/%s' % image_id, data, headers) + self.expected_success(200, resp.status) + body = json.loads(body) + return rest_client.ResponseBody(resp, body) + + def create_image(self, **kwargs): + """Create an image. + + Available params: see http://developer.openstack.org/ + api-ref-image-v2.html#createImage-v2 + """ + data = json.dumps(kwargs) + resp, body = self.post('v2/images', data) + self.expected_success(201, resp.status) + body = json.loads(body) + return rest_client.ResponseBody(resp, body) + + def deactivate_image(self, image_id): + url = 'v2/images/%s/actions/deactivate' % image_id + resp, body = self.post(url, None) + self.expected_success(204, resp.status) + return rest_client.ResponseBody(resp, body) + + def reactivate_image(self, image_id): + url = 'v2/images/%s/actions/reactivate' % image_id + resp, body = self.post(url, None) + self.expected_success(204, resp.status) + return rest_client.ResponseBody(resp, body) + + def delete_image(self, image_id): + url = 'v2/images/%s' % image_id + resp, _ = self.delete(url) + self.expected_success(204, resp.status) + return rest_client.ResponseBody(resp) + + def list_images(self, params=None): + url = 'v2/images' + + if params: + url += '?%s' % urllib.urlencode(params) + + resp, body = self.get(url) + self.expected_success(200, resp.status) + body = json.loads(body) + return rest_client.ResponseBody(resp, body) + + def show_image(self, image_id): + url = 'v2/images/%s' % image_id + resp, body = self.get(url) + self.expected_success(200, resp.status) + body = json.loads(body) + return rest_client.ResponseBody(resp, body) + + def is_resource_deleted(self, id): + try: + self.show_image(id) + except lib_exc.NotFound: + return True + return False + + @property + def resource_type(self): + """Returns the primary type of resource this client works with.""" + return 'image' + + def store_image_file(self, image_id, data): + url = 'v2/images/%s/file' % image_id + headers = {'Content-Type': 'application/octet-stream'} + resp, body = self.http.raw_request('PUT', url, headers=headers, + body=data) + self.expected_success(204, resp.status) + return rest_client.ResponseBody(resp, body) + + def show_image_file(self, image_id): + url = 'v2/images/%s/file' % image_id + resp, body = self.get(url) + self.expected_success(200, resp.status) + return rest_client.ResponseBodyData(resp, body) + + def add_image_tag(self, image_id, tag): + url = 'v2/images/%s/tags/%s' % (image_id, tag) + resp, body = self.put(url, body=None) + self.expected_success(204, resp.status) + return rest_client.ResponseBody(resp, body) + + def delete_image_tag(self, image_id, tag): + url = 'v2/images/%s/tags/%s' % (image_id, tag) + resp, _ = self.delete(url) + self.expected_success(204, resp.status) + return rest_client.ResponseBody(resp) + + def list_image_members(self, image_id): + url = 'v2/images/%s/members' % image_id + resp, body = self.get(url) + self.expected_success(200, resp.status) + body = json.loads(body) + return rest_client.ResponseBody(resp, body) + + def create_image_member(self, image_id, **kwargs): + """Create an image member. + + Available params: see http://developer.openstack.org/ + api-ref-image-v2.html#createImageMember-v2 + """ + url = 'v2/images/%s/members' % image_id + data = json.dumps(kwargs) + resp, body = self.post(url, data) + self.expected_success(200, resp.status) + body = json.loads(body) + return rest_client.ResponseBody(resp, body) + + def update_image_member(self, image_id, member_id, **kwargs): + """Update an image member. + + Available params: see http://developer.openstack.org/ + api-ref-image-v2.html#updateImageMember-v2 + """ + url = 'v2/images/%s/members/%s' % (image_id, member_id) + data = json.dumps(kwargs) + resp, body = self.put(url, data) + self.expected_success(200, resp.status) + body = json.loads(body) + return rest_client.ResponseBody(resp, body) + + def show_image_member(self, image_id, member_id): + url = 'v2/images/%s/members/%s' % (image_id, member_id) + resp, body = self.get(url) + self.expected_success(200, resp.status) + return rest_client.ResponseBody(resp, json.loads(body)) + + def delete_image_member(self, image_id, member_id): + url = 'v2/images/%s/members/%s' % (image_id, member_id) + resp, _ = self.delete(url) + self.expected_success(204, resp.status) + return rest_client.ResponseBody(resp) + + def show_schema(self, schema): + url = 'v2/schemas/%s' % schema + resp, body = self.get(url) + self.expected_success(200, resp.status) + body = json.loads(body) + return rest_client.ResponseBody(resp, body) + + def list_resource_types(self): + url = '/v2/metadefs/resource_types' + resp, body = self.get(url) + self.expected_success(200, resp.status) + body = json.loads(body) + return rest_client.ResponseBody(resp, body) + + def create_namespace(self, **kwargs): + """Create a namespace. + + Available params: see http://developer.openstack.org/ + api-ref-image-v2.html#createNamespace-v2 + """ + data = json.dumps(kwargs) + resp, body = self.post('/v2/metadefs/namespaces', data) + self.expected_success(201, resp.status) + body = json.loads(body) + return rest_client.ResponseBody(resp, body) + + def show_namespace(self, namespace): + url = '/v2/metadefs/namespaces/%s' % namespace + resp, body = self.get(url) + self.expected_success(200, resp.status) + body = json.loads(body) + return rest_client.ResponseBody(resp, body) + + def update_namespace(self, namespace, **kwargs): + """Update a namespace. + + Available params: see http://developer.openstack.org/ + api-ref-image-v2.html#updateNamespace-v2 + """ + # NOTE: On Glance API, we need to pass namespace on both URI + # and a request body. + params = {'namespace': namespace} + params.update(kwargs) + data = json.dumps(params) + url = '/v2/metadefs/namespaces/%s' % namespace + resp, body = self.put(url, body=data) + self.expected_success(200, resp.status) + body = json.loads(body) + return rest_client.ResponseBody(resp, body) + + def delete_namespace(self, namespace): + url = '/v2/metadefs/namespaces/%s' % namespace + resp, _ = self.delete(url) + self.expected_success(204, resp.status) + return rest_client.ResponseBody(resp) diff -Nru ceilometer-6.0.0/ceilometer/tests/unit/network/services/test_fwaas.py ceilometer-6.1.3/ceilometer/tests/unit/network/services/test_fwaas.py --- ceilometer-6.0.0/ceilometer/tests/unit/network/services/test_fwaas.py 2016-04-07 07:30:27.000000000 +0000 +++ ceilometer-6.1.3/ceilometer/tests/unit/network/services/test_fwaas.py 2016-07-21 10:20:12.000000000 +0000 @@ -85,7 +85,7 @@ samples = list(self.pollster.get_samples( self.manager, {}, resources=self.fake_get_fw_service())) - self.assertEqual(3, len(samples)) + self.assertEqual(4, len(samples)) for field in self.pollster.FIELDS: self.assertEqual(self.fake_get_fw_service()[0][field], samples[0].resource_metadata[field]) diff -Nru ceilometer-6.0.0/ceilometer/tests/unit/network/services/test_lbaas.py ceilometer-6.1.3/ceilometer/tests/unit/network/services/test_lbaas.py --- ceilometer-6.0.0/ceilometer/tests/unit/network/services/test_lbaas.py 2016-04-07 07:30:27.000000000 +0000 +++ ceilometer-6.1.3/ceilometer/tests/unit/network/services/test_lbaas.py 2016-07-21 10:20:12.000000000 +0000 @@ -137,7 +137,7 @@ samples = list(self.pollster.get_samples( self.manager, {}, resources=self.fake_get_pools())) - self.assertEqual(3, len(samples)) + self.assertEqual(4, len(samples)) for field in self.pollster.FIELDS: self.assertEqual(self.fake_get_pools()[0][field], samples[0].resource_metadata[field]) @@ -260,7 +260,7 @@ samples = list(self.pollster.get_samples( self.manager, {}, resources=self.fake_get_vips())) - self.assertEqual(3, len(samples)) + self.assertEqual(4, len(samples)) for field in self.pollster.FIELDS: self.assertEqual(self.fake_get_vips()[0][field], samples[0].resource_metadata[field]) @@ -353,7 +353,7 @@ samples = list(self.pollster.get_samples( self.manager, {}, self.fake_get_members())) - self.assertEqual(3, len(samples)) + self.assertEqual(4, len(samples)) for field in self.pollster.FIELDS: self.assertEqual(self.fake_get_members()[0][field], samples[0].resource_metadata[field]) diff -Nru ceilometer-6.0.0/ceilometer/tests/unit/network/services/test_vpnaas.py ceilometer-6.1.3/ceilometer/tests/unit/network/services/test_vpnaas.py --- ceilometer-6.0.0/ceilometer/tests/unit/network/services/test_vpnaas.py 2016-04-07 07:30:27.000000000 +0000 +++ ceilometer-6.1.3/ceilometer/tests/unit/network/services/test_vpnaas.py 2016-07-21 10:20:12.000000000 +0000 @@ -89,7 +89,7 @@ samples = list(self.pollster.get_samples( self.manager, {}, resources=self.fake_get_vpn_service())) - self.assertEqual(3, len(samples)) + self.assertEqual(4, len(samples)) for field in self.pollster.FIELDS: self.assertEqual(self.fake_get_vpn_service()[0][field], samples[0].resource_metadata[field]) diff -Nru ceilometer-6.0.0/ceilometer.egg-info/pbr.json ceilometer-6.1.3/ceilometer.egg-info/pbr.json --- ceilometer-6.0.0/ceilometer.egg-info/pbr.json 2016-04-07 07:32:03.000000000 +0000 +++ ceilometer-6.1.3/ceilometer.egg-info/pbr.json 2016-07-21 10:23:54.000000000 +0000 @@ -1 +1 @@ -{"is_release": true, "git_version": "2444399"} \ No newline at end of file +{"is_release": true, "git_version": "fd9ee40"} \ No newline at end of file diff -Nru ceilometer-6.0.0/ceilometer.egg-info/PKG-INFO ceilometer-6.1.3/ceilometer.egg-info/PKG-INFO --- ceilometer-6.0.0/ceilometer.egg-info/PKG-INFO 2016-04-07 07:32:03.000000000 +0000 +++ ceilometer-6.1.3/ceilometer.egg-info/PKG-INFO 2016-07-21 10:23:54.000000000 +0000 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: ceilometer -Version: 6.0.0 +Version: 6.1.3 Summary: OpenStack Telemetry Home-page: http://docs.openstack.org/developer/ceilometer/ Author: OpenStack diff -Nru ceilometer-6.0.0/ceilometer.egg-info/requires.txt ceilometer-6.1.3/ceilometer.egg-info/requires.txt --- ceilometer-6.0.0/ceilometer.egg-info/requires.txt 2016-04-07 07:32:03.000000000 +0000 +++ ceilometer-6.1.3/ceilometer.egg-info/requires.txt 2016-07-21 10:23:54.000000000 +0000 @@ -25,7 +25,7 @@ pysnmp<5.0.0,>=4.2.3 python-ceilometerclient>=2.2.1 python-glanceclient>=2.0.0 -python-keystoneclient!=1.8.0,!=2.1.0,>=1.6.0 +python-keystoneclient!=1.8.0,!=2.1.0,<3.0.0,>=1.6.0 keystoneauth1>=2.1.0 python-neutronclient!=4.1.0,>=2.6.0 python-novaclient!=2.33.0,>=2.29.0 diff -Nru ceilometer-6.0.0/ceilometer.egg-info/SOURCES.txt ceilometer-6.1.3/ceilometer.egg-info/SOURCES.txt --- ceilometer-6.0.0/ceilometer.egg-info/SOURCES.txt 2016-04-07 07:32:04.000000000 +0000 +++ ceilometer-6.1.3/ceilometer.egg-info/SOURCES.txt 2016-07-21 10:23:55.000000000 +0000 @@ -146,10 +146,6 @@ ceilometer/ipmi/pollsters/__init__.py ceilometer/ipmi/pollsters/node.py ceilometer/ipmi/pollsters/sensor.py -ceilometer/locale/ceilometer-log-error.pot -ceilometer/locale/ceilometer-log-info.pot -ceilometer/locale/ceilometer-log-warning.pot -ceilometer/locale/ceilometer.pot ceilometer/locale/de/LC_MESSAGES/ceilometer-log-error.po ceilometer/locale/de/LC_MESSAGES/ceilometer-log-info.po ceilometer/locale/de/LC_MESSAGES/ceilometer-log-warning.po @@ -166,6 +162,9 @@ ceilometer/locale/ko_KR/LC_MESSAGES/ceilometer.po ceilometer/locale/pt_BR/LC_MESSAGES/ceilometer.po ceilometer/locale/ru/LC_MESSAGES/ceilometer.po +ceilometer/locale/zh_CN/LC_MESSAGES/ceilometer-log-error.po +ceilometer/locale/zh_CN/LC_MESSAGES/ceilometer-log-info.po +ceilometer/locale/zh_CN/LC_MESSAGES/ceilometer-log-warning.po ceilometer/locale/zh_CN/LC_MESSAGES/ceilometer.po ceilometer/locale/zh_TW/LC_MESSAGES/ceilometer.po ceilometer/meter/__init__.py @@ -341,6 +340,7 @@ ceilometer/tests/integration/hooks/post_test_hook.sh ceilometer/tests/tempest/__init__.py ceilometer/tests/tempest/config.py +ceilometer/tests/tempest/exceptions.py ceilometer/tests/tempest/plugin.py ceilometer/tests/tempest/api/__init__.py ceilometer/tests/tempest/api/base.py @@ -349,6 +349,12 @@ ceilometer/tests/tempest/scenario/test_object_storage_telemetry_middleware.py ceilometer/tests/tempest/service/__init__.py ceilometer/tests/tempest/service/client.py +ceilometer/tests/tempest/service/images/__init__.py +ceilometer/tests/tempest/service/images/glance_http.py +ceilometer/tests/tempest/service/images/v1/__init__.py +ceilometer/tests/tempest/service/images/v1/images_client.py +ceilometer/tests/tempest/service/images/v2/__init__.py +ceilometer/tests/tempest/service/images/v2/images_client.py ceilometer/tests/unit/__init__.py ceilometer/tests/unit/test_coordination.py ceilometer/tests/unit/test_declarative.py diff -Nru ceilometer-6.0.0/ChangeLog ceilometer-6.1.3/ChangeLog --- ceilometer-6.0.0/ChangeLog 2016-04-07 07:32:03.000000000 +0000 +++ ceilometer-6.1.3/ChangeLog 2016-07-21 10:23:54.000000000 +0000 @@ -1,6 +1,42 @@ CHANGES ======= +6.1.3 +----- + +* sqlalchemy: do not run upgrade on fresh install +* sqlalchemy: fix JSONEncodedDict implementation type + +6.1.2 +----- + +* events: fix operator check in event filter + +6.1.1 +----- + +* Imported Translations from Zanata +* add log decorator for neutron_client public method + +6.1.0 +----- + +* dispacher/gnocchi: measures sent fix logging +* Copy images_client from tempest + Correct concurrency of gabbi 1.22.0 +* catch DriverLoadFailure for get_transport optional +* enable swift pollsters poll data for specific region +* Imported Translations from Zanata +* tempest_plugin: drop telemetry decorator +* Updated from global requirements +* [Trivial] Update Neutron resource status list +* fix CI failure due to oslo.messaging 5.0.0 +* Fix notification listeners usage +* Imported Translations from Zanata +* Fix Ceilometer tests config options +* Imported Translations from Zanata +* Imported Translations from Zanata +* Imported Translations from Zanata + 6.0.0 ----- @@ -2490,10 +2526,6 @@ * Allow empty dict as metaquery param for sqlalchemy * Add glossary definitions for additional terms * Support different publisher interval - -2013.1.g3 ---------- - * Fix message envelope keys * Revert recent rpc wire format changes * Document the rules for units diff -Nru ceilometer-6.0.0/debian/changelog ceilometer-6.1.3/debian/changelog --- ceilometer-6.0.0/debian/changelog 2016-04-07 21:15:28.000000000 +0000 +++ ceilometer-6.1.3/debian/changelog 2016-07-21 16:06:36.000000000 +0000 @@ -1,3 +1,17 @@ +ceilometer (1:6.1.3-0ubuntu1) xenial; urgency=medium + + * New upstream point release for OpenStack Mitaka (LP: #1604007). + * d/p/fix-fallback-meter-path.patch: Rebased. + * d/control: Align (build-)depends with upstream. + + -- David Della Vecchia Thu, 21 Jul 2016 11:34:17 -0400 + +ceilometer (1:6.1.1-0ubuntu1) xenial; urgency=medium + + * New upstream point release for OpenStack Mitaka (LP: #1601854). + + -- Corey Bryant Mon, 11 Jul 2016 10:06:08 -0400 + ceilometer (1:6.0.0-0ubuntu1) xenial; urgency=medium * New upstream release for OpenStack Mitaka. diff -Nru ceilometer-6.0.0/debian/control ceilometer-6.1.3/debian/control --- ceilometer-6.0.0/debian/control 2016-04-07 21:15:28.000000000 +0000 +++ ceilometer-6.1.3/debian/control 2016-07-21 16:06:36.000000000 +0000 @@ -5,6 +5,7 @@ Build-Depends: debhelper (>= 9), dh-python, dh-systemd, + python-gnocchiclient (>= 2.1.0), openstack-pkg-tools (>= 23~), python-all, python-pbr (>= 1.8), diff -Nru ceilometer-6.0.0/debian/gbp.conf ceilometer-6.1.3/debian/gbp.conf --- ceilometer-6.0.0/debian/gbp.conf 2016-04-07 21:15:28.000000000 +0000 +++ ceilometer-6.1.3/debian/gbp.conf 2016-07-21 16:06:36.000000000 +0000 @@ -1,5 +1,5 @@ [DEFAULT] -debian-branch = master +debian-branch = stable/mitaka upstream-tag = %(version)s pristine-tar = True diff -Nru ceilometer-6.0.0/debian/patches/fix-fallback-meter-path.patch ceilometer-6.1.3/debian/patches/fix-fallback-meter-path.patch --- ceilometer-6.0.0/debian/patches/fix-fallback-meter-path.patch 2016-04-07 21:15:28.000000000 +0000 +++ ceilometer-6.1.3/debian/patches/fix-fallback-meter-path.patch 2016-07-21 16:06:36.000000000 +0000 @@ -3,7 +3,7 @@ --- a/ceilometer/tests/unit/meter/test_notifications.py +++ b/ceilometer/tests/unit/meter/test_notifications.py -@@ -271,10 +271,7 @@ class TestMeterProcessing(test.BaseTestC +@@ -273,10 +273,7 @@ mock.mock_open(read_data='---\nmetric: []'), create=True) as mock_open: self.handler._load_definitions() diff -Nru ceilometer-6.0.0/PKG-INFO ceilometer-6.1.3/PKG-INFO --- ceilometer-6.0.0/PKG-INFO 2016-04-07 07:32:04.000000000 +0000 +++ ceilometer-6.1.3/PKG-INFO 2016-07-21 10:23:55.000000000 +0000 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: ceilometer -Version: 6.0.0 +Version: 6.1.3 Summary: OpenStack Telemetry Home-page: http://docs.openstack.org/developer/ceilometer/ Author: OpenStack diff -Nru ceilometer-6.0.0/requirements.txt ceilometer-6.1.3/requirements.txt --- ceilometer-6.0.0/requirements.txt 2016-04-07 07:30:27.000000000 +0000 +++ ceilometer-6.1.3/requirements.txt 2016-07-21 10:20:12.000000000 +0000 @@ -29,7 +29,7 @@ pysnmp<5.0.0,>=4.2.3 # BSD python-ceilometerclient>=2.2.1 # Apache-2.0 python-glanceclient>=2.0.0 # Apache-2.0 -python-keystoneclient!=1.8.0,!=2.1.0,>=1.6.0 # Apache-2.0 +python-keystoneclient!=1.8.0,!=2.1.0,<3.0.0,>=1.6.0 # Apache-2.0 keystoneauth1>=2.1.0 # Apache-2.0 python-neutronclient!=4.1.0,>=2.6.0 # Apache-2.0 python-novaclient!=2.33.0,>=2.29.0 # Apache-2.0 diff -Nru ceilometer-6.0.0/.testr.conf ceilometer-6.1.3/.testr.conf --- ceilometer-6.0.0/.testr.conf 2016-04-07 07:30:27.000000000 +0000 +++ ceilometer-6.1.3/.testr.conf 2016-07-21 10:20:08.000000000 +0000 @@ -6,4 +6,4 @@ test_id_option=--load-list $IDFILE test_list_option=--list # NOTE(chdent): Only used/matches on gabbi-related tests. -group_regex=(gabbi\.driver\.test_gabbi_(?:prefix_|)[^_]+)_ +group_regex=(gabbi\.(suitemaker|driver)\.test_gabbi_(?:prefix_|)[^_]+)_ diff -Nru ceilometer-6.0.0/test-requirements.txt ceilometer-6.1.3/test-requirements.txt --- ceilometer-6.0.0/test-requirements.txt 2016-04-07 07:30:27.000000000 +0000 +++ ceilometer-6.1.3/test-requirements.txt 2016-07-21 10:20:12.000000000 +0000 @@ -4,11 +4,11 @@ # Hacking already pins down pep8, pyflakes and flake8 hacking<0.11,>=0.10.0 -Babel>=1.3 # BSD +Babel!=2.3.0,!=2.3.1,!=2.3.2,!=2.3.3,>=1.3 # BSD contextlib2>=0.4.0 # PSF License coverage>=3.6 # Apache-2.0 elasticsearch<2.0,>=1.3.0 # Apache-2.0 -fixtures>=1.3.1 # Apache-2.0/BSD +fixtures<2.0,>=1.3.1 # Apache-2.0/BSD happybase!=0.7,>=0.5;python_version=='2.7' # MIT mock>=1.2 # BSD PyMySQL>=0.6.2 # MIT License