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 +4 -4
- data/README.md +5 -3
- data/lib/foreman_opennebula/engine.rb +8 -6
- data/lib/foreman_opennebula/version.rb +1 -1
- metadata +2 -7
- data/app/helpers/concerns/foreman_opennebula/hosts_helper_extensions.rb +0 -20
- data/app/models/concerns/fog_extensions/opennebula/flavor.rb +0 -109
- data/app/models/concerns/fog_extensions/opennebula/interface.rb +0 -11
- data/app/models/concerns/fog_extensions/opennebula/server.rb +0 -135
- data/app/views/compute_resources_vms/form/opennebula/_network.html.erb +0 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 389abccd5f2af42af967c246d67a4eff2a4bec11bbe324f32b4cfd92a7e122a8
|
4
|
+
data.tar.gz: ddd3e3165beb117d8747446ca84e129b6433668eecb3cc6314a36106281c6ad8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
10
|
+
1. Apply the database migrations.
|
11
11
|
2. Create a compute resource.
|
12
|
-
3.
|
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)
|
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 |
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
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
|
-
|
23
|
+
parameter_filter Subnet, :opennebula_vnet
|
24
|
+
end
|
23
25
|
end
|
24
26
|
end
|
25
27
|
|
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:
|
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-
|
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,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
|