foreman_ovirt 0.3.0 → 2.0.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 (69) hide show
  1. checksums.yaml +7 -0
  2. data/{LICENSE.txt → LICENSE} +0 -2
  3. data/README.md +140 -0
  4. data/Rakefile +37 -43
  5. data/app/assets/javascripts/foreman_ovirt/display.js +10 -0
  6. data/app/assets/javascripts/foreman_ovirt/host_edit.js +61 -0
  7. data/app/assets/javascripts/foreman_ovirt/nic_info.js +3 -0
  8. data/app/assets/javascripts/foreman_ovirt/ovirt.js +261 -0
  9. data/app/controllers/concerns/foreman_ovirt/compute_resources_vms_controller.rb +29 -0
  10. data/app/controllers/concerns/foreman_ovirt/parameters_extension.rb +35 -0
  11. data/app/controllers/foreman_ovirt/concerns/compute_resources_controller_extensions.rb +60 -0
  12. data/app/helpers/ovirt_compute_resource_helper.rb +26 -0
  13. data/app/models/concerns/fog_extensions/ovirt/server.rb +42 -0
  14. data/app/models/concerns/fog_extensions/ovirt/template.rb +14 -0
  15. data/app/models/concerns/fog_extensions/ovirt/volume.rb +11 -0
  16. data/app/models/foreman_ovirt/ovirt.rb +752 -0
  17. data/app/views/api/v2/compute_resources/ovirt.json.rabl +1 -0
  18. data/app/views/compute_resources/form/_ovirt.html.erb +14 -0
  19. data/app/views/compute_resources/show/_ovirt.html.erb +16 -0
  20. data/app/views/compute_resources_vms/form/ovirt/_base.html.erb +83 -0
  21. data/app/views/compute_resources_vms/form/ovirt/_network.html.erb +32 -0
  22. data/app/views/compute_resources_vms/form/ovirt/_volume.html.erb +16 -0
  23. data/app/views/compute_resources_vms/index/_ovirt.html.erb +12 -0
  24. data/app/views/compute_resources_vms/index/_ovirt_json.erb +6 -0
  25. data/app/views/compute_resources_vms/show/_ovirt.html.erb +55 -0
  26. data/app/views/images/form/_ovirt.html.erb +4 -0
  27. data/config/routes.rb +8 -13
  28. data/db/migrate/20250810212811_update_legacy_ovirt_compute_resource_type.rb +21 -0
  29. data/lib/foreman_ovirt/engine.rb +70 -0
  30. data/lib/foreman_ovirt/version.rb +3 -0
  31. data/lib/foreman_ovirt.rb +2 -1
  32. data/lib/tasks/foreman_ovirt_tasks.rake +30 -0
  33. data/locale/Makefile +73 -0
  34. data/locale/en/foreman_ovirt.po +19 -0
  35. data/locale/foreman_ovirt.pot +19 -0
  36. data/locale/gemspec.rb +2 -0
  37. data/package.json +39 -0
  38. data/test/factories/foreman_ovirt_factories.rb +5 -0
  39. data/test/test_plugin_helper.rb +6 -0
  40. data/test/unit/foreman_ovirt_test.rb +11 -0
  41. data/webpack/components/extensions/HostDetails/DetailsTabCards/OvirtCard.js +132 -0
  42. data/webpack/components/ovirt.js +20 -0
  43. data/webpack/global_index.js +14 -0
  44. data/webpack/global_test_setup.js +11 -0
  45. data/webpack/index.js +1 -0
  46. data/webpack/test_setup.js +17 -0
  47. metadata +157 -128
  48. data/.document +0 -5
  49. data/Gemfile +0 -14
  50. data/Gemfile.lock +0 -33
  51. data/README.rdoc +0 -20
  52. data/VERSION +0 -1
  53. data/app/controllers/foreman_ovirt/auth_source_ovirts_controller.rb +0 -57
  54. data/app/controllers/foreman_ovirt/dashboard_controller.rb +0 -10
  55. data/app/controllers/foreman_ovirt/hosts_controller.rb +0 -17
  56. data/app/models/foreman_ovirt/auth_source_ovirt.rb +0 -78
  57. data/app/models/foreman_ovirt/user_extensions.rb +0 -26
  58. data/app/views/foreman_ovirt/auth_source_ovirts/_form.html.erb +0 -17
  59. data/app/views/foreman_ovirt/auth_source_ovirts/edit.html.erb +0 -3
  60. data/app/views/foreman_ovirt/auth_source_ovirts/index.html.erb +0 -22
  61. data/app/views/foreman_ovirt/auth_source_ovirts/new.html.erb +0 -3
  62. data/app/views/foreman_ovirt/auth_source_ovirts/welcome.html.erb +0 -8
  63. data/app/views/foreman_ovirt/hosts/_overview.html.erb +0 -27
  64. data/app/views/foreman_ovirt/hosts/show.html.erb +0 -48
  65. data/app/views/foreman_ovirt/hosts/show_graphs.html.erb +0 -13
  66. data/app/views/layouts/application_ovirt.html.erb +0 -36
  67. data/config/initializers/ovirt_setup.rb +0 -30
  68. data/foreman_ovirt.gemspec +0 -74
  69. data/lib/engine.rb +0 -9
@@ -0,0 +1,60 @@
1
+ module ForemanOvirt
2
+ module Concerns
3
+ module ComputeResourcesControllerExtensions
4
+ extend ActiveSupport::Concern
5
+
6
+ prepended do
7
+ before_action :change_datacenter_to_uuid, only: [:create, :update]
8
+ rescue_from ::ProxyAPI::Ovirt::Unauthorized, with: :render_ovirt_unauthorized_error
9
+ end
10
+
11
+ def available_clusters
12
+ organization = find_organization_by_id_or_name(params[:organization_id], params[:organization_name])
13
+ location = find_location_by_id_or_name(params[:location_id], params[:location_name])
14
+ proxy = find_resource(params[:id], [organization, location].compact, ::ProxyAPI::Ovirt)
15
+ render json: proxy.clusters
16
+ rescue Foreman::Exception => e
17
+ render_error e.message, status: :not_found
18
+ end
19
+
20
+ def available_vnic_profiles
21
+ organization = find_organization_by_id_or_name(params[:organization_id], params[:organization_name])
22
+ location = find_location_by_id_or_name(params[:location_id], params[:location_name])
23
+ proxy = find_resource(params[:id], [organization, location].compact, ::ProxyAPI::Ovirt)
24
+ render json: proxy.vnic_profiles(params[:network_id])
25
+ rescue Foreman::Exception => e
26
+ render_error e.message, status: :not_found
27
+ end
28
+
29
+ def action_permission
30
+ case params[:action]
31
+ when 'available_clusters', 'available_vnic_profiles'
32
+ :view
33
+ else
34
+ super
35
+ end
36
+ end
37
+
38
+ private
39
+
40
+ def change_datacenter_to_uuid
41
+ return unless params[:compute_resource] && params[:compute_resource][:provider] == 'Ovirt' && params[:compute_resource][:datacenter]
42
+ proxy = find_resource(params[:id]) if params[:id].present?
43
+ proxy ||= ::ProxyAPI::Ovirt.new(
44
+ url: params[:compute_resource][:url],
45
+ user: params[:compute_resource][:user],
46
+ password: params[:compute_resource][:password]
47
+ )
48
+ uuid = proxy.datacenter_uuid_by_name(params[:compute_resource][:datacenter])
49
+ params[:compute_resource][:datacenter] = uuid
50
+ rescue ::ProxyAPI::Ovirt::Unauthorized
51
+ rescue Foreman::Exception => e
52
+ render_error e.message, status: :not_found
53
+ end
54
+
55
+ def render_ovirt_unauthorized_error
56
+ render_error "401 Unauthorized", status: :unauthorized
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,26 @@
1
+ module OvirtComputeResourceHelper
2
+ # Really counting vms is as expensive as loading them all, especially when
3
+ # a filter is in place. So we create a fake count to get table pagination to work.
4
+ def ovirt_fake_vms_count
5
+ params['start'].to_i + 1 + [@vms.length, params['length'].to_i].min
6
+ end
7
+
8
+ def ovirt_storage_domains_for_select(compute_resource)
9
+ compute_resource.storage_domains.map { |sd| OpenStruct.new({ id: sd.id, label: "#{sd.name} (" + _("Available") + ": #{sd.available.to_i / 1.gigabyte} GiB, " + _("Used") + ": #{sd.used.to_i / 1.gigabyte} GiB)" }) }
10
+ end
11
+
12
+ def ovirt_vms_data
13
+ data = @vms.map do |vm|
14
+ [
15
+ link_to_if_authorized(html_escape(vm.name), hash_for_compute_resource_vm_path(:compute_resource_id => @compute_resource, :id => vm.id).merge(:auth_object => @compute_resource, :auth_action => 'view', :authorizer => authorizer)),
16
+ vm.cores,
17
+ number_to_human_size(vm.memory),
18
+ "<span #{vm_power_class(vm.ready?)}>#{vm_state(vm)}</span>",
19
+ action_buttons(vm_power_action(vm, authorizer),
20
+ vm_import_action(vm), vm_associate_link(vm),
21
+ display_delete_if_authorized(hash_for_compute_resource_vm_path(:compute_resource_id => @compute_resource, :id => vm.id).merge(:auth_object => @compute_resource, :authorizer => authorizer))),
22
+ ]
23
+ end
24
+ JSON.fast_generate(data).html_safe
25
+ end
26
+ end
@@ -0,0 +1,42 @@
1
+ module FogExtensions
2
+ module Ovirt
3
+ module Server
4
+ extend ActiveSupport::Concern
5
+
6
+ include ActionView::Helpers::NumberHelper
7
+
8
+ attr_accessor :image_id
9
+
10
+ def to_s
11
+ name
12
+ end
13
+
14
+ def state
15
+ status
16
+ end
17
+
18
+ def interfaces_attributes=(attrs)
19
+ end
20
+
21
+ def volumes_attributes=(attrs)
22
+ end
23
+
24
+ def poweroff
25
+ service.vm_action(:id => id, :action => :shutdown)
26
+ end
27
+
28
+ def reset
29
+ reboot
30
+ end
31
+
32
+ def vm_description
33
+ _("%{cores} Cores and %{memory} memory") % {:cores => cores, :memory => number_to_human_size(memory.to_i)}
34
+ end
35
+
36
+ def select_nic(fog_nics, nic)
37
+ nic_network = @service.list_networks(@attributes[:cluster]).detect { |n| n.name == nic.compute_attributes['network'] }.try(:id) || nic.compute_attributes['network']
38
+ fog_nics.detect { |fn| fn.network == nic_network } # grab any nic on the same network
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,14 @@
1
+ module FogExtensions
2
+ module Ovirt
3
+ module Template
4
+ def full_name
5
+ version = full_version.present? ? " (#{full_version})" : ""
6
+ "#{name}#{version}"
7
+ end
8
+
9
+ def full_version
10
+ version.version_name.presence || version.version_number
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,11 @@
1
+ module FogExtensions
2
+ module Ovirt
3
+ module Volume
4
+ extend ActiveSupport::Concern
5
+ def as_json(options = { })
6
+ size_gb
7
+ super options
8
+ end
9
+ end
10
+ end
11
+ end