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.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby_tests.yml +1 -1
  3. data/app/lib/actions/foreman/host/import_facts.rb +1 -6
  4. data/app/lib/actions/helpers/with_delegated_action.rb +2 -2
  5. data/app/lib/actions/middleware/watch_delegated_proxy_sub_tasks.rb +1 -1
  6. data/app/lib/actions/proxy_action.rb +19 -5
  7. data/app/lib/actions/trigger_proxy_batch.rb +4 -1
  8. data/app/models/foreman_tasks/remote_task.rb +3 -2
  9. data/app/views/foreman_tasks/recurring_logics/index.html.erb +11 -11
  10. data/app/views/foreman_tasks/task_groups/_common.html.erb +2 -2
  11. data/app/views/foreman_tasks/task_groups/recurring_logic_task_groups/_recurring_logic_task_group.html.erb +11 -11
  12. data/config/routes.rb +0 -1
  13. data/lib/foreman_tasks/cleaner.rb +1 -1
  14. data/lib/foreman_tasks/dynflow/configuration.rb +1 -1
  15. data/lib/foreman_tasks/engine.rb +1 -1
  16. data/lib/foreman_tasks/version.rb +1 -1
  17. data/lib/tasks/gettext.rake +1 -0
  18. data/locale/action_names.rb +2 -3
  19. data/locale/de/LC_MESSAGES/foreman_tasks.mo +0 -0
  20. data/locale/de/foreman_tasks.po +873 -0
  21. data/locale/en/foreman_tasks.po +3 -6
  22. data/locale/es/LC_MESSAGES/foreman_tasks.mo +0 -0
  23. data/locale/es/foreman_tasks.po +874 -0
  24. data/locale/foreman_tasks.pot +20 -25
  25. data/locale/fr/LC_MESSAGES/foreman_tasks.mo +0 -0
  26. data/locale/fr/foreman_tasks.po +3 -6
  27. data/locale/ja/LC_MESSAGES/foreman_tasks.mo +0 -0
  28. data/locale/ja/foreman_tasks.po +3 -6
  29. data/locale/ka/LC_MESSAGES/foreman_tasks.mo +0 -0
  30. data/locale/ka/foreman_tasks.po +871 -0
  31. data/locale/ko/LC_MESSAGES/foreman_tasks.mo +0 -0
  32. data/locale/ko/foreman_tasks.po +869 -0
  33. data/locale/pt_BR/LC_MESSAGES/foreman_tasks.mo +0 -0
  34. data/locale/pt_BR/foreman_tasks.po +874 -0
  35. data/locale/ru/LC_MESSAGES/foreman_tasks.mo +0 -0
  36. data/locale/ru/foreman_tasks.po +873 -0
  37. data/locale/zh_CN/LC_MESSAGES/foreman_tasks.mo +0 -0
  38. data/locale/zh_CN/foreman_tasks.po +3 -6
  39. data/locale/zh_TW/LC_MESSAGES/foreman_tasks.mo +0 -0
  40. data/locale/zh_TW/foreman_tasks.po +870 -0
  41. metadata +17 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1c6773ac47a0c5b8e3e28da1461a348510e8595da0bd2d08feafd78092394fb2
4
- data.tar.gz: 40d4c506cd3d31b72355e8c2d4255c854c703be6be49644b8d30a55032bd9b2b
3
+ metadata.gz: aac3cfa51e86a12880e7cf4f12d8189f2b2c58dd50a18843d643dd926d089cf1
4
+ data.tar.gz: 140c1aa20f3d3ea8e41be0ac81ce317a90445e4d5fa224dfb259cfccac5d93e8
5
5
  SHA512:
6
- metadata.gz: 1d05cdb24aea11a647028a4b1c314cf5f0db3d95459bbcfa0c52aa8f53263b6deb3d27ee23bbb7ec2a227e1ebbead0a432c0ecf6701131b2f7921b39145085ab
7
- data.tar.gz: 777127d69a84b7c94780f78ad5a8aa5754ad246e6019a9f35c518e0b246d73b8f6f31acc84029b1b0648b8ff3ba8f167efc4fad7f4116cb4eb2f3fad7b850591
6
+ metadata.gz: b956214af8e654f7ce858c99ccab6572b7cc4bcfd6958a593a6330925884a4848bcf9c6a95a293e8cf278bfec2f4f119547c2963b60b177fa361b911d2545e38
7
+ data.tar.gz: 8b7ba00268393f535320409fbccd4ef9bae0233b965b12eed198698b87495e679f80143791897e3f98357f355a0cf677c3d89b610ba8fcd95d8632ea12841886
@@ -29,7 +29,7 @@ jobs:
29
29
  fail-fast: false
30
30
  matrix:
31
31
  foreman-core-branch: [develop]
32
- ruby-version: [2.5, 2.6, 2.7]
32
+ ruby-version: [2.7]
33
33
  node-version: [12]
34
34
  steps:
35
35
  - run: sudo apt-get update
@@ -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 = if SETTINGS[:version].short > '1.16'
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(::Actions::ProxyAction, proxy, klass, options)
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; end
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 ProxyActionStopped
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
- check_task_status
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
- batch.each { |remote_task| remote_task.update_from_batch_trigger({}) }
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::ProxyActionStopped.new,
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 SETTINGS[:version].short <= '1.13' ? help_path : help_button %>
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><%= N_("Cron line") %></th>
42
- <th><%= N_("Task count") %></th>
43
- <th><%= N_("Action") %></th>
44
- <th><%= N_("Last occurrence") %></th>
45
- <th><%= N_("Next occurrence") %></th>
46
- <th><%= N_("Current iteration") %></th>
47
- <th><%= N_("Iteration limit") %></th>
48
- <th><%= N_("Repeat until") %></th>
49
- <th><%= N_("State") %></th>
50
- <th><%= N_("Purpose") %></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><%= N_('ID') %></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><%= N_('Task count') %></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>ID</th>
4
+ <th><%= _('ID') %></th>
5
5
  <td><%= link_to(recurring_logic.id, recurring_logic) %></td>
6
6
  </tr>
7
7
  <tr>
8
- <th><%= N_("Cron line") %></th>
8
+ <th><%= _("Cron line") %></th>
9
9
  <td><%= recurring_logic.cron_line %></td>
10
10
  </tr>
11
11
  <tr>
12
- <th><%= N_("Action") %></th>
12
+ <th><%= _("Action") %></th>
13
13
  <td><%= format_task_input(recurring_logic.tasks.last) %></td>
14
14
  </tr>
15
15
  <tr>
16
- <th><%= N_("Last occurrence") %></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><%= N_("Next occurrence") %></th>
20
+ <th><%= _("Next occurrence") %></th>
21
21
  <td><%= recurring_logic_next_occurrence recurring_logic %></td>
22
22
  </tr>
23
23
  <tr>
24
- <th><%= N_("Current iteration") %></th>
24
+ <th><%= _("Current iteration") %></th>
25
25
  <td><%= recurring_logic.iteration %></td>
26
26
  </tr>
27
27
  <tr>
28
- <th><%= N_("Iteration limit") %></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><%= N_("Repeat until") %></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><%= N_("State") %></th>
36
+ <th><%= _("State") %></th>
37
37
  <td><%= recurring_logic_state(recurring_logic) %></td>
38
38
  </tr>
39
39
  <tr>
40
- <th><%= N_("Purpose") %></th>
40
+ <th><%= _("Purpose") %></th>
41
41
  <td><%= recurring_logic.purpose %></td>
42
42
  </tr>
43
43
  <tr>
44
- <th><%= N_("Task count") %></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[:'foreman-tasks'] && SETTINGS[:'foreman-tasks'][:cleanup] || {}
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[:'foreman-tasks'] && SETTINGS[:'foreman-tasks'][:backup]
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
@@ -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 if Gem::Version.new(::SETTINGS[:version]) >= Gem::Version.new('2.5')
169
+ world.middleware.use ::Actions::Middleware::LoadSettingValues
170
170
  end
171
171
  end
172
172
 
@@ -1,3 +1,3 @@
1
1
  module ForemanTasks
2
- VERSION = '7.0.0'.freeze
2
+ VERSION = '7.1.1'.freeze
3
3
  end
@@ -16,6 +16,7 @@ if gettext_find_task
16
16
  .all_action_names
17
17
  .uniq
18
18
  .map { |n| %[_("#{n}")] }
19
+ .sort
19
20
  .join("\n")
20
21
  end
21
22
  end
@@ -1,5 +1,4 @@
1
1
  # Autogenerated!
2
- _("Import Puppet classes")
3
- _("Import facts")
4
2
  _("Action with sub plans")
5
- _("Remote action:")
3
+ _("Import Puppet classes")
4
+ _("Import facts")