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,14 +1,12 @@
|
|
1
1
|
module ForemanTasks
|
2
2
|
class RecurringLogicsController < ::ApplicationController
|
3
|
-
|
4
|
-
before_filter :find_recurring_logic, :only => [:show, :cancel]
|
3
|
+
before_action :find_recurring_logic, :only => [:show, :cancel]
|
5
4
|
|
6
5
|
def index
|
7
6
|
@recurring_logics = filter(resource_base)
|
8
7
|
end
|
9
8
|
|
10
|
-
def show
|
11
|
-
end
|
9
|
+
def show; end
|
12
10
|
|
13
11
|
def cancel
|
14
12
|
@recurring_logic.cancel
|
@@ -28,6 +26,5 @@ module ForemanTasks
|
|
28
26
|
def filter(scope)
|
29
27
|
scope.search_for(params[:search]).paginate(:page => params[:page])
|
30
28
|
end
|
31
|
-
|
32
29
|
end
|
33
30
|
end
|
@@ -2,7 +2,7 @@ module ForemanTasks
|
|
2
2
|
class TasksController < ::ApplicationController
|
3
3
|
include Foreman::Controller::AutoCompleteSearch
|
4
4
|
|
5
|
-
|
5
|
+
before_action :restrict_dangerous_actions, :only => [:unlock, :force_unlock]
|
6
6
|
|
7
7
|
def show
|
8
8
|
@task = Task.find(params[:id])
|
@@ -10,7 +10,7 @@ module ForemanTasks
|
|
10
10
|
|
11
11
|
def index
|
12
12
|
params[:order] ||= 'started_at DESC'
|
13
|
-
@tasks
|
13
|
+
@tasks = filter(resource_base)
|
14
14
|
end
|
15
15
|
|
16
16
|
def sub_tasks
|
@@ -21,7 +21,7 @@ module ForemanTasks
|
|
21
21
|
|
22
22
|
def cancel_step
|
23
23
|
task = find_dynflow_task
|
24
|
-
flash[:notice] = _(
|
24
|
+
flash[:notice] = _('Trying to cancel step %s') % params[:step_id]
|
25
25
|
ForemanTasks.dynflow.world.event(task.external_id, params[:step_id].to_i, ::Dynflow::Action::Cancellable::Cancel).wait
|
26
26
|
redirect_to foreman_tasks_task_path(task)
|
27
27
|
end
|
@@ -54,7 +54,7 @@ module ForemanTasks
|
|
54
54
|
task.save!
|
55
55
|
flash[:notice] = _('The task resources were unlocked.')
|
56
56
|
else
|
57
|
-
flash[:warning] =
|
57
|
+
flash[:warning] = _('The execution has to be paused.')
|
58
58
|
end
|
59
59
|
redirect_to :back
|
60
60
|
end
|
@@ -93,7 +93,7 @@ module ForemanTasks
|
|
93
93
|
end
|
94
94
|
end
|
95
95
|
|
96
|
-
def resource_scope(
|
96
|
+
def resource_scope(_options = {})
|
97
97
|
@resource_scope ||= ForemanTasks::Task.authorized("#{action_permission}_foreman_tasks")
|
98
98
|
end
|
99
99
|
|
@@ -102,9 +102,8 @@ module ForemanTasks
|
|
102
102
|
end
|
103
103
|
|
104
104
|
def filter(scope)
|
105
|
-
scope.search_for(params[:search], :order => params[:order])
|
106
|
-
|
105
|
+
scope.search_for(params[:search], :order => params[:order])
|
106
|
+
.paginate(:page => params[:page]).select('DISTINCT foreman_tasks_tasks.*')
|
107
107
|
end
|
108
|
-
|
109
108
|
end
|
110
109
|
end
|
@@ -1,18 +1,17 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
module ForemanTasks
|
3
3
|
module ForemanTasksHelper
|
4
|
-
|
5
4
|
def recurring_logic_state(recurring_logic)
|
6
5
|
icon, status = case recurring_logic.state
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
6
|
+
when 'active'
|
7
|
+
'glyphicon-info-sign'
|
8
|
+
when 'finished'
|
9
|
+
['glyphicon-ok-sign', 'status-ok']
|
10
|
+
when 'cancelled'
|
11
|
+
['glyphicon-warning-sign', 'status-error']
|
12
|
+
else
|
13
|
+
'glyphicon-question-sign'
|
14
|
+
end
|
16
15
|
content_tag(:i, ' '.html_safe, :class => "glyphicon #{icon}") + content_tag(:span, recurring_logic.humanized_state, :class => status)
|
17
16
|
end
|
18
17
|
|
@@ -20,14 +19,14 @@ module ForemanTasks
|
|
20
19
|
return 'task-status pficon-help' if task.state != 'stopped'
|
21
20
|
|
22
21
|
icon_class = case task.result
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
22
|
+
when 'success'
|
23
|
+
'pficon-ok'
|
24
|
+
when 'error'
|
25
|
+
'pficon-error-circle-o'
|
26
|
+
when 'warning'
|
27
|
+
'pficon-ok status-warn'
|
28
|
+
else
|
29
|
+
'pficon-help'
|
31
30
|
end
|
32
31
|
|
33
32
|
"task-status #{icon_class}"
|
@@ -38,7 +37,7 @@ module ForemanTasks
|
|
38
37
|
_('N/A')
|
39
38
|
else
|
40
39
|
content_tag :span, (time > Time.now.utc ? _('in %s') : _('%s ago')) % time_ago_in_words(time),
|
41
|
-
|
40
|
+
:'data-original-title' => time.try(:in_time_zone), :rel => 'twipsy'
|
42
41
|
end
|
43
42
|
end
|
44
43
|
|
@@ -47,14 +46,14 @@ module ForemanTasks
|
|
47
46
|
_('N/A')
|
48
47
|
else
|
49
48
|
content_tag :span, distance_of_time_in_words(start, finish),
|
50
|
-
|
49
|
+
:'data-original-title' => number_with_delimiter((finish - start).to_i) + _(' seconds'), :rel => 'twipsy'
|
51
50
|
end
|
52
51
|
end
|
53
52
|
|
54
53
|
def recurring_logic_action_buttons(recurring_logic)
|
55
54
|
buttons = []
|
56
55
|
if authorized_for(:permission => :edit_recurring_logics, :auth_object => recurring_logic)
|
57
|
-
buttons << link_to(N_(
|
56
|
+
buttons << link_to(N_('Cancel'), cancel_foreman_tasks_recurring_logic_path(recurring_logic), :method => :post, :class => 'btn btn-danger') unless %w(cancelled finished).include? recurring_logic.state
|
58
57
|
end
|
59
58
|
button_group buttons
|
60
59
|
end
|
@@ -107,7 +106,7 @@ module ForemanTasks
|
|
107
106
|
end
|
108
107
|
end
|
109
108
|
|
110
|
-
def trigger_selector(f, triggering = Triggering.new,
|
109
|
+
def trigger_selector(f, triggering = Triggering.new, _options = {})
|
111
110
|
render :partial => 'common/trigger_form', :locals => { :f => f, :triggering => triggering }
|
112
111
|
end
|
113
112
|
|
@@ -116,15 +115,16 @@ module ForemanTasks
|
|
116
115
|
def future_mode_fieldset(f, triggering)
|
117
116
|
tags = []
|
118
117
|
tags << text_f(f, :start_at_raw, :label => _('Start at'), :placeholder => 'YYYY-mm-dd HH:MM')
|
119
|
-
tags << text_f(f, :start_before_raw, :label => _('Start before'), :placeholder => 'YYYY-mm-dd HH:MM',
|
120
|
-
|
118
|
+
tags << text_f(f, :start_before_raw, :label => _('Start before'), :placeholder => 'YYYY-mm-dd HH:MM',
|
119
|
+
:label_help => _('Indicates that the action should be cancelled if it cannot be started before this time.'))
|
120
|
+
content_tag(:fieldset, nil, :id => 'trigger_mode_future', :class => "trigger_mode_form #{'hidden' unless triggering.future?}") do
|
121
121
|
tags.join.html_safe
|
122
122
|
end
|
123
123
|
end
|
124
124
|
|
125
125
|
def recurring_mode_fieldset(f, triggering)
|
126
126
|
tags = []
|
127
|
-
tags << selectable_f(f, :input_type, %w(cronline monthly weekly daily hourly), {}, :label => _(
|
127
|
+
tags << selectable_f(f, :input_type, %w(cronline monthly weekly daily hourly), {}, :label => _('Repeats'), :id => 'input_type_selector')
|
128
128
|
tags += [
|
129
129
|
cronline_fieldset(f, triggering),
|
130
130
|
monthly_fieldset(f, triggering),
|
@@ -150,17 +150,15 @@ module ForemanTasks
|
|
150
150
|
# TRANSLATORS: this translation is referring to an option which is a time interval
|
151
151
|
_('is day of week (range: 0-6)')
|
152
152
|
].map { |opt| content_tag(:li, opt) }.join
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
content_tag(:fieldset, nil, :class => "input_type_form #{'hidden' unless triggering.input_type == :cronline}", :id => "input_type_cronline") do
|
158
|
-
text_f f, :cronline, :label => _('Cron line'), :placeholder => '* * * * *', :help_inline => help
|
153
|
+
|
154
|
+
help = _("Cron line format 'a b c d e', where: %s") % "<br><ol type=\"a\">#{options}</ol>".html_safe
|
155
|
+
content_tag(:fieldset, nil, :class => "input_type_form #{'hidden' unless triggering.input_type == :cronline}", :id => 'input_type_cronline') do
|
156
|
+
text_f f, :cronline, :label => _('Cron line'), :placeholder => '* * * * *', :label_help => help
|
159
157
|
end
|
160
158
|
end
|
161
159
|
|
162
160
|
def monthly_fieldset(f, triggering)
|
163
|
-
content_tag(:fieldset, nil, :id =>
|
161
|
+
content_tag(:fieldset, nil, :id => 'input_type_monthly', :class => "input_type_form #{'hidden' unless triggering.input_type == :monthly}") do
|
164
162
|
text_f(f, :days, :label => _('Days'), :placeholder => '1,2...')
|
165
163
|
end
|
166
164
|
end
|
@@ -170,14 +168,14 @@ module ForemanTasks
|
|
170
168
|
f.fields_for :days_of_week do |days_of_week|
|
171
169
|
inline_checkboxes_f(days_of_week,
|
172
170
|
:weekday,
|
173
|
-
{ :label => _(
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
171
|
+
{ :label => _('Days of week') },
|
172
|
+
1 => _('Mon'),
|
173
|
+
2 => _('Tue'),
|
174
|
+
3 => _('Wed'),
|
175
|
+
4 => _('Thu'),
|
176
|
+
5 => _('Fri'),
|
177
|
+
6 => _('Sat'),
|
178
|
+
7 => _('Sun'))
|
181
179
|
end
|
182
180
|
end
|
183
181
|
end
|
@@ -186,16 +184,16 @@ module ForemanTasks
|
|
186
184
|
tags = []
|
187
185
|
tags << content_tag(:fieldset, nil, :id => 'time_picker', :class => "input_type_form #{'hidden' if triggering.input_type == :cronline}") do
|
188
186
|
# TRANSLATORS: Time widget for when a task should start
|
189
|
-
time_f(f, :time, { :label => _(
|
187
|
+
time_f(f, :time, { :label => _('At'), :id => 'something' }, :time_separator => '')
|
190
188
|
end
|
191
189
|
tags << number_f(f, :max_iteration, :label => _('Repeat N times'), :min => 1, :placeholder => 'N')
|
192
|
-
tags << field(f, :end_time_limit_select, :label => _(
|
193
|
-
radio_button_f(f, :end_time_limited, :value => false, :checked=> true, :text => _(
|
194
|
-
|
195
|
-
|
190
|
+
tags << field(f, :end_time_limit_select, :label => _('Ends'), :control_group_id => 'end_time_limit_select') do
|
191
|
+
radio_button_f(f, :end_time_limited, :value => false, :checked => true, :text => _('Never'), :class => 'end_time_limit_selector') +
|
192
|
+
# TRANSLATORS: Button text for saying when a task should end
|
193
|
+
radio_button_f(f, :end_time_limited, :value => true, :text => _('On'), :class => 'end_time_limit_selector')
|
196
194
|
end
|
197
195
|
tags << content_tag(:fieldset, nil, :id => 'end_time_limit_form', :class => "input_type_form #{'hidden' unless triggering.end_time_limited}") do
|
198
|
-
datetime_f f, :end_time, { :label => _(
|
196
|
+
datetime_f f, :end_time, { :label => _('Ends at') }, :use_month_numbers => true, :use_two_digit_numbers => true, :time_separator => ''
|
199
197
|
end
|
200
198
|
tags.join.html_safe
|
201
199
|
end
|
@@ -1,21 +1,20 @@
|
|
1
1
|
module Actions
|
2
|
-
|
3
2
|
class Actions::ActionWithSubPlans < Actions::EntryAction
|
4
|
-
|
5
3
|
middleware.use Actions::Middleware::KeepCurrentUser
|
6
4
|
|
7
5
|
include Dynflow::Action::WithSubPlans
|
6
|
+
include Dynflow::Action::WithBulkSubPlans
|
8
7
|
|
9
|
-
def plan(*
|
8
|
+
def plan(*_args)
|
10
9
|
raise NotImplementedError
|
11
10
|
end
|
12
11
|
|
13
12
|
def humanized_output
|
14
13
|
return unless counts_set?
|
15
|
-
_(
|
16
|
-
|
17
|
-
|
18
|
-
|
14
|
+
_('%{total} task(s), %{success} success, %{failed} fail') %
|
15
|
+
{ total: output[:total_count],
|
16
|
+
success: output[:success_count],
|
17
|
+
failed: output[:failed_count] }
|
19
18
|
end
|
20
19
|
|
21
20
|
def run_progress
|
@@ -25,6 +24,5 @@ module Actions
|
|
25
24
|
0.1
|
26
25
|
end
|
27
26
|
end
|
28
|
-
|
29
27
|
end
|
30
28
|
end
|
data/app/lib/actions/base.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
module Actions
|
2
2
|
class Base < Dynflow::Action
|
3
|
-
|
4
3
|
def task
|
5
4
|
@task ||= ::ForemanTasks::Task::DynflowTask.where(:external_id => execution_plan_id).first!
|
6
5
|
end
|
@@ -8,7 +7,7 @@ module Actions
|
|
8
7
|
# This method says what data form input gets into the task details in Rest API
|
9
8
|
# By default, it sends the whole input there.
|
10
9
|
def task_input
|
11
|
-
|
10
|
+
input
|
12
11
|
end
|
13
12
|
|
14
13
|
# This method says what data form output gets into the task details in Rest API
|
@@ -16,7 +15,7 @@ module Actions
|
|
16
15
|
# perhaps also aggraget data from subactions if needed (using +all_actions+) method
|
17
16
|
# of Dynflow::Action::Presenter
|
18
17
|
def task_output
|
19
|
-
|
18
|
+
output
|
20
19
|
end
|
21
20
|
|
22
21
|
# This method should return humanized description of the action, e.g. "Install package"
|
@@ -27,7 +26,7 @@ module Actions
|
|
27
26
|
# This method should return String or Array<String> describing input for the task
|
28
27
|
def humanized_input
|
29
28
|
if task_input.blank?
|
30
|
-
|
29
|
+
''
|
31
30
|
else
|
32
31
|
task_input.pretty_inspect
|
33
32
|
end
|
@@ -38,7 +37,7 @@ module Actions
|
|
38
37
|
# description of restuls of the action
|
39
38
|
def humanized_output
|
40
39
|
if task_output.blank?
|
41
|
-
|
40
|
+
''
|
42
41
|
else
|
43
42
|
task_output.pretty_inspect
|
44
43
|
end
|
@@ -52,8 +51,8 @@ module Actions
|
|
52
51
|
end
|
53
52
|
|
54
53
|
def already_running?
|
55
|
-
ForemanTasks::Task::DynflowTask.for_action(self.class)
|
56
|
-
|
54
|
+
ForemanTasks::Task::DynflowTask.for_action(self.class)
|
55
|
+
.running.where('external_id != ?', execution_plan_id).any?
|
57
56
|
end
|
58
57
|
|
59
58
|
def serializer_class
|
@@ -1,5 +1,4 @@
|
|
1
1
|
module Actions
|
2
|
-
|
3
2
|
class BulkAction < Actions::ActionWithSubPlans
|
4
3
|
# == Parameters:
|
5
4
|
# actions_class::
|
@@ -22,9 +21,9 @@ module Actions
|
|
22
21
|
|
23
22
|
def humanized_name
|
24
23
|
if task.sub_tasks.first
|
25
|
-
|
24
|
+
task.sub_tasks.first.humanized[:action]
|
26
25
|
else
|
27
|
-
_(
|
26
|
+
_('Bulk action')
|
28
27
|
end
|
29
28
|
end
|
30
29
|
|
@@ -36,7 +35,7 @@ module Actions
|
|
36
35
|
a_sub_task = task.sub_tasks.first
|
37
36
|
if a_sub_task
|
38
37
|
[a_sub_task.humanized[:action].to_s.downcase] +
|
39
|
-
|
38
|
+
Array(a_sub_task.humanized[:input]) + ['...']
|
40
39
|
end
|
41
40
|
end
|
42
41
|
|
@@ -45,7 +44,7 @@ module Actions
|
|
45
44
|
def create_sub_plans
|
46
45
|
action_class = input[:action_class].constantize
|
47
46
|
target_class = input[:target_class].constantize
|
48
|
-
targets = target_class.where(:id =>
|
47
|
+
targets = target_class.where(:id => current_batch)
|
49
48
|
|
50
49
|
targets.map do |target|
|
51
50
|
trigger(action_class, target, *input[:args])
|
@@ -53,13 +52,18 @@ module Actions
|
|
53
52
|
end
|
54
53
|
|
55
54
|
def check_targets!(targets)
|
56
|
-
if targets.empty?
|
57
|
-
fail ::Foreman::Exception.new(N_("Empty bulk action"))
|
58
|
-
end
|
55
|
+
raise Foreman::Exception, N_('Empty bulk action') if targets.empty?
|
59
56
|
if targets.map(&:class).uniq.length > 1
|
60
|
-
|
57
|
+
raise Foreman::Exception, N_('The targets are of different types')
|
61
58
|
end
|
62
59
|
end
|
63
60
|
|
61
|
+
def batch(from, size)
|
62
|
+
input[:target_ids].slice(from, size)
|
63
|
+
end
|
64
|
+
|
65
|
+
def total_count
|
66
|
+
input[:target_ids].count
|
67
|
+
end
|
64
68
|
end
|
65
69
|
end
|
@@ -1,5 +1,4 @@
|
|
1
1
|
module Actions
|
2
|
-
|
3
2
|
class EntryAction < Actions::Base
|
4
3
|
include Helpers::ArgsSerialization
|
5
4
|
include Helpers::Lock
|
@@ -57,12 +56,11 @@ module Actions
|
|
57
56
|
end
|
58
57
|
|
59
58
|
def delay(_schedule_options, *args)
|
60
|
-
|
59
|
+
serializer_class.new args
|
61
60
|
end
|
62
61
|
|
63
62
|
def self.serializer_class
|
64
63
|
Serializers::ActiveRecordSerializer
|
65
64
|
end
|
66
|
-
|
67
65
|
end
|
68
66
|
end
|
@@ -1,14 +1,12 @@
|
|
1
1
|
module Actions
|
2
2
|
module Foreman
|
3
3
|
module Host
|
4
|
-
|
5
4
|
class ImportFacts < Actions::EntryAction
|
6
|
-
|
7
5
|
def resource_locks
|
8
6
|
:import_facts
|
9
7
|
end
|
10
8
|
|
11
|
-
def plan(
|
9
|
+
def plan(_host_type, host_name, facts, certname, proxy_id)
|
12
10
|
facts['domain'].try(:downcase!)
|
13
11
|
host = ::Host::Base.import_host(host_name, certname, facts, proxy_id)
|
14
12
|
action_subject(host, :facts => facts)
|
@@ -37,7 +35,7 @@ module Actions
|
|
37
35
|
end
|
38
36
|
|
39
37
|
def humanized_name
|
40
|
-
_(
|
38
|
+
_('Import facts')
|
41
39
|
end
|
42
40
|
|
43
41
|
def humanized_input
|
@@ -48,7 +46,6 @@ module Actions
|
|
48
46
|
def self.cleanup_after
|
49
47
|
'30d'
|
50
48
|
end
|
51
|
-
|
52
49
|
end
|
53
50
|
end
|
54
51
|
end
|