foreman-tasks 7.0.0 → 7.1.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 +1 -1
- data/app/lib/actions/helpers/with_delegated_action.rb +2 -2
- data/app/lib/actions/proxy_action.rb +19 -5
- data/app/lib/actions/trigger_proxy_batch.rb +4 -1
- data/app/models/foreman_tasks/remote_task.rb +3 -2
- data/app/views/foreman_tasks/recurring_logics/index.html.erb +10 -10
- data/app/views/foreman_tasks/task_groups/_common.html.erb +2 -2
- data/app/views/foreman_tasks/task_groups/recurring_logic_task_groups/_recurring_logic_task_group.html.erb +11 -11
- data/lib/foreman_tasks/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7b653c4a46abfb110f3a5c1ff0f130814110475989e364d39aa2756bc76c4ae2
|
4
|
+
data.tar.gz: b7ad044c96a9cd2f7f7dbf10416ce42b88e5f2ddaf4fe5cbed696cfde39dee32
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b0525a6e659bf05476e86b69c6147600463f16274e71fc15b1ccee628011a785dc53fc6b8cad0ef5f3439cac8c6581a73cea7a1175c4489778f5204fe3914c76
|
7
|
+
data.tar.gz: feab08efc57055c27fab6010dd1f5dac438f74091dee9c239da5722a7236eacf467433f17838066e3ef707f2268e39e2f3130615a25a9094286a9c65d66b2485
|
@@ -3,7 +3,7 @@ module Actions
|
|
3
3
|
module WithDelegatedAction
|
4
4
|
include ::Actions::Helpers::WithContinuousOutput
|
5
5
|
|
6
|
-
def plan_delegated_action(proxy, klass, options)
|
6
|
+
def plan_delegated_action(proxy, klass, options, proxy_action_class: ::Actions::ProxyAction)
|
7
7
|
case proxy
|
8
8
|
when :not_defined
|
9
9
|
if klass.is_a?(String)
|
@@ -14,7 +14,7 @@ module Actions
|
|
14
14
|
when :not_available
|
15
15
|
raise Foreman::Exception, _('All proxies with the required feature are unavailable at the moment')
|
16
16
|
when ::SmartProxy
|
17
|
-
delegated_action = plan_action(
|
17
|
+
delegated_action = plan_action(proxy_action_class, proxy, klass, options)
|
18
18
|
end
|
19
19
|
|
20
20
|
input[:delegated_action_id] = delegated_action.id
|
@@ -22,7 +22,15 @@ module Actions
|
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
|
-
class ProxyActionStopped
|
25
|
+
class ProxyActionStopped < RuntimeError
|
26
|
+
def backtrace
|
27
|
+
[]
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
ProxyActionStoppedEvent = ::Algebrick.type do
|
32
|
+
fields! exception: type { variants NilClass, Exception }
|
33
|
+
end
|
26
34
|
|
27
35
|
def plan(proxy, klass, options)
|
28
36
|
options[:connection_options] ||= {}
|
@@ -52,8 +60,8 @@ module Actions
|
|
52
60
|
on_data(event.data, event.meta)
|
53
61
|
when ProxyActionMissing
|
54
62
|
on_proxy_action_missing
|
55
|
-
when
|
56
|
-
on_proxy_action_stopped
|
63
|
+
when ProxyActionStoppedEvent
|
64
|
+
on_proxy_action_stopped(event)
|
57
65
|
else
|
58
66
|
raise "Unexpected event #{event.inspect}"
|
59
67
|
end
|
@@ -94,6 +102,8 @@ module Actions
|
|
94
102
|
else
|
95
103
|
suspend
|
96
104
|
end
|
105
|
+
rescue RestClient::NotFound
|
106
|
+
on_proxy_action_missing
|
97
107
|
end
|
98
108
|
|
99
109
|
def cancel_proxy_task
|
@@ -133,8 +143,12 @@ module Actions
|
|
133
143
|
error! ProxyActionMissing.new(_('Proxy task gone missing from the smart proxy'))
|
134
144
|
end
|
135
145
|
|
136
|
-
def on_proxy_action_stopped
|
137
|
-
|
146
|
+
def on_proxy_action_stopped(event)
|
147
|
+
if event.exception
|
148
|
+
error! ProxyActionStopped.new(_('Failed to trigger task on the smart proxy: ') + event.exception.message)
|
149
|
+
else
|
150
|
+
check_task_status
|
151
|
+
end
|
138
152
|
end
|
139
153
|
|
140
154
|
# @override String name of an action to be triggered on server
|
@@ -42,7 +42,10 @@ module Actions
|
|
42
42
|
rescue => e
|
43
43
|
action_logger.warn "Could not trigger task on the smart proxy"
|
44
44
|
action_logger.warn e
|
45
|
-
|
45
|
+
# The response contains non-serializable objects
|
46
|
+
# TypeError: no _dump_data is defined for class Monitor
|
47
|
+
e.response = nil
|
48
|
+
batch.each { |remote_task| remote_task.update_from_batch_trigger({ 'exception' => e }) }
|
46
49
|
output[:failed_count] += batch.size
|
47
50
|
end
|
48
51
|
|
@@ -7,7 +7,7 @@ module ForemanTasks
|
|
7
7
|
:foreign_key => :execution_plan_id,
|
8
8
|
:inverse_of => :remote_tasks
|
9
9
|
|
10
|
-
scope :triggered, -> { where(:state => 'triggered') }
|
10
|
+
scope :triggered, -> { where(:state => ['triggered', 'parent-triggered']) }
|
11
11
|
scope :pending, -> { where(:state => 'new') }
|
12
12
|
scope :external, -> { where(:state => 'external') }
|
13
13
|
|
@@ -49,10 +49,11 @@ module ForemanTasks
|
|
49
49
|
self.parent_task_id = parent['task_id']
|
50
50
|
self.state = 'parent-triggered'
|
51
51
|
else
|
52
|
+
exception = data['exception']
|
52
53
|
# Tell the action the task on the smart proxy stopped
|
53
54
|
ForemanTasks.dynflow.world.event execution_plan_id,
|
54
55
|
step_id,
|
55
|
-
::Actions::ProxyAction::
|
56
|
+
::Actions::ProxyAction::ProxyActionStoppedEvent[exception],
|
56
57
|
optional: true
|
57
58
|
end
|
58
59
|
save!
|
@@ -38,16 +38,16 @@
|
|
38
38
|
<table class="<%= table_css_classes('table-condensed table-fixed') %>">
|
39
39
|
<thead>
|
40
40
|
<th class="col-md-1"><%= N_("ID") %></th>
|
41
|
-
<th><%=
|
42
|
-
<th><%=
|
43
|
-
<th><%=
|
44
|
-
<th><%=
|
45
|
-
<th><%=
|
46
|
-
<th><%=
|
47
|
-
<th><%=
|
48
|
-
<th><%=
|
49
|
-
<th><%=
|
50
|
-
<th><%=
|
41
|
+
<th><%= _("Cron line") %></th>
|
42
|
+
<th><%= _("Task count") %></th>
|
43
|
+
<th><%= _("Action") %></th>
|
44
|
+
<th><%= _("Last occurrence") %></th>
|
45
|
+
<th><%= _("Next occurrence") %></th>
|
46
|
+
<th><%= _("Current iteration") %></th>
|
47
|
+
<th><%= _("Iteration limit") %></th>
|
48
|
+
<th><%= _("Repeat until") %></th>
|
49
|
+
<th><%= _("State") %></th>
|
50
|
+
<th><%= _("Purpose") %></th>
|
51
51
|
<th/>
|
52
52
|
</thead>
|
53
53
|
<% @recurring_logics.each do |recurring_logic| %>
|
@@ -1,11 +1,11 @@
|
|
1
1
|
<div>
|
2
2
|
<table class='<%= table_css_classes('table-condensed') %>'>
|
3
3
|
<tr>
|
4
|
-
<th><%=
|
4
|
+
<th><%= _('ID') %></th>
|
5
5
|
<td><%= link_to(task_group.id, foreman_tasks_task_group_url(task_group)) %></td>
|
6
6
|
</tr>
|
7
7
|
<tr>
|
8
|
-
<th><%=
|
8
|
+
<th><%= _('Task count') %></th>
|
9
9
|
<td><%= link_to(task_group.tasks.count, foreman_tasks_tasks_url(:search => "task_group.id = #{task_group.id}")) %></td>
|
10
10
|
</tr>
|
11
11
|
</table>
|
@@ -1,47 +1,47 @@
|
|
1
1
|
<% recurring_logic = task_group.recurring_logic -%>
|
2
2
|
<table class='<%= table_css_classes('table-condensed') %>'>
|
3
3
|
<tr>
|
4
|
-
<th
|
4
|
+
<th><%= _('ID') %></th>
|
5
5
|
<td><%= link_to(recurring_logic.id, recurring_logic) %></td>
|
6
6
|
</tr>
|
7
7
|
<tr>
|
8
|
-
<th><%=
|
8
|
+
<th><%= _("Cron line") %></th>
|
9
9
|
<td><%= recurring_logic.cron_line %></td>
|
10
10
|
</tr>
|
11
11
|
<tr>
|
12
|
-
<th><%=
|
12
|
+
<th><%= _("Action") %></th>
|
13
13
|
<td><%= format_task_input(recurring_logic.tasks.last) %></td>
|
14
14
|
</tr>
|
15
15
|
<tr>
|
16
|
-
<th><%=
|
16
|
+
<th><%= _("Last occurrence") %></th>
|
17
17
|
<td><%= recurring_logic.tasks.order(:started_at).where('started_at IS NOT NULL').last.try(:started_at) || '-' %></td>
|
18
18
|
</tr>
|
19
19
|
<tr>
|
20
|
-
<th><%=
|
20
|
+
<th><%= _("Next occurrence") %></th>
|
21
21
|
<td><%= recurring_logic_next_occurrence recurring_logic %></td>
|
22
22
|
</tr>
|
23
23
|
<tr>
|
24
|
-
<th><%=
|
24
|
+
<th><%= _("Current iteration") %></th>
|
25
25
|
<td><%= recurring_logic.iteration %></td>
|
26
26
|
</tr>
|
27
27
|
<tr>
|
28
|
-
<th><%=
|
28
|
+
<th><%= _("Iteration limit") %></th>
|
29
29
|
<td><%= format_recurring_logic_limit recurring_logic.max_iteration %></td>
|
30
30
|
</tr>
|
31
31
|
<tr>
|
32
|
-
<th><%=
|
32
|
+
<th><%= _("Repeat until") %></th>
|
33
33
|
<td><%= format_recurring_logic_limit recurring_logic.end_time.try(:in_time_zone) %></td>
|
34
34
|
</tr>
|
35
35
|
<tr>
|
36
|
-
<th><%=
|
36
|
+
<th><%= _("State") %></th>
|
37
37
|
<td><%= recurring_logic_state(recurring_logic) %></td>
|
38
38
|
</tr>
|
39
39
|
<tr>
|
40
|
-
<th><%=
|
40
|
+
<th><%= _("Purpose") %></th>
|
41
41
|
<td><%= recurring_logic.purpose %></td>
|
42
42
|
</tr>
|
43
43
|
<tr>
|
44
|
-
<th><%=
|
44
|
+
<th><%= _("Task count") %></th>
|
45
45
|
<td><%= link_to(task_group.tasks.count, foreman_tasks_tasks_url(:search => "task_group.id = #{task_group.id}")) %></td>
|
46
46
|
</tr>
|
47
47
|
</table>
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: foreman-tasks
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 7.
|
4
|
+
version: 7.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ivan Nečas
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-11-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dynflow
|
@@ -608,7 +608,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
608
608
|
- !ruby/object:Gem::Version
|
609
609
|
version: '0'
|
610
610
|
requirements: []
|
611
|
-
rubygems_version: 3.
|
611
|
+
rubygems_version: 3.3.20
|
612
612
|
signing_key:
|
613
613
|
specification_version: 4
|
614
614
|
summary: Foreman plugin for showing tasks information for resources and users
|