foreman-tasks 9.1.0 → 9.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/ruby_tests.yml +2 -0
- data/.rubocop.yml +6 -35
- data/.rubocop_todo.yml +216 -24
- data/Gemfile +2 -17
- data/app/controllers/foreman_tasks/tasks_controller.rb +8 -9
- data/app/models/foreman_tasks/remote_task.rb +3 -0
- data/app/models/foreman_tasks/task/dynflow_task.rb +4 -0
- data/foreman-tasks.gemspec +1 -1
- data/lib/foreman_tasks/tasks/export_tasks.rake +2 -2
- data/lib/foreman_tasks/version.rb +1 -1
- data/test/controllers/api/tasks_controller_test.rb +17 -17
- data/test/controllers/tasks_controller_test.rb +6 -6
- data/test/helpers/foreman_tasks/foreman_tasks_helper_test.rb +7 -7
- data/test/helpers/foreman_tasks/tasks_helper_test.rb +3 -3
- data/test/lib/actions/middleware/keep_current_request_id_test.rb +3 -3
- data/test/lib/concerns/polling_action_extensions_test.rb +4 -4
- data/test/tasks/generate_task_actions_test.rb +1 -1
- data/test/unit/actions/action_with_sub_plans_test.rb +4 -4
- data/test/unit/actions/bulk_action_test.rb +9 -9
- data/test/unit/actions/proxy_action_test.rb +20 -20
- data/test/unit/actions/recurring_action_test.rb +15 -15
- data/test/unit/actions/trigger_proxy_batch_test.rb +4 -4
- data/test/unit/cleaner_test.rb +24 -24
- data/test/unit/locking_test.rb +8 -8
- data/test/unit/proxy_selector_test.rb +9 -9
- data/test/unit/recurring_logic_test.rb +31 -32
- data/test/unit/remote_task_test.rb +4 -4
- data/test/unit/task_groups_test.rb +4 -4
- data/test/unit/task_test.rb +51 -51
- data/test/unit/triggering_test.rb +11 -11
- data/test/unit/troubleshooting_help_generator_test.rb +6 -6
- data/test/unit/ui_notifications_test.rb +20 -21
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '09ec7edf2024b4efaeb9904c2f03672efbe85791d08bfe2eae0800cd99b837aa'
|
4
|
+
data.tar.gz: 77057f77a6fe853422c8a45f3c100a70bd45d8b3e03582d58d27c692be192550
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 31f56309bd113a01bb91be4dc8d4d9c473ebbc438d3496dd18317a079c5a96301cf42771a7f1673e7bfee6cee5999a6cf92e92344e0e5cf56addf03e48e2dbf0
|
7
|
+
data.tar.gz: 1885aa1016226b0230bcfcb0d4ad7e282b34bf716ed96f6b13a38db0023866fe07f9f4ef55a4ecdee76241618c365abc9c452525eefc7cf51beb5ce357aacc1a
|
data/.rubocop.yml
CHANGED
@@ -1,10 +1,9 @@
|
|
1
|
-
require:
|
2
|
-
- rubocop-minitest
|
3
|
-
- rubocop-performance
|
4
|
-
- rubocop-rails
|
5
|
-
|
6
1
|
inherit_from: .rubocop_todo.yml
|
7
2
|
|
3
|
+
inherit_gem:
|
4
|
+
theforeman-rubocop:
|
5
|
+
- lenient.yml
|
6
|
+
|
8
7
|
AllCops:
|
9
8
|
Exclude:
|
10
9
|
- 'node_modules/**/*'
|
@@ -15,25 +14,10 @@ AllCops:
|
|
15
14
|
Lint/ShadowingOuterLocalVariable:
|
16
15
|
Enabled: false
|
17
16
|
|
18
|
-
Rails:
|
19
|
-
Enabled: true
|
20
|
-
|
21
|
-
# Don't prefer is_a? over kind_of?
|
22
|
-
Style/ClassCheck:
|
23
|
-
Enabled: false
|
24
|
-
|
25
|
-
# Don't enforce documentation
|
26
|
-
Style/Documentation:
|
27
|
-
Enabled: false
|
28
|
-
|
29
17
|
# Support both ruby19 and hash_rockets
|
30
18
|
Style/HashSyntax:
|
31
19
|
Enabled: false
|
32
20
|
|
33
|
-
# Both double and single quotes are OK
|
34
|
-
Style/StringLiterals:
|
35
|
-
Enabled: false
|
36
|
-
|
37
21
|
# Don't enforce frozen string literals
|
38
22
|
Style/FrozenStringLiteralComment:
|
39
23
|
Enabled: false
|
@@ -61,21 +45,17 @@ Layout/LineLength:
|
|
61
45
|
|
62
46
|
Naming/FileName:
|
63
47
|
Exclude:
|
64
|
-
-
|
48
|
+
- "*.gemspec"
|
65
49
|
- Gemfile
|
66
50
|
- db/seeds.d/*
|
67
51
|
- lib/foreman-tasks.rb
|
68
52
|
- gemfile.d/foreman-tasks.rb
|
69
53
|
|
70
|
-
|
71
54
|
Layout/HeredocIndentation:
|
72
55
|
Exclude:
|
73
|
-
-
|
56
|
+
- "*.gemspec"
|
74
57
|
- bin/*
|
75
58
|
|
76
|
-
Layout/EmptyLineAfterGuardClause:
|
77
|
-
Enabled: false
|
78
|
-
|
79
59
|
Style/RescueStandardError:
|
80
60
|
Enabled: false
|
81
61
|
|
@@ -111,12 +91,3 @@ Rails/HelperInstanceVariable:
|
|
111
91
|
|
112
92
|
Naming/RescuedExceptionsVariableName:
|
113
93
|
Enabled: false
|
114
|
-
|
115
|
-
Style/WordArray:
|
116
|
-
Enabled: false
|
117
|
-
|
118
|
-
Style/TrailingCommaInArrayLiteral:
|
119
|
-
EnforcedStyleForMultiline: comma
|
120
|
-
|
121
|
-
Style/TrailingCommaInHashLiteral:
|
122
|
-
EnforcedStyleForMultiline: comma
|
data/.rubocop_todo.yml
CHANGED
@@ -1,35 +1,95 @@
|
|
1
1
|
# This configuration was generated by
|
2
2
|
# `rubocop --auto-gen-config`
|
3
|
-
# on
|
3
|
+
# on 2024-04-12 08:56:48 UTC using RuboCop version 1.23.0.
|
4
4
|
# The point is for the user to remove these configuration records
|
5
5
|
# one by one as the offenses are removed from the code base.
|
6
6
|
# Note that changes in the inspected code, or installation of new
|
7
7
|
# versions of RuboCop, may require this file to be generated again.
|
8
8
|
|
9
|
-
# Offense count:
|
9
|
+
# Offense count: 1
|
10
10
|
# Configuration parameters: Include.
|
11
11
|
# Include: **/*.gemspec
|
12
12
|
Gemspec/RequiredRubyVersion:
|
13
13
|
Exclude:
|
14
14
|
- 'foreman-tasks.gemspec'
|
15
15
|
|
16
|
+
# Offense count: 106
|
17
|
+
# Cop supports --auto-correct.
|
18
|
+
# Configuration parameters: EnforcedStyle, IndentationWidth.
|
19
|
+
# SupportedStyles: with_first_argument, with_fixed_indentation
|
20
|
+
Layout/ArgumentAlignment:
|
21
|
+
Enabled: false
|
22
|
+
|
23
|
+
# Offense count: 5
|
24
|
+
# Cop supports --auto-correct.
|
25
|
+
# Configuration parameters: EnforcedStyleAlignWith, Severity.
|
26
|
+
# SupportedStylesAlignWith: start_of_line, begin
|
27
|
+
Layout/BeginEndAlignment:
|
28
|
+
Exclude:
|
29
|
+
- 'app/models/foreman_tasks/remote_task.rb'
|
30
|
+
- 'app/models/foreman_tasks/task/dynflow_task.rb'
|
31
|
+
- 'lib/tasks/gettext.rake'
|
32
|
+
- 'test/unit/actions/proxy_action_test.rb'
|
33
|
+
|
34
|
+
# Offense count: 3
|
35
|
+
# Cop supports --auto-correct.
|
36
|
+
# Configuration parameters: AllowAliasSyntax, AllowedMethods.
|
37
|
+
# AllowedMethods: alias_method, public, protected, private
|
38
|
+
Layout/EmptyLinesAroundAttributeAccessor:
|
39
|
+
Exclude:
|
40
|
+
- 'app/models/foreman_tasks/lock.rb'
|
41
|
+
- 'lib/foreman_tasks/cleaner.rb'
|
42
|
+
- 'lib/foreman_tasks/triggers.rb'
|
43
|
+
|
44
|
+
# Offense count: 1
|
45
|
+
# Cop supports --auto-correct.
|
46
|
+
# Configuration parameters: EnforcedStyle, IndentationWidth.
|
47
|
+
# SupportedStyles: consistent, consistent_relative_to_receiver, special_for_inner_method_call, special_for_inner_method_call_in_parentheses
|
48
|
+
Layout/FirstArgumentIndentation:
|
49
|
+
Exclude:
|
50
|
+
- 'test/support/dummy_dynflow_action.rb'
|
51
|
+
|
52
|
+
# Offense count: 4
|
53
|
+
# Cop supports --auto-correct.
|
54
|
+
Layout/RescueEnsureAlignment:
|
55
|
+
Exclude:
|
56
|
+
- 'app/models/foreman_tasks/remote_task.rb'
|
57
|
+
- 'lib/foreman_tasks/cleaner.rb'
|
58
|
+
- 'lib/tasks/gettext.rake'
|
59
|
+
- 'test/unit/actions/proxy_action_test.rb'
|
60
|
+
|
61
|
+
# Offense count: 8
|
62
|
+
# Configuration parameters: AllowedMethods.
|
63
|
+
# AllowedMethods: enums
|
64
|
+
Lint/ConstantDefinitionInBlock:
|
65
|
+
Exclude:
|
66
|
+
- 'lib/foreman_tasks/tasks/export_tasks.rake'
|
67
|
+
- 'lib/foreman_tasks/tasks/generate_task_actions.rake'
|
68
|
+
- 'test/controllers/api/tasks_controller_test.rb'
|
69
|
+
- 'test/unit/cleaner_test.rb'
|
70
|
+
- 'test/unit/locking_test.rb'
|
71
|
+
|
72
|
+
# Offense count: 5
|
73
|
+
Lint/MissingSuper:
|
74
|
+
Exclude:
|
75
|
+
- 'app/lib/actions/helpers/humanizer.rb'
|
76
|
+
- 'app/services/ui_notifications/tasks.rb'
|
77
|
+
- 'app/services/ui_notifications/tasks/task_bulk_cancel.rb'
|
78
|
+
- 'app/services/ui_notifications/tasks/task_bulk_resume.rb'
|
79
|
+
- 'app/services/ui_notifications/tasks/task_bulk_stop.rb'
|
80
|
+
|
16
81
|
# Offense count: 1
|
17
82
|
Lint/UselessAssignment:
|
18
83
|
Exclude:
|
19
84
|
- 'lib/foreman_tasks/tasks/export_tasks.rake'
|
20
85
|
|
21
86
|
# Offense count: 1
|
22
|
-
#
|
23
|
-
|
24
|
-
Naming/FileName:
|
87
|
+
# Cop supports --auto-correct.
|
88
|
+
Minitest/AssertEmptyLiteral:
|
25
89
|
Exclude:
|
26
|
-
- '
|
27
|
-
- 'Gemfile'
|
28
|
-
- 'db/seeds.d/*'
|
29
|
-
- 'lib/foreman-tasks.rb'
|
30
|
-
- 'gemfile.d/foreman-tasks.rb'
|
90
|
+
- 'test/unit/cleaner_test.rb'
|
31
91
|
|
32
|
-
# Offense count:
|
92
|
+
# Offense count: 2
|
33
93
|
# Configuration parameters: EnforcedStyleForLeadingUnderscores.
|
34
94
|
# SupportedStylesForLeadingUnderscores: disallowed, required, optional
|
35
95
|
Naming/MemoizedInstanceVariableName:
|
@@ -52,9 +112,15 @@ Naming/MethodParameterName:
|
|
52
112
|
# MethodDefinitionMacros: define_method, define_singleton_method
|
53
113
|
Naming/PredicateName:
|
54
114
|
Exclude:
|
55
|
-
- 'spec/**/*'
|
56
115
|
- 'app/models/foreman_tasks/task/status_explicator.rb'
|
57
116
|
|
117
|
+
# Offense count: 2
|
118
|
+
# Configuration parameters: MinSize.
|
119
|
+
Performance/CollectionLiteralInLoop:
|
120
|
+
Exclude:
|
121
|
+
- 'app/lib/actions/middleware/watch_delegated_proxy_sub_tasks.rb'
|
122
|
+
- 'db/seeds.d/61-foreman_tasks_bookmarks.rb'
|
123
|
+
|
58
124
|
# Offense count: 6
|
59
125
|
# Configuration parameters: Include.
|
60
126
|
# Include: db/migrate/*.rb
|
@@ -67,6 +133,7 @@ Rails/CreateTableWithTimestamps:
|
|
67
133
|
- 'db/migrate/20151112152108_create_triggerings.rb'
|
68
134
|
|
69
135
|
# Offense count: 1
|
136
|
+
# Cop supports --auto-correct.
|
70
137
|
# Configuration parameters: Include.
|
71
138
|
# Include: app/**/*.rb, config/**/*.rb, db/**/*.rb, lib/**/*.rb
|
72
139
|
Rails/Output:
|
@@ -78,18 +145,47 @@ Rails/OutputSafety:
|
|
78
145
|
Exclude:
|
79
146
|
- 'app/helpers/foreman_tasks/foreman_tasks_helper.rb'
|
80
147
|
|
81
|
-
# Offense count:
|
148
|
+
# Offense count: 1
|
149
|
+
# Cop supports --auto-correct.
|
150
|
+
Rails/Pick:
|
151
|
+
Exclude:
|
152
|
+
- 'app/lib/actions/helpers/lifecycle_logging.rb'
|
153
|
+
|
154
|
+
# Offense count: 1
|
155
|
+
# Cop supports --auto-correct.
|
82
156
|
# Configuration parameters: Include.
|
83
157
|
# Include: **/Rakefile, **/*.rake
|
84
158
|
Rails/RakeEnvironment:
|
85
159
|
Exclude:
|
86
|
-
- 'lib/capistrano/tasks/**/*.rake'
|
87
160
|
- 'lib/foreman_tasks/tasks/dynflow.rake'
|
88
|
-
- 'lib/foreman_tasks/tasks/test.rake'
|
89
161
|
|
90
|
-
# Offense count:
|
162
|
+
# Offense count: 1
|
163
|
+
# Cop supports --auto-correct.
|
164
|
+
Rails/RedundantForeignKey:
|
165
|
+
Exclude:
|
166
|
+
- 'app/models/foreman_tasks/triggering.rb'
|
167
|
+
|
168
|
+
# Offense count: 2
|
169
|
+
# Cop supports --auto-correct.
|
170
|
+
# Configuration parameters: EnforcedStyle.
|
171
|
+
# SupportedStyles: separated, grouped
|
172
|
+
Style/AccessorGrouping:
|
173
|
+
Exclude:
|
174
|
+
- 'lib/foreman_tasks/task_error.rb'
|
175
|
+
|
176
|
+
# Offense count: 4
|
177
|
+
# Cop supports --auto-correct.
|
178
|
+
# Configuration parameters: EnforcedStyle.
|
179
|
+
# SupportedStyles: prefer_alias, prefer_alias_method
|
180
|
+
Style/Alias:
|
181
|
+
Exclude:
|
182
|
+
- 'app/models/foreman_tasks/concerns/action_triggering.rb'
|
183
|
+
- 'app/models/foreman_tasks/task.rb'
|
184
|
+
- 'app/models/foreman_tasks/task_groups/recurring_logic_task_group.rb'
|
185
|
+
|
186
|
+
# Offense count: 10
|
91
187
|
# Cop supports --auto-correct.
|
92
|
-
# Configuration parameters:
|
188
|
+
# Configuration parameters: EnforcedStyle.
|
93
189
|
# SupportedStyles: nested, compact
|
94
190
|
Style/ClassAndModuleChildren:
|
95
191
|
Exclude:
|
@@ -98,21 +194,117 @@ Style/ClassAndModuleChildren:
|
|
98
194
|
- 'app/models/foreman_tasks/task/status_explicator.rb'
|
99
195
|
- 'app/models/foreman_tasks/task/summarizer.rb'
|
100
196
|
- 'app/models/foreman_tasks/task/task_cancelled_exception.rb'
|
101
|
-
- 'app/models/setting/foreman_tasks.rb'
|
102
197
|
- 'lib/foreman_tasks/dynflow/configuration.rb'
|
103
198
|
- 'lib/foreman_tasks/dynflow/console_authorizer.rb'
|
104
|
-
- 'lib/foreman_tasks/dynflow/persistence.rb'
|
105
199
|
- 'test/controllers/api/recurring_logics_controller_test.rb'
|
106
200
|
- 'test/controllers/api/tasks_controller_test.rb'
|
107
201
|
|
202
|
+
# Offense count: 3
|
203
|
+
# Cop supports --auto-correct.
|
204
|
+
# Configuration parameters: IgnoredMethods.
|
205
|
+
# IgnoredMethods: ==, equal?, eql?
|
206
|
+
Style/ClassEqualityComparison:
|
207
|
+
Exclude:
|
208
|
+
- 'app/lib/actions/proxy_action.rb'
|
209
|
+
- 'app/models/foreman_tasks/task/dynflow_task.rb'
|
210
|
+
- 'lib/foreman_tasks/test_extensions.rb'
|
211
|
+
|
108
212
|
# Offense count: 1
|
213
|
+
# Cop supports --auto-correct.
|
214
|
+
# Configuration parameters: Keywords, RequireColon.
|
215
|
+
# Keywords: TODO, FIXME, OPTIMIZE, HACK, REVIEW, NOTE
|
216
|
+
Style/CommentAnnotation:
|
217
|
+
Exclude:
|
218
|
+
- 'app/models/foreman_tasks/task.rb'
|
219
|
+
|
220
|
+
# Offense count: 14
|
221
|
+
# Cop supports --auto-correct.
|
109
222
|
# Configuration parameters: EnforcedStyle.
|
110
|
-
# SupportedStyles:
|
111
|
-
Style/
|
223
|
+
# SupportedStyles: compact, expanded
|
224
|
+
Style/EmptyMethod:
|
112
225
|
Exclude:
|
113
|
-
- 'app/
|
226
|
+
- 'app/controllers/foreman_tasks/api/recurring_logics_controller.rb'
|
227
|
+
- 'app/controllers/foreman_tasks/api/tasks_controller.rb'
|
228
|
+
- 'app/controllers/foreman_tasks/recurring_logics_controller.rb'
|
229
|
+
- 'app/lib/actions/helpers/humanizer.rb'
|
230
|
+
- 'app/models/foreman_tasks/concerns/action_triggering.rb'
|
231
|
+
- 'test/lib/actions/middleware/keep_current_taxonomies_test.rb'
|
232
|
+
- 'test/lib/actions/middleware/keep_current_timezone_test.rb'
|
233
|
+
- 'test/lib/actions/middleware/keep_current_user_test.rb'
|
234
|
+
- 'test/unit/actions/action_with_sub_plans_test.rb'
|
114
235
|
|
115
|
-
# Offense count:
|
236
|
+
# Offense count: 6
|
237
|
+
# Cop supports --auto-correct.
|
238
|
+
Style/ExplicitBlockArgument:
|
239
|
+
Exclude:
|
240
|
+
- 'app/lib/actions/middleware/keep_current_request_id.rb'
|
241
|
+
- 'app/lib/actions/middleware/keep_current_taxonomies.rb'
|
242
|
+
- 'app/lib/actions/middleware/keep_current_timezone.rb'
|
243
|
+
- 'app/lib/actions/middleware/keep_current_user.rb'
|
244
|
+
- 'app/lib/actions/middleware/watch_delegated_proxy_sub_tasks.rb'
|
245
|
+
- 'lib/foreman_tasks.rb'
|
246
|
+
|
247
|
+
# Offense count: 31
|
116
248
|
# Configuration parameters: MinBodyLength.
|
117
249
|
Style/GuardClause:
|
118
|
-
|
250
|
+
Exclude:
|
251
|
+
- 'app/lib/actions/bulk_action.rb'
|
252
|
+
- 'app/lib/actions/entry_action.rb'
|
253
|
+
- 'app/lib/actions/helpers/humanizer.rb'
|
254
|
+
- 'app/lib/actions/helpers/with_delegated_action.rb'
|
255
|
+
- 'app/lib/actions/proxy_action.rb'
|
256
|
+
- 'app/models/foreman_tasks/concerns/action_triggering.rb'
|
257
|
+
- 'app/models/foreman_tasks/concerns/user_extensions.rb'
|
258
|
+
- 'app/models/foreman_tasks/task/dynflow_task.rb'
|
259
|
+
- 'app/models/foreman_tasks/triggering.rb'
|
260
|
+
- 'db/migrate/20161003091412_add_missing_indexes.rb'
|
261
|
+
- 'db/migrate/20180216092715_use_uuid.rb'
|
262
|
+
- 'lib/foreman_tasks/dynflow/console_authorizer.rb'
|
263
|
+
- 'lib/foreman_tasks/tasks/export_tasks.rake'
|
264
|
+
- 'lib/foreman_tasks/test_extensions.rb'
|
265
|
+
- 'test/controllers/api/tasks_controller_test.rb'
|
266
|
+
|
267
|
+
# Offense count: 2
|
268
|
+
# Configuration parameters: MinBranchesCount.
|
269
|
+
Style/HashLikeCase:
|
270
|
+
Exclude:
|
271
|
+
- 'app/models/foreman_tasks/recurring_logic.rb'
|
272
|
+
- 'app/models/foreman_tasks/task.rb'
|
273
|
+
|
274
|
+
# Offense count: 6
|
275
|
+
# Configuration parameters: AllowedMethods.
|
276
|
+
# AllowedMethods: respond_to_missing?
|
277
|
+
Style/OptionalBooleanParameter:
|
278
|
+
Exclude:
|
279
|
+
- 'app/helpers/foreman_tasks/foreman_tasks_helper.rb'
|
280
|
+
- 'app/lib/actions/proxy_action.rb'
|
281
|
+
- 'app/models/foreman_tasks/task/dynflow_task.rb'
|
282
|
+
- 'lib/foreman_tasks/cleaner.rb'
|
283
|
+
- 'test/controllers/api/tasks_controller_test.rb'
|
284
|
+
- 'test/lib/actions/middleware/keep_current_request_id_test.rb'
|
285
|
+
|
286
|
+
# Offense count: 2
|
287
|
+
# Cop supports --auto-correct.
|
288
|
+
Style/RedundantAssignment:
|
289
|
+
Exclude:
|
290
|
+
- 'bin/dynflow-executor'
|
291
|
+
- 'lib/foreman_tasks/cleaner.rb'
|
292
|
+
|
293
|
+
# Offense count: 2
|
294
|
+
# Cop supports --auto-correct.
|
295
|
+
Style/RedundantBegin:
|
296
|
+
Exclude:
|
297
|
+
- 'app/models/foreman_tasks/task/dynflow_task.rb'
|
298
|
+
|
299
|
+
# Offense count: 2
|
300
|
+
# Cop supports --auto-correct.
|
301
|
+
Style/SlicingWithRange:
|
302
|
+
Exclude:
|
303
|
+
- 'test/unit/task_test.rb'
|
304
|
+
|
305
|
+
# Offense count: 1
|
306
|
+
# Cop supports --auto-correct.
|
307
|
+
# Configuration parameters: AllowModifier.
|
308
|
+
Style/SoleNestedConditional:
|
309
|
+
Exclude:
|
310
|
+
- 'app/lib/actions/task_synchronization.rb'
|
data/Gemfile
CHANGED
@@ -1,20 +1,5 @@
|
|
1
1
|
source "https://rubygems.org"
|
2
2
|
|
3
|
-
|
4
|
-
# Bundler will treat runtime dependencies like base dependencies, and
|
5
|
-
# development dependencies will be added by default to the :development group.
|
3
|
+
gemspec
|
6
4
|
|
7
|
-
|
8
|
-
|
9
|
-
# Declare any dependencies that are still in development here instead of in
|
10
|
-
# your gemspec. These might include edge Rails or gems from your path or
|
11
|
-
# Git. Remember to move these dependencies to your gemspec before releasing
|
12
|
-
# your gem to rubygems.org.
|
13
|
-
|
14
|
-
# To use debugger
|
15
|
-
# gem 'debugger'
|
16
|
-
|
17
|
-
gem 'rubocop', '~> 0.87'
|
18
|
-
gem 'rubocop-minitest', '~> 0.9.0'
|
19
|
-
gem 'rubocop-performance', '~> 1.5.2'
|
20
|
-
gem 'rubocop-rails', '~> 2.5.2'
|
5
|
+
gem 'theforeman-rubocop', '~> 0.1.0'
|
@@ -69,7 +69,7 @@ module ForemanTasks
|
|
69
69
|
|
70
70
|
def unlock
|
71
71
|
if @dynflow_task.paused?
|
72
|
-
|
72
|
+
@dynflow_task.halt
|
73
73
|
render json: { statusText: 'OK' }
|
74
74
|
else
|
75
75
|
render json: {}, status: :bad_request
|
@@ -77,8 +77,13 @@ module ForemanTasks
|
|
77
77
|
end
|
78
78
|
|
79
79
|
def force_unlock
|
80
|
-
|
81
|
-
|
80
|
+
if @dynflow_task.pending?
|
81
|
+
@dynflow_task.halt
|
82
|
+
render json: { statusText: 'OK' }
|
83
|
+
else
|
84
|
+
# Cannot halt an already stopped task
|
85
|
+
render json: {}, status: :bad_request
|
86
|
+
end
|
82
87
|
end
|
83
88
|
|
84
89
|
# we need do this to make the Foreman helpers working properly
|
@@ -92,12 +97,6 @@ module ForemanTasks
|
|
92
97
|
|
93
98
|
private
|
94
99
|
|
95
|
-
def unlock_task(task)
|
96
|
-
task.state = :stopped
|
97
|
-
task.locks.destroy_all
|
98
|
-
task.save!
|
99
|
-
end
|
100
|
-
|
101
100
|
def respond_with_tasks(scope)
|
102
101
|
@tasks = filter(scope, paginate: false).with_duration
|
103
102
|
csv_response(@tasks, [:id, :action, :state, :result, 'started_at.in_time_zone', 'ended_at.in_time_zone', :duration, :username], ['Id', 'Action', 'State', 'Result', 'Started At', 'Ended At', 'Duration', 'User'])
|
@@ -42,6 +42,9 @@ module ForemanTasks
|
|
42
42
|
end
|
43
43
|
|
44
44
|
def update_from_batch_trigger(data, parent = {})
|
45
|
+
# The ID might get overwritten later, but it is a sane default in case of async
|
46
|
+
# triggering where we only get an id of a remote parent
|
47
|
+
self.remote_task_id = execution_plan_id
|
45
48
|
if data['result'] == 'success'
|
46
49
|
self.remote_task_id = data['task_id']
|
47
50
|
self.state = 'triggered'
|
data/foreman-tasks.gemspec
CHANGED
@@ -26,7 +26,7 @@ same resource. It also optionally provides Dynflow infrastructure for using it f
|
|
26
26
|
s.test_files = `git ls-files test`.split("\n")
|
27
27
|
s.extra_rdoc_files = Dir['README*', 'LICENSE']
|
28
28
|
|
29
|
-
s.add_dependency "dynflow", '>= 1.
|
29
|
+
s.add_dependency "dynflow", '>= 1.9.0'
|
30
30
|
s.add_dependency 'fugit', '~> 1.8'
|
31
31
|
s.add_dependency "get_process_mem" # for memory polling
|
32
32
|
s.add_dependency "sinatra" # for Dynflow web console
|
@@ -51,7 +51,7 @@ namespace :foreman_tasks do
|
|
51
51
|
end
|
52
52
|
|
53
53
|
def template(filename)
|
54
|
-
File.join(Gem::Specification.find_by_name('dynflow').gem_dir, 'web', 'views', "#{filename}.erb")
|
54
|
+
File.join(Gem::Specification.find_by_name('dynflow').gem_dir, 'web', 'views', "#{filename}.erb")
|
55
55
|
end
|
56
56
|
|
57
57
|
def erb(file, options = {})
|
@@ -216,7 +216,7 @@ namespace :foreman_tasks do
|
|
216
216
|
'javascripts/application.js',
|
217
217
|
'vendor/bootstrap/css/bootstrap.css',
|
218
218
|
'stylesheets/application.css'].each do |file|
|
219
|
-
filename = File.join(Gem::Specification.find_by_name('dynflow').gem_dir, 'web', 'assets', file)
|
219
|
+
filename = File.join(Gem::Specification.find_by_name('dynflow').gem_dir, 'web', 'assets', file)
|
220
220
|
FileUtils.copy_file(filename, File.join(tmp_dir, File.basename(file)))
|
221
221
|
end
|
222
222
|
end
|
@@ -17,14 +17,14 @@ module ForemanTasks
|
|
17
17
|
get :index
|
18
18
|
assert_response :success
|
19
19
|
data = JSON.parse(response.body)
|
20
|
-
|
20
|
+
assert_equal 5, data['results'].count
|
21
21
|
end
|
22
22
|
|
23
23
|
it 'supports searching' do
|
24
24
|
get :index, params: { :search => 'label = Actions::User::Create' }
|
25
25
|
assert_response :success
|
26
26
|
data = JSON.parse(response.body)
|
27
|
-
|
27
|
+
assert_equal 5, data['results'].count
|
28
28
|
end
|
29
29
|
|
30
30
|
it 'renders task ids when searching by resource id' do
|
@@ -33,15 +33,15 @@ module ForemanTasks
|
|
33
33
|
get :index, params: { :search => "label = Actions::Katello::Product::Create and resource_id = 1" }
|
34
34
|
assert_response :success
|
35
35
|
data = JSON.parse(response.body)
|
36
|
-
|
36
|
+
assert_equal task.id, data['results'].first["id"]
|
37
37
|
end
|
38
38
|
|
39
39
|
it 'supports ordering by duration' do
|
40
40
|
get :index, params: { :sort_by => 'duration' }
|
41
41
|
assert_response :success
|
42
42
|
data = JSON.parse(response.body)
|
43
|
-
|
44
|
-
|
43
|
+
assert_equal 'duration', data.dig('sort', 'by')
|
44
|
+
assert_equal 5, data['results'].count
|
45
45
|
end
|
46
46
|
|
47
47
|
context 'with current taxonomies' do
|
@@ -53,9 +53,9 @@ module ForemanTasks
|
|
53
53
|
get :index, params: { organization_id: org1.id }
|
54
54
|
assert_response :success
|
55
55
|
results = JSON.parse(response.body)['results']
|
56
|
-
|
57
|
-
|
58
|
-
|
56
|
+
assert_equal 6, results.count
|
57
|
+
assert_includes results.map { |r| r['id'] }, org1_task.id
|
58
|
+
assert_not_includes results.map { |r| r['id'] }, org2_task.id
|
59
59
|
end
|
60
60
|
end
|
61
61
|
end
|
@@ -66,7 +66,7 @@ module ForemanTasks
|
|
66
66
|
post :bulk_search, params: { :searches => [{ :type => "task", :task_id => task.id, :search_id => "1" }] }
|
67
67
|
assert_response :success
|
68
68
|
data = JSON.parse(response.body)
|
69
|
-
|
69
|
+
assert_equal task.id, data[0]['results'][0]['id']
|
70
70
|
end
|
71
71
|
|
72
72
|
it 'can search for a specific resource' do
|
@@ -77,7 +77,7 @@ module ForemanTasks
|
|
77
77
|
|
78
78
|
assert_response :success
|
79
79
|
data = JSON.parse(response.body)
|
80
|
-
|
80
|
+
assert_equal task.id, data[0]['results'][0]['id']
|
81
81
|
end
|
82
82
|
end
|
83
83
|
|
@@ -108,7 +108,7 @@ module ForemanTasks
|
|
108
108
|
get :show, params: { id: task.id }, session: set_session_user
|
109
109
|
assert_response :success
|
110
110
|
data = JSON.parse(response.body)
|
111
|
-
|
111
|
+
assert_equal task.duration.in_seconds.to_s, data['duration']
|
112
112
|
end
|
113
113
|
end
|
114
114
|
|
@@ -118,7 +118,7 @@ module ForemanTasks
|
|
118
118
|
get :index, session: set_session_user
|
119
119
|
assert_response :success
|
120
120
|
data = JSON.parse(response.body)
|
121
|
-
|
121
|
+
assert_equal task.duration.in_seconds.to_s, data['results'][0]['duration']
|
122
122
|
end
|
123
123
|
end
|
124
124
|
|
@@ -189,17 +189,17 @@ module ForemanTasks
|
|
189
189
|
wait_for { ForemanTasks::Task.find_by(external_id: triggered.id).state == 'running' }
|
190
190
|
|
191
191
|
task = ForemanTasks::Task.where(:external_id => triggered.id).first
|
192
|
-
|
193
|
-
|
192
|
+
assert_equal 'running', task.state
|
193
|
+
assert_equal 'pending', task.result
|
194
194
|
|
195
195
|
callback = Support::DummyProxyAction.proxy.log[:trigger_task].first[1].first[1][:action_input][:callback]
|
196
196
|
post :callback, params: { 'callback' => callback, 'data' => { 'result' => 'success' } }
|
197
197
|
triggered.finished.wait(5)
|
198
198
|
|
199
199
|
task.reload
|
200
|
-
|
201
|
-
|
202
|
-
|
200
|
+
assert_equal 'stopped', task.state
|
201
|
+
assert_equal 'success', task.result
|
202
|
+
assert_equal({ 'result' => 'success' }, task.main_action.output['proxy_output'])
|
203
203
|
end
|
204
204
|
end
|
205
205
|
end
|
@@ -141,30 +141,30 @@ module ForemanTasks
|
|
141
141
|
@controller.stubs(:params).returns(:search => "id = #{task.id}")
|
142
142
|
in_taxonomy_scope(organizations.first) do |_o, _l|
|
143
143
|
results = @controller.send(:filter, ForemanTasks::Task)
|
144
|
-
|
144
|
+
assert_equal [task.id], results.map(&:id).sort
|
145
145
|
end
|
146
146
|
end
|
147
147
|
|
148
148
|
it 'does not scope by taxonomy if unset' do
|
149
149
|
organizations
|
150
150
|
tasks
|
151
|
-
|
151
|
+
assert_equal '', @controller.send(:current_taxonomy_search)
|
152
152
|
results = @controller.send(:filter, ForemanTasks::Task)
|
153
|
-
|
153
|
+
assert_equal tasks.map(&:id).sort, results.map(&:id).sort
|
154
154
|
end
|
155
155
|
|
156
156
|
it 'scopes by organization if set' do
|
157
157
|
scoped, _, unscoped = tasks
|
158
158
|
in_taxonomy_scope(organizations.first) do |o, _l|
|
159
|
-
|
159
|
+
assert_equal "(organization_id = #{o.id})", @controller.send(:current_taxonomy_search)
|
160
160
|
results = @controller.send(:filter, ForemanTasks::Task)
|
161
|
-
|
161
|
+
assert_equal [scoped, unscoped].map(&:id).sort, results.map(&:id).sort
|
162
162
|
end
|
163
163
|
end
|
164
164
|
|
165
165
|
it 'scopes by org and location if set' do
|
166
166
|
in_taxonomy_scope(organizations.first, FactoryBot.create(:location)) do |o, l|
|
167
|
-
|
167
|
+
assert_equal "(organization_id = #{o.id} AND location_id = #{l.id})", @controller.send(:current_taxonomy_search)
|
168
168
|
end
|
169
169
|
end
|
170
170
|
end
|