foreman_openscap 13.1.2 → 13.2.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/de/foreman_openscap.js +5 -5
- data/app/assets/javascripts/foreman_openscap/locale/en/foreman_openscap.js +1 -1
- data/app/assets/javascripts/foreman_openscap/locale/en_GB/foreman_openscap.js +1 -1
- data/app/assets/javascripts/foreman_openscap/locale/es/foreman_openscap.js +1 -1
- data/app/assets/javascripts/foreman_openscap/locale/fr/foreman_openscap.js +26 -24
- data/app/assets/javascripts/foreman_openscap/locale/gl/foreman_openscap.js +1 -1
- data/app/assets/javascripts/foreman_openscap/locale/it/foreman_openscap.js +1 -1
- data/app/assets/javascripts/foreman_openscap/locale/ja/foreman_openscap.js +26 -28
- data/app/assets/javascripts/foreman_openscap/locale/ka/foreman_openscap.js +5 -5
- data/app/assets/javascripts/foreman_openscap/locale/ko/foreman_openscap.js +26 -28
- data/app/assets/javascripts/foreman_openscap/locale/pt_BR/foreman_openscap.js +1 -1
- data/app/assets/javascripts/foreman_openscap/locale/ru/foreman_openscap.js +1 -1
- data/app/assets/javascripts/foreman_openscap/locale/sv_SE/foreman_openscap.js +1 -1
- data/app/assets/javascripts/foreman_openscap/locale/zh_CN/foreman_openscap.js +22 -24
- data/app/assets/javascripts/foreman_openscap/locale/zh_TW/foreman_openscap.js +1 -1
- data/app/controllers/api/v2/compliance/hosts_bulk_actions_controller.rb +38 -1
- data/app/controllers/policies_controller.rb +1 -1
- data/app/models/concerns/foreman_openscap/host_extensions.rb +10 -4
- data/app/models/concerns/foreman_openscap/hostgroup_extensions.rb +7 -0
- data/app/models/foreman_openscap/asset.rb +21 -1
- data/app/models/foreman_openscap/compliance_status.rb +19 -7
- data/app/models/foreman_openscap/policy.rb +43 -3
- data/app/services/foreman_openscap/compliance_status_resetter.rb +26 -0
- data/config/routes.rb +2 -0
- data/lib/foreman_openscap/engine.rb +3 -1
- data/lib/foreman_openscap/version.rb +1 -1
- data/locale/de/LC_MESSAGES/foreman_openscap.mo +0 -0
- data/locale/de/foreman_openscap.po +5 -5
- data/locale/en/LC_MESSAGES/foreman_openscap.mo +0 -0
- data/locale/en/foreman_openscap.po +1 -1
- data/locale/en_GB/LC_MESSAGES/foreman_openscap.mo +0 -0
- data/locale/en_GB/foreman_openscap.po +1 -1
- data/locale/es/LC_MESSAGES/foreman_openscap.mo +0 -0
- data/locale/es/foreman_openscap.po +1 -1
- data/locale/foreman_openscap.pot +2 -2
- data/locale/fr/LC_MESSAGES/foreman_openscap.mo +0 -0
- data/locale/fr/foreman_openscap.po +26 -24
- data/locale/gl/LC_MESSAGES/foreman_openscap.mo +0 -0
- data/locale/gl/foreman_openscap.po +1 -1
- data/locale/it/LC_MESSAGES/foreman_openscap.mo +0 -0
- data/locale/it/foreman_openscap.po +1 -1
- data/locale/ja/LC_MESSAGES/foreman_openscap.mo +0 -0
- data/locale/ja/foreman_openscap.po +26 -28
- data/locale/ka/LC_MESSAGES/foreman_openscap.mo +0 -0
- data/locale/ka/foreman_openscap.po +5 -5
- data/locale/ko/LC_MESSAGES/foreman_openscap.mo +0 -0
- data/locale/ko/foreman_openscap.po +26 -28
- data/locale/pt_BR/LC_MESSAGES/foreman_openscap.mo +0 -0
- data/locale/pt_BR/foreman_openscap.po +1 -1
- data/locale/ru/LC_MESSAGES/foreman_openscap.mo +0 -0
- data/locale/ru/foreman_openscap.po +1 -1
- data/locale/sv_SE/LC_MESSAGES/foreman_openscap.mo +0 -0
- data/locale/sv_SE/foreman_openscap.po +1 -1
- data/locale/zh_CN/LC_MESSAGES/foreman_openscap.mo +0 -0
- data/locale/zh_CN/foreman_openscap.po +22 -24
- data/locale/zh_TW/LC_MESSAGES/foreman_openscap.mo +0 -0
- data/locale/zh_TW/foreman_openscap.po +1 -1
- data/test/functional/api/v2/compliance/hosts_bulk_actions_controller_test.rb +175 -1
- data/test/test_plugin_helper.rb +7 -0
- data/test/unit/compliance_status_resetter_test.rb +48 -0
- data/test/unit/compliance_status_test.rb +53 -4
- data/test/unit/concerns/host_extensions_test.rb +55 -0
- data/test/unit/concerns/hostgroup_extensions_test.rb +64 -0
- data/test/unit/policy_test.rb +90 -0
- data/webpack/components/BulkActions/compliancePolicy/BulkCompliancePolicyMenuItems.js +49 -0
- data/webpack/components/BulkActions/compliancePolicy/BulkCompliancePolicyModal.js +304 -0
- data/webpack/components/BulkActions/compliancePolicy/BulkCompliancePolicyModalScene.js +65 -0
- data/webpack/components/BulkActions/compliancePolicy/__tests__/actions.test.js +121 -0
- data/webpack/components/BulkActions/compliancePolicy/actions.js +32 -0
- data/webpack/components/BulkActions/compliancePolicy/constants.js +8 -0
- data/webpack/global_index.js +27 -1
- metadata +10 -1
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import React, { useContext } from 'react';
|
|
2
|
+
import { ForemanActionsBarContext } from 'foremanReact/components/HostDetails/ActionsBar';
|
|
3
|
+
import { useBulkModalOpen } from 'foremanReact/common/BulkModalStateHelper';
|
|
4
|
+
import BulkCompliancePolicyModal from './BulkCompliancePolicyModal';
|
|
5
|
+
import { ASSIGN_POLICY_MODAL_ID, UNASSIGN_POLICY_MODAL_ID } from './constants';
|
|
6
|
+
|
|
7
|
+
export const BulkAssignPolicyModalScene = () => {
|
|
8
|
+
const {
|
|
9
|
+
selectAllHostsMode,
|
|
10
|
+
selectedCount,
|
|
11
|
+
fetchBulkParams,
|
|
12
|
+
organizationId,
|
|
13
|
+
locationId,
|
|
14
|
+
refreshTableData,
|
|
15
|
+
} = useContext(ForemanActionsBarContext) || {};
|
|
16
|
+
|
|
17
|
+
const { isOpen, close: closeModal } = useBulkModalOpen(
|
|
18
|
+
ASSIGN_POLICY_MODAL_ID
|
|
19
|
+
);
|
|
20
|
+
|
|
21
|
+
return (
|
|
22
|
+
<BulkCompliancePolicyModal
|
|
23
|
+
key="bulk-assign-compliance-policy-modal"
|
|
24
|
+
selectAllHostsMode={selectAllHostsMode}
|
|
25
|
+
selectedCount={selectedCount}
|
|
26
|
+
fetchBulkParams={fetchBulkParams}
|
|
27
|
+
organizationId={organizationId}
|
|
28
|
+
locationId={locationId}
|
|
29
|
+
isOpen={isOpen}
|
|
30
|
+
closeModal={closeModal}
|
|
31
|
+
mode="assign"
|
|
32
|
+
onSuccess={refreshTableData}
|
|
33
|
+
/>
|
|
34
|
+
);
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
export const BulkUnassignPolicyModalScene = () => {
|
|
38
|
+
const {
|
|
39
|
+
selectAllHostsMode,
|
|
40
|
+
selectedCount,
|
|
41
|
+
fetchBulkParams,
|
|
42
|
+
organizationId,
|
|
43
|
+
locationId,
|
|
44
|
+
refreshTableData,
|
|
45
|
+
} = useContext(ForemanActionsBarContext) || {};
|
|
46
|
+
|
|
47
|
+
const { isOpen, close: closeModal } = useBulkModalOpen(
|
|
48
|
+
UNASSIGN_POLICY_MODAL_ID
|
|
49
|
+
);
|
|
50
|
+
|
|
51
|
+
return (
|
|
52
|
+
<BulkCompliancePolicyModal
|
|
53
|
+
key="bulk-unassign-compliance-policy-modal"
|
|
54
|
+
selectAllHostsMode={selectAllHostsMode}
|
|
55
|
+
selectedCount={selectedCount}
|
|
56
|
+
fetchBulkParams={fetchBulkParams}
|
|
57
|
+
organizationId={organizationId}
|
|
58
|
+
locationId={locationId}
|
|
59
|
+
isOpen={isOpen}
|
|
60
|
+
closeModal={closeModal}
|
|
61
|
+
mode="unassign"
|
|
62
|
+
onSuccess={refreshTableData}
|
|
63
|
+
/>
|
|
64
|
+
);
|
|
65
|
+
};
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { APIActions } from 'foremanReact/redux/API';
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
fetchPolicies,
|
|
5
|
+
bulkAssignPolicy,
|
|
6
|
+
bulkUnassignPolicy,
|
|
7
|
+
} from '../actions';
|
|
8
|
+
import {
|
|
9
|
+
POLICIES_KEY,
|
|
10
|
+
BULK_ASSIGN_POLICY_KEY,
|
|
11
|
+
BULK_UNASSIGN_POLICY_KEY,
|
|
12
|
+
} from '../constants';
|
|
13
|
+
|
|
14
|
+
jest.mock('foremanReact/redux/API', () => ({
|
|
15
|
+
APIActions: {
|
|
16
|
+
get: jest.fn(params => ({
|
|
17
|
+
type: 'API_GET',
|
|
18
|
+
params,
|
|
19
|
+
})),
|
|
20
|
+
put: jest.fn(params => ({
|
|
21
|
+
type: 'API_PUT',
|
|
22
|
+
params,
|
|
23
|
+
})),
|
|
24
|
+
},
|
|
25
|
+
}));
|
|
26
|
+
|
|
27
|
+
jest.mock('foremanReact/common/helpers', () => ({
|
|
28
|
+
foremanUrl: jest.fn(path => path),
|
|
29
|
+
}));
|
|
30
|
+
|
|
31
|
+
jest.mock('foremanReact/common/I18n', () => ({
|
|
32
|
+
translate: jest.fn(text => text),
|
|
33
|
+
}));
|
|
34
|
+
|
|
35
|
+
describe('Compliance Policy Actions', () => {
|
|
36
|
+
beforeEach(() => {
|
|
37
|
+
jest.clearAllMocks();
|
|
38
|
+
APIActions.put.mockReturnValue({ type: 'API_PUT' });
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
describe('fetchPolicies', () => {
|
|
42
|
+
it('dispatches GET request to compliance policies API', () => {
|
|
43
|
+
const action = fetchPolicies();
|
|
44
|
+
|
|
45
|
+
expect(APIActions.get).toHaveBeenCalledWith({
|
|
46
|
+
url: '/api/v2/compliance/policies',
|
|
47
|
+
key: POLICIES_KEY,
|
|
48
|
+
params: { per_page: 'all' },
|
|
49
|
+
});
|
|
50
|
+
expect(action.type).toBe('API_GET');
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
describe('bulkAssignPolicy', () => {
|
|
55
|
+
const requestBody = {
|
|
56
|
+
included: {
|
|
57
|
+
search: 'id ^ (1,2,3)',
|
|
58
|
+
},
|
|
59
|
+
policy_id: '5',
|
|
60
|
+
organization_id: 1,
|
|
61
|
+
location_id: 2,
|
|
62
|
+
};
|
|
63
|
+
const handleSuccess = jest.fn();
|
|
64
|
+
const handleError = jest.fn();
|
|
65
|
+
|
|
66
|
+
it('dispatches PUT request to assign policy endpoint', () => {
|
|
67
|
+
bulkAssignPolicy(requestBody, handleSuccess, handleError);
|
|
68
|
+
|
|
69
|
+
expect(APIActions.put).toHaveBeenCalledTimes(1);
|
|
70
|
+
const callArgs = APIActions.put.mock.calls[0][0];
|
|
71
|
+
|
|
72
|
+
expect(callArgs.key).toBe(BULK_ASSIGN_POLICY_KEY);
|
|
73
|
+
expect(callArgs.url).toContain(
|
|
74
|
+
'/api/v2/compliance/hosts/bulk/assign_compliance_policy'
|
|
75
|
+
);
|
|
76
|
+
expect(callArgs.params).toEqual(requestBody);
|
|
77
|
+
expect(callArgs.handleSuccess).toBe(handleSuccess);
|
|
78
|
+
expect(callArgs.handleError).toBe(handleError);
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
it('passes error handler callback', () => {
|
|
82
|
+
bulkAssignPolicy(requestBody, handleSuccess, handleError);
|
|
83
|
+
const callArgs = APIActions.put.mock.calls[0][0];
|
|
84
|
+
expect(callArgs.handleError).toBe(handleError);
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
describe('bulkUnassignPolicy', () => {
|
|
89
|
+
const requestBody = {
|
|
90
|
+
included: {
|
|
91
|
+
search: 'name ~ test',
|
|
92
|
+
},
|
|
93
|
+
policy_id: '3',
|
|
94
|
+
organization_id: 1,
|
|
95
|
+
location_id: 2,
|
|
96
|
+
};
|
|
97
|
+
const handleSuccess = jest.fn();
|
|
98
|
+
const handleError = jest.fn();
|
|
99
|
+
|
|
100
|
+
it('dispatches PUT request to unassign policy endpoint', () => {
|
|
101
|
+
bulkUnassignPolicy(requestBody, handleSuccess, handleError);
|
|
102
|
+
|
|
103
|
+
expect(APIActions.put).toHaveBeenCalledTimes(1);
|
|
104
|
+
const callArgs = APIActions.put.mock.calls[0][0];
|
|
105
|
+
|
|
106
|
+
expect(callArgs.key).toBe(BULK_UNASSIGN_POLICY_KEY);
|
|
107
|
+
expect(callArgs.url).toContain(
|
|
108
|
+
'/api/v2/compliance/hosts/bulk/unassign_compliance_policy'
|
|
109
|
+
);
|
|
110
|
+
expect(callArgs.params).toEqual(requestBody);
|
|
111
|
+
expect(callArgs.handleSuccess).toBe(handleSuccess);
|
|
112
|
+
expect(callArgs.handleError).toBe(handleError);
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
it('passes error handler callback', () => {
|
|
116
|
+
bulkUnassignPolicy(requestBody, handleSuccess, handleError);
|
|
117
|
+
const callArgs = APIActions.put.mock.calls[0][0];
|
|
118
|
+
expect(callArgs.handleError).toBe(handleError);
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
});
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { APIActions } from 'foremanReact/redux/API';
|
|
2
|
+
import { foremanUrl } from 'foremanReact/common/helpers';
|
|
3
|
+
import {
|
|
4
|
+
POLICIES_KEY,
|
|
5
|
+
BULK_ASSIGN_POLICY_KEY,
|
|
6
|
+
BULK_UNASSIGN_POLICY_KEY,
|
|
7
|
+
} from './constants';
|
|
8
|
+
|
|
9
|
+
export const fetchPolicies = () =>
|
|
10
|
+
APIActions.get({
|
|
11
|
+
url: foremanUrl('/api/v2/compliance/policies'),
|
|
12
|
+
key: POLICIES_KEY,
|
|
13
|
+
params: { per_page: 'all' },
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
export const bulkAssignPolicy = (params, handleSuccess, handleError) =>
|
|
17
|
+
APIActions.put({
|
|
18
|
+
url: foremanUrl('/api/v2/compliance/hosts/bulk/assign_compliance_policy'),
|
|
19
|
+
key: BULK_ASSIGN_POLICY_KEY,
|
|
20
|
+
params,
|
|
21
|
+
handleSuccess,
|
|
22
|
+
handleError,
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
export const bulkUnassignPolicy = (params, handleSuccess, handleError) =>
|
|
26
|
+
APIActions.put({
|
|
27
|
+
url: foremanUrl('/api/v2/compliance/hosts/bulk/unassign_compliance_policy'),
|
|
28
|
+
key: BULK_UNASSIGN_POLICY_KEY,
|
|
29
|
+
params,
|
|
30
|
+
handleSuccess,
|
|
31
|
+
handleError,
|
|
32
|
+
});
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export const POLICIES_KEY = 'COMPLIANCE_POLICIES';
|
|
2
|
+
export const BULK_ASSIGN_POLICY_KEY = 'BULK_ASSIGN_COMPLIANCE_POLICY';
|
|
3
|
+
export const BULK_UNASSIGN_POLICY_KEY = 'BULK_UNASSIGN_COMPLIANCE_POLICY';
|
|
4
|
+
|
|
5
|
+
export const ASSIGN_POLICY_MODAL_ID = 'assign-compliance-policy-modal';
|
|
6
|
+
export const UNASSIGN_POLICY_MODAL_ID = 'unassign-compliance-policy-modal';
|
|
7
|
+
|
|
8
|
+
export const ASSIGN_POLICIES = 'assign_policies';
|
data/webpack/global_index.js
CHANGED
|
@@ -4,10 +4,15 @@ import HostKebabItems from './components/HostExtentions/HostKebabItems';
|
|
|
4
4
|
import BulkChangeOpenscapProxyModalScene, {
|
|
5
5
|
ChangeOpenscapProxyMenuItem,
|
|
6
6
|
} from './components/HostsIndex/ChangeOpenscapProxyAction';
|
|
7
|
+
import BulkCompliancePolicyMenuItems from './components/BulkActions/compliancePolicy/BulkCompliancePolicyMenuItems';
|
|
8
|
+
import {
|
|
9
|
+
BulkAssignPolicyModalScene,
|
|
10
|
+
BulkUnassignPolicyModalScene,
|
|
11
|
+
} from './components/BulkActions/compliancePolicy/BulkCompliancePolicyModalScene';
|
|
7
12
|
|
|
8
13
|
const HOST_ASSOCIATIONS_WEIGHT = 1212;
|
|
9
14
|
const BULK_MODAL_WEIGHT = 100;
|
|
10
|
-
|
|
15
|
+
const BULK_POLICY_MODAL_WEIGHT = 200;
|
|
11
16
|
const OPENSCAP_KEBAB_WEIGHT = 400;
|
|
12
17
|
|
|
13
18
|
addGlobalFill(
|
|
@@ -30,3 +35,24 @@ addGlobalFill(
|
|
|
30
35
|
<BulkChangeOpenscapProxyModalScene key="bulk-change-openscap-proxy-modal" />,
|
|
31
36
|
BULK_MODAL_WEIGHT
|
|
32
37
|
);
|
|
38
|
+
|
|
39
|
+
addGlobalFill(
|
|
40
|
+
'_host-associations',
|
|
41
|
+
'compliance-policy-bulk-actions',
|
|
42
|
+
<BulkCompliancePolicyMenuItems key="compliance-policy-menu-items" />,
|
|
43
|
+
BULK_POLICY_MODAL_WEIGHT
|
|
44
|
+
);
|
|
45
|
+
|
|
46
|
+
addGlobalFill(
|
|
47
|
+
'_all-hosts-modals',
|
|
48
|
+
'assign-compliance-policy-modal',
|
|
49
|
+
<BulkAssignPolicyModalScene key="bulk-assign-policy-modal" />,
|
|
50
|
+
BULK_POLICY_MODAL_WEIGHT
|
|
51
|
+
);
|
|
52
|
+
|
|
53
|
+
addGlobalFill(
|
|
54
|
+
'_all-hosts-modals',
|
|
55
|
+
'unassign-compliance-policy-modal',
|
|
56
|
+
<BulkUnassignPolicyModalScene key="bulk-unassign-policy-modal" />,
|
|
57
|
+
BULK_POLICY_MODAL_WEIGHT
|
|
58
|
+
);
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: foreman_openscap
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 13.
|
|
4
|
+
version: 13.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- slukasik@redhat.com
|
|
@@ -106,6 +106,7 @@ files:
|
|
|
106
106
|
- app/services/foreman_openscap/client_config/base.rb
|
|
107
107
|
- app/services/foreman_openscap/client_config/manual.rb
|
|
108
108
|
- app/services/foreman_openscap/client_config/puppet.rb
|
|
109
|
+
- app/services/foreman_openscap/compliance_status_resetter.rb
|
|
109
110
|
- app/services/foreman_openscap/config_name_service.rb
|
|
110
111
|
- app/services/foreman_openscap/host_report_dashboard/data.rb
|
|
111
112
|
- app/services/foreman_openscap/hostgroup_overrider.rb
|
|
@@ -349,6 +350,7 @@ files:
|
|
|
349
350
|
- test/test_plugin_helper.rb
|
|
350
351
|
- test/unit/arf_report_status_calculator_test.rb
|
|
351
352
|
- test/unit/arf_report_test.rb
|
|
353
|
+
- test/unit/compliance_status_resetter_test.rb
|
|
352
354
|
- test/unit/compliance_status_test.rb
|
|
353
355
|
- test/unit/concerns/bookmark_controller_validator_extensions_test.rb
|
|
354
356
|
- test/unit/concerns/host_extensions_test.rb
|
|
@@ -364,6 +366,12 @@ files:
|
|
|
364
366
|
- test/unit/services/lookup_key_overrider_test.rb
|
|
365
367
|
- test/unit/services/report_dashboard/data_test.rb
|
|
366
368
|
- test/unit/tailoring_file_test.rb
|
|
369
|
+
- webpack/components/BulkActions/compliancePolicy/BulkCompliancePolicyMenuItems.js
|
|
370
|
+
- webpack/components/BulkActions/compliancePolicy/BulkCompliancePolicyModal.js
|
|
371
|
+
- webpack/components/BulkActions/compliancePolicy/BulkCompliancePolicyModalScene.js
|
|
372
|
+
- webpack/components/BulkActions/compliancePolicy/__tests__/actions.test.js
|
|
373
|
+
- webpack/components/BulkActions/compliancePolicy/actions.js
|
|
374
|
+
- webpack/components/BulkActions/compliancePolicy/constants.js
|
|
367
375
|
- webpack/components/EmptyState.js
|
|
368
376
|
- webpack/components/HostExtentions/HostKebabItems.js
|
|
369
377
|
- webpack/components/HostsIndex/BulkActions/changeOpenscapProxy/BulkChangeOpenscapProxyModal.js
|
|
@@ -457,6 +465,7 @@ test_files:
|
|
|
457
465
|
- test/test_plugin_helper.rb
|
|
458
466
|
- test/unit/arf_report_status_calculator_test.rb
|
|
459
467
|
- test/unit/arf_report_test.rb
|
|
468
|
+
- test/unit/compliance_status_resetter_test.rb
|
|
460
469
|
- test/unit/compliance_status_test.rb
|
|
461
470
|
- test/unit/concerns/bookmark_controller_validator_extensions_test.rb
|
|
462
471
|
- test/unit/concerns/host_extensions_test.rb
|