opennebula-cli 6.2.0 → 6.3.80.pre

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: b9047abc8d9178fcb286d57d5b78011953ac28b9
4
- data.tar.gz: ed6331618ee88c1858ca45686a3e618347177301
2
+ SHA256:
3
+ metadata.gz: 5a1350ce7a3d5d9d6e1b7ffb16f51eaecdf01cd397fa8d1bb0fb87f08b5c0fc4
4
+ data.tar.gz: fb950f30366562c94cd865adffeae41d7442cf70e20a7ab035c8a40cbb6aec3e
5
5
  SHA512:
6
- metadata.gz: cc9036cd78ef6b9f679d3b572b84e953687f4c1e67efa7c3b82da2010536d84274a309318edc576abc81e58c9662a87c23605d719d9dd059bc13a7c0cc2896cf
7
- data.tar.gz: b74774142ddff00b508f990c63c575743493a7e8d7728d117dd46f27705e22143ff9f5180a8cbcd13b3127cfec6ba409a824857e7cdfc4206faae98654d21b03
6
+ metadata.gz: c5d582717725a0da69269abe94e4fb07f429ac58286116a3bf165833c9e894505370fbaf4ca2b7d3d9ebfe26c2c927d8e4a1848c014db13c45550c0d1af9ec8a
7
+ data.tar.gz: 34127cec5cc3eaf71dc8e4dc479a05d3f5f0760b99725f99c0155a37986d7477ec3879298d11153d79559c091075f698d04145b2d35d86898d63e85aeb017a6a
data/bin/onehook CHANGED
@@ -256,8 +256,8 @@ CommandParser::CmdParser.new(ARGV) do
256
256
  end
257
257
 
258
258
  lock_desc = <<-EOT.unindent
259
- Locks a Hook with differents levels for lock any actions with this Hook,
260
- show and monitoring never will be locked.
259
+ Locks a Hook to prevent certain actions defined by different levels.
260
+ The show action will never be locked.
261
261
  Valid states are: All.
262
262
  Levels:
263
263
  [Use]: locks Admin, Manage and Use actions.
data/bin/onehost CHANGED
@@ -109,6 +109,20 @@ CommandParser::CmdParser.new(ARGV) do
109
109
  :format => String
110
110
  }
111
111
 
112
+ IPV4 = {
113
+ :name => 'ipv4',
114
+ :large => '--ipv4 ip1,ip2',
115
+ :description => 'Comma separated IPV4 to set',
116
+ :format => Array
117
+ }
118
+
119
+ IPV6 = {
120
+ :name => 'ipv6',
121
+ :large => '--ipv6 ip1,ip2',
122
+ :description => 'Comma separated IPV6 to set',
123
+ :format => Array
124
+ }
125
+
112
126
  CREAT_OPTIONS = [IM, VMM, OneClusterHelper::CLUSTER, TYPE]
113
127
  SYNC_OPTIONS = [OneClusterHelper::CLUSTER, FORCE, SSH]
114
128
 
@@ -344,12 +358,16 @@ CommandParser::CmdParser.new(ARGV) do
344
358
  Import VM to OpenNebula
345
359
  EOT
346
360
 
347
- command :importvm, importvm_desc, :hostid, :name do
361
+ command :importvm,
362
+ importvm_desc,
363
+ :hostid,
364
+ :name,
365
+ :options => [IPV4, IPV6] do
348
366
  helper.perform_action(args[0], options, 'imported') do |o|
349
367
  rc = o.info
350
368
  next rc if OpenNebula.is_error?(rc)
351
369
 
352
- o.import_wild(args[1])
370
+ o.import_wild(args[1], options[:ipv4], options[:ipv6])
353
371
  end
354
372
  end
355
373
 
data/bin/oneimage CHANGED
@@ -159,7 +159,7 @@ CommandParser::CmdParser.new(ARGV) do
159
159
  - new persistent image, OS type and qcow2 format:
160
160
 
161
161
  oneimage create -d 1 --name ubuntu --path /tmp/ubuntu.qcow2 \\
162
- --prefix sd --type OS --driver qcow2 \\
162
+ --prefix sd --type OS --format qcow2 \\
163
163
  --description "A OS plain installation" \\
164
164
  --persistent
165
165
 
@@ -436,8 +436,8 @@ CommandParser::CmdParser.new(ARGV) do
436
436
  end
437
437
 
438
438
  lock_desc = <<-EOT.unindent
439
- Locks a VM with differents levels for lock any actions with this VM, show and
440
- monitoring never will be locked.
439
+ Locks an Image to prevent certain actions defined by different levels.
440
+ The show action will never be locked.
441
441
  Valid states are: All.
442
442
  Levels:
443
443
  [Use]: locks Admin, Manage and Use actions.
@@ -464,7 +464,7 @@ CommandParser::CmdParser.new(ARGV) do
464
464
  end
465
465
 
466
466
  unlock_desc = <<-EOT.unindent
467
- Unlocks a VM for unlock any actions with this VM.
467
+ Unlocks an Image.
468
468
  Valid states are: All.
469
469
  EOT
470
470
 
data/bin/onemarketapp CHANGED
@@ -309,7 +309,7 @@ CommandParser::CmdParser.new(ARGV) do
309
309
  puts key.to_s.upcase
310
310
  value.each do |id|
311
311
  if OpenNebula.is_error?(id)
312
- puts id.to_str
312
+ STDERR.puts id.to_str
313
313
  exit(-1)
314
314
  else
315
315
  puts " ID: #{id}"
@@ -440,8 +440,8 @@ CommandParser::CmdParser.new(ARGV) do
440
440
  end
441
441
 
442
442
  lock_desc = <<-EOT.unindent
443
- Locks a VM with differents levels for lock any actions with this VM,
444
- show and monitoring never will be locked.
443
+ Locks a marketplace app to prevent certain actions defined by different levels.
444
+ The show action will never be locked.
445
445
  Valid states are: All.
446
446
  Levels:
447
447
  [Use]: locks Admin, Manage and Use actions.
@@ -470,7 +470,7 @@ CommandParser::CmdParser.new(ARGV) do
470
470
  end
471
471
 
472
472
  unlock_desc = <<-EOT.unindent
473
- Unlocks a VM for unlock any actions with this VM.
473
+ Unlocks a marketplace app.
474
474
  Valid states are: All.
475
475
  EOT
476
476
 
data/bin/onetemplate CHANGED
@@ -406,8 +406,8 @@ CommandParser::CmdParser.new(ARGV) do
406
406
  end
407
407
 
408
408
  lock_desc = <<-EOT.unindent
409
- Locks a VM with differents levels for lock any actions with this VM,
410
- show and monitoring never will be locked.
409
+ Locks a Template to prevent certain actions defined by different levels.
410
+ The show action will never be locked.
411
411
  Valid states are: All.
412
412
  Levels:
413
413
  [Use]: locks Admin, Manage and Use actions.
@@ -434,7 +434,7 @@ CommandParser::CmdParser.new(ARGV) do
434
434
  end
435
435
 
436
436
  unlock_desc = <<-EOT.unindent
437
- Unlocks a VM for unlock any actions with this VM.
437
+ Unlocks a Template.
438
438
  Valid states are: All.
439
439
  EOT
440
440
 
data/bin/oneuser CHANGED
@@ -573,7 +573,7 @@ CommandParser::CmdParser.new(ARGV) do
573
573
  EOT
574
574
 
575
575
  command :show, show_desc, [:userid, nil],
576
- :options => OpenNebulaHelper::FORMAT do
576
+ :options => [OpenNebulaHelper::FORMAT, OpenNebulaHelper::DECRYPT] do
577
577
  user = args[0] || OpenNebula::User::SELF
578
578
  helper.show_resource(user, options)
579
579
  end
data/bin/onevcenter CHANGED
@@ -66,17 +66,56 @@ CommandParser::CmdParser.new(ARGV) do
66
66
  helper.set_client(options)
67
67
  end
68
68
 
69
+ ############################################################################
70
+ # Authentication Options
71
+ ############################################################################
72
+
73
+ VCENTER = {
74
+ :name => 'vcenter',
75
+ :large => '--vcenter vCenter',
76
+ :description => 'The vCenter hostname',
77
+ :format => String
78
+ }
79
+
80
+ USER = {
81
+ :name => 'vuser',
82
+ :large => '--vuser username',
83
+ :description => 'The username to interact with vCenter',
84
+ :format => String
85
+ }
86
+
87
+ PASS = {
88
+ :name => 'vpass',
89
+ :large => '--vpass password',
90
+ :description => 'The password for the user',
91
+ :format => String
92
+ }
93
+
94
+ PORT = {
95
+ :name => 'port',
96
+ :short => '-p port',
97
+ :large => '--port port',
98
+ :format => String,
99
+ :description => 'vCenter API port, defaults to 443 (SSL) or 80'
100
+ }
101
+
102
+ AUTH_OPTS = [VCENTER, USER, PASS, PORT]
103
+
104
+ ############################################################################
105
+ # List & Import
106
+ ############################################################################
107
+
69
108
  OBJECT = {
70
- :name => 'object',
109
+ :name => 'object',
71
110
  :short => '-o object',
72
111
  :large => '--object object ',
73
112
  :format => String,
74
113
  :description => 'vCenter object: [datastores, templates,'\
75
- 'networks, datastores, images]'
114
+ 'networks, datastores, images, hosts]'
76
115
  }
77
116
 
78
117
  HOST = {
79
- :name => 'host',
118
+ :name => 'host',
80
119
  :short => '-h host_id',
81
120
  :large => '--host host_id',
82
121
  :format => String,
@@ -84,7 +123,7 @@ CommandParser::CmdParser.new(ARGV) do
84
123
  }
85
124
 
86
125
  DATASTORE = {
87
- :name => 'datastore',
126
+ :name => 'datastore',
88
127
  :short => '-d datastore_id',
89
128
  :large => '--datastore datastore_id',
90
129
  :format => String,
@@ -92,55 +131,63 @@ CommandParser::CmdParser.new(ARGV) do
92
131
  }
93
132
 
94
133
  CONFIG = {
95
- :name => 'configuration',
134
+ :name => 'configuration',
96
135
  :large => '--config file',
97
136
  :format => String,
98
137
  :description => 'Configuration file for custom options'
99
138
  }
100
139
 
101
- VCENTER = {
102
- :name => 'vcenter',
103
- :large => '--vcenter vCenter',
104
- :description => 'The vCenter hostname',
105
- :format => String
140
+ LINKED_CLONE = {
141
+ :name => 'linked_clone',
142
+ :large => '--linked_clone linked_clone',
143
+ :format => String,
144
+ :description => 'Import template as linked clone, 0/1'
106
145
  }
107
146
 
108
- USER = {
109
- :name => 'vuser',
110
- :large => '--vuser username',
111
- :description => 'The username to interact with vCenter',
112
- :format => String
147
+ COPY = {
148
+ :name => 'copy',
149
+ :large => '--copy copy',
150
+ :format => String,
151
+ :description => 'Import template as copy, 0/1'
113
152
  }
114
153
 
115
- PASS = {
116
- :name => 'vpass',
117
- :large => '--vpass password',
118
- :description => 'The password for the user',
119
- :format => String
154
+ NAME = {
155
+ :name => 'name',
156
+ :large => '--name name',
157
+ :format => String,
158
+ :description => 'Import template copy with name'
120
159
  }
121
160
 
122
- PORT = {
123
- :name => 'port',
124
- :short => '-p port',
125
- :large => '--port port',
161
+ FOLDER = {
162
+ :name => 'folder',
163
+ :large => '--folder folder',
126
164
  :format => String,
127
- :description => 'vCenter API port, defaults to 443 (SSL) or 80'
165
+ :description => 'Import template in folder'
128
166
  }
129
167
 
130
168
  USE_DEFAULTS = {
131
- :name => 'defaults',
169
+ :name => 'defaults',
132
170
  :large => '--use-defaults',
133
171
  :description => 'Use defaults for answers to questions',
134
172
  :format => String
135
173
  }
136
174
 
137
175
  ALL = {
138
- :name => 'all',
176
+ :name => 'all',
139
177
  :large => '--all',
140
178
  :description => 'Import all list',
141
179
  :format => String
142
180
  }
143
181
 
182
+ CLUSTER_REF = {
183
+ :name => 'cluster_ref',
184
+ :large => '--cluster-ref cluster_ref',
185
+ :format => String,
186
+ :description => 'Cluster ref to import'
187
+ }
188
+
189
+ LIST_OPTS = [OBJECT, HOST, DATASTORE, CLIHelper::CSV_OPT] + AUTH_OPTS
190
+
144
191
  ############################################################################
145
192
  # Global Options
146
193
  ############################################################################
@@ -161,29 +208,26 @@ CommandParser::CmdParser.new(ARGV) do
161
208
  - listing available images:
162
209
 
163
210
  onevcenter list -o datastores -h <host_id> -d <ds-img_id>
211
+
212
+ - listing available clusters:
213
+
214
+ onevcenter list -o hosts --vcenter <IP> --vuser <U> --vpass <P>
164
215
  EOT
165
216
 
166
- command :list,
167
- list_desc,
168
- :options => [OBJECT, HOST, DATASTORE, VCENTER, USER, PASS,
169
- CLIHelper::CSV_OPT] do
217
+ command :list, list_desc, :options => LIST_OPTS do
170
218
  begin
171
219
  args = helper.parse_opts(options)
172
- args[:filter] = true
173
- args[:short] = true
174
- vi_client = VCenterDriver::VIClient.new_from_host(options[:host])
175
- importer = VCenterDriver::VcImporter
176
- .new_child(helper.client, vi_client, options[:object])
177
220
 
178
- list = importer.retrieve_resources(args)
221
+ args[:filter] = true
222
+ args[:short] = true
179
223
 
180
- helper.list_object(options, list)
224
+ helper.list(options, args)
181
225
  rescue StandardError => e
182
226
  STDERR.puts e.message
183
227
  exit 1
184
228
  end
185
229
 
186
- exit 0
230
+ 0
187
231
  end
188
232
 
189
233
  list_desc = <<-EOT.unindent
@@ -193,29 +237,22 @@ CommandParser::CmdParser.new(ARGV) do
193
237
  - listing networks including uplinks:
194
238
 
195
239
  onevcenter list_all -o networks -h <host_id>
196
-
197
240
  EOT
198
241
 
199
- command :list_all,
200
- list_desc,
201
- :options => [OBJECT, HOST, DATASTORE, VCENTER, USER, PASS] do
242
+ command :list_all, list_desc, :options => LIST_OPTS do
202
243
  begin
203
244
  args = helper.parse_opts(options)
204
- args[:filter] = false
205
- args[:short] = true
206
- vi_client = VCenterDriver::VIClient.new_from_host(options[:host])
207
- importer = VCenterDriver::VcImporter
208
- .new_child(helper.client, vi_client, options[:object])
209
245
 
210
- list = importer.retrieve_resources(args)
246
+ args[:filter] = false
247
+ args[:short] = true
211
248
 
212
- helper.list_object(options, list)
249
+ helper.list(options, args)
213
250
  rescue StandardError => e
214
251
  STDERR.puts e.message
215
252
  exit 1
216
253
  end
217
254
 
218
- exit 0
255
+ 0
219
256
  end
220
257
 
221
258
  import_desc = <<-EOT.unindent
@@ -236,21 +273,22 @@ CommandParser::CmdParser.new(ARGV) do
236
273
  EOT
237
274
 
238
275
  command :import,
239
- import_desc, [:oid, nil],
276
+ import_desc,
277
+ [:oid, nil],
240
278
  :options => [OBJECT, HOST, DATASTORE] do
241
279
  begin
242
280
  vi_client = VCenterDriver::VIClient.new_from_host(options[:host])
243
- importer = VCenterDriver::VcImporter.new_child(helper.client,
244
- vi_client,
245
- options[:object])
281
+ importer = VCenterDriver::VcImporter.new_child(helper.client,
282
+ vi_client,
283
+ options[:object])
246
284
 
247
285
  importer.retrieve_resources(helper.parse_opts(options))
248
286
  indexes = importer.get_indexes(args.first)
249
287
 
250
288
  if indexes.nil?
251
289
  raise "Could not get any unimported #{options[:object]}"\
252
- " resources info in host: #{options[:host]} with"\
253
- " this input: #{args.first}"
290
+ " resources info in host: #{options[:host]} with"\
291
+ " this input: #{args.first}"
254
292
  end
255
293
 
256
294
  importer.process_import(indexes, options) do |object_info|
@@ -263,18 +301,25 @@ CommandParser::CmdParser.new(ARGV) do
263
301
  exit 1
264
302
  end
265
303
 
266
- exit 0
304
+ 0
267
305
  end
268
306
 
269
307
  command :import_defaults,
270
308
  import_desc,
271
309
  [:oid, nil],
272
- :options => [OBJECT, HOST, DATASTORE, CONFIG] do
310
+ :options => [OBJECT,
311
+ HOST,
312
+ DATASTORE,
313
+ CONFIG,
314
+ FOLDER,
315
+ LINKED_CLONE,
316
+ COPY,
317
+ NAME] do
273
318
  begin
274
319
  vi_client = VCenterDriver::VIClient.new_from_host(options[:host])
275
- importer = VCenterDriver::VcImporter.new_child(helper.client,
276
- vi_client,
277
- options[:object])
320
+ importer = VCenterDriver::VcImporter.new_child(helper.client,
321
+ vi_client,
322
+ options[:object])
278
323
 
279
324
  if options[:object] == 'networks' && !args.first.nil?
280
325
  indexes = args.first
@@ -283,15 +328,36 @@ CommandParser::CmdParser.new(ARGV) do
283
328
  indexes = importer.get_indexes(args.first)
284
329
  end
285
330
 
286
- importer.process_import(indexes, options)
331
+ if options[:object] == 'templates' &&
332
+ indexes &&
333
+ indexes.split(',').length == 1
334
+ opts = {
335
+ :type => 'default',
336
+ :linked_clone => '0',
337
+ :copy => '0',
338
+ :name => '',
339
+ :folder => ''
340
+ }
341
+
342
+ if options[:linked_clone]
343
+ opts[:linked_clone] = options[:linked_clone]
344
+ end
345
+
346
+ opts[:copy] = options[:copy] if options[:copy]
347
+ opts[:name] = options[:name] if options[:name]
348
+ opts[:folder] = options[:folder] if options[:folder]
349
+
350
+ options[indexes] = opts
351
+ end
287
352
 
353
+ importer.process_import(indexes, options)
288
354
  importer.stdout
289
355
  rescue StandardError => e
290
356
  STDERR.puts e.message
291
357
  exit 1
292
358
  end
293
359
 
294
- exit 0
360
+ 0
295
361
  end
296
362
 
297
363
  ############################################################################
@@ -303,11 +369,12 @@ CommandParser::CmdParser.new(ARGV) do
303
369
  Example:
304
370
  - Get available clusters:
305
371
 
306
- onevcenter hosts --vcenter <vcenter> --vuser <vcenter_user> --vpass <password>
372
+ onevcenter hosts --vcenter <vcenter> --vuser <user> --vpass <pass>
307
373
  EOT
374
+
308
375
  command :hosts,
309
376
  host_desc,
310
- :options => [VCENTER, USER, PASS, USE_DEFAULTS, PORT] do
377
+ :options => [CLUSTER_REF, USE_DEFAULTS] + AUTH_OPTS do
311
378
  con_ops = helper.connection_options('Hosts', options)
312
379
 
313
380
  begin
@@ -316,7 +383,7 @@ CommandParser::CmdParser.new(ARGV) do
316
383
  exit 1
317
384
  end
318
385
 
319
- exit 0
386
+ 0
320
387
  end
321
388
 
322
389
  ############################################################################
@@ -331,8 +398,9 @@ CommandParser::CmdParser.new(ARGV) do
331
398
 
332
399
  onevcenter cleargs 15
333
400
  EOT
401
+
334
402
  command :cleartags, cleartags_desc, :vmid do
335
- vmid = args[0]
403
+ vmid = args[0]
336
404
  remove_str = "\n onevm recover --delete-db #{vmid}" \
337
405
  "\n\nAfter a monitoring cycle, the VM will appear "\
338
406
  'as a Wild VM for reimport.'
@@ -349,8 +417,8 @@ CommandParser::CmdParser.new(ARGV) do
349
417
  puts remove_str
350
418
  exit 0
351
419
  end
352
- puts '.'
353
420
 
421
+ puts '.'
354
422
  puts 'The following keys will be removed:'
355
423
  keys.each {|key| puts "\t- #{key}" }
356
424
 
@@ -359,8 +427,10 @@ CommandParser::CmdParser.new(ARGV) do
359
427
  STDERR.puts "Couldn't clear VM tags. Reason: #{e.message}"
360
428
  exit 1
361
429
  end
430
+
362
431
  puts "\nKeys removed from VM. Is safe to remove it"
363
432
  puts remove_str
364
- exit 0
433
+
434
+ 0
365
435
  end
366
436
  end
data/bin/onevm CHANGED
@@ -239,6 +239,10 @@ CommandParser::CmdParser.new(ARGV) do
239
239
  :description => 'SSH options to use'
240
240
  }
241
241
 
242
+ OpenNebulaHelper::TEMPLATE_OPTIONS_VM.delete_if do |v|
243
+ %w[as_gid as_uid].include?(v[:name])
244
+ end
245
+
242
246
  ########################################################################
243
247
  # Global Options
244
248
  ########################################################################
@@ -909,6 +913,36 @@ CommandParser::CmdParser.new(ARGV) do
909
913
  end
910
914
  end
911
915
 
916
+ sg_attach_desc = <<-EOT.unindent
917
+ Attaches a Security Group to a VM.
918
+
919
+ States: All, except BOOT, MIGRATE and HOTPLUG_NIC
920
+ EOT
921
+
922
+ command :"sg-attach", sg_attach_desc, :vmid, :nicid, :sgid do
923
+ nic_id = args[1].to_i
924
+ sg_id = args[2].to_i
925
+
926
+ helper.perform_action(args[0], options, 'Attach SG') do |vm|
927
+ vm.sg_attach(nic_id, sg_id)
928
+ end
929
+ end
930
+
931
+ sg_detach_desc = <<-EOT.unindent
932
+ Detaches a Security Group from a VM.
933
+
934
+ States: All, except BOOT, MIGRATE and HOTPLUG_NIC
935
+ EOT
936
+
937
+ command :"sg-detach", sg_detach_desc, :vmid, :nicid, :sgid do
938
+ nic_id = args[1].to_i
939
+ sg_id = args[2].to_i
940
+
941
+ helper.perform_action(args[0], options, 'Detach SG') do |vm|
942
+ vm.sg_detach(nic_id, sg_id)
943
+ end
944
+ end
945
+
912
946
  chgrp_desc = <<-EOT.unindent
913
947
  Changes the VM group
914
948
  EOT
@@ -1338,9 +1372,12 @@ CommandParser::CmdParser.new(ARGV) do
1338
1372
  end
1339
1373
 
1340
1374
  lock_desc = <<-EOT.unindent
1341
- Locks a VM with differents levels for lock any actions with this VM, show and
1342
- monitoring never will be locked.
1375
+ Locks a VM to prevent certain actions defined by different levels.
1376
+ The show and monitoring action will never be locked.
1343
1377
  Valid states are: All.
1378
+ [Use]: locks Admin, Manage and Use actions.
1379
+ [Manage]: locks Manage and Use actions.
1380
+ [Admin]: locks only Admin actions.
1344
1381
  EOT
1345
1382
 
1346
1383
  command :lock, lock_desc, [:range, :vmid_list],
@@ -1362,7 +1399,7 @@ CommandParser::CmdParser.new(ARGV) do
1362
1399
  end
1363
1400
 
1364
1401
  unlock_desc = <<-EOT.unindent
1365
- Unlocks a VM for unlock any actions with this VM.
1402
+ Unlocks a Virtual Machine.
1366
1403
  Valid states are: All.
1367
1404
  EOT
1368
1405
 
@@ -1391,16 +1428,22 @@ CommandParser::CmdParser.new(ARGV) do
1391
1428
  acc_t = 0
1392
1429
  acc_w = 0
1393
1430
 
1394
- charters.each do |action, time|
1395
- sched = "+#{time[:time].to_i + acc_t}"
1431
+ helper.perform_action(args[0], {}, 'Charter added') do |vm|
1432
+ vm.info
1433
+
1434
+ diff_stime = Time.now.to_i - vm['/VM/STIME'].to_i
1396
1435
 
1397
- helper.schedule_actions([args[0]].flatten,
1398
- { :schedule => sched },
1399
- action.to_s,
1400
- time[:warning][:time] + acc_w)
1436
+ charters.each do |action, time|
1437
+ sched = "+#{time[:time].to_i + acc_t + diff_stime}"
1401
1438
 
1402
- acc_t += time[:time].to_i
1403
- acc_w += time[:warning][:time].to_i
1439
+ helper.schedule_actions([args[0]].flatten,
1440
+ { :schedule => sched },
1441
+ action.to_s,
1442
+ time[:warning][:time] + acc_w)
1443
+
1444
+ acc_t += time[:time].to_i
1445
+ acc_w += time[:warning][:time].to_i
1446
+ end
1404
1447
  end
1405
1448
 
1406
1449
  0
data/bin/onevmgroup CHANGED
@@ -233,8 +233,8 @@ CommandParser::CmdParser.new(ARGV) do
233
233
  end
234
234
 
235
235
  lock_desc = <<-EOT.unindent
236
- Locks a VM with differents levels for lock any actions with this VM, show and
237
- monitoring never will be locked.
236
+ Locks a VM Group to prevent certain actions defined by different levels.
237
+ The show action will never be locked.
238
238
  Valid states are: All.
239
239
  Levels:
240
240
  [Use]: locks Admin, Manage and Use actions.
@@ -261,7 +261,7 @@ CommandParser::CmdParser.new(ARGV) do
261
261
  end
262
262
 
263
263
  unlock_desc = <<-EOT.unindent
264
- Unlocks a VM for unlock any actions with this VM.
264
+ Unlocks a VM Group.
265
265
  Valid states are: All.
266
266
  EOT
267
267
 
data/bin/onevnet CHANGED
@@ -381,8 +381,8 @@ CommandParser::CmdParser.new(ARGV) do
381
381
  end
382
382
 
383
383
  lock_desc = <<-EOT.unindent
384
- Locks a VM with differents levels for lock any actions with this VM, show and
385
- monitoring never will be locked.
384
+ Locks a Virtual Network to prevent certain actions defined by different levels.
385
+ The show action will never be locked.
386
386
  Valid states are: All.
387
387
  Levels:
388
388
  [Use]: locks Admin, Manage and Use actions.
@@ -409,7 +409,7 @@ CommandParser::CmdParser.new(ARGV) do
409
409
  end
410
410
 
411
411
  unlock_desc = <<-EOT.unindent
412
- Unlocks a VM for unlock any actions with this VM.
412
+ Unlocks a Virtual Network.
413
413
  Valid states are: All.
414
414
  EOT
415
415
 
data/bin/onevntemplate CHANGED
@@ -341,8 +341,8 @@ CommandParser::CmdParser.new(ARGV) do
341
341
  end
342
342
 
343
343
  lock_desc = <<-EOT.unindent
344
- Locks a VN template with differents levels for lock any actions with this VN template,
345
- show and monitoring never will be locked.
344
+ Locks a VN Template to prevent certain actions defined by different levels.
345
+ The show action will never be locked.
346
346
  Valid states are: All.
347
347
  Levels:
348
348
  [Use]: locks Admin, Manage and Use actions.
@@ -369,7 +369,7 @@ CommandParser::CmdParser.new(ARGV) do
369
369
  end
370
370
 
371
371
  unlock_desc = <<-EOT.unindent
372
- Unlocks a VN template for unlock any actions with this VN template.
372
+ Unlocks a VN Template.
373
373
  Valid states are: All.
374
374
  EOT
375
375
 
data/bin/onevrouter CHANGED
@@ -366,8 +366,8 @@ CommandParser::CmdParser.new(ARGV) do
366
366
  end
367
367
 
368
368
  lock_desc = <<-EOT.unindent
369
- Locks a VM with differents levels for lock any actions with this VM, show and
370
- monitoring never will be locked.
369
+ Locks a Virtual Router to prevent certain actions defined by different levels.
370
+ The show action will never be locked.
371
371
  Valid states are: All.
372
372
  Levels:
373
373
  [Use]: locks Admin, Manage and Use actions.
@@ -394,7 +394,7 @@ CommandParser::CmdParser.new(ARGV) do
394
394
  end
395
395
 
396
396
  unlock_desc = <<-EOT.unindent
397
- Unlocks a VM for unlock any actions with this VM.
397
+ Unlocks a Virtual Router.
398
398
  valid states are: All.
399
399
  EOT
400
400
 
data/lib/cli_helper.rb CHANGED
@@ -61,7 +61,8 @@ module CLIHelper
61
61
  ' ' * 31 << 'column=value pairs.' <<
62
62
  ' ' * 31 << "Valid operators #{FILTER_OPS.join(',')}" <<
63
63
  ' ' * 31 << 'e.g. NAME=test (match name with test)' <<
64
- ' ' * 31 << 'NAME~test (match test, te, tes..)'
64
+ ' ' * 31 << 'NAME~test (match every NAME containing' <<
65
+ ' ' * 31 << 'the substring \'test\')'
65
66
  }
66
67
 
67
68
  OPERATOR = {
@@ -27,9 +27,10 @@ class OneVcenterHelper < OpenNebulaHelper::OneHelper
27
27
  module VOBJECT
28
28
 
29
29
  DATASTORE = 1
30
- TEMPLATE = 2
31
- NETWORK = 3
32
- IMAGE = 4
30
+ TEMPLATE = 2
31
+ NETWORK = 3
32
+ IMAGE = 4
33
+ HOST = 5
33
34
 
34
35
  end
35
36
 
@@ -85,6 +86,12 @@ class OneVcenterHelper < OpenNebulaHelper::OneHelper
85
86
  :columns => { :IMID => 5, :REF => 35, :PATH => 60 },
86
87
  :cli => [:host, :datastore],
87
88
  :dialogue => ->(arg) {}
89
+ },
90
+ VOBJECT::HOST => {
91
+ :struct => %w[HOST_LIST HOST],
92
+ :columns => { :DATACENTER => 10, :NAME => 30, :REF => 35 },
93
+ :cli => [],
94
+ :dialogue => ->(arg) {}
88
95
  }
89
96
  }
90
97
 
@@ -143,6 +150,8 @@ class OneVcenterHelper < OpenNebulaHelper::OneHelper
143
150
  @vobject = VOBJECT::NETWORK
144
151
  when 'images'
145
152
  @vobject = VOBJECT::IMAGE
153
+ when 'hosts'
154
+ @vobject = VOBJECT::HOST
146
155
  else
147
156
  puts "unknown #{type} type option"
148
157
  puts ' -o options:'
@@ -150,6 +159,7 @@ class OneVcenterHelper < OpenNebulaHelper::OneHelper
150
159
  puts ' templates'
151
160
  puts ' networks'
152
161
  puts ' images'
162
+ puts ' hosts'
153
163
 
154
164
  exit 0
155
165
  end
@@ -186,6 +196,28 @@ class OneVcenterHelper < OpenNebulaHelper::OneHelper
186
196
  }
187
197
  end
188
198
 
199
+ # General method to list vCenter objects
200
+ #
201
+ # @param options [Hash] User CLI options
202
+ # @param args [Hash] Search arguments
203
+ def list(options, args)
204
+ if !options[:host]
205
+ # This case is to list available hosts, instead other object
206
+ list_hosts(options)
207
+ else
208
+ vi_client = VCenterDriver::VIClient.new_from_host(
209
+ options[:host]
210
+ )
211
+ importer = VCenterDriver::VcImporter.new_child(
212
+ @client,
213
+ vi_client,
214
+ options[:object]
215
+ )
216
+
217
+ list_object(options, importer.retrieve_resources(args))
218
+ end
219
+ end
220
+
189
221
  # This method will print a list for a vcenter_resource.
190
222
  #
191
223
  def list_object(options, list)
@@ -198,6 +230,31 @@ class OneVcenterHelper < OpenNebulaHelper::OneHelper
198
230
  table.show(list, options)
199
231
  end
200
232
 
233
+ # List unimported hosts
234
+ #
235
+ # @param options [Hash] User CLI options
236
+ def list_hosts(options)
237
+ con_ops = connection_options('hosts', options)
238
+ vi_client = VCenterDriver::VIClient.new(con_ops)
239
+ dc_folder = VCenterDriver::DatacenterFolder.new(vi_client)
240
+ hpool = VCenterDriver::VIHelper.one_pool(OpenNebula::HostPool,
241
+ false)
242
+
243
+ VCenterDriver::VIHelper.set_client(nil, @client)
244
+
245
+ list = []
246
+ hosts = dc_folder.get_unimported_hosts(hpool, vi_client.vim.host)
247
+
248
+ hosts.each do |key, value|
249
+ value.each do |v|
250
+ v[:datacenter] = key
251
+ list << v
252
+ end
253
+ end
254
+
255
+ format_list.show(hosts, options)
256
+ end
257
+
201
258
  # handles :cli section of TABLE
202
259
  # used for executing the dialogue in some VOBJECTS
203
260
  #
@@ -252,12 +309,18 @@ class OneVcenterHelper < OpenNebulaHelper::OneHelper
252
309
  def format_list
253
310
  config = TABLE[@vobject][:columns]
254
311
  CLIHelper::ShowTable.new do
312
+ column :DATACENTER,
313
+ 'Object datacenter',
314
+ :size => config[:DATACENTER] || 15 do |d|
315
+ d[:datacenter]
316
+ end
317
+
255
318
  column :IMID, 'identifier for ...', :size=>config[:IMID] || 4 do |d|
256
319
  d[:import_id]
257
320
  end
258
321
 
259
322
  column :REF, 'ref', :left, :adjust, :size=>config[:REF] || 15 do |d|
260
- d[:ref]
323
+ d[:ref] || d[:cluster_ref]
261
324
  end
262
325
 
263
326
  column :NAME, 'Name', :left, :expand,
@@ -493,10 +556,11 @@ class OneVcenterHelper < OpenNebulaHelper::OneHelper
493
556
 
494
557
  keys_to_remove = []
495
558
  vm['config.extraConfig'].each do |extraconfig|
496
- if extraconfig.key.include?('opennebula.disk') ||
497
- extraconfig.key.include?('opennebula.vm')
498
- keys_to_remove << extraconfig.key
499
- end
559
+ next unless extraconfig.key.include?('opennebula.disk') ||
560
+ extraconfig.key.include?('opennebula.vm') ||
561
+ extraconfig.key.downcase.include?('remotedisplay')
562
+
563
+ keys_to_remove << extraconfig.key
500
564
  end
501
565
 
502
566
  [vm, keys_to_remove]
@@ -577,7 +577,23 @@ class OneZoneHelper < OpenNebulaHelper::OneHelper
577
577
  puts "Endpoint changed to \"#{zone['TEMPLATE/ENDPOINT']}\" in " <<
578
578
  "#{ENV['HOME']}/.one/one_endpoint"
579
579
  end
580
- return 0
580
+
581
+ return 0 unless zone['TEMPLATE/ONEFLOW_ENDPOINT']
582
+
583
+ # Set ONEFLOW_ENDPOINT
584
+ if temporary_zone
585
+ puts "Type: export ONEFLOW_URL=#{zone['TEMPLATE/ONEFLOW_ENDPOINT']}"
586
+ else
587
+ File.open(ENV['HOME'] + '/.one/oneflow_endpoint', 'w') do |f|
588
+ f.puts zone['TEMPLATE/ONEFLOW_ENDPOINT']
589
+ end
590
+
591
+ puts 'OneFlow Endpoint changed to ' \
592
+ "\"#{zone['TEMPLATE/ONEFLOW_ENDPOINT']}\" in " <<
593
+ "#{ENV['HOME']}/.one/oneflow_endpoint"
594
+ end
595
+
596
+ 0
581
597
  end
582
598
 
583
599
  private
@@ -204,6 +204,7 @@
204
204
  <xs:all>
205
205
  <xs:element name="DEBUG_LEVEL" type="xs:integer"/>
206
206
  <xs:element name="SYSTEM" type="xs:string"/>
207
+ <xs:element name="USE_VMS_LOCATION" type="xs:string" minOccurs="0" maxOccurs="1"/>
207
208
  </xs:all>
208
209
  </xs:complexType>
209
210
  </xs:element>
@@ -303,6 +304,7 @@
303
304
  </xs:complexType>
304
305
  </xs:element>
305
306
 
307
+ <xs:element name="USER_ENCRYPTED_ATTR" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
306
308
  <xs:element name="USER_RESTRICTED_ATTR" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
307
309
 
308
310
  <xs:element name="VLAN_IDS" minOccurs="0" maxOccurs="1">
@@ -366,6 +368,7 @@
366
368
  <xs:element name="VM_MANAGE_OPERATIONS" type="xs:string" minOccurs="0" maxOccurs="1"/>
367
369
  <xs:element name="VM_MONITORING_EXPIRATION_TIME" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
368
370
  <xs:element name="VM_RESTRICTED_ATTR" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
371
+ <xs:element name="VM_SNAPSHOT_FACTOR" type="xs:string" minOccurs="0" maxOccurs="1"/>
369
372
 
370
373
  <xs:element name="VM_SUBMIT_ON_HOLD" minOccurs="0" maxOccurs="1">
371
374
  <xs:simpleType>
@@ -121,7 +121,6 @@
121
121
  <xs:element name="MEMORY" type="xs:string" minOccurs="0" maxOccurs="1"/>
122
122
  <xs:element name="MEMORY_COST" type="xs:string" minOccurs="0" maxOccurs="1"/>
123
123
  <xs:element name="MEMORY_MAX" type="xs:string" minOccurs="0" maxOccurs="1"/>
124
- <xs:element name="MEMORY_SLOTS" type="xs:string" minOccurs="0" maxOccurs="1"/>
125
124
  <xs:element name="NIC" minOccurs="0" maxOccurs="unbounded">
126
125
  <xs:complexType>
127
126
  <xs:sequence>
@@ -167,6 +166,19 @@
167
166
  </xs:complexType>
168
167
  </xs:element>
169
168
  <xs:element name="SECURITY_GROUP_RULE" minOccurs="0" maxOccurs="unbounded"/>
169
+ <xs:element name="SNAPSHOT" minOccurs="0" maxOccurs="unbounded">
170
+ <xs:complexType>
171
+ <xs:sequence>
172
+ <xs:element name="ACTION" type="xs:string" minOccurs="0" maxOccurs="1"/>
173
+ <xs:element name="ACTIVE" type="xs:string" minOccurs="0" maxOccurs="1"/>
174
+ <xs:element name="HYPERVISOR_ID" type="xs:string"/>
175
+ <xs:element name="NAME" type="xs:string"/>
176
+ <xs:element name="SNAPSHOT_ID" type="xs:string"/>
177
+ <xs:element name="SYSTEM_DISK_SIZE" type="xs:string"/>
178
+ <xs:element name="TIME" type="xs:string"/>
179
+ </xs:sequence>
180
+ </xs:complexType>
181
+ </xs:element>
170
182
  <xs:element name="SPICE_OPTIONS" minOccurs="0" maxOccurs="1"/>
171
183
  <xs:element name="SUBMIT_ON_HOLD" type="xs:string" minOccurs="0" maxOccurs="1"/>
172
184
  <xs:element name="TEMPLATE_ID" type="xs:string" minOccurs="0" maxOccurs="1"/>
@@ -75,6 +75,8 @@
75
75
  <xs:element name="HID" type="xs:integer"/>
76
76
  <xs:element name="CID" type="xs:integer"/>
77
77
  <xs:element name="DS_ID" type="xs:integer"/>
78
+ <xs:element name="VM_MAD" type="xs:string"/>
79
+ <xs:element name="TM_MAD" type="xs:string"/>
78
80
  <xs:element name="ACTION" type="xs:integer"/>
79
81
  </xs:sequence>
80
82
  </xs:complexType>
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opennebula-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.2.0
4
+ version: 6.3.80.pre
5
5
  platform: ruby
6
6
  authors:
7
7
  - OpenNebula
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-11-02 00:00:00.000000000 Z
11
+ date: 2022-04-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: opennebula
@@ -16,107 +16,60 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 6.2.0
19
+ version: 6.3.80.pre
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 6.2.0
26
+ version: 6.3.80.pre
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: activesupport
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  description: Commands used to talk to OpenNebula
42
42
  email: contact@opennebula.io
43
43
  executables:
44
- - oneacct
45
- - oneacl
46
- - onecluster
47
- - onedatastore
48
- - oneflow
49
- - oneflow-template
44
+ - onezone
45
+ - onevcenter
46
+ - oneimage
47
+ - onevmgroup
48
+ - onehost
50
49
  - onegroup
51
50
  - onehook
52
- - onehost
53
- - oneimage
54
- - onemarket
55
- - onemarketapp
56
- - onesecgroup
51
+ - onevdc
52
+ - oneacl
53
+ - oneflow-template
54
+ - onevrouter
57
55
  - oneshowback
58
- - onetemplate
59
56
  - oneuser
60
- - onevcenter
61
- - onevdc
62
- - onevm
63
- - onevmgroup
64
- - onevnet
57
+ - oneacct
58
+ - onesecgroup
59
+ - onecluster
60
+ - onemarketapp
61
+ - onetemplate
62
+ - onemarket
65
63
  - onevntemplate
66
- - onevrouter
67
- - onezone
64
+ - onevnet
65
+ - oneflow
66
+ - onedatastore
67
+ - onevm
68
68
  extensions: []
69
69
  extra_rdoc_files: []
70
70
  files:
71
- - share/schemas/xsd/acct.xsd
72
- - share/schemas/xsd/acl_pool.xsd
73
- - share/schemas/xsd/api_info.xsd
74
- - share/schemas/xsd/cluster.xsd
75
- - share/schemas/xsd/cluster_pool.xsd
76
- - share/schemas/xsd/datastore.xsd
77
- - share/schemas/xsd/datastore_pool.xsd
78
- - share/schemas/xsd/document.xsd
79
- - share/schemas/xsd/document_pool.xsd
80
- - share/schemas/xsd/group.xsd
81
- - share/schemas/xsd/group_pool.xsd
82
- - share/schemas/xsd/hook.xsd
83
- - share/schemas/xsd/hook_message_api.xsd
84
- - share/schemas/xsd/hook_message_retry.xsd
85
- - share/schemas/xsd/hook_message_state.xsd
86
- - share/schemas/xsd/hook_pool.xsd
87
- - share/schemas/xsd/host.xsd
88
- - share/schemas/xsd/host_pool.xsd
89
- - share/schemas/xsd/image.xsd
90
- - share/schemas/xsd/image_pool.xsd
91
- - share/schemas/xsd/index.xsd
92
- - share/schemas/xsd/marketplace.xsd
93
- - share/schemas/xsd/marketplace_pool.xsd
94
- - share/schemas/xsd/marketplaceapp.xsd
95
- - share/schemas/xsd/marketplaceapp_pool.xsd
96
- - share/schemas/xsd/monitoring_data.xsd
97
- - share/schemas/xsd/opennebula_configuration.xsd
98
- - share/schemas/xsd/raftstatus.xsd
99
- - share/schemas/xsd/security_group.xsd
100
- - share/schemas/xsd/security_group_pool.xsd
101
- - share/schemas/xsd/showback.xsd
102
- - share/schemas/xsd/user.xsd
103
- - share/schemas/xsd/user_pool.xsd
104
- - share/schemas/xsd/vdc.xsd
105
- - share/schemas/xsd/vdc_pool.xsd
106
- - share/schemas/xsd/vm.xsd
107
- - share/schemas/xsd/vm_group.xsd
108
- - share/schemas/xsd/vm_group_pool.xsd
109
- - share/schemas/xsd/vm_pool.xsd
110
- - share/schemas/xsd/vmtemplate.xsd
111
- - share/schemas/xsd/vmtemplate_pool.xsd
112
- - share/schemas/xsd/vnet.xsd
113
- - share/schemas/xsd/vnet_pool.xsd
114
- - share/schemas/xsd/vntemplate.xsd
115
- - share/schemas/xsd/vntemplate_pool.xsd
116
- - share/schemas/xsd/vrouter.xsd
117
- - share/schemas/xsd/vrouter_pool.xsd
118
- - share/schemas/xsd/zone.xsd
119
- - share/schemas/xsd/zone_pool.xsd
71
+ - LICENSE
72
+ - NOTICE
120
73
  - bin/oneacct
121
74
  - bin/oneacl
122
75
  - bin/onecluster
@@ -168,8 +121,55 @@ files:
168
121
  - lib/one_helper/onevntemplate_helper.rb
169
122
  - lib/one_helper/onevrouter_helper.rb
170
123
  - lib/one_helper/onezone_helper.rb
171
- - NOTICE
172
- - LICENSE
124
+ - share/schemas/xsd/acct.xsd
125
+ - share/schemas/xsd/acl_pool.xsd
126
+ - share/schemas/xsd/api_info.xsd
127
+ - share/schemas/xsd/cluster.xsd
128
+ - share/schemas/xsd/cluster_pool.xsd
129
+ - share/schemas/xsd/datastore.xsd
130
+ - share/schemas/xsd/datastore_pool.xsd
131
+ - share/schemas/xsd/document.xsd
132
+ - share/schemas/xsd/document_pool.xsd
133
+ - share/schemas/xsd/group.xsd
134
+ - share/schemas/xsd/group_pool.xsd
135
+ - share/schemas/xsd/hook.xsd
136
+ - share/schemas/xsd/hook_message_api.xsd
137
+ - share/schemas/xsd/hook_message_retry.xsd
138
+ - share/schemas/xsd/hook_message_state.xsd
139
+ - share/schemas/xsd/hook_pool.xsd
140
+ - share/schemas/xsd/host.xsd
141
+ - share/schemas/xsd/host_pool.xsd
142
+ - share/schemas/xsd/image.xsd
143
+ - share/schemas/xsd/image_pool.xsd
144
+ - share/schemas/xsd/index.xsd
145
+ - share/schemas/xsd/marketplace.xsd
146
+ - share/schemas/xsd/marketplace_pool.xsd
147
+ - share/schemas/xsd/marketplaceapp.xsd
148
+ - share/schemas/xsd/marketplaceapp_pool.xsd
149
+ - share/schemas/xsd/monitoring_data.xsd
150
+ - share/schemas/xsd/opennebula_configuration.xsd
151
+ - share/schemas/xsd/raftstatus.xsd
152
+ - share/schemas/xsd/security_group.xsd
153
+ - share/schemas/xsd/security_group_pool.xsd
154
+ - share/schemas/xsd/showback.xsd
155
+ - share/schemas/xsd/user.xsd
156
+ - share/schemas/xsd/user_pool.xsd
157
+ - share/schemas/xsd/vdc.xsd
158
+ - share/schemas/xsd/vdc_pool.xsd
159
+ - share/schemas/xsd/vm.xsd
160
+ - share/schemas/xsd/vm_group.xsd
161
+ - share/schemas/xsd/vm_group_pool.xsd
162
+ - share/schemas/xsd/vm_pool.xsd
163
+ - share/schemas/xsd/vmtemplate.xsd
164
+ - share/schemas/xsd/vmtemplate_pool.xsd
165
+ - share/schemas/xsd/vnet.xsd
166
+ - share/schemas/xsd/vnet_pool.xsd
167
+ - share/schemas/xsd/vntemplate.xsd
168
+ - share/schemas/xsd/vntemplate_pool.xsd
169
+ - share/schemas/xsd/vrouter.xsd
170
+ - share/schemas/xsd/vrouter_pool.xsd
171
+ - share/schemas/xsd/zone.xsd
172
+ - share/schemas/xsd/zone_pool.xsd
173
173
  homepage: http://opennebula.io
174
174
  licenses:
175
175
  - Apache-2.0
@@ -180,17 +180,16 @@ require_paths:
180
180
  - lib
181
181
  required_ruby_version: !ruby/object:Gem::Requirement
182
182
  requirements:
183
- - - '>='
183
+ - - ">="
184
184
  - !ruby/object:Gem::Version
185
185
  version: '0'
186
186
  required_rubygems_version: !ruby/object:Gem::Requirement
187
187
  requirements:
188
- - - '>='
188
+ - - ">"
189
189
  - !ruby/object:Gem::Version
190
- version: '0'
190
+ version: 1.3.1
191
191
  requirements: []
192
- rubyforge_project:
193
- rubygems_version: 2.0.14.1
192
+ rubygems_version: 3.1.2
194
193
  signing_key:
195
194
  specification_version: 4
196
195
  summary: OpenNebula Command Line Interface