foreman_opennebula 2.3.0 → 3.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 +4 -4
- data/README.md +4 -0
- data/app/models/concerns/fog_extensions/open_nebula/flavor.rb +111 -0
- data/app/models/concerns/fog_extensions/open_nebula/interface.rb +11 -0
- data/app/models/concerns/fog_extensions/open_nebula/server.rb +135 -0
- data/app/models/foreman_opennebula/opennebula.rb +11 -0
- data/app/overrides/subnets/_fields/opennebula_fields.html.erb.deface +4 -0
- data/db/migrate/20241120000000_add_opennebula_vnet_to_subnets.foreman_opennebula.rb +5 -0
- data/lib/foreman_opennebula/engine.rb +11 -5
- data/lib/foreman_opennebula/version.rb +1 -1
- data/lib/foreman_opennebula.rb +1 -0
- data/package.json +1 -1
- metadata +66 -9
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: dda5882a295555eb9c4e145959787fee3af1c522681ac2ca1d7d85ae35ac4d14
|
|
4
|
+
data.tar.gz: 7f9a76c97effc394aed06300c501ddeaf09d7a706fab6f2e28d4a228cc9147b2
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 1f2011131086920a71f02a797d545e9d097cb3c05a042106015dd2bdc25b9bc5d4eb7a0300095bfbacf4cea459608e3126eec1dfdf21cc28d7dc908cc78ff582
|
|
7
|
+
data.tar.gz: 7916313a9f48a3c22753030a29e0a0eeb9047a8d124dd3d211a0ed2285cd2b5e01e49c5254bb2cf547883687e0df313eb310f31e69bba22f1b125c803df76189
|
data/README.md
CHANGED
|
@@ -7,6 +7,10 @@ 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.
|
|
11
|
+
2. Create a compute resource.
|
|
12
|
+
3. For every Foreman subnet select a corresponding OpenNebula network.
|
|
13
|
+
|
|
10
14
|
## Copyright
|
|
11
15
|
|
|
12
16
|
Copyright (c) 2024 IVI.RU LLC
|
|
@@ -0,0 +1,111 @@
|
|
|
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
|
+
# rubocop:disable Style/StringConcatenation
|
|
14
|
+
def to_s
|
|
15
|
+
'' + get_cpu \
|
|
16
|
+
+ get_vcpu \
|
|
17
|
+
+ get_memory \
|
|
18
|
+
+ get_disk \
|
|
19
|
+
+ get_nic \
|
|
20
|
+
+ get_os \
|
|
21
|
+
+ get_graphics \
|
|
22
|
+
+ get_pci \
|
|
23
|
+
+ get_raw \
|
|
24
|
+
+ get_sched_requirements \
|
|
25
|
+
+ get_sched_ds_requirements \
|
|
26
|
+
+ get_sched_rank \
|
|
27
|
+
+ get_sched_ds_rank \
|
|
28
|
+
+ get_context \
|
|
29
|
+
+ get_user_variables \
|
|
30
|
+
+ get_cpu_model \
|
|
31
|
+
+ get_nic_default \
|
|
32
|
+
+ get_vmgroup \
|
|
33
|
+
+ get_template_id
|
|
34
|
+
end
|
|
35
|
+
# rubocop:enable Style/StringConcatenation
|
|
36
|
+
|
|
37
|
+
def get_cpu_model
|
|
38
|
+
return '' unless attributes[:cpu_model]
|
|
39
|
+
|
|
40
|
+
ret = "CPU_MODEL=#{attributes[:cpu_model]}\n"
|
|
41
|
+
ret.tr!('{', '[')
|
|
42
|
+
ret.tr!('}', ']')
|
|
43
|
+
ret.delete!('>')
|
|
44
|
+
ret
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def get_nic_default
|
|
48
|
+
return '' unless attributes[:nic_default]
|
|
49
|
+
|
|
50
|
+
ret = "NIC_DEFAULT=#{attributes[:nic_default]}\n"
|
|
51
|
+
ret.tr!('{', '[')
|
|
52
|
+
ret.tr!('}', ']')
|
|
53
|
+
ret.delete!('>')
|
|
54
|
+
ret
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def get_vmgroup
|
|
58
|
+
return '' unless attributes[:vmgroup]
|
|
59
|
+
|
|
60
|
+
ret = "VMGROUP=#{attributes[:vmgroup]}\n"
|
|
61
|
+
ret.tr!('{', '[')
|
|
62
|
+
ret.tr!('}', ']')
|
|
63
|
+
ret.delete!('>')
|
|
64
|
+
ret
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def get_template_id
|
|
68
|
+
return '' unless attributes[:template_id]
|
|
69
|
+
|
|
70
|
+
ret = "TEMPLATE_ID=#{attributes[:template_id]}\n"
|
|
71
|
+
ret.tr!('{', '[')
|
|
72
|
+
ret.tr!('}', ']')
|
|
73
|
+
ret.delete!('>')
|
|
74
|
+
ret
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def get_nic
|
|
78
|
+
return '' if nic.nil?
|
|
79
|
+
|
|
80
|
+
ret = ''
|
|
81
|
+
if nic.is_a? Array
|
|
82
|
+
nic.each do |n|
|
|
83
|
+
next if n.vnet.nil?
|
|
84
|
+
val = [%(MODEL="#{n.model}"), %(NETWORK_ID="#{n.vnet.id}")]
|
|
85
|
+
val << %(IP="#{n.ip}") if n.ip.present?
|
|
86
|
+
ret += %(NIC=[#{val.join(',')}]\n)
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
ret
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def get_pci
|
|
93
|
+
return '' unless attributes[:pci]
|
|
94
|
+
|
|
95
|
+
ret = ''
|
|
96
|
+
if attributes[:pci].is_a? Array
|
|
97
|
+
attributes[:pci].each do |pci|
|
|
98
|
+
ret += "PCI=#{pci}\n"
|
|
99
|
+
end
|
|
100
|
+
else
|
|
101
|
+
ret = "PCI=#{attributes[:pci]}\n"
|
|
102
|
+
end
|
|
103
|
+
ret.tr!('{', '[')
|
|
104
|
+
ret.tr!('}', ']')
|
|
105
|
+
ret.delete!('>')
|
|
106
|
+
ret
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
end
|
|
@@ -0,0 +1,135 @@
|
|
|
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
|
|
@@ -207,8 +207,19 @@ module ForemanOpennebula
|
|
|
207
207
|
associate_by('mac', vm.interfaces.map(&:mac))
|
|
208
208
|
end
|
|
209
209
|
|
|
210
|
+
def host_interfaces_attrs(host)
|
|
211
|
+
setup_nics_attrs(host)
|
|
212
|
+
super
|
|
213
|
+
end
|
|
214
|
+
|
|
210
215
|
private
|
|
211
216
|
|
|
217
|
+
def setup_nics_attrs(host)
|
|
218
|
+
host.interfaces.each do |nic|
|
|
219
|
+
nic.compute_attributes['vnet'] = nic.subnet&.opennebula_vnet.to_s
|
|
220
|
+
end
|
|
221
|
+
end
|
|
222
|
+
|
|
212
223
|
def client
|
|
213
224
|
@client ||= Fog::Compute.new(
|
|
214
225
|
provider: 'OpenNebula',
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
<!-- insert_after ':root:last-child' -->
|
|
2
|
+
|
|
3
|
+
<%= select_f f, :opennebula_vnet, ForemanOpennebula::Opennebula.first.available_networks, :id, :name, { include_blank: true },
|
|
4
|
+
:label => _("OpenNebula Virtual Network"), :help_inline => _("Reference at OpenNebula Virtual Network object") %>
|
|
@@ -18,6 +18,14 @@ module ForemanOpennebula
|
|
|
18
18
|
requires_foreman '>= 3.7'
|
|
19
19
|
compute_resource ForemanOpennebula::Opennebula
|
|
20
20
|
register_global_js_file 'global'
|
|
21
|
+
|
|
22
|
+
parameter_filter Subnet, :opennebula_vnet
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
initializer 'foreman_opennebula.load_app_instance_data' do |app|
|
|
27
|
+
ForemanOpennebula::Engine.paths['db/migrate'].existent.each do |path|
|
|
28
|
+
app.config.paths['db/migrate'] << path
|
|
21
29
|
end
|
|
22
30
|
end
|
|
23
31
|
|
|
@@ -25,16 +33,14 @@ module ForemanOpennebula
|
|
|
25
33
|
require 'fog/opennebula/models/compute/server'
|
|
26
34
|
require 'fog/opennebula/models/compute/flavor'
|
|
27
35
|
require 'fog/opennebula/models/compute/interface'
|
|
28
|
-
require File.expand_path('../../app/models/concerns/fog_extensions/
|
|
29
|
-
require File.expand_path('../../app/models/concerns/fog_extensions/
|
|
30
|
-
require File.expand_path('../../app/models/concerns/fog_extensions/
|
|
31
|
-
require File.expand_path('../../app/helpers/concerns/foreman_opennebula/hosts_helper_extensions', __dir__)
|
|
36
|
+
require File.expand_path('../../app/models/concerns/fog_extensions/open_nebula/server', __dir__)
|
|
37
|
+
require File.expand_path('../../app/models/concerns/fog_extensions/open_nebula/flavor', __dir__)
|
|
38
|
+
require File.expand_path('../../app/models/concerns/fog_extensions/open_nebula/interface', __dir__)
|
|
32
39
|
require File.expand_path('../../app/helpers/concerns/foreman_opennebula/form_helper_extensions', __dir__)
|
|
33
40
|
|
|
34
41
|
::Fog::Compute::OpenNebula::Server.include(FogExtensions::OpenNebula::Server)
|
|
35
42
|
::Fog::Compute::OpenNebula::Flavor.include(FogExtensions::OpenNebula::Flavor)
|
|
36
43
|
::Fog::Compute::OpenNebula::Interface.include(FogExtensions::OpenNebula::Interface)
|
|
37
|
-
::HostsHelper.include(ForemanOpennebula::HostsHelperExtensions)
|
|
38
44
|
# ::FormHelper.include(ForemanOpennebula::FormHelperExtensions)
|
|
39
45
|
::ActionView::Base.include(ForemanOpennebula::FormHelperExtensions)
|
|
40
46
|
rescue => e
|
data/lib/foreman_opennebula.rb
CHANGED
data/package.json
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: foreman_opennebula
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 3.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Vitaly Pyslar
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: bin
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 2025-09-09 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
13
12
|
- !ruby/object:Gem::Dependency
|
|
14
13
|
name: rake
|
|
@@ -52,6 +51,48 @@ dependencies:
|
|
|
52
51
|
- - "~>"
|
|
53
52
|
- !ruby/object:Gem::Version
|
|
54
53
|
version: '1.36'
|
|
54
|
+
- !ruby/object:Gem::Dependency
|
|
55
|
+
name: rubocop-minitest
|
|
56
|
+
requirement: !ruby/object:Gem::Requirement
|
|
57
|
+
requirements:
|
|
58
|
+
- - ">="
|
|
59
|
+
- !ruby/object:Gem::Version
|
|
60
|
+
version: '0'
|
|
61
|
+
type: :development
|
|
62
|
+
prerelease: false
|
|
63
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
64
|
+
requirements:
|
|
65
|
+
- - ">="
|
|
66
|
+
- !ruby/object:Gem::Version
|
|
67
|
+
version: '0'
|
|
68
|
+
- !ruby/object:Gem::Dependency
|
|
69
|
+
name: rubocop-performance
|
|
70
|
+
requirement: !ruby/object:Gem::Requirement
|
|
71
|
+
requirements:
|
|
72
|
+
- - ">="
|
|
73
|
+
- !ruby/object:Gem::Version
|
|
74
|
+
version: '0'
|
|
75
|
+
type: :development
|
|
76
|
+
prerelease: false
|
|
77
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
78
|
+
requirements:
|
|
79
|
+
- - ">="
|
|
80
|
+
- !ruby/object:Gem::Version
|
|
81
|
+
version: '0'
|
|
82
|
+
- !ruby/object:Gem::Dependency
|
|
83
|
+
name: rubocop-rails
|
|
84
|
+
requirement: !ruby/object:Gem::Requirement
|
|
85
|
+
requirements:
|
|
86
|
+
- - ">="
|
|
87
|
+
- !ruby/object:Gem::Version
|
|
88
|
+
version: '0'
|
|
89
|
+
type: :development
|
|
90
|
+
prerelease: false
|
|
91
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
92
|
+
requirements:
|
|
93
|
+
- - ">="
|
|
94
|
+
- !ruby/object:Gem::Version
|
|
95
|
+
version: '0'
|
|
55
96
|
- !ruby/object:Gem::Dependency
|
|
56
97
|
name: fog-opennebula
|
|
57
98
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -66,9 +107,23 @@ dependencies:
|
|
|
66
107
|
- - "~>"
|
|
67
108
|
- !ruby/object:Gem::Version
|
|
68
109
|
version: '0.0'
|
|
110
|
+
- !ruby/object:Gem::Dependency
|
|
111
|
+
name: deface
|
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
|
113
|
+
requirements:
|
|
114
|
+
- - ">="
|
|
115
|
+
- !ruby/object:Gem::Version
|
|
116
|
+
version: '0'
|
|
117
|
+
type: :runtime
|
|
118
|
+
prerelease: false
|
|
119
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
120
|
+
requirements:
|
|
121
|
+
- - ">="
|
|
122
|
+
- !ruby/object:Gem::Version
|
|
123
|
+
version: '0'
|
|
69
124
|
description: Provision and manage OpenNebula VMs from Foreman
|
|
70
125
|
email:
|
|
71
|
-
-
|
|
126
|
+
- vpyslar@ivi.ru
|
|
72
127
|
executables: []
|
|
73
128
|
extensions: []
|
|
74
129
|
extra_rdoc_files: []
|
|
@@ -81,11 +136,15 @@ files:
|
|
|
81
136
|
- app/controllers/foreman_opennebula/hosts_controller.rb
|
|
82
137
|
- app/helpers/concerns/foreman_opennebula/form_helper_extensions.rb
|
|
83
138
|
- app/helpers/concerns/foreman_opennebula/hosts_helper_extensions.rb
|
|
139
|
+
- app/models/concerns/fog_extensions/open_nebula/flavor.rb
|
|
140
|
+
- app/models/concerns/fog_extensions/open_nebula/interface.rb
|
|
141
|
+
- app/models/concerns/fog_extensions/open_nebula/server.rb
|
|
84
142
|
- app/models/concerns/fog_extensions/opennebula/flavor.rb
|
|
85
143
|
- app/models/concerns/fog_extensions/opennebula/interface.rb
|
|
86
144
|
- app/models/concerns/fog_extensions/opennebula/server.rb
|
|
87
145
|
- app/models/concerns/foreman_opennebula/key_pair_compute_resource.rb
|
|
88
146
|
- app/models/foreman_opennebula/opennebula.rb
|
|
147
|
+
- app/overrides/subnets/_fields/opennebula_fields.html.erb.deface
|
|
89
148
|
- app/views/api/v2/compute_resources/opennebula.json.rabl
|
|
90
149
|
- app/views/compute_resources/form/_opennebula.html.erb
|
|
91
150
|
- app/views/compute_resources/show/_opennebula.html.erb
|
|
@@ -97,6 +156,7 @@ files:
|
|
|
97
156
|
- app/views/compute_resources_vms/show/_opennebula.html.erb
|
|
98
157
|
- app/views/images/form/_opennebula.html.erb
|
|
99
158
|
- config/routes.rb
|
|
159
|
+
- db/migrate/20241120000000_add_opennebula_vnet_to_subnets.foreman_opennebula.rb
|
|
100
160
|
- lib/foreman_opennebula.rb
|
|
101
161
|
- lib/foreman_opennebula/engine.rb
|
|
102
162
|
- lib/foreman_opennebula/version.rb
|
|
@@ -119,7 +179,6 @@ licenses:
|
|
|
119
179
|
- GPL-3.0
|
|
120
180
|
metadata:
|
|
121
181
|
is_foreman_plugin: 'true'
|
|
122
|
-
post_install_message:
|
|
123
182
|
rdoc_options: []
|
|
124
183
|
require_paths:
|
|
125
184
|
- lib
|
|
@@ -134,12 +193,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
134
193
|
- !ruby/object:Gem::Version
|
|
135
194
|
version: '0'
|
|
136
195
|
requirements: []
|
|
137
|
-
|
|
138
|
-
rubygems_version: 2.7.6.3
|
|
139
|
-
signing_key:
|
|
196
|
+
rubygems_version: 3.6.3
|
|
140
197
|
specification_version: 4
|
|
141
198
|
summary: Foreman OpenNebula plugin
|
|
142
199
|
test_files:
|
|
200
|
+
- test/factories/foreman_opennebula_factories.rb
|
|
143
201
|
- test/test_plugin_helper.rb
|
|
144
202
|
- test/unit/foreman_opennebula_test.rb
|
|
145
|
-
- test/factories/foreman_opennebula_factories.rb
|