foreman_wreckingball 3.4.1 → 5.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (70) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +3 -1
  3. data/Rakefile +2 -2
  4. data/app/assets/stylesheets/foreman_wreckingball/status_hosts_table.css.scss +7 -0
  5. data/app/controllers/foreman_wreckingball/hosts_controller.rb +30 -13
  6. data/app/helpers/{concerns/foreman_wreckingball/hosts_helper_extensions.rb → foreman_wreckingball/hosts_helper.rb} +1 -1
  7. data/app/helpers/foreman_wreckingball/hypervisors_helper.rb +2 -1
  8. data/app/helpers/foreman_wreckingball/statuses_helper.rb +9 -7
  9. data/app/jobs/update_hosts_vmware_facets.rb +3 -2
  10. data/app/lib/actions/foreman_wreckingball/bulk_remediate.rb +4 -1
  11. data/app/lib/actions/foreman_wreckingball/host/remediate_hardware_version.rb +3 -1
  12. data/app/lib/actions/foreman_wreckingball/host/remediate_spectre_v2.rb +3 -1
  13. data/app/lib/actions/foreman_wreckingball/host/remediate_vmware_operatingsystem.rb +14 -10
  14. data/app/lib/actions/foreman_wreckingball/vmware/schedule_vmware_sync.rb +1 -1
  15. data/app/lib/actions/foreman_wreckingball/vmware/sync_compute_resource.rb +2 -2
  16. data/app/lib/fog_extensions/foreman_wreckingball/vsphere/host.rb +2 -0
  17. data/app/lib/fog_extensions/foreman_wreckingball/vsphere/mock.rb +3 -1
  18. data/app/lib/fog_extensions/foreman_wreckingball/vsphere/real.rb +7 -2
  19. data/app/lib/fog_extensions/foreman_wreckingball/vsphere/server.rb +2 -0
  20. data/app/lib/vsphere_os_identifiers/data.yaml +21 -0
  21. data/app/models/concerns/foreman_wreckingball/compute_resource_extensions.rb +11 -5
  22. data/app/models/concerns/foreman_wreckingball/host_extensions.rb +13 -4
  23. data/app/models/concerns/foreman_wreckingball/vmware_facet_host_extensions.rb +42 -11
  24. data/app/models/concerns/foreman_wreckingball/vmware_hypervisor_facet_host_extensions.rb +6 -2
  25. data/app/models/foreman_wreckingball/cpu_hot_add_status.rb +1 -1
  26. data/app/models/foreman_wreckingball/hardware_version_status.rb +1 -1
  27. data/app/models/foreman_wreckingball/operatingsystem_status.rb +2 -0
  28. data/app/models/foreman_wreckingball/spectre_v2_status.rb +3 -3
  29. data/app/models/foreman_wreckingball/vmware_cluster.rb +14 -13
  30. data/app/models/foreman_wreckingball/vmware_facet.rb +18 -12
  31. data/app/models/foreman_wreckingball/vmware_hypervisor_facet.rb +3 -1
  32. data/app/services/foreman_wreckingball/vmware_cluster_importer.rb +7 -4
  33. data/app/services/foreman_wreckingball/vmware_hypervisor_importer.rb +44 -41
  34. data/app/views/foreman_wreckingball/hosts/_hosts.json.rabl +6 -4
  35. data/app/views/foreman_wreckingball/hosts/_status_row_hosts_table.html.erb +1 -1
  36. data/app/views/foreman_wreckingball/hosts/status_hosts.json.rabl +4 -4
  37. data/config/environments/production.rb +1 -1
  38. data/config/routes.rb +3 -2
  39. data/db/migrate/20181021111543_add_indexes_to_vmware_hypervisor_facets.rb +1 -1
  40. data/db/migrate/20240201094513_fix_wreckingball_settings_category_to_dsl.rb +13 -0
  41. data/lib/foreman_wreckingball/engine.rb +46 -52
  42. data/lib/foreman_wreckingball/scheduled_jobs.rb +1 -1
  43. data/lib/foreman_wreckingball/version.rb +1 -1
  44. data/lib/tasks/foreman_vmware_checks_tasks.rake +1 -21
  45. data/test/actions/foreman_wreckingball/bulk_remediate_test.rb +0 -1
  46. data/test/actions/foreman_wreckingball/host/refresh_vmware_facet_test.rb +6 -7
  47. data/test/actions/foreman_wreckingball/host/remediate_hardware_version_test.rb +6 -7
  48. data/test/actions/foreman_wreckingball/host/remediate_spectre_v2_test.rb +6 -7
  49. data/test/actions/foreman_wreckingball/host/remediate_vmware_operatingsystem_test.rb +8 -9
  50. data/test/actions/foreman_wreckingball/vmware/sync_compute_resource_test.rb +2 -2
  51. data/test/controllers/compute_resources_controller_test.rb +2 -2
  52. data/test/controllers/foreman_wreckingball/hosts_controller_test.rb +19 -18
  53. data/test/factories/foreman_wreckingball_factories.rb +10 -10
  54. data/test/integration/hosts_status_dashboard_test.rb +0 -4
  55. data/test/integration/hosts_status_managed_hosts_test.rb +4 -5
  56. data/test/models/compute_resources/vmware_test.rb +1 -1
  57. data/test/models/foreman_wreckingball/cpu_hot_add_status_test.rb +2 -2
  58. data/test/models/foreman_wreckingball/hardware_version_status_test.rb +3 -4
  59. data/test/models/foreman_wreckingball/operatingsystem_status_test.rb +5 -5
  60. data/test/models/foreman_wreckingball/spectre_v2_status_test.rb +4 -4
  61. data/test/models/foreman_wreckingball/tools_status_test.rb +2 -2
  62. data/test/models/foreman_wreckingball/vmware_facet_test.rb +10 -10
  63. data/test/models/foreman_wreckingball/vmware_hypervisor_facet_test.rb +4 -4
  64. data/test/models/host_test.rb +54 -52
  65. data/test/test_plugin_helper.rb +1 -1
  66. data/test/unit/foreman_wreckingball/access_permissions_test.rb +18 -0
  67. data/test/unit/foreman_wreckingball/vmware_cluster_importer_test.rb +6 -6
  68. data/test/unit/foreman_wreckingball/vmware_hypervisor_importer_test.rb +4 -4
  69. metadata +56 -37
  70. data/app/models/setting/wreckingball.rb +0 -22
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5386e48704b4c0837fd34063239ead1bda9c7e2dd72cc60d82c15ac60334fea2
4
- data.tar.gz: 4ed751665783de1efb8e25534cc32324f287c4611aa579d031873078b53ff7d1
3
+ metadata.gz: 0fc1a2760d1b2467a0fcae578b7307eae8d2b0fcce5ce7de9ecacc2c81601043
4
+ data.tar.gz: 1680594f03c2237ba9c068f6caa0600f365bb590a14a1ee5b9cd3dab7e541a5f
5
5
  SHA512:
6
- metadata.gz: 2d6df272535f83e43c0889bce9655beb8b01f522269a85ebfbb7e5a6f1d332c407632e295234e12e7dc826897e8cc7eda587a322a57d265b3239ebbda54b4d4f
7
- data.tar.gz: 3aea63d70aa6895ba153fdf32c370127ca8ee8a2b22ceb9099b4c8ded6fca3b8315561e4cd78854ec1977b6df73d7dee7e54e5943237de496dfaf1eebec179bd
6
+ metadata.gz: 5f796c690147b26378f6518bddcd2d57535229b117e8292fe1b7ab02558a3ed9423c756ad32d9813dc65624886ebce83d227d2b9e435ed6dea5d03621b2fef7f
7
+ data.tar.gz: e6fa1d5e46961f3f44ae105c1767b027c8255e3068aaf828c0a60a0992b4b6f1c1104e72f64a761cc8bc3ebb02fd2b36a4dddf59fa51d0ea2c70730abc9a1634
data/README.md CHANGED
@@ -11,7 +11,9 @@ This is a plugin for Foreman that adds several VMware related status checks to y
11
11
  | >= 1.15 | ~> 0.1 |
12
12
  | >= 1.16 | ~> 1.0 |
13
13
  | >= 1.17 | ~> 2.0 |
14
- | >= 1.18 | ~> 3.0 |
14
+ | >= 1.21 | ~> 3.0 |
15
+ | >= 2.3 | ~> 4.0 |
16
+ | >= 3.9 | ~> 5.0 |
15
17
 
16
18
  ## Installation
17
19
 
data/Rakefile CHANGED
@@ -20,7 +20,7 @@ RDoc::Task.new(:rdoc) do |rdoc|
20
20
  rdoc.rdoc_files.include('lib/**/*.rb')
21
21
  end
22
22
 
23
- APP_RAKEFILE = File.expand_path('../test/dummy/Rakefile', __FILE__)
23
+ APP_RAKEFILE = File.expand_path('test/dummy/Rakefile', __dir__)
24
24
 
25
25
  Bundler::GemHelper.install_tasks
26
26
 
@@ -38,7 +38,7 @@ task default: :test
38
38
  begin
39
39
  require 'rubocop/rake_task'
40
40
  RuboCop::RakeTask.new
41
- rescue => _
41
+ rescue LoadError
42
42
  puts 'Rubocop not loaded.'
43
43
  end
44
44
 
@@ -11,3 +11,10 @@ div.status-hosts-container.ajax-error div.dataTables_wrapper,
11
11
  div.status-hosts-container.ajax-error p {
12
12
  display: none;
13
13
  }
14
+
15
+ table.status-hosts.hide-puppet-environment {
16
+ th:nth-child(5),
17
+ td:nth-child(5) {
18
+ display: none;
19
+ }
20
+ }
@@ -7,13 +7,16 @@ module ForemanWreckingball
7
7
  include ::AuthorizeHelper
8
8
 
9
9
  AJAX_REQUESTS = [:status_hosts].freeze
10
- before_action :ajax_request, :only => AJAX_REQUESTS
11
- before_action :find_statuses, :only => [:schedule_remediate, :submit_remediate]
10
+ before_action :ajax_request, only: AJAX_REQUESTS
11
+ before_action :find_statuses, only: %i[schedule_remediate submit_remediate]
12
12
 
13
+ # rubocop:todo Metrics/AbcSize, Metrics/MethodLength
13
14
  def status_dashboard
14
15
  @newest_data = Host.authorized(:view_hosts).joins(:vmware_facet).maximum('vmware_facets.updated_at')
15
16
  host_ids = Host.authorized(:view_hosts)
16
- .try { |query| params[:owned_only] ? query.owned_by_current_user_or_group_with_current_user : query }
17
+ .try do |query|
18
+ params[:owned_only] ? query.owned_by_current_user_or_group_with_current_user : query
19
+ end
17
20
  .pluck(:id)
18
21
 
19
22
  @data = HostStatus.wreckingball_statuses.map do |status|
@@ -31,18 +34,20 @@ module ForemanWreckingball
31
34
  counter: {
32
35
  ok: counter[HostStatus::Global::OK] || 0,
33
36
  warning: counter[HostStatus::Global::WARN] || 0,
34
- critical: counter[HostStatus::Global::ERROR] || 0
35
- }
37
+ critical: counter[HostStatus::Global::ERROR] || 0,
38
+ },
36
39
  }
37
40
  end
38
41
  end
42
+ # rubocop:enable Metrics/AbcSize, Metrics/MethodLength
39
43
 
44
+ # rubocop:todo Metrics/AbcSize, Metrics/MethodLength, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
40
45
  def status_managed_hosts_dashboard
41
46
  vmware_compute_resources = Foreman::Model::Vmware.unscoped.all
42
47
 
43
48
  @errors = {}
44
49
 
45
- # NOTE The call to ComputeResource#vms may slow things down
50
+ # NOTE: The call to ComputeResource#vms may slow things down
46
51
  vms_by_compute_resource_id = vmware_compute_resources.each_with_object({}) do |cr, memo|
47
52
  memo[cr.id] = cr.vms.all
48
53
  rescue StandardError => e
@@ -68,7 +73,6 @@ module ForemanWreckingball
68
73
  .where(compute_resource: vmware_compute_resources)
69
74
  .try { |query| params[:owned_only] ? query.owned_by_current_user_or_group_with_current_user : query }
70
75
  .each do |host|
71
-
72
76
  compute_resources = @vm_compute_resource_mapping[host.uuid]
73
77
 
74
78
  if compute_resources.empty?
@@ -86,15 +90,20 @@ module ForemanWreckingball
86
90
  @compute_resource_authorizer = Authorizer.new(User.current, collection: vmware_compute_resources)
87
91
  @host_authorizer = Authorizer.new(User.current)
88
92
  end
93
+ # rubocop:enable Metrics/AbcSize, Metrics/MethodLength, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
89
94
 
90
95
  # ajax method
96
+ # rubocop:todo Metrics/AbcSize, Metrics/MethodLength
91
97
  def status_hosts
92
98
  @status = HostStatus.find_wreckingball_status_by_host_association(params.fetch(:status))
93
99
 
94
100
  all_hosts = Host.authorized(:view_hosts, Host)
95
101
  .joins(@status.host_association)
96
- .try { |query| params[:owned_only] ? query.owned_by_current_user_or_group_with_current_user : query }
97
- .includes(@status.host_association, :vmware_facet, :environment)
102
+ .try do |query|
103
+ params[:owned_only] ? query.owned_by_current_user_or_group_with_current_user : query
104
+ end
105
+ .includes([*(:environment if Host::Managed.reflect_on_environment?), @status.host_association,
106
+ :vmware_facet])
98
107
  .where.not('host_status.status': @status.global_ok_list)
99
108
  .preload(:owner)
100
109
  .order(:name)
@@ -105,12 +114,14 @@ module ForemanWreckingball
105
114
  respond_to do |format|
106
115
  format.json do
107
116
  Rabl::Renderer.json(@hosts, 'foreman_wreckingball/hosts/status_hosts',
108
- view_path: "#{ForemanWreckingball::Engine.root}/app/views",
109
- scope: self)
117
+ view_path: "#{ForemanWreckingball::Engine.root}/app/views",
118
+ scope: self)
110
119
  end
111
120
  end
112
121
  end
122
+ # rubocop:enable Metrics/AbcSize, Metrics/MethodLength
113
123
 
124
+ # rubocop:todo Metrics/AbcSize, Metrics/MethodLength
114
125
  def refresh_status_dashboard
115
126
  if ForemanTasks::Task.active.where(label: ::Actions::ForemanWreckingball::Vmware::ScheduleVmwareSync.to_s).empty?
116
127
  flash[:success] = _('Refresh Compute Resource data task was successfully scheduled.')
@@ -119,15 +130,18 @@ module ForemanWreckingball
119
130
  end
120
131
  redirect_to(foreman_tasks_task_path(task.id))
121
132
  else
122
- flash[:warning] = _('Refresh Compute Resource data task is already running. Please wait for the running task to finish.')
133
+ flash[:warning] =
134
+ _('Refresh Compute Resource data task is already running. Please wait for the running task to finish.')
123
135
  redirect_to status_dashboard_hosts_path
124
136
  end
125
137
  end
138
+ # rubocop:enable Metrics/AbcSize, Metrics/MethodLength
126
139
 
127
140
  def schedule_remediate
128
141
  @triggering = ForemanTasks::Triggering.new(mode: :immediate)
129
142
  end
130
143
 
144
+ # rubocop:todo Metrics/MethodLength
131
145
  def submit_remediate
132
146
  return not_found unless @statuses.any?
133
147
 
@@ -145,6 +159,7 @@ module ForemanWreckingball
145
159
 
146
160
  redirect_to foreman_tasks_task_path(task.id)
147
161
  end
162
+ # rubocop:enable Metrics/MethodLength
148
163
 
149
164
  private
150
165
 
@@ -158,6 +173,7 @@ module ForemanWreckingball
158
173
  @statuses_params ||= params.permit(:host_association, :owned_only, status_ids: [])
159
174
  end
160
175
 
176
+ # rubocop:todo Metrics/AbcSize, Metrics/MethodLength
161
177
  def find_statuses
162
178
  @statuses = begin
163
179
  host_association = statuses_params[:host_association]
@@ -166,7 +182,7 @@ module ForemanWreckingball
166
182
  Host.authorized(:remediate_vmware_status_hosts, Host)
167
183
  .joins(status_class.host_association)
168
184
  .includes(status_class.host_association)
169
- .try { |query| statuses_params[:owned_only] ? query.owned_by_current_user_or_group_with_current_user : query }
185
+ .try { |query| statuses_params[:owned_only] ? query.owned_by_current_user_or_group_with_current_user : query } # rubocop:disable Layout/LineLength
170
186
  .where.not('host_status.status': status_class.global_ok_list)
171
187
  .map { |host| host.send(status_class.host_association) }
172
188
  else
@@ -176,6 +192,7 @@ module ForemanWreckingball
176
192
  end
177
193
  end
178
194
  end
195
+ # rubocop:enable Metrics/AbcSize, Metrics/MethodLength
179
196
 
180
197
  def action_permission
181
198
  case params[:action]
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ForemanWreckingball
4
- module HostsHelperExtensions
4
+ module HostsHelper
5
5
  extend ActiveSupport::Concern
6
6
 
7
7
  def classes_for_vmware_status_row(counter)
@@ -8,7 +8,8 @@ module ForemanWreckingball
8
8
  elsif vmware_hypervisor_facet.provides_spectre_features?
9
9
  icon_text('ok', '', kind: 'pficon', title: _('CPU-Features are present on this host.'))
10
10
  else
11
- icon_text('error-circle-o', '', kind: 'pficon', title: _('Required CPU features are missing. This host is most likely vulnerable.'))
11
+ icon_text('error-circle-o', '', kind: 'pficon',
12
+ title: _('Required CPU features are missing. This host is most likely vulnerable.')) # rubocop:disable Layout/LineLength
12
13
  end
13
14
  end
14
15
  end
@@ -2,20 +2,22 @@
2
2
 
3
3
  module ForemanWreckingball
4
4
  module StatusesHelper
5
+ # rubocop:todo Metrics/MethodLength
5
6
  def status_actions(host_association, owned_only, supports_remediate)
6
7
  actions = []
7
8
  actions << display_link_if_authorized(_('Refresh'),
8
- hash_for_refresh_status_dashboard_hosts_path,
9
- title: _('Refresh Data'),
10
- method: :put)
9
+ hash_for_refresh_status_dashboard_hosts_path,
10
+ title: _('Refresh Data'),
11
+ method: :put)
11
12
  if supports_remediate
12
13
  actions << display_link_if_authorized(_('Remediate All'),
13
- hash_for_schedule_remediate_hosts_path,
14
- 'data-host-association': host_association,
15
- 'data-owned-only': owned_only,
16
- onClick: 'show_modal(this); return false;')
14
+ hash_for_schedule_remediate_hosts_path,
15
+ 'data-host-association': host_association,
16
+ 'data-owned-only': owned_only,
17
+ onClick: 'show_modal(this); return false;')
17
18
  end
18
19
  actions.reject(&:blank?)
19
20
  end
21
+ # rubocop:enable Metrics/MethodLength
20
22
  end
21
23
  end
@@ -2,8 +2,9 @@
2
2
 
3
3
  class UpdateHostsVmwareFacets < ApplicationJob
4
4
  after_perform do
5
- self.class.set(:wait => 12.hours).perform_later
5
+ self.class.set(wait: 12.hours).perform_later
6
6
  end
7
7
 
8
- def perform; end
8
+ def perform
9
+ end
9
10
  end
@@ -6,7 +6,10 @@ module Actions
6
6
  def plan(statuses)
7
7
  sequence do
8
8
  statuses.group_by(&:class).each do |statuses_klass, statuses_list|
9
- plan_action(::Actions::BulkAction, statuses_klass.remediate_action, statuses_list.map(&:host)) if statuses_klass.respond_to?(:remediate_action)
9
+ if statuses_klass.respond_to?(:remediate_action)
10
+ plan_action(::Actions::BulkAction, statuses_klass.remediate_action,
11
+ statuses_list.map(&:host))
12
+ end
10
13
  end
11
14
  end
12
15
  end
@@ -16,6 +16,7 @@ module Actions
16
16
  plan_self
17
17
  end
18
18
 
19
+ # rubocop:todo Metrics/AbcSize, Metrics/MethodLength
19
20
  def run
20
21
  host = ::Host.find(input[:host][:id])
21
22
 
@@ -29,7 +30,7 @@ module Actions
29
30
  if initially_powered_on
30
31
  vm.stop
31
32
  vm.wait_for { power_state == 'poweredOff' }
32
- fail _('Could not shut down VM.') if vm.ready?
33
+ raise _('Could not shut down VM.') if vm.ready?
33
34
  end
34
35
 
35
36
  vm.vm_upgrade_hardware
@@ -40,6 +41,7 @@ module Actions
40
41
  ensure
41
42
  vm.start if vm && initially_powered_on
42
43
  end
44
+ # rubocop:enable Metrics/AbcSize, Metrics/MethodLength
43
45
 
44
46
  def humanized_name
45
47
  _('Upgrade VM Hardware Version')
@@ -16,6 +16,7 @@ module Actions
16
16
  plan_self
17
17
  end
18
18
 
19
+ # rubocop:todo Metrics/AbcSize, Metrics/MethodLength
19
20
  def run
20
21
  host = ::Host.find(input[:host][:id])
21
22
 
@@ -27,7 +28,7 @@ module Actions
27
28
  if initially_powered_on
28
29
  vm.stop
29
30
  vm.wait_for { power_state == 'poweredOff' }
30
- fail _('Could not shut down VM.') if vm.ready?
31
+ raise _('Could not shut down VM.') if vm.ready?
31
32
  end
32
33
 
33
34
  vm.start if vm && initially_powered_on
@@ -35,6 +36,7 @@ module Actions
35
36
  state = host.refresh_vmware_facet!
36
37
  output[:state] = state
37
38
  end
39
+ # rubocop:enable Metrics/AbcSize, Metrics/MethodLength
38
40
 
39
41
  def humanized_name
40
42
  _('Power-Cycle VM')
@@ -16,11 +16,12 @@ module Actions
16
16
  plan_self
17
17
  end
18
18
 
19
+ # rubocop:todo Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/PerceivedComplexity
19
20
  def run
20
21
  host = ::Host.find(input[:host][:id])
21
22
 
22
- fail _('Foreman does not know the Architecture of this host.') unless host.architecture
23
- fail _('Foreman does not know the Operatingsystem of this host.') unless host.operatingsystem
23
+ raise _('Foreman does not know the Architecture of this host.') unless host.architecture
24
+ raise _('Foreman does not know the Operatingsystem of this host.') unless host.operatingsystem
24
25
 
25
26
  initially_powered_on = host.power.ready?
26
27
  output[:initially_powered_on] = initially_powered_on
@@ -29,11 +30,11 @@ module Actions
29
30
  current_os = VsphereOsIdentifiers.lookup(current_os_id)
30
31
 
31
32
  selectors = {
32
- :architecture => host.architecture.name,
33
- :osfamily => host.operatingsystem.family,
34
- :name => host.operatingsystem.name,
35
- :major => host.operatingsystem.major.to_i,
36
- :release => host.facts['os::release::full']
33
+ architecture: host.architecture.name,
34
+ osfamily: host.operatingsystem.family,
35
+ name: host.operatingsystem.name,
36
+ major: host.operatingsystem.major.to_i,
37
+ release: host.facts['os::release::full'],
37
38
  }
38
39
 
39
40
  desired_os = VsphereOsIdentifiers.find_by(selectors)
@@ -43,9 +44,11 @@ module Actions
43
44
  desired_os ||= VsphereOsIdentifiers.find_by(selectors.except(:major, :name))
44
45
  desired_os ||= VsphereOsIdentifiers.find_by(selectors.except(:major, :name, :release))
45
46
 
46
- fail _('Could not auto detect desired operatingsystem.') unless desired_os
47
+ raise _('Could not auto detect desired operatingsystem.') unless desired_os
47
48
 
48
- fail _('VMs current and desired OS (%s) already match. No update necessary.') % current_os.description if current_os == desired_os
49
+ if current_os == desired_os
50
+ raise _('VMs current and desired OS (%s) already match. No update necessary.') % current_os.description
51
+ end
49
52
 
50
53
  output[:old_operatingsystem] = current_os.description
51
54
  output[:old_operatingsystem_id] = current_os.id
@@ -57,7 +60,7 @@ module Actions
57
60
  if initially_powered_on
58
61
  vm.stop
59
62
  vm.wait_for { power_state == 'poweredOff' }
60
- fail _('Could not shut down VM.') if vm.ready?
63
+ raise _('Could not shut down VM.') if vm.ready?
61
64
  end
62
65
 
63
66
  vm.vm_reconfig_hardware('guestId' => desired_os.id)
@@ -67,6 +70,7 @@ module Actions
67
70
  ensure
68
71
  vm.start if vm && initially_powered_on
69
72
  end
73
+ # rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/PerceivedComplexity
70
74
 
71
75
  def humanized_name
72
76
  _('Correct VM Operatingsystem')
@@ -5,7 +5,7 @@ module Actions
5
5
  module Vmware
6
6
  class ScheduleVmwareSync < Actions::EntryAction
7
7
  def plan
8
- compute_resources = ComputeResource.where(:type => 'Foreman::Model::Vmware')
8
+ compute_resources = ComputeResource.where(type: 'Foreman::Model::Vmware')
9
9
  sequence do
10
10
  compute_resources.each do |compute_resource|
11
11
  plan_action(::Actions::ForemanWreckingball::Vmware::SyncComputeResource, compute_resource)
@@ -14,11 +14,11 @@ module Actions
14
14
  def run
15
15
  compute_resource = ComputeResource.find(input[:compute_resource][:id])
16
16
  ::ForemanWreckingball::VmwareClusterImporter.new(
17
- :compute_resource => compute_resource
17
+ compute_resource: compute_resource
18
18
  ).import!
19
19
 
20
20
  ::ForemanWreckingball::VmwareHypervisorImporter.new(
21
- :compute_resource => compute_resource.reload
21
+ compute_resource: compute_resource.reload
22
22
  ).import!
23
23
 
24
24
  compute_resource.hosts.each(&:refresh_vmware_facet!)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module FogExtensions
2
4
  module ForemanWreckingball
3
5
  module Vsphere
@@ -1,10 +1,12 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module FogExtensions
2
4
  module ForemanWreckingball
3
5
  module Vsphere
4
6
  module Mock
5
7
  extend ActiveSupport::Concern
6
8
 
7
- def vm_upgrade_hardware(version: nil, instance_uuid:)
9
+ def vm_upgrade_hardware(*)
8
10
  { 'task_state' => 'success' }
9
11
  end
10
12
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module FogExtensions
2
4
  module ForemanWreckingball
3
5
  module Vsphere
@@ -12,7 +14,10 @@ module FogExtensions
12
14
  end
13
15
 
14
16
  def list_hosts(filters = {})
15
- super.map { |h| h[:feature_capabilities] = h[:feature_capabilities].map(&:key); h }
17
+ super.map do |h|
18
+ h[:feature_capabilities] = h[:feature_capabilities].map(&:key)
19
+ h
20
+ end
16
21
  end
17
22
  end
18
23
 
@@ -20,7 +25,7 @@ module FogExtensions
20
25
  prepend Overrides
21
26
  end
22
27
 
23
- def vm_upgrade_hardware(version: nil, instance_uuid:)
28
+ def vm_upgrade_hardware(instance_uuid:, version: nil)
24
29
  vm_mob_ref = get_vm_ref(instance_uuid)
25
30
  task = vm_mob_ref.UpgradeVM_Task(version: version)
26
31
  task.wait_for_completion
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module FogExtensions
2
4
  module ForemanWreckingball
3
5
  module Vsphere
@@ -388,6 +388,20 @@ rhel7_64Guest:
388
388
  :name: RedHat
389
389
  :major: 7
390
390
  :since: 5.5
391
+ rhel8_64Guest:
392
+ :description: Red Hat Enterprise Linux 8 (64-bit)
393
+ :architecture: x86_64
394
+ :osfamily: Redhat
395
+ :name: RedHat
396
+ :major: 8
397
+ :since: 6.5
398
+ rhel9_64Guest:
399
+ :description: Red Hat Enterprise Linux 9 (64-bit)
400
+ :architecture: x86_64
401
+ :osfamily: Redhat
402
+ :name: RedHat
403
+ :major: 9
404
+ :since: 7.0
391
405
  sjdsGuest:
392
406
  :description: Sun Java Desktop System
393
407
  sles10Guest:
@@ -426,6 +440,13 @@ sles12_64Guest:
426
440
  :name: SLES
427
441
  :major: 12
428
442
  :since: 5.5
443
+ sles15_64Guest:
444
+ :description: SUSE Linux Enterprise 15 (64-bit)
445
+ :architecture: x86_64
446
+ :osfamily: Suse
447
+ :name: SLES
448
+ :major: 15
449
+ :since: 6.0
429
450
  sles64Guest:
430
451
  :description: SUSE Linux Enterprise 8/9 (64-bit)
431
452
  :architecture: x86_64
@@ -6,13 +6,19 @@ module ForemanWreckingball
6
6
  include ForemanTasks::Concerns::ActionSubject
7
7
 
8
8
  included do
9
- has_many :vmware_clusters, :class_name => 'ForemanWreckingball::VmwareCluster',
10
- :inverse_of => :compute_resource, :dependent => :destroy
9
+ has_many :vmware_clusters,
10
+ class_name: 'ForemanWreckingball::VmwareCluster',
11
+ inverse_of: :compute_resource, dependent: :destroy
11
12
 
12
- has_many :vmware_hypervisor_facets, :class_name => '::ForemanWreckingball::VmwareHypervisorFacet', :through => :vmware_clusters,
13
- :inverse_of => :compute_resource
13
+ has_many :vmware_hypervisor_facets,
14
+ class_name: '::ForemanWreckingball::VmwareHypervisorFacet',
15
+ through: :vmware_clusters,
16
+ inverse_of: :compute_resource
14
17
 
15
- has_many :hypervisor_hosts, :class_name => 'Host::Managed', :through => :vmware_hypervisor_facets, :source => :host, :inverse_of => :compute_resource
18
+ has_many :hypervisor_hosts,
19
+ class_name: 'Host::Managed',
20
+ through: :vmware_hypervisor_facets,
21
+ source: :host, inverse_of: :compute_resource
16
22
  end
17
23
 
18
24
  def action_input_key
@@ -7,15 +7,24 @@ module ForemanWreckingball
7
7
 
8
8
  included do
9
9
  ForemanWreckingball::Engine::WRECKINGBALL_STATUSES.map(&:constantize).each do |status|
10
- has_one(status.host_association, class_name: status.to_s,
11
- foreign_key: 'host_id',
12
- inverse_of: :host,
13
- dependent: :destroy)
10
+ has_one(
11
+ status.host_association,
12
+ class_name: status.to_s,
13
+ foreign_key: 'host_id',
14
+ inverse_of: :host,
15
+ dependent: :destroy
16
+ )
14
17
  end
15
18
 
19
+ # rubocop:disable Layout/LineLength
16
20
  scope :owned_by_current_user, -> { where(owner_type: 'User', owner_id: User.current.id) }
17
21
  scope :owned_by_group_with_current_user, -> { where(owner_type: 'Usergroup', owner_id: User.current.usergroup_ids_with_parents) }
18
22
  scope :owned_by_current_user_or_group_with_current_user, -> { owned_by_current_user.or(owned_by_group_with_current_user) }
23
+ # rubocop:enable Layout/LineLength
24
+
25
+ def self.reflect_on_environment?
26
+ reflect_on_association(:environment).present?
27
+ end
19
28
  end
20
29
 
21
30
  def action_input_key
@@ -4,21 +4,52 @@ module ForemanWreckingball
4
4
  module VmwareFacetHostExtensions
5
5
  extend ActiveSupport::Concern
6
6
 
7
+ # rubocop:disable Metrics/BlockLength
7
8
  included do
8
- has_one :vmware_facet, :class_name => '::ForemanWreckingball::VmwareFacet', :foreign_key => :host_id, :inverse_of => :host, :dependent => :destroy
9
+ has_one :vmware_facet,
10
+ class_name: '::ForemanWreckingball::VmwareFacet',
11
+ foreign_key: :host_id,
12
+ inverse_of: :host, dependent: :destroy
9
13
 
10
14
  before_provision :queue_vmware_facet_refresh
11
15
 
12
- scoped_search on: :hardware_version, relation: :vmware_facet, rename: :vsphere_hardware_version, complete_value: true, only_explicit: true
13
- scoped_search on: :guest_id, relation: :vmware_facet, rename: :vsphere_guest_id, complete_value: true, only_explicit: true
14
- scoped_search on: :cpus, relation: :vmware_facet, rename: :vsphere_cpus, complete_value: true, only_explicit: true
15
- scoped_search on: :corespersocket, relation: :vmware_facet, rename: :vsphere_corespersocket, complete_value: true, only_explicit: true
16
- scoped_search on: :memory_mb, relation: :vmware_facet, rename: :vsphere_memory_mb, complete_value: true, only_explicit: true
17
- scoped_search on: :power_state, relation: :vmware_facet, rename: :vsphere_power_state, only_explicit: true,
18
- complete_value: ForemanWreckingball::VmwareFacet::VALID_POWER_STATES.map { |status| [status, ForemanWreckingball::VmwareFacet.power_states[status]] }.to_h
19
- scoped_search on: :tools_state, relation: :vmware_facet, rename: :vsphere_tools_state, only_explicit: true,
20
- complete_value: ForemanWreckingball::VmwareFacet::VALID_GUEST_STATUSES.map { |status| [status, ForemanWreckingball::VmwareFacet.tools_states[status]] }.to_h
16
+ scoped_search on: :hardware_version,
17
+ relation: :vmware_facet,
18
+ rename: :vsphere_hardware_version,
19
+ complete_value: true,
20
+ only_explicit: true
21
+ scoped_search on: :guest_id,
22
+ relation: :vmware_facet,
23
+ rename: :vsphere_guest_id,
24
+ complete_value: true,
25
+ only_explicit: true
26
+ scoped_search on: :cpus,
27
+ relation: :vmware_facet,
28
+ rename: :vsphere_cpus,
29
+ complete_value: true,
30
+ only_explicit: true
31
+ scoped_search on: :corespersocket,
32
+ relation: :vmware_facet,
33
+ rename: :vsphere_corespersocket,
34
+ complete_value: true,
35
+ only_explicit: true
36
+ scoped_search on: :memory_mb,
37
+ relation: :vmware_facet,
38
+ rename: :vsphere_memory_mb,
39
+ complete_value: true,
40
+ only_explicit: true
41
+ scoped_search on: :power_state,
42
+ relation: :vmware_facet,
43
+ rename: :vsphere_power_state,
44
+ only_explicit: true,
45
+ complete_value: ForemanWreckingball::VmwareFacet::VALID_POWER_STATES.map { |status| [status, ForemanWreckingball::VmwareFacet.power_states[status]] }.to_h # rubocop:todo Rails/IndexWith, Layout/LineLength
46
+ scoped_search on: :tools_state,
47
+ relation: :vmware_facet,
48
+ rename: :vsphere_tools_state,
49
+ only_explicit: true,
50
+ complete_value: ForemanWreckingball::VmwareFacet::VALID_GUEST_STATUSES.map { |status| [status, ForemanWreckingball::VmwareFacet.tools_states[status]] }.to_h # rubocop:todo Rails/IndexWith, Layout/LineLength
21
51
  end
52
+ # rubocop:enable Metrics/BlockLength
22
53
 
23
54
  def refresh_vmware_facet!
24
55
  facet = vmware_facet || build_vmware_facet
@@ -31,7 +62,7 @@ module ForemanWreckingball
31
62
  User.as_anonymous_admin do
32
63
  ForemanTasks.delay(
33
64
  ::Actions::ForemanWreckingball::Host::RefreshVmwareFacet,
34
- { :start_at => Time.now.utc + 5.minutes },
65
+ { start_at: Time.now.utc + 5.minutes },
35
66
  self
36
67
  )
37
68
  end
@@ -5,8 +5,12 @@ module ForemanWreckingball
5
5
  extend ActiveSupport::Concern
6
6
 
7
7
  included do
8
- has_one :vmware_hypervisor_facet, :class_name => '::ForemanWreckingball::VmwareHypervisorFacet', :foreign_key => :host_id, :inverse_of => :host, :dependent => :destroy
9
- has_one :vmware_cluster, :through => :vmware_hypervisor_facet
8
+ has_one :vmware_hypervisor_facet,
9
+ class_name: '::ForemanWreckingball::VmwareHypervisorFacet',
10
+ foreign_key: :host_id,
11
+ inverse_of: :host,
12
+ dependent: :destroy
13
+ has_one :vmware_cluster, through: :vmware_hypervisor_facet
10
14
  end
11
15
  end
12
16
  end