foreman_remote_execution 3.1.0 → 3.3.2
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/.eslintrc +5 -30
- data/.github/workflows/ci.yml +100 -0
- data/.gitignore +1 -0
- data/.rubocop_todo.yml +3 -0
- data/Gemfile +1 -0
- data/app/controllers/api/v2/job_invocations_controller.rb +22 -1
- data/app/controllers/api/v2/template_invocations_controller.rb +4 -1
- data/app/helpers/job_invocations_chart_helper.rb +2 -0
- data/app/helpers/job_invocations_helper.rb +6 -1
- data/app/helpers/remote_execution_helper.rb +39 -30
- data/app/lib/actions/remote_execution/run_host_job.rb +3 -2
- data/app/lib/proxy_api/remote_execution_ssh.rb +6 -0
- data/app/models/concerns/foreman_remote_execution/host_extensions.rb +1 -1
- data/app/models/concerns/foreman_remote_execution/orchestration/ssh.rb +63 -0
- data/app/models/concerns/foreman_remote_execution/smart_proxy_extensions.rb +4 -0
- data/app/models/host_status/execution_status.rb +9 -1
- data/app/models/remote_execution_provider.rb +5 -0
- data/app/services/default_proxy_proxy_selector.rb +18 -0
- data/app/views/api/v2/job_invocations/main.json.rabl +8 -2
- data/app/views/job_invocations/_card_results.html.erb +1 -0
- data/app/views/job_invocations/_card_user_input.html.erb +1 -1
- data/app/views/job_invocations/_tab_hosts.html.erb +3 -23
- data/app/views/job_invocations/_tab_overview.html.erb +1 -1
- data/app/views/job_invocations/_user_input.html.erb +1 -1
- data/app/views/job_invocations/show.html.erb +1 -7
- data/app/views/job_invocations/show.json.erb +4 -0
- data/config/routes.rb +2 -1
- data/db/seeds.d/70-job_templates.rb +1 -1
- data/foreman_remote_execution.gemspec +5 -6
- data/lib/foreman_remote_execution/engine.rb +2 -0
- data/lib/foreman_remote_execution/version.rb +1 -1
- data/locale/action_names.rb +3 -3
- data/locale/de/LC_MESSAGES/foreman_remote_execution.mo +0 -0
- data/locale/de/foreman_remote_execution.po +65 -16
- data/locale/en/foreman_remote_execution.po +63 -15
- data/locale/en_GB/LC_MESSAGES/foreman_remote_execution.mo +0 -0
- data/locale/en_GB/foreman_remote_execution.po +64 -15
- data/locale/es/LC_MESSAGES/foreman_remote_execution.mo +0 -0
- data/locale/es/foreman_remote_execution.po +66 -17
- data/locale/foreman_remote_execution.pot +193 -148
- data/locale/fr/LC_MESSAGES/foreman_remote_execution.mo +0 -0
- data/locale/fr/foreman_remote_execution.po +66 -17
- data/locale/ja/LC_MESSAGES/foreman_remote_execution.mo +0 -0
- data/locale/ja/foreman_remote_execution.po +66 -17
- data/locale/ko/LC_MESSAGES/foreman_remote_execution.mo +0 -0
- data/locale/ko/foreman_remote_execution.po +65 -15
- data/locale/pt_BR/LC_MESSAGES/foreman_remote_execution.mo +0 -0
- data/locale/pt_BR/foreman_remote_execution.po +66 -17
- data/locale/ru/LC_MESSAGES/foreman_remote_execution.mo +0 -0
- data/locale/ru/foreman_remote_execution.po +65 -18
- data/locale/zh_CN/LC_MESSAGES/foreman_remote_execution.mo +0 -0
- data/locale/zh_CN/foreman_remote_execution.po +66 -17
- data/locale/zh_TW/LC_MESSAGES/foreman_remote_execution.mo +0 -0
- data/locale/zh_TW/foreman_remote_execution.po +65 -16
- data/package.json +16 -33
- data/test/functional/api/v2/job_invocations_controller_test.rb +42 -14
- data/test/functional/job_invocations_controller_test.rb +12 -0
- data/test/models/orchestration/ssh_test.rb +56 -0
- data/test/unit/concerns/host_extensions_test.rb +7 -0
- data/test/unit/remote_execution_provider_test.rb +4 -1
- data/webpack/__mocks__/foremanReact/common/I18n.js +1 -0
- data/webpack/__mocks__/foremanReact/components/common/ActionButtons/ActionButtons.js +3 -0
- data/webpack/__mocks__/foremanReact/constants.js +3 -0
- data/webpack/index.js +9 -22
- data/webpack/react_app/components/TargetingHosts/TargetingHosts.js +52 -0
- data/webpack/react_app/components/TargetingHosts/TargetingHostsActions.js +8 -0
- data/webpack/react_app/components/TargetingHosts/TargetingHostsConsts.js +1 -0
- data/webpack/react_app/components/TargetingHosts/TargetingHostsSelectors.js +12 -0
- data/webpack/react_app/components/TargetingHosts/__tests__/HostItem.test.js +6 -0
- data/webpack/react_app/components/TargetingHosts/__tests__/HostStatus.test.js +6 -0
- data/webpack/react_app/components/TargetingHosts/__tests__/TargetingHosts.test.js +6 -0
- data/webpack/react_app/components/TargetingHosts/__tests__/__snapshots__/HostItem.test.js.snap +31 -0
- data/webpack/react_app/components/TargetingHosts/__tests__/__snapshots__/HostStatus.test.js.snap +12 -0
- data/webpack/react_app/components/TargetingHosts/__tests__/__snapshots__/TargetingHosts.test.js.snap +81 -0
- data/webpack/react_app/components/TargetingHosts/__tests__/fixtures.js +43 -0
- data/webpack/react_app/components/TargetingHosts/components/HostItem.js +39 -0
- data/webpack/react_app/components/TargetingHosts/components/HostStatus.js +54 -0
- data/webpack/react_app/components/TargetingHosts/index.js +37 -0
- data/webpack/react_app/components/jobInvocations/AggregateStatus/index.js +10 -0
- data/webpack/react_app/components/jobInvocations/AggregateStatus/index.test.js +6 -3
- data/webpack/react_app/components/jobInvocations/index.js +19 -7
- data/webpack/react_app/redux/actions/jobInvocations/index.js +12 -8
- data/webpack/react_app/redux/consts.js +1 -2
- data/webpack/react_app/redux/reducers/jobInvocations/index.fixtures.js +8 -40
- data/webpack/react_app/redux/reducers/jobInvocations/index.test.js +17 -11
- data/webpack/test_setup.js +2 -1
- metadata +31 -14
- data/.hound.yml +0 -19
- data/.travis.yml +0 -6
- data/app/views/job_invocations/_host_actions_td.html.erb +0 -3
- data/app/views/job_invocations/_host_name_td.html.erb +0 -8
- data/app/views/job_invocations/_host_status_td.html.erb +0 -1
- data/app/views/job_invocations/show.js.erb +0 -23
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import React, { useEffect } from 'react';
|
|
2
|
+
import { useSelector, useDispatch } from 'react-redux';
|
|
3
|
+
import { stopInterval } from 'foremanReact/redux/middlewares/IntervalMiddleware';
|
|
4
|
+
import TargetingHosts from './TargetingHosts';
|
|
5
|
+
|
|
6
|
+
import {
|
|
7
|
+
selectItems,
|
|
8
|
+
selectStatus,
|
|
9
|
+
selectAutoRefresh,
|
|
10
|
+
} from './TargetingHostsSelectors';
|
|
11
|
+
import { getData } from './TargetingHostsActions';
|
|
12
|
+
import { TARGETING_HOSTS } from './TargetingHostsConsts';
|
|
13
|
+
|
|
14
|
+
const WrappedTargetingHosts = () => {
|
|
15
|
+
const dispatch = useDispatch();
|
|
16
|
+
const autoRefresh = useSelector(selectAutoRefresh);
|
|
17
|
+
const items = useSelector(selectItems);
|
|
18
|
+
const status = useSelector(selectStatus);
|
|
19
|
+
|
|
20
|
+
useEffect(() => {
|
|
21
|
+
dispatch(getData());
|
|
22
|
+
|
|
23
|
+
return () => {
|
|
24
|
+
dispatch(stopInterval(TARGETING_HOSTS));
|
|
25
|
+
};
|
|
26
|
+
}, [dispatch]);
|
|
27
|
+
|
|
28
|
+
useEffect(() => {
|
|
29
|
+
if (autoRefresh === 'false') {
|
|
30
|
+
dispatch(stopInterval(TARGETING_HOSTS));
|
|
31
|
+
}
|
|
32
|
+
}, [autoRefresh, dispatch]);
|
|
33
|
+
|
|
34
|
+
return <TargetingHosts status={status} items={items} />;
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
export default WrappedTargetingHosts;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
+
import PropTypes from 'prop-types';
|
|
2
3
|
|
|
3
4
|
const AggregateStatus = ({ statuses }) => (
|
|
4
5
|
<div id="aggregate_statuses">
|
|
@@ -31,4 +32,13 @@ const AggregateStatus = ({ statuses }) => (
|
|
|
31
32
|
</div>
|
|
32
33
|
);
|
|
33
34
|
|
|
35
|
+
AggregateStatus.propTypes = {
|
|
36
|
+
statuses: PropTypes.shape({
|
|
37
|
+
cancelled: PropTypes.number,
|
|
38
|
+
failed: PropTypes.number,
|
|
39
|
+
pending: PropTypes.number,
|
|
40
|
+
success: PropTypes.number,
|
|
41
|
+
}).isRequired,
|
|
42
|
+
};
|
|
43
|
+
|
|
34
44
|
export default AggregateStatus;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { shallow } from '
|
|
3
|
-
import AggregateStatus from './index
|
|
2
|
+
import { shallow } from '@theforeman/test';
|
|
3
|
+
import AggregateStatus from './index';
|
|
4
4
|
|
|
5
5
|
jest.unmock('./index.js');
|
|
6
6
|
|
|
@@ -20,7 +20,10 @@ describe('AggregateStatus', () => {
|
|
|
20
20
|
|
|
21
21
|
it('renders cards with props passed', () => {
|
|
22
22
|
const statuses = {
|
|
23
|
-
success: 19,
|
|
23
|
+
success: 19,
|
|
24
|
+
failed: 20,
|
|
25
|
+
cancelled: 31,
|
|
26
|
+
pending: 3,
|
|
24
27
|
};
|
|
25
28
|
const chartNumbers = shallow(<AggregateStatus statuses={statuses} />);
|
|
26
29
|
const success = chartNumbers.find('#success_count').text();
|
|
@@ -4,14 +4,18 @@ import Immutable from 'seamless-immutable';
|
|
|
4
4
|
import PropTypes from 'prop-types';
|
|
5
5
|
// eslint-disable-next-line import/no-extraneous-dependencies
|
|
6
6
|
import DonutChart from 'foremanReact/components/common/charts/DonutChart';
|
|
7
|
-
import AggregateStatus from './AggregateStatus
|
|
7
|
+
import AggregateStatus from './AggregateStatus';
|
|
8
8
|
import * as JobInvocationActions from '../../redux/actions/jobInvocations';
|
|
9
9
|
|
|
10
|
-
const colIndexOfMaxValue = columns =>
|
|
10
|
+
const colIndexOfMaxValue = columns =>
|
|
11
|
+
columns.reduce((iMax, x, i, arr) => (x[1] > arr[iMax][1] ? i : iMax), 0);
|
|
11
12
|
|
|
12
13
|
class JobInvocationContainer extends React.Component {
|
|
13
14
|
componentDidMount() {
|
|
14
|
-
const {
|
|
15
|
+
const {
|
|
16
|
+
startJobInvocationsPolling,
|
|
17
|
+
data: { url },
|
|
18
|
+
} = this.props;
|
|
15
19
|
|
|
16
20
|
startJobInvocationsPolling(url);
|
|
17
21
|
}
|
|
@@ -22,15 +26,20 @@ class JobInvocationContainer extends React.Component {
|
|
|
22
26
|
|
|
23
27
|
return (
|
|
24
28
|
<div id="job_invocations_chart_container">
|
|
25
|
-
<DonutChart
|
|
26
|
-
|
|
29
|
+
<DonutChart
|
|
30
|
+
data={Immutable.asMutable(jobInvocations)}
|
|
31
|
+
title={{
|
|
32
|
+
type: 'percent',
|
|
33
|
+
secondary: (jobInvocations[iMax] || [])[0],
|
|
34
|
+
}}
|
|
35
|
+
/>
|
|
27
36
|
<AggregateStatus statuses={statuses} />
|
|
28
37
|
</div>
|
|
29
38
|
);
|
|
30
39
|
}
|
|
31
40
|
}
|
|
32
41
|
|
|
33
|
-
const mapStateToProps =
|
|
42
|
+
const mapStateToProps = state => {
|
|
34
43
|
const {
|
|
35
44
|
jobInvocations,
|
|
36
45
|
statuses,
|
|
@@ -62,4 +71,7 @@ JobInvocationContainer.defaultProps = {
|
|
|
62
71
|
jobInvocations: [['property', 3, 'color']],
|
|
63
72
|
statuses: {},
|
|
64
73
|
};
|
|
65
|
-
export default connect(
|
|
74
|
+
export default connect(
|
|
75
|
+
mapStateToProps,
|
|
76
|
+
JobInvocationActions
|
|
77
|
+
)(JobInvocationContainer);
|
|
@@ -8,10 +8,10 @@ import {
|
|
|
8
8
|
} from '../../consts';
|
|
9
9
|
|
|
10
10
|
const defaultJobInvocationsPollingInterval = 1000;
|
|
11
|
-
const jobInvocationsInterval =
|
|
12
|
-
defaultJobInvocationsPollingInterval;
|
|
11
|
+
const jobInvocationsInterval =
|
|
12
|
+
process.env.JOB_INVOCATIONS_POLLING || defaultJobInvocationsPollingInterval;
|
|
13
13
|
|
|
14
|
-
const getJobInvocations = url => (dispatch, getState) => {
|
|
14
|
+
const getJobInvocations = url => async (dispatch, getState) => {
|
|
15
15
|
function onGetJobInvocationsSuccess({ data }) {
|
|
16
16
|
// If the job has finished, stop polling
|
|
17
17
|
if (data.finished) {
|
|
@@ -41,7 +41,7 @@ const getJobInvocations = url => (dispatch, getState) => {
|
|
|
41
41
|
if (jobInvocationsInterval) {
|
|
42
42
|
setTimeout(
|
|
43
43
|
() => dispatch(getJobInvocations(url)),
|
|
44
|
-
jobInvocationsInterval
|
|
44
|
+
jobInvocationsInterval
|
|
45
45
|
);
|
|
46
46
|
}
|
|
47
47
|
}
|
|
@@ -52,10 +52,14 @@ const getJobInvocations = url => (dispatch, getState) => {
|
|
|
52
52
|
|
|
53
53
|
if (getState().foremanRemoteExecutionReducers.jobInvocations.isPolling) {
|
|
54
54
|
if (isDocumentVisible) {
|
|
55
|
-
|
|
56
|
-
.
|
|
57
|
-
|
|
58
|
-
|
|
55
|
+
try {
|
|
56
|
+
const data = await API.get(url);
|
|
57
|
+
onGetJobInvocationsSuccess(data);
|
|
58
|
+
} catch (error) {
|
|
59
|
+
onGetJobInvocationsFailed(error);
|
|
60
|
+
} finally {
|
|
61
|
+
triggerPolling();
|
|
62
|
+
}
|
|
59
63
|
} else {
|
|
60
64
|
// document is not visible, keep polling without api call
|
|
61
65
|
triggerPolling();
|
|
@@ -2,5 +2,4 @@ export const JOB_INVOCATIONS_POLLING_STARTED =
|
|
|
2
2
|
'JOB_INVOCATIONS_POLLING_STARTED';
|
|
3
3
|
export const JOB_INVOCATIONS_GET_JOB_INVOCATIONS =
|
|
4
4
|
'JOB_INVOCATIONS_GET_JOB_INVOCATIONS';
|
|
5
|
-
export const JOB_INVOCATIONS_JOB_FINISHED =
|
|
6
|
-
'JOB_INVOCATIONS_JOB_FINISHED';
|
|
5
|
+
export const JOB_INVOCATIONS_JOB_FINISHED = 'JOB_INVOCATIONS_JOB_FINISHED';
|
|
@@ -15,26 +15,10 @@ export const pollingStarted = Immutable({
|
|
|
15
15
|
export const jobInvocationsPayload = Immutable({
|
|
16
16
|
jobInvocations: {
|
|
17
17
|
job_invocations: [
|
|
18
|
-
[
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
],
|
|
23
|
-
[
|
|
24
|
-
'Failed',
|
|
25
|
-
20,
|
|
26
|
-
'#B7312D',
|
|
27
|
-
],
|
|
28
|
-
[
|
|
29
|
-
'Pending',
|
|
30
|
-
40,
|
|
31
|
-
'#B7312D',
|
|
32
|
-
],
|
|
33
|
-
[
|
|
34
|
-
'Cancelled',
|
|
35
|
-
0,
|
|
36
|
-
'#B7312D',
|
|
37
|
-
],
|
|
18
|
+
['Success', 100, '#B7312D'],
|
|
19
|
+
['Failed', 20, '#B7312D'],
|
|
20
|
+
['Pending', 40, '#B7312D'],
|
|
21
|
+
['Cancelled', 0, '#B7312D'],
|
|
38
22
|
],
|
|
39
23
|
statuses: {
|
|
40
24
|
cancelled: 0,
|
|
@@ -48,26 +32,10 @@ export const jobInvocationsPayload = Immutable({
|
|
|
48
32
|
export const jobInvocationsReceived = Immutable({
|
|
49
33
|
isPolling: true,
|
|
50
34
|
jobInvocations: [
|
|
51
|
-
[
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
],
|
|
56
|
-
[
|
|
57
|
-
'Failed',
|
|
58
|
-
20,
|
|
59
|
-
'#B7312D',
|
|
60
|
-
],
|
|
61
|
-
[
|
|
62
|
-
'Pending',
|
|
63
|
-
40,
|
|
64
|
-
'#B7312D',
|
|
65
|
-
],
|
|
66
|
-
[
|
|
67
|
-
'Cancelled',
|
|
68
|
-
0,
|
|
69
|
-
'#B7312D',
|
|
70
|
-
],
|
|
35
|
+
['Success', 100, '#B7312D'],
|
|
36
|
+
['Failed', 20, '#B7312D'],
|
|
37
|
+
['Pending', 40, '#B7312D'],
|
|
38
|
+
['Cancelled', 0, '#B7312D'],
|
|
71
39
|
],
|
|
72
40
|
statuses: {
|
|
73
41
|
cancelled: 0,
|
|
@@ -18,20 +18,26 @@ describe('job invocations chart reducer', () => {
|
|
|
18
18
|
expect(reducer(undefined, {})).toEqual(initialState);
|
|
19
19
|
});
|
|
20
20
|
it('should start polling given POLLING_STARTED', () => {
|
|
21
|
-
expect(
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
expect(
|
|
22
|
+
reducer(initialState, {
|
|
23
|
+
type: JOB_INVOCATIONS_POLLING_STARTED,
|
|
24
|
+
})
|
|
25
|
+
).toEqual(pollingStarted);
|
|
24
26
|
});
|
|
25
27
|
it('should stop polling given JOB_FINISHED', () => {
|
|
26
|
-
expect(
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
expect(
|
|
29
|
+
reducer(pollingStarted, {
|
|
30
|
+
type: JOB_INVOCATIONS_JOB_FINISHED,
|
|
31
|
+
payload: { jobInvocations: { job_invocations: [], statuses: {} } },
|
|
32
|
+
})
|
|
33
|
+
).toEqual(initialState);
|
|
30
34
|
});
|
|
31
35
|
it('should receive job invocations given GET_JOB_INVOCATIONS', () => {
|
|
32
|
-
expect(
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
+
expect(
|
|
37
|
+
reducer(pollingStarted, {
|
|
38
|
+
type: JOB_INVOCATIONS_GET_JOB_INVOCATIONS,
|
|
39
|
+
payload: jobInvocationsPayload,
|
|
40
|
+
})
|
|
41
|
+
).toEqual(jobInvocationsReceived);
|
|
36
42
|
});
|
|
37
43
|
});
|
data/webpack/test_setup.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import 'core-js/shim';
|
|
2
2
|
import 'regenerator-runtime/runtime';
|
|
3
3
|
|
|
4
|
-
import { configure } from '
|
|
4
|
+
import { configure } from '@theforeman/test';
|
|
5
|
+
// eslint-disable-next-line import/no-extraneous-dependencies
|
|
5
6
|
import Adapter from 'enzyme-adapter-react-16';
|
|
6
7
|
|
|
7
8
|
configure({ adapter: new Adapter() });
|
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: 3.
|
|
4
|
+
version: 3.3.2
|
|
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: 2020-
|
|
11
|
+
date: 2020-06-23 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: deface
|
|
@@ -30,7 +30,7 @@ dependencies:
|
|
|
30
30
|
requirements:
|
|
31
31
|
- - ">="
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
|
-
version: 1.0.
|
|
33
|
+
version: 1.0.2
|
|
34
34
|
- - "<"
|
|
35
35
|
- !ruby/object:Gem::Version
|
|
36
36
|
version: 2.0.0
|
|
@@ -40,7 +40,7 @@ dependencies:
|
|
|
40
40
|
requirements:
|
|
41
41
|
- - ">="
|
|
42
42
|
- !ruby/object:Gem::Version
|
|
43
|
-
version: 1.0.
|
|
43
|
+
version: 1.0.2
|
|
44
44
|
- - "<"
|
|
45
45
|
- !ruby/object:Gem::Version
|
|
46
46
|
version: 2.0.0
|
|
@@ -90,16 +90,16 @@ dependencies:
|
|
|
90
90
|
name: rubocop
|
|
91
91
|
requirement: !ruby/object:Gem::Requirement
|
|
92
92
|
requirements:
|
|
93
|
-
- - "
|
|
93
|
+
- - "~>"
|
|
94
94
|
- !ruby/object:Gem::Version
|
|
95
|
-
version:
|
|
95
|
+
version: 0.80.0
|
|
96
96
|
type: :development
|
|
97
97
|
prerelease: false
|
|
98
98
|
version_requirements: !ruby/object:Gem::Requirement
|
|
99
99
|
requirements:
|
|
100
|
-
- - "
|
|
100
|
+
- - "~>"
|
|
101
101
|
- !ruby/object:Gem::Version
|
|
102
|
-
version:
|
|
102
|
+
version: 0.80.0
|
|
103
103
|
- !ruby/object:Gem::Dependency
|
|
104
104
|
name: rdoc
|
|
105
105
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -127,11 +127,10 @@ files:
|
|
|
127
127
|
- ".babelrc.js"
|
|
128
128
|
- ".eslintignore"
|
|
129
129
|
- ".eslintrc"
|
|
130
|
+
- ".github/workflows/ci.yml"
|
|
130
131
|
- ".gitignore"
|
|
131
|
-
- ".hound.yml"
|
|
132
132
|
- ".rubocop.yml"
|
|
133
133
|
- ".rubocop_todo.yml"
|
|
134
|
-
- ".travis.yml"
|
|
135
134
|
- ".tx/config"
|
|
136
135
|
- Gemfile
|
|
137
136
|
- LICENSE
|
|
@@ -178,6 +177,7 @@ files:
|
|
|
178
177
|
- app/models/concerns/foreman_remote_execution/foreman_tasks_triggering_extensions.rb
|
|
179
178
|
- app/models/concerns/foreman_remote_execution/host_extensions.rb
|
|
180
179
|
- app/models/concerns/foreman_remote_execution/nic_extensions.rb
|
|
180
|
+
- app/models/concerns/foreman_remote_execution/orchestration/ssh.rb
|
|
181
181
|
- app/models/concerns/foreman_remote_execution/smart_proxy_extensions.rb
|
|
182
182
|
- app/models/concerns/foreman_remote_execution/subnet_extensions.rb
|
|
183
183
|
- app/models/concerns/foreman_remote_execution/taxonomy_extensions.rb
|
|
@@ -204,6 +204,7 @@ files:
|
|
|
204
204
|
- app/models/template_invocation_input_value.rb
|
|
205
205
|
- app/overrides/execution_interface.rb
|
|
206
206
|
- app/overrides/subnet_proxies.rb
|
|
207
|
+
- app/services/default_proxy_proxy_selector.rb
|
|
207
208
|
- app/services/remote_execution_proxy_selector.rb
|
|
208
209
|
- app/services/ui_notifications/remote_execution_jobs/base_job_finish.rb
|
|
209
210
|
- app/views/api/v2/foreign_input_sets/base.json.rabl
|
|
@@ -237,9 +238,6 @@ files:
|
|
|
237
238
|
- app/views/job_invocations/_card_user_input.html.erb
|
|
238
239
|
- app/views/job_invocations/_description_fields.html.erb
|
|
239
240
|
- app/views/job_invocations/_form.html.erb
|
|
240
|
-
- app/views/job_invocations/_host_actions_td.html.erb
|
|
241
|
-
- app/views/job_invocations/_host_name_td.html.erb
|
|
242
|
-
- app/views/job_invocations/_host_status_td.html.erb
|
|
243
241
|
- app/views/job_invocations/_preview_hosts_list.html.erb
|
|
244
242
|
- app/views/job_invocations/_preview_hosts_modal.html.erb
|
|
245
243
|
- app/views/job_invocations/_rerun_taxonomies.html.erb
|
|
@@ -251,7 +249,7 @@ files:
|
|
|
251
249
|
- app/views/job_invocations/new.html.erb
|
|
252
250
|
- app/views/job_invocations/refresh.js.erb
|
|
253
251
|
- app/views/job_invocations/show.html.erb
|
|
254
|
-
- app/views/job_invocations/show.
|
|
252
|
+
- app/views/job_invocations/show.json.erb
|
|
255
253
|
- app/views/job_invocations/welcome.html.erb
|
|
256
254
|
- app/views/job_templates/_custom_tab_headers.html.erb
|
|
257
255
|
- app/views/job_templates/_custom_tabs.html.erb
|
|
@@ -377,6 +375,7 @@ files:
|
|
|
377
375
|
- test/functional/job_invocations_controller_test.rb
|
|
378
376
|
- test/functional/job_templates_controller_test.rb
|
|
379
377
|
- test/helpers/remote_execution_helper_test.rb
|
|
378
|
+
- test/models/orchestration/ssh_test.rb
|
|
380
379
|
- test/test_plugin_helper.rb
|
|
381
380
|
- test/unit/actions/run_host_job_test.rb
|
|
382
381
|
- test/unit/actions/run_hosts_job_test.rb
|
|
@@ -394,7 +393,24 @@ files:
|
|
|
394
393
|
- test/unit/renderer_scope_input.rb
|
|
395
394
|
- test/unit/targeting_test.rb
|
|
396
395
|
- test/unit/template_invocation_input_value_test.rb
|
|
396
|
+
- webpack/__mocks__/foremanReact/common/I18n.js
|
|
397
|
+
- webpack/__mocks__/foremanReact/components/common/ActionButtons/ActionButtons.js
|
|
398
|
+
- webpack/__mocks__/foremanReact/constants.js
|
|
397
399
|
- webpack/index.js
|
|
400
|
+
- webpack/react_app/components/TargetingHosts/TargetingHosts.js
|
|
401
|
+
- webpack/react_app/components/TargetingHosts/TargetingHostsActions.js
|
|
402
|
+
- webpack/react_app/components/TargetingHosts/TargetingHostsConsts.js
|
|
403
|
+
- webpack/react_app/components/TargetingHosts/TargetingHostsSelectors.js
|
|
404
|
+
- webpack/react_app/components/TargetingHosts/__tests__/HostItem.test.js
|
|
405
|
+
- webpack/react_app/components/TargetingHosts/__tests__/HostStatus.test.js
|
|
406
|
+
- webpack/react_app/components/TargetingHosts/__tests__/TargetingHosts.test.js
|
|
407
|
+
- webpack/react_app/components/TargetingHosts/__tests__/__snapshots__/HostItem.test.js.snap
|
|
408
|
+
- webpack/react_app/components/TargetingHosts/__tests__/__snapshots__/HostStatus.test.js.snap
|
|
409
|
+
- webpack/react_app/components/TargetingHosts/__tests__/__snapshots__/TargetingHosts.test.js.snap
|
|
410
|
+
- webpack/react_app/components/TargetingHosts/__tests__/fixtures.js
|
|
411
|
+
- webpack/react_app/components/TargetingHosts/components/HostItem.js
|
|
412
|
+
- webpack/react_app/components/TargetingHosts/components/HostStatus.js
|
|
413
|
+
- webpack/react_app/components/TargetingHosts/index.js
|
|
398
414
|
- webpack/react_app/components/jobInvocations/AggregateStatus/index.js
|
|
399
415
|
- webpack/react_app/components/jobInvocations/AggregateStatus/index.test.js
|
|
400
416
|
- webpack/react_app/components/jobInvocations/index.js
|
|
@@ -442,6 +458,7 @@ test_files:
|
|
|
442
458
|
- test/functional/job_invocations_controller_test.rb
|
|
443
459
|
- test/functional/job_templates_controller_test.rb
|
|
444
460
|
- test/helpers/remote_execution_helper_test.rb
|
|
461
|
+
- test/models/orchestration/ssh_test.rb
|
|
445
462
|
- test/test_plugin_helper.rb
|
|
446
463
|
- test/unit/actions/run_host_job_test.rb
|
|
447
464
|
- test/unit/actions/run_hosts_job_test.rb
|
data/.hound.yml
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
scss:
|
|
2
|
-
enabled: false
|
|
3
|
-
|
|
4
|
-
stylelint:
|
|
5
|
-
enabled: true
|
|
6
|
-
|
|
7
|
-
rubocop:
|
|
8
|
-
config_file: .rubocop.yml
|
|
9
|
-
version: 0.80.0
|
|
10
|
-
|
|
11
|
-
jshint:
|
|
12
|
-
enabled: false
|
|
13
|
-
|
|
14
|
-
eslint:
|
|
15
|
-
enabled: true
|
|
16
|
-
config_file: .eslintrc
|
|
17
|
-
ignore_file: .eslintignore
|
|
18
|
-
|
|
19
|
-
fail_on_violations: true
|