opennebula-cli 5.12.9 → 6.0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (103) 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 +10 -7
  11. data/bin/oneimage +100 -9
  12. data/bin/onemarket +10 -7
  13. data/bin/onemarketapp +114 -11
  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 +8 -11
  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 +11 -8
  26. data/lib/cli_helper.rb +17 -8
  27. data/lib/command_parser.rb +17 -14
  28. data/lib/one_helper.rb +401 -39
  29. data/lib/one_helper/oneacct_helper.rb +6 -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 +13 -7
  39. data/lib/one_helper/onemarket_helper.rb +1 -1
  40. data/lib/one_helper/onemarketapp_helper.rb +500 -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 +24 -17
  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 +50 -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/monitoring_data.xsd +41 -0
  79. data/share/schemas/xsd/opennebula_configuration.xsd +412 -0
  80. data/share/schemas/xsd/raftstatus.xsd +18 -0
  81. data/share/schemas/xsd/security_group.xsd +74 -0
  82. data/share/schemas/xsd/security_group_pool.xsd +12 -0
  83. data/share/schemas/xsd/showback.xsd +29 -0
  84. data/share/schemas/xsd/user.xsd +186 -0
  85. data/share/schemas/xsd/user_pool.xsd +201 -0
  86. data/share/schemas/xsd/vdc.xsd +76 -0
  87. data/share/schemas/xsd/vdc_pool.xsd +12 -0
  88. data/share/schemas/xsd/vm.xsd +251 -0
  89. data/share/schemas/xsd/vm_group.xsd +59 -0
  90. data/share/schemas/xsd/vm_group_pool.xsd +12 -0
  91. data/share/schemas/xsd/vm_pool.xsd +114 -0
  92. data/share/schemas/xsd/vmtemplate.xsd +52 -0
  93. data/share/schemas/xsd/vmtemplate_pool.xsd +12 -0
  94. data/share/schemas/xsd/vnet.xsd +137 -0
  95. data/share/schemas/xsd/vnet_pool.xsd +85 -0
  96. data/share/schemas/xsd/vntemplate.xsd +50 -0
  97. data/share/schemas/xsd/vntemplate_pool.xsd +12 -0
  98. data/share/schemas/xsd/vrouter.xsd +49 -0
  99. data/share/schemas/xsd/vrouter_pool.xsd +12 -0
  100. data/share/schemas/xsd/zone.xsd +40 -0
  101. data/share/schemas/xsd/zone_pool.xsd +36 -0
  102. metadata +67 -5
  103. 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
@@ -168,8 +171,8 @@ CommandParser::CmdParser.new(ARGV) do
168
171
  [:file, nil], :options => CREAT_OPTIONS do
169
172
  if options[:im].nil? || options[:vm].nil?
170
173
  STDERR.puts 'Drivers are mandatory to create a host:'
171
- STDERR.puts '\t -i information driver'
172
- STDERR.puts '\t -v hypervisor driver'
174
+ STDERR.puts "\t -i information driver"
175
+ STDERR.puts "\t -v hypervisor driver"
173
176
  exit(-1)
174
177
  end
175
178
 
@@ -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
@@ -152,7 +164,7 @@ CommandParser::CmdParser.new(ARGV) do
152
164
  :options => CREATE_OPTIONS + OneImageHelper::TEMPLATE_OPTIONS do
153
165
  if options[:datastore].nil? && !options[:dry]
154
166
  STDERR.puts 'Datastore to save the image is mandatory: '
155
- STDERR.puts '\t -d datastore_id'
167
+ STDERR.puts "\t -d datastore_id"
156
168
  exit(-1)
157
169
  end
158
170
 
@@ -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
@@ -83,20 +86,56 @@ CommandParser::CmdParser.new(ARGV) do
83
86
  :description => 'DockerHub image tag (default latest)'
84
87
  }
85
88
 
89
+ YES = {
90
+ :name => 'yes',
91
+ :large => '--yes',
92
+ :description => 'Import associated VM templates/images',
93
+ :proc => lambda do |_, options|
94
+ options[:yes] = 'yes'
95
+ end
96
+ }
97
+
98
+ NO = {
99
+ :name => 'no',
100
+ :large => '--no',
101
+ :description => 'Do not import/export associated VM templates/images',
102
+ :proc => lambda do |_, options|
103
+ options[:no] = 'no'
104
+ end
105
+ }
106
+
107
+ TEMPLATE = {
108
+ :name => 'template',
109
+ :large => '--template template_id ',
110
+ :description => 'Associate with VM template',
111
+ :format => Integer
112
+ }
113
+
114
+ MARKET = {
115
+ :name => 'market',
116
+ :large => '--market market_id',
117
+ :format => Integer,
118
+ :description => 'Market to import all objects'
119
+ }
120
+
86
121
  ########################################################################
87
122
  # Global Options
88
123
  ########################################################################
89
124
  set :option, CommandParser::OPTIONS + OpenNebulaHelper::CLIENT_OPTIONS
90
125
 
91
- list_options = CLIHelper::OPTIONS
92
- list_options << OpenNebulaHelper::XML
126
+ list_options = CLIHelper::OPTIONS
127
+ list_options += OpenNebulaHelper::FORMAT
93
128
  list_options << OpenNebulaHelper::NUMERIC
94
129
  list_options << OpenNebulaHelper::DESCRIBE
95
130
 
96
131
  CREATE_OPTIONS = [OneMarketPlaceHelper::MARKETPLACE]
97
132
  EXPORT_OPTIONS = [OneDatastoreHelper::DATASTORE,
133
+ OneDatastoreHelper::FILE_DATASTORE,
98
134
  OneMarketPlaceAppHelper::VMNAME,
99
- TAG]
135
+ TAG,
136
+ NO,
137
+ TEMPLATE]
138
+ IMPORT_OPTIONS = [YES, NO, MARKET, OneMarketPlaceAppHelper::VMNAME]
100
139
 
101
140
  ########################################################################
102
141
  # Formatters for arguments
@@ -135,7 +174,7 @@ CommandParser::CmdParser.new(ARGV) do
135
174
  OneMarketPlaceAppHelper::TEMPLATE_OPTIONS do
136
175
  if options[:marketplace].nil?
137
176
  STDERR.puts 'Marketplace to save the app is mandatory: '
138
- STDERR.puts '\t -m marketplace_id'
177
+ STDERR.puts "\t -m marketplace_id"
139
178
  exit(-1)
140
179
  end
141
180
 
@@ -175,6 +214,60 @@ CommandParser::CmdParser.new(ARGV) do
175
214
  end
176
215
  end
177
216
 
217
+ import_desc = <<-EOT.unindent
218
+ Imports a service template into the marketplace
219
+ EOT
220
+
221
+ command [:'service-template', :import],
222
+ import_desc,
223
+ :service_template_id,
224
+ :options => IMPORT_OPTIONS do
225
+ helper.import(args[0], ServiceTemplate) do |id|
226
+ helper.import_service_template(id, options)
227
+ end
228
+ end
229
+
230
+ vm_import_desc = <<-EOT.unindent
231
+ Imports a VM template into the marketplace
232
+ EOT
233
+
234
+ command [:'vm-template', :import],
235
+ vm_import_desc,
236
+ :vm_template_id,
237
+ :options => IMPORT_OPTIONS do
238
+ helper.import(args[0], TemplatePool) do |id|
239
+ helper.import_vm_template(id, options)
240
+ end
241
+ end
242
+
243
+ vm_import_desc = <<-EOT.unindent
244
+ Imports a VM into the marketplace
245
+ EOT
246
+
247
+ command [:vm, :import],
248
+ vm_import_desc,
249
+ :vm_id,
250
+ :options => IMPORT_OPTIONS do
251
+ t_id = helper.save_as_template(
252
+ helper.get_obj_id(args[0], VirtualMachinePool)
253
+ )
254
+
255
+ if OpenNebula.is_error?(t_id)
256
+ STDERR.puts t_id.message
257
+ exit(-1)
258
+ else
259
+ helper.import(t_id, TemplatePool) do |id|
260
+ helper.import_vm_template(id, options)
261
+ end
262
+ end
263
+
264
+ puts
265
+ puts 'To delete saved template use: ' \
266
+ "`onetemplate delete #{t_id} --recursive`"
267
+
268
+ 0
269
+ end
270
+
178
271
  export_desc = <<-EOT.unindent
179
272
  Exports the marketplace app to the OpenNebula cloud
180
273
  EOT
@@ -183,20 +276,30 @@ CommandParser::CmdParser.new(ARGV) do
183
276
  helper.perform_action(args[0], options, 'exported') do |obj|
184
277
  tag ="tag=#{options[:tag]}" if options[:tag]
185
278
 
279
+ obj.extend(MarketPlaceAppExt)
280
+
186
281
  rc = obj.export(
187
282
  :dsid => options[:datastore],
188
283
  :name => args[1],
189
284
  :vmtemplate_name => options[:vmname],
190
- :url_args => tag
285
+ :url_args => tag,
286
+ :notemplate => options[:no] == 'no',
287
+ :template => options[:template]
191
288
  )
192
289
 
193
- next rc if OpenNebula.is_error?(rc)
290
+ if OpenNebula.is_error?(rc)
291
+ STDERR.puts rc.message
292
+ exit(-1)
293
+ end
194
294
 
195
295
  rc.each do |key, value|
296
+ next if value.nil? || value.empty? || key == :image_type
297
+
196
298
  puts key.to_s.upcase
197
299
  value.each do |id|
198
300
  if OpenNebula.is_error?(id)
199
301
  puts id.to_str
302
+ exit(-1)
200
303
  else
201
304
  puts " ID: #{id}"
202
305
  end
@@ -300,7 +403,7 @@ CommandParser::CmdParser.new(ARGV) do
300
403
  Shows information for the given marketplace app
301
404
  EOT
302
405
 
303
- command :show, show_desc, :appid, :options => OpenNebulaHelper::XML do
406
+ command :show, show_desc, :appid, :options => OpenNebulaHelper::FORMAT do
304
407
  helper.show_resource(args[0], options)
305
408
  end
306
409