foreman_opennebula 3.2.0 → 4.0.1
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/app/models/concerns/foreman_opennebula/key_pair_compute_resource.rb +9 -7
- data/lib/foreman_opennebula/engine.rb +8 -6
- data/lib/foreman_opennebula/version.rb +1 -1
- metadata +26 -22
- 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: ffb18f309d9da945b2ff975b7f90e3457217de8fa3559c8fecc93d9803f1b0dc
|
|
4
|
+
data.tar.gz: 56ba4265b669eafe7c7ce0606b991aa283c9c0515009d821bf3fdf890d2d70de
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 044d6b750d7c7715b342ab8266d5577cae10f667145d6a8392ab6cc62698b359bd2f615d8d7017916a17d4d9a718db85679f710fc5528e7fea9ba2979ac3bec0
|
|
7
|
+
data.tar.gz: eb4219d532c55ddaa6a1b2d24295da9ef1bb290b29cfdf61c071ea2018b05c85f0467911206669d847801c3d60e84a7f3ac9eafd68870d2ad43e163ef15002f0
|
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
|
|
@@ -37,9 +37,9 @@ module ForemanOpennebula
|
|
|
37
37
|
logger.info "removing key from compute resource #{name} "\
|
|
38
38
|
"(#{provider_friendly_name}): #{remote_key_pair}"
|
|
39
39
|
opennebula_user = available_users.detect { |u| u.name == user }
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
template_str =
|
|
40
|
+
opennebula_user.delete_element('TEMPLATE/SSH_PRIVATE_KEY')
|
|
41
|
+
opennebula_user.delete_element('TEMPLATE/SSH_PUBLIC_KEY')
|
|
42
|
+
template_str = opennebula_user.template_str
|
|
43
43
|
opennebula_user.update(template_str)
|
|
44
44
|
KeyPair.destroy_by :compute_resource_id => id
|
|
45
45
|
rescue => e
|
|
@@ -56,11 +56,13 @@ module ForemanOpennebula
|
|
|
56
56
|
def setup_key_pair
|
|
57
57
|
key = SSHKey.generate(comment: "foreman-#{id}#{Foreman.uuid}")
|
|
58
58
|
opennebula_user = available_users.detect { |u| u.name == user }
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
59
|
+
opennebula_user.add_element('TEMPLATE',
|
|
60
|
+
'SSH_PRIVATE_KEY' => key.private_key,
|
|
61
|
+
'SSH_PUBLIC_KEY' => key.ssh_public_key)
|
|
62
|
+
template_str = opennebula_user.template_str
|
|
62
63
|
opennebula_user.update(template_str)
|
|
63
|
-
KeyPair.create! :name => key.comment, :compute_resource_id => id,
|
|
64
|
+
KeyPair.create! :name => key.comment, :compute_resource_id => id,
|
|
65
|
+
:secret => key.private_key, :public => key.ssh_public_key
|
|
64
66
|
rescue => e
|
|
65
67
|
Foreman::Logging.exception('Failed to generate key pair', e)
|
|
66
68
|
destroy_key_pair
|
|
@@ -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,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: foreman_opennebula
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 4.0.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Vitaly Pyslar
|
|
8
|
+
autorequire:
|
|
8
9
|
bindir: bin
|
|
9
10
|
cert_chain: []
|
|
10
|
-
date: 2025-09-
|
|
11
|
+
date: 2025-09-24 00:00:00.000000000 Z
|
|
11
12
|
dependencies:
|
|
12
13
|
- !ruby/object:Gem::Dependency
|
|
13
14
|
name: rake
|
|
@@ -55,44 +56,50 @@ dependencies:
|
|
|
55
56
|
name: rubocop-minitest
|
|
56
57
|
requirement: !ruby/object:Gem::Requirement
|
|
57
58
|
requirements:
|
|
58
|
-
- - "
|
|
59
|
+
- - "~>"
|
|
59
60
|
- !ruby/object:Gem::Version
|
|
60
|
-
version: '0'
|
|
61
|
+
version: '0.38'
|
|
61
62
|
type: :development
|
|
62
63
|
prerelease: false
|
|
63
64
|
version_requirements: !ruby/object:Gem::Requirement
|
|
64
65
|
requirements:
|
|
65
|
-
- - "
|
|
66
|
+
- - "~>"
|
|
66
67
|
- !ruby/object:Gem::Version
|
|
67
|
-
version: '0'
|
|
68
|
+
version: '0.38'
|
|
68
69
|
- !ruby/object:Gem::Dependency
|
|
69
70
|
name: rubocop-performance
|
|
70
71
|
requirement: !ruby/object:Gem::Requirement
|
|
71
72
|
requirements:
|
|
72
|
-
- - "
|
|
73
|
+
- - "~>"
|
|
73
74
|
- !ruby/object:Gem::Version
|
|
74
|
-
version: '
|
|
75
|
+
version: '1.26'
|
|
75
76
|
type: :development
|
|
76
77
|
prerelease: false
|
|
77
78
|
version_requirements: !ruby/object:Gem::Requirement
|
|
78
79
|
requirements:
|
|
79
|
-
- - "
|
|
80
|
+
- - "~>"
|
|
80
81
|
- !ruby/object:Gem::Version
|
|
81
|
-
version: '
|
|
82
|
+
version: '1.26'
|
|
82
83
|
- !ruby/object:Gem::Dependency
|
|
83
84
|
name: rubocop-rails
|
|
84
85
|
requirement: !ruby/object:Gem::Requirement
|
|
85
86
|
requirements:
|
|
87
|
+
- - "~>"
|
|
88
|
+
- !ruby/object:Gem::Version
|
|
89
|
+
version: '2.33'
|
|
86
90
|
- - ">="
|
|
87
91
|
- !ruby/object:Gem::Version
|
|
88
|
-
version:
|
|
92
|
+
version: 2.33.3
|
|
89
93
|
type: :development
|
|
90
94
|
prerelease: false
|
|
91
95
|
version_requirements: !ruby/object:Gem::Requirement
|
|
92
96
|
requirements:
|
|
97
|
+
- - "~>"
|
|
98
|
+
- !ruby/object:Gem::Version
|
|
99
|
+
version: '2.33'
|
|
93
100
|
- - ">="
|
|
94
101
|
- !ruby/object:Gem::Version
|
|
95
|
-
version:
|
|
102
|
+
version: 2.33.3
|
|
96
103
|
- !ruby/object:Gem::Dependency
|
|
97
104
|
name: fog-opennebula
|
|
98
105
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -111,16 +118,16 @@ dependencies:
|
|
|
111
118
|
name: deface
|
|
112
119
|
requirement: !ruby/object:Gem::Requirement
|
|
113
120
|
requirements:
|
|
114
|
-
- - "
|
|
121
|
+
- - "~>"
|
|
115
122
|
- !ruby/object:Gem::Version
|
|
116
|
-
version: '
|
|
123
|
+
version: '1.9'
|
|
117
124
|
type: :runtime
|
|
118
125
|
prerelease: false
|
|
119
126
|
version_requirements: !ruby/object:Gem::Requirement
|
|
120
127
|
requirements:
|
|
121
|
-
- - "
|
|
128
|
+
- - "~>"
|
|
122
129
|
- !ruby/object:Gem::Version
|
|
123
|
-
version: '
|
|
130
|
+
version: '1.9'
|
|
124
131
|
description: Provision and manage OpenNebula VMs from Foreman
|
|
125
132
|
email:
|
|
126
133
|
- vpyslar@ivi.ru
|
|
@@ -135,13 +142,9 @@ files:
|
|
|
135
142
|
- app/assets/javascripts/foreman_opennebula/vmgroup_selected.js
|
|
136
143
|
- app/controllers/foreman_opennebula/hosts_controller.rb
|
|
137
144
|
- app/helpers/concerns/foreman_opennebula/form_helper_extensions.rb
|
|
138
|
-
- app/helpers/concerns/foreman_opennebula/hosts_helper_extensions.rb
|
|
139
145
|
- app/models/concerns/fog_extensions/open_nebula/flavor.rb
|
|
140
146
|
- app/models/concerns/fog_extensions/open_nebula/interface.rb
|
|
141
147
|
- 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
148
|
- app/models/concerns/foreman_opennebula/key_pair_compute_resource.rb
|
|
146
149
|
- app/models/foreman_opennebula/opennebula.rb
|
|
147
150
|
- app/overrides/subnets/_fields/opennebula_fields.html.erb.deface
|
|
@@ -150,7 +153,6 @@ files:
|
|
|
150
153
|
- app/views/compute_resources/show/_opennebula.html.erb
|
|
151
154
|
- app/views/compute_resources_vms/form/opennebula/_base.html.erb
|
|
152
155
|
- app/views/compute_resources_vms/form/opennebula/_custom_attribute.html.erb
|
|
153
|
-
- app/views/compute_resources_vms/form/opennebula/_network.html.erb
|
|
154
156
|
- app/views/compute_resources_vms/form/opennebula/_scheduler_hint_data.html.erb
|
|
155
157
|
- app/views/compute_resources_vms/form/opennebula/_vmgroup_role.html.erb
|
|
156
158
|
- app/views/compute_resources_vms/index/_opennebula.html.erb
|
|
@@ -180,6 +182,7 @@ licenses:
|
|
|
180
182
|
- GPL-3.0
|
|
181
183
|
metadata:
|
|
182
184
|
is_foreman_plugin: 'true'
|
|
185
|
+
post_install_message:
|
|
183
186
|
rdoc_options: []
|
|
184
187
|
require_paths:
|
|
185
188
|
- lib
|
|
@@ -194,7 +197,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
194
197
|
- !ruby/object:Gem::Version
|
|
195
198
|
version: '0'
|
|
196
199
|
requirements: []
|
|
197
|
-
rubygems_version: 3.
|
|
200
|
+
rubygems_version: 3.4.20
|
|
201
|
+
signing_key:
|
|
198
202
|
specification_version: 4
|
|
199
203
|
summary: Foreman OpenNebula plugin
|
|
200
204
|
test_files:
|
|
@@ -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
|