foreman-tasks 0.8.6 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (87) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +35 -0
  3. data/.rubocop_todo.yml +138 -0
  4. data/app/controllers/foreman_tasks/api/recurring_logics_controller.rb +3 -4
  5. data/app/controllers/foreman_tasks/api/tasks_controller.rb +56 -72
  6. data/app/controllers/foreman_tasks/concerns/hosts_controller_extension.rb +2 -4
  7. data/app/controllers/foreman_tasks/recurring_logics_controller.rb +2 -5
  8. data/app/controllers/foreman_tasks/tasks_controller.rb +7 -8
  9. data/app/helpers/foreman_tasks/foreman_tasks_helper.rb +44 -46
  10. data/app/helpers/foreman_tasks/tasks_helper.rb +1 -1
  11. data/app/lib/actions/action_with_sub_plans.rb +6 -8
  12. data/app/lib/actions/base.rb +6 -7
  13. data/app/lib/actions/bulk_action.rb +13 -9
  14. data/app/lib/actions/entry_action.rb +1 -3
  15. data/app/lib/actions/foreman/host/import_facts.rb +2 -5
  16. data/app/lib/actions/foreman/puppetclass/import.rb +1 -1
  17. data/app/lib/actions/helpers/args_serialization.rb +0 -1
  18. data/app/lib/actions/helpers/humanizer.rb +16 -21
  19. data/app/lib/actions/helpers/with_continuous_output.rb +0 -1
  20. data/app/lib/actions/helpers/with_delegated_action.rb +2 -2
  21. data/app/lib/actions/middleware/inherit_task_groups.rb +3 -5
  22. data/app/lib/actions/middleware/keep_current_user.rb +0 -3
  23. data/app/lib/actions/middleware/recurring_logic.rb +0 -1
  24. data/app/lib/actions/proxy_action.rb +8 -8
  25. data/app/lib/actions/serializers/active_record_serializer.rb +0 -3
  26. data/app/lib/proxy_api/foreman_dynflow/dynflow_proxy.rb +3 -3
  27. data/app/models/foreman_tasks/concerns/action_subject.rb +4 -6
  28. data/app/models/foreman_tasks/concerns/action_triggering.rb +20 -33
  29. data/app/models/foreman_tasks/concerns/host_action_subject.rb +5 -5
  30. data/app/models/foreman_tasks/lock.rb +29 -37
  31. data/app/models/foreman_tasks/recurring_logic.rb +23 -24
  32. data/app/models/foreman_tasks/task.rb +65 -39
  33. data/app/models/foreman_tasks/task/dynflow_task.rb +23 -24
  34. data/app/models/foreman_tasks/task/status_explicator.rb +3 -3
  35. data/app/models/foreman_tasks/task/summarizer.rb +3 -3
  36. data/app/models/foreman_tasks/task_group.rb +0 -2
  37. data/app/models/foreman_tasks/task_group_member.rb +0 -2
  38. data/app/models/foreman_tasks/task_groups/recurring_logic_task_group.rb +1 -4
  39. data/app/models/foreman_tasks/triggering.rb +19 -19
  40. data/app/models/setting/foreman_tasks.rb +8 -11
  41. data/app/services/foreman_tasks/proxy_selector.rb +4 -5
  42. data/app/views/foreman_tasks/tasks/_details.html.erb +1 -1
  43. data/bin/dynflow-executor +1 -1
  44. data/bin/foreman-tasks +1 -1
  45. data/config/routes.rb +1 -1
  46. data/db/migrate/20150814204140_add_task_type_value_index.rb +1 -1
  47. data/db/migrate/20160924213030_change_tasks_widget_names.rb +8 -8
  48. data/db/seeds.d/61-foreman_tasks_bookmarks.rb +3 -3
  49. data/deploy/foreman-tasks.sysconfig +6 -0
  50. data/extra/dynflow-debug.sh +12 -0
  51. data/foreman-tasks.gemspec +1 -1
  52. data/lib/foreman_tasks.rb +3 -3
  53. data/lib/foreman_tasks/authorizer_ext.rb +1 -1
  54. data/lib/foreman_tasks/cleaner.rb +14 -16
  55. data/lib/foreman_tasks/dynflow.rb +11 -9
  56. data/lib/foreman_tasks/dynflow/configuration.rb +8 -10
  57. data/lib/foreman_tasks/dynflow/console_authorizer.rb +4 -5
  58. data/lib/foreman_tasks/dynflow/daemon.rb +17 -19
  59. data/lib/foreman_tasks/dynflow/persistence.rb +5 -8
  60. data/lib/foreman_tasks/engine.rb +30 -31
  61. data/lib/foreman_tasks/task_error.rb +1 -3
  62. data/lib/foreman_tasks/tasks/cleanup.rake +7 -19
  63. data/lib/foreman_tasks/tasks/dynflow.rake +1 -1
  64. data/lib/foreman_tasks/tasks/export_tasks.rake +51 -59
  65. data/lib/foreman_tasks/test_extensions.rb +1 -1
  66. data/lib/foreman_tasks/version.rb +1 -1
  67. data/lib/tasks/gettext.rake +10 -7
  68. data/locale/action_names.rb +3 -6
  69. data/locale/en/foreman_tasks.po +189 -177
  70. data/locale/foreman_tasks.pot +177 -137
  71. data/test/controllers/api/recurring_logics_controller_test.rb +3 -5
  72. data/test/controllers/api/tasks_controller_test.rb +5 -7
  73. data/test/factories/task_factory.rb +8 -8
  74. data/test/factories/triggering_factory.rb +2 -3
  75. data/test/helpers/foreman_tasks/tasks_helper_test.rb +11 -11
  76. data/test/support/dummy_proxy_action.rb +3 -4
  77. data/test/unit/actions/action_with_sub_plans_test.rb +5 -6
  78. data/test/unit/actions/proxy_action_test.rb +5 -8
  79. data/test/unit/cleaner_test.rb +11 -12
  80. data/test/unit/dynflow_console_authorizer_test.rb +4 -4
  81. data/test/unit/proxy_selector_test.rb +3 -3
  82. data/test/unit/recurring_logic_test.rb +19 -17
  83. data/test/unit/task_groups_test.rb +3 -4
  84. data/test/unit/task_test.rb +72 -5
  85. data/test/unit/triggering_test.rb +0 -1
  86. metadata +7 -6
  87. data/app/controllers/foreman_tasks/concerns/environments_extension.rb +0 -24
@@ -1,6 +1,5 @@
1
1
  module ForemanTasks
2
2
  class TaskError < StandardError
3
-
4
3
  attr_reader :task
5
4
  attr_reader :errors
6
5
 
@@ -12,8 +11,7 @@ module ForemanTasks
12
11
 
13
12
  def aggregated_message
14
13
  "Task #{task.id}: " +
15
- errors.map { |e| "#{e.exception_class}: #{e.message}" }.join('; ')
14
+ errors.map { |e| "#{e.exception_class}: #{e.message}" }.join('; ')
16
15
  end
17
-
18
16
  end
19
17
  end
@@ -16,32 +16,20 @@ DESC
16
16
  task :run => 'environment' do
17
17
  options = {}
18
18
 
19
- if ENV['TASK_SEARCH']
20
- options[:filter] = ENV['TASK_SEARCH']
21
- end
19
+ options[:filter] = ENV['TASK_SEARCH'] if ENV['TASK_SEARCH']
22
20
 
23
- if ENV['AFTER']
24
- options[:after] = ENV['AFTER']
25
- end
21
+ options[:after] = ENV['AFTER'] if ENV['AFTER']
26
22
 
27
- if ENV['STATES']
28
- options[:states] = ENV['STATES'].to_s.split(',')
29
- end
23
+ options[:states] = ENV['STATES'].to_s.split(',') if ENV['STATES']
30
24
 
31
- if ENV['NOOP']
32
- options[:noop] = true
33
- end
25
+ options[:noop] = true if ENV['NOOP']
34
26
 
35
- if ENV['VERBOSE']
36
- options[:verbose] = true
37
- end
27
+ options[:verbose] = true if ENV['VERBOSE']
38
28
 
39
- if ENV['BATCH_SIZE']
40
- options[:batch_size] = ENV['BATCH_SIZE'].to_i
41
- end
29
+ options[:batch_size] = ENV['BATCH_SIZE'].to_i if ENV['BATCH_SIZE']
42
30
 
43
31
  if ENV['FILTER']
44
- fail "FILTER has been deprecated. Please use TASK_SEARCH instead."
32
+ raise 'FILTER has been deprecated. Please use TASK_SEARCH instead.'
45
33
  end
46
34
 
47
35
  ForemanTasks::Cleaner.run(options)
@@ -1,6 +1,6 @@
1
1
  namespace :foreman_tasks do
2
2
  namespace :dynflow do
3
- task :executor do
3
+ task :executor do
4
4
  ForemanTasks::Dynflow::Daemon.new.run
5
5
  end
6
6
  end
@@ -20,12 +20,11 @@ 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
22
  task :export_tasks => :environment do
23
- deprecated_options = {:tasks => "TASK_SEARCH",
24
- :days => "TASK_DAYS",
25
- :export => "TASK_FILE"
26
- }
23
+ deprecated_options = { :tasks => 'TASK_SEARCH',
24
+ :days => 'TASK_DAYS',
25
+ :export => 'TASK_FILE' }
27
26
  deprecated_options.each do |option, new_option|
28
- fail "The #{option} option is deprecated. Please use #{new_option} instead" if ENV.include?(option.to_s)
27
+ raise "The #{option} option is deprecated. Please use #{new_option} instead" if ENV.include?(option.to_s)
29
28
  end
30
29
 
31
30
  class TaskRender
@@ -51,13 +50,11 @@ DESC
51
50
  end
52
51
 
53
52
  def template(filename)
54
- File.join(Gem::Specification.find_by_name("dynflow").gem_dir, 'web', 'views', "#{filename}.erb")
53
+ File.join(Gem::Specification.find_by_name('dynflow').gem_dir, 'web', 'views', "#{filename}.erb") # rubocop:disable Rails/DynamicFindBy
55
54
  end
56
55
 
57
56
  def erb(file, options = {})
58
- unless @cache[file]
59
- @cache[file] = Tilt.new(template(file))
60
- end
57
+ @cache[file] ||= Tilt.new(template(file))
61
58
  @cache[file].render(self, options[:locals])
62
59
  end
63
60
 
@@ -73,7 +70,7 @@ DESC
73
70
  <pre class="prettyprint lang-yaml">#{h(pretty_value)}</pre>
74
71
  HTML
75
72
  else
76
- ""
73
+ ''
77
74
  end
78
75
  end
79
76
 
@@ -93,7 +90,7 @@ DESC
93
90
  end
94
91
 
95
92
  def duration_to_s(duration)
96
- h("%0.2fs" % duration)
93
+ h('%0.2fs' % duration)
97
94
  end
98
95
 
99
96
  def load_action(step)
@@ -110,8 +107,8 @@ DESC
110
107
  end
111
108
 
112
109
  def show_world(world_id)
113
- if registered_world = world.coordinator.find_worlds(false, id: world_id).first
114
- "%{world_id} %{world_meta}" % { world_id: world_id, world_meta: registered_world.meta.inspect }
110
+ if (registered_world = world.coordinator.find_worlds(false, id: world_id).first)
111
+ '%{world_id} %{world_meta}' % { world_id: world_id, world_meta: registered_world.meta.inspect }
115
112
  else
116
113
  world_id
117
114
  end
@@ -127,46 +124,46 @@ DESC
127
124
  </p>
128
125
  HTML
129
126
  else
130
- ""
127
+ ''
131
128
  end
132
129
  end
133
130
 
134
131
  def atom_css_classes(atom)
135
- classes = ["atom"]
132
+ classes = ['atom']
136
133
  step = @plan.steps[atom.step_id]
137
134
  case step.state
138
135
  when :success
139
- classes << "success"
136
+ classes << 'success'
140
137
  when :error
141
- classes << "error"
138
+ classes << 'error'
142
139
  when :skipped, :skipping
143
- classes << "skipped"
140
+ classes << 'skipped'
144
141
  end
145
- return classes.join(" ")
142
+ classes.join(' ')
146
143
  end
147
144
 
148
145
  def flow_css_classes(flow, sub_flow = nil)
149
146
  classes = []
150
147
  case flow
151
148
  when Dynflow::Flows::Sequence
152
- classes << "sequence"
149
+ classes << 'sequence'
153
150
  when Dynflow::Flows::Concurrence
154
- classes << "concurrence"
151
+ classes << 'concurrence'
155
152
  when Dynflow::Flows::Atom
156
153
  classes << atom_css_classes(flow)
157
154
  else
158
155
  raise "Unknown run plan #{run_plan.inspect}"
159
156
  end
160
157
  classes << atom_css_classes(sub_flow) if sub_flow.is_a? Dynflow::Flows::Atom
161
- return classes.join(" ")
158
+ classes.join(' ')
162
159
  end
163
160
 
164
161
  def step_css_class(step)
165
162
  case step.state
166
163
  when :success
167
- "success"
164
+ 'success'
168
165
  when :error
169
- "important"
166
+ 'important'
170
167
  end
171
168
  end
172
169
 
@@ -182,17 +179,14 @@ DESC
182
179
  @plan.steps[step_id]
183
180
  end
184
181
 
185
-
186
182
  def updated_url(new_params)
187
- url("?" + Rack::Utils.build_nested_query(params.merge(new_params.stringify_keys)))
183
+ url('?' + Rack::Utils.build_nested_query(params.merge(new_params.stringify_keys)))
188
184
  end
189
-
190
-
191
185
  end
192
186
 
193
187
  class PageHelper
194
188
  def self.pagify(template)
195
- pre = <<-HTML
189
+ pre = <<-HTML
196
190
  <html>
197
191
  <head>
198
192
  <title>Dynflow Console</title>
@@ -208,41 +202,41 @@ DESC
208
202
  <body>
209
203
  </html>
210
204
  HTML
211
- end
212
-
213
- def self.copy_assets(tmp_dir)
214
- ['vendor/bootstrap/js/bootstrap.js',
215
- 'vendor/google-code-prettify/run_prettify.js',
216
- 'vendor/jquery/jquery.js',
217
- 'vendor/jquery/jquery.js',
218
- 'javascripts/application.js',
219
- 'vendor/bootstrap/css/bootstrap.css',
220
- 'stylesheets/application.css'].each do |file|
221
-
222
- filename = File.join(Gem::Specification.find_by_name("dynflow").gem_dir, 'web', 'assets', file)
223
- FileUtils.copy_file(filename, File.join(tmp_dir, File.basename(file)))
224
- end
225
- end
205
+ end
206
+
207
+ def self.copy_assets(tmp_dir)
208
+ ['vendor/bootstrap/js/bootstrap.js',
209
+ 'vendor/google-code-prettify/run_prettify.js',
210
+ 'vendor/jquery/jquery.js',
211
+ 'vendor/jquery/jquery.js',
212
+ 'javascripts/application.js',
213
+ 'vendor/bootstrap/css/bootstrap.css',
214
+ 'stylesheets/application.css'].each do |file|
215
+
216
+ filename = File.join(Gem::Specification.find_by_name('dynflow').gem_dir, 'web', 'assets', file) # rubocop:disable Rails/DynamicFindBy
217
+ FileUtils.copy_file(filename, File.join(tmp_dir, File.basename(file)))
218
+ end
219
+ end
226
220
 
227
221
  def self.generate_index(tasks)
228
- html = "<div><table class=\"table\">"
229
- tasks.order("started_at desc").all.each do |task|
222
+ html = '<div><table class="table">'
223
+ tasks.order('started_at desc').all.each do |task|
230
224
  html << "<tr><td><a href=\"#{task.id}.html\">#{task.label}</a></td><td>#{task.started_at}</td>\
231
225
  <td>#{task.state}</td><td>#{task.result}</td></tr>"
232
226
  end
233
- html << "</table></div>"
227
+ html << '</table></div>'
234
228
  end
235
229
  end
236
230
 
237
- if ENV['TASK_SEARCH'].nil? && ENV['TASK_DAYS'].nil?
238
- filter = "started_at > \"#{7.days.ago.to_s(:db)}\" || " \
239
- "(result != success && started_at > \"#{60.days.ago.to_s(:db)})\""
240
- else
241
- filter = ENV['TASK_SEARCH'] || ''
242
- end
231
+ filter = if ENV['TASK_SEARCH'].nil? && ENV['TASK_DAYS'].nil?
232
+ "started_at > \"#{7.days.ago.to_s(:db)}\" || " \
233
+ "(result != success && started_at > \"#{60.days.ago.to_s(:db)})\""
234
+ else
235
+ ENV['TASK_SEARCH'] || ''
236
+ end
243
237
 
244
238
  if (days = ENV['TASK_DAYS'])
245
- filter += " && " unless filter == ''
239
+ filter += ' && ' unless filter == ''
246
240
  filter += "started_at > \"#{days.to_i.days.ago.to_s(:db)}\""
247
241
  end
248
242
 
@@ -256,23 +250,22 @@ DESC
256
250
  Dir.mktmpdir('task-export') do |tmp_dir|
257
251
  PageHelper.copy_assets(tmp_dir)
258
252
 
259
-
260
253
  renderer = TaskRender.new
261
254
  total = tasks.count
262
255
 
263
256
  tasks.each_with_index do |task, count|
264
- File.open(File.join(tmp_dir, "#{task.id}.html"), 'w') {|file| file.write(PageHelper.pagify(renderer.render_task(task)))}
257
+ File.open(File.join(tmp_dir, "#{task.id}.html"), 'w') { |file| file.write(PageHelper.pagify(renderer.render_task(task))) }
265
258
  puts "#{count + 1}/#{total}"
266
259
  count += 1
267
260
  end
268
261
 
269
- File.open(File.join(tmp_dir, "index.html"), 'w') {|file| file.write(PageHelper.pagify(PageHelper.generate_index(tasks)))}
262
+ File.open(File.join(tmp_dir, 'index.html'), 'w') { |file| file.write(PageHelper.pagify(PageHelper.generate_index(tasks))) }
270
263
 
271
264
  sh("tar cvzf #{export_filename} #{tmp_dir} > /dev/null")
272
265
  end
273
266
  elsif format == 'csv'
274
267
  CSV.open(export_filename, 'wb') do |csv|
275
- csv << ['id', 'state', 'type', 'label', 'result', 'parent_task_id', 'started_at', 'ended_at']
268
+ csv << %w(id state type label result parent_task_id started_at ended_at)
276
269
  tasks.each do |task|
277
270
  csv << [task.id, task.state, task.type, task.label, task.result,
278
271
  task.parent_task_id, task.started_at, task.ended_at]
@@ -281,6 +274,5 @@ DESC
281
274
  end
282
275
 
283
276
  puts "Created #{export_filename}"
284
-
285
277
  end
286
278
  end
@@ -6,7 +6,7 @@ module ForemanTasks
6
6
  if defined?(AccessPermissionsTest) && self.class == AccessPermissionsTest
7
7
  test_name = @method_name || @NAME
8
8
  # for compatibility with Foreman 1.10
9
- test_name = __name__ if test_name.nil? && self.respond_to?(:__name__)
9
+ test_name = __name__ if test_name.nil? && respond_to?(:__name__)
10
10
  skip 'used by proxy only' if test_name.include?('foreman_tasks/api/tasks/callback')
11
11
  end
12
12
  end
@@ -1,3 +1,3 @@
1
1
  module ForemanTasks
2
- VERSION = "0.8.6"
2
+ VERSION = '0.9.0'.freeze
3
3
  end
@@ -1,4 +1,8 @@
1
- gettext_find_task = Rake::Task['gettext:find'] rescue nil
1
+ gettext_find_task = begin
2
+ Rake::Task['gettext:find']
3
+ rescue
4
+ nil
5
+ end
2
6
 
3
7
  if gettext_find_task
4
8
  namespace :gettext do
@@ -8,14 +12,13 @@ if gettext_find_task
8
12
 
9
13
  File.write storage_file,
10
14
  "# Autogenerated!\n" +
11
- Actions::EntryAction.
12
- all_action_names.
13
- uniq.
14
- map { |n| %[_("#{n}")] }.
15
- join("\n")
15
+ Actions::EntryAction
16
+ .all_action_names
17
+ .uniq
18
+ .map { |n| %[_("#{n}")] }
19
+ .join("\n")
16
20
  end
17
21
  end
18
22
 
19
23
  gettext_find_task.enhance ['gettext:store_action_names']
20
24
  end
21
-
@@ -1,7 +1,4 @@
1
1
  # Autogenerated!
2
- _("Action with sub plans")
3
- _("Import Puppet classes")
4
- _("Create architecture")
5
- _("Import facts")
6
- _("Update architecture")
7
- _("Delete architecture")
2
+ _('Import Puppet classes')
3
+ _('Import facts')
4
+ _('Action with sub plans')
@@ -17,504 +17,516 @@ msgstr ""
17
17
  "Plural-Forms: nplurals=2; plural=n != 1;\n"
18
18
  "\n"
19
19
 
20
- msgid "List recurring logics"
20
+ msgid " seconds"
21
21
  msgstr ""
22
22
 
23
- msgid "Show recurring logic details"
23
+ msgid "%s ago"
24
24
  msgstr ""
25
25
 
26
- msgid "Cancel recurring logic"
26
+ msgid "%s is not valid format of cron line"
27
27
  msgstr ""
28
28
 
29
- msgid "Resume all paused error tasks"
29
+ msgid "%{total} task(s), %{success} success, %{failed} fail"
30
30
  msgstr ""
31
31
 
32
- msgid "Resume tasks matching search string"
32
+ msgid "%{value} is not allowed input type"
33
33
  msgstr ""
34
34
 
35
- msgid "Resume specific tasks by ID"
35
+ msgid "%{value} is not allowed triggering mode"
36
36
  msgstr ""
37
37
 
38
- msgid "List tasks"
38
+ msgid "%{value} is wrong format"
39
39
  msgstr ""
40
40
 
41
- msgid "Search string"
41
+ msgid "Action"
42
42
  msgstr ""
43
43
 
44
- msgid "Page number, starting at 1"
44
+ msgid "Action with sub plans"
45
45
  msgstr ""
46
46
 
47
- msgid "Number of results per page to return"
47
+ msgid "Active"
48
48
  msgstr ""
49
49
 
50
- msgid "Sort field and order, e.g. 'name DESC'"
50
+ msgid "Added import task to queue, it will be run shortly"
51
51
  msgstr ""
52
52
 
53
- msgid "Hash version of 'order' param"
53
+ msgid "All proxies with the required feature are unavailable at the moment"
54
54
  msgstr ""
55
55
 
56
- msgid "Field to sort the results on"
56
+ msgid "Allow unlocking actions which can have dangerous consequences."
57
57
  msgstr ""
58
58
 
59
- msgid "How to order the sorted results (e.g. ASC for ascending)"
59
+ msgid "Associated resources"
60
60
  msgstr ""
61
61
 
62
- msgid "Send data to the task from external executor (such as smart_proxy_dynflow)"
62
+ #. TRANSLATORS: Time widget for when a task should start
63
+ msgid "At"
63
64
  msgstr ""
64
65
 
65
- msgid "UUID of the task"
66
+ msgid "Auto Reload"
66
67
  msgstr ""
67
68
 
68
- msgid "The ID of the step inside the execution plan to send the event to"
69
+ msgid "Back to tasks"
69
70
  msgstr ""
70
71
 
71
- msgid "Data to be sent to the action"
72
+ msgid "Backtrace"
72
73
  msgstr ""
73
74
 
74
- msgid "User search_params requires user_id to be specified"
75
+ msgid "Bulk action"
75
76
  msgstr ""
76
77
 
77
- msgid "Resource search_params requires resource_type and resource_id to be specified"
78
+ msgid "Cancel"
78
79
  msgstr ""
79
80
 
80
- msgid "Task search_params requires task_id to be specified"
81
+ msgid "Cancel enforced: the task might be still running on the proxy"
81
82
  msgstr ""
82
83
 
83
- msgid "Type %s for search_params is not supported"
84
+ msgid "Cancel recurring logic"
84
85
  msgstr ""
85
86
 
86
- msgid "Added import task to queue, it will be run shortly"
87
+ msgid "Cancelled"
87
88
  msgstr ""
88
89
 
89
- msgid "Failed to add task to queue: %s"
90
+ msgid "Conflicts with tasks:"
90
91
  msgstr ""
91
92
 
92
- msgid "Trying to cancel step %s"
93
+ msgid "Cron line"
93
94
  msgstr ""
94
95
 
95
- msgid "Trying to cancel the task"
96
+ msgid "Cron line format 'a b c d e', where: %s"
96
97
  msgstr ""
97
98
 
98
- msgid "The task cannot be cancelled at the moment."
99
+ msgid "Current iteration"
99
100
  msgstr ""
100
101
 
101
- msgid "The execution was resumed."
102
+ msgid "Data to be sent to the action"
102
103
  msgstr ""
103
104
 
104
- msgid "The execution has to be resumable."
105
+ msgid "Days"
105
106
  msgstr ""
106
107
 
107
- msgid "The task resources were unlocked."
108
+ msgid "Days of week"
108
109
  msgstr ""
109
110
 
110
- msgid "The execution has to be paused."
111
+ msgid "Delayed"
111
112
  msgstr ""
112
113
 
113
- msgid "The task resources were unlocked with force."
114
+ msgid "Details"
114
115
  msgstr ""
115
116
 
116
- msgid "Cancel"
117
+ msgid "Duration"
117
118
  msgstr ""
118
119
 
119
- msgid "Start at"
120
+ msgid "Dynflow console"
120
121
  msgstr ""
121
122
 
122
- msgid "Start before"
123
+ msgid "Empty bulk action"
123
124
  msgstr ""
124
125
 
125
- msgid ""
126
- "Indicates that the action should be cancelled if it cannot be started before t"
127
- "his time."
126
+ msgid "Enable the dynflow console (/foreman_tasks/dynflow) for debugging"
128
127
  msgstr ""
129
128
 
130
- msgid "Explanation"
129
+ msgid "Ended at"
131
130
  msgstr ""
132
131
 
133
- msgid "Repeats"
132
+ msgid "Ends"
134
133
  msgstr ""
135
134
 
136
- #. TRANSLATORS: this translation is referring to an option which is a time interval
137
- msgid "is minute (range: 0-59)"
135
+ msgid "Ends at"
138
136
  msgstr ""
139
137
 
140
- #. TRANSLATORS: this translation is referring to an option which is a time interval
141
- msgid "is hour (range: 0-23)"
138
+ msgid "Errors"
142
139
  msgstr ""
143
140
 
144
- #. TRANSLATORS: this translation is referring to an option which is a time interval
145
- msgid "is day of month (range: 1-31)"
141
+ msgid "Exception"
146
142
  msgstr ""
147
143
 
148
- #. TRANSLATORS: this translation is referring to an option which is a time interval
149
- msgid "is month (range: 1-12)"
144
+ msgid "Execute now"
150
145
  msgstr ""
151
146
 
152
- #. TRANSLATORS: this translation is referring to an option which is a time interval
153
- msgid "is day of week (range: 0-6)"
147
+ msgid "Execution type"
154
148
  msgstr ""
155
149
 
156
- msgid "Cron line format 'a b c d e', where: %s"
150
+ msgid "Explanation"
157
151
  msgstr ""
158
152
 
159
- msgid "Cron line"
153
+ msgid "External Id"
160
154
  msgstr ""
161
155
 
162
- msgid "Days"
156
+ msgid "Failed to add task to queue: %s"
163
157
  msgstr ""
164
158
 
165
- msgid "Days of week"
159
+ msgid "Failed to initialize"
166
160
  msgstr ""
167
161
 
168
- msgid "Mon"
162
+ msgid "Field to sort the results on"
169
163
  msgstr ""
170
164
 
171
- msgid "Tue"
165
+ msgid "Finished"
172
166
  msgstr ""
173
167
 
174
- msgid "Wed"
168
+ msgid "Force Unlock"
175
169
  msgstr ""
176
170
 
177
- msgid "Thu"
171
+ msgid "Fri"
178
172
  msgstr ""
179
173
 
180
- msgid "Fri"
174
+ msgid "Hash version of 'order' param"
181
175
  msgstr ""
182
176
 
183
- msgid "Sat"
177
+ msgid "How to order the sorted results (e.g. ASC for ascending)"
184
178
  msgstr ""
185
179
 
186
- msgid "Sun"
180
+ msgid "I understand that this may cause harm and have working database backups of all backend services."
187
181
  msgstr ""
188
182
 
189
- #. TRANSLATORS: Time widget for when a task should start
190
- msgid "At"
183
+ msgid "ID"
191
184
  msgstr ""
192
185
 
193
- msgid "Repeat N times"
186
+ msgid "Id"
194
187
  msgstr ""
195
188
 
196
- msgid "Ends"
189
+ msgid "Immediate"
197
190
  msgstr ""
198
191
 
199
- msgid "Never"
192
+ msgid "Import Puppet classes"
200
193
  msgstr ""
201
194
 
202
- #. TRANSLATORS: Button text for saying when a task should end
203
- msgid "On"
195
+ msgid "Import facts"
204
196
  msgstr ""
205
197
 
206
- msgid "Ends at"
198
+ msgid "Indicates that the action should be cancelled if it cannot be started before this time."
207
199
  msgstr ""
208
200
 
209
- msgid "Unlimited"
201
+ msgid "Initialization error: %s"
210
202
  msgstr ""
211
203
 
212
- msgid "%{total} task(s), %{success} success, %{failed} fail"
204
+ msgid "Input"
213
205
  msgstr ""
214
206
 
215
- msgid "Bulk action"
207
+ msgid "Iteration limit"
216
208
  msgstr ""
217
209
 
218
- msgid "Empty bulk action"
210
+ msgid "Label"
219
211
  msgstr ""
220
212
 
221
- msgid "The targets are of different types"
213
+ msgid "Last occurrence"
222
214
  msgstr ""
223
215
 
224
- msgid "Create architecture"
216
+ msgid "Latest Warning/Error Tasks"
225
217
  msgstr ""
226
218
 
227
- msgid "Delete architecture"
219
+ msgid "List recurring logics"
228
220
  msgstr ""
229
221
 
230
- msgid "Update architecture"
222
+ msgid "List tasks"
231
223
  msgstr ""
232
224
 
233
- msgid "Import facts"
225
+ msgid "Locks"
234
226
  msgstr ""
235
227
 
236
- msgid "Import Puppet classes"
228
+ msgid "Mon"
237
229
  msgstr ""
238
230
 
239
- msgid "activation key"
231
+ msgid "N/A"
240
232
  msgstr ""
241
233
 
242
- msgid "user"
234
+ msgid "Name"
243
235
  msgstr ""
244
236
 
245
- msgid "repository"
237
+ msgid "Never"
246
238
  msgstr ""
247
239
 
248
- msgid "content view version"
240
+ msgid "Next occurrence"
249
241
  msgstr ""
250
242
 
251
- msgid "content view"
243
+ msgid "No errors"
252
244
  msgstr ""
253
245
 
254
- msgid "product"
246
+ msgid "No proxy defined for execution"
255
247
  msgstr ""
256
248
 
257
- msgid "system"
249
+ msgid "No running steps"
258
250
  msgstr ""
259
251
 
260
- msgid "organization"
252
+ msgid "No task could be started"
261
253
  msgstr ""
262
254
 
263
- msgid "The smart proxy task %s failed."
255
+ msgid "No. of Tasks"
264
256
  msgstr ""
265
257
 
266
- msgid "Cancel enforced: the task might be still running on the proxy"
258
+ msgid "Number of attempts to start a task on the smart proxy before failing"
267
259
  msgstr ""
268
260
 
269
- msgid "Required lock is already taken by other running tasks."
261
+ msgid "Number of results per page to return"
270
262
  msgstr ""
271
263
 
272
- msgid "Please inspect their state, fix their errors and resume them."
264
+ #. TRANSLATORS: Button text for saying when a task should end
265
+ msgid "On"
273
266
  msgstr ""
274
267
 
275
- msgid "Required lock: %s"
268
+ msgid "Output"
276
269
  msgstr ""
277
270
 
278
- msgid "Conflicts with tasks:"
271
+ msgid "Page number, starting at 1"
279
272
  msgstr ""
280
273
 
281
- msgid "Active"
274
+ msgid "Parent task"
282
275
  msgstr ""
283
276
 
284
- msgid "Cancelled"
277
+ msgid "Please inspect their state, fix their errors and resume them."
285
278
  msgstr ""
286
279
 
287
- msgid "Finished"
280
+ msgid "Raw"
288
281
  msgstr ""
289
282
 
290
- msgid "N/A"
283
+ msgid "Raw input"
284
+ msgstr ""
285
+
286
+ msgid "Raw output"
287
+ msgstr ""
288
+
289
+ msgid "Recurring Logics"
291
290
  msgstr ""
292
291
 
293
292
  msgid "Recurring logic"
294
293
  msgstr ""
295
294
 
296
- msgid "%{value} is not allowed triggering mode"
295
+ msgid "Recurring logics"
297
296
  msgstr ""
298
297
 
299
- msgid "%{value} is not allowed input type"
298
+ msgid "Repeat N times"
300
299
  msgstr ""
301
300
 
302
- msgid "%{value} is wrong format"
301
+ msgid "Repeat until"
303
302
  msgstr ""
304
303
 
305
- msgid "%s is not valid format of cron line"
304
+ msgid "Repeats"
306
305
  msgstr ""
307
306
 
308
- msgid "Allow unlocking actions which can have dangerous consequences."
307
+ msgid "Require user to be authenticated as user with admin rights when accessing dynflow console"
309
308
  msgstr ""
310
309
 
311
- msgid "Enable the dynflow console (/foreman_tasks/dynflow) for debugging"
310
+ msgid "Required lock is already taken by other running tasks."
312
311
  msgstr ""
313
312
 
314
- msgid ""
315
- "Require user to be authenticated as user with admin rights when accessing dynf"
316
- "low console"
313
+ msgid "Required lock: %s"
317
314
  msgstr ""
318
315
 
319
- msgid "Number of attempts to start a task on the smart proxy before failing"
316
+ msgid "Resource search_params requires resource_type and resource_id to be specified"
320
317
  msgstr ""
321
318
 
322
- msgid "Time in seconds between retries"
319
+ msgid "Resources will be unlocked and will not prevent other tasks from being run. As the task might be still running, it should be avoided to use this unless you are really sure the task got stuck"
323
320
  msgstr ""
324
321
 
325
- msgid "Time in second during which a task has to be started on the proxy"
322
+ msgid "Result"
326
323
  msgstr ""
327
324
 
328
- msgid "Schedule"
325
+ msgid "Resume"
329
326
  msgstr ""
330
327
 
331
- msgid "Execute now"
328
+ msgid "Resume all paused error tasks"
329
+ msgstr ""
330
+
331
+ msgid "Resume specific tasks by ID"
332
+ msgstr ""
333
+
334
+ msgid "Resume tasks matching search string"
335
+ msgstr ""
336
+
337
+ msgid "Running Steps"
338
+ msgstr ""
339
+
340
+ msgid "Sat"
341
+ msgstr ""
342
+
343
+ msgid "Schedule"
332
344
  msgstr ""
333
345
 
334
346
  msgid "Schedule future execution"
335
347
  msgstr ""
336
348
 
337
- msgid "Set up recurring execution"
349
+ msgid "Search string"
338
350
  msgstr ""
339
351
 
340
- msgid "Recurring logics"
352
+ msgid "Send data to the task from external executor (such as smart_proxy_dynflow)"
341
353
  msgstr ""
342
354
 
343
- msgid "Task count"
355
+ msgid "Set up recurring execution"
344
356
  msgstr ""
345
357
 
346
- msgid "Action"
358
+ msgid "Show recurring logic details"
347
359
  msgstr ""
348
360
 
349
- msgid "Last occurrence"
361
+ msgid "Sort field and order, e.g. 'name DESC'"
350
362
  msgstr ""
351
363
 
352
- msgid "Next occurrence"
364
+ msgid "Start at"
353
365
  msgstr ""
354
366
 
355
- msgid "Current iteration"
367
+ msgid "Start auto-reloading"
356
368
  msgstr ""
357
369
 
358
- msgid "Iteration limit"
370
+ msgid "Start before"
359
371
  msgstr ""
360
372
 
361
- msgid "Repeat until"
373
+ msgid "Started at"
362
374
  msgstr ""
363
375
 
364
376
  msgid "State"
365
377
  msgstr ""
366
378
 
367
- msgid "Details"
379
+ msgid "Stop auto-reloading"
368
380
  msgstr ""
369
381
 
370
- msgid "ID"
382
+ msgid "Sub tasks"
371
383
  msgstr ""
372
384
 
373
- msgid "Task group common"
385
+ msgid "Sun"
374
386
  msgstr ""
375
387
 
376
- msgid "Associated resources"
388
+ msgid "Task"
377
389
  msgstr ""
378
390
 
379
- msgid "Auto Reload"
391
+ msgid "Task Status"
380
392
  msgstr ""
381
393
 
382
- msgid "Dynflow console"
394
+ msgid "Task count"
383
395
  msgstr ""
384
396
 
385
- msgid "Resume"
397
+ msgid "Task group common"
386
398
  msgstr ""
387
399
 
388
- msgid "Unlock"
400
+ msgid "Task search_params requires task_id to be specified"
389
401
  msgstr ""
390
402
 
391
- msgid "Force Unlock"
403
+ msgid "Tasks"
392
404
  msgstr ""
393
405
 
394
- msgid ""
395
- "This will unlock the resources that the task is running against. Please note t"
396
- "hat this might lead to inconsistent state and should be used with caution, aft"
397
- "er making sure that the task can't be resumed."
406
+ msgid "The ID of the step inside the execution plan to send the event to"
398
407
  msgstr ""
399
408
 
400
- msgid ""
401
- "I understand that this may cause harm and have working database backups of all"
402
- " backend services."
409
+ msgid "The execution has to be paused."
403
410
  msgstr ""
404
411
 
405
- msgid ""
406
- "Resources will be unlocked and will not prevent other tasks from being run. As"
407
- " the task might be still running, it should be avoided to use this unless you "
408
- "are really sure the task got stuck"
412
+ msgid "The execution has to be resumable."
409
413
  msgstr ""
410
414
 
411
- msgid "Id"
415
+ msgid "The execution was resumed."
412
416
  msgstr ""
413
417
 
414
- msgid "Label"
418
+ msgid "The smart proxy task %s failed."
415
419
  msgstr ""
416
420
 
417
- msgid "Name"
421
+ msgid "The targets are of different types"
418
422
  msgstr ""
419
423
 
420
- msgid "Owner"
424
+ msgid "The task cannot be cancelled at the moment."
421
425
  msgstr ""
422
426
 
423
- msgid "Execution type"
427
+ msgid "The task could not be started"
424
428
  msgstr ""
425
429
 
426
- msgid "Immediate"
430
+ msgid "The task resources were unlocked with force."
427
431
  msgstr ""
428
432
 
429
- msgid "Delayed"
433
+ msgid "The task resources were unlocked."
430
434
  msgstr ""
431
435
 
432
- msgid "Started at"
436
+ msgid "This will unlock the resources that the task is running against. Please note that this might lead to inconsistent state and should be used with caution, after making sure that the task can't be resumed."
433
437
  msgstr ""
434
438
 
435
- msgid "Ended at"
439
+ msgid "Thu"
436
440
  msgstr ""
437
441
 
438
- msgid "Result"
442
+ msgid "Time in second during which a task has to be started on the proxy"
439
443
  msgstr ""
440
444
 
441
- msgid "Params"
445
+ msgid "Time in seconds between retries"
442
446
  msgstr ""
443
447
 
444
- msgid "Parent task"
448
+ msgid "Triggered by"
445
449
  msgstr ""
446
450
 
447
- msgid "Sub tasks"
451
+ msgid "Trying to cancel step %s"
448
452
  msgstr ""
449
453
 
450
- msgid "Output"
454
+ msgid "Trying to cancel the task"
451
455
  msgstr ""
452
456
 
453
- msgid "Errors"
457
+ msgid "Tue"
454
458
  msgstr ""
455
459
 
456
- msgid "No errors"
460
+ msgid "Type %s for search_params is not supported"
457
461
  msgstr ""
458
462
 
459
- msgid "Input"
463
+ msgid "UUID of the task"
460
464
  msgstr ""
461
465
 
462
- msgid "Exception"
466
+ msgid "Unlimited"
463
467
  msgstr ""
464
468
 
465
- msgid "Backtrace"
469
+ msgid "Unlock"
466
470
  msgstr ""
467
471
 
468
- msgid "Raw input"
472
+ msgid "User"
469
473
  msgstr ""
470
474
 
471
- msgid "Raw output"
475
+ msgid "User search_params requires user_id to be specified"
472
476
  msgstr ""
473
477
 
474
- msgid "External Id"
478
+ msgid "Wed"
475
479
  msgstr ""
476
480
 
477
- msgid "No running steps"
481
+ msgid "You can find resource locks on this page. Exclusive lock marked with locked icon means that no other task can use locked resource while this task is running. Non-exclusive lock marked with unlocked icon means other tasks can access the resource freely, it is only used to indicate the relation of this task with the resource"
478
482
  msgstr ""
479
483
 
480
- msgid "Latest Warning/Error Tasks"
484
+ msgid "activation key"
481
485
  msgstr ""
482
486
 
483
- msgid "Task Status"
487
+ msgid "content view"
484
488
  msgstr ""
485
489
 
486
- msgid "No. of Tasks"
490
+ msgid "content view version"
487
491
  msgstr ""
488
492
 
489
- msgid "Tasks"
493
+ msgid "in %s"
490
494
  msgstr ""
491
495
 
492
- msgid "User"
496
+ #. TRANSLATORS: this translation is referring to an option which is a time interval
497
+ msgid "is day of month (range: 1-31)"
493
498
  msgstr ""
494
499
 
495
- msgid "Stop auto-reloading"
500
+ #. TRANSLATORS: this translation is referring to an option which is a time interval
501
+ msgid "is day of week (range: 0-6)"
496
502
  msgstr ""
497
503
 
498
- msgid "Start auto-reloading"
504
+ #. TRANSLATORS: this translation is referring to an option which is a time interval
505
+ msgid "is hour (range: 0-23)"
499
506
  msgstr ""
500
507
 
501
- msgid "Task"
508
+ #. TRANSLATORS: this translation is referring to an option which is a time interval
509
+ msgid "is minute (range: 0-59)"
502
510
  msgstr ""
503
511
 
504
- msgid "Running Steps"
512
+ #. TRANSLATORS: this translation is referring to an option which is a time interval
513
+ msgid "is month (range: 1-12)"
505
514
  msgstr ""
506
515
 
507
- msgid "Locks"
516
+ msgid "mode has to be one of %{allowed_modes}"
508
517
  msgstr ""
509
518
 
510
- msgid "Raw"
519
+ msgid "organization"
520
+ msgstr ""
521
+
522
+ msgid "product"
511
523
  msgstr ""
512
524
 
513
- msgid "Tasks Status table"
525
+ msgid "repository"
514
526
  msgstr ""
515
527
 
516
- msgid "Tasks in Error/Warning"
528
+ msgid "system"
517
529
  msgstr ""
518
530
 
519
- msgid "Action with sub plans"
531
+ msgid "user"
520
532
  msgstr ""