foreman-tasks 1.1.3 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/controllers/foreman_tasks/api/tasks_controller.rb +29 -1
- data/app/controllers/foreman_tasks/tasks_controller.rb +3 -11
- data/app/models/foreman_tasks/task.rb +4 -0
- data/app/models/setting/foreman_tasks.rb +1 -1
- data/app/services/ui_notifications/tasks/task_bulk_stop.rb +36 -0
- data/app/views/foreman_tasks/api/tasks/details.json.rabl +0 -1
- data/config/routes.rb +1 -0
- data/db/migrate/20200517215015_rename_bookmarks_controller.rb +35 -0
- data/db/migrate/20200519093217_drop_dynflow_allow_dangerous_actions_setting.foreman_tasks.rb +5 -0
- data/db/seeds.d/30-notification_blueprints.rb +7 -0
- data/lib/foreman_tasks/engine.rb +1 -1
- data/lib/foreman_tasks/tasks/cleanup.rake +2 -2
- data/lib/foreman_tasks/tasks/export_tasks.rake +1 -1
- data/lib/foreman_tasks/version.rb +1 -1
- data/locale/action_names.rb +1 -1
- data/locale/en/foreman_tasks.po +227 -41
- data/locale/foreman_tasks.pot +579 -288
- data/webpack/ForemanTasks/Components/TaskActions/TaskAction.test.js +60 -0
- data/webpack/ForemanTasks/Components/{TasksTable/TasksTableActionHelpers.js → TaskActions/TaskActionHelpers.js} +21 -6
- data/webpack/ForemanTasks/Components/{TasksTable/__tests__/TasksTableActionHelpers.test.js → TaskActions/TaskActionHelpers.test.js} +2 -2
- data/webpack/ForemanTasks/Components/TaskActions/TaskActionsConstants.js +16 -0
- data/webpack/ForemanTasks/Components/TaskActions/UnlockModals.js +60 -0
- data/webpack/ForemanTasks/Components/TaskActions/UnlockModals.test.js +14 -0
- data/webpack/ForemanTasks/Components/TaskActions/__snapshots__/TaskAction.test.js.snap +233 -0
- data/webpack/ForemanTasks/Components/TaskActions/__snapshots__/UnlockModals.test.js.snap +25 -0
- data/webpack/ForemanTasks/Components/TaskActions/index.js +115 -0
- data/webpack/ForemanTasks/Components/TaskDetails/Components/Task.js +130 -152
- data/webpack/ForemanTasks/Components/TaskDetails/Components/__tests__/Task.test.js +67 -3
- data/webpack/ForemanTasks/Components/TaskDetails/Components/__tests__/TaskInfo.test.js +0 -1
- data/webpack/ForemanTasks/Components/TaskDetails/Components/__tests__/__snapshots__/Task.test.js.snap +101 -70
- data/webpack/ForemanTasks/Components/TaskDetails/TaskDetailsActions.js +0 -15
- data/webpack/ForemanTasks/Components/TaskDetails/TaskDetailsConstants.js +0 -5
- data/webpack/ForemanTasks/Components/TaskDetails/TaskDetailsReducer.js +0 -6
- data/webpack/ForemanTasks/Components/TaskDetails/TaskDetailsSelectors.js +0 -9
- data/webpack/ForemanTasks/Components/TaskDetails/TasksDetailsHelper.js +6 -1
- data/webpack/ForemanTasks/Components/TaskDetails/__tests__/TaskDetails.test.js +5 -0
- data/webpack/ForemanTasks/Components/TaskDetails/__tests__/__snapshots__/TaskDetails.test.js.snap +2 -7
- data/webpack/ForemanTasks/Components/TaskDetails/__tests__/integration.test.js +4 -0
- data/webpack/ForemanTasks/Components/TaskDetails/index.js +4 -8
- data/webpack/ForemanTasks/Components/TasksTable/Components/ActionSelectButton.js +14 -1
- data/webpack/ForemanTasks/Components/TasksTable/Components/ConfirmModal/ConfirmModal.js +83 -0
- data/webpack/ForemanTasks/Components/TasksTable/Components/ConfirmModal/ConfirmModalActions.js +106 -0
- data/webpack/ForemanTasks/Components/TasksTable/Components/ConfirmModal/ConfirmModalReducer.js +38 -0
- data/webpack/ForemanTasks/Components/TasksTable/Components/ConfirmModal/ConfirmModalSelectors.js +45 -0
- data/webpack/ForemanTasks/Components/TasksTable/Components/ConfirmModal/__test__/ConfirmModal.test.js +36 -0
- data/webpack/ForemanTasks/Components/TasksTable/Components/ConfirmModal/__test__/ConfirmModalActions.test.js +205 -0
- data/webpack/ForemanTasks/Components/TasksTable/Components/ConfirmModal/__test__/ConfirmModalReducer.test.js +27 -0
- data/webpack/ForemanTasks/Components/TasksTable/Components/ConfirmModal/__test__/ConfirmModalSelectors.test.js +54 -0
- data/webpack/ForemanTasks/Components/TasksTable/Components/ConfirmModal/__test__/__snapshots__/ConfirmModal.test.js.snap +41 -0
- data/webpack/ForemanTasks/Components/TasksTable/Components/ConfirmModal/__test__/__snapshots__/ConfirmModalReducer.test.js.snap +19 -0
- data/webpack/ForemanTasks/Components/TasksTable/Components/ConfirmModal/__test__/__snapshots__/ConfirmModalSelectors.test.js.snap +30 -0
- data/webpack/ForemanTasks/Components/TasksTable/Components/ConfirmModal/index.js +29 -0
- data/webpack/ForemanTasks/Components/TasksTable/Components/__test__/ActionSelectButton.test.js +1 -0
- data/webpack/ForemanTasks/Components/TasksTable/Components/__test__/__snapshots__/ActionSelectButton.test.js.snap +11 -0
- data/webpack/ForemanTasks/Components/TasksTable/TasksBulkActions.js +113 -30
- data/webpack/ForemanTasks/Components/TasksTable/TasksTable.js +13 -9
- data/webpack/ForemanTasks/Components/TasksTable/TasksTableActions.js +23 -63
- data/webpack/ForemanTasks/Components/TasksTable/TasksTableConstants.js +10 -12
- data/webpack/ForemanTasks/Components/TasksTable/TasksTablePage.js +24 -94
- data/webpack/ForemanTasks/Components/TasksTable/TasksTableSchema.js +2 -2
- data/webpack/ForemanTasks/Components/TasksTable/TasksTableSelectors.js +7 -4
- data/webpack/ForemanTasks/Components/TasksTable/__tests__/TasksBulkActions.test.js +35 -0
- data/webpack/ForemanTasks/Components/TasksTable/__tests__/TasksTable.fixtures.js +2 -12
- data/webpack/ForemanTasks/Components/TasksTable/__tests__/TasksTableActions.test.js +22 -26
- data/webpack/ForemanTasks/Components/TasksTable/__tests__/__snapshots__/SubTasksPage.test.js.snap +2 -14
- data/webpack/ForemanTasks/Components/TasksTable/__tests__/__snapshots__/TasksBulkActions.test.js.snap +107 -0
- data/webpack/ForemanTasks/Components/TasksTable/__tests__/__snapshots__/TasksIndexPage.test.js.snap +2 -14
- data/webpack/ForemanTasks/Components/TasksTable/__tests__/__snapshots__/TasksTableActions.test.js.snap +17 -124
- data/webpack/ForemanTasks/Components/TasksTable/__tests__/__snapshots__/TasksTablePage.test.js.snap +24 -128
- data/webpack/ForemanTasks/Components/TasksTable/index.js +2 -2
- data/webpack/ForemanTasks/Components/common/ActionButtons/ActionButton.js +47 -19
- data/webpack/ForemanTasks/Components/common/ActionButtons/ActionButton.test.js +61 -14
- data/webpack/ForemanTasks/Components/common/ActionButtons/__snapshots__/ActionButton.test.js.snap +80 -21
- data/webpack/ForemanTasks/Components/common/ClickConfirmation/ClickConfirmation.scss +9 -0
- data/webpack/ForemanTasks/Components/common/ClickConfirmation/ClickConfirmation.test.js +44 -0
- data/webpack/ForemanTasks/Components/common/ClickConfirmation/__snapshots__/ClickConfirmation.test.js.snap +52 -0
- data/webpack/ForemanTasks/Components/common/ClickConfirmation/index.js +59 -66
- data/webpack/ForemanTasks/Components/common/{ToastTypesConstants.js → ToastsHelpers/ToastTypesConstants.js} +0 -0
- data/webpack/ForemanTasks/Components/common/ToastsHelpers/index.js +15 -0
- data/webpack/ForemanTasks/ForemanTasksReducers.js +2 -0
- data/webpack/ForemanTasks/Routes/ForemanTasksRoutes.test.js +2 -1
- data/webpack/__mocks__/foremanReact/components/ForemanModal/ForemanModalHooks.js +2 -2
- data/webpack/__mocks__/foremanReact/components/ForemanModal/index.js +17 -3
- data/webpack/__mocks__/foremanReact/components/common/ActionButtons/ActionButtons.js +3 -0
- metadata +32 -22
- data/db/migrate/20200611090846_add_task_lock_index_on_resource_type_and_task_id.rb +0 -9
- data/lib/foreman_tasks/tasks/dynflow.rake +0 -6
- data/webpack/ForemanTasks/Components/TasksTable/Components/CancelConfirm.js +0 -53
- data/webpack/ForemanTasks/Components/TasksTable/Components/ConfirmationModals.js +0 -56
- data/webpack/ForemanTasks/Components/TasksTable/Components/ResumeConfirm.js +0 -52
- data/webpack/ForemanTasks/Components/TasksTable/Components/__test__/CancelConfirm.test.js +0 -26
- data/webpack/ForemanTasks/Components/TasksTable/Components/__test__/ConfirmationModals.test.js +0 -24
- data/webpack/ForemanTasks/Components/TasksTable/Components/__test__/ResumeConfirm.test.js +0 -26
- data/webpack/ForemanTasks/Components/TasksTable/Components/__test__/__snapshots__/CancelConfirm.test.js.snap +0 -65
- data/webpack/ForemanTasks/Components/TasksTable/Components/__test__/__snapshots__/ConfirmationModals.test.js.snap +0 -30
- data/webpack/ForemanTasks/Components/TasksTable/Components/__test__/__snapshots__/ResumeConfirm.test.js.snap +0 -63
- data/webpack/ForemanTasks/Components/common/ActionButtons/CancelButton.js +0 -23
- data/webpack/ForemanTasks/Components/common/ActionButtons/CancelButton.test.js +0 -26
- data/webpack/ForemanTasks/Components/common/ActionButtons/ResumeButton.js +0 -23
- data/webpack/ForemanTasks/Components/common/ActionButtons/ResumeButton.test.js +0 -27
- data/webpack/ForemanTasks/Components/common/ActionButtons/__snapshots__/CancelButton.test.js.snap +0 -15
- data/webpack/ForemanTasks/Components/common/ActionButtons/__snapshots__/ResumeButton.test.js.snap +0 -15
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: b64fbe722db23184eb2bc9db457a71ed09402fc404bed3aa0448c0f30deff8f7
|
|
4
|
+
data.tar.gz: 39afeebd07ee4012eb1bd9435d5d72400ef56582bb29a6f097c7f1b440cbaedc
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 03a87fdc09be2d0a66995b2ee1abcf053c16c179d616a1b7bb680c15241aa5c58485512fdfa6452e8aba1dec7016bca350ad291709c967a4e8ad8ae917e120aa
|
|
7
|
+
data.tar.gz: 3ae631a58bb8de68e6a8b4dac32cbf143204f99476701464a7eda552f60bd1fa93518226eaae0b6da9e18d14bfd83c5d14c3484e6a527bf26b1c4e0228ad5458
|
|
@@ -141,6 +141,34 @@ module ForemanTasks
|
|
|
141
141
|
}
|
|
142
142
|
end
|
|
143
143
|
|
|
144
|
+
api :POST, '/tasks/bulk_stop', N_('Stop all stoppable tasks')
|
|
145
|
+
param :search, String, :desc => N_('Stop tasks matching search string')
|
|
146
|
+
param :task_ids, Array, :desc => N_('Stop specific tasks by ID')
|
|
147
|
+
def bulk_stop
|
|
148
|
+
if params[:search].nil? && params[:task_ids].nil?
|
|
149
|
+
raise BadRequest, _('Please provide at least one of search or task_ids parameters in the request')
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
filtered_scope = bulk_scope
|
|
153
|
+
total_length = filtered_scope.count
|
|
154
|
+
to_stop = filtered_scope.where.not(state: :stopped)
|
|
155
|
+
to_stop_length = to_stop.count
|
|
156
|
+
skipped_length = total_length - to_stop_length
|
|
157
|
+
|
|
158
|
+
to_stop.find_each { |task| task.update(state: :stopped) }
|
|
159
|
+
|
|
160
|
+
if params[:search]
|
|
161
|
+
notification = UINotifications::Tasks::TaskBulkStop.new(filtered_scope.first, to_stop_length, skipped_length)
|
|
162
|
+
notification.deliver!
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
render :json => {
|
|
166
|
+
total: total_length,
|
|
167
|
+
stopped_length: to_stop_length,
|
|
168
|
+
skipped_length: skipped_length
|
|
169
|
+
}
|
|
170
|
+
end
|
|
171
|
+
|
|
144
172
|
api :GET, '/tasks', N_('List tasks')
|
|
145
173
|
param :search, String, :desc => N_('Search string')
|
|
146
174
|
param :page, :number, :desc => N_('Page number, starting at 1')
|
|
@@ -291,7 +319,7 @@ module ForemanTasks
|
|
|
291
319
|
case params[:action]
|
|
292
320
|
when 'bulk_search', 'summary', 'details', 'sub_tasks'
|
|
293
321
|
:view
|
|
294
|
-
when 'bulk_resume', 'bulk_cancel'
|
|
322
|
+
when 'bulk_resume', 'bulk_cancel', 'bulk_stop'
|
|
295
323
|
:edit
|
|
296
324
|
else
|
|
297
325
|
super
|
|
@@ -3,8 +3,6 @@ module ForemanTasks
|
|
|
3
3
|
include Foreman::Controller::AutoCompleteSearch
|
|
4
4
|
include Foreman::Controller::CsvResponder
|
|
5
5
|
|
|
6
|
-
before_action :restrict_dangerous_actions, :only => [:unlock, :force_unlock]
|
|
7
|
-
|
|
8
6
|
def show
|
|
9
7
|
@task = resource_base.find(params[:id])
|
|
10
8
|
render :layout => !request.xhr?
|
|
@@ -72,19 +70,17 @@ module ForemanTasks
|
|
|
72
70
|
if task.paused?
|
|
73
71
|
task.state = :stopped
|
|
74
72
|
task.save!
|
|
75
|
-
|
|
73
|
+
render json: { statusText: 'OK' }
|
|
76
74
|
else
|
|
77
|
-
|
|
75
|
+
render json: {}, status: :bad_request
|
|
78
76
|
end
|
|
79
|
-
redirect_back(:fallback_location => foreman_tasks_task_path(task))
|
|
80
77
|
end
|
|
81
78
|
|
|
82
79
|
def force_unlock
|
|
83
80
|
task = find_dynflow_task
|
|
84
81
|
task.state = :stopped
|
|
85
82
|
task.save!
|
|
86
|
-
|
|
87
|
-
redirect_back(:fallback_location => foreman_tasks_task_path(task))
|
|
83
|
+
render json: { statusText: 'OK' }
|
|
88
84
|
end
|
|
89
85
|
|
|
90
86
|
# we need do this to make the Foreman helpers working properly
|
|
@@ -103,10 +99,6 @@ module ForemanTasks
|
|
|
103
99
|
csv_response(@tasks, [:id, :action, :state, :result, 'started_at.in_time_zone', 'ended_at.in_time_zone', :username], ['Id', 'Action', 'State', 'Result', 'Started At', 'Ended At', 'User'])
|
|
104
100
|
end
|
|
105
101
|
|
|
106
|
-
def restrict_dangerous_actions
|
|
107
|
-
render_403 unless Setting['dynflow_allow_dangerous_actions']
|
|
108
|
-
end
|
|
109
|
-
|
|
110
102
|
def controller_permission
|
|
111
103
|
'foreman_tasks'
|
|
112
104
|
end
|
|
@@ -70,6 +70,10 @@ module ForemanTasks
|
|
|
70
70
|
end)
|
|
71
71
|
scope :for_action_types, (->(action_types) { where('foreman_tasks_tasks.label IN (?)', Array(action_types)) })
|
|
72
72
|
|
|
73
|
+
class Jail < Safemode::Jail
|
|
74
|
+
allow :started_at, :ended_at, :result, :state, :label, :main_action
|
|
75
|
+
end
|
|
76
|
+
|
|
73
77
|
def input
|
|
74
78
|
{}
|
|
75
79
|
end
|
|
@@ -2,7 +2,6 @@ class Setting::ForemanTasks < Setting
|
|
|
2
2
|
def self.default_settings
|
|
3
3
|
[
|
|
4
4
|
set('foreman_tasks_sync_task_timeout', N_('Number of seconds to wait for synchronous task to finish.'), 120),
|
|
5
|
-
set('dynflow_allow_dangerous_actions', N_('Allow unlocking actions which can have dangerous consequences.'), false),
|
|
6
5
|
set('dynflow_enable_console', N_('Enable the dynflow console (/foreman_tasks/dynflow) for debugging'), true),
|
|
7
6
|
set('dynflow_console_require_auth', N_('Require user to be authenticated as user with admin rights when accessing dynflow console'), true),
|
|
8
7
|
set('foreman_tasks_proxy_action_retry_count', N_('Number of attempts to start a task on the smart proxy before failing'), 4),
|
|
@@ -24,6 +23,7 @@ class Setting::ForemanTasks < Setting
|
|
|
24
23
|
|
|
25
24
|
def self.load_defaults
|
|
26
25
|
Setting::BLANK_ATTRS.push('foreman_tasks_troubleshooting_url')
|
|
26
|
+
Setting::NONZERO_ATTRS.push('foreman_tasks_polling_multiplier')
|
|
27
27
|
super
|
|
28
28
|
end
|
|
29
29
|
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
module UINotifications
|
|
2
|
+
module Tasks
|
|
3
|
+
class TaskBulkStop < ::UINotifications::Base
|
|
4
|
+
def initialize(task, stopped_length, skipped_length)
|
|
5
|
+
@subject = task
|
|
6
|
+
@stopped_length = stopped_length
|
|
7
|
+
@skipped_length = skipped_length
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def create
|
|
11
|
+
Notification.create!(
|
|
12
|
+
initiator: initiator,
|
|
13
|
+
audience: audience,
|
|
14
|
+
subject: subject,
|
|
15
|
+
notification_blueprint: blueprint,
|
|
16
|
+
message: message,
|
|
17
|
+
notification_recipients: [NotificationRecipient.create(:user => User.current)]
|
|
18
|
+
)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def audience
|
|
22
|
+
Notification::AUDIENCE_GLOBAL
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def message
|
|
26
|
+
('%{stopped} Tasks were stopped. %{skipped} Tasks were already stopped. ' %
|
|
27
|
+
{ stopped: @stopped_length,
|
|
28
|
+
skipped: @skipped_length })
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def blueprint
|
|
32
|
+
@blueprint ||= NotificationBlueprint.find_by(name: 'tasks_bulk_stop')
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -9,7 +9,6 @@ node(:failed_steps) { @task.input_output_failed_steps }
|
|
|
9
9
|
node(:running_steps) { @task.input_output_running_steps }
|
|
10
10
|
node(:help) { troubleshooting_info_text }
|
|
11
11
|
node(:has_sub_tasks) { @task.sub_tasks.any? }
|
|
12
|
-
node(:allowDangerousActions) { Setting['dynflow_allow_dangerous_actions'] }
|
|
13
12
|
node(:locks) do
|
|
14
13
|
@task.locks.map do |lock|
|
|
15
14
|
{ name: lock.name, exclusive: lock.exclusive, resource_type: lock.resource_type, resource_id: lock.resource_id }
|
data/config/routes.rb
CHANGED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
class RenameBookmarksController < ActiveRecord::Migration[5.2]
|
|
2
|
+
def up
|
|
3
|
+
original_controller = 'foreman_tasks_tasks'
|
|
4
|
+
original_bookmarks = Bookmark.where(controller: original_controller)
|
|
5
|
+
original_bookmarks_names = Hash[original_bookmarks.pluck(:name, :id)]
|
|
6
|
+
|
|
7
|
+
new_controller = 'foreman_tasks/tasks'
|
|
8
|
+
new_bookmarks = Bookmark.where(controller: new_controller)
|
|
9
|
+
new_bookmarks.find_each do |new_bookmark|
|
|
10
|
+
name = new_bookmark.name
|
|
11
|
+
is_name_taken = original_bookmarks_names.key? name
|
|
12
|
+
|
|
13
|
+
if is_name_taken
|
|
14
|
+
original_bookmark = original_bookmarks.find(original_bookmarks_names[name])
|
|
15
|
+
is_duplicated = original_bookmark.query == new_bookmark.query &&
|
|
16
|
+
original_bookmark.owner_id == new_bookmark.owner_id &&
|
|
17
|
+
original_bookmark.owner_type == new_bookmark.owner_type &&
|
|
18
|
+
original_bookmark.public == new_bookmark.public
|
|
19
|
+
|
|
20
|
+
if is_duplicated
|
|
21
|
+
original_bookmark.destroy
|
|
22
|
+
else
|
|
23
|
+
modified_name = "#{name}_#{generate_token}"
|
|
24
|
+
original_bookmark.update(name: modified_name)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
# Revert to the original controller name
|
|
28
|
+
new_bookmark.update(controller: original_controller)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def generate_token
|
|
33
|
+
SecureRandom.base64(5).gsub(/[^0-9a-z ]/i, '')
|
|
34
|
+
end
|
|
35
|
+
end
|
data/lib/foreman_tasks/engine.rb
CHANGED
|
@@ -53,7 +53,7 @@ module ForemanTasks
|
|
|
53
53
|
:'foreman_tasks/react' => [:index],
|
|
54
54
|
:'foreman_tasks/api/tasks' => [:bulk_search, :show, :index, :summary, :summary_sub_tasks, :details, :sub_tasks] }, :resource_type => ForemanTasks::Task.name
|
|
55
55
|
permission :edit_foreman_tasks, { :'foreman_tasks/tasks' => [:resume, :unlock, :force_unlock, :cancel_step, :cancel, :abort],
|
|
56
|
-
:'foreman_tasks/api/tasks' => [:bulk_resume, :bulk_cancel] }, :resource_type => ForemanTasks::Task.name
|
|
56
|
+
:'foreman_tasks/api/tasks' => [:bulk_resume, :bulk_cancel, :bulk_stop] }, :resource_type => ForemanTasks::Task.name
|
|
57
57
|
|
|
58
58
|
permission :create_recurring_logics, {}, :resource_type => ForemanTasks::RecurringLogic.name
|
|
59
59
|
|
|
@@ -14,7 +14,7 @@ namespace :foreman_tasks do
|
|
|
14
14
|
If TASK_SEARCH is set then AFTER, STATES can be set and it's used for cleanup. If TASK_SEARCH is not set then
|
|
15
15
|
the cleanup respects the configuration file and setting AFTER or STATES will throw exception.
|
|
16
16
|
DESC
|
|
17
|
-
task :run =>
|
|
17
|
+
task :run => 'environment' do
|
|
18
18
|
options = {}
|
|
19
19
|
|
|
20
20
|
options[:filter] = ENV['TASK_SEARCH'] if ENV['TASK_SEARCH']
|
|
@@ -38,7 +38,7 @@ namespace :foreman_tasks do
|
|
|
38
38
|
end
|
|
39
39
|
|
|
40
40
|
desc 'Show the current configuration for auto-cleanup'
|
|
41
|
-
task :config =>
|
|
41
|
+
task :config => 'environment' do
|
|
42
42
|
if ForemanTasks::Cleaner.cleanup_settings[:after]
|
|
43
43
|
puts _('The tasks will be deleted after %{after}') % { :after => ForemanTasks::Cleaner.cleanup_settings[:after] }
|
|
44
44
|
else
|
|
@@ -19,7 +19,7 @@ namespace :foreman_tasks do
|
|
|
19
19
|
all unsuccessful tasks in the past 60 days. The default TASK_FORMAT is html
|
|
20
20
|
which requires a tar.gz file extension.
|
|
21
21
|
DESC
|
|
22
|
-
task :export_tasks =>
|
|
22
|
+
task :export_tasks => :environment do
|
|
23
23
|
deprecated_options = { :tasks => 'TASK_SEARCH',
|
|
24
24
|
:days => 'TASK_DAYS',
|
|
25
25
|
:export => 'TASK_FILE' }
|
data/locale/action_names.rb
CHANGED
data/locale/en/foreman_tasks.po
CHANGED
|
@@ -17,10 +17,13 @@ msgstr ""
|
|
|
17
17
|
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
|
18
18
|
"\n"
|
|
19
19
|
|
|
20
|
-
msgid "
|
|
20
|
+
msgid "${taskReload ? 'Stop' : 'Start'} auto-reloading"
|
|
21
21
|
msgstr ""
|
|
22
22
|
|
|
23
|
-
msgid "%s
|
|
23
|
+
msgid "%(last)s Last %(time)s"
|
|
24
|
+
msgstr ""
|
|
25
|
+
|
|
26
|
+
msgid "%(older)s Older %(time)s"
|
|
24
27
|
msgstr ""
|
|
25
28
|
|
|
26
29
|
msgid "%s is not valid format of cron line"
|
|
@@ -38,7 +41,10 @@ msgstr ""
|
|
|
38
41
|
msgid "%{value} is wrong format"
|
|
39
42
|
msgstr ""
|
|
40
43
|
|
|
41
|
-
msgid "
|
|
44
|
+
msgid "12h"
|
|
45
|
+
msgstr ""
|
|
46
|
+
|
|
47
|
+
msgid "24h"
|
|
42
48
|
msgstr ""
|
|
43
49
|
|
|
44
50
|
msgid ":after setting in tasks cleanup section is deprecated, use :after in :rules section to set the value. to cleanup rules"
|
|
@@ -56,6 +62,12 @@ msgstr ""
|
|
|
56
62
|
msgid "Active"
|
|
57
63
|
msgstr ""
|
|
58
64
|
|
|
65
|
+
msgid "Active Filters:"
|
|
66
|
+
msgstr ""
|
|
67
|
+
|
|
68
|
+
msgid "All %s tasks are selected. "
|
|
69
|
+
msgstr ""
|
|
70
|
+
|
|
59
71
|
msgid "All proxies with the required feature are unavailable at the moment"
|
|
60
72
|
msgstr ""
|
|
61
73
|
|
|
@@ -72,9 +84,6 @@ msgstr ""
|
|
|
72
84
|
msgid "At"
|
|
73
85
|
msgstr ""
|
|
74
86
|
|
|
75
|
-
msgid "Auto Reload"
|
|
76
|
-
msgstr ""
|
|
77
|
-
|
|
78
87
|
msgid "Back to tasks"
|
|
79
88
|
msgstr ""
|
|
80
89
|
|
|
@@ -87,21 +96,63 @@ msgstr ""
|
|
|
87
96
|
msgid "Cancel"
|
|
88
97
|
msgstr ""
|
|
89
98
|
|
|
99
|
+
msgid "Cancel Selected"
|
|
100
|
+
msgstr ""
|
|
101
|
+
|
|
102
|
+
msgid "Cancel Selected Tasks"
|
|
103
|
+
msgstr ""
|
|
104
|
+
|
|
105
|
+
msgid "Cancel all cancellable tasks"
|
|
106
|
+
msgstr ""
|
|
107
|
+
|
|
90
108
|
msgid "Cancel enforced: the task might be still running on the proxy"
|
|
91
109
|
msgstr ""
|
|
92
110
|
|
|
93
111
|
msgid "Cancel recurring logic"
|
|
94
112
|
msgstr ""
|
|
95
113
|
|
|
114
|
+
msgid "Cancel selected tasks"
|
|
115
|
+
msgstr ""
|
|
116
|
+
|
|
117
|
+
msgid "Cancel specific tasks by ID"
|
|
118
|
+
msgstr ""
|
|
119
|
+
|
|
120
|
+
msgid "Cancel tasks matching search string"
|
|
121
|
+
msgstr ""
|
|
122
|
+
|
|
123
|
+
msgid "Canceling selected tasks, this might take a while"
|
|
124
|
+
msgstr ""
|
|
125
|
+
|
|
96
126
|
msgid "Cancelled"
|
|
97
127
|
msgstr ""
|
|
98
128
|
|
|
129
|
+
msgid "Cannot cancel tasks at the moment"
|
|
130
|
+
msgstr ""
|
|
131
|
+
|
|
132
|
+
msgid "Cannot resume tasks at the moment"
|
|
133
|
+
msgstr ""
|
|
134
|
+
|
|
99
135
|
msgid "Cannot update a cancelled Recurring Logic."
|
|
100
136
|
msgstr ""
|
|
101
137
|
|
|
102
138
|
msgid "Changing request id %{request_id} to saved id %{saved_id}"
|
|
103
139
|
msgstr ""
|
|
104
140
|
|
|
141
|
+
msgid "Clear All Filters"
|
|
142
|
+
msgstr ""
|
|
143
|
+
|
|
144
|
+
msgid "Clear Cancelled"
|
|
145
|
+
msgstr ""
|
|
146
|
+
|
|
147
|
+
msgid "Complete"
|
|
148
|
+
msgstr ""
|
|
149
|
+
|
|
150
|
+
msgid "Conflicts with tasks:"
|
|
151
|
+
msgstr ""
|
|
152
|
+
|
|
153
|
+
msgid "Could not receive data: ${error && error.message}"
|
|
154
|
+
msgstr ""
|
|
155
|
+
|
|
105
156
|
msgid "Cron line"
|
|
106
157
|
msgstr ""
|
|
107
158
|
|
|
@@ -123,9 +174,15 @@ msgstr ""
|
|
|
123
174
|
msgid "Delayed"
|
|
124
175
|
msgstr ""
|
|
125
176
|
|
|
177
|
+
msgid "Delete recurring logics by search query"
|
|
178
|
+
msgstr ""
|
|
179
|
+
|
|
126
180
|
msgid "Details"
|
|
127
181
|
msgstr ""
|
|
128
182
|
|
|
183
|
+
msgid "Details of %s task"
|
|
184
|
+
msgstr ""
|
|
185
|
+
|
|
129
186
|
msgid "Disable"
|
|
130
187
|
msgstr ""
|
|
131
188
|
|
|
@@ -147,9 +204,6 @@ msgstr ""
|
|
|
147
204
|
msgid "Enable the dynflow console (/foreman_tasks/dynflow) for debugging"
|
|
148
205
|
msgstr ""
|
|
149
206
|
|
|
150
|
-
msgid "Ended at"
|
|
151
|
-
msgstr ""
|
|
152
|
-
|
|
153
207
|
msgid "Ends"
|
|
154
208
|
msgstr ""
|
|
155
209
|
|
|
@@ -159,6 +213,9 @@ msgstr ""
|
|
|
159
213
|
msgid "Errors"
|
|
160
214
|
msgstr ""
|
|
161
215
|
|
|
216
|
+
msgid "Errors:"
|
|
217
|
+
msgstr ""
|
|
218
|
+
|
|
162
219
|
msgid "Event delivered by request %{request_id}"
|
|
163
220
|
msgstr ""
|
|
164
221
|
|
|
@@ -171,7 +228,7 @@ msgstr ""
|
|
|
171
228
|
msgid "Execution plan data not available "
|
|
172
229
|
msgstr ""
|
|
173
230
|
|
|
174
|
-
msgid "
|
|
231
|
+
msgid "Export All"
|
|
175
232
|
msgstr ""
|
|
176
233
|
|
|
177
234
|
msgid "External Id"
|
|
@@ -204,9 +261,6 @@ msgstr ""
|
|
|
204
261
|
msgid "How to order the sorted results (e.g. ASC for ascending)"
|
|
205
262
|
msgstr ""
|
|
206
263
|
|
|
207
|
-
msgid "I understand that this may cause harm and have working database backups of all backend services."
|
|
208
|
-
msgstr ""
|
|
209
|
-
|
|
210
264
|
msgid "ID"
|
|
211
265
|
msgstr ""
|
|
212
266
|
|
|
@@ -246,6 +300,9 @@ msgstr ""
|
|
|
246
300
|
msgid "Latest Warning/Error Tasks"
|
|
247
301
|
msgstr ""
|
|
248
302
|
|
|
303
|
+
msgid "Less than a second"
|
|
304
|
+
msgstr ""
|
|
305
|
+
|
|
249
306
|
msgid "List of tasks"
|
|
250
307
|
msgstr ""
|
|
251
308
|
|
|
@@ -261,6 +318,9 @@ msgstr ""
|
|
|
261
318
|
msgid "Mon"
|
|
262
319
|
msgstr ""
|
|
263
320
|
|
|
321
|
+
msgid "More than"
|
|
322
|
+
msgstr ""
|
|
323
|
+
|
|
264
324
|
msgid "N/A"
|
|
265
325
|
msgstr ""
|
|
266
326
|
|
|
@@ -273,6 +333,12 @@ msgstr ""
|
|
|
273
333
|
msgid "Next occurrence"
|
|
274
334
|
msgstr ""
|
|
275
335
|
|
|
336
|
+
msgid "No"
|
|
337
|
+
msgstr ""
|
|
338
|
+
|
|
339
|
+
msgid "No Tasks"
|
|
340
|
+
msgstr ""
|
|
341
|
+
|
|
276
342
|
msgid "No errors"
|
|
277
343
|
msgstr ""
|
|
278
344
|
|
|
@@ -282,12 +348,21 @@ msgstr ""
|
|
|
282
348
|
msgid "No running steps"
|
|
283
349
|
msgstr ""
|
|
284
350
|
|
|
351
|
+
msgid "No start or end dates"
|
|
352
|
+
msgstr ""
|
|
353
|
+
|
|
285
354
|
msgid "No task could be started"
|
|
286
355
|
msgstr ""
|
|
287
356
|
|
|
288
357
|
msgid "No. of Tasks"
|
|
289
358
|
msgstr ""
|
|
290
359
|
|
|
360
|
+
msgid "Not all the selected tasks can be cancelled"
|
|
361
|
+
msgstr ""
|
|
362
|
+
|
|
363
|
+
msgid "Not all the selected tasks can be resumed"
|
|
364
|
+
msgstr ""
|
|
365
|
+
|
|
291
366
|
msgid "Number of attempts to start a task on the smart proxy before failing"
|
|
292
367
|
msgstr ""
|
|
293
368
|
|
|
@@ -304,15 +379,39 @@ msgstr ""
|
|
|
304
379
|
msgid "On"
|
|
305
380
|
msgstr ""
|
|
306
381
|
|
|
382
|
+
msgid "Operation"
|
|
383
|
+
msgstr ""
|
|
384
|
+
|
|
307
385
|
msgid "Output"
|
|
308
386
|
msgstr ""
|
|
309
387
|
|
|
388
|
+
msgid "Output:"
|
|
389
|
+
msgstr ""
|
|
390
|
+
|
|
310
391
|
msgid "Page number, starting at 1"
|
|
311
392
|
msgstr ""
|
|
312
393
|
|
|
313
394
|
msgid "Parent task"
|
|
314
395
|
msgstr ""
|
|
315
396
|
|
|
397
|
+
msgid "Paused"
|
|
398
|
+
msgstr ""
|
|
399
|
+
|
|
400
|
+
msgid "Please inspect their state, fix their errors and resume them."
|
|
401
|
+
msgstr ""
|
|
402
|
+
|
|
403
|
+
msgid "Please provide a search parameter in the request"
|
|
404
|
+
msgstr ""
|
|
405
|
+
|
|
406
|
+
msgid "Please provide at least one of search or task_ids parameters in the request"
|
|
407
|
+
msgstr ""
|
|
408
|
+
|
|
409
|
+
msgid "Polling intervals multiplier"
|
|
410
|
+
msgstr ""
|
|
411
|
+
|
|
412
|
+
msgid "Polling multiplier which is used to multiply the default polling intervals. This can be used to prevent polling too frequently for long running tasks."
|
|
413
|
+
msgstr ""
|
|
414
|
+
|
|
316
415
|
msgid "Proxy task gone missing from the smart proxy"
|
|
317
416
|
msgstr ""
|
|
318
417
|
|
|
@@ -334,9 +433,6 @@ msgstr ""
|
|
|
334
433
|
msgid "Recurring logics"
|
|
335
434
|
msgstr ""
|
|
336
435
|
|
|
337
|
-
msgid "Remote action:"
|
|
338
|
-
msgstr ""
|
|
339
|
-
|
|
340
436
|
msgid "Repeat N times"
|
|
341
437
|
msgstr ""
|
|
342
438
|
|
|
@@ -349,10 +445,13 @@ msgstr ""
|
|
|
349
445
|
msgid "Require user to be authenticated as user with admin rights when accessing dynflow console"
|
|
350
446
|
msgstr ""
|
|
351
447
|
|
|
352
|
-
msgid "
|
|
448
|
+
msgid "Required lock is already taken by other running tasks."
|
|
449
|
+
msgstr ""
|
|
450
|
+
|
|
451
|
+
msgid "Required lock: %s"
|
|
353
452
|
msgstr ""
|
|
354
453
|
|
|
355
|
-
msgid "
|
|
454
|
+
msgid "Resource search_params requires resource_type and resource_id to be specified"
|
|
356
455
|
msgstr ""
|
|
357
456
|
|
|
358
457
|
msgid "Result"
|
|
@@ -361,15 +460,30 @@ msgstr ""
|
|
|
361
460
|
msgid "Resume"
|
|
362
461
|
msgstr ""
|
|
363
462
|
|
|
463
|
+
msgid "Resume Selected"
|
|
464
|
+
msgstr ""
|
|
465
|
+
|
|
466
|
+
msgid "Resume Selected Tasks"
|
|
467
|
+
msgstr ""
|
|
468
|
+
|
|
364
469
|
msgid "Resume all paused error tasks"
|
|
365
470
|
msgstr ""
|
|
366
471
|
|
|
472
|
+
msgid "Resume selected tasks"
|
|
473
|
+
msgstr ""
|
|
474
|
+
|
|
367
475
|
msgid "Resume specific tasks by ID"
|
|
368
476
|
msgstr ""
|
|
369
477
|
|
|
370
478
|
msgid "Resume tasks matching search string"
|
|
371
479
|
msgstr ""
|
|
372
480
|
|
|
481
|
+
msgid "Resuming selected tasks, this might take a while"
|
|
482
|
+
msgstr ""
|
|
483
|
+
|
|
484
|
+
msgid "Running"
|
|
485
|
+
msgstr ""
|
|
486
|
+
|
|
373
487
|
msgid "Running Steps"
|
|
374
488
|
msgstr ""
|
|
375
489
|
|
|
@@ -382,12 +496,27 @@ msgstr ""
|
|
|
382
496
|
msgid "Schedule future execution"
|
|
383
497
|
msgstr ""
|
|
384
498
|
|
|
499
|
+
msgid "Scheduled"
|
|
500
|
+
msgstr ""
|
|
501
|
+
|
|
502
|
+
msgid "Search query"
|
|
503
|
+
msgstr ""
|
|
504
|
+
|
|
385
505
|
msgid "Search string"
|
|
386
506
|
msgstr ""
|
|
387
507
|
|
|
388
508
|
msgid "See %{link} for more details on how to resolve the issue"
|
|
389
509
|
msgstr ""
|
|
390
510
|
|
|
511
|
+
msgid "Select Action"
|
|
512
|
+
msgstr ""
|
|
513
|
+
|
|
514
|
+
msgid "Select All"
|
|
515
|
+
msgstr ""
|
|
516
|
+
|
|
517
|
+
msgid "Select row"
|
|
518
|
+
msgstr ""
|
|
519
|
+
|
|
391
520
|
msgid "Send data to the task from external executor (such as smart_proxy_dynflow)"
|
|
392
521
|
msgstr ""
|
|
393
522
|
|
|
@@ -403,9 +532,6 @@ msgstr ""
|
|
|
403
532
|
msgid "Start at"
|
|
404
533
|
msgstr ""
|
|
405
534
|
|
|
406
|
-
msgid "Start auto-reloading"
|
|
407
|
-
msgstr ""
|
|
408
|
-
|
|
409
535
|
msgid "Start before"
|
|
410
536
|
msgstr ""
|
|
411
537
|
|
|
@@ -418,12 +544,15 @@ msgstr ""
|
|
|
418
544
|
msgid "State"
|
|
419
545
|
msgstr ""
|
|
420
546
|
|
|
421
|
-
msgid "
|
|
547
|
+
msgid "Stopped"
|
|
422
548
|
msgstr ""
|
|
423
549
|
|
|
424
550
|
msgid "Sub tasks"
|
|
425
551
|
msgstr ""
|
|
426
552
|
|
|
553
|
+
msgid "Sub tasks of %s"
|
|
554
|
+
msgstr ""
|
|
555
|
+
|
|
427
556
|
msgid "Sun"
|
|
428
557
|
msgstr ""
|
|
429
558
|
|
|
@@ -448,6 +577,9 @@ msgstr ""
|
|
|
448
577
|
msgid "Task search_params requires task_id to be specified"
|
|
449
578
|
msgstr ""
|
|
450
579
|
|
|
580
|
+
msgid "Task was canceled"
|
|
581
|
+
msgstr ""
|
|
582
|
+
|
|
451
583
|
msgid "Tasks"
|
|
452
584
|
msgstr ""
|
|
453
585
|
|
|
@@ -457,12 +589,6 @@ msgstr ""
|
|
|
457
589
|
msgid "The execution has to be paused."
|
|
458
590
|
msgstr ""
|
|
459
591
|
|
|
460
|
-
msgid "The execution has to be resumable."
|
|
461
|
-
msgstr ""
|
|
462
|
-
|
|
463
|
-
msgid "The execution was resumed."
|
|
464
|
-
msgstr ""
|
|
465
|
-
|
|
466
592
|
msgid "The recommended approach is to investigate the error messages below and in 'errors' tab, address the primary cause of the issue and resume the task."
|
|
467
593
|
msgstr ""
|
|
468
594
|
|
|
@@ -475,9 +601,6 @@ msgstr ""
|
|
|
475
601
|
msgid "The task cannot be aborted at the moment."
|
|
476
602
|
msgstr ""
|
|
477
603
|
|
|
478
|
-
msgid "The task cannot be cancelled at the moment."
|
|
479
|
-
msgstr ""
|
|
480
|
-
|
|
481
604
|
msgid "The task could not be started"
|
|
482
605
|
msgstr ""
|
|
483
606
|
|
|
@@ -492,7 +615,7 @@ msgid_plural "There are %{count} paused tasks in the system that need attention"
|
|
|
492
615
|
msgstr[0] ""
|
|
493
616
|
msgstr[1] ""
|
|
494
617
|
|
|
495
|
-
msgid "This will
|
|
618
|
+
msgid "This action will delete all cancelled recurring logics. Please note that this action can't be reversed."
|
|
496
619
|
msgstr ""
|
|
497
620
|
|
|
498
621
|
msgid "Thu"
|
|
@@ -501,16 +624,16 @@ msgstr ""
|
|
|
501
624
|
msgid "Time in seconds between retries"
|
|
502
625
|
msgstr ""
|
|
503
626
|
|
|
504
|
-
msgid "
|
|
627
|
+
msgid "Total"
|
|
505
628
|
msgstr ""
|
|
506
629
|
|
|
507
|
-
msgid "
|
|
630
|
+
msgid "Troubleshooting"
|
|
508
631
|
msgstr ""
|
|
509
632
|
|
|
510
|
-
msgid "Trying to
|
|
633
|
+
msgid "Trying to abort the task"
|
|
511
634
|
msgstr ""
|
|
512
635
|
|
|
513
|
-
msgid "Trying to cancel
|
|
636
|
+
msgid "Trying to cancel step %s"
|
|
514
637
|
msgstr ""
|
|
515
638
|
|
|
516
639
|
msgid "Tue"
|
|
@@ -522,6 +645,9 @@ msgstr ""
|
|
|
522
645
|
msgid "UUID of the task"
|
|
523
646
|
msgstr ""
|
|
524
647
|
|
|
648
|
+
msgid "Undo selection"
|
|
649
|
+
msgstr ""
|
|
650
|
+
|
|
525
651
|
msgid "Unlimited"
|
|
526
652
|
msgstr ""
|
|
527
653
|
|
|
@@ -534,16 +660,16 @@ msgstr ""
|
|
|
534
660
|
msgid "Url pointing to the task troubleshooting documentation. It should contain %{label} placeholder, that will be replaced with normalized task label (restricted to only alphanumeric characters)). %{version} placeholder is also available."
|
|
535
661
|
msgstr ""
|
|
536
662
|
|
|
537
|
-
msgid "User"
|
|
538
|
-
msgstr ""
|
|
539
|
-
|
|
540
663
|
msgid "User search_params requires user_id to be specified"
|
|
541
664
|
msgstr ""
|
|
542
665
|
|
|
543
666
|
msgid "Wed"
|
|
544
667
|
msgstr ""
|
|
545
668
|
|
|
546
|
-
msgid "
|
|
669
|
+
msgid "With focus on last"
|
|
670
|
+
msgstr ""
|
|
671
|
+
|
|
672
|
+
msgid "Yes"
|
|
547
673
|
msgstr ""
|
|
548
674
|
|
|
549
675
|
msgid "activation key"
|
|
@@ -555,7 +681,10 @@ msgstr ""
|
|
|
555
681
|
msgid "content view version"
|
|
556
682
|
msgstr ""
|
|
557
683
|
|
|
558
|
-
msgid "
|
|
684
|
+
msgid "could not be resumed"
|
|
685
|
+
msgstr ""
|
|
686
|
+
|
|
687
|
+
msgid "error"
|
|
559
688
|
msgstr ""
|
|
560
689
|
|
|
561
690
|
#. TRANSLATORS: this translation is referring to an option which is a time interval
|
|
@@ -578,23 +707,80 @@ msgstr ""
|
|
|
578
707
|
msgid "is month (range: 1-12)"
|
|
579
708
|
msgstr ""
|
|
580
709
|
|
|
710
|
+
msgid "last"
|
|
711
|
+
msgstr ""
|
|
712
|
+
|
|
713
|
+
msgid "mode"
|
|
714
|
+
msgstr ""
|
|
715
|
+
|
|
581
716
|
msgid "mode has to be one of %{allowed_modes}"
|
|
582
717
|
msgstr ""
|
|
583
718
|
|
|
719
|
+
msgid "older"
|
|
720
|
+
msgstr ""
|
|
721
|
+
|
|
584
722
|
msgid "organization"
|
|
585
723
|
msgstr ""
|
|
586
724
|
|
|
725
|
+
msgid "paused"
|
|
726
|
+
msgstr ""
|
|
727
|
+
|
|
587
728
|
msgid "product"
|
|
588
729
|
msgstr ""
|
|
589
730
|
|
|
590
731
|
msgid "repository"
|
|
591
732
|
msgstr ""
|
|
592
733
|
|
|
734
|
+
msgid "result"
|
|
735
|
+
msgstr ""
|
|
736
|
+
|
|
737
|
+
msgid "running"
|
|
738
|
+
msgstr ""
|
|
739
|
+
|
|
740
|
+
msgid "scheduled"
|
|
741
|
+
msgstr ""
|
|
742
|
+
|
|
743
|
+
msgid "seconds"
|
|
744
|
+
msgstr ""
|
|
745
|
+
|
|
746
|
+
msgid "state"
|
|
747
|
+
msgstr ""
|
|
748
|
+
|
|
749
|
+
msgid "stopped"
|
|
750
|
+
msgstr ""
|
|
751
|
+
|
|
752
|
+
msgid "success"
|
|
753
|
+
msgstr ""
|
|
754
|
+
|
|
593
755
|
msgid "system"
|
|
594
756
|
msgstr ""
|
|
595
757
|
|
|
758
|
+
msgid "task has to be cancellable"
|
|
759
|
+
msgstr ""
|
|
760
|
+
|
|
761
|
+
msgid "task has to be resumable"
|
|
762
|
+
msgstr ""
|
|
763
|
+
|
|
764
|
+
msgid "tasks."
|
|
765
|
+
msgstr ""
|
|
766
|
+
|
|
767
|
+
msgid "time"
|
|
768
|
+
msgstr ""
|
|
769
|
+
|
|
596
770
|
msgid "troubleshooting documentation"
|
|
597
771
|
msgstr ""
|
|
598
772
|
|
|
599
773
|
msgid "user"
|
|
600
774
|
msgstr ""
|
|
775
|
+
|
|
776
|
+
msgid "warning"
|
|
777
|
+
msgstr ""
|
|
778
|
+
|
|
779
|
+
msgid "was cancelled"
|
|
780
|
+
msgstr ""
|
|
781
|
+
|
|
782
|
+
msgid "was resumed"
|
|
783
|
+
msgstr ""
|
|
784
|
+
|
|
785
|
+
msgid "week"
|
|
786
|
+
msgstr ""
|