foreman_remote_execution 5.1.0 → 6.2.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 (96) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +7 -0
  3. data/app/controllers/foreman_remote_execution/concerns/api/v2/registration_controller_extensions.rb +5 -0
  4. data/app/controllers/ui_job_wizard_controller.rb +13 -2
  5. data/app/helpers/concerns/foreman_remote_execution/hosts_helper_extensions.rb +20 -9
  6. data/app/helpers/remote_execution_helper.rb +5 -4
  7. data/app/lib/actions/remote_execution/run_host_job.rb +1 -1
  8. data/app/mailers/rex_job_mailer.rb +1 -1
  9. data/app/models/concerns/foreman_remote_execution/host_extensions.rb +9 -1
  10. data/app/models/concerns/foreman_remote_execution/nic_extensions.rb +6 -4
  11. data/app/models/concerns/foreman_remote_execution/smart_proxy_extensions.rb +1 -1
  12. data/app/models/job_invocation_composer.rb +1 -1
  13. data/app/models/remote_execution_provider.rb +10 -1
  14. data/app/models/ssh_execution_provider.rb +17 -4
  15. data/app/models/targeting.rb +1 -1
  16. data/app/services/default_proxy_proxy_selector.rb +1 -1
  17. data/app/services/remote_execution_proxy_selector.rb +7 -2
  18. data/app/views/api/v2/host/main.rabl +1 -0
  19. data/app/views/dashboard/_latest-jobs.html.erb +1 -1
  20. data/app/views/job_invocations/_preview_hosts_list.html.erb +1 -1
  21. data/app/views/template_invocations/show.html.erb +1 -1
  22. data/app/views/templates/{ssh → script}/check_update.erb +2 -2
  23. data/app/views/templates/{ssh → script}/module_action.erb +2 -2
  24. data/app/views/templates/{ssh → script}/package_action.erb +5 -2
  25. data/app/views/templates/{ssh → script}/power_action.erb +2 -2
  26. data/app/views/templates/{ssh → script}/puppet_agent_disable.erb +2 -2
  27. data/app/views/templates/{ssh → script}/puppet_agent_enable.erb +2 -2
  28. data/app/views/templates/{ssh → script}/puppet_install_modules_from_forge.erb +2 -2
  29. data/app/views/templates/{ssh → script}/puppet_install_modules_from_git.erb +2 -2
  30. data/app/views/templates/{ssh → script}/puppet_run_once.erb +2 -2
  31. data/app/views/templates/{ssh → script}/run_command.erb +2 -2
  32. data/app/views/templates/{ssh → script}/service_action.erb +2 -2
  33. data/db/migrate/20220321101835_rename_ssh_provider_to_script.rb +29 -0
  34. data/db/seeds.d/60-ssh_proxy_feature.rb +3 -0
  35. data/jsconfig.json +8 -0
  36. data/lib/foreman_remote_execution/engine.rb +10 -4
  37. data/lib/foreman_remote_execution/version.rb +1 -1
  38. data/locale/action_names.rb +3 -4
  39. data/locale/de/LC_MESSAGES/foreman_remote_execution.mo +0 -0
  40. data/locale/de/foreman_remote_execution.po +356 -20
  41. data/locale/en/foreman_remote_execution.po +356 -20
  42. data/locale/en_GB/LC_MESSAGES/foreman_remote_execution.mo +0 -0
  43. data/locale/en_GB/foreman_remote_execution.po +356 -20
  44. data/locale/es/LC_MESSAGES/foreman_remote_execution.mo +0 -0
  45. data/locale/es/foreman_remote_execution.po +357 -21
  46. data/locale/foreman_remote_execution.pot +808 -296
  47. data/locale/fr/LC_MESSAGES/foreman_remote_execution.mo +0 -0
  48. data/locale/fr/foreman_remote_execution.po +357 -21
  49. data/locale/ja/LC_MESSAGES/foreman_remote_execution.mo +0 -0
  50. data/locale/ja/foreman_remote_execution.po +357 -21
  51. data/locale/ko/LC_MESSAGES/foreman_remote_execution.mo +0 -0
  52. data/locale/ko/foreman_remote_execution.po +356 -20
  53. data/locale/pt_BR/LC_MESSAGES/foreman_remote_execution.mo +0 -0
  54. data/locale/pt_BR/foreman_remote_execution.po +357 -21
  55. data/locale/ru/LC_MESSAGES/foreman_remote_execution.mo +0 -0
  56. data/locale/ru/foreman_remote_execution.po +356 -20
  57. data/locale/zh_CN/LC_MESSAGES/foreman_remote_execution.mo +0 -0
  58. data/locale/zh_CN/foreman_remote_execution.po +357 -21
  59. data/locale/zh_TW/LC_MESSAGES/foreman_remote_execution.mo +0 -0
  60. data/locale/zh_TW/foreman_remote_execution.po +356 -20
  61. data/package.json +6 -7
  62. data/test/unit/concerns/host_extensions_test.rb +2 -1
  63. data/test/unit/remote_execution_provider_test.rb +2 -0
  64. data/webpack/JobWizard/JobWizard.js +30 -7
  65. data/webpack/JobWizard/JobWizard.scss +5 -0
  66. data/webpack/JobWizard/JobWizardConstants.js +2 -1
  67. data/webpack/JobWizard/__tests__/fixtures.js +13 -2
  68. data/webpack/JobWizard/__tests__/integration.test.js +6 -1
  69. data/webpack/JobWizard/autofill.js +34 -9
  70. data/webpack/JobWizard/index.js +0 -7
  71. data/webpack/JobWizard/steps/CategoryAndTemplate/CategoryAndTemplate.js +24 -15
  72. data/webpack/JobWizard/steps/CategoryAndTemplate/index.js +25 -7
  73. data/webpack/JobWizard/steps/HostsAndInputs/HostSearch.js +1 -1
  74. data/webpack/JobWizard/steps/HostsAndInputs/__tests__/HostsAndInputs.test.js +28 -0
  75. data/webpack/JobWizard/steps/Schedule/RepeatOn.js +1 -1
  76. data/webpack/JobWizard/steps/form/Formatter.js +18 -3
  77. data/webpack/JobWizard/steps/form/GroupedSelectField.js +7 -1
  78. data/webpack/__mocks__/foremanReact/components/Pagination.js +2 -0
  79. data/webpack/__mocks__/foremanReact/constants.js +1 -0
  80. data/webpack/global_index.js +4 -0
  81. data/webpack/react_app/components/FeaturesDropdown/actions.js +13 -0
  82. data/webpack/react_app/components/FeaturesDropdown/constant.js +2 -0
  83. data/webpack/react_app/components/FeaturesDropdown/index.js +74 -0
  84. data/webpack/react_app/components/HostKebab/KebabItems.js +22 -0
  85. data/webpack/react_app/components/RecentJobsCard/RecentJobsCard.js +6 -1
  86. data/webpack/react_app/components/RecentJobsCard/RecentJobsTable.js +2 -2
  87. data/webpack/react_app/components/RecentJobsCard/constants.js +1 -0
  88. data/webpack/react_app/components/TargetingHosts/TargetingHostsHelpers.js +1 -1
  89. data/webpack/react_app/components/TargetingHosts/TargetingHostsPage.js +1 -6
  90. data/webpack/react_app/components/TargetingHosts/__tests__/__snapshots__/TargetingHostsPage.test.js.snap +1 -9
  91. data/webpack/react_app/components/TargetingHosts/index.js +2 -3
  92. data/webpack/react_app/extend/fillKebabItems.js +11 -0
  93. data/webpack/react_app/extend/fillRexFeaturesDropdown.js +11 -0
  94. metadata +24 -16
  95. data/app/views/templates/README.md +0 -6
  96. data/webpack/__mocks__/foremanReact/components/Pagination/PaginationWrapper.js +0 -2
@@ -0,0 +1,74 @@
1
+ import PropTypes from 'prop-types';
2
+ import React, { useState } from 'react';
3
+ import { useDispatch } from 'react-redux';
4
+ import {
5
+ DropdownItem,
6
+ Dropdown,
7
+ DropdownToggle,
8
+ DropdownToggleAction,
9
+ } from '@patternfly/react-core';
10
+ import { push } from 'connected-react-router';
11
+
12
+ import { useAPI } from 'foremanReact/common/hooks/API/APIHooks';
13
+ import { translate as __ } from 'foremanReact/common/I18n';
14
+ import { foremanUrl } from 'foremanReact/common/helpers';
15
+ import { STATUS } from 'foremanReact/constants';
16
+
17
+ import { REX_FEATURES_API, NEW_JOB_PAGE } from './constant';
18
+ import { runFeature } from './actions';
19
+
20
+ const FeaturesDropdown = ({ hostId }) => {
21
+ const [isOpen, setIsOpen] = useState(false);
22
+ const {
23
+ response: { results: features },
24
+ status,
25
+ } = useAPI('get', foremanUrl(REX_FEATURES_API));
26
+
27
+ const dispatch = useDispatch();
28
+ const dropdownItems = features
29
+ ?.filter(feature => feature.host_action_button)
30
+ ?.map(({ name, label, id, description }) => (
31
+ <DropdownItem
32
+ onClick={() => dispatch(runFeature(hostId, label, name))}
33
+ key={id}
34
+ description={description}
35
+ >
36
+ {name}
37
+ </DropdownItem>
38
+ ));
39
+ const scheduleJob = [
40
+ <DropdownToggleAction
41
+ onClick={() => dispatch(push(`${NEW_JOB_PAGE}=${hostId}`))}
42
+ key="schedule-job-action"
43
+ >
44
+ {__('Schedule a job')}
45
+ </DropdownToggleAction>,
46
+ ];
47
+
48
+ return (
49
+ <Dropdown
50
+ alignments={{ default: 'right' }}
51
+ onSelect={() => setIsOpen(false)}
52
+ toggle={
53
+ <DropdownToggle
54
+ splitButtonItems={scheduleJob}
55
+ toggleVariant="primary"
56
+ onToggle={() => setIsOpen(prev => !prev)}
57
+ isDisabled={status === STATUS.PENDING}
58
+ splitButtonVariant="action"
59
+ />
60
+ }
61
+ isOpen={isOpen}
62
+ dropdownItems={dropdownItems}
63
+ />
64
+ );
65
+ };
66
+
67
+ FeaturesDropdown.propTypes = {
68
+ hostId: PropTypes.number,
69
+ };
70
+ FeaturesDropdown.defaultProps = {
71
+ hostId: undefined,
72
+ };
73
+
74
+ export default FeaturesDropdown;
@@ -0,0 +1,22 @@
1
+ import React from 'react';
2
+ import { useSelector } from 'react-redux';
3
+ import { DropdownItem } from '@patternfly/react-core';
4
+ import { CodeIcon } from '@patternfly/react-icons';
5
+ import { selectAPIResponse } from 'foremanReact/redux/API/APISelectors';
6
+ import { translate as __ } from 'foremanReact/common/I18n';
7
+ import { HOST_DETAILS_KEY } from 'foremanReact/components/HostDetails/consts';
8
+
9
+ const HostKebabItems = () => {
10
+ const { cockpit_url: consoleUrl } = useSelector(state =>
11
+ selectAPIResponse(state, HOST_DETAILS_KEY)
12
+ );
13
+
14
+ if (!consoleUrl) return null;
15
+ return (
16
+ <DropdownItem icon={<CodeIcon />} href={consoleUrl}>
17
+ {__('Web Console')}
18
+ </DropdownItem>
19
+ );
20
+ };
21
+
22
+ export default HostKebabItems;
@@ -52,7 +52,12 @@ const RecentJobsCard = ({ hostDetails: { name, id } }) => {
52
52
  </DropdownItem>,
53
53
  ]}
54
54
  >
55
- <Tabs mountOnEnter activeKey={activeTab} onSelect={handleTabClick}>
55
+ <Tabs
56
+ mountOnEnter
57
+ unmountOnExit
58
+ activeKey={activeTab}
59
+ onSelect={handleTabClick}
60
+ >
56
61
  <Tab
57
62
  eventKey={FINISHED_TAB}
58
63
  title={<TabTitleText>{__('Finished')}</TabTitleText>}
@@ -19,7 +19,7 @@ import { translate as __ } from 'foremanReact/common/I18n';
19
19
  import { foremanUrl } from 'foremanReact/common/helpers';
20
20
 
21
21
  import JobStatusIcon from './JobStatusIcon';
22
- import { JOB_API_URL, JOBS_IN_CARD } from './constants';
22
+ import { JOB_API_URL, JOBS_IN_CARD, RECENT_JOBS_KEY } from './constants';
23
23
 
24
24
  const RecentJobsTable = ({ status, hostId }) => {
25
25
  const jobsUrl =
@@ -30,7 +30,7 @@ const RecentJobsTable = ({ status, hostId }) => {
30
30
  const {
31
31
  response: { results: jobs },
32
32
  status: responseStatus,
33
- } = useAPI('get', jobsUrl);
33
+ } = useAPI('get', jobsUrl, RECENT_JOBS_KEY);
34
34
 
35
35
  return (
36
36
  <DataList aria-label="recent-jobs-table" isCompact>
@@ -10,3 +10,4 @@ export const JOB_BASE_URL = '/job_invocations?search=host+%3D+';
10
10
  export const JOB_API_URL =
11
11
  '/api/job_invocations?order=start_at+DESC&search=targeted_host_id%3D';
12
12
  export const JOBS_IN_CARD = 3;
13
+ export const RECENT_JOBS_KEY = { key: 'RECENT_JOBS_KEY' };
@@ -4,7 +4,7 @@ export const getApiUrl = (searchQuery, pagination) => {
4
4
  const baseUrl = getURI()
5
5
  .search('')
6
6
  .addQuery('page', pagination.page)
7
- .addQuery('per_page', pagination.perPage);
7
+ .addQuery('per_page', pagination.per_page);
8
8
 
9
9
  return searchQuery ? baseUrl.addQuery('search', searchQuery) : baseUrl;
10
10
  };
@@ -3,7 +3,7 @@ import PropTypes from 'prop-types';
3
3
  import { Grid } from 'patternfly-react';
4
4
 
5
5
  import SearchBar from 'foremanReact/components/SearchBar';
6
- import Pagination from 'foremanReact/components/Pagination/PaginationWrapper';
6
+ import Pagination from 'foremanReact/components/Pagination';
7
7
  import { getControllerSearchProps } from 'foremanReact/constants';
8
8
 
9
9
  import TargetingHosts from './TargetingHosts';
@@ -15,7 +15,6 @@ const TargetingHostsPage = ({
15
15
  apiStatus,
16
16
  items,
17
17
  totalHosts,
18
- pagination,
19
18
  handlePagination,
20
19
  }) => (
21
20
  <div id="targeting_hosts">
@@ -39,11 +38,8 @@ const TargetingHostsPage = ({
39
38
  <br />
40
39
  <TargetingHosts apiStatus={apiStatus} items={items} />
41
40
  <Pagination
42
- viewType="table"
43
41
  itemCount={totalHosts}
44
- pagination={pagination}
45
42
  onChange={args => handlePagination(args)}
46
- dropdownButtonId="targeting-hosts-pagination-dropdown"
47
43
  className="targeting-hosts-pagination"
48
44
  />
49
45
  </div>
@@ -55,7 +51,6 @@ TargetingHostsPage.propTypes = {
55
51
  apiStatus: PropTypes.string,
56
52
  items: PropTypes.array.isRequired,
57
53
  totalHosts: PropTypes.number.isRequired,
58
- pagination: PropTypes.object.isRequired,
59
54
  handlePagination: PropTypes.func.isRequired,
60
55
  };
61
56
 
@@ -52,18 +52,10 @@ exports[`TargetingHostsPage renders 1`] = `
52
52
  ]
53
53
  }
54
54
  />
55
- <PaginationWrapper
55
+ <Pagination
56
56
  className="targeting-hosts-pagination"
57
- dropdownButtonId="targeting-hosts-pagination-dropdown"
58
57
  itemCount={1}
59
58
  onChange={[Function]}
60
- pagination={
61
- Object {
62
- "page": 1,
63
- "perPage": 20,
64
- }
65
- }
66
- viewType="table"
67
59
  />
68
60
  </div>
69
61
  `;
@@ -30,14 +30,14 @@ const WrappedTargetingHosts = () => {
30
30
  const [searchQuery, setSearchQuery] = useState('');
31
31
  const [pagination, setPagination] = useState({
32
32
  page: 1,
33
- perPage,
33
+ per_page: perPage,
34
34
  perPageOptions,
35
35
  });
36
36
  const [apiUrl, setApiUrl] = useState(getApiUrl(searchQuery, pagination));
37
37
  const intervalExists = useSelector(selectIntervalExists);
38
38
 
39
39
  const handleSearch = query => {
40
- const defaultPagination = { page: 1, perPage: pagination.perPage };
40
+ const defaultPagination = { page: 1, per_page: pagination.per_page };
41
41
  stopApiInterval();
42
42
 
43
43
  setApiUrl(getApiUrl(query, defaultPagination));
@@ -88,7 +88,6 @@ const WrappedTargetingHosts = () => {
88
88
  apiStatus={apiStatus}
89
89
  items={items}
90
90
  totalHosts={totalHosts}
91
- pagination={pagination}
92
91
  handlePagination={handlePagination}
93
92
  />
94
93
  );
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ import { addGlobalFill } from 'foremanReact/components/common/Fill/GlobalFill';
3
+ import KebabItems from '../components/HostKebab/KebabItems';
4
+
5
+ export default () =>
6
+ addGlobalFill(
7
+ 'host-details-kebab',
8
+ 'rex-host-details-kebab-job',
9
+ <KebabItems key="rex-host-details-kebab-job" />,
10
+ 100
11
+ );
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ import { addGlobalFill } from 'foremanReact/components/common/Fill/GlobalFill';
3
+ import FeaturesDropdown from '../components/FeaturesDropdown';
4
+
5
+ export default () =>
6
+ addGlobalFill(
7
+ '_rex-host-features',
8
+ '_rex-host-features',
9
+ <FeaturesDropdown key="_rex-host-features" />,
10
+ 1000
11
+ );
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: 5.1.0
4
+ version: 6.2.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-12-14 00:00:00.000000000 Z
11
+ date: 2022-04-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: deface
@@ -201,6 +201,7 @@ files:
201
201
  - app/views/api/v2/foreign_input_sets/index.json.rabl
202
202
  - app/views/api/v2/foreign_input_sets/main.json.rabl
203
203
  - app/views/api/v2/foreign_input_sets/show.json.rabl
204
+ - app/views/api/v2/host/main.rabl
204
205
  - app/views/api/v2/interfaces/execution_flag.json.rabl
205
206
  - app/views/api/v2/job_invocations/base.json.rabl
206
207
  - app/views/api/v2/job_invocations/create.json.rabl
@@ -263,18 +264,17 @@ files:
263
264
  - app/views/template_invocations/_refresh.js.erb
264
265
  - app/views/template_invocations/show.html.erb
265
266
  - app/views/template_invocations/show.js.erb
266
- - app/views/templates/README.md
267
- - app/views/templates/ssh/check_update.erb
268
- - app/views/templates/ssh/module_action.erb
269
- - app/views/templates/ssh/package_action.erb
270
- - app/views/templates/ssh/power_action.erb
271
- - app/views/templates/ssh/puppet_agent_disable.erb
272
- - app/views/templates/ssh/puppet_agent_enable.erb
273
- - app/views/templates/ssh/puppet_install_modules_from_forge.erb
274
- - app/views/templates/ssh/puppet_install_modules_from_git.erb
275
- - app/views/templates/ssh/puppet_run_once.erb
276
- - app/views/templates/ssh/run_command.erb
277
- - app/views/templates/ssh/service_action.erb
267
+ - app/views/templates/script/check_update.erb
268
+ - app/views/templates/script/module_action.erb
269
+ - app/views/templates/script/package_action.erb
270
+ - app/views/templates/script/power_action.erb
271
+ - app/views/templates/script/puppet_agent_disable.erb
272
+ - app/views/templates/script/puppet_agent_enable.erb
273
+ - app/views/templates/script/puppet_install_modules_from_forge.erb
274
+ - app/views/templates/script/puppet_install_modules_from_git.erb
275
+ - app/views/templates/script/puppet_run_once.erb
276
+ - app/views/templates/script/run_command.erb
277
+ - app/views/templates/script/service_action.erb
278
278
  - config/routes.rb
279
279
  - db/migrate/20150612121541_add_job_template_to_template.rb
280
280
  - db/migrate/20150708133241_add_targeting.rb
@@ -322,6 +322,7 @@ files:
322
322
  - db/migrate/20210312074713_add_provider_inputs.rb
323
323
  - db/migrate/2021051713291621250977_add_host_proxy_invocations.rb
324
324
  - db/migrate/20210816100932_rex_setting_category_to_dsl.rb
325
+ - db/migrate/20220321101835_rename_ssh_provider_to_script.rb
325
326
  - db/seeds.d/100-assign_features_with_templates.rb
326
327
  - db/seeds.d/20-permissions.rb
327
328
  - db/seeds.d/50-notification_blueprints.rb
@@ -334,6 +335,7 @@ files:
334
335
  - extra/cockpit/foreman-cockpit.service
335
336
  - extra/cockpit/settings.yml.example
336
337
  - foreman_remote_execution.gemspec
338
+ - jsconfig.json
337
339
  - lib/foreman_remote_execution.rb
338
340
  - lib/foreman_remote_execution/engine.rb
339
341
  - lib/foreman_remote_execution/version.rb
@@ -463,7 +465,7 @@ files:
463
465
  - webpack/__mocks__/foremanReact/common/helpers.js
464
466
  - webpack/__mocks__/foremanReact/components/AutoComplete/AutoCompleteActions.js
465
467
  - webpack/__mocks__/foremanReact/components/AutoComplete/AutoCompleteConstants.js
466
- - webpack/__mocks__/foremanReact/components/Pagination/PaginationWrapper.js
468
+ - webpack/__mocks__/foremanReact/components/Pagination.js
467
469
  - webpack/__mocks__/foremanReact/components/SearchBar.js
468
470
  - webpack/__mocks__/foremanReact/components/common/ActionButtons/ActionButtons.js
469
471
  - webpack/__mocks__/foremanReact/constants.js
@@ -476,6 +478,10 @@ files:
476
478
  - webpack/global_index.js
477
479
  - webpack/helpers.js
478
480
  - webpack/index.js
481
+ - webpack/react_app/components/FeaturesDropdown/actions.js
482
+ - webpack/react_app/components/FeaturesDropdown/constant.js
483
+ - webpack/react_app/components/FeaturesDropdown/index.js
484
+ - webpack/react_app/components/HostKebab/KebabItems.js
479
485
  - webpack/react_app/components/RecentJobsCard/JobStatusIcon.js
480
486
  - webpack/react_app/components/RecentJobsCard/RecentJobsCard.js
481
487
  - webpack/react_app/components/RecentJobsCard/RecentJobsTable.js
@@ -508,7 +514,9 @@ files:
508
514
  - webpack/react_app/components/jobInvocations/AggregateStatus/index.js
509
515
  - webpack/react_app/components/jobInvocations/AggregateStatus/index.test.js
510
516
  - webpack/react_app/components/jobInvocations/index.js
517
+ - webpack/react_app/extend/fillKebabItems.js
511
518
  - webpack/react_app/extend/fillRecentJobsCard.js
519
+ - webpack/react_app/extend/fillRexFeaturesDropdown.js
512
520
  - webpack/react_app/extend/fillregistrationAdvanced.js
513
521
  - webpack/react_app/extend/reducers.js
514
522
  - webpack/react_app/redux/actions/jobInvocations/index.js
@@ -537,7 +545,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
537
545
  - !ruby/object:Gem::Version
538
546
  version: '0'
539
547
  requirements: []
540
- rubygems_version: 3.1.2
548
+ rubygems_version: 3.1.4
541
549
  signing_key:
542
550
  specification_version: 4
543
551
  summary: A plugin bringing remote execution to the Foreman, completing the config
@@ -1,6 +0,0 @@
1
- # Job Templates
2
-
3
- **IMPORTANT** Do not submit pull requests here, these templates are only
4
- updated during the release process. The
5
- [community-templates](https://github.com/theforeman/community-templates) repos
6
- is the canonical source for job templates.
@@ -1,2 +0,0 @@
1
- const PaginationWrapper = () => jest.fn();
2
- export default PaginationWrapper;