foreman_openscap 7.1.1 → 8.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/foreman_openscap/locale/cs_CZ/foreman_openscap.js +517 -421
- data/app/assets/javascripts/foreman_openscap/locale/de/foreman_openscap.js +907 -814
- data/app/assets/javascripts/foreman_openscap/locale/en/foreman_openscap.js +517 -421
- data/app/assets/javascripts/foreman_openscap/locale/en_GB/foreman_openscap.js +549 -453
- data/app/assets/javascripts/foreman_openscap/locale/es/foreman_openscap.js +911 -818
- data/app/assets/javascripts/foreman_openscap/locale/fr/foreman_openscap.js +911 -818
- data/app/assets/javascripts/foreman_openscap/locale/gl/foreman_openscap.js +556 -460
- data/app/assets/javascripts/foreman_openscap/locale/it/foreman_openscap.js +601 -505
- data/app/assets/javascripts/foreman_openscap/locale/ja/foreman_openscap.js +909 -816
- data/app/assets/javascripts/foreman_openscap/locale/ka/foreman_openscap.js +96 -0
- data/app/assets/javascripts/foreman_openscap/locale/ko/foreman_openscap.js +704 -611
- data/app/assets/javascripts/foreman_openscap/locale/pt_BR/foreman_openscap.js +911 -818
- data/app/assets/javascripts/foreman_openscap/locale/ru/foreman_openscap.js +706 -613
- data/app/assets/javascripts/foreman_openscap/locale/sv_SE/foreman_openscap.js +556 -460
- data/app/assets/javascripts/foreman_openscap/locale/zh_CN/foreman_openscap.js +909 -816
- data/app/assets/javascripts/foreman_openscap/locale/zh_TW/foreman_openscap.js +704 -611
- data/app/assets/javascripts/foreman_openscap/reports.js +5 -0
- data/app/controllers/arf_reports_controller.rb +23 -2
- data/app/helpers/arf_reports_helper.rb +17 -4
- data/app/models/foreman_openscap/arf_report.rb +11 -2
- data/app/views/arf_reports/_output.html.erb +5 -1
- data/app/views/job_templates/run_openscap_remediation_-_ansible_default.erb +27 -0
- data/app/views/job_templates/run_openscap_remediation_-_script_default.erb +24 -0
- data/config/routes.rb +1 -0
- data/db/migrate/20230912122310_add_fixes_to_message.rb +5 -0
- data/lib/foreman_openscap/engine.rb +18 -2
- data/lib/foreman_openscap/version.rb +1 -1
- data/lib/tasks/foreman_openscap_tasks.rake +5 -16
- data/locale/cs_CZ/foreman_openscap.edit.po +145 -17
- data/locale/cs_CZ/foreman_openscap.po +96 -0
- data/locale/de/foreman_openscap.edit.po +248 -282
- data/locale/de/foreman_openscap.po +96 -0
- data/locale/en/foreman_openscap.edit.po +145 -17
- data/locale/en/foreman_openscap.po +96 -0
- data/locale/en_GB/foreman_openscap.edit.po +145 -17
- data/locale/en_GB/foreman_openscap.po +96 -0
- data/locale/es/foreman_openscap.edit.po +241 -279
- data/locale/es/foreman_openscap.po +96 -0
- data/locale/foreman_openscap.pot +164 -12
- data/locale/fr/foreman_openscap.edit.po +330 -363
- data/locale/fr/foreman_openscap.po +96 -0
- data/locale/gl/foreman_openscap.edit.po +145 -17
- data/locale/gl/foreman_openscap.po +96 -0
- data/locale/it/foreman_openscap.edit.po +145 -17
- data/locale/it/foreman_openscap.po +96 -0
- data/locale/ja/foreman_openscap.edit.po +314 -347
- data/locale/ja/foreman_openscap.po +96 -0
- data/locale/ka/foreman_openscap.edit.po +289 -328
- data/locale/ka/foreman_openscap.po +96 -0
- data/locale/ka/foreman_openscap.po.time_stamp +0 -0
- data/locale/ko/foreman_openscap.edit.po +146 -18
- data/locale/ko/foreman_openscap.po +96 -0
- data/locale/pt_BR/foreman_openscap.edit.po +247 -279
- data/locale/pt_BR/foreman_openscap.po +96 -0
- data/locale/ru/foreman_openscap.edit.po +146 -18
- data/locale/ru/foreman_openscap.po +96 -0
- data/locale/sv_SE/foreman_openscap.edit.po +145 -17
- data/locale/sv_SE/foreman_openscap.po +96 -0
- data/locale/zh_CN/foreman_openscap.edit.po +314 -347
- data/locale/zh_CN/foreman_openscap.po +96 -0
- data/locale/zh_TW/foreman_openscap.edit.po +146 -18
- data/locale/zh_TW/foreman_openscap.po +96 -0
- data/webpack/components/EmptyState.js +6 -2
- data/webpack/components/OpenscapRemediationWizard/OpenscapRemediationSelectors.js +16 -0
- data/webpack/components/OpenscapRemediationWizard/OpenscapRemediationWizardContext.js +4 -0
- data/webpack/components/OpenscapRemediationWizard/ViewSelectedHostsLink.js +38 -0
- data/webpack/components/OpenscapRemediationWizard/WizardHeader.js +43 -0
- data/webpack/components/OpenscapRemediationWizard/constants.js +14 -0
- data/webpack/components/OpenscapRemediationWizard/helpers.js +33 -0
- data/webpack/components/OpenscapRemediationWizard/index.js +160 -0
- data/webpack/components/OpenscapRemediationWizard/steps/Finish.js +131 -0
- data/webpack/components/OpenscapRemediationWizard/steps/ReviewHosts.js +217 -0
- data/webpack/components/OpenscapRemediationWizard/steps/ReviewRemediation.js +176 -0
- data/webpack/components/OpenscapRemediationWizard/steps/ReviewRemediation.scss +4 -0
- data/webpack/components/OpenscapRemediationWizard/steps/SnippetSelect.js +160 -0
- data/webpack/components/OpenscapRemediationWizard/steps/index.js +4 -0
- data/webpack/index.js +8 -3
- data/webpack/testHelper.js +6 -5
- metadata +20 -3
@@ -4,3 +4,8 @@ function showReportDetails(log_id, event) {
|
|
4
4
|
showDetails.is(':visible') ? $(event).find('span').attr('class', 'glyphicon glyphicon-collapse-up') : $(event).find('span').attr('class', 'glyphicon glyphicon-collapse-down');
|
5
5
|
}
|
6
6
|
|
7
|
+
function showRemediationWizard(log_id) {
|
8
|
+
var wizard_button = $('#openscapRemediationWizardButton');
|
9
|
+
wizard_button.attr('data-log-id', log_id);
|
10
|
+
wizard_button.click();
|
11
|
+
}
|
@@ -2,7 +2,7 @@ class ArfReportsController < ApplicationController
|
|
2
2
|
include Foreman::Controller::AutoCompleteSearch
|
3
3
|
include ForemanOpenscap::ArfReportsControllerCommonExtensions
|
4
4
|
|
5
|
-
before_action :find_arf_report, :only => %i[show show_html destroy parse_html parse_bzip download_html]
|
5
|
+
before_action :find_arf_report, :only => %i[show show_html destroy parse_html parse_bzip download_html show_log]
|
6
6
|
before_action :find_multiple, :only => %i[delete_multiple submit_delete_multiple]
|
7
7
|
|
8
8
|
def model_of_controller
|
@@ -72,6 +72,27 @@ class ArfReportsController < ApplicationController
|
|
72
72
|
end
|
73
73
|
end
|
74
74
|
|
75
|
+
def show_log
|
76
|
+
return not_found unless @arf_report # TODO: use Message/Log model directly instead?
|
77
|
+
|
78
|
+
log = @arf_report.logs.find(params[:log_id])
|
79
|
+
return not_found unless log
|
80
|
+
|
81
|
+
respond_to do |format|
|
82
|
+
format.json do
|
83
|
+
render json: {
|
84
|
+
log: {
|
85
|
+
source: log.source,
|
86
|
+
message: {
|
87
|
+
value: log.message.value,
|
88
|
+
fixes: log.message.fixes,
|
89
|
+
}
|
90
|
+
},
|
91
|
+
}, status: :ok
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
75
96
|
private
|
76
97
|
|
77
98
|
def find_arf_report
|
@@ -99,7 +120,7 @@ class ArfReportsController < ApplicationController
|
|
99
120
|
|
100
121
|
def action_permission
|
101
122
|
case params[:action]
|
102
|
-
when 'show_html', 'parse_html', 'parse_bzip', 'download_html'
|
123
|
+
when 'show_html', 'parse_html', 'parse_bzip', 'download_html', 'show_log'
|
103
124
|
:view
|
104
125
|
when 'delete_multiple', 'submit_delete_multiple'
|
105
126
|
:destroy
|
@@ -62,9 +62,22 @@ module ArfReportsHelper
|
|
62
62
|
msg.html_safe
|
63
63
|
end
|
64
64
|
|
65
|
-
def host_search_by_rule_result_buttons(
|
66
|
-
|
67
|
-
|
68
|
-
|
65
|
+
def host_search_by_rule_result_buttons(log)
|
66
|
+
buttons = [
|
67
|
+
display_link_if_authorized(_('Hosts failing this rule'), hash_for_hosts_path(:search => "fails_xccdf_rule = #{log.source}")),
|
68
|
+
display_link_if_authorized(_('Hosts passing this rule'), hash_for_hosts_path(:search => "passes_xccdf_rule = #{log.source}")),
|
69
|
+
display_link_if_authorized(_('Hosts othering this rule'), hash_for_hosts_path(:search => "others_xccdf_rule = #{log.source}")),
|
70
|
+
]
|
71
|
+
if log.result == 'fail' && log.message.fixes.present?
|
72
|
+
buttons << link_to_function_if_authorized(_('Remediation'), "showRemediationWizard(#{log.id})", hash_for_show_log_arf_report_path(id: log.report.id))
|
73
|
+
end
|
74
|
+
action_buttons(buttons)
|
75
|
+
end
|
76
|
+
|
77
|
+
def supported_remediation_snippets
|
78
|
+
snippets = []
|
79
|
+
snippets << 'urn:xccdf:fix:script:sh' if ForemanOpenscap.with_remote_execution?
|
80
|
+
snippets << 'urn:xccdf:fix:script:ansible' if ForemanOpenscap.with_ansible?
|
81
|
+
snippets
|
69
82
|
end
|
70
83
|
end
|
@@ -131,14 +131,16 @@ module ForemanOpenscap
|
|
131
131
|
:severity => log[:severity],
|
132
132
|
:description => newline_to_space(log[:description]),
|
133
133
|
:rationale => newline_to_space(log[:rationale]),
|
134
|
-
:scap_references => references_links(log[:references])
|
134
|
+
:scap_references => references_links(log[:references]),
|
135
|
+
:fixes => fixes(log[:fixes])
|
135
136
|
}
|
136
137
|
else
|
137
138
|
msg = Message.new(:value => N_(log[:title]),
|
138
139
|
:severity => log[:severity],
|
139
140
|
:description => newline_to_space(log[:description]),
|
140
141
|
:rationale => newline_to_space(log[:rationale]),
|
141
|
-
:scap_references => references_links(log[:references])
|
142
|
+
:scap_references => references_links(log[:references]),
|
143
|
+
:fixes => fixes(log[:fixes]))
|
142
144
|
end
|
143
145
|
msg.save!
|
144
146
|
end
|
@@ -222,12 +224,19 @@ module ForemanOpenscap
|
|
222
224
|
html_links.join(', ')
|
223
225
|
end
|
224
226
|
|
227
|
+
def self.fixes(raw_fixes)
|
228
|
+
return if raw_fixes.empty?
|
229
|
+
|
230
|
+
JSON.fast_generate(raw_fixes)
|
231
|
+
end
|
232
|
+
|
225
233
|
def self.update_msg_with_changes(msg, incoming_data)
|
226
234
|
msg.severity = incoming_data['severity']
|
227
235
|
msg.description = incoming_data['description']
|
228
236
|
msg.rationale = incoming_data['rationale']
|
229
237
|
msg.scap_references = incoming_data['references']
|
230
238
|
msg.value = incoming_data['title']
|
239
|
+
msg.fixes = fixes(incoming_data['fixes'])
|
231
240
|
|
232
241
|
return unless msg.changed?
|
233
242
|
msg.save
|
@@ -25,7 +25,7 @@
|
|
25
25
|
</td>
|
26
26
|
<td><%= log.source %></td>
|
27
27
|
<td><%= react_component 'RuleSeverity', { :severity => log.message.severity.downcase } %></td>
|
28
|
-
<td><%= host_search_by_rule_result_buttons(log
|
28
|
+
<td><%= host_search_by_rule_result_buttons(log) %></td>
|
29
29
|
</tr>
|
30
30
|
<% end %>
|
31
31
|
<tr id='ntsh' <%= "style='display: none;'".html_safe if logs.size > 0%>>
|
@@ -35,3 +35,7 @@
|
|
35
35
|
</tr>
|
36
36
|
</tbody>
|
37
37
|
</table>
|
38
|
+
<%= react_component 'OpenscapRemediationWizard',
|
39
|
+
{ report_id: @arf_report.id,
|
40
|
+
host: { name: @arf_report.host.name, id: @arf_report.host.id },
|
41
|
+
supported_remediation_snippets: supported_remediation_snippets } %>
|
@@ -0,0 +1,27 @@
|
|
1
|
+
<%#
|
2
|
+
name: Run OpenSCAP remediation - Ansible Default
|
3
|
+
job_category: OpenSCAP Ansible Commands
|
4
|
+
description_format: Run OpenSCAP remediation on given host. Please note, it is not meant to be used directly.
|
5
|
+
snippet: false
|
6
|
+
provider_type: Ansible
|
7
|
+
kind: job_template
|
8
|
+
model: JobTemplate
|
9
|
+
feature: ansible_run_openscap_remediation
|
10
|
+
template_inputs:
|
11
|
+
- name: tasks
|
12
|
+
description: Tasks to run on the host
|
13
|
+
input_type: user
|
14
|
+
required: true
|
15
|
+
- name: reboot
|
16
|
+
description: Indicate wether the host should be rebooted after all the remediation
|
17
|
+
input_type: user
|
18
|
+
required: false
|
19
|
+
%>
|
20
|
+
---
|
21
|
+
- hosts: all
|
22
|
+
tasks:
|
23
|
+
<%= indent(4) { input('tasks') } -%>
|
24
|
+
<% if truthy?(input('reboot')) %>
|
25
|
+
- name: Reboot the machine
|
26
|
+
reboot:
|
27
|
+
<% end %>
|
@@ -0,0 +1,24 @@
|
|
1
|
+
<%#
|
2
|
+
name: Run OpenSCAP remediation - Script Default
|
3
|
+
job_category: OpenSCAP
|
4
|
+
description_format: Run OpenSCAP remediation on given host. Please note, it is not meant to be used directly.
|
5
|
+
snippet: false
|
6
|
+
provider_type: script
|
7
|
+
kind: job_template
|
8
|
+
model: JobTemplate
|
9
|
+
feature: script_run_openscap_remediation
|
10
|
+
template_inputs:
|
11
|
+
- name: command
|
12
|
+
description: Command to run on the host
|
13
|
+
input_type: user
|
14
|
+
required: true
|
15
|
+
- name: reboot
|
16
|
+
description: Indicate wether the host should be rebooted after the remediation
|
17
|
+
input_type: user
|
18
|
+
required: false
|
19
|
+
%>
|
20
|
+
<%= input('command') %>
|
21
|
+
<% if truthy?(input('reboot')) -%>
|
22
|
+
echo "A reboot is required to finish the remediation. The system is going to reboot now."
|
23
|
+
<%= render_template('Power Action - Script Default', action: 'restart') %>
|
24
|
+
<% end -%>
|
data/config/routes.rb
CHANGED
@@ -48,7 +48,7 @@ module ForemanOpenscap
|
|
48
48
|
|
49
49
|
initializer 'foreman_openscap.register_plugin', :before => :finisher_hook do |app|
|
50
50
|
Foreman::Plugin.register :foreman_openscap do
|
51
|
-
requires_foreman '>= 3.
|
51
|
+
requires_foreman '>= 3.11'
|
52
52
|
register_gettext
|
53
53
|
|
54
54
|
apipie_documented_controllers ["#{ForemanOpenscap::Engine.root}/app/controllers/api/v2/compliance/*.rb"]
|
@@ -58,7 +58,7 @@ module ForemanOpenscap
|
|
58
58
|
|
59
59
|
# Add permissions
|
60
60
|
security_block :foreman_openscap do
|
61
|
-
permission :view_arf_reports, { :arf_reports => %i[index show parse_html show_html
|
61
|
+
permission :view_arf_reports, { :arf_reports => %i[index show parse_html show_html show_log
|
62
62
|
parse_bzip auto_complete_search download_html],
|
63
63
|
'api/v2/compliance/arf_reports' => %i[index show download download_html],
|
64
64
|
:compliance_hosts => [:show] },
|
@@ -275,6 +275,16 @@ module ForemanOpenscap
|
|
275
275
|
:description => N_("Run OVAL scan")
|
276
276
|
}
|
277
277
|
|
278
|
+
ansible_remediation_options = {
|
279
|
+
:description => N_("Run OpenSCAP remediation with Ansible"),
|
280
|
+
:provided_inputs => ["tasks", "reboot"]
|
281
|
+
}
|
282
|
+
|
283
|
+
script_remediation_options = {
|
284
|
+
:description => N_("Run OpenSCAP remediation with Shell"),
|
285
|
+
:provided_inputs => ["command", "reboot"]
|
286
|
+
}
|
287
|
+
|
278
288
|
if Gem::Version.new(ForemanRemoteExecution::VERSION) >= Gem::Version.new('1.2.3')
|
279
289
|
options[:host_action_button] = true
|
280
290
|
oval_options[:host_action_button] = (!::Foreman.in_rake? && ActiveRecord::Base.connection.table_exists?(:settings)) ? (Setting.find_by(:name => 'lab_features')&.value || false) : false
|
@@ -282,6 +292,8 @@ module ForemanOpenscap
|
|
282
292
|
|
283
293
|
RemoteExecutionFeature.register(:foreman_openscap_run_scans, N_("Run OpenSCAP scan"), options)
|
284
294
|
RemoteExecutionFeature.register(:foreman_openscap_run_oval_scans, N_("Run OVAL scan"), oval_options)
|
295
|
+
RemoteExecutionFeature.register(:ansible_run_openscap_remediation, N_("Run OpenSCAP remediation with Ansible"), ansible_remediation_options)
|
296
|
+
RemoteExecutionFeature.register(:script_run_openscap_remediation, N_("Run OpenSCAP remediation with Shell"), script_remediation_options)
|
285
297
|
end
|
286
298
|
end
|
287
299
|
|
@@ -303,4 +315,8 @@ module ForemanOpenscap
|
|
303
315
|
def self.with_remote_execution?
|
304
316
|
RemoteExecutionFeature rescue false
|
305
317
|
end
|
318
|
+
|
319
|
+
def self.with_ansible?
|
320
|
+
ForemanAnsible rescue false
|
321
|
+
end
|
306
322
|
end
|
@@ -86,22 +86,11 @@ namespace :test do
|
|
86
86
|
test_dir = File.join(File.dirname(__FILE__), '../..', 'test')
|
87
87
|
t.libs << ["test", test_dir]
|
88
88
|
t.pattern = "#{test_dir}/**/*_test.rb"
|
89
|
-
t.
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
namespace :test do
|
95
|
-
desc "Test Core parts extended by ForemanOpenscap"
|
96
|
-
Rake::TestTask.new(:foreman_openscap_extensions) do |t|
|
97
|
-
test_dir = Rails.root.join('test')
|
98
|
-
t.libs << ["test", test_dir]
|
99
|
-
t.test_files = FileList[
|
100
|
-
"#{test_dir}/unit/foreman/access_permissions_test.rb",
|
101
|
-
"#{test_dir}/controllers/api/v2/hosts_controller_test.rb",
|
102
|
-
"#{test_dir}/controllers/api/v2/hostgroups_controller_test.rb",
|
103
|
-
"#{test_dir}/models/hosts/*_test.rb",
|
104
|
-
]
|
89
|
+
t.test_files = [
|
90
|
+
Rails.root.join('test/unit/foreman/access_permissions_test.rb'),
|
91
|
+
Rails.root.join('test/controllers/api/v2/hosts_controller_test.rb'),
|
92
|
+
Rails.root.join('test/controllers/api/v2/hostgroups_controller_test.rb'),
|
93
|
+
] + Rails.root.glob("test/models/hosts/*_test.rb")
|
105
94
|
t.verbose = true
|
106
95
|
t.warning = false
|
107
96
|
end
|
@@ -5,7 +5,7 @@
|
|
5
5
|
#
|
6
6
|
msgid ""
|
7
7
|
msgstr ""
|
8
|
-
"Project-Id-Version: foreman_openscap
|
8
|
+
"Project-Id-Version: foreman_openscap 1.0.0\n"
|
9
9
|
"Report-Msgid-Bugs-To: \n"
|
10
10
|
"PO-Revision-Date: 2023-05-16 14:11+0200\n"
|
11
11
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
@@ -381,15 +381,15 @@ msgstr ""
|
|
381
381
|
msgid "Successfully deleted %s compliance reports"
|
382
382
|
msgstr ""
|
383
383
|
|
384
|
-
#: ../app/controllers/arf_reports_controller.rb:
|
384
|
+
#: ../app/controllers/arf_reports_controller.rb:106
|
385
385
|
msgid "No compliance reports were found."
|
386
386
|
msgstr ""
|
387
387
|
|
388
|
-
#: ../app/controllers/arf_reports_controller.rb:
|
388
|
+
#: ../app/controllers/arf_reports_controller.rb:110
|
389
389
|
msgid "No compliance reports selected"
|
390
390
|
msgstr ""
|
391
391
|
|
392
|
-
#: ../app/controllers/arf_reports_controller.rb:
|
392
|
+
#: ../app/controllers/arf_reports_controller.rb:115
|
393
393
|
msgid "Something went wrong while selecting compliance reports - %s"
|
394
394
|
msgstr ""
|
395
395
|
|
@@ -429,15 +429,15 @@ msgstr ""
|
|
429
429
|
msgid "No valid policy ID provided"
|
430
430
|
msgstr ""
|
431
431
|
|
432
|
-
#: ../app/controllers/policies_controller.rb:
|
433
|
-
msgid "No hosts were found
|
432
|
+
#: ../app/controllers/policies_controller.rb:129
|
433
|
+
msgid "No hosts were found with that id, name or query filter"
|
434
434
|
msgstr ""
|
435
435
|
|
436
|
-
#: ../app/controllers/policies_controller.rb:
|
436
|
+
#: ../app/controllers/policies_controller.rb:134
|
437
437
|
msgid "No hosts selected"
|
438
438
|
msgstr ""
|
439
439
|
|
440
|
-
#: ../app/controllers/policies_controller.rb:
|
440
|
+
#: ../app/controllers/policies_controller.rb:139
|
441
441
|
msgid "Something went wrong while selecting hosts - %s"
|
442
442
|
msgstr ""
|
443
443
|
|
@@ -509,18 +509,22 @@ msgstr ""
|
|
509
509
|
msgid " through %s"
|
510
510
|
msgstr ""
|
511
511
|
|
512
|
-
#: ../app/helpers/arf_reports_helper.rb:
|
512
|
+
#: ../app/helpers/arf_reports_helper.rb:67
|
513
513
|
msgid "Hosts failing this rule"
|
514
514
|
msgstr ""
|
515
515
|
|
516
|
-
#: ../app/helpers/arf_reports_helper.rb:
|
516
|
+
#: ../app/helpers/arf_reports_helper.rb:68
|
517
517
|
msgid "Hosts passing this rule"
|
518
518
|
msgstr ""
|
519
519
|
|
520
|
-
#: ../app/helpers/arf_reports_helper.rb:
|
520
|
+
#: ../app/helpers/arf_reports_helper.rb:69
|
521
521
|
msgid "Hosts othering this rule"
|
522
522
|
msgstr ""
|
523
523
|
|
524
|
+
#: ../app/helpers/arf_reports_helper.rb:72
|
525
|
+
msgid "Remediation"
|
526
|
+
msgstr ""
|
527
|
+
|
524
528
|
#: ../app/helpers/compliance_dashboard_helper.rb:3 ../app/views/arf_reports/_list.html.erb:6 ../app/views/arf_reports/delete_multiple.html.erb:7 ../app/views/policy_dashboard/_policy_reports.html.erb:6
|
525
529
|
msgid "Host"
|
526
530
|
msgstr ""
|
@@ -1160,7 +1164,7 @@ msgstr ""
|
|
1160
1164
|
msgid "You can specify custom cron line, e.g. \"0 3 * * *\", separate each of 5 values by space"
|
1161
1165
|
msgstr ""
|
1162
1166
|
|
1163
|
-
#: ../app/views/policies/_list.html.erb:3 ../app/views/tailoring_files/_list.html.erb:3 ../webpack/routes/OvalContents/OvalContentsIndex/OvalContentsTable.js:19 ../webpack/routes/OvalContents/OvalContentsNew/OvalContentsNew.js:57 ../webpack/routes/OvalContents/OvalContentsShow/OvalContentsShow.js:48 ../webpack/routes/OvalPolicies/OvalPoliciesIndex/OvalPoliciesTable.js:19 ../webpack/routes/OvalPolicies/OvalPoliciesNew/NewOvalPolicyForm.js:56 ../webpack/routes/OvalPolicies/OvalPoliciesShow/DetailsTab.js:31 ../webpack/routes/OvalPolicies/OvalPoliciesShow/HostgroupsTable.js:9
|
1167
|
+
#: ../app/views/policies/_list.html.erb:3 ../app/views/tailoring_files/_list.html.erb:3 ../webpack/components/OpenscapRemediationWizard/steps/ReviewHosts.js:162 ../webpack/routes/OvalContents/OvalContentsIndex/OvalContentsTable.js:19 ../webpack/routes/OvalContents/OvalContentsNew/OvalContentsNew.js:57 ../webpack/routes/OvalContents/OvalContentsShow/OvalContentsShow.js:48 ../webpack/routes/OvalPolicies/OvalPoliciesIndex/OvalPoliciesTable.js:19 ../webpack/routes/OvalPolicies/OvalPoliciesNew/NewOvalPolicyForm.js:56 ../webpack/routes/OvalPolicies/OvalPoliciesShow/DetailsTab.js:31 ../webpack/routes/OvalPolicies/OvalPoliciesShow/HostgroupsTable.js:9
|
1164
1168
|
msgid "Name"
|
1165
1169
|
msgstr ""
|
1166
1170
|
|
@@ -1486,14 +1490,22 @@ msgstr ""
|
|
1486
1490
|
msgid "ID of OpenSCAP Proxy"
|
1487
1491
|
msgstr ""
|
1488
1492
|
|
1489
|
-
#: ../lib/foreman_openscap/engine.rb:270 ../lib/foreman_openscap/engine.rb:
|
1493
|
+
#: ../lib/foreman_openscap/engine.rb:270 ../lib/foreman_openscap/engine.rb:293
|
1490
1494
|
msgid "Run OpenSCAP scan"
|
1491
1495
|
msgstr ""
|
1492
1496
|
|
1493
|
-
#: ../lib/foreman_openscap/engine.rb:275 ../lib/foreman_openscap/engine.rb:
|
1497
|
+
#: ../lib/foreman_openscap/engine.rb:275 ../lib/foreman_openscap/engine.rb:294
|
1494
1498
|
msgid "Run OVAL scan"
|
1495
1499
|
msgstr ""
|
1496
1500
|
|
1501
|
+
#: ../lib/foreman_openscap/engine.rb:279 ../lib/foreman_openscap/engine.rb:295
|
1502
|
+
msgid "Run OpenSCAP remediation with Ansible"
|
1503
|
+
msgstr ""
|
1504
|
+
|
1505
|
+
#: ../lib/foreman_openscap/engine.rb:284 ../lib/foreman_openscap/engine.rb:296
|
1506
|
+
msgid "Run OpenSCAP remediation with Shell"
|
1507
|
+
msgstr ""
|
1508
|
+
|
1497
1509
|
#: ../webpack/components/ConfirmModal.js:19
|
1498
1510
|
msgid "Confirm"
|
1499
1511
|
msgstr ""
|
@@ -1506,14 +1518,130 @@ msgstr ""
|
|
1506
1518
|
msgid "There's no available report for this host"
|
1507
1519
|
msgstr ""
|
1508
1520
|
|
1509
|
-
#: ../webpack/components/
|
1510
|
-
msgid "
|
1521
|
+
#: ../webpack/components/OpenscapRemediationWizard/ViewSelectedHostsLink.js:27
|
1522
|
+
msgid "View selected hosts"
|
1523
|
+
msgstr ""
|
1524
|
+
|
1525
|
+
#: ../webpack/components/OpenscapRemediationWizard/index.js:69 ../webpack/components/OpenscapRemediationWizard/steps/ReviewHosts.js:174
|
1526
|
+
msgid "Review hosts"
|
1527
|
+
msgstr ""
|
1528
|
+
|
1529
|
+
#: ../webpack/components/OpenscapRemediationWizard/index.js:77 ../webpack/components/OpenscapRemediationWizard/steps/SnippetSelect.js:123
|
1530
|
+
msgid "Select snippet"
|
1531
|
+
msgstr ""
|
1532
|
+
|
1533
|
+
#: ../webpack/components/OpenscapRemediationWizard/index.js:85 ../webpack/components/OpenscapRemediationWizard/steps/ReviewRemediation.js:94
|
1534
|
+
msgid "Review remediation"
|
1535
|
+
msgstr ""
|
1536
|
+
|
1537
|
+
#: ../webpack/components/OpenscapRemediationWizard/index.js:89
|
1538
|
+
msgid "Run"
|
1511
1539
|
msgstr ""
|
1512
1540
|
|
1513
|
-
#: ../webpack/components/
|
1541
|
+
#: ../webpack/components/OpenscapRemediationWizard/index.js:93
|
1542
|
+
msgid "Done"
|
1543
|
+
msgstr ""
|
1544
|
+
|
1545
|
+
#: ../webpack/components/OpenscapRemediationWizard/index.js:127
|
1546
|
+
msgid "Remediate %s rule"
|
1547
|
+
msgstr ""
|
1548
|
+
|
1549
|
+
#: ../webpack/components/OpenscapRemediationWizard/steps/Finish.js:84
|
1550
|
+
msgid "Job details"
|
1551
|
+
msgstr ""
|
1552
|
+
|
1553
|
+
#: ../webpack/components/OpenscapRemediationWizard/steps/Finish.js:87
|
1554
|
+
msgid "Close"
|
1555
|
+
msgstr ""
|
1556
|
+
|
1557
|
+
#: ../webpack/components/OpenscapRemediationWizard/steps/Finish.js:97 ../webpack/components/OpenscapRemediationWizard/steps/SnippetSelect.js:144 ../webpack/components/withLoading.js:12
|
1514
1558
|
msgid "Error!"
|
1515
1559
|
msgstr ""
|
1516
1560
|
|
1561
|
+
#: ../webpack/components/OpenscapRemediationWizard/steps/Finish.js:105
|
1562
|
+
msgid "The job has started on selected host(s), you can check the status on the job details page."
|
1563
|
+
msgstr ""
|
1564
|
+
|
1565
|
+
#: ../webpack/components/OpenscapRemediationWizard/steps/ReviewHosts.js:167
|
1566
|
+
msgid "OS"
|
1567
|
+
msgstr ""
|
1568
|
+
|
1569
|
+
#: ../webpack/components/OpenscapRemediationWizard/steps/ReviewHosts.js:175
|
1570
|
+
msgid "By default, remediation is applied to the current host. Optionally, remediate any additional hosts that fail the rule."
|
1571
|
+
msgstr ""
|
1572
|
+
|
1573
|
+
#: ../webpack/components/OpenscapRemediationWizard/steps/ReviewRemediation.js:61
|
1574
|
+
msgid "Review the remediation snippet and apply it to the host manually."
|
1575
|
+
msgstr ""
|
1576
|
+
|
1577
|
+
#: ../webpack/components/OpenscapRemediationWizard/steps/ReviewRemediation.js:62
|
1578
|
+
msgid "Review the remediation snippet that will be applied to selected host(s)."
|
1579
|
+
msgstr ""
|
1580
|
+
|
1581
|
+
#: ../webpack/components/OpenscapRemediationWizard/steps/ReviewRemediation.js:67
|
1582
|
+
msgid "A reboot is required after applying remediation."
|
1583
|
+
msgstr ""
|
1584
|
+
|
1585
|
+
#: ../webpack/components/OpenscapRemediationWizard/steps/ReviewRemediation.js:68
|
1586
|
+
msgid "A reboot might be required after applying remediation."
|
1587
|
+
msgstr ""
|
1588
|
+
|
1589
|
+
#: ../webpack/components/OpenscapRemediationWizard/steps/ReviewRemediation.js:84
|
1590
|
+
msgid "Successfully copied to clipboard!"
|
1591
|
+
msgstr ""
|
1592
|
+
|
1593
|
+
#: ../webpack/components/OpenscapRemediationWizard/steps/ReviewRemediation.js:85
|
1594
|
+
msgid "Copy to clipboard"
|
1595
|
+
msgstr ""
|
1596
|
+
|
1597
|
+
#: ../webpack/components/OpenscapRemediationWizard/steps/ReviewRemediation.js:103
|
1598
|
+
msgid "Do not implement any of the recommended remedial actions or scripts without first testing them in a non-production environment."
|
1599
|
+
msgstr ""
|
1600
|
+
|
1601
|
+
#: ../webpack/components/OpenscapRemediationWizard/steps/ReviewRemediation.js:106
|
1602
|
+
msgid "Remediation might render the system non-functional."
|
1603
|
+
msgstr ""
|
1604
|
+
|
1605
|
+
#: ../webpack/components/OpenscapRemediationWizard/steps/ReviewRemediation.js:139
|
1606
|
+
msgid "Other hosts failing this rule"
|
1607
|
+
msgstr ""
|
1608
|
+
|
1609
|
+
#: ../webpack/components/OpenscapRemediationWizard/steps/ReviewRemediation.js:155
|
1610
|
+
msgid "Reboot the system(s)"
|
1611
|
+
msgstr ""
|
1612
|
+
|
1613
|
+
#: ../webpack/components/OpenscapRemediationWizard/steps/SnippetSelect.js:71
|
1614
|
+
msgid "Method"
|
1615
|
+
msgstr ""
|
1616
|
+
|
1617
|
+
#: ../webpack/components/OpenscapRemediationWizard/steps/SnippetSelect.js:77
|
1618
|
+
msgid "Remote job"
|
1619
|
+
msgstr ""
|
1620
|
+
|
1621
|
+
#: ../webpack/components/OpenscapRemediationWizard/steps/SnippetSelect.js:86
|
1622
|
+
msgid "Manual"
|
1623
|
+
msgstr ""
|
1624
|
+
|
1625
|
+
#: ../webpack/components/OpenscapRemediationWizard/steps/SnippetSelect.js:101
|
1626
|
+
msgid "There is no job to remediate with. Please remediate manually."
|
1627
|
+
msgstr ""
|
1628
|
+
|
1629
|
+
#: ../webpack/components/OpenscapRemediationWizard/steps/SnippetSelect.js:107
|
1630
|
+
msgid "Snippet"
|
1631
|
+
msgstr ""
|
1632
|
+
|
1633
|
+
#: ../webpack/components/OpenscapRemediationWizard/steps/SnippetSelect.js:150
|
1634
|
+
msgid "Select remediation method"
|
1635
|
+
msgstr ""
|
1636
|
+
|
1637
|
+
#: ../webpack/components/OpenscapRemediationWizard/steps/SnippetSelect.js:151
|
1638
|
+
msgid "You can remediate by running a remote job or you can display a snippet for manual remediation."
|
1639
|
+
msgstr ""
|
1640
|
+
|
1641
|
+
#: ../webpack/components/withDeleteModal.js:27
|
1642
|
+
msgid "Are you sure you want to delete %s?"
|
1643
|
+
msgstr ""
|
1644
|
+
|
1517
1645
|
#: ../webpack/components/withLoading.js:64
|
1518
1646
|
msgid "Permission denied"
|
1519
1647
|
msgstr ""
|