foreman_opennebula 3.2.0 → 4.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c48a6d24abe1e59d488b278f70f0d7531f943e75c526c4365c3055aa36977634
4
- data.tar.gz: 96d5d5e61d383a2af6e5fa221ac126346e69edf0f714f28aab18427c29c5e61b
3
+ metadata.gz: 389abccd5f2af42af967c246d67a4eff2a4bec11bbe324f32b4cfd92a7e122a8
4
+ data.tar.gz: ddd3e3165beb117d8747446ca84e129b6433668eecb3cc6314a36106281c6ad8
5
5
  SHA512:
6
- metadata.gz: c069c85d6a9fed4f8d9f059845eed3a151eebf0675cae9ec96d8cd28a11aa4874d6f6d83df5f6d29ee45afa17b53734502dc39e0ec21a9985bc9ea95e3cd88bf
7
- data.tar.gz: d8bab1c6c864aeffb797c2904b81d033d1baa4e873232eb5c64d09edd7c39c0ce3521a1a52bf196faca6ae95a347cabf6046c97230c783e84029958e71e4bb1a
6
+ metadata.gz: d62697a9f90de90b2ea2d625230f5aa1840f545f88f7a0a53402376d7887f1ee1a3f3837651ab978e819a0a8b6d733ad03bf4d937a4522a8fe4595ce618b6108
7
+ data.tar.gz: a666da078620bdbec8f90a5cba22147809164539b78d4d63359ef3d0249b5861efb0756ed5d5fc341b197f6e77f2bc60dadda55101505cc39cc88f73f3e9fa08
data/README.md CHANGED
@@ -7,13 +7,15 @@ This plugin enables managing of OpenNebula as a Compute Resource in Foreman.
7
7
  See [How_to_Install_a_Plugin](http://projects.theforeman.org/projects/foreman/wiki/How_to_Install_a_Plugin)
8
8
  for how to install Foreman plugins
9
9
 
10
- 1. Apply the DB migrations.
10
+ 1. Apply the database migrations.
11
11
  2. Create a compute resource.
12
- 3. For every Foreman subnet select a corresponding OpenNebula network.
12
+ 3. Select an OpenNebula network on the subnet configuration page.
13
+
14
+ To use the console, install the websockify Python module.
13
15
 
14
16
  ## Copyright
15
17
 
16
- Copyright (c) 2024 IVI.RU LLC
18
+ Copyright (c) 2025 IVI.RU LLC
17
19
 
18
20
  This program is free software: you can redistribute it and/or modify
19
21
  it under the terms of the GNU General Public License as published by
@@ -13,13 +13,15 @@ module ForemanOpennebula
13
13
  Foreman::Gettext::Support.add_text_domain locale_domain, locale_dir
14
14
  end
15
15
 
16
- initializer 'foreman_opennebula.register_plugin', :before => :finisher_hook do |_app|
17
- Foreman::Plugin.register :foreman_opennebula do
18
- requires_foreman '>= 3.7'
19
- compute_resource ForemanOpennebula::Opennebula
20
- register_global_js_file 'global'
16
+ initializer 'foreman_opennebula.register_plugin', :before => :finisher_hook do |app|
17
+ app.reloader.to_prepare do
18
+ Foreman::Plugin.register :foreman_opennebula do
19
+ requires_foreman '>= 3.14.0'
20
+ compute_resource ForemanOpennebula::Opennebula
21
+ register_global_js_file 'global'
21
22
 
22
- parameter_filter Subnet, :opennebula_vnet
23
+ parameter_filter Subnet, :opennebula_vnet
24
+ end
23
25
  end
24
26
  end
25
27
 
@@ -1,3 +1,3 @@
1
1
  module ForemanOpennebula
2
- VERSION = '3.2.0'.freeze
2
+ VERSION = '4.0.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: foreman_opennebula
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.2.0
4
+ version: 4.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vitaly Pyslar
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2025-09-09 00:00:00.000000000 Z
10
+ date: 2025-09-12 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: rake
@@ -135,13 +135,9 @@ files:
135
135
  - app/assets/javascripts/foreman_opennebula/vmgroup_selected.js
136
136
  - app/controllers/foreman_opennebula/hosts_controller.rb
137
137
  - app/helpers/concerns/foreman_opennebula/form_helper_extensions.rb
138
- - app/helpers/concerns/foreman_opennebula/hosts_helper_extensions.rb
139
138
  - app/models/concerns/fog_extensions/open_nebula/flavor.rb
140
139
  - app/models/concerns/fog_extensions/open_nebula/interface.rb
141
140
  - app/models/concerns/fog_extensions/open_nebula/server.rb
142
- - app/models/concerns/fog_extensions/opennebula/flavor.rb
143
- - app/models/concerns/fog_extensions/opennebula/interface.rb
144
- - app/models/concerns/fog_extensions/opennebula/server.rb
145
141
  - app/models/concerns/foreman_opennebula/key_pair_compute_resource.rb
146
142
  - app/models/foreman_opennebula/opennebula.rb
147
143
  - app/overrides/subnets/_fields/opennebula_fields.html.erb.deface
@@ -150,7 +146,6 @@ files:
150
146
  - app/views/compute_resources/show/_opennebula.html.erb
151
147
  - app/views/compute_resources_vms/form/opennebula/_base.html.erb
152
148
  - app/views/compute_resources_vms/form/opennebula/_custom_attribute.html.erb
153
- - app/views/compute_resources_vms/form/opennebula/_network.html.erb
154
149
  - app/views/compute_resources_vms/form/opennebula/_scheduler_hint_data.html.erb
155
150
  - app/views/compute_resources_vms/form/opennebula/_vmgroup_role.html.erb
156
151
  - app/views/compute_resources_vms/index/_opennebula.html.erb
@@ -1,20 +0,0 @@
1
- module ForemanOpennebula
2
- module HostsHelperExtensions
3
- extend ActiveSupport::Concern
4
-
5
- included do
6
- def provider_partial_exist?(compute_resource, partial)
7
- return false unless compute_resource
8
-
9
- compute_resource_name = compute_resource.provider.downcase
10
-
11
- return false if controller_name == 'compute_attributes' &&
12
- compute_resource_name == 'opennebula' && partial == 'network'
13
-
14
- ActionController::Base.view_paths.any? do |path|
15
- File.exist?(File.join(path, 'compute_resources_vms', 'form', compute_resource_name, "_#{partial}.html.erb"))
16
- end
17
- end
18
- end
19
- end
20
- end
@@ -1,109 +0,0 @@
1
- module FogExtensions
2
- module OpenNebula
3
- module Flavor
4
- extend ActiveSupport::Concern
5
-
6
- included do
7
- attribute :cpu_model
8
- attribute :nic_default
9
- attribute :pci
10
- attribute :vmgroup
11
- attribute :template_id
12
-
13
- def to_s
14
- '' + get_cpu \
15
- + get_vcpu \
16
- + get_memory \
17
- + get_disk \
18
- + get_nic \
19
- + get_os \
20
- + get_graphics \
21
- + get_pci \
22
- + get_raw \
23
- + get_sched_requirements \
24
- + get_sched_ds_requirements \
25
- + get_sched_rank \
26
- + get_sched_ds_rank \
27
- + get_context \
28
- + get_user_variables \
29
- + get_cpu_model \
30
- + get_nic_default \
31
- + get_vmgroup \
32
- + get_template_id
33
- end
34
-
35
- def get_cpu_model
36
- return '' unless attributes[:cpu_model]
37
-
38
- ret = "CPU_MODEL=#{attributes[:cpu_model]}\n"
39
- ret.tr!('{', '[')
40
- ret.tr!('}', ']')
41
- ret.delete!('>')
42
- ret
43
- end
44
-
45
- def get_nic_default
46
- return '' unless attributes[:nic_default]
47
-
48
- ret = "NIC_DEFAULT=#{attributes[:nic_default]}\n"
49
- ret.tr!('{', '[')
50
- ret.tr!('}', ']')
51
- ret.delete!('>')
52
- ret
53
- end
54
-
55
- def get_vmgroup
56
- return '' unless attributes[:vmgroup]
57
-
58
- ret = "VMGROUP=#{attributes[:vmgroup]}\n"
59
- ret.tr!('{', '[')
60
- ret.tr!('}', ']')
61
- ret.delete!('>')
62
- ret
63
- end
64
-
65
- def get_template_id
66
- return '' unless attributes[:template_id]
67
-
68
- ret = "TEMPLATE_ID=#{attributes[:template_id]}\n"
69
- ret.tr!('{', '[')
70
- ret.tr!('}', ']')
71
- ret.delete!('>')
72
- ret
73
- end
74
-
75
- def get_nic
76
- return '' if nic.nil?
77
-
78
- ret = ''
79
- if nic.is_a? Array
80
- nic.each do |n|
81
- next if n.vnet.nil?
82
- val = [%(MODEL="#{n.model}"), %(NETWORK_ID="#{n.vnet.id}")]
83
- val << %(IP="#{n.ip}") if n.ip.present?
84
- ret += %(NIC=[#{val.join(',')}]\n)
85
- end
86
- end
87
- ret
88
- end
89
-
90
- def get_pci
91
- return '' unless attributes[:pci]
92
-
93
- ret = ''
94
- if attributes[:pci].is_a? Array
95
- attributes[:pci].each do |pci|
96
- ret += "PCI=#{pci}\n"
97
- end
98
- else
99
- ret = "PCI=#{attributes[:pci]}\n"
100
- end
101
- ret.tr!('{', '[')
102
- ret.tr!('}', ']')
103
- ret.delete!('>')
104
- ret
105
- end
106
- end
107
- end
108
- end
109
- end
@@ -1,11 +0,0 @@
1
- module FogExtensions
2
- module OpenNebula
3
- module Interface
4
- extend ActiveSupport::Concern
5
-
6
- included do
7
- attribute :ip
8
- end
9
- end
10
- end
11
- end
@@ -1,135 +0,0 @@
1
- module FogExtensions
2
- module OpenNebula
3
- module Server
4
- extend ActiveSupport::Concern
5
- include ActionView::Helpers::NumberHelper
6
-
7
- attr_writer :template_id, :image_id, :disk_size, :vmgroup_id,
8
- :vmgroup_role, :scheduler_hint_filter, :scheduler_hint_data
9
-
10
- included do
11
- def cpu
12
- onevm_object.present? ? onevm_object['TEMPLATE/CPU'] : attributes[:cpu]
13
- end
14
-
15
- def vcpu
16
- onevm_object.present? ? onevm_object['TEMPLATE/VCPU'] : attributes[:vcpu]
17
- end
18
-
19
- def start
20
- onevm_object.resume
21
- end
22
-
23
- def stop
24
- onevm_object.poweroff(true)
25
- end
26
- end
27
-
28
- def reboot
29
- onevm_object.reboot
30
- true
31
- end
32
-
33
- def reset
34
- onevm_object.reboot(true)
35
- true
36
- end
37
-
38
- def template_id
39
- onevm_object.present? ? onevm_object['TEMPLATE/TEMPLATE_ID'] : @template_id
40
- end
41
-
42
- def vmgroup_id
43
- onevm_object.present? ? onevm_object['TEMPLATE/VMGROUP/VMGROUP_ID'] : @vmgroup_id
44
- end
45
-
46
- def vmgroup_role
47
- onevm_object.present? ? onevm_object['TEMPLATE/VMGROUP/ROLE'] : @vmgroup_role
48
- end
49
-
50
- def sched_requirements
51
- return unless onevm_object
52
- onevm_object['USER_TEMPLATE/SCHED_REQUIREMENTS']
53
- end
54
-
55
- def scheduler_hint_filter
56
- if sched_requirements
57
- case sched_requirements
58
- when /^CLUSTER_ID = \d+$/
59
- 'Cluster'
60
- when /^ID = \d+$/
61
- 'Host'
62
- else
63
- 'Raw'
64
- end
65
- else
66
- @scheduler_hint_filter
67
- end
68
- end
69
-
70
- def scheduler_hint_data
71
- if sched_requirements
72
- scheduler_hint_filter == 'Raw' ? sched_requirements : sched_requirements[/\d+/]
73
- else
74
- @scheduler_hint_data
75
- end
76
- end
77
-
78
- def disks
79
- return if onevm_object.nil?
80
- [onevm_object.to_hash['VM']['TEMPLATE']['DISK']].flatten.compact.map do |disk|
81
- OpenStruct.new(disk.transform_keys(&:downcase))
82
- end
83
- end
84
-
85
- def image_id
86
- disks.try(:first).try(:image_id) || @image_id
87
- end
88
-
89
- def disk_size
90
- disks.try(:first).try(:size) || @disk_size
91
- end
92
-
93
- def interfaces
94
- [onevm_object.to_hash['VM']['TEMPLATE']['NIC']].flatten.compact.map do |nic|
95
- OpenStruct.new(nic.transform_keys(&:downcase))
96
- end
97
- end
98
-
99
- def select_nic(fog_nics, nic)
100
- fog_nics.detect { |fn| fn.network_id == nic.compute_attributes['vnet'] }
101
- end
102
-
103
- def host
104
- onevm_object['HISTORY_RECORDS/HISTORY[last()]/HOSTNAME']
105
- end
106
-
107
- def sched_message
108
- onevm_object['USER_TEMPLATE/SCHED_MESSAGE']
109
- end
110
-
111
- def display
112
- graphics = onevm_object.to_hash['VM']['TEMPLATE']['GRAPHICS']
113
- graphics['TYPE'].downcase!
114
- graphics.transform_keys(&:downcase).symbolize_keys
115
- end
116
-
117
- def poweroff?
118
- (status == 8)
119
- end
120
-
121
- def to_s
122
- name
123
- end
124
-
125
- def vm_description
126
- _('%{cpu} CPU, %{vcpu} VCPU, %{memory} memory and %{disk} disk') % {
127
- :cpu => cpu,
128
- :vcpu => vcpu,
129
- :memory => number_to_human_size(memory.to_i.megabytes),
130
- :disk => number_to_human_size(disk_size.to_i.megabytes)
131
- }
132
- end
133
- end
134
- end
135
- end
@@ -1,2 +0,0 @@
1
- <%= select_f f, :vnet, compute_resource.available_networks, :id, :name, { :include_blank => true },
2
- { :label => _('Network'), :label_size => "col-md-3", :size => "col-md-8" } %>