foreman-tasks 1.1.3 → 2.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +2 -0
- data/README.md +2 -0
- data/app/controllers/foreman_tasks/api/tasks_controller.rb +33 -1
- data/app/controllers/foreman_tasks/tasks_controller.rb +9 -14
- data/app/lib/actions/proxy_action.rb +1 -1
- data/app/models/foreman_tasks/recurring_logic.rb +3 -3
- data/app/models/foreman_tasks/task.rb +4 -0
- data/app/models/foreman_tasks/task/dynflow_task.rb +3 -1
- 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/app/views/foreman_tasks/api/tasks/show.json.rabl +2 -0
- 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/migrate/20200611090846_add_task_lock_index_on_resource_type_and_task_id.rb +1 -1
- data/db/seeds.d/30-notification_blueprints.rb +7 -0
- data/lib/foreman_tasks/engine.rb +2 -7
- data/lib/foreman_tasks/version.rb +1 -1
- data/locale/action_names.rb +1 -1
- data/locale/en/LC_MESSAGES/foreman_tasks.mo +0 -0
- data/locale/en/foreman_tasks.po +270 -54
- data/locale/foreman_tasks.pot +630 -292
- data/locale/fr/LC_MESSAGES/foreman_tasks.mo +0 -0
- data/locale/fr/foreman_tasks.po +817 -0
- data/locale/ja/LC_MESSAGES/foreman_tasks.mo +0 -0
- data/locale/ja/foreman_tasks.po +817 -0
- data/locale/zh_CN/LC_MESSAGES/foreman_tasks.mo +0 -0
- data/locale/zh_CN/foreman_tasks.po +816 -0
- data/package.json +1 -0
- data/script/npm_link_foreman_js.sh +26 -0
- data/test/unit/recurring_logic_test.rb +6 -0
- 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/RunningSteps.js +17 -3
- data/webpack/ForemanTasks/Components/TaskDetails/Components/Task.js +149 -167
- data/webpack/ForemanTasks/Components/TaskDetails/Components/__tests__/RunningSteps.test.js +8 -1
- data/webpack/ForemanTasks/Components/TaskDetails/Components/__tests__/Task.test.js +68 -3
- data/webpack/ForemanTasks/Components/TaskDetails/Components/__tests__/TaskInfo.test.js +0 -1
- data/webpack/ForemanTasks/Components/TaskDetails/Components/__tests__/__snapshots__/RunningSteps.test.js.snap +1 -1
- data/webpack/ForemanTasks/Components/TaskDetails/Components/__tests__/__snapshots__/Task.test.js.snap +124 -76
- data/webpack/ForemanTasks/Components/TaskDetails/TaskDetails.js +35 -5
- data/webpack/ForemanTasks/Components/TaskDetails/TaskDetails.scss +3 -14
- data/webpack/ForemanTasks/Components/TaskDetails/TaskDetailsActions.js +40 -16
- data/webpack/ForemanTasks/Components/TaskDetails/TaskDetailsConstants.js +3 -4
- data/webpack/ForemanTasks/Components/TaskDetails/TaskDetailsReducer.js +0 -6
- data/webpack/ForemanTasks/Components/TaskDetails/TaskDetailsSelectors.js +4 -10
- data/webpack/ForemanTasks/Components/TaskDetails/TasksDetailsHelper.js +6 -1
- data/webpack/ForemanTasks/Components/TaskDetails/__tests__/TaskDetails.fixtures.js +8 -0
- data/webpack/ForemanTasks/Components/TaskDetails/__tests__/TaskDetails.test.js +7 -1
- data/webpack/ForemanTasks/Components/TaskDetails/__tests__/TaskDetailsActions.test.js +18 -2
- data/webpack/ForemanTasks/Components/TaskDetails/__tests__/__snapshots__/TaskDetails.test.js.snap +30 -13
- data/webpack/ForemanTasks/Components/TaskDetails/__tests__/__snapshots__/TaskDetailsActions.test.js.snap +91 -0
- data/webpack/ForemanTasks/Components/TaskDetails/__tests__/integration.test.js +13 -4
- data/webpack/ForemanTasks/Components/TaskDetails/index.js +6 -8
- data/webpack/ForemanTasks/Components/TasksDashboard/TasksDashboardActions.js +1 -1
- data/webpack/ForemanTasks/Components/TasksDashboard/__tests__/TasksDashboardActions.test.js +2 -2
- 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 +46 -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 +55 -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 +32 -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 +135 -35
- data/webpack/ForemanTasks/Components/TasksTable/TasksTable.js +13 -9
- data/webpack/ForemanTasks/Components/TasksTable/TasksTableActions.js +26 -66
- data/webpack/ForemanTasks/Components/TasksTable/TasksTableConstants.js +10 -12
- data/webpack/ForemanTasks/Components/TasksTable/TasksTablePage.js +30 -96
- data/webpack/ForemanTasks/Components/TasksTable/TasksTableSchema.js +2 -2
- data/webpack/ForemanTasks/Components/TasksTable/TasksTableSelectors.js +8 -4
- data/webpack/ForemanTasks/Components/TasksTable/__tests__/TasksBulkActions.test.js +50 -2
- data/webpack/ForemanTasks/Components/TasksTable/__tests__/TasksTable.fixtures.js +3 -12
- data/webpack/ForemanTasks/Components/TasksTable/__tests__/TasksTableActions.test.js +22 -26
- data/webpack/ForemanTasks/Components/TasksTable/__tests__/TasksTablePage.test.js +2 -1
- data/webpack/ForemanTasks/Components/TasksTable/__tests__/__snapshots__/SubTasksPage.test.js.snap +3 -14
- data/webpack/ForemanTasks/Components/TasksTable/__tests__/__snapshots__/TasksBulkActions.test.js.snap +155 -0
- data/webpack/ForemanTasks/Components/TasksTable/__tests__/__snapshots__/TasksIndexPage.test.js.snap +3 -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 +63 -133
- data/webpack/ForemanTasks/Components/TasksTable/formatters/__test__/__snapshots__/actionCellFormatter.test.js.snap +1 -0
- data/webpack/ForemanTasks/Components/TasksTable/formatters/__test__/__snapshots__/selectionCellFormatter.test.js.snap +2 -0
- data/webpack/ForemanTasks/Components/TasksTable/formatters/__test__/actionCellFormatter.test.js +1 -1
- data/webpack/ForemanTasks/Components/TasksTable/formatters/__test__/selectionCellFormatter.test.js +1 -1
- data/webpack/ForemanTasks/Components/TasksTable/formatters/actionCellFormatter.js +10 -7
- data/webpack/ForemanTasks/Components/TasksTable/formatters/selectionCellFormatter.js +7 -0
- data/webpack/ForemanTasks/Components/TasksTable/index.js +2 -2
- data/webpack/ForemanTasks/Components/common/ActionButtons/ActionButton.js +55 -19
- data/webpack/ForemanTasks/Components/common/ActionButtons/ActionButton.test.js +75 -19
- data/webpack/ForemanTasks/Components/common/ActionButtons/__snapshots__/ActionButton.test.js.snap +88 -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
- data/webpack/__mocks__/foremanReact/{API.js → redux/API.js} +1 -1
- metadata +45 -25
- 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: e37924776f38fa00d98c1389b22baff43347f4f4c28c0d3848de93951b5cd1d9
|
4
|
+
data.tar.gz: 49c49253f6cd157b6c602bb1ceb5bee9b249aee207939501b60e273b4fce1734
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 53aebec3deef276e131483dc20f5ce3753a9bf8b7d64e9a443af9a0284e9749a657c97e03923034db81e1a698aa24d0de120fe3530b5768725e9a910f8b34e52
|
7
|
+
data.tar.gz: ae5931295bc54e9bfcf3b48278c52724265ddc0e902d39be2d05897f1231b5c29291810f7e638d83f0a436a6f0a414453692158ad9b93c2445db038e87872168
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -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')
|
@@ -287,11 +315,15 @@ module ForemanTasks
|
|
287
315
|
@resource_scope ||= ForemanTasks::Task.authorized("#{action_permission}_foreman_tasks")
|
288
316
|
end
|
289
317
|
|
318
|
+
def controller_permission
|
319
|
+
'foreman_tasks'
|
320
|
+
end
|
321
|
+
|
290
322
|
def action_permission
|
291
323
|
case params[:action]
|
292
324
|
when 'bulk_search', 'summary', 'details', 'sub_tasks'
|
293
325
|
:view
|
294
|
-
when 'bulk_resume', 'bulk_cancel'
|
326
|
+
when 'bulk_resume', 'bulk_cancel', 'bulk_stop'
|
295
327
|
:edit
|
296
328
|
else
|
297
329
|
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?
|
@@ -33,9 +31,12 @@ module ForemanTasks
|
|
33
31
|
|
34
32
|
def cancel_step
|
35
33
|
task = find_dynflow_task
|
36
|
-
|
37
|
-
|
38
|
-
|
34
|
+
result = ForemanTasks.dynflow.world.event(task.external_id, params[:step_id].to_i, ::Dynflow::Action::Cancellable::Cancel).wait
|
35
|
+
if result.rejected?
|
36
|
+
render json: { error: result.reason }, status: :bad_request
|
37
|
+
else
|
38
|
+
render json: { statusText: 'OK' }
|
39
|
+
end
|
39
40
|
end
|
40
41
|
|
41
42
|
def cancel
|
@@ -72,19 +73,17 @@ module ForemanTasks
|
|
72
73
|
if task.paused?
|
73
74
|
task.state = :stopped
|
74
75
|
task.save!
|
75
|
-
|
76
|
+
render json: { statusText: 'OK' }
|
76
77
|
else
|
77
|
-
|
78
|
+
render json: {}, status: :bad_request
|
78
79
|
end
|
79
|
-
redirect_back(:fallback_location => foreman_tasks_task_path(task))
|
80
80
|
end
|
81
81
|
|
82
82
|
def force_unlock
|
83
83
|
task = find_dynflow_task
|
84
84
|
task.state = :stopped
|
85
85
|
task.save!
|
86
|
-
|
87
|
-
redirect_back(:fallback_location => foreman_tasks_task_path(task))
|
86
|
+
render json: { statusText: 'OK' }
|
88
87
|
end
|
89
88
|
|
90
89
|
# we need do this to make the Foreman helpers working properly
|
@@ -103,10 +102,6 @@ module ForemanTasks
|
|
103
102
|
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
103
|
end
|
105
104
|
|
106
|
-
def restrict_dangerous_actions
|
107
|
-
render_403 unless Setting['dynflow_allow_dangerous_actions']
|
108
|
-
end
|
109
|
-
|
110
105
|
def controller_permission
|
111
106
|
'foreman_tasks'
|
112
107
|
end
|
@@ -257,7 +257,7 @@ module Actions
|
|
257
257
|
if failed_proxy_tasks.count < options[:retry_count]
|
258
258
|
suspend do |suspended_action|
|
259
259
|
@world.clock.ping suspended_action,
|
260
|
-
Time.
|
260
|
+
Time.now.getlocal + options[:retry_interval],
|
261
261
|
event
|
262
262
|
end
|
263
263
|
else
|
@@ -31,12 +31,12 @@ module ForemanTasks
|
|
31
31
|
if value
|
32
32
|
task.update!(:start_at => next_occurrence_time) if task.start_at < Time.zone.now
|
33
33
|
update(:state => 'active')
|
34
|
-
else
|
35
|
-
update(:state => 'disabled')
|
36
34
|
end
|
37
|
-
|
35
|
+
elsif value
|
38
36
|
raise RecurringLogicCancelledException
|
39
37
|
end
|
38
|
+
|
39
|
+
update(:state => 'disabled') unless value
|
40
40
|
end
|
41
41
|
|
42
42
|
def enabled?
|
@@ -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
|
@@ -46,7 +46,8 @@ module ForemanTasks
|
|
46
46
|
end
|
47
47
|
|
48
48
|
def progress
|
49
|
-
execution_plan.try(:progress) || 0
|
49
|
+
progress_raw = execution_plan.try(:progress) || 0
|
50
|
+
progress_raw.round(2)
|
50
51
|
end
|
51
52
|
|
52
53
|
def execution_plan(silence_exception = true)
|
@@ -119,6 +120,7 @@ module ForemanTasks
|
|
119
120
|
begin
|
120
121
|
f_action = f.action(execution_plan)
|
121
122
|
{
|
123
|
+
id: f_action.id,
|
122
124
|
action_class: f.action_class.name,
|
123
125
|
state: f.state,
|
124
126
|
input: f_action.input.pretty_inspect,
|
@@ -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
|
@@ -1,4 +1,4 @@
|
|
1
|
-
class AddTaskLockIndexOnResourceTypeAndTaskId < ActiveRecord::Migration[
|
1
|
+
class AddTaskLockIndexOnResourceTypeAndTaskId < ActiveRecord::Migration[6.0]
|
2
2
|
def change
|
3
3
|
add_index :foreman_tasks_locks, [:task_id, :resource_type, :resource_id], name: 'index_tasks_locks_on_task_id_resource_type_and_resource_id'
|
4
4
|
# These indexes are not needed as they can be gained from partial index lookups
|
data/lib/foreman_tasks/engine.rb
CHANGED
@@ -34,7 +34,7 @@ module ForemanTasks
|
|
34
34
|
|
35
35
|
initializer 'foreman_tasks.register_plugin', :before => :finisher_hook do |_app|
|
36
36
|
Foreman::Plugin.register :"foreman-tasks" do
|
37
|
-
requires_foreman '>= 2.
|
37
|
+
requires_foreman '>= 2.1.0'
|
38
38
|
divider :top_menu, :parent => :monitor_menu, :last => true, :caption => N_('Foreman Tasks')
|
39
39
|
menu :top_menu, :tasks,
|
40
40
|
:url_hash => { :controller => 'foreman_tasks/tasks', :action => :index },
|
@@ -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
|
|
@@ -79,11 +79,6 @@ module ForemanTasks
|
|
79
79
|
end
|
80
80
|
end
|
81
81
|
|
82
|
-
initializer 'foreman_tasks.ignore_dynflow_tables' do |_app|
|
83
|
-
# Ignore Dynflow tables when schema-dumping. Dynflow tables are handled automatically by Dynflow.
|
84
|
-
ActiveRecord::SchemaDumper.ignore_tables << /^dynflow_.*$/
|
85
|
-
end
|
86
|
-
|
87
82
|
initializer 'foreman_tasks.apipie' do
|
88
83
|
# this condition is here for compatibility reason to work with Foreman 1.4.x
|
89
84
|
if Apipie.configuration.api_controllers_matcher.is_a?(Array) &&
|
data/locale/action_names.rb
CHANGED
Binary file
|
data/locale/en/foreman_tasks.po
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
#
|
6
6
|
msgid ""
|
7
7
|
msgstr ""
|
8
|
-
"Project-Id-Version: foreman_tasks 0.
|
8
|
+
"Project-Id-Version: foreman_tasks 0.3.4\n"
|
9
9
|
"Report-Msgid-Bugs-To: \n"
|
10
10
|
"PO-Revision-Date: 2016-02-03 09:55-0500\n"
|
11
11
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
@@ -17,10 +17,16 @@ 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"
|
27
|
+
msgstr ""
|
28
|
+
|
29
|
+
msgid "%s Selected Tasks"
|
24
30
|
msgstr ""
|
25
31
|
|
26
32
|
msgid "%s is not valid format of cron line"
|
@@ -38,7 +44,10 @@ msgstr ""
|
|
38
44
|
msgid "%{value} is wrong format"
|
39
45
|
msgstr ""
|
40
46
|
|
41
|
-
msgid "
|
47
|
+
msgid "12h"
|
48
|
+
msgstr ""
|
49
|
+
|
50
|
+
msgid "24h"
|
42
51
|
msgstr ""
|
43
52
|
|
44
53
|
msgid ":after setting in tasks cleanup section is deprecated, use :after in :rules section to set the value. to cleanup rules"
|
@@ -56,13 +65,16 @@ msgstr ""
|
|
56
65
|
msgid "Active"
|
57
66
|
msgstr ""
|
58
67
|
|
59
|
-
msgid "
|
68
|
+
msgid "Active Filters:"
|
60
69
|
msgstr ""
|
61
70
|
|
62
|
-
msgid "
|
71
|
+
msgid "All %s tasks are selected. "
|
72
|
+
msgstr ""
|
73
|
+
|
74
|
+
msgid "All proxies with the required feature are unavailable at the moment"
|
63
75
|
msgstr ""
|
64
76
|
|
65
|
-
msgid "Allow
|
77
|
+
msgid "Allow triggering tasks on the smart proxy in batches"
|
66
78
|
msgstr ""
|
67
79
|
|
68
80
|
msgid "Associated resources"
|
@@ -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,69 @@ msgstr ""
|
|
87
96
|
msgid "Cancel"
|
88
97
|
msgstr ""
|
89
98
|
|
99
|
+
msgid "Cancel Selected"
|
100
|
+
msgstr ""
|
101
|
+
|
102
|
+
msgid "Cancel all cancellable tasks"
|
103
|
+
msgstr ""
|
104
|
+
|
90
105
|
msgid "Cancel enforced: the task might be still running on the proxy"
|
91
106
|
msgstr ""
|
92
107
|
|
93
108
|
msgid "Cancel recurring logic"
|
94
109
|
msgstr ""
|
95
110
|
|
111
|
+
msgid "Cancel selected tasks"
|
112
|
+
msgstr ""
|
113
|
+
|
114
|
+
msgid "Cancel specific tasks by ID"
|
115
|
+
msgstr ""
|
116
|
+
|
117
|
+
msgid "Cancel tasks matching search string"
|
118
|
+
msgstr ""
|
119
|
+
|
120
|
+
msgid "Canceling selected tasks, this might take a while"
|
121
|
+
msgstr ""
|
122
|
+
|
123
|
+
msgid "Canceling with force 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 force cancel tasks at the moment"
|
133
|
+
msgstr ""
|
134
|
+
|
135
|
+
msgid "Cannot resume tasks at the moment"
|
136
|
+
msgstr ""
|
137
|
+
|
99
138
|
msgid "Cannot update a cancelled Recurring Logic."
|
100
139
|
msgstr ""
|
101
140
|
|
102
141
|
msgid "Changing request id %{request_id} to saved id %{saved_id}"
|
103
142
|
msgstr ""
|
104
143
|
|
144
|
+
msgid "Clear All Filters"
|
145
|
+
msgstr ""
|
146
|
+
|
147
|
+
msgid "Clear Cancelled"
|
148
|
+
msgstr ""
|
149
|
+
|
150
|
+
msgid "Complete"
|
151
|
+
msgstr ""
|
152
|
+
|
153
|
+
msgid "Conflicts with tasks:"
|
154
|
+
msgstr ""
|
155
|
+
|
156
|
+
msgid "Could not cancel step."
|
157
|
+
msgstr ""
|
158
|
+
|
159
|
+
msgid "Could not receive data: ${error && error.message}"
|
160
|
+
msgstr ""
|
161
|
+
|
105
162
|
msgid "Cron line"
|
106
163
|
msgstr ""
|
107
164
|
|
@@ -123,9 +180,15 @@ msgstr ""
|
|
123
180
|
msgid "Delayed"
|
124
181
|
msgstr ""
|
125
182
|
|
183
|
+
msgid "Delete recurring logics by search query"
|
184
|
+
msgstr ""
|
185
|
+
|
126
186
|
msgid "Details"
|
127
187
|
msgstr ""
|
128
188
|
|
189
|
+
msgid "Details of %s task"
|
190
|
+
msgstr ""
|
191
|
+
|
129
192
|
msgid "Disable"
|
130
193
|
msgstr ""
|
131
194
|
|
@@ -147,9 +210,6 @@ msgstr ""
|
|
147
210
|
msgid "Enable the dynflow console (/foreman_tasks/dynflow) for debugging"
|
148
211
|
msgstr ""
|
149
212
|
|
150
|
-
msgid "Ended at"
|
151
|
-
msgstr ""
|
152
|
-
|
153
213
|
msgid "Ends"
|
154
214
|
msgstr ""
|
155
215
|
|
@@ -159,6 +219,9 @@ msgstr ""
|
|
159
219
|
msgid "Errors"
|
160
220
|
msgstr ""
|
161
221
|
|
222
|
+
msgid "Errors:"
|
223
|
+
msgstr ""
|
224
|
+
|
162
225
|
msgid "Event delivered by request %{request_id}"
|
163
226
|
msgstr ""
|
164
227
|
|
@@ -171,7 +234,7 @@ msgstr ""
|
|
171
234
|
msgid "Execution plan data not available "
|
172
235
|
msgstr ""
|
173
236
|
|
174
|
-
msgid "
|
237
|
+
msgid "Export All"
|
175
238
|
msgstr ""
|
176
239
|
|
177
240
|
msgid "External Id"
|
@@ -189,6 +252,15 @@ msgstr ""
|
|
189
252
|
msgid "Finished"
|
190
253
|
msgstr ""
|
191
254
|
|
255
|
+
msgid "Force Cancel"
|
256
|
+
msgstr ""
|
257
|
+
|
258
|
+
msgid "Force Cancel Selected"
|
259
|
+
msgstr ""
|
260
|
+
|
261
|
+
msgid "Force Cancel selected tasks"
|
262
|
+
msgstr ""
|
263
|
+
|
192
264
|
msgid "Force Unlock"
|
193
265
|
msgstr ""
|
194
266
|
|
@@ -204,9 +276,6 @@ msgstr ""
|
|
204
276
|
msgid "How to order the sorted results (e.g. ASC for ascending)"
|
205
277
|
msgstr ""
|
206
278
|
|
207
|
-
msgid "I understand that this may cause harm and have working database backups of all backend services."
|
208
|
-
msgstr ""
|
209
|
-
|
210
279
|
msgid "ID"
|
211
280
|
msgstr ""
|
212
281
|
|
@@ -246,6 +315,9 @@ msgstr ""
|
|
246
315
|
msgid "Latest Warning/Error Tasks"
|
247
316
|
msgstr ""
|
248
317
|
|
318
|
+
msgid "Less than a second"
|
319
|
+
msgstr ""
|
320
|
+
|
249
321
|
msgid "List of tasks"
|
250
322
|
msgstr ""
|
251
323
|
|
@@ -261,6 +333,9 @@ msgstr ""
|
|
261
333
|
msgid "Mon"
|
262
334
|
msgstr ""
|
263
335
|
|
336
|
+
msgid "More than"
|
337
|
+
msgstr ""
|
338
|
+
|
264
339
|
msgid "N/A"
|
265
340
|
msgstr ""
|
266
341
|
|
@@ -273,6 +348,12 @@ msgstr ""
|
|
273
348
|
msgid "Next occurrence"
|
274
349
|
msgstr ""
|
275
350
|
|
351
|
+
msgid "No"
|
352
|
+
msgstr ""
|
353
|
+
|
354
|
+
msgid "No Tasks"
|
355
|
+
msgstr ""
|
356
|
+
|
276
357
|
msgid "No errors"
|
277
358
|
msgstr ""
|
278
359
|
|
@@ -282,12 +363,21 @@ msgstr ""
|
|
282
363
|
msgid "No running steps"
|
283
364
|
msgstr ""
|
284
365
|
|
366
|
+
msgid "No start or end dates"
|
367
|
+
msgstr ""
|
368
|
+
|
285
369
|
msgid "No task could be started"
|
286
370
|
msgstr ""
|
287
371
|
|
288
372
|
msgid "No. of Tasks"
|
289
373
|
msgstr ""
|
290
374
|
|
375
|
+
msgid "Not all the selected tasks can be cancelled"
|
376
|
+
msgstr ""
|
377
|
+
|
378
|
+
msgid "Not all the selected tasks can be resumed"
|
379
|
+
msgstr ""
|
380
|
+
|
291
381
|
msgid "Number of attempts to start a task on the smart proxy before failing"
|
292
382
|
msgstr ""
|
293
383
|
|
@@ -304,15 +394,39 @@ msgstr ""
|
|
304
394
|
msgid "On"
|
305
395
|
msgstr ""
|
306
396
|
|
397
|
+
msgid "Operation"
|
398
|
+
msgstr ""
|
399
|
+
|
307
400
|
msgid "Output"
|
308
401
|
msgstr ""
|
309
402
|
|
403
|
+
msgid "Output:"
|
404
|
+
msgstr ""
|
405
|
+
|
310
406
|
msgid "Page number, starting at 1"
|
311
407
|
msgstr ""
|
312
408
|
|
313
409
|
msgid "Parent task"
|
314
410
|
msgstr ""
|
315
411
|
|
412
|
+
msgid "Paused"
|
413
|
+
msgstr ""
|
414
|
+
|
415
|
+
msgid "Please inspect their state, fix their errors and resume them."
|
416
|
+
msgstr ""
|
417
|
+
|
418
|
+
msgid "Please provide a search parameter in the request"
|
419
|
+
msgstr ""
|
420
|
+
|
421
|
+
msgid "Please provide at least one of search or task_ids parameters in the request"
|
422
|
+
msgstr ""
|
423
|
+
|
424
|
+
msgid "Polling intervals multiplier"
|
425
|
+
msgstr ""
|
426
|
+
|
427
|
+
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."
|
428
|
+
msgstr ""
|
429
|
+
|
316
430
|
msgid "Proxy task gone missing from the smart proxy"
|
317
431
|
msgstr ""
|
318
432
|
|
@@ -334,9 +448,6 @@ msgstr ""
|
|
334
448
|
msgid "Recurring logics"
|
335
449
|
msgstr ""
|
336
450
|
|
337
|
-
msgid "Remote action:"
|
338
|
-
msgstr ""
|
339
|
-
|
340
451
|
msgid "Repeat N times"
|
341
452
|
msgstr ""
|
342
453
|
|
@@ -349,10 +460,13 @@ msgstr ""
|
|
349
460
|
msgid "Require user to be authenticated as user with admin rights when accessing dynflow console"
|
350
461
|
msgstr ""
|
351
462
|
|
352
|
-
msgid "
|
463
|
+
msgid "Required lock is already taken by other running tasks."
|
464
|
+
msgstr ""
|
465
|
+
|
466
|
+
msgid "Required lock: %s"
|
353
467
|
msgstr ""
|
354
468
|
|
355
|
-
msgid "
|
469
|
+
msgid "Resource search_params requires resource_type and resource_id to be specified"
|
356
470
|
msgstr ""
|
357
471
|
|
358
472
|
msgid "Result"
|
@@ -361,15 +475,27 @@ msgstr ""
|
|
361
475
|
msgid "Resume"
|
362
476
|
msgstr ""
|
363
477
|
|
478
|
+
msgid "Resume Selected"
|
479
|
+
msgstr ""
|
480
|
+
|
364
481
|
msgid "Resume all paused error tasks"
|
365
482
|
msgstr ""
|
366
483
|
|
484
|
+
msgid "Resume selected tasks"
|
485
|
+
msgstr ""
|
486
|
+
|
367
487
|
msgid "Resume specific tasks by ID"
|
368
488
|
msgstr ""
|
369
489
|
|
370
490
|
msgid "Resume tasks matching search string"
|
371
491
|
msgstr ""
|
372
492
|
|
493
|
+
msgid "Resuming selected tasks, this might take a while"
|
494
|
+
msgstr ""
|
495
|
+
|
496
|
+
msgid "Running"
|
497
|
+
msgstr ""
|
498
|
+
|
373
499
|
msgid "Running Steps"
|
374
500
|
msgstr ""
|
375
501
|
|
@@ -382,12 +508,27 @@ msgstr ""
|
|
382
508
|
msgid "Schedule future execution"
|
383
509
|
msgstr ""
|
384
510
|
|
511
|
+
msgid "Scheduled"
|
512
|
+
msgstr ""
|
513
|
+
|
514
|
+
msgid "Search query"
|
515
|
+
msgstr ""
|
516
|
+
|
385
517
|
msgid "Search string"
|
386
518
|
msgstr ""
|
387
519
|
|
388
520
|
msgid "See %{link} for more details on how to resolve the issue"
|
389
521
|
msgstr ""
|
390
522
|
|
523
|
+
msgid "Select Action"
|
524
|
+
msgstr ""
|
525
|
+
|
526
|
+
msgid "Select All"
|
527
|
+
msgstr ""
|
528
|
+
|
529
|
+
msgid "Select row"
|
530
|
+
msgstr ""
|
531
|
+
|
391
532
|
msgid "Send data to the task from external executor (such as smart_proxy_dynflow)"
|
392
533
|
msgstr ""
|
393
534
|
|
@@ -403,9 +544,6 @@ msgstr ""
|
|
403
544
|
msgid "Start at"
|
404
545
|
msgstr ""
|
405
546
|
|
406
|
-
msgid "Start auto-reloading"
|
407
|
-
msgstr ""
|
408
|
-
|
409
547
|
msgid "Start before"
|
410
548
|
msgstr ""
|
411
549
|
|
@@ -418,12 +556,27 @@ msgstr ""
|
|
418
556
|
msgid "State"
|
419
557
|
msgstr ""
|
420
558
|
|
421
|
-
msgid "
|
559
|
+
msgid "Step Canceled"
|
560
|
+
msgstr ""
|
561
|
+
|
562
|
+
msgid "Stop all stoppable tasks"
|
563
|
+
msgstr ""
|
564
|
+
|
565
|
+
msgid "Stop specific tasks by ID"
|
566
|
+
msgstr ""
|
567
|
+
|
568
|
+
msgid "Stop tasks matching search string"
|
569
|
+
msgstr ""
|
570
|
+
|
571
|
+
msgid "Stopped"
|
422
572
|
msgstr ""
|
423
573
|
|
424
574
|
msgid "Sub tasks"
|
425
575
|
msgstr ""
|
426
576
|
|
577
|
+
msgid "Sub tasks of %s"
|
578
|
+
msgstr ""
|
579
|
+
|
427
580
|
msgid "Sun"
|
428
581
|
msgstr ""
|
429
582
|
|
@@ -439,6 +592,9 @@ msgstr ""
|
|
439
592
|
msgid "Task aborted: the task might be still running on the proxy"
|
440
593
|
msgstr ""
|
441
594
|
|
595
|
+
msgid "Task cannot be canceled"
|
596
|
+
msgstr ""
|
597
|
+
|
442
598
|
msgid "Task count"
|
443
599
|
msgstr ""
|
444
600
|
|
@@ -448,19 +604,13 @@ msgstr ""
|
|
448
604
|
msgid "Task search_params requires task_id to be specified"
|
449
605
|
msgstr ""
|
450
606
|
|
451
|
-
msgid "
|
607
|
+
msgid "Task was canceled"
|
452
608
|
msgstr ""
|
453
609
|
|
454
|
-
msgid "
|
455
|
-
msgstr ""
|
456
|
-
|
457
|
-
msgid "The execution has to be paused."
|
458
|
-
msgstr ""
|
459
|
-
|
460
|
-
msgid "The execution has to be resumable."
|
610
|
+
msgid "Tasks"
|
461
611
|
msgstr ""
|
462
612
|
|
463
|
-
msgid "The execution
|
613
|
+
msgid "The ID of the step inside the execution plan to send the event to"
|
464
614
|
msgstr ""
|
465
615
|
|
466
616
|
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."
|
@@ -475,24 +625,15 @@ msgstr ""
|
|
475
625
|
msgid "The task cannot be aborted at the moment."
|
476
626
|
msgstr ""
|
477
627
|
|
478
|
-
msgid "The task cannot be cancelled at the moment."
|
479
|
-
msgstr ""
|
480
|
-
|
481
628
|
msgid "The task could not be started"
|
482
629
|
msgstr ""
|
483
630
|
|
484
|
-
msgid "The task resources were unlocked with force."
|
485
|
-
msgstr ""
|
486
|
-
|
487
|
-
msgid "The task resources were unlocked."
|
488
|
-
msgstr ""
|
489
|
-
|
490
631
|
msgid "There is %{count} paused task in the system that need attention"
|
491
632
|
msgid_plural "There are %{count} paused tasks in the system that need attention"
|
492
633
|
msgstr[0] ""
|
493
634
|
msgstr[1] ""
|
494
635
|
|
495
|
-
msgid "This will
|
636
|
+
msgid "This action will delete all cancelled recurring logics. Please note that this action can't be reversed."
|
496
637
|
msgstr ""
|
497
638
|
|
498
639
|
msgid "Thu"
|
@@ -501,16 +642,16 @@ msgstr ""
|
|
501
642
|
msgid "Time in seconds between retries"
|
502
643
|
msgstr ""
|
503
644
|
|
504
|
-
msgid "
|
645
|
+
msgid "Total"
|
505
646
|
msgstr ""
|
506
647
|
|
507
|
-
msgid "
|
648
|
+
msgid "Troubleshooting"
|
508
649
|
msgstr ""
|
509
650
|
|
510
|
-
msgid "Trying to
|
651
|
+
msgid "Trying to abort the task"
|
511
652
|
msgstr ""
|
512
653
|
|
513
|
-
msgid "Trying to cancel
|
654
|
+
msgid "Trying to cancel step"
|
514
655
|
msgstr ""
|
515
656
|
|
516
657
|
msgid "Tue"
|
@@ -522,6 +663,9 @@ msgstr ""
|
|
522
663
|
msgid "UUID of the task"
|
523
664
|
msgstr ""
|
524
665
|
|
666
|
+
msgid "Undo selection"
|
667
|
+
msgstr ""
|
668
|
+
|
525
669
|
msgid "Unlimited"
|
526
670
|
msgstr ""
|
527
671
|
|
@@ -534,28 +678,34 @@ msgstr ""
|
|
534
678
|
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
679
|
msgstr ""
|
536
680
|
|
537
|
-
msgid "User"
|
538
|
-
msgstr ""
|
539
|
-
|
540
681
|
msgid "User search_params requires user_id to be specified"
|
541
682
|
msgstr ""
|
542
683
|
|
543
684
|
msgid "Wed"
|
544
685
|
msgstr ""
|
545
686
|
|
546
|
-
msgid "
|
687
|
+
msgid "With focus on last"
|
688
|
+
msgstr ""
|
689
|
+
|
690
|
+
msgid "Yes"
|
547
691
|
msgstr ""
|
548
692
|
|
549
693
|
msgid "activation key"
|
550
694
|
msgstr ""
|
551
695
|
|
696
|
+
msgid "cannot be cancelled with force at the moment."
|
697
|
+
msgstr ""
|
698
|
+
|
552
699
|
msgid "content view"
|
553
700
|
msgstr ""
|
554
701
|
|
555
702
|
msgid "content view version"
|
556
703
|
msgstr ""
|
557
704
|
|
558
|
-
msgid "
|
705
|
+
msgid "could not be resumed"
|
706
|
+
msgstr ""
|
707
|
+
|
708
|
+
msgid "error"
|
559
709
|
msgstr ""
|
560
710
|
|
561
711
|
#. TRANSLATORS: this translation is referring to an option which is a time interval
|
@@ -578,23 +728,89 @@ msgstr ""
|
|
578
728
|
msgid "is month (range: 1-12)"
|
579
729
|
msgstr ""
|
580
730
|
|
731
|
+
msgid "last"
|
732
|
+
msgstr ""
|
733
|
+
|
734
|
+
msgid "mode"
|
735
|
+
msgstr ""
|
736
|
+
|
581
737
|
msgid "mode has to be one of %{allowed_modes}"
|
582
738
|
msgstr ""
|
583
739
|
|
740
|
+
msgid "older"
|
741
|
+
msgstr ""
|
742
|
+
|
584
743
|
msgid "organization"
|
585
744
|
msgstr ""
|
586
745
|
|
746
|
+
msgid "paused"
|
747
|
+
msgstr ""
|
748
|
+
|
587
749
|
msgid "product"
|
588
750
|
msgstr ""
|
589
751
|
|
590
752
|
msgid "repository"
|
591
753
|
msgstr ""
|
592
754
|
|
755
|
+
msgid "resources cannot be unlocked at the moment."
|
756
|
+
msgstr ""
|
757
|
+
|
758
|
+
msgid "resources were unlocked "
|
759
|
+
msgstr ""
|
760
|
+
|
761
|
+
msgid "resources were unlocked with force."
|
762
|
+
msgstr ""
|
763
|
+
|
764
|
+
msgid "result"
|
765
|
+
msgstr ""
|
766
|
+
|
767
|
+
msgid "running"
|
768
|
+
msgstr ""
|
769
|
+
|
770
|
+
msgid "scheduled"
|
771
|
+
msgstr ""
|
772
|
+
|
773
|
+
msgid "seconds"
|
774
|
+
msgstr ""
|
775
|
+
|
776
|
+
msgid "state"
|
777
|
+
msgstr ""
|
778
|
+
|
779
|
+
msgid "stopped"
|
780
|
+
msgstr ""
|
781
|
+
|
782
|
+
msgid "success"
|
783
|
+
msgstr ""
|
784
|
+
|
593
785
|
msgid "system"
|
594
786
|
msgstr ""
|
595
787
|
|
788
|
+
msgid "task has to be cancellable"
|
789
|
+
msgstr ""
|
790
|
+
|
791
|
+
msgid "task has to be resumable"
|
792
|
+
msgstr ""
|
793
|
+
|
794
|
+
msgid "tasks."
|
795
|
+
msgstr ""
|
796
|
+
|
797
|
+
msgid "time"
|
798
|
+
msgstr ""
|
799
|
+
|
596
800
|
msgid "troubleshooting documentation"
|
597
801
|
msgstr ""
|
598
802
|
|
599
803
|
msgid "user"
|
600
804
|
msgstr ""
|
805
|
+
|
806
|
+
msgid "warning"
|
807
|
+
msgstr ""
|
808
|
+
|
809
|
+
msgid "was cancelled"
|
810
|
+
msgstr ""
|
811
|
+
|
812
|
+
msgid "was resumed"
|
813
|
+
msgstr ""
|
814
|
+
|
815
|
+
msgid "week"
|
816
|
+
msgstr ""
|