foreman_remote_execution 4.5.6 → 4.6.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 (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