occi 2.0.1 → 2.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/occi/version.rb +1 -1
- metadata +1 -17
- data/lib/occi/backend/dummy.rb +0 -232
- data/lib/occi/backend/ec2/Compute.rb +0 -310
- data/lib/occi/backend/ec2/compute.rb +0 -310
- data/lib/occi/backend/ec2/ec2.rb +0 -215
- data/lib/occi/backend/manager.rb +0 -131
- data/lib/occi/backend/opennebula/compute.rb +0 -360
- data/lib/occi/backend/opennebula/network.rb +0 -143
- data/lib/occi/backend/opennebula/opennebula.rb +0 -188
- data/lib/occi/backend/opennebula/storage.rb +0 -175
- data/lib/occi/extensions/monitoring/cpu.rb +0 -51
- data/lib/occi/extensions/monitoring/memory.rb +0 -49
- data/lib/occi/extensions/monitoring/metric.rb +0 -54
- data/lib/occi/extensions/monitoring/netrx.rb +0 -49
- data/lib/occi/extensions/monitoring/nettx.rb +0 -55
- data/lib/occi/extensions/one/VNC.rb +0 -58
- data/lib/occi/extensions/one/vnc.rb +0 -58
data/lib/occi/backend/manager.rb
DELETED
@@ -1,131 +0,0 @@
|
|
1
|
-
##############################################################################
|
2
|
-
# Copyright 2011 Service Computing group, TU Dortmund
|
3
|
-
#
|
4
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
-
# you may not use this file except in compliance with the License.
|
6
|
-
# You may obtain a copy of the License at
|
7
|
-
#
|
8
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
-
#
|
10
|
-
# Unless required by applicable law or agreed to in writing, software
|
11
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
-
# See the License for the specific language governing permissions and
|
14
|
-
# limitations under the License.
|
15
|
-
##############################################################################
|
16
|
-
|
17
|
-
##############################################################################
|
18
|
-
# Description: OpenNebula Backend
|
19
|
-
# Author(s): Hayati Bice, Florian Feldhaus, Piotr Kasprzak
|
20
|
-
##############################################################################
|
21
|
-
|
22
|
-
require 'rubygems'
|
23
|
-
|
24
|
-
require 'occi/backend/opennebula/opennebula'
|
25
|
-
require 'occi/backend/ec2/ec2'
|
26
|
-
require 'occi/backend/dummy'
|
27
|
-
|
28
|
-
#require 'uuidtools'
|
29
|
-
#require 'OpenNebula/OpenNebula'
|
30
|
-
#require 'occi/CategoryRegistry'
|
31
|
-
#require 'occi/rendering/http/LocationRegistry'
|
32
|
-
|
33
|
-
# OpenNebula backend
|
34
|
-
#require 'occi/backend/opennebula/Compute'
|
35
|
-
#require 'occi/backend/opennebula/Network'
|
36
|
-
#require 'occi/backend/opennebula/Storage'
|
37
|
-
|
38
|
-
# OpenNebula backend based mixins
|
39
|
-
#require 'occi/extensions/one/Image'
|
40
|
-
#require 'occi/extensions/one/Network'
|
41
|
-
#require 'occi/extensions/one/VirtualMachine'
|
42
|
-
#require 'occi/extensions/one/VNC'
|
43
|
-
|
44
|
-
#require 'occi/extensions/Reservation'
|
45
|
-
|
46
|
-
#include OpenNebula
|
47
|
-
|
48
|
-
module OCCI
|
49
|
-
module Backend
|
50
|
-
|
51
|
-
# ---------------------------------------------------------------------------------------------------------------------
|
52
|
-
RESOURCE_DEPLOY = :deploy
|
53
|
-
RESOURCE_UPDATE_STATE = :update_state
|
54
|
-
RESOURCE_DELETE = :delete
|
55
|
-
|
56
|
-
# ---------------------------------------------------------------------------------------------------------------------
|
57
|
-
class Manager
|
58
|
-
|
59
|
-
# ---------------------------------------------------------------------------------------------------------------------
|
60
|
-
private
|
61
|
-
# ---------------------------------------------------------------------------------------------------------------------
|
62
|
-
|
63
|
-
@@backends_classes = {}
|
64
|
-
@@backends_operations = {}
|
65
|
-
|
66
|
-
# ---------------------------------------------------------------------------------------------------------------------
|
67
|
-
public
|
68
|
-
# ---------------------------------------------------------------------------------------------------------------------
|
69
|
-
|
70
|
-
# ---------------------------------------------------------------------------------------------------------------------
|
71
|
-
def self.register_backend(backend_class, operations)
|
72
|
-
|
73
|
-
# Get ident of backend = class name downcased
|
74
|
-
# backend_ident = Object.const_get(backend_class).name.downcase
|
75
|
-
|
76
|
-
backend_ident = backend_class.name.downcase
|
77
|
-
|
78
|
-
@@backends_classes[backend_ident] = backend_class
|
79
|
-
@@backends_operations[backend_ident] = operations
|
80
|
-
end
|
81
|
-
|
82
|
-
# ---------------------------------------------------------------------------------------------------------------------
|
83
|
-
def self.signal_resource(backend, operation, resource, operation_parameters = nil)
|
84
|
-
|
85
|
-
resource_type = resource.kind
|
86
|
-
backend_ident = backend.class.name.downcase
|
87
|
-
|
88
|
-
raise OCCI::BackendError, "Unknown backend: '#{backend_ident}'" unless @@backends_classes.has_key?(backend_ident)
|
89
|
-
|
90
|
-
operations = @@backends_operations[backend_ident]
|
91
|
-
|
92
|
-
raise OCCI::BackendError, "Resource type '#{resource_type}' not supported!" unless operations.has_key?(resource_type)
|
93
|
-
raise OCCI::BackendError, "Operation '#{operation}' not supported on resource category '#{resource_type}'!" unless operations[resource_type].has_key?(operation.to_sym)
|
94
|
-
|
95
|
-
# Delegate
|
96
|
-
|
97
|
-
if operations[resource_type][operation.to_sym].nil?
|
98
|
-
OCCI::Log.debug("No backend method configured => doing nothing...")
|
99
|
-
return
|
100
|
-
end
|
101
|
-
|
102
|
-
if operation_parameters.nil?
|
103
|
-
# Generic resource operation
|
104
|
-
backend.send(operations[resource_type][operation.to_sym], resource)
|
105
|
-
else
|
106
|
-
# Action related operation, we need to pass on the action parameters
|
107
|
-
backend.send(operations[resource_type][operation.to_sym], resource, operation_parameters)
|
108
|
-
end
|
109
|
-
|
110
|
-
end
|
111
|
-
|
112
|
-
# ---------------------------------------------------------------------------------------------------------------------
|
113
|
-
def self.delegate_action(backend, action, parameters, resource)
|
114
|
-
|
115
|
-
OCCI::Log.debug("Delegating invocation of action [#{action}] on resource [#{resource}] with parameters [#{parameters}] to backend...")
|
116
|
-
|
117
|
-
# Use action term as ident
|
118
|
-
operation = action.term
|
119
|
-
|
120
|
-
begin
|
121
|
-
# TODO: define some convention for result handling!
|
122
|
-
signal_resource(backend, operation, resource, parameters)
|
123
|
-
|
124
|
-
rescue OCCI::BackendError
|
125
|
-
OCCI::Log.error("Action invocation failed!")
|
126
|
-
raise
|
127
|
-
end
|
128
|
-
end
|
129
|
-
end
|
130
|
-
end
|
131
|
-
end
|
@@ -1,360 +0,0 @@
|
|
1
|
-
##############################################################################
|
2
|
-
# Copyright 2011 Service Computing group, TU Dortmund
|
3
|
-
#
|
4
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
-
# you may not use this file except in compliance with the License.
|
6
|
-
# You may obtain a copy of the License at
|
7
|
-
#
|
8
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
-
#
|
10
|
-
# Unless required by applicable law or agreed to in writing, software
|
11
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
-
# See the License for the specific language governing permissions and
|
14
|
-
# limitations under the License.
|
15
|
-
##############################################################################
|
16
|
-
|
17
|
-
##############################################################################
|
18
|
-
# Description: OpenNebula Backend
|
19
|
-
# Author(s): Hayati Bice, Florian Feldhaus, Piotr Kasprzak
|
20
|
-
##############################################################################
|
21
|
-
|
22
|
-
require 'occi/log'
|
23
|
-
require 'erubis'
|
24
|
-
|
25
|
-
module OCCI
|
26
|
-
module Backend
|
27
|
-
module OpenNebula
|
28
|
-
|
29
|
-
# ---------------------------------------------------------------------------------------------------------------------
|
30
|
-
module Compute
|
31
|
-
|
32
|
-
TEMPLATECOMPUTERAWFILE = 'compute.erb'
|
33
|
-
|
34
|
-
# ---------------------------------------------------------------------------------------------------------------------
|
35
|
-
# private
|
36
|
-
# ---------------------------------------------------------------------------------------------------------------------
|
37
|
-
|
38
|
-
# ---------------------------------------------------------------------------------------------------------------------
|
39
|
-
# PARSE OPENNEBULA COMPUTE OBJECT
|
40
|
-
def compute_parse_backend_object(backend_object)
|
41
|
-
|
42
|
-
# get information on compute object from OpenNebula backend
|
43
|
-
backend_object.info
|
44
|
-
|
45
|
-
compute_kind = OCCI::Registry.get_by_id("http://schemas.ogf.org/occi/infrastructure#compute")
|
46
|
-
|
47
|
-
compute = Hashie::Mash.new
|
48
|
-
|
49
|
-
compute.kind = compute_kind.type_identifier
|
50
|
-
compute.mixins = %w|http://opennebula.org/occi/infrastructure#compute|
|
51
|
-
compute.id = self.generate_occi_id(compute_kind, backend_object.id.to_s)
|
52
|
-
compute.title = backend_object['NAME']
|
53
|
-
compute.summary = backend_object['TEMPLATE/DESCRIPTION'] if backend_object['TEMPLATE/DESCRIPTION']
|
54
|
-
|
55
|
-
compute.attributes!.occi!.compute!.cores = backend_object['TEMPLATE/VCPU'].to_i if backend_object['TEMPLATE/VCPU']
|
56
|
-
compute.attributes!.occi!.compute!.architecture = "x64" if backend_object['TEMPLATE/ARCHITECTURE'] == "x86_64"
|
57
|
-
compute.attributes!.occi!.compute!.architecture = "x86" if backend_object['TEMPLATE/ARCHITECTURE'] == "i686"
|
58
|
-
compute.attributes!.occi!.compute!.memory = backend_object['TEMPLATE/MEMORY'].to_f/1000 if backend_object['TEMPLATE/MEMORY']
|
59
|
-
|
60
|
-
compute.attributes!.org!.opennebula!.compute!.cpu = backend_object['TEMPLATE/CPU'].to_f if backend_object['TEMPLATE/CPU']
|
61
|
-
compute.attributes!.org!.opennebula!.compute!.kernel = backend_object['TEMPLATE/KERNEL'] if backend_object['TEMPLATE/KERNEL']
|
62
|
-
compute.attributes!.org!.opennebula!.compute!.initrd = backend_object['TEMPLATE/INITRD'] if backend_object['TEMPLATE/INITRD']
|
63
|
-
compute.attributes!.org!.opennebula!.compute!.root = backend_object['TEMPLATE/ROOT'] if backend_object['TEMPLATE/ROOT']
|
64
|
-
compute.attributes!.org!.opennebula!.compute!.kernel_cmd = backend_object['TEMPLATE/KERNEL_CMD'] if backend_object['TEMPLATE/KERNEL_CMD']
|
65
|
-
compute.attributes!.org!.opennebula!.compute!.bootloader = backend_object['TEMPLATE/BOOTLOADER'] if backend_object['TEMPLATE/BOOTLOADER']
|
66
|
-
compute.attributes!.org!.opennebula!.compute!.boot = backend_object['TEMPLATE/BOOT'] if backend_object['TEMPLATE/BOOT']
|
67
|
-
|
68
|
-
compute = OCCI::Core::Resource.new(compute)
|
69
|
-
|
70
|
-
compute_set_state(backend_object, compute)
|
71
|
-
|
72
|
-
# TODO: refactor VNC handling
|
73
|
-
#if backend_object['TEMPLATE/GRAPHICS/TYPE'] == 'vnc' \
|
74
|
-
#and backend_object['HISTORY_RECORDS/HISTORY/HOSTNAME'] \
|
75
|
-
#and not OCCI::Server.config[:novnc_path].nil? \
|
76
|
-
#and not OCCI::Server.config[:vnc_proxy_base_port].nil?
|
77
|
-
#
|
78
|
-
# vnc_host = backend_object['HISTORY_RECORDS/HISTORY/HOSTNAME']
|
79
|
-
# vnc_port = backend_object['TEMPLATE/GRAPHICS/PORT']
|
80
|
-
#
|
81
|
-
# vnc_proxy_host = URI.parse(OCCI::Server.location).host
|
82
|
-
#
|
83
|
-
# # The noVNC proxy_port
|
84
|
-
# proxy_port = OCCI::Server.config[:vnc_proxy_base_port].to_i + vnc_port.to_i
|
85
|
-
#
|
86
|
-
# OCCI::Log.debug("NOVNC path: #{OCCI::Server.config[:novnc_path]}")
|
87
|
-
# OCCI::Log.debug("Graphics type: #{backend_object['TEMPLATE/GRAPHICS/TYPE']}")
|
88
|
-
# OCCI::Log.debug("VNC base port: #{OCCI::Server.config[:vnc_proxy_base_port]}")
|
89
|
-
# OCCI::Log.debug("VNC port: #{vnc_port}")
|
90
|
-
# OCCI::Log.debug("VNC host: #{vnc_host}")
|
91
|
-
#
|
92
|
-
# compute.mixins << OCCI::Registry.get_by_id("http://schemas.ogf.org/occi/infrastructure/compute#console")
|
93
|
-
#
|
94
|
-
# if occi_object.attributes['opennebula.vm.vnc'].nil? or occi_object.backend[:novnc_pipe].nil?
|
95
|
-
#
|
96
|
-
# # CREATE PROXY FOR VNC SERVER
|
97
|
-
# begin
|
98
|
-
# novnc_cmd = "#{OCCI::Server.config[:novnc_path]}/utils/websockify"
|
99
|
-
# pipe = IO.popen("#{novnc_cmd} --web #{OCCI::Server.config[:novnc_path]} #{proxy_port} #{vnc_host}:#{vnc_port}")
|
100
|
-
#
|
101
|
-
# if pipe
|
102
|
-
# vnc_url = OCCI::Server.config[:server].chomp('/') + ':' + vnc_port + '/vnc_auto.html?host=' + vnc_proxy_host + '&port=' + vnc_port
|
103
|
-
# OCCI::Log.debug("VNC URL: #{vnc_url}")
|
104
|
-
# occi_object.backend[:novnc_pipe] = pipe
|
105
|
-
# occi_object.attributes['opennebula.vm.vnc'] = vnc_host + ':' + vnc_port
|
106
|
-
# occi_object.attributes['opennebula.vm.web_vnc'] = vnc_url
|
107
|
-
# end
|
108
|
-
# rescue Exception => e
|
109
|
-
# OCCI::Log.error("Error in creating VNC proxy: #{e.message}")
|
110
|
-
# end
|
111
|
-
# end
|
112
|
-
# OCCI::Registry.get_by_id(kind).entities << compute
|
113
|
-
#end
|
114
|
-
|
115
|
-
compute_parse_links(compute, backend_object)
|
116
|
-
|
117
|
-
# register compute resource in entities of compute kind
|
118
|
-
compute_kind.entities << compute
|
119
|
-
end
|
120
|
-
|
121
|
-
# ---------------------------------------------------------------------------------------------------------------------
|
122
|
-
# PARSE OPENNEBULA DEPENDENCIES TO E.G. STORAGE AND NETWORK LINKS
|
123
|
-
def compute_parse_links(compute, backend_object)
|
124
|
-
# create links for all storage instances
|
125
|
-
backend_object.each('TEMPLATE/DISK') do |disk|
|
126
|
-
OCCI::Log.debug("Storage Backend ID: #{disk['IMAGE_ID']}")
|
127
|
-
|
128
|
-
link = OCCI::Core::Link.new
|
129
|
-
storagelink_kind = OCCI::Registry.get_by_id('http://schemas.ogf.org/occi/infrastructure#storagelink')
|
130
|
-
link.kind = storagelink_kind.type_identifier
|
131
|
-
link.id = self.generate_occi_id(storagelink_kind, disk['IMAGE_ID'].to_s)
|
132
|
-
storage_kind = OCCI::Registry.get_by_id('http://schemas.ogf.org/occi/infrastructure#storage')
|
133
|
-
storage_id = self.generate_occi_id(storage_kind, disk['IMAGE_ID'].to_s)
|
134
|
-
target = storage_kind.entities.select { |entity| entity.id == storage_id }.first
|
135
|
-
if target.nil?
|
136
|
-
one_storage = Image.new(Image.build_xml(disk['IMAGE_ID']), @one_client)
|
137
|
-
self.storage_parse_backend_object(one_storage)
|
138
|
-
target = storage_kind.entities.select { |entity| entity.id == storage_id }.first
|
139
|
-
end
|
140
|
-
link.target = target.location
|
141
|
-
link.title = target.title
|
142
|
-
link.summary = target.summary
|
143
|
-
link.rel = storage_kind.type_identifier
|
144
|
-
link.source = compute.location
|
145
|
-
link.mixins << OCCI::Registry.get_by_id('http://opennebula.org/occi/infrastructure#storagelink')
|
146
|
-
link.attributes!.occi!.storagelink!.deviceid = disk['TARGET'] if disk['TARGET']
|
147
|
-
link.attributes!.org!.opennebula!.storagelink!.bus = disk['BUS'] if disk['BUS']
|
148
|
-
link.attributes!.org!.opennebula!.storagelink!.driver = disk['DRIVER'] if disk['TARGET']
|
149
|
-
|
150
|
-
# check link attributes against definition in kind and mixins
|
151
|
-
link.check
|
152
|
-
|
153
|
-
storagelink_kind.entities << link
|
154
|
-
end
|
155
|
-
|
156
|
-
#create links for all network instances
|
157
|
-
backend_object.each('TEMPLATE/NIC') do |nic|
|
158
|
-
OCCI::Log.debug("Network Backend ID: #{nic['NETWORK_ID']}")
|
159
|
-
|
160
|
-
link = OCCI::Core::Link.new
|
161
|
-
networkinterface_kind = OCCI::Registry.get_by_id('http://schemas.ogf.org/occi/infrastructure#networkinterface')
|
162
|
-
link.kind = networkinterface_kind.type_identifier
|
163
|
-
link.id = self.generate_occi_id(networkinterface_kind, nic['NETWORK_ID'].to_s)
|
164
|
-
network_kind = OCCI::Registry.get_by_id('http://schemas.ogf.org/occi/infrastructure#network')
|
165
|
-
network_id = self.generate_occi_id(network_kind, nic['NETWORK_ID'].to_s)
|
166
|
-
target = network_kind.entitis.select { |entity| entity.id == network_id }.first
|
167
|
-
if target.nil?
|
168
|
-
one_network = VirtualNetwork.new(VirtualNetwork.build_xml(nic['NETWORK_ID']), @one_client)
|
169
|
-
self.network_parse_backend_object(one_network)
|
170
|
-
target = network_kind.entities.select { |entity| entity.id == network_id }.first
|
171
|
-
end
|
172
|
-
link.target = target.location
|
173
|
-
link.title = target.title
|
174
|
-
link.summary = target.summary
|
175
|
-
link.rel = network_kind.type_identifier
|
176
|
-
link.source = compute.location
|
177
|
-
link.mixins << OCCI::Registry.get_by_id('http://schemas.ogf.org/occi/infrastructure/networkinterface#ipnetworkinterface')
|
178
|
-
link.mixins << OCCI::Registry.get_by_id('http://opennebula.org/occi/infrastructure#networkinterface')
|
179
|
-
link.attributes!.occi!.networkinterface!.address = nic['IP'] if nic['IP']
|
180
|
-
link.attributes!.occi!.networkinterface!.mac = nic['MAC'] if nic['MAC']
|
181
|
-
link.attributes!.occi!.networkinterface!.interface = nic['TARGET'] if nic['TARGET']
|
182
|
-
link.attributes!.org!.opennebula!.networkinterface!.bridge = nic['BRIDGE'] if nic['BRIDGE']
|
183
|
-
link.attributes!.org!.opennebula!.networkinterface!.script = nic['SCRIPT'] if nic['SCRIPT']
|
184
|
-
link.attributes!.org!.opennebula!.networkinterface!.white_ports_tcp = nic['WHITE_PORTS_TCP'] if nic['WHITE_PORTS_TCP']
|
185
|
-
link.attributes!.org!.opennebula!.networkinterface!.black_ports_tcp = nic['BLACK_PORTS_TCP'] if nic['BLACK_PORTS_TCP']
|
186
|
-
link.attributes!.org!.opennebula!.networkinterface!.white_ports_udp = nic['WHITE_PORTS_UDP'] if nic['WHITE_PORTS_UDP']
|
187
|
-
link.attributes!.org!.opennebula!.networkinterface!.black_ports_udp = nic['BLACK_PORTS_UDP'] if nic['BLACK_PORTS_UDP ']
|
188
|
-
link.attributes!.org!.opennebula!.networkinterface!.icmp = nic['ICMP'] if nic['ICMP ']
|
189
|
-
|
190
|
-
# check link attributes against definition in kind and mixins
|
191
|
-
link.check
|
192
|
-
|
193
|
-
networkinterface_kind.entities << link
|
194
|
-
end
|
195
|
-
end
|
196
|
-
|
197
|
-
# ---------------------------------------------------------------------------------------------------------------------
|
198
|
-
public
|
199
|
-
# ---------------------------------------------------------------------------------------------------------------------
|
200
|
-
|
201
|
-
# ---------------------------------------------------------------------------------------------------------------------
|
202
|
-
def compute_deploy(compute)
|
203
|
-
os_tpl = compute.mixins!.select { |mixin| mixin.related_to?("http://schemas.ogf.org/occi/infrastructure#os_tpl") }.first
|
204
|
-
|
205
|
-
backend_object = nil
|
206
|
-
|
207
|
-
templates = TemplatePool.new(@one_client, OpenNebula::INFO_ACL)
|
208
|
-
templates.info
|
209
|
-
template = templates.select { |template| template['NAME'] == os_tpl.title }.first
|
210
|
-
if template
|
211
|
-
template.info
|
212
|
-
template['TEMPLATE/VCPU'] = compute.attributes.occi.compute.cores if compute.attributes!.occi!.compute!.cores
|
213
|
-
template['TEMPLATE/MEMORY'] = (compute.attributes.occi.compute.memory.to_f * 1000).to_s if compute.attributes!.occi!.compute!.memory
|
214
|
-
template['TEMPLATE/ARCHITECTURE'] = compute.attributes.occi.compute.architecture if compute.attributes!.occi!.compute!.architecture
|
215
|
-
template['TEMPLATE/CPU'] = compute.attributes.occi.compute.speed if compute.attributes!.occi!.compute!.speed
|
216
|
-
backend_object = template.instantiate
|
217
|
-
check_rc(backend_object)
|
218
|
-
else
|
219
|
-
backend_object = VirtualMachine.new(VirtualMachine.build_xml, @one_client)
|
220
|
-
|
221
|
-
template_location = OCCI::Server.config["TEMPLATE_LOCATION"] + TEMPLATECOMPUTERAWFILE
|
222
|
-
template = Erubis::Eruby.new(File.read(template_location)).evaluate(:compute => compute)
|
223
|
-
|
224
|
-
OCCI::Log.debug("Parsed template #{template}")
|
225
|
-
rc = backend_object.allocate(template)
|
226
|
-
check_rc(rc)
|
227
|
-
OCCI::Log.debug("Return code from OpenNebula #{rc}") if rc != nil
|
228
|
-
end
|
229
|
-
|
230
|
-
backend_object.info
|
231
|
-
compute.id = self.generate_occi_id(OCCI::Registry.get_by_id(compute.kind), backend_object['ID'].to_s)
|
232
|
-
|
233
|
-
compute_set_state(backend_object, compute)
|
234
|
-
|
235
|
-
OCCI::Log.debug("OpenNebula automatically triggers action start for Virtual Machines")
|
236
|
-
OCCI::Log.debug("Changing state to started")
|
237
|
-
end
|
238
|
-
|
239
|
-
# ---------------------------------------------------------------------------------------------------------------------
|
240
|
-
def compute_set_state(backend_object, compute)
|
241
|
-
OCCI::Log.debug("current VM state is: #{backend_object.lcm_state_str}")
|
242
|
-
compute.links ||= []
|
243
|
-
case backend_object.lcm_state_str
|
244
|
-
when "RUNNING" then
|
245
|
-
compute.attributes!.occi!.compute!.state = "active"
|
246
|
-
compute.links << OCCI::Core::Link.new(:target=>compute.location + '?action=stop',:rel=>'http://schemas.ogf.org/occi/infrastructure/compute/action#stop')
|
247
|
-
compute.links << OCCI::Core::Link.new(:target=>compute.location + '?action=restart',:rel=>'http://schemas.ogf.org/occi/infrastructure/compute/action#restart')
|
248
|
-
compute.links << OCCI::Core::Link.new(:target=>compute.location + '?action=suspend',:rel=>'http://schemas.ogf.org/occi/infrastructure/compute/action#suspend')
|
249
|
-
when "PROLOG", "BOOT", "SAVE_STOP", "SAVE_SUSPEND", "SAVE_MIGRATE", "MIGRATE", "PROLOG_MIGRATE", "PROLOG_RESUME" then
|
250
|
-
compute.attributes!.occi!.compute!.state = "inactive"
|
251
|
-
compute.links << OCCI::Core::Link.new(:target=>compute.location + '?action=stop',:rel=>'http://schemas.ogf.org/occi/infrastructure/compute/action#stop')
|
252
|
-
compute.links << OCCI::Core::Link.new(:target=>compute.location + '?action=restart',:rel=>'http://schemas.ogf.org/occi/infrastructure/compute/action#restart')
|
253
|
-
when "SUSPENDED" then
|
254
|
-
compute.attributes!.occi!.compute!.state = "suspended"
|
255
|
-
compute.links << OCCI::Core::Link.new(:target=>compute.location + '?action=start',:rel=>'http://schemas.ogf.org/occi/infrastructure/compute/action#start')
|
256
|
-
when "FAIL" then
|
257
|
-
compute.attributes!.occi!.compute!.state = "error"
|
258
|
-
compute.links << OCCI::Core::Link.new(:target=>compute.location + '?action=start',:rel=>'http://schemas.ogf.org/occi/infrastructure/compute/action#start')
|
259
|
-
else
|
260
|
-
compute.attributes!.occi!.compute!.state = "inactive"
|
261
|
-
compute.links << OCCI::Core::Link.new(:target=>compute.location + '?action=start',:rel=>'http://schemas.ogf.org/occi/infrastructure/compute/action#start')
|
262
|
-
end
|
263
|
-
end
|
264
|
-
|
265
|
-
# ---------------------------------------------------------------------------------------------------------------------
|
266
|
-
def compute_delete(compute)
|
267
|
-
backend_object=VirtualMachine.new(VirtualMachine.build_xml(compute.backend[:id]), @one_client)
|
268
|
-
|
269
|
-
rc = backend_object.finalize
|
270
|
-
check_rc(rc)
|
271
|
-
# TODO: VNC
|
272
|
-
#OCCI::Log.debug("killing NoVNC pipe with pid #{compute.backend[:novnc_pipe].pid}") unless compute.backend[:novnc_pipe].nil?
|
273
|
-
#Process.kill 'INT', compute.backend[:novnc_pipe].pid unless compute.backend[:novnc_pipe].nil?
|
274
|
-
end
|
275
|
-
|
276
|
-
# ---------------------------------------------------------------------------------------------------------------------
|
277
|
-
# GET ALL COMPUTE INSTANCES
|
278
|
-
def compute_register_all_instances
|
279
|
-
backend_object_pool = VirtualMachinePool.new(@one_client)
|
280
|
-
backend_object_pool.info(OCCI::Backend::OpenNebula::OpenNebula::INFO_ACL, -1, -1, OpenNebula::VirtualMachinePool::INFO_NOT_DONE)
|
281
|
-
compute_register_all_objects(backend_object_pool)
|
282
|
-
end
|
283
|
-
|
284
|
-
# ---------------------------------------------------------------------------------------------------------------------
|
285
|
-
# GET ALL COMPUTE TEMPLATES
|
286
|
-
def compute_register_all_templates
|
287
|
-
backend_object_pool = TemplatePool.new(@one_client, INFO_ACL)
|
288
|
-
backend_object_pool.info
|
289
|
-
compute_register_all_objects(backend_object_pool, template = true)
|
290
|
-
end
|
291
|
-
|
292
|
-
# ---------------------------------------------------------------------------------------------------------------------
|
293
|
-
# GET ALL COMPUTE OBJECTS
|
294
|
-
def compute_register_all_objects(backend_object_pool, template = false)
|
295
|
-
backend_object_pool.each { |backend_object| compute_parse_backend_object(backend_object) }
|
296
|
-
end
|
297
|
-
|
298
|
-
# ---------------------------------------------------------------------------------------------------------------------
|
299
|
-
# COMPUTE ACTIONS
|
300
|
-
# ---------------------------------------------------------------------------------------------------------------------
|
301
|
-
|
302
|
-
# ---------------------------------------------------------------------------------------------------------------------
|
303
|
-
def compute_action_dummy(compute, parameters)
|
304
|
-
end
|
305
|
-
|
306
|
-
# ---------------------------------------------------------------------------------------------------------------------
|
307
|
-
# COMPUTE Action start
|
308
|
-
def compute_start(compute, parameters)
|
309
|
-
backend_object = VirtualMachine.new(VirtualMachine.build_xml(compute.backend[:id]), @one_client)
|
310
|
-
rc = backend_object.resume
|
311
|
-
check_rc(rc)
|
312
|
-
end
|
313
|
-
|
314
|
-
# ---------------------------------------------------------------------------------------------------------------------
|
315
|
-
# Action stop
|
316
|
-
def compute_stop(compute, parameters)
|
317
|
-
backend_object = VirtualMachine.new(VirtualMachine.build_xml(compute.backend[:id]), @one_client)
|
318
|
-
# TODO: implement parameters when available in OpenNebula
|
319
|
-
case parameters
|
320
|
-
when 'method="graceful"'
|
321
|
-
OCCI::Log.debug("Trying to stop VM graceful")
|
322
|
-
rc = backend_object.shutdown
|
323
|
-
when 'method="acpioff"'
|
324
|
-
OCCI::Log.debug("Trying to stop VM via ACPI off")
|
325
|
-
rc = backend_object.shutdown
|
326
|
-
else # method="poweroff" or no method specified
|
327
|
-
OCCI::Log.debug("Powering off VM")
|
328
|
-
rc = backend_object.shutdown
|
329
|
-
end
|
330
|
-
check_rc(rc)
|
331
|
-
end
|
332
|
-
|
333
|
-
# ---------------------------------------------------------------------------------------------------------------------
|
334
|
-
# Action restart
|
335
|
-
def compute_restart(compute, parameters)
|
336
|
-
backend_object = VirtualMachine.new(VirtualMachine.build_xml(compute.backend[:id]), @one_client)
|
337
|
-
# TODO: implement parameters when available in OpenNebula
|
338
|
-
case parameters
|
339
|
-
when "graceful"
|
340
|
-
rc = vm.reboot
|
341
|
-
when "warm"
|
342
|
-
rc = vm.reboot
|
343
|
-
else # "cold" or no parameter specified
|
344
|
-
rc = vm.resubmit
|
345
|
-
end
|
346
|
-
check_rc(rc)
|
347
|
-
end
|
348
|
-
|
349
|
-
# ---------------------------------------------------------------------------------------------------------------------
|
350
|
-
# Action suspend
|
351
|
-
def compute_suspend(compute, parameters)
|
352
|
-
backend_object = VirtualMachine.new(VirtualMachine.build_xml(compute.backend[:id]), @one_client)
|
353
|
-
rc = vm.suspend
|
354
|
-
check_rc(rc)
|
355
|
-
end
|
356
|
-
|
357
|
-
end
|
358
|
-
end
|
359
|
-
end
|
360
|
-
end
|