foreman_remote_execution 3.0.2 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. checksums.yaml +4 -4
  2. data/.eslintrc +5 -30
  3. data/.gitignore +1 -0
  4. data/.hound.yml +2 -6
  5. data/.rubocop.yml +80 -50
  6. data/.rubocop_todo.yml +113 -73
  7. data/.travis.yml +2 -3
  8. data/Gemfile +4 -0
  9. data/app/controllers/api/v2/foreign_input_sets_controller.rb +3 -2
  10. data/app/controllers/api/v2/job_invocations_controller.rb +7 -6
  11. data/app/controllers/api/v2/job_templates_controller.rb +3 -2
  12. data/app/controllers/api/v2/remote_execution_features_controller.rb +3 -2
  13. data/app/controllers/api/v2/template_invocations_controller.rb +1 -1
  14. data/app/controllers/cockpit_controller.rb +1 -0
  15. data/app/controllers/concerns/foreman/controller/parameters/foreign_input_set.rb +1 -1
  16. data/app/controllers/concerns/foreman/controller/parameters/job_template.rb +4 -4
  17. data/app/controllers/job_invocations_controller.rb +10 -6
  18. data/app/controllers/job_templates_controller.rb +1 -1
  19. data/app/controllers/remote_execution_features_controller.rb +3 -2
  20. data/app/helpers/concerns/foreman_remote_execution/hosts_helper_extensions.rb +16 -5
  21. data/app/helpers/job_invocations_chart_helper.rb +13 -10
  22. data/app/helpers/job_invocations_helper.rb +18 -5
  23. data/app/helpers/remote_execution_helper.rb +49 -48
  24. data/app/lib/actions/remote_execution/run_host_job.rb +8 -8
  25. data/app/lib/actions/remote_execution/run_hosts_job.rb +2 -2
  26. data/app/lib/foreman_remote_execution/renderer/scope/input.rb +1 -0
  27. data/app/lib/proxy_api/remote_execution_ssh.rb +6 -0
  28. data/app/models/concerns/foreman_remote_execution/errors_flattener.rb +0 -2
  29. data/app/models/concerns/foreman_remote_execution/host_extensions.rb +3 -5
  30. data/app/models/concerns/foreman_remote_execution/nic_extensions.rb +1 -0
  31. data/app/models/concerns/foreman_remote_execution/orchestration/ssh.rb +61 -0
  32. data/app/models/concerns/foreman_remote_execution/smart_proxy_extensions.rb +5 -0
  33. data/app/models/foreign_input_set.rb +3 -2
  34. data/app/models/host_status/execution_status.rb +9 -1
  35. data/app/models/input_template_renderer.rb +1 -1
  36. data/app/models/job_invocation.rb +10 -12
  37. data/app/models/job_invocation_composer.rb +20 -14
  38. data/app/models/job_invocation_task_group.rb +1 -1
  39. data/app/models/job_template.rb +3 -3
  40. data/app/models/remote_execution_feature.rb +0 -2
  41. data/app/models/remote_execution_provider.rb +9 -2
  42. data/app/models/setting/remote_execution.rb +54 -56
  43. data/app/models/ssh_execution_provider.rb +2 -2
  44. data/app/models/targeting.rb +1 -0
  45. data/app/models/template_invocation.rb +2 -3
  46. data/app/services/default_proxy_proxy_selector.rb +18 -0
  47. data/app/views/api/v2/job_invocations/base.json.rabl +1 -1
  48. data/app/views/api/v2/job_invocations/main.json.rabl +5 -2
  49. data/app/views/job_invocations/_card_results.html.erb +1 -0
  50. data/app/views/job_invocations/_card_target_hosts.html.erb +12 -0
  51. data/app/views/job_invocations/_card_user_input.html.erb +1 -1
  52. data/app/views/job_invocations/_form.html.erb +3 -2
  53. data/app/views/job_invocations/_host_status_td.html.erb +1 -1
  54. data/app/views/job_invocations/_rerun_taxonomies.html.erb +22 -0
  55. data/app/views/job_invocations/_tab_overview.html.erb +1 -1
  56. data/app/views/job_invocations/_user_input.html.erb +1 -1
  57. data/app/views/job_invocations/show.html.erb +3 -1
  58. data/config/routes.rb +2 -1
  59. data/db/migrate/20151215114631_add_host_id_to_template_invocation.rb +1 -0
  60. data/db/migrate/20180110104432_rename_template_invocation_permission.rb +1 -0
  61. data/db/seeds.d/50-notification_blueprints.rb +4 -4
  62. data/db/seeds.d/70-job_templates.rb +1 -1
  63. data/db/seeds.d/90-bookmarks.rb +1 -0
  64. data/extra/cockpit/foreman-cockpit-session +7 -2
  65. data/foreman_remote_execution.gemspec +1 -1
  66. data/lib/foreman_remote_execution/engine.rb +20 -17
  67. data/lib/foreman_remote_execution/version.rb +1 -1
  68. data/locale/action_names.rb +4 -3
  69. data/locale/de/LC_MESSAGES/foreman_remote_execution.mo +0 -0
  70. data/locale/de/foreman_remote_execution.po +65 -16
  71. data/locale/en/foreman_remote_execution.po +63 -15
  72. data/locale/en_GB/LC_MESSAGES/foreman_remote_execution.mo +0 -0
  73. data/locale/en_GB/foreman_remote_execution.po +64 -15
  74. data/locale/es/LC_MESSAGES/foreman_remote_execution.mo +0 -0
  75. data/locale/es/foreman_remote_execution.po +66 -17
  76. data/locale/foreman_remote_execution.pot +193 -148
  77. data/locale/fr/LC_MESSAGES/foreman_remote_execution.mo +0 -0
  78. data/locale/fr/foreman_remote_execution.po +66 -17
  79. data/locale/ja/LC_MESSAGES/foreman_remote_execution.mo +0 -0
  80. data/locale/ja/foreman_remote_execution.po +66 -17
  81. data/locale/ko/LC_MESSAGES/foreman_remote_execution.mo +0 -0
  82. data/locale/ko/foreman_remote_execution.po +65 -15
  83. data/locale/pt_BR/LC_MESSAGES/foreman_remote_execution.mo +0 -0
  84. data/locale/pt_BR/foreman_remote_execution.po +66 -17
  85. data/locale/ru/LC_MESSAGES/foreman_remote_execution.mo +0 -0
  86. data/locale/ru/foreman_remote_execution.po +65 -18
  87. data/locale/zh_CN/LC_MESSAGES/foreman_remote_execution.mo +0 -0
  88. data/locale/zh_CN/foreman_remote_execution.po +66 -17
  89. data/locale/zh_TW/LC_MESSAGES/foreman_remote_execution.mo +0 -0
  90. data/locale/zh_TW/foreman_remote_execution.po +65 -16
  91. data/package.json +16 -34
  92. data/test/benchmark/run_hosts_job_benchmark.rb +1 -1
  93. data/test/factories/foreman_remote_execution_factories.rb +1 -1
  94. data/test/functional/api/v2/job_invocations_controller_test.rb +9 -9
  95. data/test/functional/api/v2/job_templates_controller_test.rb +1 -1
  96. data/test/functional/api/v2/remote_execution_features_controller_test.rb +2 -2
  97. data/test/functional/api/v2/template_invocations_controller_test.rb +4 -4
  98. data/test/functional/job_invocations_controller_test.rb +23 -11
  99. data/test/functional/job_templates_controller_test.rb +1 -1
  100. data/test/models/orchestration/ssh_test.rb +24 -0
  101. data/test/unit/actions/run_hosts_job_test.rb +8 -8
  102. data/test/unit/concerns/foreman_tasks_cleaner_extensions_test.rb +3 -3
  103. data/test/unit/concerns/host_extensions_test.rb +19 -19
  104. data/test/unit/concerns/nic_extensions_test.rb +1 -1
  105. data/test/unit/execution_task_status_mapper_test.rb +10 -10
  106. data/test/unit/input_template_renderer_test.rb +77 -77
  107. data/test/unit/job_invocation_composer_test.rb +100 -96
  108. data/test/unit/job_invocation_test.rb +29 -29
  109. data/test/unit/job_template_effective_user_test.rb +3 -3
  110. data/test/unit/job_template_test.rb +31 -31
  111. data/test/unit/remote_execution_feature_test.rb +19 -19
  112. data/test/unit/remote_execution_provider_test.rb +33 -30
  113. data/test/unit/renderer_scope_input.rb +6 -6
  114. data/test/unit/targeting_test.rb +6 -6
  115. data/test/unit/template_invocation_input_value_test.rb +3 -3
  116. data/webpack/index.js +1 -17
  117. data/webpack/react_app/components/jobInvocations/AggregateStatus/index.js +10 -0
  118. data/webpack/react_app/components/jobInvocations/AggregateStatus/index.test.js +6 -3
  119. data/webpack/react_app/components/jobInvocations/index.js +19 -7
  120. data/webpack/react_app/redux/actions/jobInvocations/index.js +12 -8
  121. data/webpack/react_app/redux/consts.js +1 -2
  122. data/webpack/react_app/redux/reducers/jobInvocations/index.fixtures.js +8 -40
  123. data/webpack/react_app/redux/reducers/jobInvocations/index.test.js +17 -11
  124. data/webpack/test_setup.js +2 -1
  125. metadata +10 -5
@@ -13,15 +13,15 @@ class RendererScopeInputTest < ActiveSupport::TestCase
13
13
  it 'caches the value under given key' do
14
14
  i = 1
15
15
  result = input.cached('some_key') { i }
16
- result.must_equal 1
16
+ _(result).must_equal 1
17
17
 
18
18
  i += 1
19
19
  result = input.cached('some_key') { i }
20
- result.must_equal 1
20
+ _(result).must_equal 1
21
21
 
22
22
  i += 1
23
23
  result = input.cached('different_key') { i }
24
- result.must_equal 3
24
+ _(result).must_equal 3
25
25
  end
26
26
  end
27
27
 
@@ -35,15 +35,15 @@ class RendererScopeInputTest < ActiveSupport::TestCase
35
35
  it 'does not cache the value' do
36
36
  i = 1
37
37
  result = input.cached('some_key') { i }
38
- result.must_equal 1
38
+ _(result).must_equal 1
39
39
 
40
40
  i += 1
41
41
  result = input.cached('some_key') { i }
42
- result.must_equal 2
42
+ _(result).must_equal 2
43
43
 
44
44
  i += 1
45
45
  result = input.cached('different_key') { i }
46
- result.must_equal 3
46
+ _(result).must_equal 3
47
47
  end
48
48
  end
49
49
  end
@@ -51,7 +51,7 @@ class TargetingTest < ActiveSupport::TestCase
51
51
  targeting.resolve_hosts!
52
52
  end
53
53
 
54
- it { targeting.hosts.must_include(host) }
54
+ it { _(targeting.hosts).must_include(host) }
55
55
  end
56
56
 
57
57
  context 'can delete a user' do
@@ -74,7 +74,7 @@ class TargetingTest < ActiveSupport::TestCase
74
74
  host.destroy
75
75
  end
76
76
 
77
- it { targeting.reload.hosts.must_be_empty }
77
+ it { _(targeting.reload.hosts).must_be_empty }
78
78
  end
79
79
 
80
80
  describe '#build_query_from_hosts(ids)' do
@@ -89,9 +89,9 @@ class TargetingTest < ActiveSupport::TestCase
89
89
  let(:query) { Targeting.build_query_from_hosts([ host.id, second_host.id ]) }
90
90
 
91
91
  it 'builds query using host names joining inside ^' do
92
- query.must_include host.name
93
- query.must_include second_host.name
94
- query.must_include 'name ^'
92
+ _(query).must_include host.name
93
+ _(query).must_include second_host.name
94
+ _(query).must_include 'name ^'
95
95
 
96
96
  Host.search_for(query).must_include host
97
97
  Host.search_for(query).must_include second_host
@@ -102,7 +102,7 @@ class TargetingTest < ActiveSupport::TestCase
102
102
  let(:query) { Targeting.build_query_from_hosts([ host.id ]) }
103
103
 
104
104
  it 'builds query using host name' do
105
- query.must_equal "name ^ (#{host.name})"
105
+ _(query).must_equal "name ^ (#{host.name})"
106
106
  Host.search_for(query).must_include host
107
107
  Host.search_for(query).wont_include second_host
108
108
  end
@@ -31,8 +31,8 @@ class TemplateInvocationInputTest < ActiveSupport::TestCase
31
31
  template.template_inputs << FactoryBot.build(:template_input, :name => 'service_name',
32
32
  :input_type => 'user', :required => true)
33
33
  assert_valid FactoryBot.create(:template_invocation_input_value,
34
- :template_invocation => template_invocation,
35
- :template_input => template.template_inputs.first,
36
- :value => 'foreman' * 1_000_000)
34
+ :template_invocation => template_invocation,
35
+ :template_input => template.template_inputs.first,
36
+ :value => 'foreman' * 1_000_000)
37
37
  end
38
38
  end
@@ -1,6 +1,5 @@
1
- import URI from 'urijs';
2
1
  // eslint-disable-next-line import/no-extraneous-dependencies
3
- import { mount, registerReducer } from 'foremanReact/common/MountingService';
2
+ import { registerReducer } from 'foremanReact/common/MountingService';
4
3
  // eslint-disable-next-line import/no-extraneous-dependencies
5
4
  import componentRegistry from 'foremanReact/components/componentRegistry';
6
5
  import JobInvocationContainer from './react_app/components/jobInvocations';
@@ -12,18 +11,3 @@ componentRegistry.register({
12
11
  });
13
12
 
14
13
  registerReducer('foremanRemoteExecutionReducers', rootReducer);
15
-
16
- if (window.location.href.match(/job_invocations/)) {
17
- const jobInvocationId = parseInt(
18
- new URI(window.location.href).filename(),
19
- 10,
20
- );
21
-
22
- const mountJobInvocationContainer = () => {
23
- mount('JobInvocationContainer', '#status_chart', {
24
- url: `/job_invocations/chart?id=${jobInvocationId}`,
25
- });
26
- };
27
-
28
- document.addEventListener('page:change', mountJobInvocationContainer);
29
- }
@@ -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 'enzyme';
3
- import AggregateStatus from './index.js';
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, failed: 20, cancelled: 31, pending: 3,
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/index.js';
7
+ import AggregateStatus from './AggregateStatus';
8
8
  import * as JobInvocationActions from '../../redux/actions/jobInvocations';
9
9
 
10
- const colIndexOfMaxValue = columns => columns.reduce((iMax, x, i, arr) => (x[1] > arr[iMax][1] ? i : iMax), 0);
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 { startJobInvocationsPolling, data: { url } } = this.props;
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 data={Immutable.asMutable(jobInvocations)}
26
- title={{type: 'percent', secondary: (jobInvocations[iMax] || [])[0]}}/>
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 = (state) => {
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(mapStateToProps, JobInvocationActions)(JobInvocationContainer);
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 = process.env.JOB_INVOCATIONS_POLLING ||
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
- API.get(url)
56
- .then(onGetJobInvocationsSuccess)
57
- .catch(onGetJobInvocationsFailed)
58
- .then(triggerPolling);
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
- 'Success',
20
- 100,
21
- '#B7312D',
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
- 'Success',
53
- 100,
54
- '#B7312D',
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(reducer(initialState, {
22
- type: JOB_INVOCATIONS_POLLING_STARTED,
23
- })).toEqual(pollingStarted);
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(reducer(pollingStarted, {
27
- type: JOB_INVOCATIONS_JOB_FINISHED,
28
- payload: { jobInvocations: { job_invocations: [], statuses: {} } },
29
- })).toEqual(initialState);
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(reducer(pollingStarted, {
33
- type: JOB_INVOCATIONS_GET_JOB_INVOCATIONS,
34
- payload: jobInvocationsPayload,
35
- })).toEqual(jobInvocationsReceived);
36
+ expect(
37
+ reducer(pollingStarted, {
38
+ type: JOB_INVOCATIONS_GET_JOB_INVOCATIONS,
39
+ payload: jobInvocationsPayload,
40
+ })
41
+ ).toEqual(jobInvocationsReceived);
36
42
  });
37
43
  });
@@ -1,7 +1,8 @@
1
1
  import 'core-js/shim';
2
2
  import 'regenerator-runtime/runtime';
3
3
 
4
- import { configure } from 'enzyme';
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.0.2
4
+ version: 3.3.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: 2020-01-20 00:00:00.000000000 Z
11
+ date: 2020-06-01 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.1
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.1
43
+ version: 1.0.2
44
44
  - - "<"
45
45
  - !ruby/object:Gem::Version
46
46
  version: 2.0.0
@@ -178,6 +178,7 @@ files:
178
178
  - app/models/concerns/foreman_remote_execution/foreman_tasks_triggering_extensions.rb
179
179
  - app/models/concerns/foreman_remote_execution/host_extensions.rb
180
180
  - app/models/concerns/foreman_remote_execution/nic_extensions.rb
181
+ - app/models/concerns/foreman_remote_execution/orchestration/ssh.rb
181
182
  - app/models/concerns/foreman_remote_execution/smart_proxy_extensions.rb
182
183
  - app/models/concerns/foreman_remote_execution/subnet_extensions.rb
183
184
  - app/models/concerns/foreman_remote_execution/taxonomy_extensions.rb
@@ -204,6 +205,7 @@ files:
204
205
  - app/models/template_invocation_input_value.rb
205
206
  - app/overrides/execution_interface.rb
206
207
  - app/overrides/subnet_proxies.rb
208
+ - app/services/default_proxy_proxy_selector.rb
207
209
  - app/services/remote_execution_proxy_selector.rb
208
210
  - app/services/ui_notifications/remote_execution_jobs/base_job_finish.rb
209
211
  - app/views/api/v2/foreign_input_sets/base.json.rabl
@@ -242,6 +244,7 @@ files:
242
244
  - app/views/job_invocations/_host_status_td.html.erb
243
245
  - app/views/job_invocations/_preview_hosts_list.html.erb
244
246
  - app/views/job_invocations/_preview_hosts_modal.html.erb
247
+ - app/views/job_invocations/_rerun_taxonomies.html.erb
245
248
  - app/views/job_invocations/_tab_hosts.html.erb
246
249
  - app/views/job_invocations/_tab_overview.html.erb
247
250
  - app/views/job_invocations/_tab_preview_templates.html.erb
@@ -376,6 +379,7 @@ files:
376
379
  - test/functional/job_invocations_controller_test.rb
377
380
  - test/functional/job_templates_controller_test.rb
378
381
  - test/helpers/remote_execution_helper_test.rb
382
+ - test/models/orchestration/ssh_test.rb
379
383
  - test/test_plugin_helper.rb
380
384
  - test/unit/actions/run_host_job_test.rb
381
385
  - test/unit/actions/run_hosts_job_test.rb
@@ -423,7 +427,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
423
427
  - !ruby/object:Gem::Version
424
428
  version: '0'
425
429
  requirements: []
426
- rubygems_version: 3.0.3
430
+ rubygems_version: 3.0.4
427
431
  signing_key:
428
432
  specification_version: 4
429
433
  summary: A plugin bringing remote execution to the Foreman, completing the config
@@ -441,6 +445,7 @@ test_files:
441
445
  - test/functional/job_invocations_controller_test.rb
442
446
  - test/functional/job_templates_controller_test.rb
443
447
  - test/helpers/remote_execution_helper_test.rb
448
+ - test/models/orchestration/ssh_test.rb
444
449
  - test/test_plugin_helper.rb
445
450
  - test/unit/actions/run_host_job_test.rb
446
451
  - test/unit/actions/run_hosts_job_test.rb