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.
- checksums.yaml +4 -4
- data/.rubocop.yml +35 -0
- data/.rubocop_todo.yml +138 -0
- data/app/controllers/foreman_tasks/api/recurring_logics_controller.rb +3 -4
- data/app/controllers/foreman_tasks/api/tasks_controller.rb +56 -72
- data/app/controllers/foreman_tasks/concerns/hosts_controller_extension.rb +2 -4
- data/app/controllers/foreman_tasks/recurring_logics_controller.rb +2 -5
- data/app/controllers/foreman_tasks/tasks_controller.rb +7 -8
- data/app/helpers/foreman_tasks/foreman_tasks_helper.rb +44 -46
- data/app/helpers/foreman_tasks/tasks_helper.rb +1 -1
- data/app/lib/actions/action_with_sub_plans.rb +6 -8
- data/app/lib/actions/base.rb +6 -7
- data/app/lib/actions/bulk_action.rb +13 -9
- data/app/lib/actions/entry_action.rb +1 -3
- data/app/lib/actions/foreman/host/import_facts.rb +2 -5
- data/app/lib/actions/foreman/puppetclass/import.rb +1 -1
- data/app/lib/actions/helpers/args_serialization.rb +0 -1
- data/app/lib/actions/helpers/humanizer.rb +16 -21
- data/app/lib/actions/helpers/with_continuous_output.rb +0 -1
- data/app/lib/actions/helpers/with_delegated_action.rb +2 -2
- data/app/lib/actions/middleware/inherit_task_groups.rb +3 -5
- data/app/lib/actions/middleware/keep_current_user.rb +0 -3
- data/app/lib/actions/middleware/recurring_logic.rb +0 -1
- data/app/lib/actions/proxy_action.rb +8 -8
- data/app/lib/actions/serializers/active_record_serializer.rb +0 -3
- data/app/lib/proxy_api/foreman_dynflow/dynflow_proxy.rb +3 -3
- data/app/models/foreman_tasks/concerns/action_subject.rb +4 -6
- data/app/models/foreman_tasks/concerns/action_triggering.rb +20 -33
- data/app/models/foreman_tasks/concerns/host_action_subject.rb +5 -5
- data/app/models/foreman_tasks/lock.rb +29 -37
- data/app/models/foreman_tasks/recurring_logic.rb +23 -24
- data/app/models/foreman_tasks/task.rb +65 -39
- data/app/models/foreman_tasks/task/dynflow_task.rb +23 -24
- data/app/models/foreman_tasks/task/status_explicator.rb +3 -3
- data/app/models/foreman_tasks/task/summarizer.rb +3 -3
- data/app/models/foreman_tasks/task_group.rb +0 -2
- data/app/models/foreman_tasks/task_group_member.rb +0 -2
- data/app/models/foreman_tasks/task_groups/recurring_logic_task_group.rb +1 -4
- data/app/models/foreman_tasks/triggering.rb +19 -19
- data/app/models/setting/foreman_tasks.rb +8 -11
- data/app/services/foreman_tasks/proxy_selector.rb +4 -5
- data/app/views/foreman_tasks/tasks/_details.html.erb +1 -1
- data/bin/dynflow-executor +1 -1
- data/bin/foreman-tasks +1 -1
- data/config/routes.rb +1 -1
- data/db/migrate/20150814204140_add_task_type_value_index.rb +1 -1
- data/db/migrate/20160924213030_change_tasks_widget_names.rb +8 -8
- data/db/seeds.d/61-foreman_tasks_bookmarks.rb +3 -3
- data/deploy/foreman-tasks.sysconfig +6 -0
- data/extra/dynflow-debug.sh +12 -0
- data/foreman-tasks.gemspec +1 -1
- data/lib/foreman_tasks.rb +3 -3
- data/lib/foreman_tasks/authorizer_ext.rb +1 -1
- data/lib/foreman_tasks/cleaner.rb +14 -16
- data/lib/foreman_tasks/dynflow.rb +11 -9
- data/lib/foreman_tasks/dynflow/configuration.rb +8 -10
- data/lib/foreman_tasks/dynflow/console_authorizer.rb +4 -5
- data/lib/foreman_tasks/dynflow/daemon.rb +17 -19
- data/lib/foreman_tasks/dynflow/persistence.rb +5 -8
- data/lib/foreman_tasks/engine.rb +30 -31
- data/lib/foreman_tasks/task_error.rb +1 -3
- data/lib/foreman_tasks/tasks/cleanup.rake +7 -19
- data/lib/foreman_tasks/tasks/dynflow.rake +1 -1
- data/lib/foreman_tasks/tasks/export_tasks.rake +51 -59
- data/lib/foreman_tasks/test_extensions.rb +1 -1
- data/lib/foreman_tasks/version.rb +1 -1
- data/lib/tasks/gettext.rake +10 -7
- data/locale/action_names.rb +3 -6
- data/locale/en/foreman_tasks.po +189 -177
- data/locale/foreman_tasks.pot +177 -137
- data/test/controllers/api/recurring_logics_controller_test.rb +3 -5
- data/test/controllers/api/tasks_controller_test.rb +5 -7
- data/test/factories/task_factory.rb +8 -8
- data/test/factories/triggering_factory.rb +2 -3
- data/test/helpers/foreman_tasks/tasks_helper_test.rb +11 -11
- data/test/support/dummy_proxy_action.rb +3 -4
- data/test/unit/actions/action_with_sub_plans_test.rb +5 -6
- data/test/unit/actions/proxy_action_test.rb +5 -8
- data/test/unit/cleaner_test.rb +11 -12
- data/test/unit/dynflow_console_authorizer_test.rb +4 -4
- data/test/unit/proxy_selector_test.rb +3 -3
- data/test/unit/recurring_logic_test.rb +19 -17
- data/test/unit/task_groups_test.rb +3 -4
- data/test/unit/task_test.rb +72 -5
- data/test/unit/triggering_test.rb +0 -1
- metadata +7 -6
- 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
|
-
|
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
|
-
|
32
|
+
raise 'FILTER has been deprecated. Please use TASK_SEARCH instead.'
|
45
33
|
end
|
46
34
|
|
47
35
|
ForemanTasks::Cleaner.run(options)
|
@@ -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 =>
|
24
|
-
|
25
|
-
|
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
|
-
|
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(
|
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
|
-
|
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(
|
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
|
-
|
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 = [
|
132
|
+
classes = ['atom']
|
136
133
|
step = @plan.steps[atom.step_id]
|
137
134
|
case step.state
|
138
135
|
when :success
|
139
|
-
classes <<
|
136
|
+
classes << 'success'
|
140
137
|
when :error
|
141
|
-
classes <<
|
138
|
+
classes << 'error'
|
142
139
|
when :skipped, :skipping
|
143
|
-
classes <<
|
140
|
+
classes << 'skipped'
|
144
141
|
end
|
145
|
-
|
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 <<
|
149
|
+
classes << 'sequence'
|
153
150
|
when Dynflow::Flows::Concurrence
|
154
|
-
classes <<
|
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
|
-
|
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
|
-
|
164
|
+
'success'
|
168
165
|
when :error
|
169
|
-
|
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(
|
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
|
-
|
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
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
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 =
|
229
|
-
tasks.order(
|
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 <<
|
227
|
+
html << '</table></div>'
|
234
228
|
end
|
235
229
|
end
|
236
230
|
|
237
|
-
if ENV['TASK_SEARCH'].nil? && ENV['TASK_DAYS'].nil?
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
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 +=
|
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,
|
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 <<
|
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? &&
|
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
|
data/lib/tasks/gettext.rake
CHANGED
@@ -1,4 +1,8 @@
|
|
1
|
-
gettext_find_task =
|
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
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
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
|
-
|
data/locale/action_names.rb
CHANGED
data/locale/en/foreman_tasks.po
CHANGED
@@ -17,504 +17,516 @@ msgstr ""
|
|
17
17
|
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
18
18
|
"\n"
|
19
19
|
|
20
|
-
msgid "
|
20
|
+
msgid " seconds"
|
21
21
|
msgstr ""
|
22
22
|
|
23
|
-
msgid "
|
23
|
+
msgid "%s ago"
|
24
24
|
msgstr ""
|
25
25
|
|
26
|
-
msgid "
|
26
|
+
msgid "%s is not valid format of cron line"
|
27
27
|
msgstr ""
|
28
28
|
|
29
|
-
msgid "
|
29
|
+
msgid "%{total} task(s), %{success} success, %{failed} fail"
|
30
30
|
msgstr ""
|
31
31
|
|
32
|
-
msgid "
|
32
|
+
msgid "%{value} is not allowed input type"
|
33
33
|
msgstr ""
|
34
34
|
|
35
|
-
msgid "
|
35
|
+
msgid "%{value} is not allowed triggering mode"
|
36
36
|
msgstr ""
|
37
37
|
|
38
|
-
msgid "
|
38
|
+
msgid "%{value} is wrong format"
|
39
39
|
msgstr ""
|
40
40
|
|
41
|
-
msgid "
|
41
|
+
msgid "Action"
|
42
42
|
msgstr ""
|
43
43
|
|
44
|
-
msgid "
|
44
|
+
msgid "Action with sub plans"
|
45
45
|
msgstr ""
|
46
46
|
|
47
|
-
msgid "
|
47
|
+
msgid "Active"
|
48
48
|
msgstr ""
|
49
49
|
|
50
|
-
msgid "
|
50
|
+
msgid "Added import task to queue, it will be run shortly"
|
51
51
|
msgstr ""
|
52
52
|
|
53
|
-
msgid "
|
53
|
+
msgid "All proxies with the required feature are unavailable at the moment"
|
54
54
|
msgstr ""
|
55
55
|
|
56
|
-
msgid "
|
56
|
+
msgid "Allow unlocking actions which can have dangerous consequences."
|
57
57
|
msgstr ""
|
58
58
|
|
59
|
-
msgid "
|
59
|
+
msgid "Associated resources"
|
60
60
|
msgstr ""
|
61
61
|
|
62
|
-
|
62
|
+
#. TRANSLATORS: Time widget for when a task should start
|
63
|
+
msgid "At"
|
63
64
|
msgstr ""
|
64
65
|
|
65
|
-
msgid "
|
66
|
+
msgid "Auto Reload"
|
66
67
|
msgstr ""
|
67
68
|
|
68
|
-
msgid "
|
69
|
+
msgid "Back to tasks"
|
69
70
|
msgstr ""
|
70
71
|
|
71
|
-
msgid "
|
72
|
+
msgid "Backtrace"
|
72
73
|
msgstr ""
|
73
74
|
|
74
|
-
msgid "
|
75
|
+
msgid "Bulk action"
|
75
76
|
msgstr ""
|
76
77
|
|
77
|
-
msgid "
|
78
|
+
msgid "Cancel"
|
78
79
|
msgstr ""
|
79
80
|
|
80
|
-
msgid "
|
81
|
+
msgid "Cancel enforced: the task might be still running on the proxy"
|
81
82
|
msgstr ""
|
82
83
|
|
83
|
-
msgid "
|
84
|
+
msgid "Cancel recurring logic"
|
84
85
|
msgstr ""
|
85
86
|
|
86
|
-
msgid "
|
87
|
+
msgid "Cancelled"
|
87
88
|
msgstr ""
|
88
89
|
|
89
|
-
msgid "
|
90
|
+
msgid "Conflicts with tasks:"
|
90
91
|
msgstr ""
|
91
92
|
|
92
|
-
msgid "
|
93
|
+
msgid "Cron line"
|
93
94
|
msgstr ""
|
94
95
|
|
95
|
-
msgid "
|
96
|
+
msgid "Cron line format 'a b c d e', where: %s"
|
96
97
|
msgstr ""
|
97
98
|
|
98
|
-
msgid "
|
99
|
+
msgid "Current iteration"
|
99
100
|
msgstr ""
|
100
101
|
|
101
|
-
msgid "
|
102
|
+
msgid "Data to be sent to the action"
|
102
103
|
msgstr ""
|
103
104
|
|
104
|
-
msgid "
|
105
|
+
msgid "Days"
|
105
106
|
msgstr ""
|
106
107
|
|
107
|
-
msgid "
|
108
|
+
msgid "Days of week"
|
108
109
|
msgstr ""
|
109
110
|
|
110
|
-
msgid "
|
111
|
+
msgid "Delayed"
|
111
112
|
msgstr ""
|
112
113
|
|
113
|
-
msgid "
|
114
|
+
msgid "Details"
|
114
115
|
msgstr ""
|
115
116
|
|
116
|
-
msgid "
|
117
|
+
msgid "Duration"
|
117
118
|
msgstr ""
|
118
119
|
|
119
|
-
msgid "
|
120
|
+
msgid "Dynflow console"
|
120
121
|
msgstr ""
|
121
122
|
|
122
|
-
msgid "
|
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 "
|
129
|
+
msgid "Ended at"
|
131
130
|
msgstr ""
|
132
131
|
|
133
|
-
msgid "
|
132
|
+
msgid "Ends"
|
134
133
|
msgstr ""
|
135
134
|
|
136
|
-
|
137
|
-
msgid "is minute (range: 0-59)"
|
135
|
+
msgid "Ends at"
|
138
136
|
msgstr ""
|
139
137
|
|
140
|
-
|
141
|
-
msgid "is hour (range: 0-23)"
|
138
|
+
msgid "Errors"
|
142
139
|
msgstr ""
|
143
140
|
|
144
|
-
|
145
|
-
msgid "is day of month (range: 1-31)"
|
141
|
+
msgid "Exception"
|
146
142
|
msgstr ""
|
147
143
|
|
148
|
-
|
149
|
-
msgid "is month (range: 1-12)"
|
144
|
+
msgid "Execute now"
|
150
145
|
msgstr ""
|
151
146
|
|
152
|
-
|
153
|
-
msgid "is day of week (range: 0-6)"
|
147
|
+
msgid "Execution type"
|
154
148
|
msgstr ""
|
155
149
|
|
156
|
-
msgid "
|
150
|
+
msgid "Explanation"
|
157
151
|
msgstr ""
|
158
152
|
|
159
|
-
msgid "
|
153
|
+
msgid "External Id"
|
160
154
|
msgstr ""
|
161
155
|
|
162
|
-
msgid "
|
156
|
+
msgid "Failed to add task to queue: %s"
|
163
157
|
msgstr ""
|
164
158
|
|
165
|
-
msgid "
|
159
|
+
msgid "Failed to initialize"
|
166
160
|
msgstr ""
|
167
161
|
|
168
|
-
msgid "
|
162
|
+
msgid "Field to sort the results on"
|
169
163
|
msgstr ""
|
170
164
|
|
171
|
-
msgid "
|
165
|
+
msgid "Finished"
|
172
166
|
msgstr ""
|
173
167
|
|
174
|
-
msgid "
|
168
|
+
msgid "Force Unlock"
|
175
169
|
msgstr ""
|
176
170
|
|
177
|
-
msgid "
|
171
|
+
msgid "Fri"
|
178
172
|
msgstr ""
|
179
173
|
|
180
|
-
msgid "
|
174
|
+
msgid "Hash version of 'order' param"
|
181
175
|
msgstr ""
|
182
176
|
|
183
|
-
msgid "
|
177
|
+
msgid "How to order the sorted results (e.g. ASC for ascending)"
|
184
178
|
msgstr ""
|
185
179
|
|
186
|
-
msgid "
|
180
|
+
msgid "I understand that this may cause harm and have working database backups of all backend services."
|
187
181
|
msgstr ""
|
188
182
|
|
189
|
-
|
190
|
-
msgid "At"
|
183
|
+
msgid "ID"
|
191
184
|
msgstr ""
|
192
185
|
|
193
|
-
msgid "
|
186
|
+
msgid "Id"
|
194
187
|
msgstr ""
|
195
188
|
|
196
|
-
msgid "
|
189
|
+
msgid "Immediate"
|
197
190
|
msgstr ""
|
198
191
|
|
199
|
-
msgid "
|
192
|
+
msgid "Import Puppet classes"
|
200
193
|
msgstr ""
|
201
194
|
|
202
|
-
|
203
|
-
msgid "On"
|
195
|
+
msgid "Import facts"
|
204
196
|
msgstr ""
|
205
197
|
|
206
|
-
msgid "
|
198
|
+
msgid "Indicates that the action should be cancelled if it cannot be started before this time."
|
207
199
|
msgstr ""
|
208
200
|
|
209
|
-
msgid "
|
201
|
+
msgid "Initialization error: %s"
|
210
202
|
msgstr ""
|
211
203
|
|
212
|
-
msgid "
|
204
|
+
msgid "Input"
|
213
205
|
msgstr ""
|
214
206
|
|
215
|
-
msgid "
|
207
|
+
msgid "Iteration limit"
|
216
208
|
msgstr ""
|
217
209
|
|
218
|
-
msgid "
|
210
|
+
msgid "Label"
|
219
211
|
msgstr ""
|
220
212
|
|
221
|
-
msgid "
|
213
|
+
msgid "Last occurrence"
|
222
214
|
msgstr ""
|
223
215
|
|
224
|
-
msgid "
|
216
|
+
msgid "Latest Warning/Error Tasks"
|
225
217
|
msgstr ""
|
226
218
|
|
227
|
-
msgid "
|
219
|
+
msgid "List recurring logics"
|
228
220
|
msgstr ""
|
229
221
|
|
230
|
-
msgid "
|
222
|
+
msgid "List tasks"
|
231
223
|
msgstr ""
|
232
224
|
|
233
|
-
msgid "
|
225
|
+
msgid "Locks"
|
234
226
|
msgstr ""
|
235
227
|
|
236
|
-
msgid "
|
228
|
+
msgid "Mon"
|
237
229
|
msgstr ""
|
238
230
|
|
239
|
-
msgid "
|
231
|
+
msgid "N/A"
|
240
232
|
msgstr ""
|
241
233
|
|
242
|
-
msgid "
|
234
|
+
msgid "Name"
|
243
235
|
msgstr ""
|
244
236
|
|
245
|
-
msgid "
|
237
|
+
msgid "Never"
|
246
238
|
msgstr ""
|
247
239
|
|
248
|
-
msgid "
|
240
|
+
msgid "Next occurrence"
|
249
241
|
msgstr ""
|
250
242
|
|
251
|
-
msgid "
|
243
|
+
msgid "No errors"
|
252
244
|
msgstr ""
|
253
245
|
|
254
|
-
msgid "
|
246
|
+
msgid "No proxy defined for execution"
|
255
247
|
msgstr ""
|
256
248
|
|
257
|
-
msgid "
|
249
|
+
msgid "No running steps"
|
258
250
|
msgstr ""
|
259
251
|
|
260
|
-
msgid "
|
252
|
+
msgid "No task could be started"
|
261
253
|
msgstr ""
|
262
254
|
|
263
|
-
msgid "
|
255
|
+
msgid "No. of Tasks"
|
264
256
|
msgstr ""
|
265
257
|
|
266
|
-
msgid "
|
258
|
+
msgid "Number of attempts to start a task on the smart proxy before failing"
|
267
259
|
msgstr ""
|
268
260
|
|
269
|
-
msgid "
|
261
|
+
msgid "Number of results per page to return"
|
270
262
|
msgstr ""
|
271
263
|
|
272
|
-
|
264
|
+
#. TRANSLATORS: Button text for saying when a task should end
|
265
|
+
msgid "On"
|
273
266
|
msgstr ""
|
274
267
|
|
275
|
-
msgid "
|
268
|
+
msgid "Output"
|
276
269
|
msgstr ""
|
277
270
|
|
278
|
-
msgid "
|
271
|
+
msgid "Page number, starting at 1"
|
279
272
|
msgstr ""
|
280
273
|
|
281
|
-
msgid "
|
274
|
+
msgid "Parent task"
|
282
275
|
msgstr ""
|
283
276
|
|
284
|
-
msgid "
|
277
|
+
msgid "Please inspect their state, fix their errors and resume them."
|
285
278
|
msgstr ""
|
286
279
|
|
287
|
-
msgid "
|
280
|
+
msgid "Raw"
|
288
281
|
msgstr ""
|
289
282
|
|
290
|
-
msgid "
|
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 "
|
295
|
+
msgid "Recurring logics"
|
297
296
|
msgstr ""
|
298
297
|
|
299
|
-
msgid "
|
298
|
+
msgid "Repeat N times"
|
300
299
|
msgstr ""
|
301
300
|
|
302
|
-
msgid "
|
301
|
+
msgid "Repeat until"
|
303
302
|
msgstr ""
|
304
303
|
|
305
|
-
msgid "
|
304
|
+
msgid "Repeats"
|
306
305
|
msgstr ""
|
307
306
|
|
308
|
-
msgid "
|
307
|
+
msgid "Require user to be authenticated as user with admin rights when accessing dynflow console"
|
309
308
|
msgstr ""
|
310
309
|
|
311
|
-
msgid "
|
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 "
|
316
|
+
msgid "Resource search_params requires resource_type and resource_id to be specified"
|
320
317
|
msgstr ""
|
321
318
|
|
322
|
-
msgid "
|
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 "
|
322
|
+
msgid "Result"
|
326
323
|
msgstr ""
|
327
324
|
|
328
|
-
msgid "
|
325
|
+
msgid "Resume"
|
329
326
|
msgstr ""
|
330
327
|
|
331
|
-
msgid "
|
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 "
|
349
|
+
msgid "Search string"
|
338
350
|
msgstr ""
|
339
351
|
|
340
|
-
msgid "
|
352
|
+
msgid "Send data to the task from external executor (such as smart_proxy_dynflow)"
|
341
353
|
msgstr ""
|
342
354
|
|
343
|
-
msgid "
|
355
|
+
msgid "Set up recurring execution"
|
344
356
|
msgstr ""
|
345
357
|
|
346
|
-
msgid "
|
358
|
+
msgid "Show recurring logic details"
|
347
359
|
msgstr ""
|
348
360
|
|
349
|
-
msgid "
|
361
|
+
msgid "Sort field and order, e.g. 'name DESC'"
|
350
362
|
msgstr ""
|
351
363
|
|
352
|
-
msgid "
|
364
|
+
msgid "Start at"
|
353
365
|
msgstr ""
|
354
366
|
|
355
|
-
msgid "
|
367
|
+
msgid "Start auto-reloading"
|
356
368
|
msgstr ""
|
357
369
|
|
358
|
-
msgid "
|
370
|
+
msgid "Start before"
|
359
371
|
msgstr ""
|
360
372
|
|
361
|
-
msgid "
|
373
|
+
msgid "Started at"
|
362
374
|
msgstr ""
|
363
375
|
|
364
376
|
msgid "State"
|
365
377
|
msgstr ""
|
366
378
|
|
367
|
-
msgid "
|
379
|
+
msgid "Stop auto-reloading"
|
368
380
|
msgstr ""
|
369
381
|
|
370
|
-
msgid "
|
382
|
+
msgid "Sub tasks"
|
371
383
|
msgstr ""
|
372
384
|
|
373
|
-
msgid "
|
385
|
+
msgid "Sun"
|
374
386
|
msgstr ""
|
375
387
|
|
376
|
-
msgid "
|
388
|
+
msgid "Task"
|
377
389
|
msgstr ""
|
378
390
|
|
379
|
-
msgid "
|
391
|
+
msgid "Task Status"
|
380
392
|
msgstr ""
|
381
393
|
|
382
|
-
msgid "
|
394
|
+
msgid "Task count"
|
383
395
|
msgstr ""
|
384
396
|
|
385
|
-
msgid "
|
397
|
+
msgid "Task group common"
|
386
398
|
msgstr ""
|
387
399
|
|
388
|
-
msgid "
|
400
|
+
msgid "Task search_params requires task_id to be specified"
|
389
401
|
msgstr ""
|
390
402
|
|
391
|
-
msgid "
|
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 "
|
415
|
+
msgid "The execution was resumed."
|
412
416
|
msgstr ""
|
413
417
|
|
414
|
-
msgid "
|
418
|
+
msgid "The smart proxy task %s failed."
|
415
419
|
msgstr ""
|
416
420
|
|
417
|
-
msgid "
|
421
|
+
msgid "The targets are of different types"
|
418
422
|
msgstr ""
|
419
423
|
|
420
|
-
msgid "
|
424
|
+
msgid "The task cannot be cancelled at the moment."
|
421
425
|
msgstr ""
|
422
426
|
|
423
|
-
msgid "
|
427
|
+
msgid "The task could not be started"
|
424
428
|
msgstr ""
|
425
429
|
|
426
|
-
msgid "
|
430
|
+
msgid "The task resources were unlocked with force."
|
427
431
|
msgstr ""
|
428
432
|
|
429
|
-
msgid "
|
433
|
+
msgid "The task resources were unlocked."
|
430
434
|
msgstr ""
|
431
435
|
|
432
|
-
msgid "
|
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 "
|
439
|
+
msgid "Thu"
|
436
440
|
msgstr ""
|
437
441
|
|
438
|
-
msgid "
|
442
|
+
msgid "Time in second during which a task has to be started on the proxy"
|
439
443
|
msgstr ""
|
440
444
|
|
441
|
-
msgid "
|
445
|
+
msgid "Time in seconds between retries"
|
442
446
|
msgstr ""
|
443
447
|
|
444
|
-
msgid "
|
448
|
+
msgid "Triggered by"
|
445
449
|
msgstr ""
|
446
450
|
|
447
|
-
msgid "
|
451
|
+
msgid "Trying to cancel step %s"
|
448
452
|
msgstr ""
|
449
453
|
|
450
|
-
msgid "
|
454
|
+
msgid "Trying to cancel the task"
|
451
455
|
msgstr ""
|
452
456
|
|
453
|
-
msgid "
|
457
|
+
msgid "Tue"
|
454
458
|
msgstr ""
|
455
459
|
|
456
|
-
msgid "
|
460
|
+
msgid "Type %s for search_params is not supported"
|
457
461
|
msgstr ""
|
458
462
|
|
459
|
-
msgid "
|
463
|
+
msgid "UUID of the task"
|
460
464
|
msgstr ""
|
461
465
|
|
462
|
-
msgid "
|
466
|
+
msgid "Unlimited"
|
463
467
|
msgstr ""
|
464
468
|
|
465
|
-
msgid "
|
469
|
+
msgid "Unlock"
|
466
470
|
msgstr ""
|
467
471
|
|
468
|
-
msgid "
|
472
|
+
msgid "User"
|
469
473
|
msgstr ""
|
470
474
|
|
471
|
-
msgid "
|
475
|
+
msgid "User search_params requires user_id to be specified"
|
472
476
|
msgstr ""
|
473
477
|
|
474
|
-
msgid "
|
478
|
+
msgid "Wed"
|
475
479
|
msgstr ""
|
476
480
|
|
477
|
-
msgid "
|
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 "
|
484
|
+
msgid "activation key"
|
481
485
|
msgstr ""
|
482
486
|
|
483
|
-
msgid "
|
487
|
+
msgid "content view"
|
484
488
|
msgstr ""
|
485
489
|
|
486
|
-
msgid "
|
490
|
+
msgid "content view version"
|
487
491
|
msgstr ""
|
488
492
|
|
489
|
-
msgid "
|
493
|
+
msgid "in %s"
|
490
494
|
msgstr ""
|
491
495
|
|
492
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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 "
|
516
|
+
msgid "mode has to be one of %{allowed_modes}"
|
508
517
|
msgstr ""
|
509
518
|
|
510
|
-
msgid "
|
519
|
+
msgid "organization"
|
520
|
+
msgstr ""
|
521
|
+
|
522
|
+
msgid "product"
|
511
523
|
msgstr ""
|
512
524
|
|
513
|
-
msgid "
|
525
|
+
msgid "repository"
|
514
526
|
msgstr ""
|
515
527
|
|
516
|
-
msgid "
|
528
|
+
msgid "system"
|
517
529
|
msgstr ""
|
518
530
|
|
519
|
-
msgid "
|
531
|
+
msgid "user"
|
520
532
|
msgstr ""
|