foreman_ansible 6.0.2 → 6.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/controllers/ansible_roles_controller.rb +12 -8
- data/app/controllers/ansible_variables_controller.rb +4 -0
- data/app/controllers/api/v2/ansible_inventories_controller.rb +2 -2
- data/app/controllers/api/v2/ansible_roles_controller.rb +32 -11
- data/app/controllers/api/v2/ansible_variables_controller.rb +6 -4
- data/app/controllers/foreman_ansible/concerns/import_controller_helper.rb +3 -3
- data/app/helpers/foreman_ansible/ansible_reports_helper.rb +42 -56
- data/app/helpers/foreman_ansible/ansible_roles_data_preparations.rb +95 -0
- data/app/helpers/foreman_ansible/ansible_roles_helper.rb +20 -1
- data/app/jobs/sync_roles_and_variables.rb +20 -0
- data/app/models/concerns/foreman_ansible/host_managed_extensions.rb +10 -7
- data/app/models/concerns/foreman_ansible/hostgroup_extensions.rb +19 -4
- data/app/models/foreman_ansible/ansible_provider.rb +52 -2
- data/app/models/host_ansible_role.rb +1 -0
- data/app/models/hostgroup_ansible_role.rb +1 -0
- data/app/models/setting/ansible.rb +9 -0
- data/app/services/foreman_ansible/ansible_report_importer.rb +4 -0
- data/app/services/foreman_ansible/ansible_report_scanner.rb +15 -1
- data/app/services/foreman_ansible/api_roles_importer.rb +23 -11
- data/app/services/foreman_ansible/fact_parser.rb +21 -1
- data/app/services/foreman_ansible/import_roles_and_variables_error_notification.rb +31 -0
- data/app/services/foreman_ansible/import_roles_and_variables_success_notification.rb +26 -0
- data/app/services/foreman_ansible/inventory_creator.rb +3 -7
- data/app/services/foreman_ansible/operating_system_parser.rb +8 -2
- data/app/services/foreman_ansible/roles_importer.rb +3 -2
- data/app/services/foreman_ansible/ui_roles_importer.rb +2 -2
- data/app/services/foreman_ansible/variables_importer.rb +36 -1
- data/app/views/ansible_roles/import.html.erb +10 -50
- data/app/views/ansible_variables/index.html.erb +1 -2
- data/app/views/api/v2/ansible_roles/sync.json.rabl +5 -0
- data/app/views/foreman_ansible/ansible_roles/_select_tab_content.html.erb +8 -17
- data/app/views/foreman_ansible/config_reports/_ansible.html.erb +24 -8
- data/app/views/foreman_ansible/job_templates/ansible_collections_-_install_from_galaxy.erb +28 -0
- data/app/views/foreman_ansible/job_templates/ansible_roles_-_ansible_default.erb +4 -0
- data/app/views/foreman_ansible/job_templates/ansible_roles_-_install_from_galaxy.erb +1 -1
- data/app/views/foreman_ansible/job_templates/capsule_upgrade_-_ansible_default.erb +2 -3
- data/app/views/foreman_ansible/job_templates/convert_to_rhel.erb +44 -0
- data/config/routes.rb +5 -4
- data/db/migrate/20210120150019_add_position_to_ansible_role.rb +27 -0
- data/db/seeds.d/100_common_parameters.rb +7 -0
- data/db/seeds.d/90_notification_blueprints.rb +19 -1
- data/lib/foreman_ansible/engine.rb +1 -1
- data/lib/foreman_ansible/register.rb +7 -5
- data/lib/foreman_ansible/version.rb +1 -1
- data/locale/ca/LC_MESSAGES/foreman_ansible.mo +0 -0
- data/locale/ca/foreman_ansible.po +1 -1
- data/locale/cs_CZ/LC_MESSAGES/foreman_ansible.mo +0 -0
- data/locale/cs_CZ/foreman_ansible.po +1 -1
- data/locale/de/LC_MESSAGES/foreman_ansible.mo +0 -0
- data/locale/de/foreman_ansible.po +1 -1
- data/locale/en/LC_MESSAGES/foreman_ansible.mo +0 -0
- data/locale/en/foreman_ansible.po +1 -1
- data/locale/en_GB/LC_MESSAGES/foreman_ansible.mo +0 -0
- data/locale/en_GB/foreman_ansible.po +1 -1
- data/locale/es/LC_MESSAGES/foreman_ansible.mo +0 -0
- data/locale/es/foreman_ansible.po +1 -1
- data/locale/fr/LC_MESSAGES/foreman_ansible.mo +0 -0
- data/locale/fr/foreman_ansible.po +1 -1
- data/locale/gl/LC_MESSAGES/foreman_ansible.mo +0 -0
- data/locale/gl/foreman_ansible.po +1 -1
- data/locale/it/LC_MESSAGES/foreman_ansible.mo +0 -0
- data/locale/it/foreman_ansible.po +1 -1
- data/locale/ja/LC_MESSAGES/foreman_ansible.mo +0 -0
- data/locale/ja/foreman_ansible.po +1 -1
- data/locale/ko/LC_MESSAGES/foreman_ansible.mo +0 -0
- data/locale/ko/foreman_ansible.po +1 -1
- data/locale/nl_NL/LC_MESSAGES/foreman_ansible.mo +0 -0
- data/locale/nl_NL/foreman_ansible.po +1 -1
- data/locale/pl/LC_MESSAGES/foreman_ansible.mo +0 -0
- data/locale/pl/foreman_ansible.po +1 -1
- data/locale/pt_BR/LC_MESSAGES/foreman_ansible.mo +0 -0
- data/locale/pt_BR/foreman_ansible.po +1 -1
- data/locale/ru/LC_MESSAGES/foreman_ansible.mo +0 -0
- data/locale/ru/foreman_ansible.po +1 -1
- data/locale/sv_SE/LC_MESSAGES/foreman_ansible.mo +0 -0
- data/locale/sv_SE/foreman_ansible.po +1 -1
- data/locale/zh_CN/LC_MESSAGES/foreman_ansible.mo +0 -0
- data/locale/zh_CN/foreman_ansible.po +1 -1
- data/locale/zh_TW/LC_MESSAGES/foreman_ansible.mo +0 -0
- data/locale/zh_TW/foreman_ansible.po +1 -1
- data/package.json +13 -42
- data/test/factories/ansible_roles.rb +12 -0
- data/test/factories/host_ansible_enhancements.rb +23 -0
- data/test/foreman_ansible/helpers/ansible_roles_helper_test.rb +45 -0
- data/test/functional/ansible_variables_controller_test.rb +0 -15
- data/test/functional/api/v2/ansible_roles_controller_test.rb +23 -0
- data/test/functional/api/v2/hostgroups_controller_test.rb +5 -4
- data/test/functional/api/v2/hosts_controller_test.rb +9 -8
- data/test/functional/hosts_controller_test.rb +10 -6
- data/test/unit/concerns/host_managed_extensions_test.rb +17 -3
- data/test/unit/concerns/hostgroup_extensions_test.rb +13 -7
- data/test/unit/helpers/ansible_reports_helper_test.rb +4 -30
- data/test/unit/host_ansible_role_test.rb +2 -1
- data/test/unit/hostgroup_ansible_role_test.rb +2 -1
- data/test/unit/ignore_roles_test.rb +43 -0
- data/test/unit/import_roles_and_variables.rb +60 -0
- data/test/unit/services/ansible_variables_importer_test.rb +13 -0
- data/test/unit/services/api_roles_importer_test.rb +22 -5
- data/test/unit/services/fact_parser_test.rb +16 -0
- data/test/unit/services/inventory_creator_test.rb +15 -7
- data/test/unit/services/ui_roles_importer_test.rb +2 -2
- data/webpack/components/AnsibleHostDetail/AnsibleHostDetail.js +35 -0
- data/webpack/components/AnsibleHostDetail/AnsibleHostDetail.scss +6 -0
- data/webpack/components/AnsibleHostDetail/AnsibleHostDetail.test.js +14 -0
- data/webpack/components/AnsibleHostDetail/index.js +6 -0
- data/webpack/components/AnsibleRolesAndVariables/AnsibleRolesAndVariables.js +178 -0
- data/webpack/components/AnsibleRolesAndVariables/AnsibleRolesAndVariables.scss +9 -0
- data/webpack/components/AnsibleRolesAndVariables/AnsibleRolesAndVariablesActions.js +39 -0
- data/webpack/components/AnsibleRolesAndVariables/AnsibleRolesAndVariablesConstants.js +4 -0
- data/webpack/components/AnsibleRolesAndVariables/AnsibleRolesAndVariablesHelpers.js +11 -0
- data/webpack/components/AnsibleRolesAndVariables/__test__/AnsibleRolesAndVariablesHelpers.test.js +50 -0
- data/webpack/components/AnsibleRolesAndVariables/__test__/AnsibleRolesAndVariablesImport.test.js +39 -0
- data/webpack/components/AnsibleRolesAndVariables/__test__/__snapshots__/AnsibleRolesAndVariablesImport.test.js.snap +177 -0
- data/webpack/components/AnsibleRolesAndVariables/index.js +31 -0
- data/webpack/components/AnsibleRolesSwitcher/AnsibleRolesSwitcher.js +25 -27
- data/webpack/components/AnsibleRolesSwitcher/AnsibleRolesSwitcher.scss +1 -1
- data/webpack/components/AnsibleRolesSwitcher/AnsibleRolesSwitcherActions.js +20 -14
- data/webpack/components/AnsibleRolesSwitcher/AnsibleRolesSwitcherConstants.js +1 -2
- data/webpack/components/AnsibleRolesSwitcher/AnsibleRolesSwitcherReducer.js +13 -8
- data/webpack/components/AnsibleRolesSwitcher/AnsibleRolesSwitcherSelectors.js +8 -28
- data/webpack/components/AnsibleRolesSwitcher/__fixtures__/ansibleRolesSwitcherReducer.fixtures.js +1 -0
- data/webpack/components/AnsibleRolesSwitcher/__tests__/AnsibleRolesSwitcher.test.js +6 -4
- data/webpack/components/AnsibleRolesSwitcher/__tests__/AnsibleRolesSwitcherReducer.test.js +1 -9
- data/webpack/components/AnsibleRolesSwitcher/__tests__/AnsibleRolesSwitcherSelectors.test.js +3 -16
- data/webpack/components/AnsibleRolesSwitcher/__tests__/__snapshots__/AnsibleRolesSwitcher.test.js.snap +4 -8
- data/webpack/components/AnsibleRolesSwitcher/__tests__/__snapshots__/AnsibleRolesSwitcherReducer.test.js.snap +8 -97
- data/webpack/components/AnsibleRolesSwitcher/__tests__/__snapshots__/AnsibleRolesSwitcherSelectors.test.js.snap +5 -30
- data/webpack/components/AnsibleRolesSwitcher/components/AnsiblePermissionDenied.test.js +1 -1
- data/webpack/components/AnsibleRolesSwitcher/components/AnsibleRole.js +5 -2
- data/webpack/components/AnsibleRolesSwitcher/components/AnsibleRole.test.js +1 -1
- data/webpack/components/AnsibleRolesSwitcher/components/AnsibleRoleInputs.js +43 -0
- data/webpack/components/AnsibleRolesSwitcher/components/AnsibleRoleInputs.test.js +19 -0
- data/webpack/components/AnsibleRolesSwitcher/components/AssignedRolesList.js +63 -51
- data/webpack/components/AnsibleRolesSwitcher/components/AssignedRolesList.test.js +4 -1
- data/webpack/components/AnsibleRolesSwitcher/components/AvailableRolesList.test.js +1 -1
- data/webpack/components/AnsibleRolesSwitcher/components/OrderedRolesTooltip.js +23 -0
- data/webpack/components/AnsibleRolesSwitcher/components/__snapshots__/AnsiblePermissionDenied.test.js.snap +2 -0
- data/webpack/components/AnsibleRolesSwitcher/components/__snapshots__/AnsibleRoleInputs.test.js.snap +51 -0
- data/webpack/components/AnsibleRolesSwitcher/components/__snapshots__/AssignedRolesList.test.js.snap +28 -28
- data/webpack/components/AnsibleRolesSwitcher/components/__snapshots__/AvailableRolesList.test.js.snap +5 -0
- data/webpack/components/AnsibleRolesSwitcher/index.js +4 -8
- data/webpack/global_index.js +12 -0
- data/webpack/index.js +6 -13
- metadata +54 -30
- data/app/views/ansible_variables/import.html.erb +0 -56
- data/test/unit/lib/foreman_ansible_core/ansible_runner_test.rb +0 -51
- data/test/unit/lib/foreman_ansible_core/command_creator_test.rb +0 -64
- data/test/unit/lib/foreman_ansible_core/playbook_runner_test.rb +0 -110
- data/webpack/__mocks__/foremanReact/common/I18n.js +0 -1
- data/webpack/__mocks__/foremanReact/components/Pagination/PaginationWrapper.js +0 -2
- data/webpack/__mocks__/foremanReact/components/common/EmptyState.js +0 -5
- data/webpack/test_setup.js +0 -12
@@ -1,4 +1,4 @@
|
|
1
|
-
import { testComponentSnapshotsWithFixtures } from '
|
1
|
+
import { testComponentSnapshotsWithFixtures } from '@theforeman/test';
|
2
2
|
import AnsiblePermissionDenied from './AnsiblePermissionDenied';
|
3
3
|
|
4
4
|
jest.mock('foremanReact/components/common/EmptyState');
|
@@ -6,7 +6,7 @@ import { translate as __ } from 'foremanReact/common/I18n';
|
|
6
6
|
import AnsibleRoleActionButton from './AnsibleRoleActionButton';
|
7
7
|
import '../AnsibleRolesSwitcher.scss';
|
8
8
|
|
9
|
-
const AnsibleRole = ({ role, icon, onClick, resourceName }) => {
|
9
|
+
const AnsibleRole = ({ role, icon, onClick, resourceName, index }) => {
|
10
10
|
const text =
|
11
11
|
resourceName === 'hostgroup'
|
12
12
|
? __('This Ansible role is inherited from parent host group')
|
@@ -23,6 +23,9 @@ const AnsibleRole = ({ role, icon, onClick, resourceName }) => {
|
|
23
23
|
onClickFn(ansibleRole);
|
24
24
|
};
|
25
25
|
|
26
|
+
const headingText = (name, idx) =>
|
27
|
+
idx || idx === 0 ? `${idx + 1}. ${name}` : name;
|
28
|
+
|
26
29
|
const listItem = (click = undefined) => (
|
27
30
|
<ListView.Item
|
28
31
|
id={role.id}
|
@@ -30,7 +33,7 @@ const AnsibleRole = ({ role, icon, onClick, resourceName }) => {
|
|
30
33
|
'ansible-role-disabled': role.inherited,
|
31
34
|
'ansible-role-movable': !role.inherited,
|
32
35
|
})}
|
33
|
-
heading={role.name}
|
36
|
+
heading={headingText(role.name, index)}
|
34
37
|
actions={
|
35
38
|
role.inherited ? (
|
36
39
|
''
|
@@ -0,0 +1,43 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import PropTypes from 'prop-types';
|
3
|
+
|
4
|
+
const AnsibleRoleInputs = props => {
|
5
|
+
const { role, idx, resourceName } = props;
|
6
|
+
|
7
|
+
const fieldName = attr =>
|
8
|
+
`${resourceName}[${resourceName}_ansible_roles_attributes][${idx}][${attr}]`;
|
9
|
+
|
10
|
+
const attrName = modelName => `${modelName}AnsibleRoleId`;
|
11
|
+
|
12
|
+
const idField = (
|
13
|
+
<input
|
14
|
+
name={fieldName('id')}
|
15
|
+
value={role[attrName(resourceName)]}
|
16
|
+
type="hidden"
|
17
|
+
/>
|
18
|
+
);
|
19
|
+
return (
|
20
|
+
<React.Fragment>
|
21
|
+
{role[attrName(resourceName)] ? idField : null}
|
22
|
+
<input
|
23
|
+
name={fieldName('ansible_role_id')}
|
24
|
+
value={role.id}
|
25
|
+
type="hidden"
|
26
|
+
/>
|
27
|
+
<input name={fieldName('position')} value={idx + 1} type="hidden" />
|
28
|
+
<input
|
29
|
+
name={fieldName('_destroy')}
|
30
|
+
value={!!role.destroy}
|
31
|
+
type="hidden"
|
32
|
+
/>
|
33
|
+
</React.Fragment>
|
34
|
+
);
|
35
|
+
};
|
36
|
+
|
37
|
+
AnsibleRoleInputs.propTypes = {
|
38
|
+
role: PropTypes.object.isRequired,
|
39
|
+
idx: PropTypes.number.isRequired,
|
40
|
+
resourceName: PropTypes.string.isRequired,
|
41
|
+
};
|
42
|
+
|
43
|
+
export default AnsibleRoleInputs;
|
@@ -0,0 +1,19 @@
|
|
1
|
+
import { testComponentSnapshotsWithFixtures } from '@theforeman/test';
|
2
|
+
|
3
|
+
import AnsibleRoleInputs from './AnsibleRoleInputs';
|
4
|
+
|
5
|
+
const fixtures = {
|
6
|
+
'should render role to add': {
|
7
|
+
role: { id: 2, name: 'test.role', hostAnsibleRoleId: 5, position: 2 },
|
8
|
+
resourceName: 'host',
|
9
|
+
idx: 14,
|
10
|
+
},
|
11
|
+
'should render role to remove': {
|
12
|
+
role: { id: 2, name: 'test.role', hostAnsibleRoleId: 5, destroy: true },
|
13
|
+
resourceName: 'host',
|
14
|
+
idx: 14,
|
15
|
+
},
|
16
|
+
};
|
17
|
+
|
18
|
+
describe('AnsibleRoleInputs', () =>
|
19
|
+
testComponentSnapshotsWithFixtures(AnsibleRoleInputs, fixtures));
|
@@ -1,79 +1,91 @@
|
|
1
1
|
import React from 'react';
|
2
|
+
import { DndProvider } from 'react-dnd';
|
3
|
+
import HTML5Backend from 'react-dnd-html5-backend';
|
4
|
+
|
2
5
|
import { ListView } from 'patternfly-react';
|
3
|
-
|
4
|
-
import {
|
6
|
+
|
7
|
+
import {
|
8
|
+
orderable,
|
9
|
+
orderDragged,
|
10
|
+
} from 'foremanReact/components/common/forms/OrderableSelect/helpers';
|
11
|
+
|
5
12
|
import PropTypes from 'prop-types';
|
6
13
|
|
7
14
|
import AnsibleRole from './AnsibleRole';
|
15
|
+
import AnsibleRoleInputs from './AnsibleRoleInputs';
|
16
|
+
|
17
|
+
const OrderableRole = orderable(AnsibleRole, {
|
18
|
+
type: 'ansibleRole',
|
19
|
+
getItem: props => ({ id: props.role.id }),
|
20
|
+
direction: 'vertical',
|
21
|
+
});
|
8
22
|
|
9
23
|
const AssignedRolesList = ({
|
24
|
+
unassignedRoles,
|
10
25
|
assignedRoles,
|
11
|
-
|
12
|
-
pagination,
|
13
|
-
itemCount,
|
14
|
-
onPaginationChange,
|
26
|
+
toDestroyRoles,
|
15
27
|
onRemoveRole,
|
28
|
+
onMoveRole,
|
16
29
|
resourceName,
|
17
30
|
}) => {
|
18
|
-
const
|
19
|
-
|
31
|
+
const moveValue = (dragIndex, hoverIndex) => {
|
32
|
+
onMoveRole(orderDragged(assignedRoles, dragIndex, hoverIndex));
|
33
|
+
};
|
34
|
+
|
35
|
+
const allOwnRoles = roles => roles.filter(role => !role.inherited);
|
36
|
+
|
37
|
+
const renderRole = (role, idx) =>
|
38
|
+
role.inherited ? renderInherited(role, idx) : renderOwn(role, idx);
|
39
|
+
|
40
|
+
const renderInherited = (role, idx) => (
|
41
|
+
<AnsibleRole
|
42
|
+
key={role.id}
|
43
|
+
role={role}
|
44
|
+
index={idx}
|
45
|
+
icon="fa fa-minus-circle"
|
46
|
+
onClick={onRemoveRole}
|
47
|
+
resourceName={resourceName}
|
48
|
+
/>
|
49
|
+
);
|
50
|
+
|
51
|
+
const renderOwn = (role, idx) => (
|
52
|
+
<OrderableRole
|
53
|
+
key={role.id}
|
54
|
+
role={role}
|
55
|
+
index={idx}
|
56
|
+
moveValue={moveValue}
|
57
|
+
icon="fa fa-minus-circle"
|
58
|
+
onClick={onRemoveRole}
|
59
|
+
resourceName={resourceName}
|
60
|
+
/>
|
20
61
|
);
|
21
62
|
|
22
63
|
return (
|
23
|
-
<
|
24
|
-
<ListView>
|
25
|
-
<div className="sticky-pagination sticky-pagination-grey">
|
26
|
-
<PaginationWrapper
|
27
|
-
viewType="list"
|
28
|
-
itemCount={itemCount}
|
29
|
-
pagination={pagination}
|
30
|
-
onChange={onPaginationChange}
|
31
|
-
dropdownButtonId="assigned-ansible-roles-pagination-row-dropdown"
|
32
|
-
/>
|
33
|
-
</div>
|
34
|
-
{assignedRoles.map(role => (
|
35
|
-
<AnsibleRole
|
36
|
-
key={role.id}
|
37
|
-
role={role}
|
38
|
-
icon="fa fa-minus-circle"
|
39
|
-
onClick={onRemoveRole}
|
40
|
-
resourceName={resourceName}
|
41
|
-
/>
|
42
|
-
))}
|
43
|
-
</ListView>
|
64
|
+
<DndProvider backend={HTML5Backend}>
|
65
|
+
<ListView>{assignedRoles.map(renderRole)}</ListView>
|
44
66
|
<div>
|
45
|
-
{
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
value=""
|
50
|
-
/>
|
51
|
-
) : (
|
52
|
-
directlyAssignedRoles.map(role => (
|
53
|
-
<input
|
67
|
+
{allOwnRoles(assignedRoles)
|
68
|
+
.concat(toDestroyRoles)
|
69
|
+
.map((role, idx) => (
|
70
|
+
<AnsibleRoleInputs
|
54
71
|
key={role.id}
|
55
|
-
|
56
|
-
|
57
|
-
|
72
|
+
role={role}
|
73
|
+
idx={idx}
|
74
|
+
resourceName={resourceName}
|
58
75
|
/>
|
59
|
-
))
|
60
|
-
)}
|
76
|
+
))}
|
61
77
|
</div>
|
62
|
-
</
|
78
|
+
</DndProvider>
|
63
79
|
);
|
64
80
|
};
|
65
81
|
|
66
82
|
AssignedRolesList.propTypes = {
|
83
|
+
unassignedRoles: PropTypes.arrayOf(PropTypes.object).isRequired,
|
67
84
|
assignedRoles: PropTypes.arrayOf(PropTypes.object).isRequired,
|
68
|
-
allAssignedRoles: PropTypes.arrayOf(PropTypes.object).isRequired,
|
69
|
-
pagination: PropTypes.shape({
|
70
|
-
page: PropTypes.number,
|
71
|
-
perPage: PropTypes.number,
|
72
|
-
}).isRequired,
|
73
|
-
itemCount: PropTypes.number.isRequired,
|
74
|
-
onPaginationChange: PropTypes.func.isRequired,
|
75
85
|
onRemoveRole: PropTypes.func.isRequired,
|
86
|
+
onMoveRole: PropTypes.func.isRequired,
|
76
87
|
resourceName: PropTypes.string.isRequired,
|
88
|
+
toDestroyRoles: PropTypes.arrayOf(PropTypes.object).isRequired,
|
77
89
|
};
|
78
90
|
|
79
91
|
export default AssignedRolesList;
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import { testComponentSnapshotsWithFixtures } from '
|
1
|
+
import { testComponentSnapshotsWithFixtures } from '@theforeman/test';
|
2
2
|
|
3
3
|
import AssignedRolesList from './AssignedRolesList';
|
4
4
|
|
@@ -18,7 +18,10 @@ const fixtures = {
|
|
18
18
|
itemCount: 2,
|
19
19
|
onPaginationChange: noop,
|
20
20
|
onRemoveRole: noop,
|
21
|
+
onMoveRole: noop,
|
21
22
|
resourceName: 'host',
|
23
|
+
toDestroyRoles: [],
|
24
|
+
unassignedRoles: [],
|
22
25
|
},
|
23
26
|
};
|
24
27
|
|
@@ -0,0 +1,23 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import { translate as __ } from 'foremanReact/common/I18n';
|
3
|
+
import { Tooltip, Icon, OverlayTrigger } from 'patternfly-react';
|
4
|
+
|
5
|
+
const OrderedRolesTooltip = props => {
|
6
|
+
const tooltip = (
|
7
|
+
<Tooltip id="assigned-ansible-roles-tooltip">
|
8
|
+
<span>
|
9
|
+
{__(
|
10
|
+
'Use drag and drop to change order of the roles. Ordering of roles is respected for Ansible runs, inherited roles are always before those assigned directly'
|
11
|
+
)}
|
12
|
+
</span>
|
13
|
+
</Tooltip>
|
14
|
+
);
|
15
|
+
|
16
|
+
return (
|
17
|
+
<OverlayTrigger overlay={tooltip} trigger={['hover', 'focus']}>
|
18
|
+
<Icon type="pf" name="info" style={{ 'margin-right': '10px' }} />
|
19
|
+
</OverlayTrigger>
|
20
|
+
);
|
21
|
+
};
|
22
|
+
|
23
|
+
export default OrderedRolesTooltip;
|
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
exports[`AnsiblePermissionDenied should render 1`] = `
|
4
4
|
<EmptyStatePattern
|
5
|
+
action={null}
|
5
6
|
description={
|
6
7
|
<span>
|
7
8
|
You are not authorized to perform this action.
|
@@ -22,5 +23,6 @@ exports[`AnsiblePermissionDenied should render 1`] = `
|
|
22
23
|
header="Permission Denied"
|
23
24
|
icon="lock"
|
24
25
|
iconType="fa"
|
26
|
+
secondaryActions={Array []}
|
25
27
|
/>
|
26
28
|
`;
|
data/webpack/components/AnsibleRolesSwitcher/components/__snapshots__/AnsibleRoleInputs.test.js.snap
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
2
|
+
|
3
|
+
exports[`AnsibleRoleInputs should render role to add 1`] = `
|
4
|
+
<Fragment>
|
5
|
+
<input
|
6
|
+
name="host[host_ansible_roles_attributes][14][id]"
|
7
|
+
type="hidden"
|
8
|
+
value={5}
|
9
|
+
/>
|
10
|
+
<input
|
11
|
+
name="host[host_ansible_roles_attributes][14][ansible_role_id]"
|
12
|
+
type="hidden"
|
13
|
+
value={2}
|
14
|
+
/>
|
15
|
+
<input
|
16
|
+
name="host[host_ansible_roles_attributes][14][position]"
|
17
|
+
type="hidden"
|
18
|
+
value={15}
|
19
|
+
/>
|
20
|
+
<input
|
21
|
+
name="host[host_ansible_roles_attributes][14][_destroy]"
|
22
|
+
type="hidden"
|
23
|
+
value={false}
|
24
|
+
/>
|
25
|
+
</Fragment>
|
26
|
+
`;
|
27
|
+
|
28
|
+
exports[`AnsibleRoleInputs should render role to remove 1`] = `
|
29
|
+
<Fragment>
|
30
|
+
<input
|
31
|
+
name="host[host_ansible_roles_attributes][14][id]"
|
32
|
+
type="hidden"
|
33
|
+
value={5}
|
34
|
+
/>
|
35
|
+
<input
|
36
|
+
name="host[host_ansible_roles_attributes][14][ansible_role_id]"
|
37
|
+
type="hidden"
|
38
|
+
value={2}
|
39
|
+
/>
|
40
|
+
<input
|
41
|
+
name="host[host_ansible_roles_attributes][14][position]"
|
42
|
+
type="hidden"
|
43
|
+
value={15}
|
44
|
+
/>
|
45
|
+
<input
|
46
|
+
name="host[host_ansible_roles_attributes][14][_destroy]"
|
47
|
+
type="hidden"
|
48
|
+
value={true}
|
49
|
+
/>
|
50
|
+
</Fragment>
|
51
|
+
`;
|
data/webpack/components/AnsibleRolesSwitcher/components/__snapshots__/AssignedRolesList.test.js.snap
CHANGED
@@ -1,29 +1,17 @@
|
|
1
1
|
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
2
2
|
|
3
3
|
exports[`AssignedRolesList should render 1`] = `
|
4
|
-
<
|
4
|
+
<Memo(DndProvider)
|
5
|
+
backend={[Function]}
|
6
|
+
>
|
5
7
|
<ListView
|
6
8
|
className=""
|
7
9
|
>
|
8
|
-
<
|
9
|
-
className="sticky-pagination sticky-pagination-grey"
|
10
|
-
>
|
11
|
-
<PaginationWrapper
|
12
|
-
dropdownButtonId="assigned-ansible-roles-pagination-row-dropdown"
|
13
|
-
itemCount={2}
|
14
|
-
onChange={[Function]}
|
15
|
-
pagination={
|
16
|
-
Object {
|
17
|
-
"page": 1,
|
18
|
-
"perPage": 25,
|
19
|
-
}
|
20
|
-
}
|
21
|
-
viewType="list"
|
22
|
-
/>
|
23
|
-
</div>
|
24
|
-
<AnsibleRole
|
10
|
+
<DropTarget(DragSource(Orderable(AnsibleRole)))
|
25
11
|
icon="fa fa-minus-circle"
|
12
|
+
index={0}
|
26
13
|
key="1"
|
14
|
+
moveValue={[Function]}
|
27
15
|
onClick={[Function]}
|
28
16
|
resourceName="host"
|
29
17
|
role={
|
@@ -33,9 +21,11 @@ exports[`AssignedRolesList should render 1`] = `
|
|
33
21
|
}
|
34
22
|
}
|
35
23
|
/>
|
36
|
-
<AnsibleRole
|
24
|
+
<DropTarget(DragSource(Orderable(AnsibleRole)))
|
37
25
|
icon="fa fa-minus-circle"
|
26
|
+
index={1}
|
38
27
|
key="2"
|
28
|
+
moveValue={[Function]}
|
39
29
|
onClick={[Function]}
|
40
30
|
resourceName="host"
|
41
31
|
role={
|
@@ -47,18 +37,28 @@ exports[`AssignedRolesList should render 1`] = `
|
|
47
37
|
/>
|
48
38
|
</ListView>
|
49
39
|
<div>
|
50
|
-
<
|
40
|
+
<AnsibleRoleInputs
|
41
|
+
idx={0}
|
51
42
|
key="1"
|
52
|
-
|
53
|
-
|
54
|
-
|
43
|
+
resourceName="host"
|
44
|
+
role={
|
45
|
+
Object {
|
46
|
+
"id": 1,
|
47
|
+
"name": "fake.role",
|
48
|
+
}
|
49
|
+
}
|
55
50
|
/>
|
56
|
-
<
|
51
|
+
<AnsibleRoleInputs
|
52
|
+
idx={1}
|
57
53
|
key="2"
|
58
|
-
|
59
|
-
|
60
|
-
|
54
|
+
resourceName="host"
|
55
|
+
role={
|
56
|
+
Object {
|
57
|
+
"id": 2,
|
58
|
+
"name": "test.role",
|
59
|
+
}
|
60
|
+
}
|
61
61
|
/>
|
62
62
|
</div>
|
63
|
-
</
|
63
|
+
</Memo(DndProvider)>
|
64
64
|
`;
|