foreman_remote_execution 10.0.5 → 10.0.7
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.
- checksums.yaml +4 -4
- data/lib/foreman_remote_execution/version.rb +1 -1
- data/package.json +1 -0
- data/webpack/JobWizard/JobWizard.js +19 -2
- data/webpack/JobWizard/autofill.js +1 -1
- data/webpack/JobWizard/steps/CategoryAndTemplate/CategoryAndTemplate.js +11 -1
- data/webpack/JobWizard/steps/CategoryAndTemplate/index.js +3 -0
- data/webpack/JobWizard/steps/Schedule/RepeatCron.js +25 -1
- data/webpack/__mocks__/foremanReact/Root/Context/ForemanContext/index.js +1 -0
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: af181ef9875f38effa38fa61b6d62401aea97323babcc545c111b85bc38a2fe0
|
4
|
+
data.tar.gz: a19d3bbcb041e403607b00d7ed92bcaa05a916e80ea251c80357064167b9d0f8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1cb79a08c9d8f24d236fe744ff0a8fd87c7c071ab9678b00ac1ca2871be4d5c2fb21bd22d430cc560fa4a41ed757cd836fc08a17ba7c421521c019f853d247fb
|
7
|
+
data.tar.gz: 5130853eed2121e2968fc6a9058c6972a3c9a39a490e4e51852c6fb365ce0d803f86df08ec67cfa8ba3f38c47272e7ab865c4f5769eede3dea0f86d69992d637
|
data/package.json
CHANGED
@@ -21,6 +21,7 @@
|
|
21
21
|
"url": "http://projects.theforeman.org/projects/foreman_remote_execution/issues"
|
22
22
|
},
|
23
23
|
"devDependencies": {
|
24
|
+
"@adobe/css-tools": "~4.2.0",
|
24
25
|
"@babel/core": "^7.7.0",
|
25
26
|
"@theforeman/builder": "^12.0.1",
|
26
27
|
"@theforeman/eslint-plugin-foreman": "^12.0.1",
|
@@ -41,6 +41,8 @@ import { Footer } from './Footer';
|
|
41
41
|
import './JobWizard.scss';
|
42
42
|
|
43
43
|
export const JobWizard = ({ rerunData }) => {
|
44
|
+
const routerSearch = useSelector(selectRouterSearch);
|
45
|
+
const [feature, setFeature] = useState(routerSearch.feature);
|
44
46
|
const jobCategoriesResponse = useSelector(selectJobCategoriesResponse);
|
45
47
|
const [jobTemplateID, setJobTemplateID] = useState(
|
46
48
|
rerunData?.template_invocations?.[0]?.template_id ||
|
@@ -58,7 +60,6 @@ export const JobWizard = ({ rerunData }) => {
|
|
58
60
|
hostGroups: [],
|
59
61
|
});
|
60
62
|
const [hostsSearchQuery, setHostsSearchQuery] = useState('');
|
61
|
-
const routerSearch = useSelector(selectRouterSearch);
|
62
63
|
const [fills, setFills] = useState(
|
63
64
|
rerunData
|
64
65
|
? {
|
@@ -169,8 +170,23 @@ export const JobWizard = ({ rerunData }) => {
|
|
169
170
|
job_template: { name, description_format },
|
170
171
|
},
|
171
172
|
}) => {
|
173
|
+
const allowedInputs = template_inputs
|
174
|
+
.map(({ name: _name }) => _name)
|
175
|
+
.concat(
|
176
|
+
advanced_template_inputs.map(({ name: _name }) => _name)
|
177
|
+
);
|
178
|
+
const prune = inputs =>
|
179
|
+
allowedInputs.reduce(
|
180
|
+
(acc, key) =>
|
181
|
+
inputs.hasOwnProperty(key)
|
182
|
+
? { [key]: inputs[key], ...acc }
|
183
|
+
: acc,
|
184
|
+
{}
|
185
|
+
);
|
186
|
+
setTemplateValues(prune);
|
172
187
|
setAdvancedValues(currentAdvancedValues => ({
|
173
188
|
...currentAdvancedValues,
|
189
|
+
templateValues: prune(currentAdvancedValues.templateValues),
|
174
190
|
description:
|
175
191
|
generateDefaultDescription({
|
176
192
|
description_format,
|
@@ -243,6 +259,7 @@ export const JobWizard = ({ rerunData }) => {
|
|
243
259
|
setJobTemplate={setJobTemplateID}
|
244
260
|
category={category}
|
245
261
|
setCategory={setCategory}
|
262
|
+
setFeature={setFeature}
|
246
263
|
isCategoryPreselected={
|
247
264
|
!!rerunData || !!fills.feature || !!fills.template_id
|
248
265
|
}
|
@@ -432,7 +449,7 @@ export const JobWizard = ({ rerunData }) => {
|
|
432
449
|
hostsSearchQuery,
|
433
450
|
location,
|
434
451
|
organization,
|
435
|
-
feature
|
452
|
+
feature,
|
436
453
|
provider: templateResponse.provider_name,
|
437
454
|
advancedInputs: templateResponse.advanced_template_inputs,
|
438
455
|
});
|
@@ -76,7 +76,7 @@ export const useAutoFill = ({
|
|
76
76
|
if (typeof rest[key] === 'string') {
|
77
77
|
setTemplateValues(prev => ({ ...prev, [input]: rest[key] }));
|
78
78
|
setAdvancedValues(prev => ({ ...prev, [input]: rest[key] }));
|
79
|
-
} else {
|
79
|
+
} else if (rest[key].value !== null) {
|
80
80
|
const { value, advanced } = rest[key];
|
81
81
|
if (advanced) {
|
82
82
|
setAdvancedValues(prev => ({
|
@@ -16,6 +16,7 @@ export const CategoryAndTemplate = ({
|
|
16
16
|
selectedTemplateID,
|
17
17
|
selectedCategory,
|
18
18
|
setCategory,
|
19
|
+
setFeature,
|
19
20
|
errors,
|
20
21
|
}) => {
|
21
22
|
const templatesGroups = {};
|
@@ -45,8 +46,16 @@ export const CategoryAndTemplate = ({
|
|
45
46
|
if (selectedCategory !== newCategory) {
|
46
47
|
setCategory(newCategory);
|
47
48
|
setJobTemplate(null);
|
49
|
+
setFeature(null);
|
48
50
|
}
|
49
51
|
};
|
52
|
+
const onSelectTemplate = newTemplate => {
|
53
|
+
if (selectedTemplate !== newTemplate) {
|
54
|
+
setJobTemplate(newTemplate);
|
55
|
+
setFeature(null);
|
56
|
+
}
|
57
|
+
};
|
58
|
+
|
50
59
|
const { categoryError, allTemplatesError, templateError } = errors;
|
51
60
|
const isError = !!(categoryError || allTemplatesError || templateError);
|
52
61
|
return (
|
@@ -68,7 +77,7 @@ export const CategoryAndTemplate = ({
|
|
68
77
|
label={__('Job template')}
|
69
78
|
fieldId="job_template"
|
70
79
|
groups={Object.values(templatesGroups)}
|
71
|
-
setSelected={
|
80
|
+
setSelected={onSelectTemplate}
|
72
81
|
selected={isTemplatesLoading ? [] : selectedTemplate}
|
73
82
|
isDisabled={
|
74
83
|
!!(categoryError || allTemplatesError || isTemplatesLoading)
|
@@ -103,6 +112,7 @@ CategoryAndTemplate.propTypes = {
|
|
103
112
|
jobCategories: PropTypes.array,
|
104
113
|
jobTemplates: PropTypes.array,
|
105
114
|
setJobTemplate: PropTypes.func.isRequired,
|
115
|
+
setFeature: PropTypes.func.isRequired,
|
106
116
|
selectedTemplateID: PropTypes.number,
|
107
117
|
setCategory: PropTypes.func.isRequired,
|
108
118
|
selectedCategory: PropTypes.string,
|
@@ -26,6 +26,7 @@ const ConnectedCategoryAndTemplate = ({
|
|
26
26
|
setJobTemplate,
|
27
27
|
category,
|
28
28
|
setCategory,
|
29
|
+
setFeature,
|
29
30
|
isCategoryPreselected,
|
30
31
|
}) => {
|
31
32
|
const dispatch = useDispatch();
|
@@ -104,6 +105,7 @@ const ConnectedCategoryAndTemplate = ({
|
|
104
105
|
selectedTemplateID={jobTemplate}
|
105
106
|
setCategory={setCategory}
|
106
107
|
selectedCategory={category}
|
108
|
+
setFeature={setFeature}
|
107
109
|
errors={errors}
|
108
110
|
/>
|
109
111
|
);
|
@@ -114,6 +116,7 @@ ConnectedCategoryAndTemplate.propTypes = {
|
|
114
116
|
setJobTemplate: PropTypes.func.isRequired,
|
115
117
|
category: PropTypes.string.isRequired,
|
116
118
|
setCategory: PropTypes.func.isRequired,
|
119
|
+
setFeature: PropTypes.func.isRequired,
|
117
120
|
isCategoryPreselected: PropTypes.bool.isRequired,
|
118
121
|
};
|
119
122
|
ConnectedCategoryAndTemplate.defaultProps = { jobTemplate: null };
|
@@ -1,3 +1,4 @@
|
|
1
|
+
import URI from 'urijs';
|
1
2
|
import React, { useEffect } from 'react';
|
2
3
|
import PropTypes from 'prop-types';
|
3
4
|
import {
|
@@ -9,10 +10,25 @@ import {
|
|
9
10
|
FormGroup,
|
10
11
|
ValidatedOptions,
|
11
12
|
} from '@patternfly/react-core';
|
13
|
+
import { foremanUrl } from 'foremanReact/common/helpers';
|
14
|
+
import { useForemanVersion } from 'foremanReact/Root/Context/ForemanContext';
|
12
15
|
import { translate as __ } from 'foremanReact/common/I18n';
|
13
16
|
import { helpLabel } from '../form/FormHelpers';
|
14
17
|
|
18
|
+
const docUrl = foremanVersion => {
|
19
|
+
const rootUrl = `https://docs.theforeman.org/${foremanVersion}/`;
|
20
|
+
const section =
|
21
|
+
'Managing_Hosts/index-foreman-el.html#using-extended-cron-lines_managing-hosts';
|
22
|
+
|
23
|
+
const url = new URI({
|
24
|
+
path: '/links/manual',
|
25
|
+
query: { root_url: rootUrl, section },
|
26
|
+
});
|
27
|
+
return foremanUrl(url.href());
|
28
|
+
};
|
29
|
+
|
15
30
|
export const RepeatCron = ({ repeatData, setRepeatData, setValid }) => {
|
31
|
+
const foremanVersion = useForemanVersion();
|
16
32
|
const { cronline } = repeatData;
|
17
33
|
useEffect(() => {
|
18
34
|
if (cronline) {
|
@@ -24,7 +40,7 @@ export const RepeatCron = ({ repeatData, setRepeatData, setValid }) => {
|
|
24
40
|
}, [setValid, cronline]);
|
25
41
|
return (
|
26
42
|
<FormGroup
|
27
|
-
label={__('Cron line')}
|
43
|
+
label={__('Cron line (extended)')}
|
28
44
|
labelIcon={helpLabel(
|
29
45
|
<div>
|
30
46
|
{__("Cron line format '1 2 3 4 5', where:")}
|
@@ -36,6 +52,14 @@ export const RepeatCron = ({ repeatData, setRepeatData, setValid }) => {
|
|
36
52
|
<ListItem>{__('is month (range: 1-12)')}</ListItem>
|
37
53
|
<ListItem>{__('is day of week (range: 0-6)')}</ListItem>
|
38
54
|
</List>
|
55
|
+
<br />
|
56
|
+
{__(
|
57
|
+
'The cron line supports extended cron line syntax. For details please refer to the '
|
58
|
+
)}
|
59
|
+
<a href={docUrl(foremanVersion)} target="_blank" rel="noreferrer">
|
60
|
+
{__('documentation')}
|
61
|
+
</a>
|
62
|
+
.
|
39
63
|
</div>
|
40
64
|
)}
|
41
65
|
isRequired
|
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: 10.0.
|
4
|
+
version: 10.0.7
|
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: 2023-08-
|
11
|
+
date: 2023-08-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: deface
|
@@ -561,7 +561,7 @@ homepage: https://github.com/theforeman/foreman_remote_execution
|
|
561
561
|
licenses:
|
562
562
|
- GPL-3.0
|
563
563
|
metadata: {}
|
564
|
-
post_install_message:
|
564
|
+
post_install_message:
|
565
565
|
rdoc_options: []
|
566
566
|
require_paths:
|
567
567
|
- lib
|
@@ -576,8 +576,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
576
576
|
- !ruby/object:Gem::Version
|
577
577
|
version: '0'
|
578
578
|
requirements: []
|
579
|
-
rubygems_version: 3.
|
580
|
-
signing_key:
|
579
|
+
rubygems_version: 3.1.6
|
580
|
+
signing_key:
|
581
581
|
specification_version: 4
|
582
582
|
summary: A plugin bringing remote execution to the Foreman, completing the config
|
583
583
|
management functionality with remote management functionality.
|