foreman-tasks 7.0.0 → 7.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/ruby_tests.yml +1 -1
- data/app/lib/actions/foreman/host/import_facts.rb +1 -6
- data/app/lib/actions/helpers/with_delegated_action.rb +2 -2
- data/app/lib/actions/middleware/watch_delegated_proxy_sub_tasks.rb +1 -1
- 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 +11 -11
- 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/config/routes.rb +0 -1
- data/lib/foreman_tasks/cleaner.rb +1 -1
- data/lib/foreman_tasks/dynflow/configuration.rb +1 -1
- data/lib/foreman_tasks/engine.rb +1 -1
- data/lib/foreman_tasks/version.rb +1 -1
- data/lib/tasks/gettext.rake +1 -0
- data/locale/action_names.rb +2 -3
- data/locale/de/LC_MESSAGES/foreman_tasks.mo +0 -0
- data/locale/de/foreman_tasks.po +873 -0
- data/locale/en/foreman_tasks.po +3 -6
- data/locale/es/LC_MESSAGES/foreman_tasks.mo +0 -0
- data/locale/es/foreman_tasks.po +874 -0
- data/locale/foreman_tasks.pot +20 -25
- data/locale/fr/LC_MESSAGES/foreman_tasks.mo +0 -0
- data/locale/fr/foreman_tasks.po +3 -6
- data/locale/ja/LC_MESSAGES/foreman_tasks.mo +0 -0
- data/locale/ja/foreman_tasks.po +3 -6
- data/locale/ka/LC_MESSAGES/foreman_tasks.mo +0 -0
- data/locale/ka/foreman_tasks.po +871 -0
- data/locale/ko/LC_MESSAGES/foreman_tasks.mo +0 -0
- data/locale/ko/foreman_tasks.po +869 -0
- data/locale/pt_BR/LC_MESSAGES/foreman_tasks.mo +0 -0
- data/locale/pt_BR/foreman_tasks.po +874 -0
- data/locale/ru/LC_MESSAGES/foreman_tasks.mo +0 -0
- data/locale/ru/foreman_tasks.po +873 -0
- data/locale/zh_CN/LC_MESSAGES/foreman_tasks.mo +0 -0
- data/locale/zh_CN/foreman_tasks.po +3 -6
- data/locale/zh_TW/LC_MESSAGES/foreman_tasks.mo +0 -0
- data/locale/zh_TW/foreman_tasks.po +870 -0
- metadata +17 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: aac3cfa51e86a12880e7cf4f12d8189f2b2c58dd50a18843d643dd926d089cf1
|
4
|
+
data.tar.gz: 140c1aa20f3d3ea8e41be0ac81ce317a90445e4d5fa224dfb259cfccac5d93e8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b956214af8e654f7ce858c99ccab6572b7cc4bcfd6958a593a6330925884a4848bcf9c6a95a293e8cf278bfec2f4f119547c2963b60b177fa361b911d2545e38
|
7
|
+
data.tar.gz: 8b7ba00268393f535320409fbccd4ef9bae0233b965b12eed198698b87495e679f80143791897e3f98357f355a0cf677c3d89b610ba8fcd95d8632ea12841886
|
@@ -8,12 +8,7 @@ module Actions
|
|
8
8
|
|
9
9
|
def plan(_host_type, host_name, facts, certname, proxy_id)
|
10
10
|
facts['domain'].try(:downcase!)
|
11
|
-
host =
|
12
|
-
::Host::Managed.import_host(host_name, certname)
|
13
|
-
else
|
14
|
-
# backwards compatibility
|
15
|
-
::Host::Managed.import_host(host_name, facts['_type'], certname, proxy_id)
|
16
|
-
end
|
11
|
+
host = ::Host::Managed.import_host(host_name, certname)
|
17
12
|
host.save(:validate => false) if host.new_record?
|
18
13
|
action_subject(host, :facts => facts.to_unsafe_h, :proxy_id => proxy_id)
|
19
14
|
if host.build?
|
@@ -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
|
@@ -51,7 +51,7 @@ module Actions
|
|
51
51
|
|
52
52
|
def notify(event, tasks)
|
53
53
|
tasks.each do |task|
|
54
|
-
action.plan_event(event, execution_plan_id: task.execution_plan_id, step_id: task.step_id)
|
54
|
+
action.plan_event(event, execution_plan_id: task.execution_plan_id, step_id: task.step_id, optional: true)
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
@@ -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!
|
@@ -1,5 +1,5 @@
|
|
1
1
|
<% title _("Recurring logics") %>
|
2
|
-
<% title_actions
|
2
|
+
<% title_actions help_button %>
|
3
3
|
|
4
4
|
<% if @errors %>
|
5
5
|
<%= alert(:class => 'alert-info', :id => 'multiple-alert', :close => false, :header => '', :text => @errors) %>
|
@@ -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>
|
data/config/routes.rb
CHANGED
@@ -72,7 +72,6 @@ Foreman::Application.routes.draw do
|
|
72
72
|
require 'sidekiq/web'
|
73
73
|
redis_url = ENV['DYNFLOW_REDIS_URL'] || SETTINGS.dig(:dynflow, :redis_url)
|
74
74
|
Sidekiq.redis = { url: redis_url }
|
75
|
-
Sidekiq::Web.set :sessions, false
|
76
75
|
mount Sidekiq::Web => '/sidekiq', :constraints => ForemanTasks::Dynflow::SidekiqConsoleConstraint.new
|
77
76
|
end
|
78
77
|
end
|
@@ -84,7 +84,7 @@ module ForemanTasks
|
|
84
84
|
|
85
85
|
def self.cleanup_settings
|
86
86
|
return @cleanup_settings if @cleanup_settings
|
87
|
-
@cleanup_settings = SETTINGS
|
87
|
+
@cleanup_settings = SETTINGS.dig(:'foreman-tasks', :cleanup) || {}
|
88
88
|
end
|
89
89
|
|
90
90
|
def self.actions_by_rules(action_rules)
|
@@ -16,7 +16,7 @@ module ForemanTasks
|
|
16
16
|
:backup_deleted_plans => true,
|
17
17
|
:backup_dir => default_backup_dir,
|
18
18
|
}
|
19
|
-
settings = SETTINGS
|
19
|
+
settings = SETTINGS.dig(:'foreman-tasks', :backup)
|
20
20
|
backup_options.merge!(settings) if settings
|
21
21
|
@backup_settings = with_environment_override backup_options
|
22
22
|
end
|
data/lib/foreman_tasks/engine.rb
CHANGED
@@ -166,7 +166,7 @@ module ForemanTasks
|
|
166
166
|
world.middleware.use Actions::Middleware::KeepCurrentUser, :before => ::Dynflow::Middleware::Common::Transaction
|
167
167
|
world.middleware.use Actions::Middleware::KeepCurrentTimezone
|
168
168
|
world.middleware.use Actions::Middleware::KeepCurrentRequestID
|
169
|
-
world.middleware.use ::Actions::Middleware::LoadSettingValues
|
169
|
+
world.middleware.use ::Actions::Middleware::LoadSettingValues
|
170
170
|
end
|
171
171
|
end
|
172
172
|
|
data/lib/tasks/gettext.rake
CHANGED
data/locale/action_names.rb
CHANGED
Binary file
|