opennebula-cli 5.12.8 → 5.13.80.pre

Sign up to get free protection for your applications and to get access to all the features.
Files changed (102) hide show
  1. checksums.yaml +4 -4
  2. data/bin/oneacct +9 -4
  3. data/bin/oneacl +8 -5
  4. data/bin/onecluster +10 -7
  5. data/bin/onedatastore +10 -7
  6. data/bin/oneflow +85 -13
  7. data/bin/oneflow-template +45 -8
  8. data/bin/onegroup +10 -7
  9. data/bin/onehook +10 -7
  10. data/bin/onehost +8 -5
  11. data/bin/oneimage +99 -8
  12. data/bin/onemarket +10 -7
  13. data/bin/onemarketapp +117 -10
  14. data/bin/onesecgroup +13 -7
  15. data/bin/oneshowback +18 -10
  16. data/bin/onetemplate +12 -8
  17. data/bin/oneuser +30 -7
  18. data/bin/onevcenter +7 -4
  19. data/bin/onevdc +10 -7
  20. data/bin/onevm +146 -11
  21. data/bin/onevmgroup +13 -7
  22. data/bin/onevnet +8 -5
  23. data/bin/onevntemplate +11 -7
  24. data/bin/onevrouter +10 -7
  25. data/bin/onezone +10 -7
  26. data/lib/cli_helper.rb +4 -6
  27. data/lib/command_parser.rb +1 -1
  28. data/lib/one_helper.rb +398 -37
  29. data/lib/one_helper/oneacct_helper.rb +8 -17
  30. data/lib/one_helper/oneacl_helper.rb +1 -1
  31. data/lib/one_helper/onecluster_helper.rb +1 -1
  32. data/lib/one_helper/onedatastore_helper.rb +11 -1
  33. data/lib/one_helper/oneflow_helper.rb +20 -5
  34. data/lib/one_helper/oneflowtemplate_helper.rb +28 -2
  35. data/lib/one_helper/onegroup_helper.rb +1 -1
  36. data/lib/one_helper/onehook_helper.rb +1 -1
  37. data/lib/one_helper/onehost_helper.rb +1 -5
  38. data/lib/one_helper/oneimage_helper.rb +7 -7
  39. data/lib/one_helper/onemarket_helper.rb +1 -1
  40. data/lib/one_helper/onemarketapp_helper.rb +494 -96
  41. data/lib/one_helper/onequota_helper.rb +1 -1
  42. data/lib/one_helper/onesecgroup_helper.rb +1 -1
  43. data/lib/one_helper/onetemplate_helper.rb +12 -1
  44. data/lib/one_helper/oneuser_helper.rb +11 -3
  45. data/lib/one_helper/onevcenter_helper.rb +176 -146
  46. data/lib/one_helper/onevdc_helper.rb +1 -1
  47. data/lib/one_helper/onevm_helper.rb +4 -3
  48. data/lib/one_helper/onevmgroup_helper.rb +1 -1
  49. data/lib/one_helper/onevnet_helper.rb +1 -1
  50. data/lib/one_helper/onevntemplate_helper.rb +1 -1
  51. data/lib/one_helper/onevrouter_helper.rb +1 -20
  52. data/lib/one_helper/onezone_helper.rb +12 -1
  53. data/share/schemas/xsd/acct.xsd +179 -0
  54. data/share/schemas/xsd/acl_pool.xsd +22 -0
  55. data/share/schemas/xsd/api_info.xsd +43 -0
  56. data/share/schemas/xsd/cluster.xsd +34 -0
  57. data/share/schemas/xsd/cluster_pool.xsd +12 -0
  58. data/share/schemas/xsd/datastore.xsd +67 -0
  59. data/share/schemas/xsd/datastore_pool.xsd +12 -0
  60. data/share/schemas/xsd/document.xsd +42 -0
  61. data/share/schemas/xsd/document_pool.xsd +12 -0
  62. data/share/schemas/xsd/group.xsd +179 -0
  63. data/share/schemas/xsd/group_pool.xsd +194 -0
  64. data/share/schemas/xsd/hook.xsd +59 -0
  65. data/share/schemas/xsd/hook_message_api.xsd +14 -0
  66. data/share/schemas/xsd/hook_message_retry.xsd +12 -0
  67. data/share/schemas/xsd/hook_message_state.xsd +25 -0
  68. data/share/schemas/xsd/hook_pool.xsd +12 -0
  69. data/share/schemas/xsd/host.xsd +164 -0
  70. data/share/schemas/xsd/host_pool.xsd +12 -0
  71. data/share/schemas/xsd/image.xsd +123 -0
  72. data/share/schemas/xsd/image_pool.xsd +12 -0
  73. data/share/schemas/xsd/index.xsd +49 -0
  74. data/share/schemas/xsd/marketplace.xsd +44 -0
  75. data/share/schemas/xsd/marketplace_pool.xsd +12 -0
  76. data/share/schemas/xsd/marketplaceapp.xsd +56 -0
  77. data/share/schemas/xsd/marketplaceapp_pool.xsd +12 -0
  78. data/share/schemas/xsd/opennebula_configuration.xsd +412 -0
  79. data/share/schemas/xsd/raftstatus.xsd +18 -0
  80. data/share/schemas/xsd/security_group.xsd +74 -0
  81. data/share/schemas/xsd/security_group_pool.xsd +12 -0
  82. data/share/schemas/xsd/showback.xsd +29 -0
  83. data/share/schemas/xsd/user.xsd +186 -0
  84. data/share/schemas/xsd/user_pool.xsd +201 -0
  85. data/share/schemas/xsd/vdc.xsd +76 -0
  86. data/share/schemas/xsd/vdc_pool.xsd +12 -0
  87. data/share/schemas/xsd/vm.xsd +251 -0
  88. data/share/schemas/xsd/vm_group.xsd +59 -0
  89. data/share/schemas/xsd/vm_group_pool.xsd +12 -0
  90. data/share/schemas/xsd/vm_pool.xsd +114 -0
  91. data/share/schemas/xsd/vmtemplate.xsd +52 -0
  92. data/share/schemas/xsd/vmtemplate_pool.xsd +12 -0
  93. data/share/schemas/xsd/vnet.xsd +137 -0
  94. data/share/schemas/xsd/vnet_pool.xsd +85 -0
  95. data/share/schemas/xsd/vntemplate.xsd +50 -0
  96. data/share/schemas/xsd/vntemplate_pool.xsd +12 -0
  97. data/share/schemas/xsd/vrouter.xsd +49 -0
  98. data/share/schemas/xsd/vrouter_pool.xsd +12 -0
  99. data/share/schemas/xsd/zone.xsd +40 -0
  100. data/share/schemas/xsd/zone_pool.xsd +36 -0
  101. metadata +68 -7
  102. data/lib/one_helper/oneprovision_helper.rb +0 -362
data/bin/onehook CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  # -------------------------------------------------------------------------- #
4
- # Copyright 2002-2020, OpenNebula Project, OpenNebula Systems #
4
+ # Copyright 2002-2021, OpenNebula Project, OpenNebula Systems #
5
5
  # #
6
6
  # Licensed under the Apache License, Version 2.0 (the "License"); you may #
7
7
  # not use this file except in compliance with the License. You may obtain #
@@ -27,9 +27,12 @@ else
27
27
  end
28
28
 
29
29
  if File.directory?(GEMS_LOCATION)
30
- $LOAD_PATH.reject! {|l| l =~ /vendor_ruby/ }
31
- require 'rubygems'
32
- Gem.use_paths(File.realpath(GEMS_LOCATION))
30
+ real_gems_path = File.realpath(GEMS_LOCATION)
31
+ if !defined?(Gem) || Gem.path != [real_gems_path]
32
+ $LOAD_PATH.reject! {|l| l =~ /vendor_ruby/ }
33
+ require 'rubygems'
34
+ Gem.use_paths(real_gems_path)
35
+ end
33
36
  end
34
37
 
35
38
  $LOAD_PATH << RUBY_LIB_LOCATION
@@ -133,8 +136,8 @@ CommandParser::CmdParser.new(ARGV) do
133
136
  ########################################################################
134
137
  set :option, CommandParser::OPTIONS + OpenNebulaHelper::CLIENT_OPTIONS
135
138
 
136
- list_options = CLIHelper::OPTIONS
137
- list_options << OpenNebulaHelper::XML
139
+ list_options = CLIHelper::OPTIONS
140
+ list_options += OpenNebulaHelper::FORMAT
138
141
  list_options << OpenNebulaHelper::NUMERIC
139
142
  list_options << OpenNebulaHelper::DESCRIBE
140
143
 
@@ -228,7 +231,7 @@ CommandParser::CmdParser.new(ARGV) do
228
231
  EOT
229
232
 
230
233
  command :show, show_desc, :hookid,
231
- :options => [OpenNebulaHelper::XML, OpenNebulaHelper::EXTENDED,
234
+ :options => [OpenNebulaHelper::FORMAT, OpenNebulaHelper::EXTENDED,
232
235
  EXECUTION] do
233
236
  helper.show_resource(args[0], options)
234
237
  end
data/bin/onehost CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  # -------------------------------------------------------------------------- #
4
- # Copyright 2002-2020, OpenNebula Project, OpenNebula Systems #
4
+ # Copyright 2002-2021, OpenNebula Project, OpenNebula Systems #
5
5
  # #
6
6
  # Licensed under the Apache License, Version 2.0 (the "License"); you may #
7
7
  # not use this file except in compliance with the License. You may obtain #
@@ -29,9 +29,12 @@ else
29
29
  end
30
30
 
31
31
  if File.directory?(GEMS_LOCATION)
32
- $LOAD_PATH.reject! {|l| l =~ /vendor_ruby/ }
33
- require 'rubygems'
34
- Gem.use_paths(File.realpath(GEMS_LOCATION))
32
+ real_gems_path = File.realpath(GEMS_LOCATION)
33
+ if !defined?(Gem) || Gem.path != [real_gems_path]
34
+ $LOAD_PATH.reject! {|l| l =~ /vendor_ruby/ }
35
+ require 'rubygems'
36
+ Gem.use_paths(real_gems_path)
37
+ end
35
38
  end
36
39
 
37
40
  $LOAD_PATH << RUBY_LIB_LOCATION
@@ -283,7 +286,7 @@ CommandParser::CmdParser.new(ARGV) do
283
286
  EOT
284
287
 
285
288
  command :show, show_desc, :hostid,
286
- :options => [OpenNebulaHelper::XML, OpenNebulaHelper::DECRYPT] do
289
+ :options => [OpenNebulaHelper::FORMAT, OpenNebulaHelper::DECRYPT] do
287
290
  helper.show_resource(args[0], options)
288
291
  end
289
292
 
data/bin/oneimage CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  # -------------------------------------------------------------------------- #
4
- # Copyright 2002-2020, OpenNebula Project, OpenNebula Systems #
4
+ # Copyright 2002-2021, OpenNebula Project, OpenNebula Systems #
5
5
  # #
6
6
  # Licensed under the Apache License, Version 2.0 (the "License"); you may #
7
7
  # not use this file except in compliance with the License. You may obtain #
@@ -27,14 +27,18 @@ else
27
27
  end
28
28
 
29
29
  if File.directory?(GEMS_LOCATION)
30
- $LOAD_PATH.reject! {|l| l =~ /vendor_ruby/ }
31
- require 'rubygems'
32
- Gem.use_paths(File.realpath(GEMS_LOCATION))
30
+ real_gems_path = File.realpath(GEMS_LOCATION)
31
+ if !defined?(Gem) || Gem.path != [real_gems_path]
32
+ $LOAD_PATH.reject! {|l| l =~ /vendor_ruby/ }
33
+ require 'rubygems'
34
+ Gem.use_paths(real_gems_path)
35
+ end
33
36
  end
34
37
 
35
38
  $LOAD_PATH << RUBY_LIB_LOCATION
36
39
  $LOAD_PATH << RUBY_LIB_LOCATION + '/cli'
37
40
 
41
+ require 'tempfile'
38
42
  require 'command_parser'
39
43
  require 'one_helper/oneimage_helper'
40
44
  require 'one_helper/onedatastore_helper'
@@ -73,17 +77,25 @@ CommandParser::CmdParser.new(ARGV) do
73
77
  :description => 'lock all actions'
74
78
  }
75
79
 
80
+ NO_CONTEXT = {
81
+ :name => 'no_context',
82
+ :large => '--no-context',
83
+ :description => 'Do not add context when building from Dockerfile'
84
+ }
85
+
76
86
  ########################################################################
77
87
  # Global Options
78
88
  ########################################################################
79
89
  set :option, CommandParser::OPTIONS + OpenNebulaHelper::CLIENT_OPTIONS
80
90
 
81
- list_options = CLIHelper::OPTIONS
82
- list_options << OpenNebulaHelper::XML
91
+ list_options = CLIHelper::OPTIONS
92
+ list_options += OpenNebulaHelper::FORMAT
83
93
  list_options << OpenNebulaHelper::NUMERIC
84
94
  list_options << OpenNebulaHelper::DESCRIBE
85
95
 
86
- CREATE_OPTIONS = [OneDatastoreHelper::DATASTORE, OneImageHelper::IMAGE]
96
+ CREATE_OPTIONS = [OneDatastoreHelper::DATASTORE,
97
+ OneImageHelper::IMAGE,
98
+ NO_CONTEXT]
87
99
 
88
100
  ########################################################################
89
101
  # Formatters for arguments
@@ -168,6 +180,15 @@ CommandParser::CmdParser.new(ARGV) do
168
180
  next -1
169
181
  end
170
182
 
183
+ # Add context information when building image (just working on Docker)
184
+ if (options.key? :no_context) && options[:path]
185
+ if options[:path].include?('?')
186
+ options[:path] << '&context=no'
187
+ else
188
+ options[:path] << '?context=no'
189
+ end
190
+ end
191
+
171
192
  helper.create_resource(options) do |image|
172
193
  begin
173
194
  if args[0]
@@ -390,7 +411,8 @@ CommandParser::CmdParser.new(ARGV) do
390
411
  Shows information for the given Image
391
412
  EOT
392
413
 
393
- command :show, show_desc, :imageid, :options => OpenNebulaHelper::XML do
414
+ command :show, show_desc, :imageid,
415
+ :options => [OpenNebulaHelper::FORMAT, OpenNebulaHelper::DECRYPT] do
394
416
  helper.show_resource(args[0], options)
395
417
  end
396
418
 
@@ -450,4 +472,73 @@ CommandParser::CmdParser.new(ARGV) do
450
472
 
451
473
  return 0
452
474
  end
475
+
476
+ dockerfile_desc = <<-EOT.unindent
477
+ Create an image based on a Dockerfile
478
+ EOT
479
+
480
+ command :dockerfile,
481
+ dockerfile_desc,
482
+ :options => CREATE_OPTIONS +
483
+ OneImageHelper::TEMPLATE_OPTIONS do
484
+ # Check user options
485
+ unless options[:datastore]
486
+ STDERR.puts 'Datastore to save the image is mandatory: '
487
+ STDERR.puts '\t -d datastore_id'
488
+ exit(-1)
489
+ end
490
+
491
+ unless options[:name]
492
+ STDERR.puts 'No name provided'
493
+ exit(-1)
494
+ end
495
+
496
+ unless options[:size]
497
+ STDERR.puts 'No size given'
498
+ exit(-1)
499
+ end
500
+
501
+ # Prepare editor
502
+ tmp = Tempfile.new('dockerfile')
503
+
504
+ if ENV['EDITOR']
505
+ editor_path = ENV['EDITOR']
506
+ else
507
+ editor_path = EDITOR_PATH
508
+ end
509
+
510
+ system("#{editor_path} #{tmp.path}")
511
+
512
+ unless $CHILD_STATUS.exitstatus.zero?
513
+ STDERR.puts('Editor not defined')
514
+ exit(-1)
515
+ end
516
+
517
+ tmp.close
518
+
519
+ # Create image
520
+ helper.create_resource(options) do |image|
521
+ begin
522
+ b64 = Base64.strict_encode64(File.read(tmp.path))
523
+ options[:path] = "dockerfile:///?fileb64=#{b64}&" \
524
+ "size=#{options[:size]}"
525
+
526
+ options[:path] << '&context=no' if options.key?(:no_context)
527
+
528
+ res = OneImageHelper.create_image_template(options)
529
+
530
+ if res.first != 0
531
+ STDERR.puts res.last
532
+ next -1
533
+ end
534
+
535
+ template = res.last
536
+
537
+ image.allocate(template, options[:datastore], false)
538
+ rescue StandardError => e
539
+ STDERR.puts e.message
540
+ exit(-1)
541
+ end
542
+ end
543
+ end
453
544
  end
data/bin/onemarket CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  # -------------------------------------------------------------------------- #
4
- # Copyright 2002-2020, OpenNebula Project, OpenNebula Systems #
4
+ # Copyright 2002-2021, OpenNebula Project, OpenNebula Systems #
5
5
  # #
6
6
  # Licensed under the Apache License, Version 2.0 (the "License"); you may #
7
7
  # not use this file except in compliance with the License. You may obtain #
@@ -27,9 +27,12 @@ else
27
27
  end
28
28
 
29
29
  if File.directory?(GEMS_LOCATION)
30
- $LOAD_PATH.reject! {|l| l =~ /vendor_ruby/ }
31
- require 'rubygems'
32
- Gem.use_paths(File.realpath(GEMS_LOCATION))
30
+ real_gems_path = File.realpath(GEMS_LOCATION)
31
+ if !defined?(Gem) || Gem.path != [real_gems_path]
32
+ $LOAD_PATH.reject! {|l| l =~ /vendor_ruby/ }
33
+ require 'rubygems'
34
+ Gem.use_paths(real_gems_path)
35
+ end
33
36
  end
34
37
 
35
38
  $LOAD_PATH << RUBY_LIB_LOCATION
@@ -53,8 +56,8 @@ CommandParser::CmdParser.new(ARGV) do
53
56
  ########################################################################
54
57
  set :option, CommandParser::OPTIONS + OpenNebulaHelper::CLIENT_OPTIONS
55
58
 
56
- list_options = CLIHelper::OPTIONS
57
- list_options << OpenNebulaHelper::XML
59
+ list_options = CLIHelper::OPTIONS
60
+ list_options += OpenNebulaHelper::FORMAT
58
61
  list_options << OpenNebulaHelper::NUMERIC
59
62
  list_options << OpenNebulaHelper::DESCRIBE
60
63
 
@@ -154,7 +157,7 @@ CommandParser::CmdParser.new(ARGV) do
154
157
  EOT
155
158
 
156
159
  command :show, show_desc,
157
- :marketplaceid, :options => OpenNebulaHelper::XML do
160
+ :marketplaceid, :options => OpenNebulaHelper::FORMAT do
158
161
  helper.show_resource(args[0], options)
159
162
  end
160
163
 
data/bin/onemarketapp CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  # -------------------------------------------------------------------------- #
4
- # Copyright 2002-2020, OpenNebula Project, OpenNebula Systems #
4
+ # Copyright 2002-2021, OpenNebula Project, OpenNebula Systems #
5
5
  # #
6
6
  # Licensed under the Apache License, Version 2.0 (the "License"); you may #
7
7
  # not use this file except in compliance with the License. You may obtain #
@@ -29,9 +29,12 @@ else
29
29
  end
30
30
 
31
31
  if File.directory?(GEMS_LOCATION)
32
- $LOAD_PATH.reject! {|l| l =~ /vendor_ruby/ }
33
- require 'rubygems'
34
- Gem.use_paths(File.realpath(GEMS_LOCATION))
32
+ real_gems_path = File.realpath(GEMS_LOCATION)
33
+ if !defined?(Gem) || Gem.path != [real_gems_path]
34
+ $LOAD_PATH.reject! {|l| l =~ /vendor_ruby/ }
35
+ require 'rubygems'
36
+ Gem.use_paths(real_gems_path)
37
+ end
35
38
  end
36
39
 
37
40
  $LOAD_PATH << RUBY_LIB_LOCATION
@@ -42,6 +45,9 @@ require 'one_helper/onemarketapp_helper'
42
45
  require 'one_helper/onemarket_helper'
43
46
  require 'one_helper/onedatastore_helper'
44
47
 
48
+ require 'vcenter_driver'
49
+ CONFIG = VCenterConf.new
50
+
45
51
  CommandParser::CmdParser.new(ARGV) do
46
52
  usage '`onemarket` <command> [<args>] [<options>]'
47
53
  version OpenNebulaHelper::ONE_VERSION
@@ -83,20 +89,56 @@ CommandParser::CmdParser.new(ARGV) do
83
89
  :description => 'DockerHub image tag (default latest)'
84
90
  }
85
91
 
92
+ YES = {
93
+ :name => 'yes',
94
+ :large => '--yes',
95
+ :description => 'Import associated VM templates/images',
96
+ :proc => lambda do |_, options|
97
+ options[:yes] = 'yes'
98
+ end
99
+ }
100
+
101
+ NO = {
102
+ :name => 'no',
103
+ :large => '--no',
104
+ :description => 'Do not import/export associated VM templates/images',
105
+ :proc => lambda do |_, options|
106
+ options[:no] = 'no'
107
+ end
108
+ }
109
+
110
+ TEMPLATE = {
111
+ :name => 'template',
112
+ :large => '--template template_id ',
113
+ :description => 'Associate with VM template',
114
+ :format => Integer
115
+ }
116
+
117
+ MARKET = {
118
+ :name => 'market',
119
+ :large => '--market market_id',
120
+ :format => Integer,
121
+ :description => 'Market to import all objects'
122
+ }
123
+
86
124
  ########################################################################
87
125
  # Global Options
88
126
  ########################################################################
89
127
  set :option, CommandParser::OPTIONS + OpenNebulaHelper::CLIENT_OPTIONS
90
128
 
91
- list_options = CLIHelper::OPTIONS
92
- list_options << OpenNebulaHelper::XML
129
+ list_options = CLIHelper::OPTIONS
130
+ list_options += OpenNebulaHelper::FORMAT
93
131
  list_options << OpenNebulaHelper::NUMERIC
94
132
  list_options << OpenNebulaHelper::DESCRIBE
95
133
 
96
134
  CREATE_OPTIONS = [OneMarketPlaceHelper::MARKETPLACE]
97
135
  EXPORT_OPTIONS = [OneDatastoreHelper::DATASTORE,
136
+ OneDatastoreHelper::FILE_DATASTORE,
98
137
  OneMarketPlaceAppHelper::VMNAME,
99
- TAG]
138
+ TAG,
139
+ NO,
140
+ TEMPLATE]
141
+ IMPORT_OPTIONS = [YES, NO, MARKET, OneMarketPlaceAppHelper::VMNAME]
100
142
 
101
143
  ########################################################################
102
144
  # Formatters for arguments
@@ -175,6 +217,60 @@ CommandParser::CmdParser.new(ARGV) do
175
217
  end
176
218
  end
177
219
 
220
+ import_desc = <<-EOT.unindent
221
+ Imports a service template into the marketplace
222
+ EOT
223
+
224
+ command [:'service-template', :import],
225
+ import_desc,
226
+ :service_template_id,
227
+ :options => IMPORT_OPTIONS do
228
+ helper.import(args[0], ServiceTemplate) do |id|
229
+ helper.import_service_template(id, options)
230
+ end
231
+ end
232
+
233
+ vm_import_desc = <<-EOT.unindent
234
+ Imports a VM template into the marketplace
235
+ EOT
236
+
237
+ command [:'vm-template', :import],
238
+ vm_import_desc,
239
+ :vm_template_id,
240
+ :options => IMPORT_OPTIONS do
241
+ helper.import(args[0], TemplatePool) do |id|
242
+ helper.import_vm_template(id, options)
243
+ end
244
+ end
245
+
246
+ vm_import_desc = <<-EOT.unindent
247
+ Imports a VM into the marketplace
248
+ EOT
249
+
250
+ command [:vm, :import],
251
+ vm_import_desc,
252
+ :vm_id,
253
+ :options => IMPORT_OPTIONS do
254
+ t_id = helper.save_as_template(
255
+ helper.get_obj_id(args[0], VirtualMachinePool)
256
+ )
257
+
258
+ if OpenNebula.is_error?(t_id)
259
+ STDERR.puts t_id.message
260
+ exit(-1)
261
+ else
262
+ helper.import(t_id, TemplatePool) do |id|
263
+ helper.import_vm_template(id, options)
264
+ end
265
+ end
266
+
267
+ puts
268
+ puts 'To delete saved template use: ' \
269
+ "`onetemplate delete #{t_id} --recursive`"
270
+
271
+ 0
272
+ end
273
+
178
274
  export_desc = <<-EOT.unindent
179
275
  Exports the marketplace app to the OpenNebula cloud
180
276
  EOT
@@ -183,20 +279,31 @@ CommandParser::CmdParser.new(ARGV) do
183
279
  helper.perform_action(args[0], options, 'exported') do |obj|
184
280
  tag ="tag=#{options[:tag]}" if options[:tag]
185
281
 
282
+ obj.extend(MarketPlaceAppExt)
283
+
186
284
  rc = obj.export(
187
285
  :dsid => options[:datastore],
188
286
  :name => args[1],
189
287
  :vmtemplate_name => options[:vmname],
190
- :url_args => tag
288
+ :url_args => tag,
289
+ :notemplate => options[:no] == 'no',
290
+ :template => options[:template],
291
+ :default_template => CONFIG[:default_template]
191
292
  )
192
293
 
193
- next rc if OpenNebula.is_error?(rc)
294
+ if OpenNebula.is_error?(rc)
295
+ STDERR.puts rc.message
296
+ exit(-1)
297
+ end
194
298
 
195
299
  rc.each do |key, value|
300
+ next if value.nil? || value.empty? || key == :image_type
301
+
196
302
  puts key.to_s.upcase
197
303
  value.each do |id|
198
304
  if OpenNebula.is_error?(id)
199
305
  puts id.to_str
306
+ exit(-1)
200
307
  else
201
308
  puts " ID: #{id}"
202
309
  end
@@ -300,7 +407,7 @@ CommandParser::CmdParser.new(ARGV) do
300
407
  Shows information for the given marketplace app
301
408
  EOT
302
409
 
303
- command :show, show_desc, :appid, :options => OpenNebulaHelper::XML do
410
+ command :show, show_desc, :appid, :options => OpenNebulaHelper::FORMAT do
304
411
  helper.show_resource(args[0], options)
305
412
  end
306
413