foreman_remote_execution 3.3.7 → 4.2.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (67) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +1 -1
  3. data/app/controllers/api/v2/job_invocations_controller.rb +20 -2
  4. data/app/controllers/foreman_remote_execution/concerns/api/v2/registration_controller_extensions.rb +26 -0
  5. data/app/controllers/foreman_remote_execution/concerns/api/v2/subnets_controller_extensions.rb +21 -0
  6. data/app/controllers/job_invocations_controller.rb +22 -8
  7. data/app/controllers/job_templates_controller.rb +1 -1
  8. data/app/helpers/job_invocations_helper.rb +3 -2
  9. data/app/lib/actions/remote_execution/run_host_job.rb +1 -1
  10. data/app/lib/actions/remote_execution/run_hosts_job.rb +12 -3
  11. data/app/lib/foreman_remote_execution/renderer/scope/input.rb +35 -0
  12. data/app/models/concerns/api/v2/interfaces_controller_extensions.rb +13 -0
  13. data/app/models/concerns/foreman_remote_execution/host_extensions.rb +38 -14
  14. data/app/models/foreign_input_set.rb +1 -1
  15. data/app/models/job_invocation.rb +12 -4
  16. data/app/models/job_invocation_composer.rb +3 -3
  17. data/app/models/remote_execution_feature.rb +5 -2
  18. data/app/models/remote_execution_provider.rb +8 -3
  19. data/app/models/setting/remote_execution.rb +2 -2
  20. data/app/models/ssh_execution_provider.rb +1 -1
  21. data/app/services/remote_execution_proxy_selector.rb +3 -0
  22. data/app/views/api/v2/interfaces/execution_flag.json.rabl +1 -0
  23. data/app/views/api/v2/job_invocations/base.json.rabl +1 -0
  24. data/app/views/api/v2/job_invocations/main.json.rabl +1 -1
  25. data/app/views/api/v2/registration/_form.html.erb +12 -0
  26. data/app/views/api/v2/subnets/remote_execution_proxies.json.rabl +3 -0
  27. data/app/views/job_invocations/_form.html.erb +1 -1
  28. data/app/views/job_invocations/_tab_hosts.html.erb +1 -20
  29. data/app/views/job_invocations/_tab_overview.html.erb +13 -1
  30. data/app/views/job_invocations/show.html.erb +3 -0
  31. data/app/views/job_invocations/show.json.erb +2 -1
  32. data/app/views/template_invocations/_output_line_set.html.erb +1 -1
  33. data/app/views/templates/ssh/package_action.erb +1 -0
  34. data/config/routes.rb +1 -0
  35. data/db/migrate/20200623073022_rename_sudo_password_to_effective_user_password.rb +34 -0
  36. data/db/migrate/20200820122057_add_proxy_selector_override_to_remote_execution_feature.rb +5 -0
  37. data/db/seeds.d/20-permissions.rb +9 -0
  38. data/lib/foreman_remote_execution/engine.rb +19 -2
  39. data/lib/foreman_remote_execution/version.rb +1 -1
  40. data/package.json +6 -6
  41. data/test/functional/api/v2/job_invocations_controller_test.rb +83 -1
  42. data/test/functional/api/v2/registration_controller_test.rb +82 -0
  43. data/test/functional/job_invocations_controller_test.rb +71 -0
  44. data/test/support/remote_execution_helper.rb +5 -0
  45. data/test/unit/actions/run_host_job_test.rb +3 -3
  46. data/test/unit/actions/run_hosts_job_test.rb +3 -2
  47. data/test/unit/job_invocation_composer_test.rb +5 -5
  48. data/test/unit/remote_execution_provider_test.rb +6 -6
  49. data/webpack/__mocks__/foremanReact/components/Pagination/PaginationWrapper.js +2 -0
  50. data/webpack/__mocks__/foremanReact/components/SearchBar.js +2 -0
  51. data/webpack/__mocks__/foremanReact/constants.js +21 -0
  52. data/webpack/__mocks__/foremanReact/redux/API/APISelectors.js +2 -0
  53. data/webpack/__mocks__/foremanReact/redux/middlewares/IntervalMiddleware/IntervalSelectors.js +1 -0
  54. data/webpack/react_app/components/TargetingHosts/TargetingHosts.js +25 -15
  55. data/webpack/react_app/components/TargetingHosts/TargetingHostsHelpers.js +10 -0
  56. data/webpack/react_app/components/TargetingHosts/TargetingHostsPage.js +66 -0
  57. data/webpack/react_app/components/TargetingHosts/TargetingHostsPage.scss +6 -0
  58. data/webpack/react_app/components/TargetingHosts/TargetingHostsSelectors.js +10 -2
  59. data/webpack/react_app/components/TargetingHosts/__tests__/TargetingHostsPage.test.js +9 -0
  60. data/webpack/react_app/components/TargetingHosts/__tests__/TargetingHostsSelectors.test.js +26 -0
  61. data/webpack/react_app/components/TargetingHosts/__tests__/__snapshots__/TargetingHosts.test.js.snap +17 -2
  62. data/webpack/react_app/components/TargetingHosts/__tests__/__snapshots__/TargetingHostsPage.test.js.snap +68 -0
  63. data/webpack/react_app/components/TargetingHosts/__tests__/__snapshots__/TargetingHostsSelectors.test.js.snap +11 -0
  64. data/webpack/react_app/components/TargetingHosts/__tests__/fixtures.js +35 -19
  65. data/webpack/react_app/components/TargetingHosts/index.js +73 -13
  66. metadata +30 -7
  67. data/webpack/react_app/components/TargetingHosts/TargetingHostsActions.js +0 -8
@@ -0,0 +1,6 @@
1
+ .targeting-hosts-pagination {
2
+ margin-top: -7px;
3
+ }
4
+ #targeting_hosts {
5
+ min-height: 350px;
6
+ }
@@ -2,11 +2,19 @@ import {
2
2
  selectAPIStatus,
3
3
  selectAPIResponse,
4
4
  } from 'foremanReact/redux/API/APISelectors';
5
+ import { selectDoesIntervalExist } from 'foremanReact/redux/middlewares/IntervalMiddleware/IntervalSelectors';
6
+
5
7
  import { TARGETING_HOSTS } from './TargetingHostsConsts';
6
8
 
7
9
  export const selectItems = state =>
8
10
  selectAPIResponse(state, TARGETING_HOSTS).hosts || [];
9
11
 
10
12
  export const selectAutoRefresh = state =>
11
- selectAPIResponse(state, TARGETING_HOSTS).autoRefresh;
12
- export const selectStatus = state => selectAPIStatus(state, TARGETING_HOSTS);
13
+ selectAPIResponse(state, TARGETING_HOSTS).autoRefresh || '';
14
+
15
+ export const selectApiStatus = state => selectAPIStatus(state, TARGETING_HOSTS);
16
+ export const selectTotalHosts = state =>
17
+ selectAPIResponse(state, TARGETING_HOSTS).total_hosts || 0;
18
+
19
+ export const selectIntervalExists = state =>
20
+ selectDoesIntervalExist(state, TARGETING_HOSTS);
@@ -0,0 +1,9 @@
1
+ import { testComponentSnapshotsWithFixtures } from '@theforeman/test';
2
+ import TargetingHostsPage from '../TargetingHostsPage';
3
+ import { TargetingHostsPageFixtures } from './fixtures';
4
+
5
+ describe('TargetingHostsPage', () =>
6
+ testComponentSnapshotsWithFixtures(
7
+ TargetingHostsPage,
8
+ TargetingHostsPageFixtures
9
+ ));
@@ -0,0 +1,26 @@
1
+ import { testSelectorsSnapshotWithFixtures } from '@theforeman/test';
2
+
3
+ import {
4
+ selectItems,
5
+ selectAutoRefresh,
6
+ selectApiStatus,
7
+ selectTotalHosts,
8
+ selectIntervalExists,
9
+ } from '../TargetingHostsSelectors';
10
+
11
+ const state = {
12
+ hosts: [],
13
+ autoRefresh: 'true',
14
+ total_hosts: 0,
15
+ };
16
+
17
+ const fixtures = {
18
+ 'should return hosts': () => selectItems(state),
19
+ 'should return autoRefresh': () => selectAutoRefresh(state),
20
+ 'should return apiStatus': () => selectApiStatus(state),
21
+ 'should return totalHosts': () => selectTotalHosts(state),
22
+ 'should return intervalExists': () => selectIntervalExists(state),
23
+ };
24
+
25
+ describe('TargetingHostsSelectors', () =>
26
+ testSelectorsSnapshotWithFixtures(fixtures));
@@ -33,6 +33,13 @@ exports[`TargetingHosts renders 1`] = `
33
33
  name="host"
34
34
  status="success"
35
35
  />
36
+ <HostItem
37
+ actions={Array []}
38
+ key="host2"
39
+ link="/link2"
40
+ name="host2"
41
+ status="success"
42
+ />
36
43
  </tbody>
37
44
  </table>
38
45
  </div>
@@ -52,7 +59,7 @@ exports[`TargetingHosts renders with error 1`] = `
52
59
  exports[`TargetingHosts renders with loading 1`] = `
53
60
  <LoadingState
54
61
  additionalClasses=""
55
- loading={false}
62
+ loading={true}
56
63
  loadingText="Loading"
57
64
  size="lg"
58
65
  timeout={300}
@@ -74,7 +81,15 @@ exports[`TargetingHosts renders with loading 1`] = `
74
81
  </th>
75
82
  </tr>
76
83
  </thead>
77
- <tbody />
84
+ <tbody>
85
+ <tr>
86
+ <td
87
+ colSpan="3"
88
+ >
89
+ No hosts found.
90
+ </td>
91
+ </tr>
92
+ </tbody>
78
93
  </table>
79
94
  </div>
80
95
  </LoadingState>
@@ -0,0 +1,68 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`TargetingHostsPage renders 1`] = `
4
+ <div
5
+ id="targeting_hosts"
6
+ >
7
+ <Row
8
+ bsClass="row"
9
+ componentClass="div"
10
+ >
11
+ <Col
12
+ bsClass="col"
13
+ className="title_filter"
14
+ componentClass="div"
15
+ md={6}
16
+ >
17
+ <SearchBar
18
+ data={
19
+ Object {
20
+ "autocomplete": Object {
21
+ "id": "targeting_hosts_search",
22
+ "searchQuery": "",
23
+ "url": "/hosts/auto_complete_search",
24
+ "useKeyShortcuts": true,
25
+ },
26
+ "bookmarks": Object {},
27
+ "controller": "hosts",
28
+ }
29
+ }
30
+ onSearch={[Function]}
31
+ />
32
+ </Col>
33
+ </Row>
34
+ <br />
35
+ <TargetingHosts
36
+ apiStatus="RESOLVED"
37
+ items={
38
+ Array [
39
+ Object {
40
+ "actions": Array [],
41
+ "link": "/link",
42
+ "name": "host",
43
+ "status": "success",
44
+ },
45
+ Object {
46
+ "actions": Array [],
47
+ "link": "/link2",
48
+ "name": "host2",
49
+ "status": "success",
50
+ },
51
+ ]
52
+ }
53
+ />
54
+ <PaginationWrapper
55
+ className="targeting-hosts-pagination"
56
+ dropdownButtonId="targeting-hosts-pagination-dropdown"
57
+ itemCount={1}
58
+ onChange={[Function]}
59
+ pagination={
60
+ Object {
61
+ "page": 1,
62
+ "perPage": 20,
63
+ }
64
+ }
65
+ viewType="list"
66
+ />
67
+ </div>
68
+ `;
@@ -0,0 +1,11 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`TargetingHostsSelectors should return apiStatus 1`] = `"RESOLVED"`;
4
+
5
+ exports[`TargetingHostsSelectors should return autoRefresh 1`] = `"true"`;
6
+
7
+ exports[`TargetingHostsSelectors should return hosts 1`] = `Array []`;
8
+
9
+ exports[`TargetingHostsSelectors should return intervalExists 1`] = `false`;
10
+
11
+ exports[`TargetingHostsSelectors should return totalHosts 1`] = `0`;
@@ -1,3 +1,18 @@
1
+ const items = [
2
+ {
3
+ name: 'host',
4
+ link: '/link',
5
+ status: 'success',
6
+ actions: [],
7
+ },
8
+ {
9
+ name: 'host2',
10
+ link: '/link2',
11
+ status: 'success',
12
+ actions: [],
13
+ },
14
+ ];
15
+
1
16
  export const HostItemFixtures = {
2
17
  renders: {
3
18
  name: 'Host1',
@@ -15,29 +30,30 @@ export const HostStatusFixtures = {
15
30
 
16
31
  export const TargetingHostsFixtures = {
17
32
  renders: {
18
- status: '',
19
- items: [
20
- {
21
- name: 'host',
22
- link: '/link',
23
- status: 'success',
24
- actions: [],
25
- },
26
- ],
33
+ apiStatus: 'RESOLVED',
34
+ items,
27
35
  },
28
36
  'renders with error': {
29
- status: 'ERROR',
30
- items: [
31
- {
32
- name: 'host',
33
- link: '/link',
34
- status: 'success',
35
- actions: [],
36
- },
37
- ],
37
+ apiStatus: 'ERROR',
38
+ items,
38
39
  },
39
40
  'renders with loading': {
40
- status: '',
41
+ apiStatus: 'PENDING',
41
42
  items: [],
42
43
  },
43
44
  };
45
+
46
+ export const TargetingHostsPageFixtures = {
47
+ renders: {
48
+ handleSearch: () => {},
49
+ searchQuery: '',
50
+ apiStatus: 'RESOLVED',
51
+ items,
52
+ totalHosts: 1,
53
+ pagination: {
54
+ page: 1,
55
+ perPage: 20,
56
+ },
57
+ handlePagination: () => {},
58
+ },
59
+ };
@@ -1,37 +1,97 @@
1
- import React, { useEffect } from 'react';
1
+ import React, { useEffect, useState } from 'react';
2
2
  import { useSelector, useDispatch } from 'react-redux';
3
- import { stopInterval } from 'foremanReact/redux/middlewares/IntervalMiddleware';
4
- import TargetingHosts from './TargetingHosts';
3
+
4
+ import { get } from 'foremanReact/redux/API';
5
+ import { useForemanSettings } from 'foremanReact/Root/Context/ForemanContext';
6
+ import {
7
+ withInterval,
8
+ stopInterval,
9
+ } from 'foremanReact/redux/middlewares/IntervalMiddleware';
5
10
 
6
11
  import {
7
12
  selectItems,
8
- selectStatus,
13
+ selectApiStatus,
9
14
  selectAutoRefresh,
15
+ selectTotalHosts,
16
+ selectIntervalExists,
10
17
  } from './TargetingHostsSelectors';
11
- import { getData } from './TargetingHostsActions';
18
+ import { getApiUrl } from './TargetingHostsHelpers';
12
19
  import { TARGETING_HOSTS } from './TargetingHostsConsts';
20
+ import TargetingHostsPage from './TargetingHostsPage';
13
21
 
14
22
  const WrappedTargetingHosts = () => {
15
23
  const dispatch = useDispatch();
24
+ const { perPage, perPageOptions } = useForemanSettings();
25
+
16
26
  const autoRefresh = useSelector(selectAutoRefresh);
17
27
  const items = useSelector(selectItems);
18
- const status = useSelector(selectStatus);
28
+ const apiStatus = useSelector(selectApiStatus);
29
+ const totalHosts = useSelector(selectTotalHosts);
30
+ const [searchQuery, setSearchQuery] = useState('');
31
+ const [pagination, setPagination] = useState({
32
+ page: 1,
33
+ perPage,
34
+ perPageOptions,
35
+ });
36
+ const [apiUrl, setApiUrl] = useState(getApiUrl(searchQuery, pagination));
37
+ const intervalExists = useSelector(selectIntervalExists);
19
38
 
20
- useEffect(() => {
21
- dispatch(getData());
39
+ const handleSearch = query => {
40
+ const defaultPagination = { page: 1, perPage: pagination.perPage };
41
+ stopApiInterval();
22
42
 
23
- return () => {
43
+ setApiUrl(getApiUrl(query, defaultPagination));
44
+ setSearchQuery(query);
45
+ setPagination(defaultPagination);
46
+ };
47
+
48
+ const handlePagination = args => {
49
+ stopApiInterval();
50
+ setPagination(args);
51
+ setApiUrl(getApiUrl(searchQuery, args));
52
+ };
53
+
54
+ const stopApiInterval = () => {
55
+ if (intervalExists) {
24
56
  dispatch(stopInterval(TARGETING_HOSTS));
25
- };
26
- }, [dispatch]);
57
+ }
58
+ };
59
+
60
+ const getData = url =>
61
+ withInterval(
62
+ get({
63
+ key: TARGETING_HOSTS,
64
+ url,
65
+ handleError: () => {
66
+ dispatch(stopInterval(TARGETING_HOSTS));
67
+ },
68
+ }),
69
+ 1000
70
+ );
27
71
 
28
72
  useEffect(() => {
73
+ dispatch(getData(apiUrl));
74
+
29
75
  if (autoRefresh === 'false') {
30
76
  dispatch(stopInterval(TARGETING_HOSTS));
31
77
  }
32
- }, [autoRefresh, dispatch]);
33
78
 
34
- return <TargetingHosts status={status} items={items} />;
79
+ return () => {
80
+ dispatch(stopInterval(TARGETING_HOSTS));
81
+ };
82
+ }, [dispatch, apiUrl, autoRefresh]);
83
+
84
+ return (
85
+ <TargetingHostsPage
86
+ handleSearch={handleSearch}
87
+ searchQuery={searchQuery}
88
+ apiStatus={apiStatus}
89
+ items={items}
90
+ totalHosts={totalHosts}
91
+ pagination={pagination}
92
+ handlePagination={handlePagination}
93
+ />
94
+ );
35
95
  };
36
96
 
37
97
  export default WrappedTargetingHosts;
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.3.7
4
+ version: 4.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Foreman Remote Execution team
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-08-31 00:00:00.000000000 Z
11
+ date: 2021-01-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: deface
@@ -154,6 +154,8 @@ files:
154
154
  - app/controllers/concerns/foreman/controller/parameters/job_template.rb
155
155
  - app/controllers/concerns/foreman/controller/parameters/remote_execution_feature.rb
156
156
  - app/controllers/concerns/foreman/controller/parameters/targeting.rb
157
+ - app/controllers/foreman_remote_execution/concerns/api/v2/registration_controller_extensions.rb
158
+ - app/controllers/foreman_remote_execution/concerns/api/v2/subnets_controller_extensions.rb
157
159
  - app/controllers/job_invocations_controller.rb
158
160
  - app/controllers/job_templates_controller.rb
159
161
  - app/controllers/remote_execution_features_controller.rb
@@ -170,6 +172,7 @@ files:
170
172
  - app/lib/foreman_remote_execution/renderer/scope/input.rb
171
173
  - app/lib/proxy_api/remote_execution_ssh.rb
172
174
  - app/mailers/.gitkeep
175
+ - app/models/concerns/api/v2/interfaces_controller_extensions.rb
173
176
  - app/models/concerns/foreman_remote_execution/bookmark_extensions.rb
174
177
  - app/models/concerns/foreman_remote_execution/errors_flattener.rb
175
178
  - app/models/concerns/foreman_remote_execution/foreman_tasks_cleaner_extensions.rb
@@ -212,6 +215,7 @@ files:
212
215
  - app/views/api/v2/foreign_input_sets/index.json.rabl
213
216
  - app/views/api/v2/foreign_input_sets/main.json.rabl
214
217
  - app/views/api/v2/foreign_input_sets/show.json.rabl
218
+ - app/views/api/v2/interfaces/execution_flag.json.rabl
215
219
  - app/views/api/v2/job_invocations/base.json.rabl
216
220
  - app/views/api/v2/job_invocations/create.json.rabl
217
221
  - app/views/api/v2/job_invocations/index.json.rabl
@@ -223,11 +227,13 @@ files:
223
227
  - app/views/api/v2/job_templates/main.json.rabl
224
228
  - app/views/api/v2/job_templates/show.json.rabl
225
229
  - app/views/api/v2/job_templates/update.json.rabl
230
+ - app/views/api/v2/registration/_form.html.erb
226
231
  - app/views/api/v2/remote_execution_features/base.json.rabl
227
232
  - app/views/api/v2/remote_execution_features/index.json.rabl
228
233
  - app/views/api/v2/remote_execution_features/main.json.rabl
229
234
  - app/views/api/v2/remote_execution_features/show.json.rabl
230
235
  - app/views/api/v2/smart_proxies/pubkey.json.rabl
236
+ - app/views/api/v2/subnets/remote_execution_proxies.json.rabl
231
237
  - app/views/api/v2/template_invocations/base.json.rabl
232
238
  - app/views/api/v2/template_invocations/template_invocations.json.rabl
233
239
  - app/views/dashboard/.gitkeep
@@ -323,7 +329,10 @@ files:
323
329
  - db/migrate/20180411160809_add_sudo_password_to_job_invocation.rb
324
330
  - db/migrate/20180913101042_add_randomized_ordering_to_targeting.rb
325
331
  - db/migrate/20190111153330_remove_remote_execution_without_proxy_setting.rb
332
+ - db/migrate/20200623073022_rename_sudo_password_to_effective_user_password.rb
333
+ - db/migrate/20200820122057_add_proxy_selector_override_to_remote_execution_feature.rb
326
334
  - db/seeds.d/100-assign_features_with_templates.rb
335
+ - db/seeds.d/20-permissions.rb
327
336
  - db/seeds.d/50-notification_blueprints.rb
328
337
  - db/seeds.d/60-ssh_proxy_feature.rb
329
338
  - db/seeds.d/70-job_templates.rb
@@ -370,6 +379,7 @@ files:
370
379
  - test/functional/api/v2/foreign_input_sets_controller_test.rb
371
380
  - test/functional/api/v2/job_invocations_controller_test.rb
372
381
  - test/functional/api/v2/job_templates_controller_test.rb
382
+ - test/functional/api/v2/registration_controller_test.rb
373
383
  - test/functional/api/v2/remote_execution_features_controller_test.rb
374
384
  - test/functional/api/v2/template_invocations_controller_test.rb
375
385
  - test/functional/cockpit_controller_test.rb
@@ -377,6 +387,7 @@ files:
377
387
  - test/functional/job_templates_controller_test.rb
378
388
  - test/helpers/remote_execution_helper_test.rb
379
389
  - test/models/orchestration/ssh_test.rb
390
+ - test/support/remote_execution_helper.rb
380
391
  - test/test_plugin_helper.rb
381
392
  - test/unit/actions/run_host_job_test.rb
382
393
  - test/unit/actions/run_hosts_job_test.rb
@@ -395,19 +406,29 @@ files:
395
406
  - test/unit/targeting_test.rb
396
407
  - test/unit/template_invocation_input_value_test.rb
397
408
  - webpack/__mocks__/foremanReact/common/I18n.js
409
+ - webpack/__mocks__/foremanReact/components/Pagination/PaginationWrapper.js
410
+ - webpack/__mocks__/foremanReact/components/SearchBar.js
398
411
  - webpack/__mocks__/foremanReact/components/common/ActionButtons/ActionButtons.js
399
412
  - webpack/__mocks__/foremanReact/constants.js
413
+ - webpack/__mocks__/foremanReact/redux/API/APISelectors.js
414
+ - webpack/__mocks__/foremanReact/redux/middlewares/IntervalMiddleware/IntervalSelectors.js
400
415
  - webpack/index.js
401
416
  - webpack/react_app/components/TargetingHosts/TargetingHosts.js
402
- - webpack/react_app/components/TargetingHosts/TargetingHostsActions.js
403
417
  - webpack/react_app/components/TargetingHosts/TargetingHostsConsts.js
418
+ - webpack/react_app/components/TargetingHosts/TargetingHostsHelpers.js
419
+ - webpack/react_app/components/TargetingHosts/TargetingHostsPage.js
420
+ - webpack/react_app/components/TargetingHosts/TargetingHostsPage.scss
404
421
  - webpack/react_app/components/TargetingHosts/TargetingHostsSelectors.js
405
422
  - webpack/react_app/components/TargetingHosts/__tests__/HostItem.test.js
406
423
  - webpack/react_app/components/TargetingHosts/__tests__/HostStatus.test.js
407
424
  - webpack/react_app/components/TargetingHosts/__tests__/TargetingHosts.test.js
425
+ - webpack/react_app/components/TargetingHosts/__tests__/TargetingHostsPage.test.js
426
+ - webpack/react_app/components/TargetingHosts/__tests__/TargetingHostsSelectors.test.js
408
427
  - webpack/react_app/components/TargetingHosts/__tests__/__snapshots__/HostItem.test.js.snap
409
428
  - webpack/react_app/components/TargetingHosts/__tests__/__snapshots__/HostStatus.test.js.snap
410
429
  - webpack/react_app/components/TargetingHosts/__tests__/__snapshots__/TargetingHosts.test.js.snap
430
+ - webpack/react_app/components/TargetingHosts/__tests__/__snapshots__/TargetingHostsPage.test.js.snap
431
+ - webpack/react_app/components/TargetingHosts/__tests__/__snapshots__/TargetingHostsSelectors.test.js.snap
411
432
  - webpack/react_app/components/TargetingHosts/__tests__/fixtures.js
412
433
  - webpack/react_app/components/TargetingHosts/components/HostItem.js
413
434
  - webpack/react_app/components/TargetingHosts/components/HostStatus.js
@@ -426,7 +447,7 @@ homepage: https://github.com/theforeman/foreman_remote_execution
426
447
  licenses:
427
448
  - GPL-3.0
428
449
  metadata: {}
429
- post_install_message:
450
+ post_install_message:
430
451
  rdoc_options: []
431
452
  require_paths:
432
453
  - lib
@@ -441,8 +462,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
441
462
  - !ruby/object:Gem::Version
442
463
  version: '0'
443
464
  requirements: []
444
- rubygems_version: 3.0.3
445
- signing_key:
465
+ rubygems_version: 3.1.2
466
+ signing_key:
446
467
  specification_version: 4
447
468
  summary: A plugin bringing remote execution to the Foreman, completing the config
448
469
  management functionality with remote management functionality.
@@ -453,6 +474,7 @@ test_files:
453
474
  - test/functional/api/v2/foreign_input_sets_controller_test.rb
454
475
  - test/functional/api/v2/job_invocations_controller_test.rb
455
476
  - test/functional/api/v2/job_templates_controller_test.rb
477
+ - test/functional/api/v2/registration_controller_test.rb
456
478
  - test/functional/api/v2/remote_execution_features_controller_test.rb
457
479
  - test/functional/api/v2/template_invocations_controller_test.rb
458
480
  - test/functional/cockpit_controller_test.rb
@@ -460,6 +482,7 @@ test_files:
460
482
  - test/functional/job_templates_controller_test.rb
461
483
  - test/helpers/remote_execution_helper_test.rb
462
484
  - test/models/orchestration/ssh_test.rb
485
+ - test/support/remote_execution_helper.rb
463
486
  - test/test_plugin_helper.rb
464
487
  - test/unit/actions/run_host_job_test.rb
465
488
  - test/unit/actions/run_hosts_job_test.rb