foreman_remote_execution 4.3.0 → 4.5.1
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/app/controllers/api/v2/job_invocations_controller.rb +27 -22
- data/app/controllers/foreman_remote_execution/concerns/api/v2/registration_commands_controller_extensions.rb +19 -0
- data/app/controllers/job_invocations_controller.rb +1 -1
- data/app/controllers/job_templates_controller.rb +4 -4
- data/app/controllers/ui_job_wizard_controller.rb +12 -0
- data/app/helpers/job_invocations_helper.rb +2 -2
- data/app/helpers/remote_execution_helper.rb +35 -8
- data/app/lib/actions/remote_execution/run_host_job.rb +37 -7
- data/app/lib/foreman_remote_execution/provider_input.rb +29 -0
- data/app/lib/foreman_remote_execution/renderer/scope/input.rb +1 -0
- data/app/models/concerns/foreman_remote_execution/host_extensions.rb +7 -5
- data/app/models/concerns/foreman_remote_execution/smart_proxy_extensions.rb +6 -0
- data/app/models/host_proxy_invocation.rb +4 -0
- data/app/models/host_status/execution_status.rb +5 -5
- data/app/models/invocation_provider_input_value.rb +12 -0
- data/app/models/job_invocation.rb +35 -12
- data/app/models/job_invocation_composer.rb +74 -19
- data/app/models/remote_execution_provider.rb +18 -3
- data/app/models/setting/remote_execution.rb +11 -1
- data/app/models/ssh_execution_provider.rb +4 -4
- data/app/models/targeting.rb +5 -1
- data/app/models/template_invocation.rb +2 -0
- data/app/overrides/execution_interface.rb +8 -8
- data/app/overrides/subnet_proxies.rb +6 -6
- data/app/services/renderer_methods.rb +12 -0
- data/app/views/job_invocations/_form.html.erb +8 -0
- data/app/views/job_invocations/index.html.erb +1 -1
- data/config/routes.rb +1 -0
- data/db/migrate/20180110104432_rename_template_invocation_permission.rb +1 -1
- data/db/migrate/20190111153330_remove_remote_execution_without_proxy_setting.rb +4 -4
- data/db/migrate/20210312074713_add_provider_inputs.rb +10 -0
- data/db/migrate/2021051713291621250977_add_host_proxy_invocations.rb +12 -0
- data/extra/cockpit/foreman-cockpit-session +6 -6
- data/foreman_remote_execution.gemspec +1 -1
- data/lib/foreman_remote_execution/engine.rb +14 -12
- data/lib/foreman_remote_execution/version.rb +1 -1
- data/lib/tasks/foreman_remote_execution_tasks.rake +1 -18
- data/locale/action_names.rb +1 -0
- data/locale/de/foreman_remote_execution.po +77 -27
- data/locale/en/foreman_remote_execution.po +77 -27
- data/locale/en_GB/foreman_remote_execution.po +77 -27
- data/locale/es/foreman_remote_execution.po +77 -27
- data/locale/foreman_remote_execution.pot +241 -163
- data/locale/fr/foreman_remote_execution.po +77 -27
- data/locale/ja/foreman_remote_execution.po +77 -27
- data/locale/ko/foreman_remote_execution.po +77 -27
- data/locale/pt_BR/foreman_remote_execution.po +77 -27
- data/locale/ru/foreman_remote_execution.po +77 -27
- data/locale/zh_CN/foreman_remote_execution.po +77 -27
- data/locale/zh_TW/foreman_remote_execution.po +77 -27
- data/package.json +4 -2
- data/test/functional/api/v2/job_invocations_controller_test.rb +14 -1
- data/test/helpers/remote_execution_helper_test.rb +16 -0
- data/test/unit/job_invocation_composer_test.rb +100 -3
- data/test/unit/job_invocation_report_template_test.rb +57 -0
- data/test/unit/job_invocation_test.rb +1 -1
- data/webpack/JobWizard/JobWizard.js +75 -11
- data/webpack/JobWizard/JobWizard.scss +14 -0
- data/webpack/JobWizard/JobWizardConstants.js +6 -0
- data/webpack/JobWizard/JobWizardSelectors.js +38 -0
- data/webpack/JobWizard/__tests__/JobWizard.test.js +13 -0
- data/webpack/JobWizard/__tests__/__snapshots__/JobWizard.test.js.snap +32 -0
- data/webpack/JobWizard/__tests__/__snapshots__/integration.test.js.snap +43 -0
- data/webpack/JobWizard/__tests__/fixtures.js +26 -0
- data/webpack/JobWizard/__tests__/integration.test.js +156 -0
- data/webpack/JobWizard/steps/AdvancedFields/AdvancedFields.js +93 -0
- data/webpack/JobWizard/steps/AdvancedFields/Fields.js +181 -0
- data/webpack/JobWizard/steps/AdvancedFields/__tests__/AdvancedFields.test.js +25 -0
- data/webpack/JobWizard/steps/AdvancedFields/__tests__/__snapshots__/AdvancedFields.test.js.snap +249 -0
- data/webpack/JobWizard/steps/CategoryAndTemplate/CategoryAndTemplate.js +109 -0
- data/webpack/JobWizard/steps/CategoryAndTemplate/CategoryAndTemplate.test.js +52 -0
- data/webpack/JobWizard/steps/CategoryAndTemplate/__snapshots__/CategoryAndTemplate.test.js.snap +113 -0
- data/webpack/JobWizard/steps/CategoryAndTemplate/index.js +94 -0
- data/webpack/JobWizard/steps/form/FormHelpers.js +19 -0
- data/webpack/JobWizard/steps/form/GroupedSelectField.js +91 -0
- data/webpack/JobWizard/steps/form/SelectField.js +48 -0
- data/webpack/JobWizard/steps/form/__tests__/GroupedSelectField.test.js +38 -0
- data/webpack/JobWizard/steps/form/__tests__/SelectField.test.js +23 -0
- data/webpack/JobWizard/steps/form/__tests__/__snapshots__/GroupedSelectField.test.js.snap +37 -0
- data/webpack/JobWizard/steps/form/__tests__/__snapshots__/SelectField.test.js.snap +23 -0
- data/webpack/__mocks__/foremanReact/common/helpers.js +1 -0
- data/webpack/__mocks__/foremanReact/redux/API/APISelectors.js +21 -2
- data/webpack/__mocks__/foremanReact/redux/API/index.js +5 -0
- data/webpack/__mocks__/foremanReact/routes/common/PageLayout/PageLayout.js +10 -0
- data/webpack/global_index.js +6 -0
- data/webpack/index.js +3 -4
- data/webpack/react_app/components/RecentJobsCard/RecentJobsCard.js +83 -0
- data/webpack/react_app/components/RecentJobsCard/constants.js +1 -0
- data/webpack/react_app/components/RecentJobsCard/index.js +1 -0
- data/webpack/react_app/components/RecentJobsCard/styles.css +15 -0
- data/webpack/react_app/components/RegistrationExtension/RexInterface.js +50 -0
- data/webpack/react_app/components/RegistrationExtension/__tests__/RexInterface.test.js +9 -0
- data/webpack/react_app/components/RegistrationExtension/__tests__/__snapshots__/RexInterface.test.js.snap +35 -0
- data/webpack/react_app/components/TargetingHosts/__tests__/TargetingHostsSelectors.test.js +8 -3
- data/webpack/react_app/components/TargetingHosts/__tests__/__snapshots__/TargetingHostsSelectors.test.js.snap +7 -2
- data/webpack/react_app/extend/fillRecentJobsCard.js +11 -0
- data/webpack/react_app/extend/fillregistrationAdvanced.js +11 -0
- data/webpack/react_app/extend/reducers.js +5 -0
- metadata +49 -8
- data/app/models/concerns/foreman_remote_execution/orchestration/ssh.rb +0 -70
- data/app/views/api/v2/registration/_form.html.erb +0 -12
- data/test/models/orchestration/ssh_test.rb +0 -56
|
@@ -9,9 +9,14 @@ import {
|
|
|
9
9
|
} from '../TargetingHostsSelectors';
|
|
10
10
|
|
|
11
11
|
const state = {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
TARGETING_HOSTS: {
|
|
13
|
+
status: 'RESOLVED',
|
|
14
|
+
response: {
|
|
15
|
+
hosts: [1, 2],
|
|
16
|
+
total_hosts: 2,
|
|
17
|
+
autoRefresh: 'true',
|
|
18
|
+
},
|
|
19
|
+
},
|
|
15
20
|
};
|
|
16
21
|
|
|
17
22
|
const fixtures = {
|
|
@@ -4,8 +4,13 @@ exports[`TargetingHostsSelectors should return apiStatus 1`] = `"RESOLVED"`;
|
|
|
4
4
|
|
|
5
5
|
exports[`TargetingHostsSelectors should return autoRefresh 1`] = `"true"`;
|
|
6
6
|
|
|
7
|
-
exports[`TargetingHostsSelectors should return hosts 1`] = `
|
|
7
|
+
exports[`TargetingHostsSelectors should return hosts 1`] = `
|
|
8
|
+
Array [
|
|
9
|
+
1,
|
|
10
|
+
2,
|
|
11
|
+
]
|
|
12
|
+
`;
|
|
8
13
|
|
|
9
14
|
exports[`TargetingHostsSelectors should return intervalExists 1`] = `false`;
|
|
10
15
|
|
|
11
|
-
exports[`TargetingHostsSelectors should return totalHosts 1`] = `
|
|
16
|
+
exports[`TargetingHostsSelectors should return totalHosts 1`] = `2`;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { addGlobalFill } from 'foremanReact/components/common/Fill/GlobalFill';
|
|
3
|
+
import RecentJobsCard from '../components/RecentJobsCard';
|
|
4
|
+
|
|
5
|
+
export default () =>
|
|
6
|
+
addGlobalFill(
|
|
7
|
+
'details-cards',
|
|
8
|
+
'rex-host-details-latest-jobs',
|
|
9
|
+
<RecentJobsCard />,
|
|
10
|
+
1000
|
|
11
|
+
);
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { addGlobalFill } from 'foremanReact/components/common/Fill/GlobalFill';
|
|
3
|
+
import RexInterface from '../components/RegistrationExtension/RexInterface';
|
|
4
|
+
|
|
5
|
+
export default () =>
|
|
6
|
+
addGlobalFill(
|
|
7
|
+
'registrationAdvanced',
|
|
8
|
+
'foreman-remote-exectuion-rex-interface',
|
|
9
|
+
<RexInterface key="registration-rex-interface" />,
|
|
10
|
+
100
|
|
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: 4.
|
|
4
|
+
version: 4.5.1
|
|
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-
|
|
11
|
+
date: 2021-07-13 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: deface
|
|
@@ -64,14 +64,14 @@ dependencies:
|
|
|
64
64
|
requirements:
|
|
65
65
|
- - ">="
|
|
66
66
|
- !ruby/object:Gem::Version
|
|
67
|
-
version: 4.
|
|
67
|
+
version: 4.1.0
|
|
68
68
|
type: :runtime
|
|
69
69
|
prerelease: false
|
|
70
70
|
version_requirements: !ruby/object:Gem::Requirement
|
|
71
71
|
requirements:
|
|
72
72
|
- - ">="
|
|
73
73
|
- !ruby/object:Gem::Version
|
|
74
|
-
version: 4.
|
|
74
|
+
version: 4.1.0
|
|
75
75
|
- !ruby/object:Gem::Dependency
|
|
76
76
|
name: factory_bot_rails
|
|
77
77
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -142,6 +142,7 @@ files:
|
|
|
142
142
|
- app/controllers/concerns/foreman/controller/parameters/job_template.rb
|
|
143
143
|
- app/controllers/concerns/foreman/controller/parameters/remote_execution_feature.rb
|
|
144
144
|
- app/controllers/concerns/foreman/controller/parameters/targeting.rb
|
|
145
|
+
- app/controllers/foreman_remote_execution/concerns/api/v2/registration_commands_controller_extensions.rb
|
|
145
146
|
- app/controllers/foreman_remote_execution/concerns/api/v2/registration_controller_extensions.rb
|
|
146
147
|
- app/controllers/foreman_remote_execution/concerns/api/v2/subnets_controller_extensions.rb
|
|
147
148
|
- app/controllers/job_invocations_controller.rb
|
|
@@ -158,6 +159,7 @@ files:
|
|
|
158
159
|
- app/lib/actions/middleware/bind_job_invocation.rb
|
|
159
160
|
- app/lib/actions/remote_execution/run_host_job.rb
|
|
160
161
|
- app/lib/actions/remote_execution/run_hosts_job.rb
|
|
162
|
+
- app/lib/foreman_remote_execution/provider_input.rb
|
|
161
163
|
- app/lib/foreman_remote_execution/renderer/scope/input.rb
|
|
162
164
|
- app/lib/proxy_api/remote_execution_ssh.rb
|
|
163
165
|
- app/mailers/.gitkeep
|
|
@@ -169,7 +171,6 @@ files:
|
|
|
169
171
|
- app/models/concerns/foreman_remote_execution/foreman_tasks_triggering_extensions.rb
|
|
170
172
|
- app/models/concerns/foreman_remote_execution/host_extensions.rb
|
|
171
173
|
- app/models/concerns/foreman_remote_execution/nic_extensions.rb
|
|
172
|
-
- app/models/concerns/foreman_remote_execution/orchestration/ssh.rb
|
|
173
174
|
- app/models/concerns/foreman_remote_execution/smart_proxy_extensions.rb
|
|
174
175
|
- app/models/concerns/foreman_remote_execution/subnet_extensions.rb
|
|
175
176
|
- app/models/concerns/foreman_remote_execution/taxonomy_extensions.rb
|
|
@@ -178,8 +179,10 @@ files:
|
|
|
178
179
|
- app/models/concerns/foreman_remote_execution/template_overrides.rb
|
|
179
180
|
- app/models/concerns/foreman_remote_execution/user_extensions.rb
|
|
180
181
|
- app/models/foreign_input_set.rb
|
|
182
|
+
- app/models/host_proxy_invocation.rb
|
|
181
183
|
- app/models/host_status/execution_status.rb
|
|
182
184
|
- app/models/input_template_renderer.rb
|
|
185
|
+
- app/models/invocation_provider_input_value.rb
|
|
183
186
|
- app/models/job_invocation.rb
|
|
184
187
|
- app/models/job_invocation_composer.rb
|
|
185
188
|
- app/models/job_invocation_task_group.rb
|
|
@@ -198,6 +201,7 @@ files:
|
|
|
198
201
|
- app/overrides/subnet_proxies.rb
|
|
199
202
|
- app/services/default_proxy_proxy_selector.rb
|
|
200
203
|
- app/services/remote_execution_proxy_selector.rb
|
|
204
|
+
- app/services/renderer_methods.rb
|
|
201
205
|
- app/services/ui_notifications/remote_execution_jobs/base_job_finish.rb
|
|
202
206
|
- app/views/api/v2/foreign_input_sets/base.json.rabl
|
|
203
207
|
- app/views/api/v2/foreign_input_sets/create.json.rabl
|
|
@@ -216,7 +220,6 @@ files:
|
|
|
216
220
|
- app/views/api/v2/job_templates/main.json.rabl
|
|
217
221
|
- app/views/api/v2/job_templates/show.json.rabl
|
|
218
222
|
- app/views/api/v2/job_templates/update.json.rabl
|
|
219
|
-
- app/views/api/v2/registration/_form.html.erb
|
|
220
223
|
- app/views/api/v2/remote_execution_features/base.json.rabl
|
|
221
224
|
- app/views/api/v2/remote_execution_features/index.json.rabl
|
|
222
225
|
- app/views/api/v2/remote_execution_features/main.json.rabl
|
|
@@ -320,6 +323,8 @@ files:
|
|
|
320
323
|
- db/migrate/20190111153330_remove_remote_execution_without_proxy_setting.rb
|
|
321
324
|
- db/migrate/20200623073022_rename_sudo_password_to_effective_user_password.rb
|
|
322
325
|
- db/migrate/20200820122057_add_proxy_selector_override_to_remote_execution_feature.rb
|
|
326
|
+
- db/migrate/20210312074713_add_provider_inputs.rb
|
|
327
|
+
- db/migrate/2021051713291621250977_add_host_proxy_invocations.rb
|
|
323
328
|
- db/seeds.d/100-assign_features_with_templates.rb
|
|
324
329
|
- db/seeds.d/20-permissions.rb
|
|
325
330
|
- db/seeds.d/50-notification_blueprints.rb
|
|
@@ -376,7 +381,6 @@ files:
|
|
|
376
381
|
- test/functional/job_templates_controller_test.rb
|
|
377
382
|
- test/functional/ui_job_wizard_controller_test.rb
|
|
378
383
|
- test/helpers/remote_execution_helper_test.rb
|
|
379
|
-
- test/models/orchestration/ssh_test.rb
|
|
380
384
|
- test/support/remote_execution_helper.rb
|
|
381
385
|
- test/test_plugin_helper.rb
|
|
382
386
|
- test/unit/actions/run_host_job_test.rb
|
|
@@ -387,6 +391,7 @@ files:
|
|
|
387
391
|
- test/unit/execution_task_status_mapper_test.rb
|
|
388
392
|
- test/unit/input_template_renderer_test.rb
|
|
389
393
|
- test/unit/job_invocation_composer_test.rb
|
|
394
|
+
- test/unit/job_invocation_report_template_test.rb
|
|
390
395
|
- test/unit/job_invocation_test.rb
|
|
391
396
|
- test/unit/job_template_effective_user_test.rb
|
|
392
397
|
- test/unit/job_template_test.rb
|
|
@@ -396,18 +401,51 @@ files:
|
|
|
396
401
|
- test/unit/targeting_test.rb
|
|
397
402
|
- test/unit/template_invocation_input_value_test.rb
|
|
398
403
|
- webpack/JobWizard/JobWizard.js
|
|
404
|
+
- webpack/JobWizard/JobWizard.scss
|
|
405
|
+
- webpack/JobWizard/JobWizardConstants.js
|
|
406
|
+
- webpack/JobWizard/JobWizardSelectors.js
|
|
407
|
+
- webpack/JobWizard/__tests__/JobWizard.test.js
|
|
408
|
+
- webpack/JobWizard/__tests__/__snapshots__/JobWizard.test.js.snap
|
|
409
|
+
- webpack/JobWizard/__tests__/__snapshots__/integration.test.js.snap
|
|
410
|
+
- webpack/JobWizard/__tests__/fixtures.js
|
|
411
|
+
- webpack/JobWizard/__tests__/integration.test.js
|
|
399
412
|
- webpack/JobWizard/index.js
|
|
413
|
+
- webpack/JobWizard/steps/AdvancedFields/AdvancedFields.js
|
|
414
|
+
- webpack/JobWizard/steps/AdvancedFields/Fields.js
|
|
415
|
+
- webpack/JobWizard/steps/AdvancedFields/__tests__/AdvancedFields.test.js
|
|
416
|
+
- webpack/JobWizard/steps/AdvancedFields/__tests__/__snapshots__/AdvancedFields.test.js.snap
|
|
417
|
+
- webpack/JobWizard/steps/CategoryAndTemplate/CategoryAndTemplate.js
|
|
418
|
+
- webpack/JobWizard/steps/CategoryAndTemplate/CategoryAndTemplate.test.js
|
|
419
|
+
- webpack/JobWizard/steps/CategoryAndTemplate/__snapshots__/CategoryAndTemplate.test.js.snap
|
|
420
|
+
- webpack/JobWizard/steps/CategoryAndTemplate/index.js
|
|
421
|
+
- webpack/JobWizard/steps/form/FormHelpers.js
|
|
422
|
+
- webpack/JobWizard/steps/form/GroupedSelectField.js
|
|
423
|
+
- webpack/JobWizard/steps/form/SelectField.js
|
|
424
|
+
- webpack/JobWizard/steps/form/__tests__/GroupedSelectField.test.js
|
|
425
|
+
- webpack/JobWizard/steps/form/__tests__/SelectField.test.js
|
|
426
|
+
- webpack/JobWizard/steps/form/__tests__/__snapshots__/GroupedSelectField.test.js.snap
|
|
427
|
+
- webpack/JobWizard/steps/form/__tests__/__snapshots__/SelectField.test.js.snap
|
|
400
428
|
- webpack/Routes/routes.js
|
|
401
429
|
- webpack/__mocks__/foremanReact/common/I18n.js
|
|
430
|
+
- webpack/__mocks__/foremanReact/common/helpers.js
|
|
402
431
|
- webpack/__mocks__/foremanReact/components/Pagination/PaginationWrapper.js
|
|
403
432
|
- webpack/__mocks__/foremanReact/components/SearchBar.js
|
|
404
433
|
- webpack/__mocks__/foremanReact/components/common/ActionButtons/ActionButtons.js
|
|
405
434
|
- webpack/__mocks__/foremanReact/constants.js
|
|
406
435
|
- webpack/__mocks__/foremanReact/history.js
|
|
407
436
|
- webpack/__mocks__/foremanReact/redux/API/APISelectors.js
|
|
437
|
+
- webpack/__mocks__/foremanReact/redux/API/index.js
|
|
408
438
|
- webpack/__mocks__/foremanReact/redux/middlewares/IntervalMiddleware/IntervalSelectors.js
|
|
439
|
+
- webpack/__mocks__/foremanReact/routes/common/PageLayout/PageLayout.js
|
|
409
440
|
- webpack/global_index.js
|
|
410
441
|
- webpack/index.js
|
|
442
|
+
- webpack/react_app/components/RecentJobsCard/RecentJobsCard.js
|
|
443
|
+
- webpack/react_app/components/RecentJobsCard/constants.js
|
|
444
|
+
- webpack/react_app/components/RecentJobsCard/index.js
|
|
445
|
+
- webpack/react_app/components/RecentJobsCard/styles.css
|
|
446
|
+
- webpack/react_app/components/RegistrationExtension/RexInterface.js
|
|
447
|
+
- webpack/react_app/components/RegistrationExtension/__tests__/RexInterface.test.js
|
|
448
|
+
- webpack/react_app/components/RegistrationExtension/__tests__/__snapshots__/RexInterface.test.js.snap
|
|
411
449
|
- webpack/react_app/components/TargetingHosts/TargetingHosts.js
|
|
412
450
|
- webpack/react_app/components/TargetingHosts/TargetingHostsConsts.js
|
|
413
451
|
- webpack/react_app/components/TargetingHosts/TargetingHostsHelpers.js
|
|
@@ -431,6 +469,9 @@ files:
|
|
|
431
469
|
- webpack/react_app/components/jobInvocations/AggregateStatus/index.js
|
|
432
470
|
- webpack/react_app/components/jobInvocations/AggregateStatus/index.test.js
|
|
433
471
|
- webpack/react_app/components/jobInvocations/index.js
|
|
472
|
+
- webpack/react_app/extend/fillRecentJobsCard.js
|
|
473
|
+
- webpack/react_app/extend/fillregistrationAdvanced.js
|
|
474
|
+
- webpack/react_app/extend/reducers.js
|
|
434
475
|
- webpack/react_app/redux/actions/jobInvocations/index.js
|
|
435
476
|
- webpack/react_app/redux/consts.js
|
|
436
477
|
- webpack/react_app/redux/reducers/index.js
|
|
@@ -477,7 +518,6 @@ test_files:
|
|
|
477
518
|
- test/functional/job_templates_controller_test.rb
|
|
478
519
|
- test/functional/ui_job_wizard_controller_test.rb
|
|
479
520
|
- test/helpers/remote_execution_helper_test.rb
|
|
480
|
-
- test/models/orchestration/ssh_test.rb
|
|
481
521
|
- test/support/remote_execution_helper.rb
|
|
482
522
|
- test/test_plugin_helper.rb
|
|
483
523
|
- test/unit/actions/run_host_job_test.rb
|
|
@@ -488,6 +528,7 @@ test_files:
|
|
|
488
528
|
- test/unit/execution_task_status_mapper_test.rb
|
|
489
529
|
- test/unit/input_template_renderer_test.rb
|
|
490
530
|
- test/unit/job_invocation_composer_test.rb
|
|
531
|
+
- test/unit/job_invocation_report_template_test.rb
|
|
491
532
|
- test/unit/job_invocation_test.rb
|
|
492
533
|
- test/unit/job_template_effective_user_test.rb
|
|
493
534
|
- test/unit/job_template_test.rb
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
module ForemanRemoteExecution
|
|
2
|
-
module Orchestration::SSH
|
|
3
|
-
extend ActiveSupport::Concern
|
|
4
|
-
|
|
5
|
-
included do
|
|
6
|
-
before_destroy :ssh_destroy
|
|
7
|
-
after_validation :queue_ssh_destroy
|
|
8
|
-
register_rebuild(:queue_ssh_destroy, N_("SSH_#{self.to_s.split('::').first}"))
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
def drop_from_known_hosts(proxy_id)
|
|
12
|
-
_, _, target = host_kind_target
|
|
13
|
-
return true if target.nil?
|
|
14
|
-
|
|
15
|
-
proxy = ::SmartProxy.find(proxy_id)
|
|
16
|
-
begin
|
|
17
|
-
proxy.drop_host_from_known_hosts(target)
|
|
18
|
-
rescue ::ProxyAPI::ProxyException => e
|
|
19
|
-
if e.wrapped_exception.is_a?(RestClient::NotFound)
|
|
20
|
-
# ignore 404 when known_hosts entry is missing or the module was not enabled
|
|
21
|
-
Foreman::Logging.exception "Proxy failed to delete SSH known_hosts for #{name}, #{ip}", e, :level => :error
|
|
22
|
-
else
|
|
23
|
-
raise e
|
|
24
|
-
end
|
|
25
|
-
rescue => e
|
|
26
|
-
Rails.logger.warn e.message
|
|
27
|
-
return false
|
|
28
|
-
end
|
|
29
|
-
true
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
def ssh_destroy
|
|
33
|
-
logger.debug "Scheduling SSH known_hosts cleanup"
|
|
34
|
-
|
|
35
|
-
host, _kind, _target = host_kind_target
|
|
36
|
-
# #remote_execution_proxies may not be defined on the host object in some case
|
|
37
|
-
# for example Host::Discovered does not have it defined, even though these hosts
|
|
38
|
-
# have Nic::Managed interfaces associated with them
|
|
39
|
-
proxies = (host.try(:remote_execution_proxies, 'SSH') || {}).values
|
|
40
|
-
proxies.flatten.uniq.each do |proxy|
|
|
41
|
-
queue.create(id: queue_id(proxy.id), name: _("Remove SSH known hosts for %s") % self,
|
|
42
|
-
priority: 200, action: [self, :drop_from_known_hosts, proxy.id])
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
def queue_ssh_destroy
|
|
47
|
-
should_drop_from_known_hosts? && ssh_destroy
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
def should_drop_from_known_hosts?
|
|
51
|
-
host, = host_kind_target
|
|
52
|
-
host && !host.new_record? && host.build && host.changes.key?('build')
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
private
|
|
56
|
-
|
|
57
|
-
def host_kind_target
|
|
58
|
-
if self.is_a?(::Host::Base)
|
|
59
|
-
[self, 'host', name]
|
|
60
|
-
else
|
|
61
|
-
[self.host, 'interface', ip]
|
|
62
|
-
end
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
def queue_id(proxy_id)
|
|
66
|
-
_, kind, id = host_kind_target
|
|
67
|
-
"ssh_remove_known_hosts_#{kind}_#{id}_#{proxy_id}"
|
|
68
|
-
end
|
|
69
|
-
end
|
|
70
|
-
end
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
<div class='form-group'>
|
|
2
|
-
<label class='col-md-2 control-label'>
|
|
3
|
-
<%= _('Remote Execution Interface') %>
|
|
4
|
-
<% help = _('Identifier of the Host interface for Remote execution') %>
|
|
5
|
-
<a rel="popover" data-content="<%= help %>" data-trigger="focus" data-container="body" data-html="true" tabindex="-1">
|
|
6
|
-
<span class="pficon pficon-info "></span>
|
|
7
|
-
</a>
|
|
8
|
-
</label>
|
|
9
|
-
<div class='col-md-4'>
|
|
10
|
-
<%= text_field_tag 'remote_execution_interface', params[:remote_execution_interface], class: 'form-control' %>
|
|
11
|
-
</div>
|
|
12
|
-
</div>
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
require 'test_plugin_helper'
|
|
2
|
-
|
|
3
|
-
class SSHOrchestrationTest < ActiveSupport::TestCase
|
|
4
|
-
let(:host) { FactoryBot.create(:host, :managed, :with_subnet) }
|
|
5
|
-
let(:proxy) { FactoryBot.create(:smart_proxy, :ssh) }
|
|
6
|
-
let(:interface) { host.interfaces.first }
|
|
7
|
-
|
|
8
|
-
before { interface.subnet.remote_execution_proxies = [proxy] }
|
|
9
|
-
|
|
10
|
-
it 'attempts to drop IP address and hostname from smart proxies on destroy' do
|
|
11
|
-
host.stubs(:skip_orchestration?).returns false
|
|
12
|
-
SmartProxy.any_instance.expects(:drop_host_from_known_hosts).with(interface.ip)
|
|
13
|
-
SmartProxy.any_instance.expects(:drop_host_from_known_hosts).with(host.name)
|
|
14
|
-
host.destroy
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
it 'attempts to drop IP address and hostname from smart proxies on rebuild' do
|
|
18
|
-
host.stubs(:skip_orchestration?).returns false
|
|
19
|
-
SmartProxy.any_instance.expects(:drop_host_from_known_hosts).with(interface.ip)
|
|
20
|
-
SmartProxy.any_instance.expects(:drop_host_from_known_hosts).with(host.name)
|
|
21
|
-
|
|
22
|
-
host.build = true
|
|
23
|
-
host.save!
|
|
24
|
-
|
|
25
|
-
ids = ["ssh_remove_known_hosts_interface_#{interface.ip}_#{proxy.id}",
|
|
26
|
-
"ssh_remove_known_hosts_host_#{host.name}_#{proxy.id}"]
|
|
27
|
-
_(host.queue.task_ids).must_equal ids
|
|
28
|
-
_(host.queue.items.map(&:status)).must_equal %w(completed completed)
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
it 'does not fail on 404 from the smart proxy' do
|
|
32
|
-
host.stubs(:skip_orchestration?).returns false
|
|
33
|
-
::ProxyAPI::RemoteExecutionSSH.any_instance.expects(:delete).raises(RestClient::ResourceNotFound).twice
|
|
34
|
-
host.build = true
|
|
35
|
-
host.save!
|
|
36
|
-
ids = ["ssh_remove_known_hosts_interface_#{interface.ip}_#{proxy.id}",
|
|
37
|
-
"ssh_remove_known_hosts_host_#{host.name}_#{proxy.id}"]
|
|
38
|
-
_(host.queue.task_ids).must_equal ids
|
|
39
|
-
_(host.queue.items.map(&:status)).must_equal %w(completed completed)
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
it 'does not trigger the removal when creating a new host' do
|
|
43
|
-
SmartProxy.any_instance.expects(:drop_host_from_known_hosts).never
|
|
44
|
-
host = Host::Managed.new(:name => 'test', :ip => '127.0.0.1')
|
|
45
|
-
host.stubs(:skip_orchestration?).returns false
|
|
46
|
-
_(host.queue.task_ids).must_equal []
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
it 'does not call to the proxy when target is nil' do
|
|
50
|
-
host.stubs(:skip_orchestration?).returns false
|
|
51
|
-
SmartProxy.any_instance.expects(:drop_host_from_known_hosts).with(host.name)
|
|
52
|
-
host.interfaces.first.stubs(:ip)
|
|
53
|
-
host.destroy
|
|
54
|
-
_(host.queue.items.map(&:status)).must_equal %w(completed completed)
|
|
55
|
-
end
|
|
56
|
-
end
|