foreman_remote_execution 1.4.3 → 1.4.4

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.
Files changed (25) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/{execution_interface.js → foreman_remote_execution/execution_interface.js} +0 -0
  3. data/app/assets/javascripts/{job_templates.js → foreman_remote_execution/job_templates.js} +0 -0
  4. data/app/assets/javascripts/{template_input.js → foreman_remote_execution/template_input.js} +0 -0
  5. data/app/assets/javascripts/{template_invocation.js → foreman_remote_execution/template_invocation.js} +0 -0
  6. data/app/assets/stylesheets/{job_invocations.css.scss → foreman_remote_execution/job_invocations.css.scss} +0 -0
  7. data/app/assets/stylesheets/{modal_window.css.scss → foreman_remote_execution/modal_window.css.scss} +0 -0
  8. data/app/assets/stylesheets/{template_invocation.css.scss → foreman_remote_execution/template_invocation.css.scss} +0 -0
  9. data/app/helpers/job_invocation_output_helper.rb +41 -0
  10. data/app/lib/actions/remote_execution/run_hosts_job.rb +6 -0
  11. data/app/models/job_invocation.rb +8 -0
  12. data/app/services/ui_notifications/remote_execution_jobs/base_job_finish.rb +31 -0
  13. data/app/views/job_invocations/_preview_hosts_modal.html.erb +1 -1
  14. data/app/views/job_invocations/new.html.erb +2 -2
  15. data/app/views/job_invocations/show.html.erb +2 -2
  16. data/app/views/job_templates/_import_job_template_modal.html.erb +1 -1
  17. data/app/views/job_templates/edit.html.erb +1 -1
  18. data/app/views/job_templates/index.html.erb +2 -2
  19. data/app/views/job_templates/new.html.erb +1 -1
  20. data/app/views/template_invocations/_output_line_set.html.erb +1 -1
  21. data/app/views/template_invocations/show.html.erb +2 -2
  22. data/db/seeds.d/50-notification_blueprints.rb +18 -0
  23. data/lib/foreman_remote_execution/version.rb +1 -1
  24. data/test/unit/actions/run_hosts_job_test.rb +9 -0
  25. metadata +12 -9
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 25f04758b068647b6124cb3285bcb3f98ab130f5
4
- data.tar.gz: 29f20e013ea7b9f19afe485faf1fafdb0f51fc56
3
+ metadata.gz: 4e8f5aba0c8857327a44b058d06cb31e6c576de5
4
+ data.tar.gz: d2c6316d816a5db84313aa90067d87c40a66940c
5
5
  SHA512:
6
- metadata.gz: ca420660d4db7e9af501f77b6ec8083b2b1014eaf0316bb887179cc491076b3eb6cbe13b255d4e868664e290c7cda18dda1d035d53d577c4f86c2ce4daf844cd
7
- data.tar.gz: fa0e3c67c6a03f9afb9084b78c8c4c5666c9d217b1be33c6944fcde3eee2a86d278433c5c8f1d3d72563b389e651ecb60453facbcae4d7302ca5057a672fbce0
6
+ metadata.gz: 4bd554adff07566ba0e32974f2de649cae60918660b725cb7bdbbebe41a5bf0fa2b8389f4801b121b585c68cc50db01715d787df1a87134551499d69e2c8989d
7
+ data.tar.gz: 4504b9532f5db6be4c371b435b5edbd230e080c15060d8706f50bc254421f435d244b57b1446220ea7516de1dc571e3b5eb2e7e0a3ff2089a9aecad5498c8842
@@ -0,0 +1,41 @@
1
+ module JobInvocationOutputHelper
2
+ CONSOLE_COLOR = {
3
+ '31' => 'red',
4
+ '32' => 'lightgreen',
5
+ '33' => 'orange',
6
+ '34' => 'deepskyblue',
7
+ '35' => 'mediumpurple',
8
+ '36' => 'cyan',
9
+ '37' => 'grey',
10
+ '91' => 'red',
11
+ '92' => 'lightgreen',
12
+ '93' => 'yellow',
13
+ '94' => 'lightblue',
14
+ '95' => 'violet',
15
+ '96' => 'turquoise',
16
+ '0' => 'default',
17
+ }.tap { |h| h.default = 'default' }.freeze
18
+
19
+ def colorize_line(line)
20
+ line = line.gsub(/\e\[.*?m/) do |seq|
21
+ color = seq[/(\d+)m/,1]
22
+ "{{{format color:#{color}}}}"
23
+ end
24
+
25
+ current_color = 'default'
26
+ out = %{<span style="color: #{@current_color}">}
27
+ parts = line.split(/({{{format.*?}}})/)
28
+ parts.each do |console_line|
29
+ if console_line.include?('{{{format')
30
+ if (color_index = console_line[/color:(\d+)/, 1]).present?
31
+ current_color = CONSOLE_COLOR[color_index]
32
+ out << %{</span><span style="color: #{current_color}">}
33
+ end
34
+ else
35
+ out << h(console_line)
36
+ end
37
+ end
38
+ out << %{</span>}
39
+ out
40
+ end
41
+ end
@@ -66,6 +66,12 @@ module Actions
66
66
  super unless event == Dynflow::Action::Skip
67
67
  end
68
68
 
69
+ def finalize
70
+ # creating the success notification should be the very last thing this tasks do
71
+ job_invocation = JobInvocation.find(input[:job_invocation_id])
72
+ job_invocation.build_notification.deliver!
73
+ end
74
+
69
75
  def humanized_input
70
76
  input.fetch(:job_invocation, {}).fetch(:description, '')
71
77
  end
@@ -78,6 +78,14 @@ class JobInvocation < ApplicationRecord
78
78
  { :conditions => sanitize_sql_for_conditions(["foreman_tasks_recurring_logics.id IS #{not_operator} NULL"]), :joins => :recurring_logic }
79
79
  end
80
80
 
81
+ def notification_recipients_ids
82
+ [ self.targeting.user_id ]
83
+ end
84
+
85
+ def build_notification
86
+ UINotifications::RemoteExecutionJobs::BaseJobFinish.new(self)
87
+ end
88
+
81
89
  def status
82
90
  HostStatus::ExecutionStatus::ExecutionTaskStatusMapper.new(task).status
83
91
  end
@@ -0,0 +1,31 @@
1
+ module UINotifications
2
+ module RemoteExecutionJobs
3
+ class BaseJobFinish < ::UINotifications::Base
4
+ def initialize(job_invocation)
5
+ @subject = job_invocation
6
+ end
7
+
8
+ def deliver!
9
+ ::Notification.create!(
10
+ :audience => Notification::AUDIENCE_USER,
11
+ :notification_blueprint => blueprint,
12
+ :initiator => initiator,
13
+ :message => message,
14
+ :subject => subject
15
+ )
16
+ end
17
+
18
+ def initiator
19
+ User.anonymous_admin
20
+ end
21
+
22
+ def blueprint
23
+ @blueprint ||= NotificationBlueprint.unscoped.find_by(:name => 'rex_job_succeeded')
24
+ end
25
+
26
+ def message
27
+ UINotifications::StringParser.new(blueprint.message, { subject: subject })
28
+ end
29
+ end
30
+ end
31
+ end
@@ -1,4 +1,4 @@
1
- <% stylesheet 'modal_window' %>
1
+ <% stylesheet 'foreman_remote_execution/modal_window' %>
2
2
 
3
3
  <!-- modal window -->
4
4
  <div class="modal fade" id="previewHostsModal" role="dialog" aria-hidden="true" data-url="<%= preview_hosts_job_invocations_path %>">
@@ -1,4 +1,4 @@
1
- <% javascript 'template_invocation' %>
2
- <% stylesheet 'template_invocation' %>
1
+ <% javascript 'foreman_remote_execution/template_invocation' %>
2
+ <% stylesheet 'foreman_remote_execution/template_invocation' %>
3
3
  <% title _('Job invocation') %>
4
4
  <%= render :partial => 'form' %>
@@ -1,6 +1,6 @@
1
1
  <% title @job_invocation.description, trunc_with_tooltip(@job_invocation.description, 120) %>
2
- <% stylesheet 'job_invocations' %>
3
- <% javascript 'charts', 'template_invocation' %>
2
+ <% stylesheet 'foreman_remote_execution/job_invocations' %>
3
+ <% javascript 'charts', 'foreman_remote_execution/template_invocation' %>
4
4
 
5
5
  <% if @job_invocation.task %>
6
6
  <% title_actions(button_group(job_invocation_task_buttons(@job_invocation.task))) %>
@@ -1,4 +1,4 @@
1
- <% stylesheet 'modal_window' %>
1
+ <% stylesheet 'foreman_remote_execution/modal_window' %>
2
2
 
3
3
  <!-- modal window -->
4
4
  <div class="modal fade" id="importJobTemplateModal" role="dialog" aria-hidden="true">
@@ -1,5 +1,5 @@
1
1
  <%= javascript 'lookup_keys' %>
2
- <%= javascript 'template_input' %>
2
+ <%= javascript 'foreman_remote_execution/template_input' %>
3
3
 
4
4
  <% title _("Edit Job Template") %>
5
5
 
@@ -1,6 +1,6 @@
1
- <%= javascript 'job_templates' %>
1
+ <%= javascript 'foreman_remote_execution/job_templates' %>
2
2
  <%= javascript 'lookup_keys' %>
3
- <%= javascript 'template_input' %>
3
+ <%= javascript 'foreman_remote_execution/template_input' %>
4
4
 
5
5
  <% title _("Job Templates") %>
6
6
  <% title_actions(documentation_button_rex('3.1JobTemplates'),
@@ -1,5 +1,5 @@
1
1
  <%= javascript 'lookup_keys' %>
2
- <%= javascript 'template_input' %>
2
+ <%= javascript 'foreman_remote_execution/template_input' %>
3
3
 
4
4
  <% title _("New Job Template") %>
5
5
 
@@ -2,6 +2,6 @@
2
2
  <%= content_tag :div, :class => 'line ' + output_line_set['output_type'], :data => { :timestamp => output_line_set['timestamp'] } do %>
3
3
 
4
4
  <%= content_tag(:span, (@line_counter += 1).to_s.rjust(4).gsub(' ', '&nbsp;').html_safe + ':', :class => 'counter', :title => (output_line_set['timestamp'] && Time.at(output_line_set['timestamp']))) %>
5
- <%= content_tag(:div, (line.empty? ? '&nbsp;' : h(line)).html_safe, :class => 'content') %>
5
+ <%= content_tag(:div, (line.empty? ? '&nbsp;' : colorize_line(line)).html_safe, :class => 'content') %>
6
6
  <% end %>
7
7
  <% end %>
@@ -1,6 +1,6 @@
1
1
  <% title _('Detail of %s run') % @template_invocation.job_invocation.job_category %>
2
- <% stylesheet 'template_invocation' %>
3
- <% javascript 'template_invocation' %>
2
+ <% stylesheet 'foreman_remote_execution/template_invocation' %>
3
+ <% javascript 'foreman_remote_execution/template_invocation' %>
4
4
 
5
5
  <div id="title_action">
6
6
  <div class="btn-toolbar pull-right">
@@ -0,0 +1,18 @@
1
+ blueprints = [
2
+ {
3
+ group: N_('Jobs'),
4
+ name: 'rex_job_succeeded',
5
+ message: N_("A job '%{subject}' has finished successfully"),
6
+ level: 'success',
7
+ actions:
8
+ {
9
+ links:
10
+ [
11
+ path_method: :job_invocation_path,
12
+ title: N_('Job Details')
13
+ ]
14
+ }
15
+ }
16
+ ]
17
+
18
+ blueprints.each { |blueprint| UINotifications::Seed.new(blueprint).configure }
@@ -1,3 +1,3 @@
1
1
  module ForemanRemoteExecution
2
- VERSION = '1.4.3'.freeze
2
+ VERSION = '1.4.4'.freeze
3
3
  end
@@ -119,5 +119,14 @@ module ForemanRemoteExecution
119
119
  planned.input[:concurrency_control][:level].wont_be_empty
120
120
  end
121
121
  end
122
+
123
+ describe 'notifications' do
124
+ it 'creates notification on sucess run' do
125
+ FactoryBot.create(:notification_blueprint, :name => 'rex_job_succeeded')
126
+ assert_difference 'NotificationRecipient.where(:user_id => targeting.user.id).count' do
127
+ finalize_action planned
128
+ end
129
+ end
130
+ end
122
131
  end
123
132
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: foreman_remote_execution
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.3
4
+ version: 1.4.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Foreman Remote Execution team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-01-31 00:00:00.000000000 Z
11
+ date: 2018-02-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: deface
@@ -126,13 +126,13 @@ files:
126
126
  - LICENSE
127
127
  - README.md
128
128
  - Rakefile
129
- - app/assets/javascripts/execution_interface.js
130
- - app/assets/javascripts/job_templates.js
131
- - app/assets/javascripts/template_input.js
132
- - app/assets/javascripts/template_invocation.js
133
- - app/assets/stylesheets/job_invocations.css.scss
134
- - app/assets/stylesheets/modal_window.css.scss
135
- - app/assets/stylesheets/template_invocation.css.scss
129
+ - app/assets/javascripts/foreman_remote_execution/execution_interface.js
130
+ - app/assets/javascripts/foreman_remote_execution/job_templates.js
131
+ - app/assets/javascripts/foreman_remote_execution/template_input.js
132
+ - app/assets/javascripts/foreman_remote_execution/template_invocation.js
133
+ - app/assets/stylesheets/foreman_remote_execution/job_invocations.css.scss
134
+ - app/assets/stylesheets/foreman_remote_execution/modal_window.css.scss
135
+ - app/assets/stylesheets/foreman_remote_execution/template_invocation.css.scss
136
136
  - app/controllers/api/v2/foreign_input_sets_controller.rb
137
137
  - app/controllers/api/v2/job_invocations_controller.rb
138
138
  - app/controllers/api/v2/job_templates_controller.rb
@@ -149,6 +149,7 @@ files:
149
149
  - app/controllers/template_invocations_controller.rb
150
150
  - app/helpers/concerns/foreman_remote_execution/hosts_helper_extensions.rb
151
151
  - app/helpers/concerns/foreman_remote_execution/job_templates_extensions.rb
152
+ - app/helpers/job_invocation_output_helper.rb
152
153
  - app/helpers/remote_execution_helper.rb
153
154
  - app/lib/actions/middleware/bind_job_invocation.rb
154
155
  - app/lib/actions/remote_execution/run_host_job.rb
@@ -190,6 +191,7 @@ files:
190
191
  - app/overrides/execution_interface.rb
191
192
  - app/overrides/subnet_proxies.rb
192
193
  - app/services/remote_execution_proxy_selector.rb
194
+ - app/services/ui_notifications/remote_execution_jobs/base_job_finish.rb
193
195
  - app/views/api/v2/foreign_input_sets/base.json.rabl
194
196
  - app/views/api/v2/foreign_input_sets/create.json.rabl
195
197
  - app/views/api/v2/foreign_input_sets/index.json.rabl
@@ -294,6 +296,7 @@ files:
294
296
  - db/migrate/20170613101039_add_timeout_to_job_templates_and_job_invocations.rb
295
297
  - db/migrate/20180110104432_rename_template_invocation_permission.rb
296
298
  - db/migrate/20180112125015_fix_taxable_taxonomies_job_template.rb
299
+ - db/seeds.d/50-notification_blueprints.rb
297
300
  - db/seeds.d/60-ssh_proxy_feature.rb
298
301
  - db/seeds.d/70-job_templates.rb
299
302
  - db/seeds.d/90-bookmarks.rb