foreman_ansible 7.0.3 → 7.1.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 (38) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/api/v2/ansible_playbooks_controller.rb +66 -0
  3. data/app/jobs/sync_playbooks.rb +25 -0
  4. data/app/lib/proxy_api/ansible.rb +13 -0
  5. data/app/services/foreman_ansible/import_playbooks_error_notification.rb +38 -0
  6. data/app/services/foreman_ansible/import_playbooks_success_notification.rb +33 -0
  7. data/app/services/foreman_ansible/playbooks_importer.rb +73 -0
  8. data/app/services/foreman_ansible/proxy_api.rb +3 -4
  9. data/app/views/ansible_roles/index.html.erb +2 -0
  10. data/app/views/api/v2/ansible_playbooks/sync.json.rabl +5 -0
  11. data/app/views/foreman_ansible/job_templates/ansible_windows_updates.erb +160 -0
  12. data/config/routes.rb +7 -0
  13. data/db/seeds.d/90_notification_blueprints.rb +14 -0
  14. data/lib/foreman_ansible/register.rb +3 -1
  15. data/lib/foreman_ansible/version.rb +1 -1
  16. data/test/fixtures/playbooks_example_output.json +1 -0
  17. data/test/fixtures/sample_playbooks.json +10 -0
  18. data/test/functional/api/v2/ansible_playbooks_controller_test.rb +65 -0
  19. data/test/functional/hosts_controller_test.rb +2 -2
  20. data/test/unit/import_playbooks_test.rb +51 -0
  21. data/test/unit/lib/proxy_api/ansible_test.rb +6 -0
  22. data/webpack/components/AnsibleHostDetail/components/AnsibleVariableOverrides/AnsibleVariableOverridesTable.js +58 -75
  23. data/webpack/components/AnsibleHostDetail/components/JobsTab/PreviousJobsTable.js +44 -58
  24. data/webpack/components/AnsibleHostDetail/components/RolesTab/AllRolesModal/AllRolesTable.js +32 -55
  25. data/webpack/components/AnsibleHostDetail/components/RolesTab/AllRolesModal/index.js +1 -1
  26. data/webpack/components/AnsibleHostDetail/components/RolesTab/RolesTable.js +29 -42
  27. data/webpack/components/AnsibleRolesAndVariables/AnsibleRolesAndVariables.js +27 -38
  28. data/webpack/components/AnsibleRolesAndVariables/AnsibleRolesAndVariablesActions.js +2 -1
  29. data/webpack/components/AnsibleRolesAndVariables/AnsibleRolesAndVariablesConstants.js +1 -0
  30. data/webpack/components/AnsibleRolesAndVariables/AnsibleRolesAndVariablesSelectors.js +6 -0
  31. data/webpack/components/AnsibleRolesAndVariables/index.js +7 -1
  32. data/webpack/components/AnsibleRolesSwitcher/components/AvailableRolesList.js +2 -2
  33. data/webpack/components/AnsibleRolesSwitcher/components/__snapshots__/AvailableRolesList.test.js.snap +9 -6
  34. data/webpack/helpers/pageParamsHelper.js +3 -3
  35. metadata +42 -29
  36. data/webpack/components/AnsibleHostDetail/components/JobsTab/PreviousJobsTable.js.orig +0 -151
  37. data/webpack/components/withPagination.js +0 -0
  38. data/webpack/helpers/paginationHelper.js +0 -9
@@ -12,9 +12,8 @@ import {
12
12
  ToolbarContent,
13
13
  ToolbarItem,
14
14
  Checkbox,
15
- Pagination,
16
15
  } from '@patternfly/react-core';
17
-
16
+ import Pagination from 'foremanReact/components/Pagination';
18
17
  import PropTypes from 'prop-types';
19
18
  import { DEFAULT_PER_PAGE } from './AnsibleRolesAndVariablesConstants';
20
19
  import './AnsibleRolesAndVariables.scss';
@@ -25,6 +24,7 @@ const ImportRolesAndVariablesTable = ({
25
24
  proxy,
26
25
  onSubmit,
27
26
  onCancel,
27
+ isImporting,
28
28
  }) => {
29
29
  const columns = columnsData.map(col => ({
30
30
  ...col,
@@ -34,10 +34,13 @@ const ImportRolesAndVariablesTable = ({
34
34
 
35
35
  const [isChecked, setIsChecked] = useState(false);
36
36
  const [selectedRowsCount, setSelectRowsCount] = useState(0);
37
-
38
- const [page, setPage] = useState();
39
- const [perPage, setPerPage] = useState(DEFAULT_PER_PAGE);
40
- const [paginatedRows, setPaginatedRows] = useState(rows.slice(0, perPage));
37
+ const [pagination, setPagination] = useState({
38
+ page: 1,
39
+ per_page: DEFAULT_PER_PAGE,
40
+ });
41
+ const [paginatedRows, setPaginatedRows] = useState(
42
+ rows.slice(0, pagination.per_page)
43
+ );
41
44
 
42
45
  const onSelect = (event, isSelected, rowId, row) => {
43
46
  const selectableRowLength = rows.filter(
@@ -68,43 +71,22 @@ const ImportRolesAndVariablesTable = ({
68
71
  onSelect(null, checked, -1);
69
72
  };
70
73
 
71
- const handleSetPage = (event, newPage) => {
72
- const startIdx = (newPage - 1) * perPage;
74
+ const handleSetPage = args => {
75
+ const startIdx = (args.page - 1) * args.per_page;
73
76
  const endIdx =
74
- rows.length < newPage * perPage ? rows.length : newPage * perPage;
75
- setPage(newPage);
77
+ rows.length < args.page * args.per_page
78
+ ? rows.length
79
+ : args.page * args.per_page;
80
+ setPagination(args);
76
81
  setPaginatedRows(rows.slice(startIdx, endIdx));
77
82
  };
78
83
 
79
- const handlePerPageSelect = (
80
- event,
81
- newPerPage,
82
- newPage,
83
- startIdx,
84
- endIdx
85
- ) => {
86
- setPerPage(newPerPage);
87
- setPage(newPage);
88
- setPaginatedRows(rows.slice(startIdx, endIdx));
89
- };
90
-
91
- const renderPagination = (variant = 'top') => (
84
+ const renderPagination = () => (
92
85
  <Pagination
93
86
  isCompact
94
87
  itemCount={rows.length}
95
- page={page}
96
- perPage={perPage}
97
- defaultToFullPage
98
- onSetPage={handleSetPage}
99
- onPerPageSelect={handlePerPageSelect}
100
- perPageOptions={[
101
- { title: '3', value: 3 },
102
- { title: '5', value: 5 },
103
- { title: '10', value: 10 },
104
- ]}
105
- titles={{
106
- paginationTitle: `${variant} pagination`,
107
- }}
88
+ perPage={pagination.per_page}
89
+ onChange={args => handleSetPage(args)}
108
90
  />
109
91
  );
110
92
 
@@ -131,10 +113,15 @@ const ImportRolesAndVariablesTable = ({
131
113
  <div className="submit-cancel-btns">
132
114
  <br />
133
115
  <br />
134
- <Button variant="primary" onClick={() => onSubmit(rows, proxy)}>
116
+ <Button
117
+ variant="primary"
118
+ onClick={() => onSubmit(rows, proxy)}
119
+ isLoading={isImporting}
120
+ isDisabled={isImporting || selectedRowsCount === 0}
121
+ >
135
122
  Submit
136
123
  </Button>
137
- <Button variant="secondary" onClick={onCancel}>
124
+ <Button variant="secondary" onClick={onCancel} isDisabled={isImporting}>
138
125
  Cancel
139
126
  </Button>
140
127
  </div>
@@ -165,6 +152,7 @@ ImportRolesAndVariablesTable.defaultProps = {
165
152
  proxy: undefined,
166
153
  onSubmit: undefined,
167
154
  onCancel: undefined,
155
+ isImporting: false,
168
156
  };
169
157
 
170
158
  ImportRolesAndVariablesTable.propTypes = {
@@ -173,6 +161,7 @@ ImportRolesAndVariablesTable.propTypes = {
173
161
  proxy: PropTypes.number,
174
162
  onSubmit: PropTypes.func,
175
163
  onCancel: PropTypes.func,
164
+ isImporting: PropTypes.bool,
176
165
  };
177
166
 
178
167
  export default ImportRolesAndVariablesTable;
@@ -4,6 +4,7 @@ import { post } from 'foremanReact/redux/API';
4
4
  import { push } from 'connected-react-router';
5
5
  import { prepareResult } from './AnsibleRolesAndVariablesHelpers';
6
6
  import {
7
+ IMPORT_ANSIBLE_V_R,
7
8
  ANSIBLE_ROLE_CONFIRM_IMPORT_PATH,
8
9
  ANSIBLE_ROLES_INDEX,
9
10
  } from './AnsibleRolesAndVariablesConstants';
@@ -14,7 +15,7 @@ export const onSubmit = (rows, proxy) => dispatch => {
14
15
  const params = prepareResult(rows);
15
16
  dispatch(
16
17
  post({
17
- key: 'import_ansible_v_r',
18
+ key: IMPORT_ANSIBLE_V_R,
18
19
  url: ANSIBLE_ROLE_CONFIRM_IMPORT_PATH,
19
20
  params: { changed: params, proxy },
20
21
  handleSuccess: () => {
@@ -1,3 +1,4 @@
1
+ export const IMPORT_ANSIBLE_V_R = 'IMPORT_ANSIBLE_V_R';
1
2
  export const ANSIBLE_ROLES_INDEX = '/ansible/ansible_roles';
2
3
  export const ANSIBLE_ROLE_CONFIRM_IMPORT_PATH =
3
4
  '/ansible/ansible_roles/confirm_import';
@@ -0,0 +1,6 @@
1
+ import { selectAPIStatus } from 'foremanReact/redux/API/APISelectors';
2
+ import { IMPORT_ANSIBLE_V_R } from './AnsibleRolesAndVariablesConstants';
3
+
4
+ // API statuses
5
+ export const selectApiImportStatus = state =>
6
+ selectAPIStatus(state, IMPORT_ANSIBLE_V_R);
@@ -1,10 +1,13 @@
1
1
  import React from 'react';
2
- import { useDispatch } from 'react-redux';
2
+ import { useDispatch, useSelector } from 'react-redux';
3
3
  import { push } from 'connected-react-router';
4
4
 
5
+ import { STATUS } from 'foremanReact/constants';
6
+
5
7
  import ImportRolesAndVariablesTable from './AnsibleRolesAndVariables';
6
8
  import { onSubmit } from './AnsibleRolesAndVariablesActions';
7
9
  import { ANSIBLE_ROLES_INDEX } from './AnsibleRolesAndVariablesConstants';
10
+ import { selectApiImportStatus } from './AnsibleRolesAndVariablesSelectors';
8
11
 
9
12
  const WrappedImportRolesAndVariables = props => {
10
13
  const cols = [
@@ -19,12 +22,15 @@ const WrappedImportRolesAndVariables = props => {
19
22
  const onCancel = () => {
20
23
  dispatch(push(ANSIBLE_ROLES_INDEX));
21
24
  };
25
+ const apiImportStatus = useSelector(selectApiImportStatus);
26
+
22
27
  return (
23
28
  <ImportRolesAndVariablesTable
24
29
  {...props}
25
30
  columnsData={cols}
26
31
  onSubmit={submit}
27
32
  onCancel={onCancel}
33
+ isImporting={apiImportStatus === STATUS.PENDING}
28
34
  />
29
35
  );
30
36
  };
@@ -2,7 +2,7 @@ import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
 
4
4
  import { ListView, LoadingState } from 'patternfly-react';
5
- import PaginationWrapper from 'foremanReact/components/Pagination/PaginationWrapper';
5
+ import Pagination from 'foremanReact/components/Pagination';
6
6
 
7
7
  import AnsibleRole from './AnsibleRole';
8
8
 
@@ -16,7 +16,7 @@ const AvailableRolesList = ({
16
16
  }) => (
17
17
  <ListView>
18
18
  <div className="sticky-pagination">
19
- <PaginationWrapper
19
+ <Pagination
20
20
  viewType="list"
21
21
  itemCount={itemCount}
22
22
  pagination={pagination}
@@ -7,21 +7,24 @@ exports[`AvailableRolesList should render 1`] = `
7
7
  <div
8
8
  className="sticky-pagination"
9
9
  >
10
- <PaginationWrapper
11
- className=""
12
- disableNext={false}
13
- disablePrev={false}
10
+ <Pagination
11
+ className={null}
14
12
  dropdownButtonId="available-ansible-roles-pagination-row-dropdown"
15
13
  itemCount={2}
14
+ noSidePadding={false}
16
15
  onChange={[Function]}
17
- onPageSet={[Function]}
18
- onPerPageSelect={[Function]}
16
+ onPerPageSelect={null}
17
+ onSetPage={null}
18
+ page={1}
19
19
  pagination={
20
20
  Object {
21
21
  "page": 1,
22
22
  "perPage": 25,
23
23
  }
24
24
  }
25
+ perPage={null}
26
+ updateParamsByUrl={true}
27
+ variant="bottom"
25
28
  viewType="list"
26
29
  />
27
30
  </div>
@@ -14,7 +14,7 @@ export const addSearch = (basePath, params) => {
14
14
 
15
15
  export const useCurrentPagination = (
16
16
  history,
17
- keys = { page: 'page', perPage: 'perPage' }
17
+ keys = { page: 'page', perPage: 'per_page' }
18
18
  ) => {
19
19
  const pageParams = parsePageParams(history);
20
20
  const uiSettings = useForemanSettings();
@@ -28,7 +28,7 @@ export const useCurrentPagination = (
28
28
 
29
29
  export const pageToVars = (
30
30
  pagination,
31
- keys = { page: 'page', perPage: 'perPage' }
31
+ keys = { page: 'page', perPage: 'per_page' }
32
32
  ) => ({
33
33
  first: pagination[keys.page] * pagination[keys.perPage],
34
34
  last: pagination[keys.perPage],
@@ -36,5 +36,5 @@ export const pageToVars = (
36
36
 
37
37
  export const useParamsToVars = (
38
38
  history,
39
- keys = { page: 'page', perPage: 'perPage' }
39
+ keys = { page: 'page', perPage: 'per_page' }
40
40
  ) => pageToVars(useCurrentPagination(history, keys), keys);
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: foreman_ansible
3
3
  version: !ruby/object:Gem::Version
4
- version: 7.0.3
4
+ version: 7.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Lobato Garcia
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-02-24 00:00:00.000000000 Z
11
+ date: 2022-03-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: acts_as_list
@@ -81,6 +81,7 @@ files:
81
81
  - app/controllers/ansible_variables_controller.rb
82
82
  - app/controllers/api/v2/ansible_inventories_controller.rb
83
83
  - app/controllers/api/v2/ansible_override_values_controller.rb
84
+ - app/controllers/api/v2/ansible_playbooks_controller.rb
84
85
  - app/controllers/api/v2/ansible_roles_controller.rb
85
86
  - app/controllers/api/v2/ansible_variables_controller.rb
86
87
  - app/controllers/concerns/foreman/controller/parameters/ansible_override_value.rb
@@ -113,6 +114,7 @@ files:
113
114
  - app/helpers/foreman_ansible/ansible_roles_data_preparations.rb
114
115
  - app/helpers/foreman_ansible/ansible_roles_helper.rb
115
116
  - app/helpers/foreman_ansible/hosts_helper_extensions.rb
117
+ - app/jobs/sync_playbooks.rb
116
118
  - app/jobs/sync_roles_and_variables.rb
117
119
  - app/lib/actions/foreman_ansible/helpers/play_roles_description.rb
118
120
  - app/lib/proxy_api/ansible.rb
@@ -131,6 +133,8 @@ files:
131
133
  - app/services/foreman_ansible/ansible_report_importer.rb
132
134
  - app/services/foreman_ansible/ansible_report_scanner.rb
133
135
  - app/services/foreman_ansible/api_roles_importer.rb
136
+ - app/services/foreman_ansible/import_playbooks_error_notification.rb
137
+ - app/services/foreman_ansible/import_playbooks_success_notification.rb
134
138
  - app/services/foreman_ansible/import_roles_and_variables_error_notification.rb
135
139
  - app/services/foreman_ansible/import_roles_and_variables_success_notification.rb
136
140
  - app/services/foreman_ansible/insights_notification_builder.rb
@@ -138,6 +142,7 @@ files:
138
142
  - app/services/foreman_ansible/inventory_creator.rb
139
143
  - app/services/foreman_ansible/override_resolver.rb
140
144
  - app/services/foreman_ansible/playbook_creator.rb
145
+ - app/services/foreman_ansible/playbooks_importer.rb
141
146
  - app/services/foreman_ansible/proxy_api.rb
142
147
  - app/services/foreman_ansible/renderer_methods.rb
143
148
  - app/services/foreman_ansible/roles_importer.rb
@@ -152,6 +157,7 @@ files:
152
157
  - app/views/ansible_variables/new.html.erb
153
158
  - app/views/api/v2/ansible_override_values/index.json.rabl
154
159
  - app/views/api/v2/ansible_override_values/show.json.rabl
160
+ - app/views/api/v2/ansible_playbooks/sync.json.rabl
155
161
  - app/views/api/v2/ansible_roles/import.json.rabl
156
162
  - app/views/api/v2/ansible_roles/index.json.rabl
157
163
  - app/views/api/v2/ansible_roles/obsolete.json.rabl
@@ -178,6 +184,7 @@ files:
178
184
  - app/views/foreman_ansible/job_templates/ansible_roles_-_ansible_default.erb
179
185
  - app/views/foreman_ansible/job_templates/ansible_roles_-_install_from_galaxy.erb
180
186
  - app/views/foreman_ansible/job_templates/ansible_roles_-_install_from_git.erb
187
+ - app/views/foreman_ansible/job_templates/ansible_windows_updates.erb
181
188
  - app/views/foreman_ansible/job_templates/capsule_upgrade_-_ansible_default.erb
182
189
  - app/views/foreman_ansible/job_templates/configure_cloud_connector_-_ansible_default.erb
183
190
  - app/views/foreman_ansible/job_templates/convert_to_rhel.erb
@@ -265,12 +272,15 @@ files:
265
272
  - test/factories/ansible_variables.rb
266
273
  - test/factories/host_ansible_enhancements.rb
267
274
  - test/fixtures/insights_playbook.yaml
275
+ - test/fixtures/playbooks_example_output.json
268
276
  - test/fixtures/report.json
269
277
  - test/fixtures/sample_facts.json
278
+ - test/fixtures/sample_playbooks.json
270
279
  - test/foreman_ansible/helpers/ansible_roles_helper_test.rb
271
280
  - test/functional/ansible_roles_controller_test.rb
272
281
  - test/functional/ansible_variables_controller_test.rb
273
282
  - test/functional/api/v2/ansible_inventories_controller_test.rb
283
+ - test/functional/api/v2/ansible_playbooks_controller_test.rb
274
284
  - test/functional/api/v2/ansible_roles_controller_test.rb
275
285
  - test/functional/api/v2/ansible_variables_controller_test.rb
276
286
  - test/functional/api/v2/hostgroups_controller_test.rb
@@ -292,6 +302,7 @@ files:
292
302
  - test/unit/host_ansible_role_test.rb
293
303
  - test/unit/hostgroup_ansible_role_test.rb
294
304
  - test/unit/ignore_roles_test.rb
305
+ - test/unit/import_playbooks_test.rb
295
306
  - test/unit/import_roles_and_variables.rb
296
307
  - test/unit/lib/proxy_api/ansible_test.rb
297
308
  - test/unit/services/ansible_report_importer_test.rb
@@ -327,7 +338,6 @@ files:
327
338
  - webpack/components/AnsibleHostDetail/components/JobsTab/NewRecurringJobModal.js
328
339
  - webpack/components/AnsibleHostDetail/components/JobsTab/NewRecurringJobModal.scss
329
340
  - webpack/components/AnsibleHostDetail/components/JobsTab/PreviousJobsTable.js
330
- - webpack/components/AnsibleHostDetail/components/JobsTab/PreviousJobsTable.js.orig
331
341
  - webpack/components/AnsibleHostDetail/components/JobsTab/RecurringJobsTable.js
332
342
  - webpack/components/AnsibleHostDetail/components/JobsTab/__test__/JobsTab.fixtures.js
333
343
  - webpack/components/AnsibleHostDetail/components/JobsTab/__test__/JobsTab.test.js
@@ -354,6 +364,7 @@ files:
354
364
  - webpack/components/AnsibleRolesAndVariables/AnsibleRolesAndVariablesActions.js
355
365
  - webpack/components/AnsibleRolesAndVariables/AnsibleRolesAndVariablesConstants.js
356
366
  - webpack/components/AnsibleRolesAndVariables/AnsibleRolesAndVariablesHelpers.js
367
+ - webpack/components/AnsibleRolesAndVariables/AnsibleRolesAndVariablesSelectors.js
357
368
  - webpack/components/AnsibleRolesAndVariables/__test__/AnsibleRolesAndVariablesHelpers.test.js
358
369
  - webpack/components/AnsibleRolesAndVariables/__test__/AnsibleRolesAndVariablesImport.test.js
359
370
  - webpack/components/AnsibleRolesAndVariables/index.js
@@ -402,7 +413,6 @@ files:
402
413
  - webpack/components/ErrorState.js
403
414
  - webpack/components/ReportJsonViewer.js
404
415
  - webpack/components/withLoading.js
405
- - webpack/components/withPagination.js
406
416
  - webpack/formHelper.js
407
417
  - webpack/globalIdHelper.js
408
418
  - webpack/global_index.js
@@ -420,7 +430,6 @@ files:
420
430
  - webpack/graphql/queries/hostVariableOverrides.gql
421
431
  - webpack/graphql/queries/recurringJobs.gql
422
432
  - webpack/helpers/pageParamsHelper.js
423
- - webpack/helpers/paginationHelper.js
424
433
  - webpack/index.js
425
434
  - webpack/permissionsHelper.js
426
435
  - webpack/reducer.js
@@ -449,50 +458,54 @@ required_rubygems_version: !ruby/object:Gem::Requirement
449
458
  - !ruby/object:Gem::Version
450
459
  version: '0'
451
460
  requirements: []
452
- rubygems_version: 3.3.7
461
+ rubygems_version: 3.3.4
453
462
  signing_key:
454
463
  specification_version: 4
455
464
  summary: Ansible integration with Foreman (theforeman.org)
456
465
  test_files:
457
- - test/functional/api/v2/hosts_controller_test.rb
466
+ - test/functional/ansible_variables_controller_test.rb
467
+ - test/functional/ansible_roles_controller_test.rb
468
+ - test/functional/api/v2/ansible_variables_controller_test.rb
458
469
  - test/functional/api/v2/ansible_roles_controller_test.rb
459
470
  - test/functional/api/v2/hostgroups_controller_test.rb
460
- - test/functional/api/v2/ansible_variables_controller_test.rb
471
+ - test/functional/api/v2/ansible_playbooks_controller_test.rb
461
472
  - test/functional/api/v2/ansible_inventories_controller_test.rb
462
- - test/functional/hosts_controller_test.rb
463
- - test/functional/ansible_roles_controller_test.rb
464
- - test/functional/ansible_variables_controller_test.rb
473
+ - test/functional/api/v2/hosts_controller_test.rb
465
474
  - test/functional/ui_ansible_roles_controller_test.rb
466
- - test/unit/services/inventory_creator_test.rb
467
- - test/unit/services/ansible_report_importer_test.rb
475
+ - test/functional/hosts_controller_test.rb
476
+ - test/graphql/mutations/hosts/assign_ansible_roles_mutation_test.rb
477
+ - test/graphql/queries/ansible_roles_query_test.rb
478
+ - test/foreman_ansible/helpers/ansible_roles_helper_test.rb
479
+ - test/unit/actions/run_ansible_job_test.rb
480
+ - test/unit/actions/run_proxy_ansible_command_test.rb
481
+ - test/unit/services/api_roles_importer_test.rb
468
482
  - test/unit/services/ui_roles_importer_test.rb
483
+ - test/unit/services/ansible_report_importer_test.rb
484
+ - test/unit/services/insights_plan_runner_test.rb
485
+ - test/unit/services/override_resolver_test.rb
469
486
  - test/unit/services/roles_importer_test.rb
487
+ - test/unit/services/inventory_creator_test.rb
470
488
  - test/unit/services/ansible_variables_importer_test.rb
471
- - test/unit/services/override_resolver_test.rb
472
- - test/unit/services/api_roles_importer_test.rb
473
- - test/unit/services/insights_plan_runner_test.rb
489
+ - test/unit/lib/proxy_api/ansible_test.rb
474
490
  - test/unit/ansible_role_test.rb
475
- - test/unit/host_ansible_role_test.rb
476
491
  - test/unit/hostgroup_ansible_role_test.rb
492
+ - test/unit/ansible_variable_test.rb
493
+ - test/unit/host_ansible_role_test.rb
477
494
  - test/unit/helpers/ansible_reports_helper_test.rb
478
495
  - test/unit/ansible_provider_test.rb
479
- - test/unit/concerns/host_managed_extensions_test.rb
480
- - test/unit/concerns/config_reports_extensions_test.rb
481
- - test/unit/concerns/hostgroup_extensions_test.rb
482
496
  - test/unit/ignore_roles_test.rb
483
- - test/unit/ansible_variable_test.rb
497
+ - test/unit/import_playbooks_test.rb
484
498
  - test/unit/import_roles_and_variables.rb
485
- - test/unit/lib/proxy_api/ansible_test.rb
486
- - test/unit/actions/run_ansible_job_test.rb
487
- - test/unit/actions/run_proxy_ansible_command_test.rb
488
- - test/foreman_ansible/helpers/ansible_roles_helper_test.rb
489
- - test/test_plugin_helper.rb
499
+ - test/unit/concerns/config_reports_extensions_test.rb
500
+ - test/unit/concerns/host_managed_extensions_test.rb
501
+ - test/unit/concerns/hostgroup_extensions_test.rb
490
502
  - test/factories/ansible_proxy.rb
491
- - test/factories/ansible_variables.rb
492
503
  - test/factories/host_ansible_enhancements.rb
504
+ - test/factories/ansible_variables.rb
493
505
  - test/factories/ansible_roles.rb
494
506
  - test/fixtures/report.json
495
507
  - test/fixtures/sample_facts.json
496
508
  - test/fixtures/insights_playbook.yaml
497
- - test/graphql/mutations/hosts/assign_ansible_roles_mutation_test.rb
498
- - test/graphql/queries/ansible_roles_query_test.rb
509
+ - test/fixtures/playbooks_example_output.json
510
+ - test/fixtures/sample_playbooks.json
511
+ - test/test_plugin_helper.rb
@@ -1,151 +0,0 @@
1
- import React from 'react';
2
- import PropTypes from 'prop-types';
3
- import { translate as __ } from 'foremanReact/common/I18n';
4
- import { usePaginationOptions } from 'foremanReact/components/Pagination/PaginationHooks';
5
-
6
- import RelativeDateTime from 'foremanReact/components/common/dates/RelativeDateTime';
7
-
8
- import {
9
- TableComposable,
10
- Thead,
11
- Tbody,
12
- Tr,
13
- Th,
14
- Td,
15
- } from '@patternfly/react-table';
16
- import { Flex, FlexItem, Pagination } from '@patternfly/react-core';
17
-
18
- import { decodeId } from '../../../../globalIdHelper';
19
- import withLoading from '../../../withLoading';
20
- <<<<<<< HEAD
21
- import { readableCron } from './JobsTabHelper';
22
- import {
23
- preparePerPageOptions,
24
- refreshPage,
25
- } from '../../../../helpers/paginationHelper';
26
- =======
27
- import { readableCron, readablePurpose } from './JobsTabHelper';
28
- >>>>>>> 5b01704 (Fixes #34458 - Show Hostgroup jobs on the Host Detail page)
29
-
30
- const PreviousJobsTable = ({ history, totalCount, jobs, pagination }) => {
31
- const columns = [
32
- __('Description'),
33
- __('Result'),
34
- __('State'),
35
- __('Executed at'),
36
- __('Schedule'),
37
- ];
38
-
39
- const handlePerPageSelected = (event, perPage) => {
40
- refreshPage(history, { page: 1, perPage });
41
- };
42
-
43
- const handlePageSelected = (event, page) => {
44
- refreshPage(history, { ...pagination, page });
45
- };
46
-
47
- const perPageOptions = preparePerPageOptions(usePaginationOptions());
48
-
49
- return (
50
- <React.Fragment>
51
- <h3>{__('Previously executed jobs')}</h3>
52
- <<<<<<< HEAD
53
- <Flex className="pf-u-pt-md">
54
- =======
55
- <Flex direction={{ default: 'column' }} className="pf-u-pt-md">
56
- <FlexItem align={{ default: 'alignRight' }}>
57
- <Pagination updateParamsByUrl itemCount={totalCount} variant="top" />
58
- </FlexItem>
59
- <FlexItem>
60
- <TableComposable variant="compact">
61
- <Thead>
62
- <Tr>
63
- {columns.map(col => (
64
- <Th key={col}>{col}</Th>
65
- ))}
66
- </Tr>
67
- </Thead>
68
- <Tbody>
69
- {jobs.map(job => (
70
- <Tr key={job.id}>
71
- <Td>
72
- <a
73
- onClick={() =>
74
- window.tfm.nav.pushUrl(
75
- `/job_invocations/${decodeId(job.id)}`
76
- )
77
- }
78
- >
79
- {job.description}
80
- </a>
81
- &nbsp;
82
- {readablePurpose(job.recurringLogic.purpose)}
83
- </Td>
84
- <Td>{job.task.result}</Td>
85
- <Td>{job.task.state}</Td>
86
- <Td>
87
- <RelativeDateTime date={job.startAt} />
88
- </Td>
89
- <Td>{readableCron(job.recurringLogic.cronLine)}</Td>
90
- </Tr>
91
- ))}
92
- </Tbody>
93
- </TableComposable>
94
- </FlexItem>
95
- >>>>>>> 5b01704 (Fixes #34458 - Show Hostgroup jobs on the Host Detail page)
96
- <FlexItem align={{ default: 'alignRight' }}>
97
- <Pagination
98
- itemCount={totalCount}
99
- page={pagination.page}
100
- perPage={pagination.perPage}
101
- onSetPage={handlePageSelected}
102
- onPerPageSelect={handlePerPageSelected}
103
- perPageOptions={perPageOptions}
104
- variant="top"
105
- />
106
- </FlexItem>
107
- </Flex>
108
- <TableComposable variant="compact">
109
- <Thead>
110
- <Tr>
111
- {columns.map(col => (
112
- <Th key={col}>{col}</Th>
113
- ))}
114
- </Tr>
115
- </Thead>
116
- <Tbody>
117
- {jobs.map(job => (
118
- <Tr key={job.id}>
119
- <Td>
120
- <a
121
- onClick={() =>
122
- window.tfm.nav.pushUrl(
123
- `/job_invocations/${decodeId(job.id)}`
124
- )
125
- }
126
- >
127
- {job.description}
128
- </a>
129
- </Td>
130
- <Td>{job.task.result}</Td>
131
- <Td>{job.task.state}</Td>
132
- <Td>
133
- <RelativeDateTime date={job.startAt} />
134
- </Td>
135
- <Td>{readableCron(job.recurringLogic.cronLine)}</Td>
136
- </Tr>
137
- ))}
138
- </Tbody>
139
- </TableComposable>
140
- </React.Fragment>
141
- );
142
- };
143
-
144
- PreviousJobsTable.propTypes = {
145
- jobs: PropTypes.array.isRequired,
146
- history: PropTypes.object.isRequired,
147
- totalCount: PropTypes.number.isRequired,
148
- pagination: PropTypes.object.isRequired,
149
- };
150
-
151
- export default withLoading(PreviousJobsTable);
File without changes
@@ -1,9 +0,0 @@
1
- import { addSearch } from './pageParamsHelper';
2
-
3
- export const preparePerPageOptions = opts =>
4
- opts.map(item => ({ title: item.toString(), value: item }));
5
-
6
- export const refreshPage = (history, params = {}) => {
7
- const url = addSearch(history.location.pathname, params);
8
- history.push(url);
9
- };