foreman_remote_execution 4.4.0 → 4.5.3
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/controllers/api/v2/job_invocations_controller.rb +13 -24
- data/app/controllers/job_invocations_controller.rb +1 -1
- data/app/controllers/job_templates_controller.rb +4 -4
- data/app/controllers/ui_job_wizard_controller.rb +19 -0
- data/app/helpers/job_invocations_helper.rb +2 -2
- data/app/helpers/remote_execution_helper.rb +13 -9
- data/app/lib/actions/remote_execution/run_host_job.rb +36 -6
- data/app/models/concerns/foreman_remote_execution/host_extensions.rb +7 -5
- data/app/models/concerns/foreman_remote_execution/smart_proxy_extensions.rb +6 -0
- data/app/models/host_proxy_invocation.rb +4 -0
- data/app/models/host_status/execution_status.rb +5 -5
- data/app/models/job_invocation.rb +31 -12
- data/app/models/job_invocation_composer.rb +61 -19
- data/app/models/remote_execution_provider.rb +1 -1
- data/app/models/setting/remote_execution.rb +2 -2
- data/app/models/ssh_execution_provider.rb +4 -4
- data/app/models/targeting.rb +5 -1
- data/app/overrides/execution_interface.rb +8 -8
- data/app/overrides/subnet_proxies.rb +6 -6
- data/app/views/job_invocations/index.html.erb +1 -1
- data/app/views/templates/ssh/module_action.erb +1 -0
- data/app/views/templates/ssh/puppet_run_once.erb +1 -0
- data/config/routes.rb +1 -0
- data/db/migrate/20180110104432_rename_template_invocation_permission.rb +1 -1
- data/db/migrate/20190111153330_remove_remote_execution_without_proxy_setting.rb +4 -4
- data/db/migrate/2021051713291621250977_add_host_proxy_invocations.rb +12 -0
- data/extra/cockpit/foreman-cockpit-session +6 -6
- data/lib/foreman_remote_execution/engine.rb +11 -8
- data/lib/foreman_remote_execution/version.rb +1 -1
- data/package.json +2 -1
- data/test/functional/api/v2/job_invocations_controller_test.rb +14 -1
- data/test/unit/job_invocation_composer_test.rb +59 -2
- data/test/unit/job_invocation_test.rb +1 -1
- data/webpack/JobWizard/JobWizard.js +80 -19
- data/webpack/JobWizard/JobWizard.scss +42 -1
- data/webpack/JobWizard/JobWizardConstants.js +11 -0
- data/webpack/JobWizard/JobWizardSelectors.js +27 -1
- data/webpack/JobWizard/__tests__/__snapshots__/integration.test.js.snap +43 -0
- data/webpack/JobWizard/__tests__/fixtures.js +128 -0
- data/webpack/JobWizard/__tests__/integration.test.js +84 -0
- data/webpack/JobWizard/steps/AdvancedFields/AdvancedFields.js +110 -0
- data/webpack/JobWizard/steps/AdvancedFields/DescriptionField.js +67 -0
- data/webpack/JobWizard/steps/AdvancedFields/Fields.js +195 -0
- data/webpack/JobWizard/steps/AdvancedFields/__tests__/AdvancedFields.test.js +144 -0
- data/webpack/JobWizard/steps/AdvancedFields/__tests__/DescriptionField.test.js +23 -0
- data/webpack/JobWizard/steps/CategoryAndTemplate/CategoryAndTemplate.js +34 -2
- data/webpack/JobWizard/steps/CategoryAndTemplate/CategoryAndTemplate.test.js +122 -44
- data/webpack/JobWizard/steps/CategoryAndTemplate/index.js +9 -1
- data/webpack/JobWizard/steps/Schedule/QueryType.js +48 -0
- data/webpack/JobWizard/steps/Schedule/RepeatOn.js +61 -0
- data/webpack/JobWizard/steps/Schedule/ScheduleType.js +25 -0
- data/webpack/JobWizard/steps/Schedule/StartEndDates.js +51 -0
- data/webpack/JobWizard/steps/Schedule/__tests__/StartEndDates.test.js +22 -0
- data/webpack/JobWizard/steps/Schedule/index.js +41 -0
- data/webpack/JobWizard/steps/form/FormHelpers.js +20 -0
- data/webpack/JobWizard/steps/form/Formatter.js +149 -0
- data/webpack/JobWizard/steps/form/GroupedSelectField.js +3 -0
- data/webpack/JobWizard/steps/form/NumberInput.js +33 -0
- data/webpack/JobWizard/steps/form/SelectField.js +24 -3
- data/webpack/JobWizard/steps/form/__tests__/Formatter.test.js.example +76 -0
- data/webpack/__mocks__/foremanReact/components/SearchBar.js +18 -1
- data/webpack/__mocks__/foremanReact/redux/API/APISelectors.js +21 -2
- data/webpack/global_index.js +5 -3
- data/webpack/index.js +3 -0
- data/webpack/react_app/components/RecentJobsCard/RecentJobsCard.js +1 -5
- data/webpack/react_app/components/TargetingHosts/__tests__/TargetingHostsSelectors.test.js +8 -3
- data/webpack/react_app/components/TargetingHosts/__tests__/__snapshots__/TargetingHostsPage.test.js.snap +1 -0
- data/webpack/react_app/components/TargetingHosts/__tests__/__snapshots__/TargetingHostsSelectors.test.js.snap +7 -2
- data/webpack/react_app/extend/{fills.js → fillRecentJobsCard.js} +7 -6
- data/webpack/react_app/extend/fillregistrationAdvanced.js +11 -0
- data/webpack/react_app/extend/reducers.js +2 -1
- metadata +24 -14
- data/app/models/concerns/foreman_remote_execution/orchestration/ssh.rb +0 -70
- data/test/models/orchestration/ssh_test.rb +0 -56
- data/webpack/JobWizard/__tests__/JobWizard.test.js +0 -20
- data/webpack/JobWizard/__tests__/__snapshots__/JobWizard.test.js.snap +0 -83
- data/webpack/JobWizard/steps/CategoryAndTemplate/__snapshots__/CategoryAndTemplate.test.js.snap +0 -64
- data/webpack/JobWizard/steps/form/__tests__/GroupedSelectField.test.js +0 -38
- data/webpack/JobWizard/steps/form/__tests__/SelectField.test.js +0 -23
- data/webpack/JobWizard/steps/form/__tests__/__snapshots__/GroupedSelectField.test.js.snap +0 -36
- data/webpack/JobWizard/steps/form/__tests__/__snapshots__/SelectField.test.js.snap +0 -22
- data/webpack/fills_index.js +0 -11
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import React, { useState } from 'react';
|
|
2
|
+
import PropTypes from 'prop-types';
|
|
3
|
+
import { FormGroup, TextInput, ValidatedOptions } from '@patternfly/react-core';
|
|
4
|
+
import { translate as __ } from 'foremanReact/common/I18n';
|
|
5
|
+
|
|
6
|
+
export const NumberInput = ({ formProps, inputProps }) => {
|
|
7
|
+
const [validated, setValidated] = useState();
|
|
8
|
+
return (
|
|
9
|
+
<FormGroup
|
|
10
|
+
{...formProps}
|
|
11
|
+
helperTextInvalid={__('Has to be a number')}
|
|
12
|
+
validated={validated}
|
|
13
|
+
>
|
|
14
|
+
<TextInput
|
|
15
|
+
type="text"
|
|
16
|
+
{...inputProps}
|
|
17
|
+
onChange={newValue => {
|
|
18
|
+
setValidated(
|
|
19
|
+
/^\d+$/.test(newValue) || newValue === ''
|
|
20
|
+
? ValidatedOptions.noval
|
|
21
|
+
: ValidatedOptions.error
|
|
22
|
+
);
|
|
23
|
+
inputProps.onChange(newValue);
|
|
24
|
+
}}
|
|
25
|
+
/>
|
|
26
|
+
</FormGroup>
|
|
27
|
+
);
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
NumberInput.propTypes = {
|
|
31
|
+
formProps: PropTypes.object.isRequired,
|
|
32
|
+
inputProps: PropTypes.object.isRequired,
|
|
33
|
+
};
|
|
@@ -2,14 +2,28 @@ import React, { useState } from 'react';
|
|
|
2
2
|
import { FormGroup, Select, SelectOption } from '@patternfly/react-core';
|
|
3
3
|
import PropTypes from 'prop-types';
|
|
4
4
|
|
|
5
|
-
export const SelectField = ({
|
|
5
|
+
export const SelectField = ({
|
|
6
|
+
label,
|
|
7
|
+
fieldId,
|
|
8
|
+
options,
|
|
9
|
+
value,
|
|
10
|
+
setValue,
|
|
11
|
+
labelIcon,
|
|
12
|
+
isRequired,
|
|
13
|
+
...props
|
|
14
|
+
}) => {
|
|
6
15
|
const onSelect = (event, selection) => {
|
|
7
16
|
setValue(selection);
|
|
8
17
|
setIsOpen(false);
|
|
9
18
|
};
|
|
10
19
|
const [isOpen, setIsOpen] = useState(false);
|
|
11
20
|
return (
|
|
12
|
-
<FormGroup
|
|
21
|
+
<FormGroup
|
|
22
|
+
label={label}
|
|
23
|
+
fieldId={fieldId}
|
|
24
|
+
labelIcon={labelIcon}
|
|
25
|
+
isRequired={isRequired}
|
|
26
|
+
>
|
|
13
27
|
<Select
|
|
14
28
|
selections={value}
|
|
15
29
|
onSelect={onSelect}
|
|
@@ -17,6 +31,8 @@ export const SelectField = ({ label, fieldId, options, value, setValue }) => {
|
|
|
17
31
|
isOpen={isOpen}
|
|
18
32
|
className="without_select2"
|
|
19
33
|
maxHeight="45vh"
|
|
34
|
+
menuAppendTo={() => document.body}
|
|
35
|
+
{...props}
|
|
20
36
|
>
|
|
21
37
|
{options.map((option, index) => (
|
|
22
38
|
<SelectOption key={index} value={option} />
|
|
@@ -26,14 +42,19 @@ export const SelectField = ({ label, fieldId, options, value, setValue }) => {
|
|
|
26
42
|
);
|
|
27
43
|
};
|
|
28
44
|
SelectField.propTypes = {
|
|
29
|
-
label: PropTypes.string
|
|
45
|
+
label: PropTypes.string,
|
|
30
46
|
fieldId: PropTypes.string.isRequired,
|
|
31
47
|
options: PropTypes.array,
|
|
32
48
|
value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
|
|
33
49
|
setValue: PropTypes.func.isRequired,
|
|
50
|
+
labelIcon: PropTypes.node,
|
|
51
|
+
isRequired: PropTypes.bool,
|
|
34
52
|
};
|
|
35
53
|
|
|
36
54
|
SelectField.defaultProps = {
|
|
55
|
+
label: null,
|
|
37
56
|
options: [],
|
|
57
|
+
labelIcon: null,
|
|
38
58
|
value: null,
|
|
59
|
+
isRequired: false,
|
|
39
60
|
};
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Provider } from 'react-redux';
|
|
3
|
+
import configureMockStore from 'redux-mock-store';
|
|
4
|
+
import * as patternfly from '@patternfly/react-core';
|
|
5
|
+
import { mount, shallow } from '@theforeman/test';
|
|
6
|
+
import { formatter } from '../Formatter';
|
|
7
|
+
|
|
8
|
+
jest.spyOn(patternfly, 'Select');
|
|
9
|
+
jest.spyOn(patternfly, 'SelectOption');
|
|
10
|
+
jest.spyOn(patternfly, 'FormGroup');
|
|
11
|
+
patternfly.Select.mockImplementation(props => <div props={props} />);
|
|
12
|
+
patternfly.SelectOption.mockImplementation(props => <div props={props} />);
|
|
13
|
+
patternfly.FormGroup.mockImplementation(props => <div props={props} />);
|
|
14
|
+
const mockStore = configureMockStore([]);
|
|
15
|
+
const store = mockStore({});
|
|
16
|
+
|
|
17
|
+
describe('formatter', () => {
|
|
18
|
+
it('render date input', () => {
|
|
19
|
+
const props = {
|
|
20
|
+
name: 'date adv',
|
|
21
|
+
required: false,
|
|
22
|
+
options: '',
|
|
23
|
+
advanced: true,
|
|
24
|
+
value_type: 'date',
|
|
25
|
+
resource_type: 'ansible_roles',
|
|
26
|
+
default: '',
|
|
27
|
+
hidden_value: false,
|
|
28
|
+
};
|
|
29
|
+
expect(shallow(formatter(props, {}, jest.fn()))).toMatchSnapshot();
|
|
30
|
+
});
|
|
31
|
+
it('render text input', () => {
|
|
32
|
+
const props = {
|
|
33
|
+
name: 'plain adv hidden',
|
|
34
|
+
required: true,
|
|
35
|
+
description: 'some Description',
|
|
36
|
+
options: '',
|
|
37
|
+
advanced: true,
|
|
38
|
+
value_type: 'plain',
|
|
39
|
+
resource_type: 'ansible_roles',
|
|
40
|
+
default: 'Default val',
|
|
41
|
+
hidden_value: true,
|
|
42
|
+
};
|
|
43
|
+
expect(shallow(formatter(props, {}, jest.fn()))).toMatchSnapshot();
|
|
44
|
+
});
|
|
45
|
+
it('render select input', () => {
|
|
46
|
+
const props = {
|
|
47
|
+
name: 'adv plain search',
|
|
48
|
+
required: false,
|
|
49
|
+
input_type: 'user',
|
|
50
|
+
options: 'option 1\r\noption 2\r\noption 3\r\noption 4',
|
|
51
|
+
advanced: true,
|
|
52
|
+
value_type: 'plain',
|
|
53
|
+
resource_type: 'ansible_roles',
|
|
54
|
+
default: '',
|
|
55
|
+
hidden_value: false,
|
|
56
|
+
};
|
|
57
|
+
expect(shallow(formatter(props, {}, jest.fn()))).toMatchSnapshot();
|
|
58
|
+
});
|
|
59
|
+
it('render search input', () => {
|
|
60
|
+
const props = {
|
|
61
|
+
name: 'search adv',
|
|
62
|
+
required: false,
|
|
63
|
+
options: '',
|
|
64
|
+
advanced: true,
|
|
65
|
+
value_type: 'search',
|
|
66
|
+
resource_type: 'foreman_tasks/tasks',
|
|
67
|
+
default: '',
|
|
68
|
+
hidden_value: false,
|
|
69
|
+
};
|
|
70
|
+
expect(
|
|
71
|
+
mount(
|
|
72
|
+
<Provider store={store}>{formatter(props, {}, jest.fn())}</Provider>
|
|
73
|
+
)
|
|
74
|
+
).toMatchSnapshot();
|
|
75
|
+
});
|
|
76
|
+
});
|
|
@@ -1,2 +1,19 @@
|
|
|
1
|
-
|
|
1
|
+
import React from 'react';
|
|
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
|
+
);
|
|
2
11
|
export default SearchBar;
|
|
12
|
+
|
|
13
|
+
SearchBar.propTypes = {
|
|
14
|
+
onChange: PropTypes.func,
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
SearchBar.defaultProps = {
|
|
18
|
+
onChange: () => null,
|
|
19
|
+
};
|
|
@@ -1,2 +1,21 @@
|
|
|
1
|
-
export const
|
|
2
|
-
export const
|
|
1
|
+
export const selectAPI = state => state;
|
|
2
|
+
export const selectAPIByKey = (state, key) => selectAPI(state)[key] || {};
|
|
3
|
+
|
|
4
|
+
export const selectAPIStatus = (state, key) =>
|
|
5
|
+
selectAPIByKey(state, key).status;
|
|
6
|
+
|
|
7
|
+
export const selectAPIPayload = (state, key) =>
|
|
8
|
+
selectAPIByKey(state, key).payload || {};
|
|
9
|
+
|
|
10
|
+
export const selectAPIResponse = (state, key) =>
|
|
11
|
+
selectAPIByKey(state, key).response || {};
|
|
12
|
+
|
|
13
|
+
export const selectAPIError = (state, key) =>
|
|
14
|
+
selectAPIStatus(state, key) === 'ERROR'
|
|
15
|
+
? selectAPIResponse(state, key)
|
|
16
|
+
: null;
|
|
17
|
+
|
|
18
|
+
export const selectAPIErrorMessage = (state, key) => {
|
|
19
|
+
const error = selectAPIError(state, key);
|
|
20
|
+
return error && error.message;
|
|
21
|
+
};
|
data/webpack/global_index.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { registerRoutes } from 'foremanReact/routes/RoutingService';
|
|
2
2
|
import routes from './Routes/routes';
|
|
3
|
+
import fillregistrationAdvanced from './react_app/extend/fillregistrationAdvanced';
|
|
4
|
+
import fillRecentJobsCard from './react_app/extend/fillRecentJobsCard';
|
|
3
5
|
import registerReducers from './react_app/extend/reducers';
|
|
4
|
-
import registerFills from './react_app/extend/fills';
|
|
5
6
|
|
|
6
|
-
registerRoutes('foreman_remote_execution', routes);
|
|
7
7
|
registerReducers();
|
|
8
|
-
|
|
8
|
+
registerRoutes('foreman_remote_execution', routes);
|
|
9
|
+
fillRecentJobsCard();
|
|
10
|
+
fillregistrationAdvanced();
|
data/webpack/index.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import componentRegistry from 'foremanReact/components/componentRegistry';
|
|
2
2
|
import JobInvocationContainer from './react_app/components/jobInvocations';
|
|
3
3
|
import TargetingHosts from './react_app/components/TargetingHosts';
|
|
4
|
+
import registerReducers from './react_app/extend/reducers';
|
|
5
|
+
|
|
6
|
+
registerReducers();
|
|
4
7
|
|
|
5
8
|
const components = [
|
|
6
9
|
{ name: 'JobInvocationContainer', type: JobInvocationContainer },
|
|
@@ -6,15 +6,11 @@ import Skeleton from 'react-loading-skeleton';
|
|
|
6
6
|
import ElipsisWithTooltip from 'react-ellipsis-with-tooltip';
|
|
7
7
|
|
|
8
8
|
import { Grid, GridItem } from '@patternfly/react-core';
|
|
9
|
-
import {
|
|
10
|
-
OkIcon,
|
|
11
|
-
ErrorCircleOIcon,
|
|
12
|
-
} from '@patternfly/react-icons/dist/js/icons';
|
|
13
9
|
import {
|
|
14
10
|
PropertiesSidePanel,
|
|
15
11
|
PropertyItem,
|
|
16
12
|
} from '@patternfly/react-catalog-view-extension';
|
|
17
|
-
import { ArrowIcon } from '@patternfly/react-icons';
|
|
13
|
+
import { ArrowIcon, ErrorCircleOIcon, OkIcon } from '@patternfly/react-icons';
|
|
18
14
|
|
|
19
15
|
import { useAPI } from 'foremanReact/common/hooks/API/APIHooks';
|
|
20
16
|
import CardItem from 'foremanReact/components/HostDetails/Templates/CardItem/CardTemplate';
|
|
@@ -9,9 +9,14 @@ import {
|
|
|
9
9
|
} from '../TargetingHostsSelectors';
|
|
10
10
|
|
|
11
11
|
const state = {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
TARGETING_HOSTS: {
|
|
13
|
+
status: 'RESOLVED',
|
|
14
|
+
response: {
|
|
15
|
+
hosts: [1, 2],
|
|
16
|
+
total_hosts: 2,
|
|
17
|
+
autoRefresh: 'true',
|
|
18
|
+
},
|
|
19
|
+
},
|
|
15
20
|
};
|
|
16
21
|
|
|
17
22
|
const fixtures = {
|
|
@@ -4,8 +4,13 @@ exports[`TargetingHostsSelectors should return apiStatus 1`] = `"RESOLVED"`;
|
|
|
4
4
|
|
|
5
5
|
exports[`TargetingHostsSelectors should return autoRefresh 1`] = `"true"`;
|
|
6
6
|
|
|
7
|
-
exports[`TargetingHostsSelectors should return hosts 1`] = `
|
|
7
|
+
exports[`TargetingHostsSelectors should return hosts 1`] = `
|
|
8
|
+
Array [
|
|
9
|
+
1,
|
|
10
|
+
2,
|
|
11
|
+
]
|
|
12
|
+
`;
|
|
8
13
|
|
|
9
14
|
exports[`TargetingHostsSelectors should return intervalExists 1`] = `false`;
|
|
10
15
|
|
|
11
|
-
exports[`TargetingHostsSelectors should return totalHosts 1`] = `
|
|
16
|
+
exports[`TargetingHostsSelectors should return totalHosts 1`] = `2`;
|
|
@@ -2,9 +2,10 @@ import React from 'react';
|
|
|
2
2
|
import { addGlobalFill } from 'foremanReact/components/common/Fill/GlobalFill';
|
|
3
3
|
import RecentJobsCard from '../components/RecentJobsCard';
|
|
4
4
|
|
|
5
|
-
export default
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
5
|
+
export default () =>
|
|
6
|
+
addGlobalFill(
|
|
7
|
+
'details-cards',
|
|
8
|
+
'rex-host-details-latest-jobs',
|
|
9
|
+
<RecentJobsCard />,
|
|
10
|
+
1000
|
|
11
|
+
);
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { addGlobalFill } from 'foremanReact/components/common/Fill/GlobalFill';
|
|
3
|
+
import RexInterface from '../components/RegistrationExtension/RexInterface';
|
|
4
|
+
|
|
5
|
+
export default () =>
|
|
6
|
+
addGlobalFill(
|
|
7
|
+
'registrationAdvanced',
|
|
8
|
+
'foreman-remote-exectuion-rex-interface',
|
|
9
|
+
<RexInterface key="registration-rex-interface" />,
|
|
10
|
+
100
|
|
11
|
+
);
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { registerReducer } from 'foremanReact/common/MountingService';
|
|
2
2
|
import rootReducer from '../redux/reducers';
|
|
3
3
|
|
|
4
|
-
export default
|
|
4
|
+
export default () =>
|
|
5
|
+
registerReducer('foremanRemoteExecutionReducers', rootReducer);
|
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.5.3
|
|
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-07-27 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: deface
|
|
@@ -171,7 +171,6 @@ files:
|
|
|
171
171
|
- app/models/concerns/foreman_remote_execution/foreman_tasks_triggering_extensions.rb
|
|
172
172
|
- app/models/concerns/foreman_remote_execution/host_extensions.rb
|
|
173
173
|
- app/models/concerns/foreman_remote_execution/nic_extensions.rb
|
|
174
|
-
- app/models/concerns/foreman_remote_execution/orchestration/ssh.rb
|
|
175
174
|
- app/models/concerns/foreman_remote_execution/smart_proxy_extensions.rb
|
|
176
175
|
- app/models/concerns/foreman_remote_execution/subnet_extensions.rb
|
|
177
176
|
- app/models/concerns/foreman_remote_execution/taxonomy_extensions.rb
|
|
@@ -180,6 +179,7 @@ files:
|
|
|
180
179
|
- app/models/concerns/foreman_remote_execution/template_overrides.rb
|
|
181
180
|
- app/models/concerns/foreman_remote_execution/user_extensions.rb
|
|
182
181
|
- app/models/foreign_input_set.rb
|
|
182
|
+
- app/models/host_proxy_invocation.rb
|
|
183
183
|
- app/models/host_status/execution_status.rb
|
|
184
184
|
- app/models/input_template_renderer.rb
|
|
185
185
|
- app/models/invocation_provider_input_value.rb
|
|
@@ -324,6 +324,7 @@ files:
|
|
|
324
324
|
- db/migrate/20200623073022_rename_sudo_password_to_effective_user_password.rb
|
|
325
325
|
- db/migrate/20200820122057_add_proxy_selector_override_to_remote_execution_feature.rb
|
|
326
326
|
- db/migrate/20210312074713_add_provider_inputs.rb
|
|
327
|
+
- db/migrate/2021051713291621250977_add_host_proxy_invocations.rb
|
|
327
328
|
- db/seeds.d/100-assign_features_with_templates.rb
|
|
328
329
|
- db/seeds.d/20-permissions.rb
|
|
329
330
|
- db/seeds.d/50-notification_blueprints.rb
|
|
@@ -380,7 +381,6 @@ files:
|
|
|
380
381
|
- test/functional/job_templates_controller_test.rb
|
|
381
382
|
- test/functional/ui_job_wizard_controller_test.rb
|
|
382
383
|
- test/helpers/remote_execution_helper_test.rb
|
|
383
|
-
- test/models/orchestration/ssh_test.rb
|
|
384
384
|
- test/support/remote_execution_helper.rb
|
|
385
385
|
- test/test_plugin_helper.rb
|
|
386
386
|
- test/unit/actions/run_host_job_test.rb
|
|
@@ -404,19 +404,30 @@ files:
|
|
|
404
404
|
- webpack/JobWizard/JobWizard.scss
|
|
405
405
|
- webpack/JobWizard/JobWizardConstants.js
|
|
406
406
|
- webpack/JobWizard/JobWizardSelectors.js
|
|
407
|
-
- webpack/JobWizard/__tests__/
|
|
408
|
-
- webpack/JobWizard/__tests__/
|
|
407
|
+
- webpack/JobWizard/__tests__/__snapshots__/integration.test.js.snap
|
|
408
|
+
- webpack/JobWizard/__tests__/fixtures.js
|
|
409
|
+
- webpack/JobWizard/__tests__/integration.test.js
|
|
409
410
|
- webpack/JobWizard/index.js
|
|
411
|
+
- webpack/JobWizard/steps/AdvancedFields/AdvancedFields.js
|
|
412
|
+
- webpack/JobWizard/steps/AdvancedFields/DescriptionField.js
|
|
413
|
+
- webpack/JobWizard/steps/AdvancedFields/Fields.js
|
|
414
|
+
- webpack/JobWizard/steps/AdvancedFields/__tests__/AdvancedFields.test.js
|
|
415
|
+
- webpack/JobWizard/steps/AdvancedFields/__tests__/DescriptionField.test.js
|
|
410
416
|
- webpack/JobWizard/steps/CategoryAndTemplate/CategoryAndTemplate.js
|
|
411
417
|
- webpack/JobWizard/steps/CategoryAndTemplate/CategoryAndTemplate.test.js
|
|
412
|
-
- webpack/JobWizard/steps/CategoryAndTemplate/__snapshots__/CategoryAndTemplate.test.js.snap
|
|
413
418
|
- webpack/JobWizard/steps/CategoryAndTemplate/index.js
|
|
419
|
+
- webpack/JobWizard/steps/Schedule/QueryType.js
|
|
420
|
+
- webpack/JobWizard/steps/Schedule/RepeatOn.js
|
|
421
|
+
- webpack/JobWizard/steps/Schedule/ScheduleType.js
|
|
422
|
+
- webpack/JobWizard/steps/Schedule/StartEndDates.js
|
|
423
|
+
- webpack/JobWizard/steps/Schedule/__tests__/StartEndDates.test.js
|
|
424
|
+
- webpack/JobWizard/steps/Schedule/index.js
|
|
425
|
+
- webpack/JobWizard/steps/form/FormHelpers.js
|
|
426
|
+
- webpack/JobWizard/steps/form/Formatter.js
|
|
414
427
|
- webpack/JobWizard/steps/form/GroupedSelectField.js
|
|
428
|
+
- webpack/JobWizard/steps/form/NumberInput.js
|
|
415
429
|
- webpack/JobWizard/steps/form/SelectField.js
|
|
416
|
-
- webpack/JobWizard/steps/form/__tests__/
|
|
417
|
-
- webpack/JobWizard/steps/form/__tests__/SelectField.test.js
|
|
418
|
-
- webpack/JobWizard/steps/form/__tests__/__snapshots__/GroupedSelectField.test.js.snap
|
|
419
|
-
- webpack/JobWizard/steps/form/__tests__/__snapshots__/SelectField.test.js.snap
|
|
430
|
+
- webpack/JobWizard/steps/form/__tests__/Formatter.test.js.example
|
|
420
431
|
- webpack/Routes/routes.js
|
|
421
432
|
- webpack/__mocks__/foremanReact/common/I18n.js
|
|
422
433
|
- webpack/__mocks__/foremanReact/common/helpers.js
|
|
@@ -429,7 +440,6 @@ files:
|
|
|
429
440
|
- webpack/__mocks__/foremanReact/redux/API/index.js
|
|
430
441
|
- webpack/__mocks__/foremanReact/redux/middlewares/IntervalMiddleware/IntervalSelectors.js
|
|
431
442
|
- webpack/__mocks__/foremanReact/routes/common/PageLayout/PageLayout.js
|
|
432
|
-
- webpack/fills_index.js
|
|
433
443
|
- webpack/global_index.js
|
|
434
444
|
- webpack/index.js
|
|
435
445
|
- webpack/react_app/components/RecentJobsCard/RecentJobsCard.js
|
|
@@ -462,7 +472,8 @@ files:
|
|
|
462
472
|
- webpack/react_app/components/jobInvocations/AggregateStatus/index.js
|
|
463
473
|
- webpack/react_app/components/jobInvocations/AggregateStatus/index.test.js
|
|
464
474
|
- webpack/react_app/components/jobInvocations/index.js
|
|
465
|
-
- webpack/react_app/extend/
|
|
475
|
+
- webpack/react_app/extend/fillRecentJobsCard.js
|
|
476
|
+
- webpack/react_app/extend/fillregistrationAdvanced.js
|
|
466
477
|
- webpack/react_app/extend/reducers.js
|
|
467
478
|
- webpack/react_app/redux/actions/jobInvocations/index.js
|
|
468
479
|
- webpack/react_app/redux/consts.js
|
|
@@ -510,7 +521,6 @@ test_files:
|
|
|
510
521
|
- test/functional/job_templates_controller_test.rb
|
|
511
522
|
- test/functional/ui_job_wizard_controller_test.rb
|
|
512
523
|
- test/helpers/remote_execution_helper_test.rb
|
|
513
|
-
- test/models/orchestration/ssh_test.rb
|
|
514
524
|
- test/support/remote_execution_helper.rb
|
|
515
525
|
- test/test_plugin_helper.rb
|
|
516
526
|
- test/unit/actions/run_host_job_test.rb
|