foreman_remote_execution 4.5.6 → 4.6.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/job_invocations_controller.rb +1 -1
- data/app/controllers/ui_job_wizard_controller.rb +0 -7
- data/app/helpers/concerns/foreman_remote_execution/hosts_helper_extensions.rb +1 -5
- data/app/helpers/remote_execution_helper.rb +3 -9
- data/app/lib/actions/remote_execution/run_host_job.rb +1 -5
- data/app/lib/actions/remote_execution/run_hosts_job.rb +1 -1
- data/app/models/concerns/foreman_remote_execution/host_extensions.rb +0 -2
- data/app/models/concerns/foreman_remote_execution/orchestration/ssh.rb +70 -0
- data/app/models/concerns/foreman_remote_execution/smart_proxy_extensions.rb +0 -6
- data/app/models/host_status/execution_status.rb +3 -3
- data/app/models/job_invocation.rb +6 -9
- data/app/models/job_invocation_composer.rb +4 -4
- data/app/models/remote_execution_feature.rb +1 -5
- data/app/models/remote_execution_provider.rb +2 -3
- data/app/models/setting/remote_execution.rb +2 -2
- data/app/models/targeting.rb +1 -5
- data/app/views/job_invocations/index.html.erb +1 -1
- data/app/views/templates/ssh/module_action.erb +0 -1
- data/app/views/templates/ssh/power_action.erb +0 -2
- data/app/views/templates/ssh/puppet_run_once.erb +0 -1
- data/foreman_remote_execution.gemspec +0 -1
- data/lib/foreman_remote_execution/engine.rb +2 -0
- data/lib/foreman_remote_execution/version.rb +1 -1
- data/test/models/orchestration/ssh_test.rb +56 -0
- data/test/unit/job_invocation_composer_test.rb +1 -14
- data/test/unit/job_invocation_test.rb +1 -1
- data/test/unit/remote_execution_provider_test.rb +0 -12
- data/webpack/JobWizard/JobWizard.js +16 -59
- data/webpack/JobWizard/JobWizard.scss +0 -58
- data/webpack/JobWizard/JobWizardConstants.js +0 -18
- data/webpack/JobWizard/JobWizardSelectors.js +0 -9
- data/webpack/JobWizard/__tests__/JobWizard.test.js +13 -0
- data/webpack/JobWizard/__tests__/__snapshots__/JobWizard.test.js.snap +32 -0
- data/webpack/JobWizard/__tests__/fixtures.js +2 -112
- data/webpack/JobWizard/__tests__/integration.test.js +92 -16
- data/webpack/JobWizard/steps/AdvancedFields/AdvancedFields.js +9 -37
- data/webpack/JobWizard/steps/AdvancedFields/Fields.js +55 -116
- data/webpack/JobWizard/steps/AdvancedFields/__tests__/AdvancedFields.test.js +16 -150
- data/webpack/JobWizard/steps/AdvancedFields/__tests__/__snapshots__/AdvancedFields.test.js.snap +249 -0
- data/webpack/JobWizard/steps/CategoryAndTemplate/CategoryAndTemplate.js +2 -4
- data/webpack/JobWizard/steps/CategoryAndTemplate/CategoryAndTemplate.test.js +51 -123
- data/webpack/JobWizard/steps/CategoryAndTemplate/__snapshots__/CategoryAndTemplate.test.js.snap +113 -0
- data/webpack/JobWizard/steps/form/FormHelpers.js +0 -1
- data/webpack/JobWizard/steps/form/SelectField.js +2 -14
- data/webpack/JobWizard/steps/form/__tests__/GroupedSelectField.test.js +38 -0
- data/webpack/JobWizard/steps/form/__tests__/SelectField.test.js +23 -0
- data/webpack/JobWizard/steps/form/__tests__/__snapshots__/GroupedSelectField.test.js.snap +37 -0
- data/webpack/JobWizard/steps/form/__tests__/__snapshots__/SelectField.test.js.snap +23 -0
- data/webpack/__mocks__/foremanReact/components/SearchBar.js +1 -18
- data/webpack/react_app/components/TargetingHosts/__tests__/__snapshots__/TargetingHostsPage.test.js.snap +0 -1
- metadata +13 -35
- data/app/models/host_proxy_invocation.rb +0 -4
- data/db/migrate/2021051713291621250977_add_host_proxy_invocations.rb +0 -12
- data/webpack/JobWizard/steps/AdvancedFields/DescriptionField.js +0 -67
- data/webpack/JobWizard/steps/AdvancedFields/__tests__/DescriptionField.test.js +0 -23
- data/webpack/JobWizard/steps/HostsAndInputs/SelectedChips.js +0 -25
- data/webpack/JobWizard/steps/HostsAndInputs/TemplateInputs.js +0 -23
- data/webpack/JobWizard/steps/HostsAndInputs/__tests__/SelectedChips.test.js +0 -37
- data/webpack/JobWizard/steps/HostsAndInputs/__tests__/TemplateInputs.test.js +0 -50
- data/webpack/JobWizard/steps/HostsAndInputs/index.js +0 -66
- data/webpack/JobWizard/steps/Schedule/QueryType.js +0 -48
- data/webpack/JobWizard/steps/Schedule/RepeatOn.js +0 -61
- data/webpack/JobWizard/steps/Schedule/ScheduleType.js +0 -25
- data/webpack/JobWizard/steps/Schedule/StartEndDates.js +0 -51
- data/webpack/JobWizard/steps/Schedule/__tests__/StartEndDates.test.js +0 -22
- data/webpack/JobWizard/steps/Schedule/index.js +0 -44
- data/webpack/JobWizard/steps/form/Formatter.js +0 -150
- data/webpack/JobWizard/steps/form/NumberInput.js +0 -35
- data/webpack/JobWizard/steps/form/WizardTitle.js +0 -14
- data/webpack/JobWizard/steps/form/__tests__/Formatter.test.js.example +0 -76
@@ -1,124 +1,52 @@
|
|
1
|
-
import
|
2
|
-
import {
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
expect(
|
53
|
-
screen.queryAllByDisplayValue('template1', { selector: 'button' })
|
54
|
-
).toHaveLength(0);
|
55
|
-
expect(
|
56
|
-
screen.queryAllByDisplayValue('template2', { selector: 'button' })
|
57
|
-
).toHaveLength(1);
|
58
|
-
});
|
59
|
-
it('category error ', async () => {
|
60
|
-
selectors.selectCategoryError.mockImplementation(() => 'category error');
|
61
|
-
selectors.selectAllTemplatesError.mockImplementation(() => null);
|
62
|
-
selectors.selectTemplateError.mockImplementation(() => null);
|
63
|
-
render(
|
64
|
-
<Provider store={store}>
|
65
|
-
<JobWizard />
|
66
|
-
</Provider>
|
67
|
-
);
|
68
|
-
|
69
|
-
expect(
|
70
|
-
screen.queryAllByText('Categories list failed with:', { exact: false })
|
71
|
-
).toHaveLength(1);
|
72
|
-
|
73
|
-
expect(
|
74
|
-
screen.queryAllByText('Templates list failed with:', { exact: false })
|
75
|
-
).toHaveLength(0);
|
76
|
-
expect(
|
77
|
-
screen.queryAllByText('Template failed with:', { exact: false })
|
78
|
-
).toHaveLength(0);
|
79
|
-
});
|
80
|
-
it('templates error ', async () => {
|
81
|
-
selectors.selectCategoryError.mockImplementation(() => null);
|
82
|
-
selectors.selectAllTemplatesError.mockImplementation(
|
83
|
-
() => 'templates error'
|
84
|
-
);
|
85
|
-
selectors.selectTemplateError.mockImplementation(() => null);
|
86
|
-
render(
|
87
|
-
<Provider store={store}>
|
88
|
-
<JobWizard />
|
89
|
-
</Provider>
|
90
|
-
);
|
91
|
-
|
92
|
-
expect(
|
93
|
-
screen.queryAllByText('Categories list failed with:', { exact: false })
|
94
|
-
).toHaveLength(0);
|
95
|
-
|
96
|
-
expect(
|
97
|
-
screen.queryAllByText('Templates list failed with:', { exact: false })
|
98
|
-
).toHaveLength(1);
|
99
|
-
expect(
|
100
|
-
screen.queryAllByText('Template failed with:', { exact: false })
|
101
|
-
).toHaveLength(0);
|
102
|
-
});
|
103
|
-
it('template error ', async () => {
|
104
|
-
selectors.selectCategoryError.mockImplementation(() => null);
|
105
|
-
selectors.selectAllTemplatesError.mockImplementation(() => null);
|
106
|
-
selectors.selectTemplateError.mockImplementation(() => 'template error');
|
107
|
-
render(
|
108
|
-
<Provider store={store}>
|
109
|
-
<JobWizard />
|
110
|
-
</Provider>
|
111
|
-
);
|
112
|
-
|
113
|
-
expect(
|
114
|
-
screen.queryAllByText('Categories list failed with:', { exact: false })
|
115
|
-
).toHaveLength(0);
|
116
|
-
|
117
|
-
expect(
|
118
|
-
screen.queryAllByText('Templates list failed with:', { exact: false })
|
119
|
-
).toHaveLength(0);
|
120
|
-
expect(
|
121
|
-
screen.queryAllByText('Template failed with:', { exact: false })
|
122
|
-
).toHaveLength(1);
|
123
|
-
});
|
1
|
+
import { testComponentSnapshotsWithFixtures } from '@theforeman/test';
|
2
|
+
import { CategoryAndTemplate } from './CategoryAndTemplate';
|
3
|
+
|
4
|
+
const baseProps = {
|
5
|
+
setJobTemplate: jest.fn(),
|
6
|
+
selectedTemplateID: 190,
|
7
|
+
setCategory: jest.fn(),
|
8
|
+
};
|
9
|
+
const fixtures = {
|
10
|
+
'renders with props': {
|
11
|
+
...baseProps,
|
12
|
+
jobCategories: [
|
13
|
+
'Commands',
|
14
|
+
'Ansible Playbook',
|
15
|
+
'Ansible Galaxy',
|
16
|
+
'Ansible Roles Installation',
|
17
|
+
],
|
18
|
+
jobTemplates: [
|
19
|
+
{
|
20
|
+
id: 190,
|
21
|
+
name: 'ab Run Command - SSH Default clone',
|
22
|
+
job_category: 'Commands',
|
23
|
+
provider_type: 'SSH',
|
24
|
+
snippet: false,
|
25
|
+
},
|
26
|
+
{
|
27
|
+
id: 168,
|
28
|
+
name: 'Ansible Roles - Ansible Default',
|
29
|
+
job_category: 'Ansible Playbook',
|
30
|
+
provider_type: 'Ansible',
|
31
|
+
snippet: false,
|
32
|
+
},
|
33
|
+
{
|
34
|
+
id: 170,
|
35
|
+
name: 'Ansible Roles - Install from git',
|
36
|
+
job_category: 'Ansible Roles Installation',
|
37
|
+
provider_type: 'Ansible',
|
38
|
+
snippet: false,
|
39
|
+
},
|
40
|
+
],
|
41
|
+
selectedCategory: 'I am a category',
|
42
|
+
},
|
43
|
+
'render with error': {
|
44
|
+
...baseProps,
|
45
|
+
errors: { allTemplatesError: 'I have an error' },
|
46
|
+
},
|
47
|
+
};
|
48
|
+
|
49
|
+
describe('CategoryAndTemplate', () => {
|
50
|
+
describe('rendering', () =>
|
51
|
+
testComponentSnapshotsWithFixtures(CategoryAndTemplate, fixtures));
|
124
52
|
});
|
data/webpack/JobWizard/steps/CategoryAndTemplate/__snapshots__/CategoryAndTemplate.test.js.snap
ADDED
@@ -0,0 +1,113 @@
|
|
1
|
+
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
2
|
+
|
3
|
+
exports[`CategoryAndTemplate rendering render with error 1`] = `
|
4
|
+
<Fragment>
|
5
|
+
<Title
|
6
|
+
headingLevel="h2"
|
7
|
+
>
|
8
|
+
Category and Template
|
9
|
+
</Title>
|
10
|
+
<Text
|
11
|
+
component="p"
|
12
|
+
>
|
13
|
+
All fields are required.
|
14
|
+
</Text>
|
15
|
+
<Form>
|
16
|
+
<SelectField
|
17
|
+
fieldId="job_category"
|
18
|
+
isDisabled={false}
|
19
|
+
label="Job category"
|
20
|
+
options={Array []}
|
21
|
+
placeholderText=""
|
22
|
+
setValue={[Function]}
|
23
|
+
value={null}
|
24
|
+
/>
|
25
|
+
<GroupedSelectField
|
26
|
+
fieldId="job_template"
|
27
|
+
groups={Array []}
|
28
|
+
isDisabled={true}
|
29
|
+
label="Job template"
|
30
|
+
placeholderText="Error"
|
31
|
+
selected={null}
|
32
|
+
setSelected={[MockFunction]}
|
33
|
+
/>
|
34
|
+
<Alert
|
35
|
+
title="Errors:"
|
36
|
+
variant="danger"
|
37
|
+
>
|
38
|
+
<span>
|
39
|
+
Templates list failed with:
|
40
|
+
|
41
|
+
I have an error
|
42
|
+
</span>
|
43
|
+
</Alert>
|
44
|
+
</Form>
|
45
|
+
</Fragment>
|
46
|
+
`;
|
47
|
+
|
48
|
+
exports[`CategoryAndTemplate rendering renders with props 1`] = `
|
49
|
+
<Fragment>
|
50
|
+
<Title
|
51
|
+
headingLevel="h2"
|
52
|
+
>
|
53
|
+
Category and Template
|
54
|
+
</Title>
|
55
|
+
<Text
|
56
|
+
component="p"
|
57
|
+
>
|
58
|
+
All fields are required.
|
59
|
+
</Text>
|
60
|
+
<Form>
|
61
|
+
<SelectField
|
62
|
+
fieldId="job_category"
|
63
|
+
isDisabled={false}
|
64
|
+
label="Job category"
|
65
|
+
options={
|
66
|
+
Array [
|
67
|
+
"Commands",
|
68
|
+
"Ansible Playbook",
|
69
|
+
"Ansible Galaxy",
|
70
|
+
"Ansible Roles Installation",
|
71
|
+
]
|
72
|
+
}
|
73
|
+
placeholderText=""
|
74
|
+
setValue={[Function]}
|
75
|
+
value="I am a category"
|
76
|
+
/>
|
77
|
+
<GroupedSelectField
|
78
|
+
fieldId="job_template"
|
79
|
+
groups={
|
80
|
+
Array [
|
81
|
+
Object {
|
82
|
+
"groupLabel": "SSH",
|
83
|
+
"options": Array [
|
84
|
+
Object {
|
85
|
+
"label": "ab Run Command - SSH Default clone",
|
86
|
+
"value": 190,
|
87
|
+
},
|
88
|
+
],
|
89
|
+
},
|
90
|
+
Object {
|
91
|
+
"groupLabel": "Ansible",
|
92
|
+
"options": Array [
|
93
|
+
Object {
|
94
|
+
"label": "Ansible Roles - Ansible Default",
|
95
|
+
"value": 168,
|
96
|
+
},
|
97
|
+
Object {
|
98
|
+
"label": "Ansible Roles - Install from git",
|
99
|
+
"value": 170,
|
100
|
+
},
|
101
|
+
],
|
102
|
+
},
|
103
|
+
]
|
104
|
+
}
|
105
|
+
isDisabled={false}
|
106
|
+
label="Job template"
|
107
|
+
placeholderText=""
|
108
|
+
selected="ab Run Command - SSH Default clone"
|
109
|
+
setSelected={[MockFunction]}
|
110
|
+
/>
|
111
|
+
</Form>
|
112
|
+
</Fragment>
|
113
|
+
`;
|
@@ -8,7 +8,6 @@ export const helpLabel = (text, id) => {
|
|
8
8
|
return (
|
9
9
|
<Popover id={`${id}-help`} bodyContent={text} aria-label="help-text">
|
10
10
|
<button
|
11
|
-
type="button"
|
12
11
|
aria-label={__('open-help-tooltip-button')}
|
13
12
|
onClick={e => e.preventDefault()}
|
14
13
|
className="pf-c-form__group-label-help"
|
@@ -8,8 +8,6 @@ export const SelectField = ({
|
|
8
8
|
options,
|
9
9
|
value,
|
10
10
|
setValue,
|
11
|
-
labelIcon,
|
12
|
-
isRequired,
|
13
11
|
...props
|
14
12
|
}) => {
|
15
13
|
const onSelect = (event, selection) => {
|
@@ -18,12 +16,7 @@ export const SelectField = ({
|
|
18
16
|
};
|
19
17
|
const [isOpen, setIsOpen] = useState(false);
|
20
18
|
return (
|
21
|
-
<FormGroup
|
22
|
-
label={label}
|
23
|
-
fieldId={fieldId}
|
24
|
-
labelIcon={labelIcon}
|
25
|
-
isRequired={isRequired}
|
26
|
-
>
|
19
|
+
<FormGroup label={label} fieldId={fieldId}>
|
27
20
|
<Select
|
28
21
|
selections={value}
|
29
22
|
onSelect={onSelect}
|
@@ -42,19 +35,14 @@ export const SelectField = ({
|
|
42
35
|
);
|
43
36
|
};
|
44
37
|
SelectField.propTypes = {
|
45
|
-
label: PropTypes.string,
|
38
|
+
label: PropTypes.string.isRequired,
|
46
39
|
fieldId: PropTypes.string.isRequired,
|
47
40
|
options: PropTypes.array,
|
48
41
|
value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
|
49
42
|
setValue: PropTypes.func.isRequired,
|
50
|
-
labelIcon: PropTypes.node,
|
51
|
-
isRequired: PropTypes.bool,
|
52
43
|
};
|
53
44
|
|
54
45
|
SelectField.defaultProps = {
|
55
|
-
label: null,
|
56
46
|
options: [],
|
57
|
-
labelIcon: null,
|
58
47
|
value: null,
|
59
|
-
isRequired: false,
|
60
48
|
};
|
@@ -0,0 +1,38 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import * as patternfly from '@patternfly/react-core';
|
3
|
+
import { testComponentSnapshotsWithFixtures } from '@theforeman/test';
|
4
|
+
import { GroupedSelectField } from '../GroupedSelectField';
|
5
|
+
|
6
|
+
jest.spyOn(patternfly, 'Select');
|
7
|
+
jest.spyOn(patternfly, 'SelectOption');
|
8
|
+
patternfly.Select.mockImplementation(props => <div>{props}</div>);
|
9
|
+
patternfly.SelectOption.mockImplementation(props => <div>{props}</div>);
|
10
|
+
|
11
|
+
const fixtures = {
|
12
|
+
'renders with props': {
|
13
|
+
label: 'grouped select',
|
14
|
+
fieldId: 'field-id',
|
15
|
+
groups: [
|
16
|
+
{
|
17
|
+
groupLabel: 'Ansible',
|
18
|
+
options: [
|
19
|
+
{
|
20
|
+
label: 'Ansible Roles - Ansible Default',
|
21
|
+
value: 168,
|
22
|
+
},
|
23
|
+
{
|
24
|
+
label: 'Ansible Roles - Install from git',
|
25
|
+
value: 170,
|
26
|
+
},
|
27
|
+
],
|
28
|
+
},
|
29
|
+
],
|
30
|
+
selected: 170,
|
31
|
+
setSelected: jest.fn(),
|
32
|
+
},
|
33
|
+
};
|
34
|
+
|
35
|
+
describe('GroupedSelectField', () => {
|
36
|
+
describe('rendering', () =>
|
37
|
+
testComponentSnapshotsWithFixtures(GroupedSelectField, fixtures));
|
38
|
+
});
|
@@ -0,0 +1,23 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import * as patternfly from '@patternfly/react-core';
|
3
|
+
import { testComponentSnapshotsWithFixtures } from '@theforeman/test';
|
4
|
+
import { SelectField } from '../SelectField';
|
5
|
+
|
6
|
+
jest.spyOn(patternfly, 'Select');
|
7
|
+
jest.spyOn(patternfly, 'SelectOption');
|
8
|
+
patternfly.Select.mockImplementation(props => <div>{props}</div>);
|
9
|
+
patternfly.SelectOption.mockImplementation(props => <div>{props}</div>);
|
10
|
+
const fixtures = {
|
11
|
+
'renders with props': {
|
12
|
+
label: 'grouped select',
|
13
|
+
fieldId: 'field-id',
|
14
|
+
options: ['Commands'],
|
15
|
+
value: 'Commands',
|
16
|
+
setValue: jest.fn(),
|
17
|
+
},
|
18
|
+
};
|
19
|
+
|
20
|
+
describe('SelectField', () => {
|
21
|
+
describe('rendering', () =>
|
22
|
+
testComponentSnapshotsWithFixtures(SelectField, fixtures));
|
23
|
+
});
|
@@ -0,0 +1,37 @@
|
|
1
|
+
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
2
|
+
|
3
|
+
exports[`GroupedSelectField rendering renders with props 1`] = `
|
4
|
+
<FormGroup
|
5
|
+
fieldId="field-id"
|
6
|
+
label="grouped select"
|
7
|
+
>
|
8
|
+
<mockConstructor
|
9
|
+
className="without_select2"
|
10
|
+
isGrouped={true}
|
11
|
+
isOpen={false}
|
12
|
+
menuAppendTo={[Function]}
|
13
|
+
onClear={[Function]}
|
14
|
+
onFilter={[Function]}
|
15
|
+
onSelect={[Function]}
|
16
|
+
onToggle={[Function]}
|
17
|
+
selections={170}
|
18
|
+
variant="typeahead"
|
19
|
+
>
|
20
|
+
<SelectGroup
|
21
|
+
key="0"
|
22
|
+
label="Ansible"
|
23
|
+
>
|
24
|
+
<mockConstructor
|
25
|
+
key="0"
|
26
|
+
onClick={[Function]}
|
27
|
+
value="Ansible Roles - Ansible Default"
|
28
|
+
/>
|
29
|
+
<mockConstructor
|
30
|
+
key="1"
|
31
|
+
onClick={[Function]}
|
32
|
+
value="Ansible Roles - Install from git"
|
33
|
+
/>
|
34
|
+
</SelectGroup>
|
35
|
+
</mockConstructor>
|
36
|
+
</FormGroup>
|
37
|
+
`;
|
@@ -0,0 +1,23 @@
|
|
1
|
+
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
2
|
+
|
3
|
+
exports[`SelectField rendering renders with props 1`] = `
|
4
|
+
<FormGroup
|
5
|
+
fieldId="field-id"
|
6
|
+
label="grouped select"
|
7
|
+
>
|
8
|
+
<mockConstructor
|
9
|
+
className="without_select2"
|
10
|
+
isOpen={false}
|
11
|
+
maxHeight="45vh"
|
12
|
+
menuAppendTo={[Function]}
|
13
|
+
onSelect={[Function]}
|
14
|
+
onToggle={[Function]}
|
15
|
+
selections="Commands"
|
16
|
+
>
|
17
|
+
<mockConstructor
|
18
|
+
key="0"
|
19
|
+
value="Commands"
|
20
|
+
/>
|
21
|
+
</mockConstructor>
|
22
|
+
</FormGroup>
|
23
|
+
`;
|
@@ -1,19 +1,2 @@
|
|
1
|
-
|
2
|
-
import PropTypes from 'prop-types';
|
3
|
-
|
4
|
-
const SearchBar = ({ onChange }) => (
|
5
|
-
<input
|
6
|
-
className="foreman-search"
|
7
|
-
onChange={onChange}
|
8
|
-
placeholder="Filter..."
|
9
|
-
/>
|
10
|
-
);
|
1
|
+
const SearchBar = () => jest.fn();
|
11
2
|
export default SearchBar;
|
12
|
-
|
13
|
-
SearchBar.propTypes = {
|
14
|
-
onChange: PropTypes.func,
|
15
|
-
};
|
16
|
-
|
17
|
-
SearchBar.defaultProps = {
|
18
|
-
onChange: () => null,
|
19
|
-
};
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: foreman_remote_execution
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Foreman Remote Execution team
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-06-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: deface
|
@@ -44,20 +44,6 @@ dependencies:
|
|
44
44
|
- - "<"
|
45
45
|
- !ruby/object:Gem::Version
|
46
46
|
version: 2.0.0
|
47
|
-
- !ruby/object:Gem::Dependency
|
48
|
-
name: foreman_remote_execution_core
|
49
|
-
requirement: !ruby/object:Gem::Requirement
|
50
|
-
requirements:
|
51
|
-
- - ">="
|
52
|
-
- !ruby/object:Gem::Version
|
53
|
-
version: '0'
|
54
|
-
type: :runtime
|
55
|
-
prerelease: false
|
56
|
-
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
requirements:
|
58
|
-
- - ">="
|
59
|
-
- !ruby/object:Gem::Version
|
60
|
-
version: '0'
|
61
47
|
- !ruby/object:Gem::Dependency
|
62
48
|
name: foreman-tasks
|
63
49
|
requirement: !ruby/object:Gem::Requirement
|
@@ -171,6 +157,7 @@ files:
|
|
171
157
|
- app/models/concerns/foreman_remote_execution/foreman_tasks_triggering_extensions.rb
|
172
158
|
- app/models/concerns/foreman_remote_execution/host_extensions.rb
|
173
159
|
- app/models/concerns/foreman_remote_execution/nic_extensions.rb
|
160
|
+
- app/models/concerns/foreman_remote_execution/orchestration/ssh.rb
|
174
161
|
- app/models/concerns/foreman_remote_execution/smart_proxy_extensions.rb
|
175
162
|
- app/models/concerns/foreman_remote_execution/subnet_extensions.rb
|
176
163
|
- app/models/concerns/foreman_remote_execution/taxonomy_extensions.rb
|
@@ -179,7 +166,6 @@ files:
|
|
179
166
|
- app/models/concerns/foreman_remote_execution/template_overrides.rb
|
180
167
|
- app/models/concerns/foreman_remote_execution/user_extensions.rb
|
181
168
|
- app/models/foreign_input_set.rb
|
182
|
-
- app/models/host_proxy_invocation.rb
|
183
169
|
- app/models/host_status/execution_status.rb
|
184
170
|
- app/models/input_template_renderer.rb
|
185
171
|
- app/models/invocation_provider_input_value.rb
|
@@ -324,7 +310,6 @@ files:
|
|
324
310
|
- db/migrate/20200623073022_rename_sudo_password_to_effective_user_password.rb
|
325
311
|
- db/migrate/20200820122057_add_proxy_selector_override_to_remote_execution_feature.rb
|
326
312
|
- db/migrate/20210312074713_add_provider_inputs.rb
|
327
|
-
- db/migrate/2021051713291621250977_add_host_proxy_invocations.rb
|
328
313
|
- db/seeds.d/100-assign_features_with_templates.rb
|
329
314
|
- db/seeds.d/20-permissions.rb
|
330
315
|
- db/seeds.d/50-notification_blueprints.rb
|
@@ -381,6 +366,7 @@ files:
|
|
381
366
|
- test/functional/job_templates_controller_test.rb
|
382
367
|
- test/functional/ui_job_wizard_controller_test.rb
|
383
368
|
- test/helpers/remote_execution_helper_test.rb
|
369
|
+
- test/models/orchestration/ssh_test.rb
|
384
370
|
- test/support/remote_execution_helper.rb
|
385
371
|
- test/test_plugin_helper.rb
|
386
372
|
- test/unit/actions/run_host_job_test.rb
|
@@ -404,36 +390,27 @@ files:
|
|
404
390
|
- webpack/JobWizard/JobWizard.scss
|
405
391
|
- webpack/JobWizard/JobWizardConstants.js
|
406
392
|
- webpack/JobWizard/JobWizardSelectors.js
|
393
|
+
- webpack/JobWizard/__tests__/JobWizard.test.js
|
394
|
+
- webpack/JobWizard/__tests__/__snapshots__/JobWizard.test.js.snap
|
407
395
|
- webpack/JobWizard/__tests__/__snapshots__/integration.test.js.snap
|
408
396
|
- webpack/JobWizard/__tests__/fixtures.js
|
409
397
|
- webpack/JobWizard/__tests__/integration.test.js
|
410
398
|
- webpack/JobWizard/index.js
|
411
399
|
- webpack/JobWizard/steps/AdvancedFields/AdvancedFields.js
|
412
|
-
- webpack/JobWizard/steps/AdvancedFields/DescriptionField.js
|
413
400
|
- webpack/JobWizard/steps/AdvancedFields/Fields.js
|
414
401
|
- webpack/JobWizard/steps/AdvancedFields/__tests__/AdvancedFields.test.js
|
415
|
-
- webpack/JobWizard/steps/AdvancedFields/__tests__/
|
402
|
+
- webpack/JobWizard/steps/AdvancedFields/__tests__/__snapshots__/AdvancedFields.test.js.snap
|
416
403
|
- webpack/JobWizard/steps/CategoryAndTemplate/CategoryAndTemplate.js
|
417
404
|
- webpack/JobWizard/steps/CategoryAndTemplate/CategoryAndTemplate.test.js
|
405
|
+
- webpack/JobWizard/steps/CategoryAndTemplate/__snapshots__/CategoryAndTemplate.test.js.snap
|
418
406
|
- webpack/JobWizard/steps/CategoryAndTemplate/index.js
|
419
|
-
- webpack/JobWizard/steps/HostsAndInputs/SelectedChips.js
|
420
|
-
- webpack/JobWizard/steps/HostsAndInputs/TemplateInputs.js
|
421
|
-
- webpack/JobWizard/steps/HostsAndInputs/__tests__/SelectedChips.test.js
|
422
|
-
- webpack/JobWizard/steps/HostsAndInputs/__tests__/TemplateInputs.test.js
|
423
|
-
- webpack/JobWizard/steps/HostsAndInputs/index.js
|
424
|
-
- webpack/JobWizard/steps/Schedule/QueryType.js
|
425
|
-
- webpack/JobWizard/steps/Schedule/RepeatOn.js
|
426
|
-
- webpack/JobWizard/steps/Schedule/ScheduleType.js
|
427
|
-
- webpack/JobWizard/steps/Schedule/StartEndDates.js
|
428
|
-
- webpack/JobWizard/steps/Schedule/__tests__/StartEndDates.test.js
|
429
|
-
- webpack/JobWizard/steps/Schedule/index.js
|
430
407
|
- webpack/JobWizard/steps/form/FormHelpers.js
|
431
|
-
- webpack/JobWizard/steps/form/Formatter.js
|
432
408
|
- webpack/JobWizard/steps/form/GroupedSelectField.js
|
433
|
-
- webpack/JobWizard/steps/form/NumberInput.js
|
434
409
|
- webpack/JobWizard/steps/form/SelectField.js
|
435
|
-
- webpack/JobWizard/steps/form/
|
436
|
-
- webpack/JobWizard/steps/form/__tests__/
|
410
|
+
- webpack/JobWizard/steps/form/__tests__/GroupedSelectField.test.js
|
411
|
+
- webpack/JobWizard/steps/form/__tests__/SelectField.test.js
|
412
|
+
- webpack/JobWizard/steps/form/__tests__/__snapshots__/GroupedSelectField.test.js.snap
|
413
|
+
- webpack/JobWizard/steps/form/__tests__/__snapshots__/SelectField.test.js.snap
|
437
414
|
- webpack/Routes/routes.js
|
438
415
|
- webpack/__mocks__/foremanReact/common/I18n.js
|
439
416
|
- webpack/__mocks__/foremanReact/common/helpers.js
|
@@ -527,6 +504,7 @@ test_files:
|
|
527
504
|
- test/functional/job_templates_controller_test.rb
|
528
505
|
- test/functional/ui_job_wizard_controller_test.rb
|
529
506
|
- test/helpers/remote_execution_helper_test.rb
|
507
|
+
- test/models/orchestration/ssh_test.rb
|
530
508
|
- test/support/remote_execution_helper.rb
|
531
509
|
- test/test_plugin_helper.rb
|
532
510
|
- test/unit/actions/run_host_job_test.rb
|
@@ -1,12 +0,0 @@
|
|
1
|
-
class AddHostProxyInvocations < ActiveRecord::Migration[6.0]
|
2
|
-
def change
|
3
|
-
# rubocop:disable Rails/CreateTableWithTimestamps
|
4
|
-
create_table :host_proxy_invocations do |t|
|
5
|
-
t.references :host, :null => false
|
6
|
-
t.references :smart_proxy, :null => false
|
7
|
-
end
|
8
|
-
# rubocop:enable Rails/CreateTableWithTimestamps
|
9
|
-
|
10
|
-
add_index :host_proxy_invocations, [:host_id, :smart_proxy_id], unique: true
|
11
|
-
end
|
12
|
-
end
|