This patchset implements the purge script as specified in its related blueprint: - The '--age-in-days' option allows to specify the number of days before expiry - The '--max-number' option allows us to specify a limit on the number of objects to delete - The '--audit-template' option allows you to only delete objects related to the specified audit template UUID or name - The '--dry-run' option to go through the purge procedure without actually deleting anything - The '--exclude-orphans' option which allows you to exclude from the purge any object that does not have a parent (i.e. and audit without a related audit template) A prompt has been added to also propose to narrow down the number of deletions to be below the specified limit. Change-Id: I3ce83ab95277c109df67a6b5b920a878f6e59d3f Implements: blueprint db-purge-engine
591 lines
14 KiB
Plaintext
591 lines
14 KiB
Plaintext
# Translations template for python-watcher.
|
|
# Copyright (C) 2016 ORGANIZATION
|
|
# This file is distributed under the same license as the python-watcher
|
|
# project.
|
|
# FIRST AUTHOR <EMAIL@ADDRESS>, 2016.
|
|
#
|
|
#, fuzzy
|
|
msgid ""
|
|
msgstr ""
|
|
"Project-Id-Version: python-watcher 0.24.1.dev4\n"
|
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
|
"POT-Creation-Date: 2016-03-14 15:29+0100\n"
|
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
|
"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"
|
|
|
|
#: watcher/api/controllers/v1/action_plan.py:102
|
|
#, python-format
|
|
msgid "Invalid state: %(state)s"
|
|
msgstr ""
|
|
|
|
#: watcher/api/controllers/v1/action_plan.py:422
|
|
#, python-format
|
|
msgid "State transition not allowed: (%(initial_state)s -> %(new_state)s)"
|
|
msgstr ""
|
|
|
|
#: watcher/api/controllers/v1/audit.py:359
|
|
msgid "The audit template UUID or name specified is invalid"
|
|
msgstr ""
|
|
|
|
#: watcher/api/controllers/v1/types.py:148
|
|
#, python-format
|
|
msgid "%s is not JSON serializable"
|
|
msgstr ""
|
|
|
|
#: watcher/api/controllers/v1/types.py:184
|
|
#, python-format
|
|
msgid "Wrong type. Expected '%(type)s', got '%(value)s'"
|
|
msgstr ""
|
|
|
|
#: watcher/api/controllers/v1/types.py:223
|
|
#, python-format
|
|
msgid "'%s' is an internal attribute and can not be updated"
|
|
msgstr ""
|
|
|
|
#: watcher/api/controllers/v1/types.py:227
|
|
#, python-format
|
|
msgid "'%s' is a mandatory attribute and can not be removed"
|
|
msgstr ""
|
|
|
|
#: watcher/api/controllers/v1/types.py:232
|
|
msgid "'add' and 'replace' operations needs value"
|
|
msgstr ""
|
|
|
|
#: watcher/api/controllers/v1/utils.py:36
|
|
msgid "Limit must be positive"
|
|
msgstr ""
|
|
|
|
#: watcher/api/controllers/v1/utils.py:47
|
|
#, python-format
|
|
msgid "Invalid sort direction: %s. Acceptable values are 'asc' or 'desc'"
|
|
msgstr ""
|
|
|
|
#: watcher/api/controllers/v1/utils.py:58
|
|
#, python-format
|
|
msgid "Invalid filter: %s"
|
|
msgstr ""
|
|
|
|
#: watcher/api/controllers/v1/utils.py:65
|
|
#, python-format
|
|
msgid "Adding a new attribute (%s) to the root of the resource is not allowed"
|
|
msgstr ""
|
|
|
|
#: watcher/api/middleware/auth_token.py:45
|
|
msgid "Cannot compile public API routes"
|
|
msgstr ""
|
|
|
|
#: watcher/api/middleware/parsable_error.py:52
|
|
#, python-format
|
|
msgid "ErrorDocumentMiddleware received an invalid status %s"
|
|
msgstr ""
|
|
|
|
#: watcher/api/middleware/parsable_error.py:79
|
|
#, python-format
|
|
msgid "Error parsing HTTP response: %s"
|
|
msgstr ""
|
|
|
|
#: watcher/applier/actions/change_nova_service_state.py:90
|
|
msgid "The target state is not defined"
|
|
msgstr ""
|
|
|
|
#: watcher/applier/actions/migration.py:71
|
|
msgid "The parameter resource_id is invalid."
|
|
msgstr ""
|
|
|
|
#: watcher/applier/actions/migration.py:124
|
|
#, python-format
|
|
msgid ""
|
|
"Unexpected error occured. Migration failed forinstance %s. Leaving "
|
|
"instance on previous host."
|
|
msgstr ""
|
|
|
|
#: watcher/applier/actions/migration.py:140
|
|
#, python-format
|
|
msgid "Migration of type %(migration_type)s is not supported."
|
|
msgstr ""
|
|
|
|
#: watcher/applier/workflow_engine/default.py:134
|
|
#, python-format
|
|
msgid "The WorkFlow Engine has failed to execute the action %s"
|
|
msgstr ""
|
|
|
|
#: watcher/applier/workflow_engine/default.py:152
|
|
#, python-format
|
|
msgid "Revert action %s"
|
|
msgstr ""
|
|
|
|
#: watcher/applier/workflow_engine/default.py:158
|
|
msgid "Oops! We need disaster recover plan"
|
|
msgstr ""
|
|
|
|
#: watcher/cmd/api.py:46 watcher/cmd/applier.py:39
|
|
#: watcher/cmd/decisionengine.py:40
|
|
#, python-format
|
|
msgid "Starting server in PID %s"
|
|
msgstr ""
|
|
|
|
#: watcher/cmd/api.py:51
|
|
#, python-format
|
|
msgid "serving on 0.0.0.0:%(port)s, view at http://127.0.0.1:%(port)s"
|
|
msgstr ""
|
|
|
|
#: watcher/cmd/api.py:55
|
|
#, python-format
|
|
msgid "serving on http://%(host)s:%(port)s"
|
|
msgstr ""
|
|
|
|
#: watcher/common/clients.py:29
|
|
msgid "Version of Nova API to use in novaclient."
|
|
msgstr ""
|
|
|
|
#: watcher/common/clients.py:34
|
|
msgid "Version of Glance API to use in glanceclient."
|
|
msgstr ""
|
|
|
|
#: watcher/common/clients.py:39
|
|
msgid "Version of Cinder API to use in cinderclient."
|
|
msgstr ""
|
|
|
|
#: watcher/common/clients.py:44
|
|
msgid "Version of Ceilometer API to use in ceilometerclient."
|
|
msgstr ""
|
|
|
|
#: watcher/common/clients.py:50
|
|
msgid "Version of Neutron API to use in neutronclient."
|
|
msgstr ""
|
|
|
|
#: watcher/common/exception.py:59
|
|
#, python-format
|
|
msgid "Unexpected keystone client error occurred: %s"
|
|
msgstr ""
|
|
|
|
#: watcher/common/exception.py:72
|
|
msgid "An unknown exception occurred"
|
|
msgstr ""
|
|
|
|
#: watcher/common/exception.py:92
|
|
msgid "Exception in string format operation"
|
|
msgstr ""
|
|
|
|
#: watcher/common/exception.py:122
|
|
msgid "Not authorized"
|
|
msgstr ""
|
|
|
|
#: watcher/common/exception.py:127
|
|
msgid "Operation not permitted"
|
|
msgstr ""
|
|
|
|
#: watcher/common/exception.py:131
|
|
msgid "Unacceptable parameters"
|
|
msgstr ""
|
|
|
|
#: watcher/common/exception.py:136
|
|
#, python-format
|
|
msgid "The %(name)s %(id)s could not be found"
|
|
msgstr ""
|
|
|
|
#: watcher/common/exception.py:140
|
|
msgid "Conflict"
|
|
msgstr ""
|
|
|
|
#: watcher/common/exception.py:145
|
|
#, python-format
|
|
msgid "The %(name)s resource %(id)s could not be found"
|
|
msgstr ""
|
|
|
|
#: watcher/common/exception.py:150
|
|
#, python-format
|
|
msgid "Expected an uuid or int but received %(identity)s"
|
|
msgstr ""
|
|
|
|
#: watcher/common/exception.py:154
|
|
#, python-format
|
|
msgid "Goal %(goal)s is not defined in Watcher configuration file"
|
|
msgstr ""
|
|
|
|
#: watcher/common/exception.py:158
|
|
#, python-format
|
|
msgid "Expected a uuid but received %(uuid)s"
|
|
msgstr ""
|
|
|
|
#: watcher/common/exception.py:162
|
|
#, python-format
|
|
msgid "Expected a logical name but received %(name)s"
|
|
msgstr ""
|
|
|
|
#: watcher/common/exception.py:166
|
|
#, python-format
|
|
msgid "Expected a logical name or uuid but received %(name)s"
|
|
msgstr ""
|
|
|
|
#: watcher/common/exception.py:170
|
|
#, python-format
|
|
msgid "AuditTemplate %(audit_template)s could not be found"
|
|
msgstr ""
|
|
|
|
#: watcher/common/exception.py:174
|
|
#, python-format
|
|
msgid "An audit_template with UUID %(uuid)s or name %(name)s already exists"
|
|
msgstr ""
|
|
|
|
#: watcher/common/exception.py:179
|
|
#, python-format
|
|
msgid "AuditTemplate %(audit_template)s is referenced by one or multiple audit"
|
|
msgstr ""
|
|
|
|
#: watcher/common/exception.py:184
|
|
#, python-format
|
|
msgid "Audit %(audit)s could not be found"
|
|
msgstr ""
|
|
|
|
#: watcher/common/exception.py:188
|
|
#, python-format
|
|
msgid "An audit with UUID %(uuid)s already exists"
|
|
msgstr ""
|
|
|
|
#: watcher/common/exception.py:192
|
|
#, python-format
|
|
msgid "Audit %(audit)s is referenced by one or multiple action plans"
|
|
msgstr ""
|
|
|
|
#: watcher/common/exception.py:197
|
|
#, python-format
|
|
msgid "ActionPlan %(action_plan)s could not be found"
|
|
msgstr ""
|
|
|
|
#: watcher/common/exception.py:201
|
|
#, python-format
|
|
msgid "An action plan with UUID %(uuid)s already exists"
|
|
msgstr ""
|
|
|
|
#: watcher/common/exception.py:205
|
|
#, python-format
|
|
msgid "Action Plan %(action_plan)s is referenced by one or multiple actions"
|
|
msgstr ""
|
|
|
|
#: watcher/common/exception.py:210
|
|
#, python-format
|
|
msgid "Action %(action)s could not be found"
|
|
msgstr ""
|
|
|
|
#: watcher/common/exception.py:214
|
|
#, python-format
|
|
msgid "An action with UUID %(uuid)s already exists"
|
|
msgstr ""
|
|
|
|
#: watcher/common/exception.py:218
|
|
#, python-format
|
|
msgid "Action plan %(action_plan)s is referenced by one or multiple goals"
|
|
msgstr ""
|
|
|
|
#: watcher/common/exception.py:223
|
|
msgid "Filtering actions on both audit and action-plan is prohibited"
|
|
msgstr ""
|
|
|
|
#: watcher/common/exception.py:232
|
|
#, python-format
|
|
msgid "Couldn't apply patch '%(patch)s'. Reason: %(reason)s"
|
|
msgstr ""
|
|
|
|
#: watcher/common/exception.py:239
|
|
msgid "Illegal argument"
|
|
msgstr ""
|
|
|
|
#: watcher/common/exception.py:243
|
|
msgid "No such metric"
|
|
msgstr ""
|
|
|
|
#: watcher/common/exception.py:247
|
|
msgid "No rows were returned"
|
|
msgstr ""
|
|
|
|
#: watcher/common/exception.py:251
|
|
#, python-format
|
|
msgid "%(client)s connection failed. Reason: %(reason)s"
|
|
msgstr ""
|
|
|
|
#: watcher/common/exception.py:255
|
|
msgid "'Keystone API endpoint is missing''"
|
|
msgstr ""
|
|
|
|
#: watcher/common/exception.py:259
|
|
msgid "The list of hypervisor(s) in the cluster is empty"
|
|
msgstr ""
|
|
|
|
#: watcher/common/exception.py:263
|
|
msgid "The metrics resource collector is not defined"
|
|
msgstr ""
|
|
|
|
#: watcher/common/exception.py:267
|
|
msgid "the cluster state is not defined"
|
|
msgstr ""
|
|
|
|
#: watcher/common/exception.py:273
|
|
#, python-format
|
|
msgid "The instance '%(name)s' is not found"
|
|
msgstr ""
|
|
|
|
#: watcher/common/exception.py:277
|
|
msgid "The hypervisor is not found"
|
|
msgstr ""
|
|
|
|
#: watcher/common/exception.py:281
|
|
#, python-format
|
|
msgid "Error loading plugin '%(name)s'"
|
|
msgstr ""
|
|
|
|
#: watcher/common/exception.py:285
|
|
#, python-format
|
|
msgid "The identifier '%(name)s' is a reserved word"
|
|
msgstr ""
|
|
|
|
#: watcher/common/exception.py:289
|
|
#, python-format
|
|
msgid "The %(name)s resource %(id)s is not soft deleted"
|
|
msgstr ""
|
|
|
|
#: watcher/common/exception.py:293
|
|
msgid "Limit should be positive"
|
|
msgstr ""
|
|
|
|
#: watcher/common/service.py:83
|
|
#, python-format
|
|
msgid "Created RPC server for service %(service)s on host %(host)s."
|
|
msgstr ""
|
|
|
|
#: watcher/common/service.py:92
|
|
#, python-format
|
|
msgid "Service error occurred when stopping the RPC server. Error: %s"
|
|
msgstr ""
|
|
|
|
#: watcher/common/service.py:97
|
|
#, python-format
|
|
msgid "Service error occurred when cleaning up the RPC manager. Error: %s"
|
|
msgstr ""
|
|
|
|
#: watcher/common/service.py:101
|
|
#, python-format
|
|
msgid "Stopped RPC server for service %(service)s on host %(host)s."
|
|
msgstr ""
|
|
|
|
#: watcher/common/service.py:106
|
|
#, python-format
|
|
msgid ""
|
|
"Got signal SIGUSR1. Not deregistering on next shutdown of service "
|
|
"%(service)s on host %(host)s."
|
|
msgstr ""
|
|
|
|
#: watcher/common/utils.py:53
|
|
#, python-format
|
|
msgid ""
|
|
"Failed to remove trailing character. Returning original object.Supplied "
|
|
"object is not a string: %s,"
|
|
msgstr ""
|
|
|
|
#: watcher/common/messaging/messaging_handler.py:98
|
|
msgid "No endpoint defined; can only publish events"
|
|
msgstr ""
|
|
|
|
#: watcher/common/messaging/messaging_handler.py:101
|
|
msgid "Messaging configuration error"
|
|
msgstr ""
|
|
|
|
#: watcher/db/purge.py:50
|
|
msgid "Audit Templates"
|
|
msgstr ""
|
|
|
|
#: watcher/db/purge.py:51
|
|
msgid "Audits"
|
|
msgstr ""
|
|
|
|
#: watcher/db/purge.py:52
|
|
msgid "Action Plans"
|
|
msgstr ""
|
|
|
|
#: watcher/db/purge.py:53
|
|
msgid "Actions"
|
|
msgstr ""
|
|
|
|
#: watcher/db/purge.py:100
|
|
msgid "Total"
|
|
msgstr ""
|
|
|
|
#: watcher/db/purge.py:158
|
|
msgid "Audit Template"
|
|
msgstr ""
|
|
|
|
#: watcher/db/purge.py:206
|
|
#, python-format
|
|
msgid ""
|
|
"Orphans found:\n"
|
|
"%s"
|
|
msgstr ""
|
|
|
|
#: watcher/db/purge.py:265
|
|
#, python-format
|
|
msgid "There are %(count)d objects set for deletion. Continue? [y/N]"
|
|
msgstr ""
|
|
|
|
#: watcher/db/purge.py:272
|
|
#, python-format
|
|
msgid ""
|
|
"The number of objects (%(num)s) to delete from the database exceeds the "
|
|
"maximum number of objects (%(max_number)s) specified."
|
|
msgstr ""
|
|
|
|
#: watcher/db/purge.py:277
|
|
msgid "Do you want to delete objects up to the specified maximum number? [y/N]"
|
|
msgstr ""
|
|
|
|
#: watcher/db/purge.py:340
|
|
msgid "Deleting..."
|
|
msgstr ""
|
|
|
|
#: watcher/db/purge.py:346
|
|
msgid "Starting purge command"
|
|
msgstr ""
|
|
|
|
#: watcher/db/purge.py:356
|
|
msgid " (orphans excluded)"
|
|
msgstr ""
|
|
|
|
#: watcher/db/purge.py:357
|
|
msgid " (may include orphans)"
|
|
msgstr ""
|
|
|
|
#: watcher/db/purge.py:360 watcher/db/purge.py:361
|
|
#, python-format
|
|
msgid "Purge results summary%s:"
|
|
msgstr ""
|
|
|
|
#: watcher/db/purge.py:364
|
|
#, python-format
|
|
msgid "Here below is a table containing the objects that can be purged%s:"
|
|
msgstr ""
|
|
|
|
#: watcher/db/purge.py:369
|
|
msgid "Purge process completed"
|
|
msgstr ""
|
|
|
|
#: watcher/db/sqlalchemy/api.py:362
|
|
msgid ""
|
|
"Multiple audit templates exist with the same name. Please use the audit "
|
|
"template uuid instead"
|
|
msgstr ""
|
|
|
|
#: watcher/db/sqlalchemy/api.py:384
|
|
msgid "Cannot overwrite UUID for an existing Audit Template."
|
|
msgstr ""
|
|
|
|
#: watcher/db/sqlalchemy/api.py:495
|
|
msgid "Cannot overwrite UUID for an existing Audit."
|
|
msgstr ""
|
|
|
|
#: watcher/db/sqlalchemy/api.py:588
|
|
msgid "Cannot overwrite UUID for an existing Action."
|
|
msgstr ""
|
|
|
|
#: watcher/db/sqlalchemy/api.py:699
|
|
msgid "Cannot overwrite UUID for an existing Action Plan."
|
|
msgstr ""
|
|
|
|
#: watcher/db/sqlalchemy/migration.py:73
|
|
msgid ""
|
|
"Watcher database schema is already under version control; use upgrade() "
|
|
"instead"
|
|
msgstr ""
|
|
|
|
#: watcher/decision_engine/model/model_root.py:37
|
|
#: watcher/decision_engine/model/model_root.py:42
|
|
msgid "'obj' argument type is not valid"
|
|
msgstr ""
|
|
|
|
#: watcher/decision_engine/planner/default.py:79
|
|
msgid "The action plan is empty"
|
|
msgstr ""
|
|
|
|
#: watcher/decision_engine/strategy/selection/default.py:60
|
|
#, python-format
|
|
msgid "Incorrect mapping: could not find associated strategy for '%s'"
|
|
msgstr ""
|
|
|
|
#: watcher/decision_engine/strategy/strategies/basic_consolidation.py:288
|
|
#: watcher/decision_engine/strategy/strategies/basic_consolidation.py:335
|
|
#, python-format
|
|
msgid "No values returned by %(resource_id)s for %(metric_name)s"
|
|
msgstr ""
|
|
|
|
#: watcher/decision_engine/strategy/strategies/basic_consolidation.py:448
|
|
msgid "Initializing Sercon Consolidation"
|
|
msgstr ""
|
|
|
|
#: watcher/decision_engine/strategy/strategies/basic_consolidation.py:492
|
|
msgid "The workloads of the compute nodes of the cluster is zero"
|
|
msgstr ""
|
|
|
|
#: watcher/decision_engine/strategy/strategies/outlet_temp_control.py:147
|
|
#, python-format
|
|
msgid "%s: no outlet temp data"
|
|
msgstr ""
|
|
|
|
#: watcher/decision_engine/strategy/strategies/outlet_temp_control.py:172
|
|
#, python-format
|
|
msgid "VM not active, skipped: %s"
|
|
msgstr ""
|
|
|
|
#: watcher/decision_engine/strategy/strategies/outlet_temp_control.py:230
|
|
msgid "No hosts under outlet temp threshold found"
|
|
msgstr ""
|
|
|
|
#: watcher/decision_engine/strategy/strategies/outlet_temp_control.py:253
|
|
msgid "No proper target host could be found"
|
|
msgstr ""
|
|
|
|
#: watcher/objects/base.py:70
|
|
#, python-format
|
|
msgid "Error setting %(attr)s"
|
|
msgstr ""
|
|
|
|
#: watcher/objects/base.py:108
|
|
msgid "Invalid version string"
|
|
msgstr ""
|
|
|
|
#: watcher/objects/base.py:172
|
|
#, python-format
|
|
msgid "Unable to instantiate unregistered object type %(objtype)s"
|
|
msgstr ""
|
|
|
|
#: watcher/objects/base.py:299
|
|
#, python-format
|
|
msgid "Cannot load '%(attrname)s' in the base class"
|
|
msgstr ""
|
|
|
|
#: watcher/objects/base.py:308
|
|
msgid "Cannot save anything in the base class"
|
|
msgstr ""
|
|
|
|
#: watcher/objects/base.py:340
|
|
#, python-format
|
|
msgid "%(objname)s object has no attribute '%(attrname)s'"
|
|
msgstr ""
|
|
|
|
#: watcher/objects/base.py:390
|
|
#, python-format
|
|
msgid "'%(objclass)s' object has no attribute '%(attrname)s'"
|
|
msgstr ""
|
|
|
|
#: watcher/objects/utils.py:40
|
|
msgid "A datetime.datetime is required here"
|
|
msgstr ""
|
|
|
|
#: watcher/objects/utils.py:105
|
|
#, python-format
|
|
msgid "An object of class %s is required here"
|
|
msgstr ""
|
|
|