foreman_openscap 7.1.1 → 8.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/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 ""
|