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.
Files changed (71) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/job_invocations_controller.rb +1 -1
  3. data/app/controllers/ui_job_wizard_controller.rb +0 -7
  4. data/app/helpers/concerns/foreman_remote_execution/hosts_helper_extensions.rb +1 -5
  5. data/app/helpers/remote_execution_helper.rb +3 -9
  6. data/app/lib/actions/remote_execution/run_host_job.rb +1 -5
  7. data/app/lib/actions/remote_execution/run_hosts_job.rb +1 -1
  8. data/app/models/concerns/foreman_remote_execution/host_extensions.rb +0 -2
  9. data/app/models/concerns/foreman_remote_execution/orchestration/ssh.rb +70 -0
  10. data/app/models/concerns/foreman_remote_execution/smart_proxy_extensions.rb +0 -6
  11. data/app/models/host_status/execution_status.rb +3 -3
  12. data/app/models/job_invocation.rb +6 -9
  13. data/app/models/job_invocation_composer.rb +4 -4
  14. data/app/models/remote_execution_feature.rb +1 -5
  15. data/app/models/remote_execution_provider.rb +2 -3
  16. data/app/models/setting/remote_execution.rb +2 -2
  17. data/app/models/targeting.rb +1 -5
  18. data/app/views/job_invocations/index.html.erb +1 -1
  19. data/app/views/templates/ssh/module_action.erb +0 -1
  20. data/app/views/templates/ssh/power_action.erb +0 -2
  21. data/app/views/templates/ssh/puppet_run_once.erb +0 -1
  22. data/foreman_remote_execution.gemspec +0 -1
  23. data/lib/foreman_remote_execution/engine.rb +2 -0
  24. data/lib/foreman_remote_execution/version.rb +1 -1
  25. data/test/models/orchestration/ssh_test.rb +56 -0
  26. data/test/unit/job_invocation_composer_test.rb +1 -14
  27. data/test/unit/job_invocation_test.rb +1 -1
  28. data/test/unit/remote_execution_provider_test.rb +0 -12
  29. data/webpack/JobWizard/JobWizard.js +16 -59
  30. data/webpack/JobWizard/JobWizard.scss +0 -58
  31. data/webpack/JobWizard/JobWizardConstants.js +0 -18
  32. data/webpack/JobWizard/JobWizardSelectors.js +0 -9
  33. data/webpack/JobWizard/__tests__/JobWizard.test.js +13 -0
  34. data/webpack/JobWizard/__tests__/__snapshots__/JobWizard.test.js.snap +32 -0
  35. data/webpack/JobWizard/__tests__/fixtures.js +2 -112
  36. data/webpack/JobWizard/__tests__/integration.test.js +92 -16
  37. data/webpack/JobWizard/steps/AdvancedFields/AdvancedFields.js +9 -37
  38. data/webpack/JobWizard/steps/AdvancedFields/Fields.js +55 -116
  39. data/webpack/JobWizard/steps/AdvancedFields/__tests__/AdvancedFields.test.js +16 -150
  40. data/webpack/JobWizard/steps/AdvancedFields/__tests__/__snapshots__/AdvancedFields.test.js.snap +249 -0
  41. data/webpack/JobWizard/steps/CategoryAndTemplate/CategoryAndTemplate.js +2 -4
  42. data/webpack/JobWizard/steps/CategoryAndTemplate/CategoryAndTemplate.test.js +51 -123
  43. data/webpack/JobWizard/steps/CategoryAndTemplate/__snapshots__/CategoryAndTemplate.test.js.snap +113 -0
  44. data/webpack/JobWizard/steps/form/FormHelpers.js +0 -1
  45. data/webpack/JobWizard/steps/form/SelectField.js +2 -14
  46. data/webpack/JobWizard/steps/form/__tests__/GroupedSelectField.test.js +38 -0
  47. data/webpack/JobWizard/steps/form/__tests__/SelectField.test.js +23 -0
  48. data/webpack/JobWizard/steps/form/__tests__/__snapshots__/GroupedSelectField.test.js.snap +37 -0
  49. data/webpack/JobWizard/steps/form/__tests__/__snapshots__/SelectField.test.js.snap +23 -0
  50. data/webpack/__mocks__/foremanReact/components/SearchBar.js +1 -18
  51. data/webpack/react_app/components/TargetingHosts/__tests__/__snapshots__/TargetingHostsPage.test.js.snap +0 -1
  52. metadata +13 -35
  53. data/app/models/host_proxy_invocation.rb +0 -4
  54. data/db/migrate/2021051713291621250977_add_host_proxy_invocations.rb +0 -12
  55. data/webpack/JobWizard/steps/AdvancedFields/DescriptionField.js +0 -67
  56. data/webpack/JobWizard/steps/AdvancedFields/__tests__/DescriptionField.test.js +0 -23
  57. data/webpack/JobWizard/steps/HostsAndInputs/SelectedChips.js +0 -25
  58. data/webpack/JobWizard/steps/HostsAndInputs/TemplateInputs.js +0 -23
  59. data/webpack/JobWizard/steps/HostsAndInputs/__tests__/SelectedChips.test.js +0 -37
  60. data/webpack/JobWizard/steps/HostsAndInputs/__tests__/TemplateInputs.test.js +0 -50
  61. data/webpack/JobWizard/steps/HostsAndInputs/index.js +0 -66
  62. data/webpack/JobWizard/steps/Schedule/QueryType.js +0 -48
  63. data/webpack/JobWizard/steps/Schedule/RepeatOn.js +0 -61
  64. data/webpack/JobWizard/steps/Schedule/ScheduleType.js +0 -25
  65. data/webpack/JobWizard/steps/Schedule/StartEndDates.js +0 -51
  66. data/webpack/JobWizard/steps/Schedule/__tests__/StartEndDates.test.js +0 -22
  67. data/webpack/JobWizard/steps/Schedule/index.js +0 -44
  68. data/webpack/JobWizard/steps/form/Formatter.js +0 -150
  69. data/webpack/JobWizard/steps/form/NumberInput.js +0 -35
  70. data/webpack/JobWizard/steps/form/WizardTitle.js +0 -14
  71. data/webpack/JobWizard/steps/form/__tests__/Formatter.test.js.example +0 -76
@@ -1,124 +1,52 @@
1
- import React from 'react';
2
- import { Provider } from 'react-redux';
3
- import { fireEvent, screen, render, act } from '@testing-library/react';
4
- import * as api from 'foremanReact/redux/API';
5
- import { JobWizard } from '../../JobWizard';
6
- import * as selectors from '../../JobWizardSelectors';
7
- import { testSetup, mockApi } from '../../__tests__/fixtures';
8
- import { WIZARD_TITLES } from '../../JobWizardConstants';
9
-
10
- const store = testSetup(selectors, api);
11
- mockApi(api);
12
- jest.spyOn(selectors, 'selectCategoryError');
13
- jest.spyOn(selectors, 'selectAllTemplatesError');
14
- jest.spyOn(selectors, 'selectTemplateError');
15
-
16
- describe('Category And Template', () => {
17
- it('should select ', async () => {
18
- selectors.selectCategoryError.mockImplementation(() => null);
19
- selectors.selectAllTemplatesError.mockImplementation(() => null);
20
- selectors.selectTemplateError.mockImplementation(() => null);
21
- render(
22
- <Provider store={store}>
23
- <JobWizard />
24
- </Provider>
25
- );
26
-
27
- expect(screen.queryAllByLabelText('Error')).toHaveLength(0);
28
- expect(screen.queryAllByLabelText('failed')).toHaveLength(0);
29
- // Category
30
- fireEvent.click(
31
- screen.getByLabelText('Ansible Commands', { selector: 'button' })
32
- );
33
- await act(async () => {
34
- await fireEvent.click(screen.getByText('Puppet'));
35
- });
36
- fireEvent.click(screen.getAllByText(WIZARD_TITLES.categoryAndTemplate)[0]); // to remove focus
37
- expect(
38
- screen.queryAllByLabelText('Ansible Commands', { selector: 'button' })
39
- ).toHaveLength(0);
40
- expect(
41
- screen.queryAllByLabelText('Puppet', { selector: 'button' })
42
- ).toHaveLength(1);
43
-
44
- // Template
45
- fireEvent.click(
46
- screen.getByDisplayValue('template1', { selector: 'button' })
47
- );
48
- await act(async () => {
49
- await fireEvent.click(screen.getByText('template2'));
50
- });
51
- fireEvent.click(screen.getAllByText(WIZARD_TITLES.categoryAndTemplate)[0]); // to remove focus
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
  });
@@ -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
- 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
- );
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
- };
@@ -27,7 +27,6 @@ exports[`TargetingHostsPage renders 1`] = `
27
27
  "controller": "hosts",
28
28
  }
29
29
  }
30
- onChange={[Function]}
31
30
  onSearch={[Function]}
32
31
  />
33
32
  </Col>
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.5.6
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-08-31 00:00:00.000000000 Z
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__/DescriptionField.test.js
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/WizardTitle.js
436
- - webpack/JobWizard/steps/form/__tests__/Formatter.test.js.example
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,4 +0,0 @@
1
- class HostProxyInvocation < ApplicationRecord
2
- belongs_to :host, :class_name => 'Host::Managed', :inverse_of => :host_proxy_invocations
3
- belongs_to :smart_proxy
4
- end
@@ -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