opennebula-cli 5.2.1 → 5.3.80.beta1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/onehost +27 -6
- data/bin/onevcenter +35 -460
- data/bin/onevm +27 -0
- data/bin/onevmgroup +185 -0
- data/bin/onevnet +44 -6
- data/bin/onezone +37 -0
- data/lib/one_helper.rb +47 -0
- data/lib/one_helper/oneacct_helper.rb +1 -5
- data/lib/one_helper/oneacl_helper.rb +6 -4
- data/lib/one_helper/onehost_helper.rb +12 -7
- data/lib/one_helper/oneimage_helper.rb +27 -14
- data/lib/one_helper/onesecgroup_helper.rb +4 -0
- data/lib/one_helper/onevm_helper.rb +22 -9
- data/lib/one_helper/onevmgroup_helper.rb +170 -0
- data/lib/one_helper/onevnet_helper.rb +16 -3
- data/lib/one_helper/onezone_helper.rb +96 -0
- metadata +14 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e15bbf71c016c51a6c4d926c42e0b1dd4f5f49f8
|
4
|
+
data.tar.gz: fcd4ffdb5d5f25300f2b652ff1ad082ee45d0c3e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 22f98b03d7880441572a20e1236c4975357031a645854d9ab441fa3c177cefa0d5152ab0d0ca9cd8ea58b4e2158e5efa9343a1279595f4473ec591911be38827
|
7
|
+
data.tar.gz: 83b293f1adac28bf9e75102e49968eebbf50b45c0be4aa1f7ed5f28fc0a6954b9befe4b48eba9f66d5eabce74b84dc4ae2863e12ebb7c91775c055e28cfb805f
|
data/bin/onehost
CHANGED
@@ -79,7 +79,21 @@ cmd=CommandParser::CmdParser.new(ARGV) do
|
|
79
79
|
" rsync command must be installed in the frontend and nodes."
|
80
80
|
}
|
81
81
|
|
82
|
-
|
82
|
+
EC2_ACCESS = {
|
83
|
+
:name => "ec2access",
|
84
|
+
:large => "--ec2access id",
|
85
|
+
:description => "Set the id access for EC2 Driver",
|
86
|
+
:format => String
|
87
|
+
}
|
88
|
+
|
89
|
+
EC2_SECRET = {
|
90
|
+
:name => "ec2secret",
|
91
|
+
:large => "--ec2secret key",
|
92
|
+
:description => "Set the secret key for EC2 Driver",
|
93
|
+
:format => String
|
94
|
+
}
|
95
|
+
|
96
|
+
CREAT_OPTIONS = [ IM, VMM, OneClusterHelper::CLUSTER, EC2_ACCESS, EC2_SECRET ]
|
83
97
|
SYNC_OPTIONS = [ OneClusterHelper::CLUSTER, FORCE, RSYNC ]
|
84
98
|
|
85
99
|
########################################################################
|
@@ -110,13 +124,20 @@ cmd=CommandParser::CmdParser.new(ARGV) do
|
|
110
124
|
exit -1
|
111
125
|
end
|
112
126
|
|
113
|
-
|
127
|
+
ec2_host = !options[:ec2access].nil? && !options[:ec2secret].nil?
|
114
128
|
|
129
|
+
cid = options[:cluster] || ClusterPool::NONE_CLUSTER_ID
|
115
130
|
helper.create_resource(options) do |host|
|
116
|
-
host.allocate(args[0],
|
117
|
-
|
118
|
-
|
119
|
-
|
131
|
+
rc = host.allocate(args[0], options[:im], options[:vm], cid)
|
132
|
+
|
133
|
+
if ec2_host && !OpenNebula.is_error?(rc)
|
134
|
+
template = "EC2_ACCESS=\"#{options[:ec2access]}\"\n"\
|
135
|
+
"EC2_SECRET=\"#{options[:ec2secret]}\"\n"\
|
136
|
+
|
137
|
+
rc = host.update(template, true)
|
138
|
+
end
|
139
|
+
|
140
|
+
rc
|
120
141
|
end
|
121
142
|
end
|
122
143
|
|
data/bin/onevcenter
CHANGED
@@ -65,9 +65,9 @@ cmd=CommandParser::CmdParser.new(ARGV) do
|
|
65
65
|
helper.set_client(options)
|
66
66
|
end
|
67
67
|
|
68
|
-
|
68
|
+
############################################################################
|
69
69
|
# Global Options
|
70
|
-
|
70
|
+
############################################################################
|
71
71
|
cmd_options=CommandParser::OPTIONS-[CommandParser::VERBOSE]
|
72
72
|
set :option, cmd_options+OpenNebulaHelper::CLIENT_OPTIONS
|
73
73
|
|
@@ -93,6 +93,13 @@ cmd=CommandParser::CmdParser.new(ARGV) do
|
|
93
93
|
:format => String
|
94
94
|
}
|
95
95
|
|
96
|
+
USE_DEFAULTS = {
|
97
|
+
:name => "defaults",
|
98
|
+
:large => "--use-defaults",
|
99
|
+
:description => "Use defaults for answers to questions",
|
100
|
+
:format => String
|
101
|
+
}
|
102
|
+
|
96
103
|
############################################################################
|
97
104
|
# Import clusters
|
98
105
|
############################################################################
|
@@ -100,470 +107,80 @@ cmd=CommandParser::CmdParser.new(ARGV) do
|
|
100
107
|
Import vCenter clusters as OpenNebula hosts
|
101
108
|
EOT
|
102
109
|
|
103
|
-
command :hosts, hosts_desc, :options=>[ VCENTER, USER, PASS ] do
|
110
|
+
command :hosts, hosts_desc, :options=>[ VCENTER, USER, PASS, USE_DEFAULTS ] do
|
104
111
|
con_ops = connection_options("Hosts", options)
|
105
112
|
|
106
|
-
|
107
|
-
STDOUT.print "\nConnecting to vCenter: #{options[:vcenter]}..."
|
108
|
-
|
109
|
-
vc = VCenterDriver::VIClient.new_connection(con_ops)
|
110
|
-
|
111
|
-
STDOUT.print "done!\n\n"
|
112
|
-
|
113
|
-
STDOUT.print "Exploring vCenter resources..."
|
114
|
-
|
115
|
-
rs = vc.hierarchy
|
116
|
-
|
117
|
-
STDOUT.print "done!\n\n"
|
118
|
-
|
119
|
-
rs.each {|dc, cluster|
|
120
|
-
STDOUT.print "Do you want to process datacenter #{dc} [y/n]? "
|
121
|
-
|
122
|
-
next if STDIN.gets.strip.downcase != 'y'
|
123
|
-
|
124
|
-
if cluster.empty?
|
125
|
-
STDOUT.puts " No new clusters found in #{dc}..."
|
126
|
-
next
|
127
|
-
end
|
128
|
-
|
129
|
-
cluster.each{ |c|
|
130
|
-
STDOUT.print " * Import cluster #{c} [y/n]? "
|
131
|
-
|
132
|
-
next if STDIN.gets.strip.downcase != 'y'
|
133
|
-
|
134
|
-
r, m = VCenterDriver::VCenterHost.to_one(c, vc)
|
135
|
-
|
136
|
-
if r == 0
|
137
|
-
STDOUT.puts " OpenNebula host #{c} with id #{m}"\
|
138
|
-
" successfully created."
|
139
|
-
else
|
140
|
-
STDOUT.puts " Error: #{m}"
|
141
|
-
end
|
142
|
-
|
143
|
-
STDOUT.puts
|
144
|
-
}
|
145
|
-
}
|
146
|
-
rescue Exception => e
|
147
|
-
STDOUT.puts "error: #{e.message}"
|
148
|
-
exit -1
|
149
|
-
end
|
113
|
+
VCenterDriver::Importer.import_clusters(con_ops, options)
|
150
114
|
|
151
115
|
exit 0
|
152
116
|
end
|
153
117
|
|
118
|
+
############################################################################
|
119
|
+
# Import templates
|
120
|
+
############################################################################
|
154
121
|
templates_desc = <<-EOT.unindent
|
155
122
|
Import vCenter VM Templates into OpenNebula
|
156
123
|
EOT
|
157
124
|
|
158
|
-
command :templates, templates_desc, :options=>[ VCENTER, USER, PASS ] do
|
125
|
+
command :templates, templates_desc, :options=>[ VCENTER, USER, PASS, USE_DEFAULTS ] do
|
159
126
|
con_ops = connection_options("VM Templates", options)
|
160
127
|
|
161
|
-
|
162
|
-
STDOUT.print "\nConnecting to vCenter: #{options[:vcenter]}..."
|
163
|
-
|
164
|
-
vc = VCenterDriver::VIClient.new_connection(con_ops)
|
165
|
-
|
166
|
-
STDOUT.print "done!\n\n"
|
167
|
-
|
168
|
-
STDOUT.print "Looking for VM Templates..."
|
169
|
-
|
170
|
-
rs = vc.vm_templates
|
171
|
-
|
172
|
-
STDOUT.print "done!\n"
|
173
|
-
|
174
|
-
rs.each {|dc, tmps|
|
175
|
-
STDOUT.print "\nDo you want to process datacenter #{dc} [y/n]? "
|
176
|
-
|
177
|
-
next if STDIN.gets.strip.downcase != 'y'
|
178
|
-
|
179
|
-
if tmps.empty?
|
180
|
-
STDOUT.print " No new VM Templates found in #{dc}...\n\n"
|
181
|
-
next
|
182
|
-
end
|
183
|
-
|
184
|
-
tmps.each{ |t|
|
185
|
-
STDOUT.print "\n * VM Template found:\n"\
|
186
|
-
" - Name : #{t[:name]}\n"\
|
187
|
-
" - UUID : #{t[:uuid]}\n"\
|
188
|
-
" - Cluster: #{t[:host]}\n"\
|
189
|
-
" Import this VM template [y/n]? "
|
190
|
-
|
191
|
-
next if STDIN.gets.strip.downcase != 'y'
|
192
|
-
|
193
|
-
ds_input = ""
|
194
|
-
rp_input = ""
|
195
|
-
|
196
|
-
# Datastores
|
197
|
-
|
198
|
-
STDOUT.print "\n This template is currently set to be "\
|
199
|
-
"deployed in datastore #{t[:default_ds]}."\
|
200
|
-
"\n Press y to keep the default, n to select"\
|
201
|
-
" a new datastore or d to delegate the choice"\
|
202
|
-
" to the user [y/n/d]? "
|
203
|
-
|
204
|
-
answer = STDIN.gets.strip.downcase
|
205
|
-
|
206
|
-
case answer
|
207
|
-
when 'd'
|
208
|
-
ds_split = t[:ds].split("|")
|
209
|
-
list_of_ds = ds_split[-2]
|
210
|
-
default_ds = ds_split[-1]
|
211
|
-
ds_input = ds_split[0] + "|" + ds_split[1] + "|" +
|
212
|
-
ds_split[2] + "|"
|
213
|
-
|
214
|
-
# Available list of datastores
|
215
|
-
|
216
|
-
input_str = " The list of available datastores to be"\
|
217
|
-
" presented to the user are \"#{list_of_ds}\""
|
218
|
-
input_str+= "\n Press y to agree, or input a comma"\
|
219
|
-
" separated list of datastores to edit "\
|
220
|
-
"[y/comma separated list] "
|
221
|
-
STDOUT.print input_str
|
222
|
-
|
223
|
-
answer = STDIN.gets.strip
|
224
|
-
|
225
|
-
if answer.downcase == 'y'
|
226
|
-
ds_input += ds_split[3] + "|"
|
227
|
-
else
|
228
|
-
ds_input += answer + "|"
|
229
|
-
end
|
230
|
-
|
231
|
-
# Default
|
232
|
-
input_str = " The default datastore presented to "\
|
233
|
-
"the end user is set to \"#{default_ds}\"."
|
234
|
-
input_str+= "\n Press y to agree, or input a new "\
|
235
|
-
"datastore [y/datastore name] "
|
236
|
-
STDOUT.print input_str
|
237
|
-
|
238
|
-
answer = STDIN.gets.strip
|
239
|
-
|
240
|
-
if answer.downcase == 'y'
|
241
|
-
ds_input += ds_split[4]
|
242
|
-
else
|
243
|
-
ds_input += answer
|
244
|
-
end
|
245
|
-
when 'n'
|
246
|
-
ds_split = t[:ds].split("|")
|
247
|
-
list_of_ds = ds_split[-2]
|
248
|
-
|
249
|
-
input_str = " The list of available datastores is"\
|
250
|
-
" \"#{list_of_ds}\"."
|
251
|
-
input_str+= "\n Please input the new default datastore: "
|
252
|
-
STDOUT.print input_str
|
253
|
-
|
254
|
-
answer = STDIN.gets.strip
|
255
|
-
|
256
|
-
t[:one] += "VCENTER_DATASTORE=\"#{answer}\"\n"
|
257
|
-
end
|
258
|
-
|
259
|
-
# Resource Pools
|
260
|
-
|
261
|
-
rp_split = t[:rp].split("|")
|
262
|
-
|
263
|
-
if rp_split.size > 3
|
264
|
-
STDOUT.print "\n This template is currently set to "\
|
265
|
-
"launch VMs in the default resource pool."\
|
266
|
-
"\n Press y to keep this behaviour, n to select"\
|
267
|
-
" a new resource pool or d to delegate the choice"\
|
268
|
-
" to the user [y/n/d]? "
|
269
|
-
|
270
|
-
answer = STDIN.gets.strip.downcase
|
271
|
-
|
272
|
-
case answer
|
273
|
-
when 'd'
|
274
|
-
list_of_rp = rp_split[-2]
|
275
|
-
default_rp = rp_split[-1]
|
276
|
-
rp_input = rp_split[0] + "|" + rp_split[1] + "|" +
|
277
|
-
rp_split[2] + "|"
|
278
|
-
|
279
|
-
# Available list of resource pools
|
280
|
-
|
281
|
-
input_str = " The list of available resource pools "\
|
282
|
-
"to be presented to the user are "\
|
283
|
-
"\"#{list_of_rp}\""
|
284
|
-
input_str+= "\n Press y to agree, or input a comma"\
|
285
|
-
" separated list of resource pools to edit "\
|
286
|
-
"[y/comma separated list] "
|
287
|
-
STDOUT.print input_str
|
288
|
-
|
289
|
-
answer = STDIN.gets.strip
|
290
|
-
|
291
|
-
if answer.downcase == 'y'
|
292
|
-
rp_input += rp_split[3] + "|"
|
293
|
-
else
|
294
|
-
rp_input += answer + "|"
|
295
|
-
end
|
296
|
-
|
297
|
-
# Default
|
298
|
-
input_str = " The default resource pool presented "\
|
299
|
-
"to the end user is set to"\
|
300
|
-
" \"#{default_rp}\"."
|
301
|
-
input_str+= "\n Press y to agree, or input a new "\
|
302
|
-
"resource pool [y/resource pool name] "
|
303
|
-
STDOUT.print input_str
|
304
|
-
|
305
|
-
answer = STDIN.gets.strip
|
306
|
-
|
307
|
-
if answer.downcase == 'y'
|
308
|
-
rp_input += rp_split[4]
|
309
|
-
else
|
310
|
-
rp_input += answer
|
311
|
-
end
|
312
|
-
when 'n'
|
313
|
-
list_of_rp = rp_split[-2]
|
314
|
-
|
315
|
-
input_str = " The list of available resource pools is"\
|
316
|
-
" \"#{list_of_rp}\"."
|
317
|
-
input_str+= "\n Please input the new default resource pool: "
|
318
|
-
STDOUT.print input_str
|
319
|
-
|
320
|
-
answer = STDIN.gets.strip
|
321
|
-
|
322
|
-
t[:one] += "RESOURCE_POOL=\"#{answer}\"\n"
|
323
|
-
end
|
324
|
-
end
|
325
|
-
|
326
|
-
if ds_input != "" ||
|
327
|
-
rp_input != ""
|
328
|
-
t[:one] += "USER_INPUTS=["
|
329
|
-
t[:one] += "VCENTER_DATASTORE=\"#{ds_input}\"," if ds_input != ""
|
330
|
-
t[:one] += "RESOURCE_POOL=\"#{rp_input}\"," if rp_input != ""
|
331
|
-
t[:one] = t[:one][0..-2]
|
332
|
-
t[:one] += "]"
|
333
|
-
end
|
334
|
-
|
335
|
-
one_t = ::OpenNebula::Template.new(
|
336
|
-
::OpenNebula::Template.build_xml, vc.one)
|
337
|
-
|
338
|
-
rc = one_t.allocate(t[:one])
|
339
|
-
|
340
|
-
if ::OpenNebula.is_error?(rc)
|
341
|
-
STDOUT.puts " Error creating template: #{rc.message}\n"
|
342
|
-
else
|
343
|
-
STDOUT.puts " OpenNebula template #{one_t.id} created!\n"
|
344
|
-
end
|
345
|
-
}
|
346
|
-
}
|
347
|
-
rescue Exception => e
|
348
|
-
STDOUT.puts "error: #{e.message}"
|
349
|
-
exit -1
|
350
|
-
end
|
128
|
+
VCenterDriver::Importer.import_templates(con_ops, options)
|
351
129
|
|
352
130
|
exit 0
|
353
131
|
end
|
354
132
|
|
133
|
+
############################################################################
|
134
|
+
# Import vms (deprecated)
|
135
|
+
############################################################################
|
355
136
|
vms_desc = <<-EOT.unindent
|
356
137
|
Deprecated action in onevcenter, please use onehost importvm instead
|
357
138
|
EOT
|
358
139
|
|
359
|
-
command :vms, vms_desc, :options=>[ VCENTER, USER, PASS ] do
|
140
|
+
command :vms, vms_desc, :options=>[ VCENTER, USER, PASS, USE_DEFAULTS ] do
|
360
141
|
STDERR.puts "Deprecated action in onevcenter, please use onehost "\
|
361
142
|
"importvm instead"
|
362
|
-
|
363
143
|
exit -1
|
364
144
|
end
|
365
145
|
|
146
|
+
############################################################################
|
147
|
+
# Import networks
|
148
|
+
############################################################################
|
366
149
|
network_desc = <<-EOT.unindent
|
367
150
|
Import vCenter networks into OpenNebula
|
368
151
|
EOT
|
369
152
|
|
370
|
-
command :networks, network_desc, :options=>[ VCENTER, USER, PASS ] do
|
153
|
+
command :networks, network_desc, :options=>[ VCENTER, USER, PASS, USE_DEFAULTS ] do
|
371
154
|
con_ops = connection_options("Networks", options)
|
372
155
|
|
373
|
-
|
374
|
-
STDOUT.print "\nConnecting to vCenter: #{options[:vcenter]}..."
|
375
|
-
|
376
|
-
vc = VCenterDriver::VIClient.new_connection(con_ops)
|
377
|
-
|
378
|
-
STDOUT.print "done!\n\n"
|
379
|
-
|
380
|
-
STDOUT.print "Looking for vCenter networks..."
|
381
|
-
|
382
|
-
rs = vc.vcenter_networks
|
383
|
-
|
384
|
-
STDOUT.print "done!\n"
|
385
|
-
|
386
|
-
rs.each {|dc, tmps|
|
387
|
-
STDOUT.print "\nDo you want to process datacenter #{dc} [y/n]? "
|
388
|
-
|
389
|
-
next if STDIN.gets.strip.downcase != 'y'
|
390
|
-
|
391
|
-
if tmps.empty?
|
392
|
-
STDOUT.print " No new Networks found in #{dc}...\n\n"
|
393
|
-
next
|
394
|
-
end
|
395
|
-
|
396
|
-
tmps.each{ |n|
|
397
|
-
print_str = "\n * Network found:\n"\
|
398
|
-
" - Name : #{n[:name]}\n"\
|
399
|
-
" - Type : #{n[:type]}\n"
|
400
|
-
print_str += " - VLAN ID : #{n[:vlan]}\n" if n[:vlan]
|
401
|
-
print_str += " - Cluster : #{n[:cluster]}\n"
|
402
|
-
print_str += " Import this Network [y/n]? "
|
403
|
-
|
404
|
-
STDOUT.print print_str
|
405
|
-
|
406
|
-
next if STDIN.gets.strip.downcase != 'y'
|
407
|
-
|
408
|
-
# Size
|
409
|
-
|
410
|
-
STDOUT.print " How many VMs are you planning"\
|
411
|
-
" to fit into this network [255]? "
|
412
|
-
|
413
|
-
size = STDIN.gets.strip
|
414
|
-
|
415
|
-
size = "255" if size.to_i.to_s != size
|
416
|
-
|
417
|
-
# Type
|
418
|
-
|
419
|
-
STDOUT.print " What type of Virtual Network"\
|
420
|
-
" do you want to create (IPv[4],IPv[6]"\
|
421
|
-
",[E]thernet) ?"
|
422
|
-
|
423
|
-
type = STDIN.gets.strip
|
424
|
-
|
425
|
-
ar_str = "\nAR=[TYPE=\""
|
426
|
-
|
427
|
-
case type.downcase
|
428
|
-
when "4"
|
429
|
-
ar_str += "IP4\""
|
430
|
-
STDOUT.print " Please input the first IP "\
|
431
|
-
"in the range: "
|
432
|
-
ip = STDIN.gets.strip
|
433
|
-
ar_str += ",IP=" + ip
|
434
|
-
|
435
|
-
STDOUT.print " Please input the first MAC "\
|
436
|
-
"in the range [Enter for default]: "
|
437
|
-
mac = STDIN.gets.strip
|
438
|
-
ar_str += ",MAC=" + mac if !mac.empty?
|
439
|
-
when "6"
|
440
|
-
ar_str += "IP6\""
|
441
|
-
STDOUT.print " Please input the first MAC "\
|
442
|
-
"in the range [Enter for default]: "
|
443
|
-
mac = STDIN.gets.strip
|
444
|
-
ar_str += ",MAC=" + mac if !mac.empty?
|
445
|
-
|
446
|
-
STDOUT.print " Please input the GLOBAL PREFIX "\
|
447
|
-
"[Enter for default]: "
|
448
|
-
gp = STDIN.gets.strip
|
449
|
-
ar_str += ",GLOBAL_PREFIX=" + gp if !gp.empty?
|
450
|
-
|
451
|
-
STDOUT.print " Please input the ULA PREFIX "\
|
452
|
-
"[Enter for default]: "
|
453
|
-
up = STDIN.gets.strip
|
454
|
-
ar_str += ",ULA_PREFIX=" + up if !up.empty?
|
455
|
-
when "e"
|
456
|
-
ar_str += "ETHER\""
|
457
|
-
STDOUT.print " Please input the first MAC "\
|
458
|
-
"in the range [Enter for default]: "
|
459
|
-
mac = STDIN.gets.strip
|
460
|
-
ar_str += ",MAC=" + mac if !mac.empty?
|
461
|
-
else
|
462
|
-
STDOUT.puts " Type [#{type}] not supported,"\
|
463
|
-
" defaulting to Ethernet."
|
464
|
-
ar_str += "ETHER\""
|
465
|
-
STDOUT.print " Please input the first MAC "\
|
466
|
-
"in the range [Enter for default]: "
|
467
|
-
mac = STDIN.gets.strip
|
468
|
-
ar_str += ",MAC=" + mac if !mac.empty?
|
469
|
-
end
|
470
|
-
|
471
|
-
ar_str += ",SIZE = \"#{size}\"]"
|
472
|
-
|
473
|
-
one_vn = ::OpenNebula::VirtualNetwork.new(
|
474
|
-
::OpenNebula::Template.build_xml, vc.one)
|
475
|
-
|
476
|
-
vnet_template = n[:one] + ar_str
|
477
|
-
|
478
|
-
rc = one_vn.allocate(vnet_template)
|
479
|
-
|
480
|
-
if ::OpenNebula.is_error?(rc)
|
481
|
-
STDOUT.puts " Error creating virtual network: " +
|
482
|
-
" #{rc.message}\n"
|
483
|
-
else
|
484
|
-
STDOUT.puts " OpenNebula virtual network " +
|
485
|
-
"#{one_vn.id} created with size #{size}!\n"
|
486
|
-
end
|
487
|
-
}
|
488
|
-
}
|
489
|
-
rescue Exception => e
|
490
|
-
STDOUT.puts "error: #{e.message}"
|
491
|
-
exit -1
|
492
|
-
end
|
156
|
+
VCenterDriver::Importer.import_networks(con_ops, options)
|
493
157
|
|
494
158
|
exit 0
|
495
159
|
end
|
496
160
|
|
161
|
+
############################################################################
|
162
|
+
# Import datastores
|
163
|
+
############################################################################
|
497
164
|
datastores_desc = <<-EOT.unindent
|
498
165
|
Import vCenter Datastores into OpenNebula
|
499
166
|
EOT
|
500
167
|
|
501
|
-
command :datastores, datastores_desc, :options=>[ VCENTER, USER, PASS ] do
|
168
|
+
command :datastores, datastores_desc, :options=>[ VCENTER, USER, PASS, USE_DEFAULTS ] do
|
502
169
|
con_ops = connection_options("Datastores", options)
|
503
170
|
|
504
|
-
|
505
|
-
STDOUT.print "\nConnecting to vCenter: #{options[:vcenter]}..."
|
506
|
-
|
507
|
-
vc = VCenterDriver::VIClient.new_connection(con_ops)
|
508
|
-
|
509
|
-
STDOUT.print "done!\n\n"
|
510
|
-
|
511
|
-
STDOUT.print "Looking for Datastores..."
|
512
|
-
|
513
|
-
rs = vc.vcenter_datastores
|
514
|
-
|
515
|
-
STDOUT.print "done!\n"
|
516
|
-
|
517
|
-
rs.each {|dc, tmps|
|
518
|
-
STDOUT.print "\nDo you want to process datacenter #{dc} [y/n]? "
|
519
|
-
|
520
|
-
next if STDIN.gets.strip.downcase != 'y'
|
521
|
-
|
522
|
-
if tmps.empty?
|
523
|
-
STDOUT.print " No new Datastores found in #{dc}...\n\n"
|
524
|
-
next
|
525
|
-
end
|
526
|
-
|
527
|
-
tmps.each{ |d|
|
528
|
-
STDOUT.print "\n * Datastore found:\n"\
|
529
|
-
" - Name : #{d[:name]}\n"\
|
530
|
-
" - Total MB : #{d[:total_mb]}\n"\
|
531
|
-
" - Free MB : #{d[:free_mb]}\n"\
|
532
|
-
" - Cluster : #{d[:cluster]}\n"\
|
533
|
-
" Import this Datastore [y/n]? "
|
534
|
-
|
535
|
-
next if STDIN.gets.strip.downcase != 'y'
|
536
|
-
|
537
|
-
one_d = ::OpenNebula::Datastore.new(
|
538
|
-
::OpenNebula::Datastore.build_xml, vc.one)
|
539
|
-
|
540
|
-
rc = one_d.allocate(d[:one])
|
541
|
-
|
542
|
-
if ::OpenNebula.is_error?(rc)
|
543
|
-
STDOUT.puts " Error creating datastore: #{rc.message}\n"\
|
544
|
-
" One datastore can exist only once, and "\
|
545
|
-
"can be used in any vCenter Cluster that "\
|
546
|
-
"has access to it. Also, no spaces allowed "\
|
547
|
-
"in datastore name (rename it in vCenter "\
|
548
|
-
"and try again)"
|
549
|
-
else
|
550
|
-
STDOUT.puts " OpenNebula datastore #{one_d.id} created!\n"
|
551
|
-
end
|
552
|
-
}
|
553
|
-
}
|
554
|
-
rescue Exception => e
|
555
|
-
STDOUT.puts "error: #{e.message}"
|
556
|
-
exit -1
|
557
|
-
end
|
171
|
+
VCenterDriver::Importer.import_datastore(con_ops, options)
|
558
172
|
|
559
173
|
exit 0
|
560
174
|
end
|
561
175
|
|
176
|
+
############################################################################
|
177
|
+
# Import images
|
178
|
+
############################################################################
|
562
179
|
images_desc = <<-EOT.unindent
|
563
180
|
Import vCenter Images into OpenNebula
|
564
181
|
EOT
|
565
182
|
|
566
|
-
command :images, images_desc, :ds_name, :options=>[ VCENTER, USER, PASS ] do
|
183
|
+
command :images, images_desc, :ds_name, :options=>[ VCENTER, USER, PASS, USE_DEFAULTS ] do
|
567
184
|
ds_name = args[0]
|
568
185
|
|
569
186
|
if !ds_name
|
@@ -573,49 +190,7 @@ cmd=CommandParser::CmdParser.new(ARGV) do
|
|
573
190
|
|
574
191
|
con_ops = connection_options("Images", options)
|
575
192
|
|
576
|
-
|
577
|
-
STDOUT.print "\nConnecting to vCenter: #{options[:vcenter]}..."
|
578
|
-
|
579
|
-
vc = VCenterDriver::VIClient.new_connection(con_ops)
|
580
|
-
|
581
|
-
STDOUT.print "done!\n\n"
|
582
|
-
|
583
|
-
STDOUT.print "Looking for Images..."
|
584
|
-
|
585
|
-
images = vc.vcenter_images(ds_name)
|
586
|
-
|
587
|
-
STDOUT.print "done!\n"
|
588
|
-
|
589
|
-
images.each{ |i|
|
590
|
-
STDOUT.print "\n * Image found:\n"\
|
591
|
-
" - Name : #{i[:name]}\n"\
|
592
|
-
" - Path : #{i[:path]}\n"\
|
593
|
-
" - Type : #{i[:type]}\n"\
|
594
|
-
" Import this Image [y/n]? "
|
595
|
-
|
596
|
-
next if STDIN.gets.strip.downcase != 'y'
|
597
|
-
|
598
|
-
one_i = ::OpenNebula::Image.new(
|
599
|
-
::OpenNebula::Image.build_xml, vc.one)
|
600
|
-
|
601
|
-
rc = one_i.allocate(i[:one], i[:dsid].to_i)
|
602
|
-
|
603
|
-
if ::OpenNebula.is_error?(rc)
|
604
|
-
STDOUT.puts "Error creating image: #{rc.message}\n"
|
605
|
-
if rc.message == "[ImageAllocate] Not enough space "\
|
606
|
-
"in datastore"
|
607
|
-
STDOUT.puts "Please disable DATASTORE_CAPACITY_"\
|
608
|
-
"CHECK in /etc/one/oned.conf and "\
|
609
|
-
"restart OpenNebula."
|
610
|
-
end
|
611
|
-
else
|
612
|
-
STDOUT.puts " OpenNebula image #{one_i.id} created!\n"
|
613
|
-
end
|
614
|
-
}
|
615
|
-
rescue Exception => e
|
616
|
-
STDOUT.puts "error: #{e.message}"
|
617
|
-
exit -1
|
618
|
-
end
|
193
|
+
VCenterDriver::Importer.import_images(con_ops, ds_name, options)
|
619
194
|
|
620
195
|
exit 0
|
621
196
|
end
|