foreman_remote_execution 4.3.0 → 4.5.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (103) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/api/v2/job_invocations_controller.rb +27 -22
  3. data/app/controllers/foreman_remote_execution/concerns/api/v2/registration_commands_controller_extensions.rb +19 -0
  4. data/app/controllers/job_invocations_controller.rb +1 -1
  5. data/app/controllers/job_templates_controller.rb +4 -4
  6. data/app/controllers/ui_job_wizard_controller.rb +12 -0
  7. data/app/helpers/job_invocations_helper.rb +2 -2
  8. data/app/helpers/remote_execution_helper.rb +35 -8
  9. data/app/lib/actions/remote_execution/run_host_job.rb +37 -7
  10. data/app/lib/foreman_remote_execution/provider_input.rb +29 -0
  11. data/app/lib/foreman_remote_execution/renderer/scope/input.rb +1 -0
  12. data/app/models/concerns/foreman_remote_execution/host_extensions.rb +7 -5
  13. data/app/models/concerns/foreman_remote_execution/smart_proxy_extensions.rb +6 -0
  14. data/app/models/host_proxy_invocation.rb +4 -0
  15. data/app/models/host_status/execution_status.rb +5 -5
  16. data/app/models/invocation_provider_input_value.rb +12 -0
  17. data/app/models/job_invocation.rb +35 -12
  18. data/app/models/job_invocation_composer.rb +74 -19
  19. data/app/models/remote_execution_provider.rb +18 -3
  20. data/app/models/setting/remote_execution.rb +11 -1
  21. data/app/models/ssh_execution_provider.rb +4 -4
  22. data/app/models/targeting.rb +5 -1
  23. data/app/models/template_invocation.rb +2 -0
  24. data/app/overrides/execution_interface.rb +8 -8
  25. data/app/overrides/subnet_proxies.rb +6 -6
  26. data/app/services/renderer_methods.rb +12 -0
  27. data/app/views/job_invocations/_form.html.erb +8 -0
  28. data/app/views/job_invocations/index.html.erb +1 -1
  29. data/config/routes.rb +1 -0
  30. data/db/migrate/20180110104432_rename_template_invocation_permission.rb +1 -1
  31. data/db/migrate/20190111153330_remove_remote_execution_without_proxy_setting.rb +4 -4
  32. data/db/migrate/20210312074713_add_provider_inputs.rb +10 -0
  33. data/db/migrate/2021051713291621250977_add_host_proxy_invocations.rb +12 -0
  34. data/extra/cockpit/foreman-cockpit-session +6 -6
  35. data/foreman_remote_execution.gemspec +1 -1
  36. data/lib/foreman_remote_execution/engine.rb +14 -12
  37. data/lib/foreman_remote_execution/version.rb +1 -1
  38. data/lib/tasks/foreman_remote_execution_tasks.rake +1 -18
  39. data/locale/action_names.rb +1 -0
  40. data/locale/de/foreman_remote_execution.po +77 -27
  41. data/locale/en/foreman_remote_execution.po +77 -27
  42. data/locale/en_GB/foreman_remote_execution.po +77 -27
  43. data/locale/es/foreman_remote_execution.po +77 -27
  44. data/locale/foreman_remote_execution.pot +241 -163
  45. data/locale/fr/foreman_remote_execution.po +77 -27
  46. data/locale/ja/foreman_remote_execution.po +77 -27
  47. data/locale/ko/foreman_remote_execution.po +77 -27
  48. data/locale/pt_BR/foreman_remote_execution.po +77 -27
  49. data/locale/ru/foreman_remote_execution.po +77 -27
  50. data/locale/zh_CN/foreman_remote_execution.po +77 -27
  51. data/locale/zh_TW/foreman_remote_execution.po +77 -27
  52. data/package.json +4 -2
  53. data/test/functional/api/v2/job_invocations_controller_test.rb +14 -1
  54. data/test/helpers/remote_execution_helper_test.rb +16 -0
  55. data/test/unit/job_invocation_composer_test.rb +100 -3
  56. data/test/unit/job_invocation_report_template_test.rb +57 -0
  57. data/test/unit/job_invocation_test.rb +1 -1
  58. data/webpack/JobWizard/JobWizard.js +75 -11
  59. data/webpack/JobWizard/JobWizard.scss +14 -0
  60. data/webpack/JobWizard/JobWizardConstants.js +6 -0
  61. data/webpack/JobWizard/JobWizardSelectors.js +38 -0
  62. data/webpack/JobWizard/__tests__/JobWizard.test.js +13 -0
  63. data/webpack/JobWizard/__tests__/__snapshots__/JobWizard.test.js.snap +32 -0
  64. data/webpack/JobWizard/__tests__/__snapshots__/integration.test.js.snap +43 -0
  65. data/webpack/JobWizard/__tests__/fixtures.js +26 -0
  66. data/webpack/JobWizard/__tests__/integration.test.js +156 -0
  67. data/webpack/JobWizard/steps/AdvancedFields/AdvancedFields.js +93 -0
  68. data/webpack/JobWizard/steps/AdvancedFields/Fields.js +181 -0
  69. data/webpack/JobWizard/steps/AdvancedFields/__tests__/AdvancedFields.test.js +25 -0
  70. data/webpack/JobWizard/steps/AdvancedFields/__tests__/__snapshots__/AdvancedFields.test.js.snap +249 -0
  71. data/webpack/JobWizard/steps/CategoryAndTemplate/CategoryAndTemplate.js +109 -0
  72. data/webpack/JobWizard/steps/CategoryAndTemplate/CategoryAndTemplate.test.js +52 -0
  73. data/webpack/JobWizard/steps/CategoryAndTemplate/__snapshots__/CategoryAndTemplate.test.js.snap +113 -0
  74. data/webpack/JobWizard/steps/CategoryAndTemplate/index.js +94 -0
  75. data/webpack/JobWizard/steps/form/FormHelpers.js +19 -0
  76. data/webpack/JobWizard/steps/form/GroupedSelectField.js +91 -0
  77. data/webpack/JobWizard/steps/form/SelectField.js +48 -0
  78. data/webpack/JobWizard/steps/form/__tests__/GroupedSelectField.test.js +38 -0
  79. data/webpack/JobWizard/steps/form/__tests__/SelectField.test.js +23 -0
  80. data/webpack/JobWizard/steps/form/__tests__/__snapshots__/GroupedSelectField.test.js.snap +37 -0
  81. data/webpack/JobWizard/steps/form/__tests__/__snapshots__/SelectField.test.js.snap +23 -0
  82. data/webpack/__mocks__/foremanReact/common/helpers.js +1 -0
  83. data/webpack/__mocks__/foremanReact/redux/API/APISelectors.js +21 -2
  84. data/webpack/__mocks__/foremanReact/redux/API/index.js +5 -0
  85. data/webpack/__mocks__/foremanReact/routes/common/PageLayout/PageLayout.js +10 -0
  86. data/webpack/global_index.js +6 -0
  87. data/webpack/index.js +3 -4
  88. data/webpack/react_app/components/RecentJobsCard/RecentJobsCard.js +83 -0
  89. data/webpack/react_app/components/RecentJobsCard/constants.js +1 -0
  90. data/webpack/react_app/components/RecentJobsCard/index.js +1 -0
  91. data/webpack/react_app/components/RecentJobsCard/styles.css +15 -0
  92. data/webpack/react_app/components/RegistrationExtension/RexInterface.js +50 -0
  93. data/webpack/react_app/components/RegistrationExtension/__tests__/RexInterface.test.js +9 -0
  94. data/webpack/react_app/components/RegistrationExtension/__tests__/__snapshots__/RexInterface.test.js.snap +35 -0
  95. data/webpack/react_app/components/TargetingHosts/__tests__/TargetingHostsSelectors.test.js +8 -3
  96. data/webpack/react_app/components/TargetingHosts/__tests__/__snapshots__/TargetingHostsSelectors.test.js.snap +7 -2
  97. data/webpack/react_app/extend/fillRecentJobsCard.js +11 -0
  98. data/webpack/react_app/extend/fillregistrationAdvanced.js +11 -0
  99. data/webpack/react_app/extend/reducers.js +5 -0
  100. metadata +49 -8
  101. data/app/models/concerns/foreman_remote_execution/orchestration/ssh.rb +0 -70
  102. data/app/views/api/v2/registration/_form.html.erb +0 -12
  103. 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
- hosts: [],
13
- autoRefresh: 'true',
14
- total_hosts: 0,
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`] = `Array []`;
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`] = `0`;
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
+ );
@@ -0,0 +1,5 @@
1
+ import { registerReducer } from 'foremanReact/common/MountingService';
2
+ import rootReducer from '../redux/reducers';
3
+
4
+ export default () =>
5
+ registerReducer('foremanRemoteExecutionReducers', rootReducer);
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.3.0
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-03-22 00:00:00.000000000 Z
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.0.0
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.0.0
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