foreman_remote_execution 8.3.3 → 9.0.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_ci.yml +3 -1
- data/app/controllers/api/v2/job_invocations_controller.rb +0 -1
- data/app/controllers/job_invocations_controller.rb +1 -20
- data/app/controllers/ui_job_wizard_controller.rb +2 -4
- data/app/helpers/remote_execution_helper.rb +1 -1
- data/app/lib/actions/remote_execution/run_host_job.rb +1 -1
- data/app/views/api/v2/job_invocations/base.json.rabl +1 -1
- data/app/views/job_invocations/_form.html.erb +1 -1
- data/app/views/job_invocations/show.html.erb +1 -1
- data/app/views/job_invocations/welcome.html.erb +1 -1
- data/config/routes.rb +0 -1
- data/db/migrate/20210816100932_rex_setting_category_to_dsl.rb +1 -1
- data/extra/cockpit/foreman-cockpit-session +12 -29
- data/lib/foreman_remote_execution/engine.rb +2 -2
- data/lib/foreman_remote_execution/version.rb +1 -1
- data/locale/action_names.rb +2 -2
- data/locale/de/LC_MESSAGES/foreman_remote_execution.mo +0 -0
- data/locale/de/foreman_remote_execution.po +154 -266
- data/locale/en/LC_MESSAGES/foreman_remote_execution.mo +0 -0
- data/locale/en/foreman_remote_execution.po +24 -132
- data/locale/en_GB/LC_MESSAGES/foreman_remote_execution.mo +0 -0
- data/locale/en_GB/foreman_remote_execution.po +41 -149
- data/locale/es/LC_MESSAGES/foreman_remote_execution.mo +0 -0
- data/locale/es/foreman_remote_execution.po +210 -320
- data/locale/foreman_remote_execution.pot +211 -394
- data/locale/fr/LC_MESSAGES/foreman_remote_execution.mo +0 -0
- data/locale/fr/foreman_remote_execution.po +241 -353
- data/locale/ja/LC_MESSAGES/foreman_remote_execution.mo +0 -0
- data/locale/ja/foreman_remote_execution.po +261 -368
- data/locale/ko/LC_MESSAGES/foreman_remote_execution.mo +0 -0
- data/locale/ko/foreman_remote_execution.po +53 -161
- data/locale/pt_BR/LC_MESSAGES/foreman_remote_execution.mo +0 -0
- data/locale/pt_BR/foreman_remote_execution.po +225 -335
- data/locale/ru/LC_MESSAGES/foreman_remote_execution.mo +0 -0
- data/locale/ru/foreman_remote_execution.po +53 -161
- data/locale/zh_CN/LC_MESSAGES/foreman_remote_execution.mo +0 -0
- data/locale/zh_CN/foreman_remote_execution.po +359 -465
- data/locale/zh_TW/LC_MESSAGES/foreman_remote_execution.mo +0 -0
- data/locale/zh_TW/foreman_remote_execution.po +54 -162
- data/webpack/JobWizard/JobWizard.js +10 -52
- data/webpack/JobWizard/JobWizard.scss +1 -5
- data/webpack/JobWizard/JobWizardConstants.js +1 -1
- data/webpack/JobWizard/__tests__/__snapshots__/integration.test.js.snap +0 -8
- data/webpack/JobWizard/__tests__/fixtures.js +0 -5
- data/webpack/JobWizard/__tests__/integration.test.js +0 -15
- data/webpack/JobWizard/__tests__/validation.test.js +0 -27
- data/webpack/JobWizard/autofill.js +2 -6
- data/webpack/JobWizard/steps/AdvancedFields/__tests__/AdvancedFields.test.js +0 -19
- data/webpack/JobWizard/steps/AdvancedFields/__tests__/__snapshots__/AdvancedFields.test.js.snap +1 -9
- data/webpack/JobWizard/steps/HostsAndInputs/HostPreviewModal.js +0 -3
- data/webpack/JobWizard/steps/HostsAndInputs/HostSearch.js +4 -28
- data/webpack/JobWizard/steps/HostsAndInputs/__tests__/HostsAndInputs.test.js +2 -32
- data/webpack/JobWizard/steps/HostsAndInputs/buildHostQuery.js +10 -16
- data/webpack/JobWizard/steps/HostsAndInputs/index.js +3 -55
- data/webpack/JobWizard/steps/ReviewDetails/index.js +4 -7
- data/webpack/JobWizard/steps/Schedule/QueryType.js +1 -1
- data/webpack/JobWizard/steps/Schedule/RepeatHour.js +1 -0
- data/webpack/JobWizard/steps/Schedule/RepeatWeek.js +2 -3
- data/webpack/JobWizard/steps/Schedule/__tests__/Schedule.test.js +5 -25
- data/webpack/JobWizard/steps/form/DateTimePicker.js +1 -0
- data/webpack/JobWizard/steps/form/Formatter.js +8 -30
- data/webpack/JobWizard/steps/form/GroupedSelectField.js +1 -0
- data/webpack/JobWizard/steps/form/SelectField.js +1 -0
- data/webpack/JobWizard/submit.js +2 -13
- data/webpack/react_app/components/RecentJobsCard/RecentJobsCard.js +4 -4
- data/webpack/react_app/components/RecentJobsCard/RecentJobsTable.js +2 -2
- data/webpack/react_app/components/RecentJobsCard/constants.js +2 -2
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a4f0a9c455ec484caac7631cec3d1ed8eff22263c96036d7837fdbb86f3faab8
|
4
|
+
data.tar.gz: a73788ec230b20cfd6050733d40f27a59d7bf26d334ce51f0b422aae1a64a68e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cb1ef923190e046bc4f9c688ac1040f26e521e7a96a7a154fd461a650d25b04875572e26b75f57dfb425401ae2bf8e82447eb01c635006eb9b51b36df168b999
|
7
|
+
data.tar.gz: 3e47f08ded8554ff2b38c50f7d16b8705441ece2753df227181d7782426c7c320476220f5b12dee496216cda119467ff3a0348f7821811dda702e8a9d852c1f3
|
@@ -13,6 +13,8 @@ jobs:
|
|
13
13
|
runs-on: ubuntu-latest
|
14
14
|
steps:
|
15
15
|
- uses: actions/checkout@v2
|
16
|
+
- run: sudo apt-get update
|
17
|
+
- run: sudo apt-get install libyaml-dev
|
16
18
|
- name: Setup Ruby
|
17
19
|
uses: ruby/setup-ruby@v1
|
18
20
|
with:
|
@@ -42,7 +44,7 @@ jobs:
|
|
42
44
|
node-version: [12]
|
43
45
|
steps:
|
44
46
|
- run: sudo apt-get update
|
45
|
-
- run: sudo apt-get install build-essential libcurl4-openssl-dev zlib1g-dev libpq-dev
|
47
|
+
- run: sudo apt-get install build-essential libcurl4-openssl-dev zlib1g-dev libpq-dev libyaml-dev
|
46
48
|
- uses: actions/checkout@v2
|
47
49
|
with:
|
48
50
|
repository: theforeman/foreman
|
@@ -71,7 +71,6 @@ module Api
|
|
71
71
|
param :description_format, String, :required => false, :desc => N_('Override the description format from the template for this invocation only')
|
72
72
|
param :execution_timeout_interval, Integer, :required => false, :desc => N_('Override the timeout interval from the template for this invocation only')
|
73
73
|
param :feature, String, :required => false, :desc => N_('Remote execution feature label that should be triggered, job template assigned to this feature will be used')
|
74
|
-
param :time_to_pickup, Integer, :required => false, :desc => N_('Override the global time to pickup interval for this invocation only')
|
75
74
|
|
76
75
|
RemoteExecutionProvider.providers.each_value do |provider|
|
77
76
|
next if !provider.respond_to?(:provider_inputs_doc) || provider.provider_inputs_doc.empty?
|
@@ -120,25 +120,6 @@ class JobInvocationsController < ApplicationController
|
|
120
120
|
redirect_back(:fallback_location => job_invocation_path(@job_invocation))
|
121
121
|
end
|
122
122
|
|
123
|
-
def preview_job_invocations_per_host
|
124
|
-
job_invocations = resource_base.search_for("targeted_host_id = #{params[:host_id]} and (status=#{params[:status]})").limit(params[:limit] || 3)
|
125
|
-
|
126
|
-
job_invocations = job_invocations.map do |job|
|
127
|
-
@job_invocation = job
|
128
|
-
template_invocation = job.template_invocations.find { |template_inv| template_inv.host_id == params[:host_id].to_i }
|
129
|
-
task = template_invocation.try(:run_host_job_task)
|
130
|
-
status_mapper = task ? HostStatus::ExecutionStatus::ExecutionTaskStatusMapper.new(task) : job
|
131
|
-
{
|
132
|
-
start_at: job.start_at,
|
133
|
-
description: job.description,
|
134
|
-
id: job.id,
|
135
|
-
status: status_mapper.status,
|
136
|
-
status_label: status_mapper.status_label,
|
137
|
-
}
|
138
|
-
end
|
139
|
-
render :json => {:job_invocations => job_invocations}
|
140
|
-
end
|
141
|
-
|
142
123
|
private
|
143
124
|
|
144
125
|
def action_permission
|
@@ -149,7 +130,7 @@ class JobInvocationsController < ApplicationController
|
|
149
130
|
'create'
|
150
131
|
when 'cancel'
|
151
132
|
'cancel'
|
152
|
-
when 'chart'
|
133
|
+
when 'chart'
|
153
134
|
'view'
|
154
135
|
else
|
155
136
|
super
|
@@ -1,7 +1,7 @@
|
|
1
1
|
class UiJobWizardController < ApplicationController
|
2
2
|
include FiltersHelper
|
3
3
|
def categories
|
4
|
-
job_categories = resource_scope
|
4
|
+
job_categories = resource_scope
|
5
5
|
.search_for("job_category ~ \"#{params[:search]}\"")
|
6
6
|
.where(:snippet => false)
|
7
7
|
.select(:job_category).distinct
|
@@ -13,13 +13,11 @@ class UiJobWizardController < ApplicationController
|
|
13
13
|
def template
|
14
14
|
job_template = JobTemplate.authorized.find(params[:id])
|
15
15
|
advanced_template_inputs, template_inputs = map_template_inputs(job_template.template_inputs_with_foreign).partition { |x| x["advanced"] }
|
16
|
-
provider_inputs = job_template.provider.provider_inputs.map { |input| input.instance_values.merge({:provider_input => true, default: input.value }) }
|
17
16
|
render :json => {
|
18
17
|
:job_template => job_template,
|
19
18
|
:effective_user => job_template.effective_user,
|
20
19
|
:template_inputs => template_inputs,
|
21
|
-
:
|
22
|
-
:advanced_template_inputs => advanced_template_inputs+provider_inputs,
|
20
|
+
:advanced_template_inputs => advanced_template_inputs,
|
23
21
|
}
|
24
22
|
end
|
25
23
|
|
@@ -238,7 +238,7 @@ module RemoteExecutionHelper
|
|
238
238
|
|
239
239
|
def load_template_from_task(template_invocation, target)
|
240
240
|
task = template_invocation.job_invocation.sub_task_for_host(target)
|
241
|
-
return if
|
241
|
+
return if task.nil?
|
242
242
|
|
243
243
|
task.execution_plan.actions[1].try(:input).try(:[], 'script')
|
244
244
|
end
|
@@ -180,7 +180,7 @@ module Actions
|
|
180
180
|
end
|
181
181
|
|
182
182
|
def exit_status
|
183
|
-
input[:with_event_logging] ? task.template_invocation.template_invocation_events.find_by(event_type: 'exit')
|
183
|
+
input[:with_event_logging] ? task.template_invocation.template_invocation_events.find_by(event_type: 'exit').event : delegated_output[:exit_status]
|
184
184
|
end
|
185
185
|
|
186
186
|
def host_id
|
@@ -1,6 +1,6 @@
|
|
1
1
|
object @job_invocation
|
2
2
|
|
3
|
-
attributes :id, :description, :job_category, :targeting_id, :status, :start_at, :status_label, :ssh_user
|
3
|
+
attributes :id, :description, :job_category, :targeting_id, :status, :start_at, :status_label, :ssh_user
|
4
4
|
|
5
5
|
node do |invocation|
|
6
6
|
{
|
@@ -127,7 +127,7 @@
|
|
127
127
|
</div>
|
128
128
|
|
129
129
|
<div class="form-group">
|
130
|
-
<%= add_label({ :label => _('Type of query'), :label_help => _("Type has impact on when is the query evaluated to hosts.<br><ul><li><b>Static</b> - evaluates just after you submit this form</li><li><b>Dynamic</b> - evaluates just before the execution is started, so if it's
|
130
|
+
<%= add_label({ :label => _('Type of query'), :label_help => _("Type has impact on when is the query evaluated to hosts.<br><ul><li><b>Static</b> - evaluates just after you submit this form</li><li><b>Dynamic</b> - evaluates just before the execution is started, so if it's planed in future, targeted hosts set may change before it</li></ul>") }, f, :targetting_type) %>
|
131
131
|
|
132
132
|
<div class="col-md-4">
|
133
133
|
<%= radio_button_f targeting_fields, :targeting_type, :value => Targeting::STATIC_TYPE, :text => _(Targeting::TYPES[Targeting::STATIC_TYPE]) %>
|
@@ -1,6 +1,6 @@
|
|
1
1
|
<% title @job_invocation.description %>
|
2
2
|
<% stylesheet 'foreman_remote_execution/foreman_remote_execution' %>
|
3
|
-
<% javascript 'foreman_remote_execution/template_invocation' %>
|
3
|
+
<% javascript 'charts', 'foreman_remote_execution/template_invocation' %>
|
4
4
|
<% javascript *webpack_asset_paths('foreman_remote_execution', :extension => 'js') %>
|
5
5
|
<% content_for(:stylesheets) do %>
|
6
6
|
<%= webpacked_plugins_css_for :foreman_remote_execution %>
|
@@ -9,6 +9,6 @@
|
|
9
9
|
<p><%= link_to _('Learn more about this in the documentation.'),
|
10
10
|
documentation_url('1.ForemanRemoteExecution1.3Manual', :root_url => 'https://www.theforeman.org/plugins/foreman_remote_execution/1.3/index.html#'), :rel => 'external' %></p>
|
11
11
|
<div class="blank-slate-pf-main-action">
|
12
|
-
<%=
|
12
|
+
<%= new_link(_("Run Job"), {}, { :class => "btn-lg" }) %>
|
13
13
|
</div>
|
14
14
|
</div>
|
data/config/routes.rb
CHANGED
@@ -23,7 +23,6 @@ Rails.application.routes.draw do
|
|
23
23
|
match 'old/job_invocations/:id/rerun', to: 'job_invocations#rerun', via: [:get, :post], as: 'form_rerun_job_invocation'
|
24
24
|
resources :job_invocations, :only => [:create, :show, :index] do
|
25
25
|
collection do
|
26
|
-
get 'preview_job_invocations_per_host'
|
27
26
|
post 'refresh'
|
28
27
|
get 'chart'
|
29
28
|
get 'preview_hosts'
|
@@ -1,5 +1,5 @@
|
|
1
1
|
class RexSettingCategoryToDsl < ActiveRecord::Migration[6.0]
|
2
2
|
def up
|
3
|
-
Setting.where(category: 'Setting::RemoteExecution').update_all(category: 'Setting')
|
3
|
+
Setting.where(category: 'Setting::RemoteExecution').update_all(category: 'Setting')
|
4
4
|
end
|
5
5
|
end
|
@@ -170,41 +170,24 @@ class Relay
|
|
170
170
|
def initialize(proxy, params)
|
171
171
|
@proxy = proxy
|
172
172
|
@params = params
|
173
|
-
@inject_authorization = @params['ssh_user'] != 'root' && @params['effective_user_password']
|
174
173
|
end
|
175
174
|
|
176
175
|
def proxy_loop
|
177
176
|
proxy1 = ProxyBuffer.new($stdin, @sock)
|
178
177
|
proxy2 = ProxyBuffer.new(@sock, $stdout)
|
179
178
|
proxy2.on_data do |data|
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
#
|
192
|
-
# With the authorization injection check in place, this is more of a
|
193
|
-
# precaution so that unexpectedly big message won't bring the entire
|
194
|
-
# thing down.
|
195
|
-
end
|
196
|
-
if message.is_a?(Hash) && message['command'] == 'authorize'
|
197
|
-
response = {
|
198
|
-
'command' => 'authorize',
|
199
|
-
'cookie' => message['cookie'],
|
200
|
-
'response' => @params['effective_user_password'],
|
201
|
-
}
|
202
|
-
proxy1.enqueue(Cockpit.encode_message(response))
|
203
|
-
@inject_authorization = false
|
204
|
-
data = sio.read # Return whatever was left unread after read_control
|
205
|
-
end
|
179
|
+
message = Cockpit.read_control(StringIO.new(data))
|
180
|
+
if message.is_a?(Hash) && message['command'] == 'authorize'
|
181
|
+
response = {
|
182
|
+
'command' => 'authorize',
|
183
|
+
'cookie' => message['cookie'],
|
184
|
+
'response' => @params['effective_user_password'],
|
185
|
+
}
|
186
|
+
proxy1.enqueue(Cockpit.encode_message(response))
|
187
|
+
''
|
188
|
+
else
|
189
|
+
data
|
206
190
|
end
|
207
|
-
data
|
208
191
|
end
|
209
192
|
|
210
193
|
proxies = [proxy1, proxy2]
|
@@ -288,7 +271,7 @@ class Relay
|
|
288
271
|
end
|
289
272
|
raise AccessDeniedError, message
|
290
273
|
else
|
291
|
-
raise CockpitError, "Error talking to smart proxy: #{
|
274
|
+
raise CockpitError, "Error talking to smart proxy: #{response}"
|
292
275
|
end
|
293
276
|
end
|
294
277
|
end
|
@@ -47,7 +47,7 @@ module ForemanRemoteExecution
|
|
47
47
|
|
48
48
|
initializer 'foreman_remote_execution.register_plugin', before: :finisher_hook do |_app|
|
49
49
|
Foreman::Plugin.register :foreman_remote_execution do
|
50
|
-
requires_foreman '>= 3.
|
50
|
+
requires_foreman '>= 3.6'
|
51
51
|
register_global_js_file 'global'
|
52
52
|
|
53
53
|
apipie_documented_controllers ["#{ForemanRemoteExecution::Engine.root}/app/controllers/api/v2/*.rb"]
|
@@ -183,7 +183,7 @@ module ForemanRemoteExecution
|
|
183
183
|
permission :lock_job_templates, { :job_templates => [:lock, :unlock] }, :resource_type => 'JobTemplate'
|
184
184
|
permission :create_job_invocations, { :job_invocations => [:new, :create, :refresh, :rerun, :preview_hosts],
|
185
185
|
'api/v2/job_invocations' => [:create, :rerun] }, :resource_type => 'JobInvocation'
|
186
|
-
permission :view_job_invocations, { :job_invocations => [:index, :chart, :show, :auto_complete_search
|
186
|
+
permission :view_job_invocations, { :job_invocations => [:index, :chart, :show, :auto_complete_search], :template_invocations => [:show],
|
187
187
|
'api/v2/job_invocations' => [:index, :show, :output, :raw_output, :outputs] }, :resource_type => 'JobInvocation'
|
188
188
|
permission :view_template_invocations, { :template_invocations => [:show],
|
189
189
|
'api/v2/template_invocations' => [:template_invocations], :ui_job_wizard => [:job_invocation] }, :resource_type => 'TemplateInvocation'
|
data/locale/action_names.rb
CHANGED
Binary file
|