opennebula-cli 6.8.1 → 6.8.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6cf54d4b60a559aec10ac15e21dbbe7b6ec46f6955552809d39f520ef764933f
4
- data.tar.gz: b329c6848fd04338713db8c31728254d54a885fd0c24094d1f67d199a9722b29
3
+ metadata.gz: b06fb77f587c29ae6ccfdb865f506d009c722e26a51237357785839b3334c6a6
4
+ data.tar.gz: 5b7b61495a23c275884b89dd7416d1e7308cc95711b1091a20febc008ebb45c2
5
5
  SHA512:
6
- metadata.gz: 7509c3cce87f1fc8c0e185612a98b60a91fce02b605c0ba1d551174793730991d099f1f3f66f392c3f0b3a715d8296880da6b4506b578e9017cccce3cdc3ebe2
7
- data.tar.gz: 3c7fde70522ba16e9bbf3e7b8b6719962a23d6c6c51ea21c2ab73151655699aeec66729c2b26213ab91cd432bae5c7932fccdd4d8cc4044eb0ab1604cd9c1000
6
+ metadata.gz: ecd05a6bbb986b52da8d323d1083d90d7142f9ac336bef379c183348a9f039ab94cc258b6735f3fd558a6c5eb41e55b5e36079292139b0844f30e4b183f2d88c
7
+ data.tar.gz: af89f17c3100ea494ea87e5fb9228779195d410c9b9ec3b2d9752a7db4c1b0359636a5aad9769d011ce67e751cdf1cd73d85dd89b7677f0176eb8525cd1ec411
data/bin/onebackupjob CHANGED
@@ -147,8 +147,8 @@ CommandParser::CmdParser.new(ARGV) do
147
147
  begin
148
148
  if args[0]
149
149
  template = File.read(args[0])
150
- elsif STDIN.wait_readable?(0)
151
- template = STDIN.read
150
+ elsif !(stdin = OpenNebulaHelper.read_stdin).empty?
151
+ template = stdin
152
152
  else
153
153
  template = OneBackupJobHelper.create_backupjob_template(options)
154
154
  end
data/bin/onedatastore CHANGED
@@ -115,8 +115,8 @@ CommandParser::CmdParser.new(ARGV) do
115
115
  begin
116
116
  if args[0]
117
117
  template = File.read(args[0])
118
- elsif STDIN.wait_readable(0)
119
- template = STDIN.read
118
+ elsif !(stdin = OpenNebulaHelper.read_stdin).empty?
119
+ template = stdin
120
120
  end
121
121
  datastore.allocate(template, cid)
122
122
  rescue StandardError => e
data/bin/oneflow-template CHANGED
@@ -189,8 +189,8 @@ CommandParser::CmdParser.new(ARGV) do
189
189
 
190
190
  if args[0]
191
191
  template = File.read(args[0])
192
- elsif STDIN.wait_readable(0)
193
- template = STDIN.read
192
+ elsif !(stdin = OpenNebulaHelper.read_stdin).empty?
193
+ template = stdin
194
194
  end
195
195
 
196
196
  if !template
@@ -262,8 +262,8 @@ CommandParser::CmdParser.new(ARGV) do
262
262
 
263
263
  if args[1]
264
264
  template = File.read(args[1])
265
- elsif STDIN.wait_readable(0)
266
- template = STDIN.read
265
+ elsif !(stdin = OpenNebulaHelper.read_stdin).empty?
266
+ template = stdin
267
267
  end
268
268
  params['merge_template'] = JSON.parse(template) if template
269
269
 
data/bin/onehook CHANGED
@@ -176,8 +176,8 @@ CommandParser::CmdParser.new(ARGV) do
176
176
  begin
177
177
  if args[0]
178
178
  template = File.read(args[0])
179
- elsif STDIN.wait_readable(0)
180
- template = STDIN.read
179
+ elsif !(stdin = OpenNebulaHelper.read_stdin).empty?
180
+ template = stdin
181
181
  else
182
182
  STDERR.puts 'No hook template provided'
183
183
  exit(-1)
data/bin/oneimage CHANGED
@@ -121,6 +121,13 @@ CommandParser::CmdParser.new(ARGV) do
121
121
  :description => 'Name of the new image'
122
122
  }
123
123
 
124
+ DISK_ID = {
125
+ :name => 'disk_id',
126
+ :large => '--disk-id disk_id',
127
+ :format => Integer,
128
+ :description => 'Restore only selected disk ID'
129
+ }
130
+
124
131
  ########################################################################
125
132
  # Global Options
126
133
  ########################################################################
@@ -210,16 +217,15 @@ CommandParser::CmdParser.new(ARGV) do
210
217
  exit(-1)
211
218
  end
212
219
 
213
- if options[:no_check_capacity].nil?
214
- check_capacity = false
215
- else
216
- check_capacity = true
217
- end
220
+ no_check_capacity = !options[:no_check_capacity].nil?
221
+
222
+ conflicting_opts = []
223
+ if (args[0] || !(stdin = OpenNebulaHelper.read_stdin).empty?) &&
224
+ OneImageHelper.create_template_options_used?(options, conflicting_opts)
218
225
 
219
- if (args[0] || STDIN.wait_readable(0)) &&
220
- OpenNebulaHelper.create_template_options_used?(options)
226
+ STDERR.puts 'You cannot pass template on STDIN and use template creation options, ' <<
227
+ "conflicting options: #{conflicting_opts.join(', ')}."
221
228
 
222
- STDERR.puts 'You cannot use both template and template creation options.'
223
229
  next -1
224
230
  end
225
231
 
@@ -236,8 +242,8 @@ CommandParser::CmdParser.new(ARGV) do
236
242
  begin
237
243
  if args[0]
238
244
  template = File.read(args[0])
239
- elsif STDIN.wait_readable(0)
240
- template = STDIN.read
245
+ elsif !stdin.empty?
246
+ template = stdin
241
247
  else
242
248
  res = OneImageHelper.create_image_template(options)
243
249
 
@@ -254,7 +260,7 @@ CommandParser::CmdParser.new(ARGV) do
254
260
  exit 0
255
261
  end
256
262
 
257
- image.allocate(template, options[:datastore], check_capacity)
263
+ image.allocate(template, options[:datastore], no_check_capacity)
258
264
  rescue StandardError => e
259
265
  STDERR.puts e.message
260
266
  exit(-1)
@@ -454,7 +460,7 @@ CommandParser::CmdParser.new(ARGV) do
454
460
  command :restore,
455
461
  restore_desc,
456
462
  :imageid,
457
- :options => [OneDatastoreHelper::DATASTORE, NO_NIC, NO_IP, NAME, INCREMENT] do
463
+ :options => [OneDatastoreHelper::DATASTORE, NO_NIC, NO_IP, NAME, INCREMENT, DISK_ID] do
458
464
  helper.perform_action(args[0], options, 'vm backup restored') do |o|
459
465
  if options[:datastore].nil?
460
466
  STDERR.puts 'Datastore to restore the backup is mandatory: '
@@ -468,13 +474,14 @@ CommandParser::CmdParser.new(ARGV) do
468
474
  restore_opts << "NO_IP=\"YES\"\n" if options[:no_ip]
469
475
  restore_opts << "NAME=\"#{options[:name]}\"\n" if options[:name]
470
476
  restore_opts << "INCREMENT_ID=\"#{options[:increment]}\"\n" if options[:increment]
477
+ restore_opts << "DISK_ID=\"#{options[:disk_id]}\"\n" if options[:disk_id]
471
478
 
472
479
  rc = o.restore(options[:datastore].to_i, restore_opts)
473
480
 
474
481
  if !OpenNebula.is_error?(rc)
475
482
  ids = rc.split(' ')
476
483
 
477
- puts "VM Template: #{ids[0]}" if ids[0]
484
+ puts "VM Template: #{ids[0]}" if ids[0] && ids[0] != '-1'
478
485
  puts "Images: #{ids[1..-1].join(' ')}" if ids.length > 1
479
486
  else
480
487
  puts rc.message
data/bin/onemarket CHANGED
@@ -107,8 +107,8 @@ CommandParser::CmdParser.new(ARGV) do
107
107
  begin
108
108
  if args[0]
109
109
  template = File.read(args[0])
110
- elsif STDIN.wait_readable(0)
111
- template = STDIN.read
110
+ elsif !(stdin = OpenNebulaHelper.read_stdin).empty?
111
+ template = stdin
112
112
  end
113
113
  marketplace.allocate(template)
114
114
  rescue StandardError => e
data/bin/onemarketapp CHANGED
@@ -191,10 +191,12 @@ CommandParser::CmdParser.new(ARGV) do
191
191
  exit(-1)
192
192
  end
193
193
 
194
- if (args[0] || STDIN.wait_readable(0)) &&
195
- OneMarketPlaceAppHelper.create_template_options_used?(options)
196
- STDERR.puts 'You can not use both template file and template'\
197
- ' creation options.'
194
+ conflicting_opts = []
195
+ if (args[0] || !(stdin = OpenNebulaHelper.read_stdin).empty?) &&
196
+ OneMarketPlaceAppHelper.create_template_options_used?(options, conflicting_opts)
197
+
198
+ STDERR.puts 'You cannot pass template on STDIN and use template creation options, ' <<
199
+ "conflicting options: #{conflicting_opts.join(', ')}."
198
200
  next -1
199
201
  end
200
202
 
@@ -202,8 +204,8 @@ CommandParser::CmdParser.new(ARGV) do
202
204
  begin
203
205
  if args[0]
204
206
  template = File.read(args[0])
205
- elsif STDIN.wait_readable(0)
206
- template = STDIN.read
207
+ elsif !stdin.empty?
208
+ template = stdin
207
209
  else
208
210
  res = OneMarketPlaceAppHelper
209
211
  .create_datastore_template(options)
data/bin/onesecgroup CHANGED
@@ -112,8 +112,8 @@ CommandParser::CmdParser.new(ARGV) do
112
112
  begin
113
113
  if args[0]
114
114
  template = File.read(args[0])
115
- elsif STDIN.wait_readable(0)
116
- template = STDIN.read
115
+ elsif !(stdin = OpenNebulaHelper.read_stdin).empty?
116
+ template = stdin
117
117
  else
118
118
  STDERR.puts 'No Security Group description provided'
119
119
  exit(-1)
data/bin/onetemplate CHANGED
@@ -166,10 +166,13 @@ CommandParser::CmdParser.new(ARGV) do
166
166
  command :create, create_desc, [:file, nil], :options =>
167
167
  [OneTemplateHelper::VM_NAME] + OpenNebulaHelper::TEMPLATE_OPTIONS +
168
168
  [OpenNebulaHelper::DRY] do
169
- if (args[0] || STDIN.wait_readable(0)) &&
170
- OpenNebulaHelper.create_template_options_used?(options)
169
+ conflicting_opts = []
170
+ if (args[0] || !(stdin = OpenNebulaHelper.read_stdin).empty?) &&
171
+ OpenNebulaHelper.create_template_options_used?(options, conflicting_opts)
172
+
173
+ STDERR.puts 'You cannot pass template on STDIN and use template creation options, ' <<
174
+ "conflicting options: #{conflicting_opts.join(', ')}."
171
175
 
172
- STDERR.puts 'You can not use both template file and template creation options.'
173
176
  next -1
174
177
  end
175
178
 
@@ -177,8 +180,8 @@ CommandParser::CmdParser.new(ARGV) do
177
180
  begin
178
181
  if args[0]
179
182
  template = File.read(args[0])
180
- elsif STDIN.wait_readable(0)
181
- template = STDIN.read
183
+ elsif !stdin.empty?
184
+ template = stdin
182
185
  else
183
186
  res = OpenNebulaHelper.create_template(options)
184
187
 
@@ -255,11 +258,13 @@ CommandParser::CmdParser.new(ARGV) do
255
258
  command :instantiate, instantiate_desc, :templateid, [:file, nil],
256
259
  :options => instantiate_options + OpenNebulaHelper::TEMPLATE_OPTIONS do
257
260
  exit_code = 0
261
+ conflicting_opts = []
262
+ if (args[1] || !(stdin = OpenNebulaHelper.read_stdin).empty?) &&
263
+ OpenNebulaHelper.create_template_options_used?(options, conflicting_opts)
258
264
 
259
- if (args[1] || STDIN.wait_readable(0)) &&
260
- OpenNebulaHelper.create_template_options_used?(options)
265
+ STDERR.puts 'You cannot pass template on STDIN and use template creation options, ' <<
266
+ "conflicting options: #{conflicting_opts.join(', ')}."
261
267
 
262
- STDERR.puts 'You cannot use both template and template creation options.'
263
268
  next -1
264
269
  end
265
270
 
@@ -305,8 +310,8 @@ CommandParser::CmdParser.new(ARGV) do
305
310
 
306
311
  if args[1]
307
312
  extra_template = File.read(args[1])
308
- elsif STDIN.wait_readable(0)
309
- extra_template = STDIN.read
313
+ elsif !stdin.empty?
314
+ extra_template = stdin
310
315
  else
311
316
  res = OpenNebulaHelper.create_template(options, t)
312
317
 
data/bin/oneuser CHANGED
@@ -621,7 +621,7 @@ CommandParser::CmdParser.new(ARGV) do
621
621
  Example, request a valid token for a generic driver (e.g. core auth, LDAP...):
622
622
  oneuser token-create my_user --time 3600
623
623
 
624
- Example, request a group spefici token (new resources will be created in that
624
+ Example, request a group specific token (new resources will be created in that
625
625
  group and only resources that belong to that group will be listed):
626
626
  oneuser token-create my_user --group <id|group>
627
627
 
data/bin/onevcenter CHANGED
@@ -261,7 +261,7 @@ CommandParser::CmdParser.new(ARGV) do
261
261
  Examples:
262
262
  - importing first datastore
263
263
 
264
- onevcenter list -o templates -h <host_id>
264
+ onevcenter import -o templates -h <host_id>
265
265
 
266
266
  - importing 2 concrete templates:
267
267
 
data/bin/onevm CHANGED
@@ -349,19 +349,21 @@ CommandParser::CmdParser.new(ARGV) do
349
349
  number = options[:multiple] || 1
350
350
  exit_code = nil
351
351
 
352
- if (args[0] || STDIN.wait_readable(0)) &&
353
- OpenNebulaHelper.create_template_options_used?(options)
352
+ conflicting_opts = []
353
+ if (args[0] || !(stdin = OpenNebulaHelper.read_stdin).empty?) &&
354
+ OpenNebulaHelper.create_template_options_used?(options, conflicting_opts)
355
+
356
+ STDERR.puts 'You cannot pass template on STDIN and use template creation options, ' <<
357
+ "conflicting options: #{conflicting_opts.join(', ')}."
354
358
 
355
- STDERR.puts 'You can not use both template file and template'\
356
- ' creation options.'
357
359
  exit(-1)
358
360
  end
359
361
 
360
362
  begin
361
363
  if args[0]
362
364
  template = File.read(args[0])
363
- elsif STDIN.wait_readable(0)
364
- template = STDIN.read
365
+ elsif !stdin.empty?
366
+ template = stdin
365
367
  else
366
368
  res = OpenNebulaHelper.create_template(options)
367
369
 
@@ -615,8 +617,8 @@ CommandParser::CmdParser.new(ARGV) do
615
617
 
616
618
  if options[:file]
617
619
  extra_template = File.read(options[:file])
618
- elsif STDIN.wait_readable(0)
619
- extra_template = STDIN.read
620
+ elsif !(stdin = OpenNebulaHelper.read_stdin).empty?
621
+ extra_template = stdin
620
622
  end
621
623
 
622
624
  helper.perform_actions(args[0], options, verbose) do |vm|
@@ -689,7 +691,7 @@ CommandParser::CmdParser.new(ARGV) do
689
691
  end
690
692
 
691
693
  resume_desc = <<-EOT.unindent
692
- Resumes the execution of the a saved VM
694
+ Resumes the execution of a saved VM
693
695
 
694
696
  States: STOPPED, SUSPENDED, UNDEPLOYED, POWEROFF, UNKNOWN
695
697
  EOT
@@ -718,7 +720,7 @@ CommandParser::CmdParser.new(ARGV) do
718
720
  States for success/failure recovers: Any ACTIVE state.
719
721
  States for a retry recover: Any *FAILURE state
720
722
  States for delete: Any
721
- States for delete-recreate: Any but STOP/UNDEPLOYED
723
+ States for recreate: Any but DONE/POWEROFF/SUSPENDED
722
724
  States for delete-db: Any
723
725
  EOT
724
726
 
@@ -774,8 +776,8 @@ CommandParser::CmdParser.new(ARGV) do
774
776
  TARGET, CACHE, DISCARD, PREFIX] do
775
777
  if options[:file]
776
778
  template = File.read(options[:file])
777
- elsif STDIN.wait_readable(0)
778
- template = STDIN.read
779
+ elsif !(stdin = OpenNebulaHelper.read_stdin).empty?
780
+ template = stdin
779
781
  elsif options[:image]
780
782
  image_id = options[:image]
781
783
  target = options[:target]
@@ -851,8 +853,8 @@ CommandParser::CmdParser.new(ARGV) do
851
853
  ] do
852
854
  if options[:file]
853
855
  template = File.read(options[:file])
854
- elsif STDIN.wait_readable(0)
855
- template = STDIN.read
856
+ elsif !(stdin = OpenNebulaHelper.read_stdin).empty?
857
+ template = stdin
856
858
  elsif options[:network]
857
859
  network_id = options[:network]
858
860
  ip = options[:ip]
@@ -1238,6 +1240,10 @@ CommandParser::CmdParser.new(ARGV) do
1238
1240
 
1239
1241
  if options[:xml]
1240
1242
  puts pool.to_xml
1243
+ elsif options[:json]
1244
+ puts JSON.pretty_generate(pool.to_hash)
1245
+ elsif options[:yaml]
1246
+ puts pool.to_hash.to_yaml
1241
1247
  else
1242
1248
  table.show(pool.to_hash, options)
1243
1249
  end
@@ -1276,8 +1282,8 @@ CommandParser::CmdParser.new(ARGV) do
1276
1282
  :options => OpenNebulaHelper::CAPACITY_OPTIONS_VM + [ENFORCE, OpenNebulaHelper::FILE] do
1277
1283
  if options[:file]
1278
1284
  template = File.read(options[:file])
1279
- elsif STDIN.wait_readable(0)
1280
- template = STDIN.read
1285
+ elsif !(stdin = OpenNebulaHelper.read_stdin).empty?
1286
+ template = stdin
1281
1287
  else
1282
1288
  template = ''
1283
1289
 
@@ -1355,15 +1361,15 @@ CommandParser::CmdParser.new(ARGV) do
1355
1361
 
1356
1362
  The full list of configuration attributes are:
1357
1363
 
1358
- OS = ["ARCH", "MACHINE", "KERNEL", "INITRD", "BOOTLOADER", "BOOT", "UUID"]
1364
+ OS = ["ARCH", "MACHINE", "KERNEL", "INITRD", "BOOTLOADER", "BOOT", "KERNEL_CMD", "ROOT", "SD_DISK_BUS", "UUID", "FIRMWARE"]
1359
1365
  FEATURES = ["ACPI", "PAE", "APIC", "LOCALTIME", "HYPERV", "GUEST_AGENT", "VIRTIO_SCSI_QUEUES", "VIRTIO_BLK_QUEUES", "IOTHREADS"]
1360
1366
  INPUT = ["TYPE", "BUS"]
1361
- GRAPHICS = ["TYPE", "LISTEN", "PASSWD", "KEYMAP" ]
1367
+ GRAPHICS = ["TYPE", "LISTEN", "PASSWD", "KEYMAP", "COMMAND"]
1362
1368
  VIDEO = ["TYPE", "IOMMU", "ATS", "VRAM", "RESOLUTION"]
1363
1369
  RAW = ["DATA", "DATA_VMX", "TYPE", "VALIDATE"]
1364
1370
  CPU_MODEL = ["MODEL"]
1365
1371
  BACKUP_CONFIG = ["FS_FREEZE", "KEEP_LAST", "BACKUP_VOLATILE", "MODE", "INCREMENT_MODE"]
1366
- CONTEXT (any value, **variable substitution will be made**)
1372
+ CONTEXT (any value, except ETH*, **variable substitution will be made**)
1367
1373
  EOT
1368
1374
 
1369
1375
  command :updateconf, updateconf_desc, :vmid, [:file, nil],
@@ -1373,8 +1379,8 @@ CommandParser::CmdParser.new(ARGV) do
1373
1379
  begin
1374
1380
  if args[1]
1375
1381
  template = File.read(args[1])
1376
- elsif STDIN.wait_readable(0)
1377
- template = STDIN.read
1382
+ elsif !(stdin = OpenNebulaHelper.read_stdin).empty?
1383
+ template = stdin
1378
1384
  end
1379
1385
  rescue StandardError => e
1380
1386
  STDERR.puts "Error reading template: #{e.message}."
@@ -1608,6 +1614,68 @@ CommandParser::CmdParser.new(ARGV) do
1608
1614
  '-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null'
1609
1615
  EOT
1610
1616
 
1617
+ pci_attach_desc = <<-EOT.unindent
1618
+ Attaches a PCI to a VM.
1619
+
1620
+ You can specify the PCI device with --pci (short_address) or
1621
+ --pci_device (device ID), --pci_class (class ID) and/or --pci_vendor (vendor ID).
1622
+
1623
+ States: POWEROFF
1624
+ EOT
1625
+
1626
+ command :"pci-attach", pci_attach_desc, :vmid,
1627
+ :options => [
1628
+ OpenNebulaHelper::FILE,
1629
+ PCI,
1630
+ PCI_CLASS,
1631
+ PCI_VENDOR,
1632
+ PCI_DEVICE
1633
+ ] do
1634
+ pci_attrs = [:pci, :pci_device, :pci_vendor, :pci_class].any? do |o|
1635
+ !options[o].nil?
1636
+ end
1637
+
1638
+ if options[:file]
1639
+ template = File.read(options[:file])
1640
+ elsif !(stdin = OpenNebulaHelper.read_stdin).empty?
1641
+ template = stdin
1642
+ elsif pci_attrs
1643
+ pcia = options[:pci]
1644
+ pcid = options[:pci_device]
1645
+ pcic = options[:pci_class]
1646
+ pciv = options[:pci_vendor]
1647
+
1648
+ pcis = []
1649
+ pcis << "SHORT_ADDRESS = \"#{pcia}\"" if pcia
1650
+ pcis << "DEVICE = \"#{pcid}\"" if pcid
1651
+ pcis << "CLASS = \"#{pcic}\"" if pcic
1652
+ pcis << "VENDOR = \"#{pciv}\"" if pciv
1653
+
1654
+ template = "PCI = [ #{pcis.join(',')} ]"
1655
+ else
1656
+ STDERR.puts 'Provide a PCI description file with --file or the relevant pci options:'
1657
+ exit(-1)
1658
+ end
1659
+
1660
+ helper.perform_action(args[0], options, 'Attaching PCI device') do |vm|
1661
+ vm.pci_attach(template)
1662
+ end
1663
+ end
1664
+
1665
+ pci_detach_desc = <<-EOT.unindent
1666
+ Detaches a PCI device from a VM
1667
+
1668
+ States: POWEROFF
1669
+ EOT
1670
+
1671
+ command :"pci-detach", pci_detach_desc, :vmid, :pciid do
1672
+ pciid = args[1].to_i
1673
+
1674
+ helper.perform_action(args[0], options, 'Detaching PCI') do |vm|
1675
+ vm.pci_detach(pciid)
1676
+ end
1677
+ end
1678
+
1611
1679
  command :ssh,
1612
1680
  ssh_desc,
1613
1681
  :vmid,
data/bin/onevmgroup CHANGED
@@ -138,8 +138,8 @@ CommandParser::CmdParser.new(ARGV) do
138
138
  begin
139
139
  if args[0]
140
140
  template = File.read(args[0])
141
- elsif STDIN.wait_readable(0)
142
- template = STDIN.read
141
+ elsif !(stdin = OpenNebulaHelper.read_stdin).empty?
142
+ template = stdin
143
143
  else
144
144
  STDERR.puts 'No VM Group description provided'
145
145
  exit(-1)
@@ -292,8 +292,8 @@ CommandParser::CmdParser.new(ARGV) do
292
292
  begin
293
293
  if args[1]
294
294
  template = File.read(args[1])
295
- elsif STDIN.wait_readable(0)
296
- template = STDIN.read
295
+ elsif !(stdin = OpenNebulaHelper.read_stdin).empty?
296
+ template = stdin
297
297
  end
298
298
  rescue StandardError => e
299
299
  STDERR.puts "Error reading template: #{e.message}."
data/bin/onevnet CHANGED
@@ -173,8 +173,8 @@ CommandParser::CmdParser.new(ARGV) do
173
173
  begin
174
174
  if args[0]
175
175
  template = File.read(args[0])
176
- elsif STDIN.wait_readable(0)
177
- template = STDIN.read
176
+ elsif !(stdin = OpenNebulaHelper.read_stdin).empty?
177
+ template = stdin
178
178
  end
179
179
  vn.allocate(template, cid)
180
180
  rescue StandardError => e
@@ -203,8 +203,8 @@ CommandParser::CmdParser.new(ARGV) do
203
203
  helper.perform_action(args[0], options, 'address range added') do |vn|
204
204
  if args[1]
205
205
  ar = File.read(args[1])
206
- elsif STDIN.wait_readable(0)
207
- ar = STDIN.read
206
+ elsif !(stdin = OpenNebulaHelper.read_stdin).empty?
207
+ ar = stdin
208
208
  else
209
209
  ar = OpenNebulaHelper.create_ar(options)
210
210
  end
@@ -479,7 +479,7 @@ CommandParser::CmdParser.new(ARGV) do
479
479
  States for delete: Any but READY
480
480
  EOT
481
481
 
482
- command :recover, recover_desc, [:range, :vmid_list],
482
+ command :recover, recover_desc, [:range, :vnetid_list],
483
483
  :options => [SUCCESS, FAILURE, DELETE, RETRY] do
484
484
  if !options[:success].nil?
485
485
  result = 1
data/bin/onevntemplate CHANGED
@@ -161,8 +161,8 @@ CommandParser::CmdParser.new(ARGV) do
161
161
  begin
162
162
  if args[0]
163
163
  template = File.read(args[0])
164
- elsif STDIN.wait_readable(0)
165
- template = STDIN.read
164
+ elsif !(stdin = OpenNebulaHelper.read_stdin).empty?
165
+ template = stdin
166
166
  end
167
167
 
168
168
  if options[:dry]
@@ -256,8 +256,8 @@ CommandParser::CmdParser.new(ARGV) do
256
256
 
257
257
  if args[1]
258
258
  extra_template = File.read(args[1])
259
- elsif STDIN.wait_readable(0)
260
- extra_template = STDIN.read
259
+ elsif !(stdin = OpenNebulaHelper.read_stdin).empty?
260
+ extra_template = stdin
261
261
  else
262
262
  res = OpenNebulaHelper.create_template(options, t)
263
263
 
data/bin/onevrouter CHANGED
@@ -142,8 +142,8 @@ CommandParser::CmdParser.new(ARGV) do
142
142
  begin
143
143
  if args[0]
144
144
  template = File.read(args[0])
145
- elsif STDIN.wait_readable(0)
146
- template = STDIN.read
145
+ elsif !(stdin = OpenNebulaHelper.read_stdin).empty?
146
+ template = stdin
147
147
  end
148
148
  obj.allocate(template)
149
149
  rescue StandardError => e
@@ -174,10 +174,12 @@ CommandParser::CmdParser.new(ARGV) do
174
174
  :vrouterid, :templateid, [:file, nil],
175
175
  :options => instantiate_options +
176
176
  OpenNebulaHelper::TEMPLATE_OPTIONS do
177
- if (args[2] || STDIN.wait_readable(0)) &&
178
- OpenNebulaHelper.create_template_options_used?(options)
177
+ conflicting_opts = []
178
+ if (args[2] || !(stdin = OpenNebulaHelper.read_stdin).empty?) &&
179
+ OpenNebulaHelper.create_template_options_used?(options, conflicting_opts)
179
180
 
180
- STDERR.puts 'You cannot use both template and template creation options.'
181
+ STDERR.puts 'You cannot pass template on STDIN and use template creation options, ' <<
182
+ "conflicting options: #{conflicting_opts.join(', ')}."
181
183
  exit(-1)
182
184
  end
183
185
 
@@ -201,8 +203,8 @@ CommandParser::CmdParser.new(ARGV) do
201
203
 
202
204
  if args[2]
203
205
  extra_template = File.read(args[2])
204
- elsif STDIN.wait_readable(0)
205
- extra_template = STDIN.read
206
+ elsif !stdin.empty?
207
+ extra_template = stdin
206
208
  else
207
209
  res = OpenNebulaHelper.create_template(options, t)
208
210
 
@@ -307,8 +309,8 @@ CommandParser::CmdParser.new(ARGV) do
307
309
  OneVirtualRouterHelper::FLOAT] do
308
310
  if options[:file]
309
311
  template = File.read(options[:file])
310
- elsif STDIN.wait_readable(0)
311
- template = STDIN.read
312
+ elsif !(stdin = OpenNebulaHelper.read_stdin).empty?
313
+ template = stdin
312
314
  elsif options[:network]
313
315
  network_id = options[:network]
314
316
  ip = options[:ip]
data/bin/onezone CHANGED
@@ -111,8 +111,8 @@ CommandParser::CmdParser.new(ARGV) do
111
111
  begin
112
112
  if args[0]
113
113
  template = File.read(args[0])
114
- elsif STDIN.wait_readable(0)
115
- template = STDIN.read
114
+ elsif !(stdin = OpenNebulaHelper.read_stdin).empty?
115
+ template = stdin
116
116
  else
117
117
  STDERR.puts 'No zone template provided'
118
118
  exit(-1)
@@ -155,8 +155,8 @@ class OneBackupJobHelper < OpenNebulaHelper::OneHelper
155
155
  # Get user information
156
156
  if file
157
157
  str = File.read(file)
158
- elsif STDIN.wait_readable(0)
159
- str = STDIN.read
158
+ elsif !(stdin = OpenNebulaHelper.read_stdin).empty?
159
+ str = stdin
160
160
  else
161
161
  str = OpenNebulaHelper.update_template(id, bj, nil, xpath)
162
162
  end
@@ -794,6 +794,8 @@ class OneHostHelper < OpenNebulaHelper::OneHelper
794
794
  numa_nodes.each do |node|
795
795
  mon_node = monitoring.find {|x| x['NODE_ID'] == node['NODE_ID'] }
796
796
 
797
+ next if mon_node.nil?
798
+
797
799
  node['MEMORY']['FREE'] = mon_node['MEMORY']['FREE']
798
800
  node['MEMORY']['USED'] = mon_node['MEMORY']['USED']
799
801
 
@@ -169,8 +169,7 @@ class OneImageHelper < OpenNebulaHelper::OneHelper
169
169
  :name => 'no_check_capacity',
170
170
  :large => '--no_check_capacity',
171
171
  :description =>
172
- 'Check Datastore capacity. By Default YES',
173
- :format => String
172
+ 'Do not check Datastore capacity, only for admins.'
174
173
  }
175
174
 
176
175
  FILTERS = [
@@ -518,6 +517,18 @@ class OneImageHelper < OpenNebulaHelper::OneHelper
518
517
  [0, template]
519
518
  end
520
519
 
520
+ def create_template_options_used?(options, conflicting_opts)
521
+ # Get the template options names as symbols, options hash uses symbols
522
+ template_options=TEMPLATE_OPTIONS.map do |o|
523
+ o[:name].to_sym
524
+ end
525
+
526
+ # Check if one at least one of the template options is in options hash
527
+ conflicting_opts.replace(options.keys & template_options)
528
+
529
+ !conflicting_opts.empty?
530
+ end
531
+
521
532
  end
522
533
 
523
534
  end
@@ -129,16 +129,17 @@ class OneMarketPlaceAppHelper < OpenNebulaHelper::OneHelper
129
129
  end
130
130
  end
131
131
 
132
- def self.create_template_options_used?(options)
132
+ def self.create_template_options_used?(options, conflicting_opts)
133
133
  # Get the template options names as symbols. options hash
134
134
  # uses symbols
135
135
  template_options=self::TEMPLATE_OPTIONS.map do |o|
136
136
  o[:name].to_sym
137
137
  end
138
138
 
139
- # Check if one at least one of the template options is
140
- # in options hash
141
- (template_options-options.keys)!=template_options
139
+ # Check if at least one of the template options is in options hash
140
+ conflicting_opts.replace(options.keys & template_options)
141
+
142
+ !conflicting_opts.empty?
142
143
  end
143
144
 
144
145
  # Import object into marketplace
@@ -397,8 +397,8 @@ class OneVMHelper < OpenNebulaHelper::OneHelper
397
397
  # Get user information
398
398
  if file
399
399
  str = File.read(file)
400
- elsif STDIN.wait_readable(0)
401
- str = STDIN.read
400
+ elsif !(stdin = OpenNebulaHelper.read_stdin).empty?
401
+ str = stdin
402
402
  else
403
403
  str = OpenNebulaHelper.update_template(vm_id, vm, nil, xpath)
404
404
  end
data/lib/one_helper.rb CHANGED
@@ -379,7 +379,7 @@ Bash symbols must be escaped on STDIN passing'
379
379
  :name => 'context',
380
380
  :large => '--context line1,line2,line3',
381
381
  :format => Array,
382
- :description => 'Lines to add to the context section'
382
+ :description => 'Replaces the context section with the specified lines'
383
383
  },
384
384
  {
385
385
  :name => 'boot',
@@ -1078,12 +1078,12 @@ Bash symbols must be escaped on STDIN passing'
1078
1078
  elsif options[:xml]
1079
1079
  return list_pool_xml(pool, options, filter_flag)
1080
1080
  elsif options[:json]
1081
- list_pool_format(pool, options, filter_flag) do |pool|
1081
+ return list_pool_format(pool, options, filter_flag) do |pool|
1082
1082
  hash = check_resource_xsd(pool, pname)
1083
1083
  puts ::JSON.pretty_generate(hash)
1084
1084
  end
1085
1085
  elsif options[:yaml]
1086
- list_pool_format(pool, options, filter_flag) do |pool|
1086
+ return list_pool_format(pool, options, filter_flag) do |pool|
1087
1087
  hash = check_resource_xsd(pool, pname)
1088
1088
  puts hash.to_yaml(:indent => 4)
1089
1089
  end
@@ -1712,8 +1712,8 @@ Bash symbols must be escaped on STDIN passing'
1712
1712
  def self.update_template_helper(append, _id, resource, path, xpath, update = true)
1713
1713
  if path
1714
1714
  File.read(path)
1715
- elsif STDIN.wait_readable(0)
1716
- STDIN.read
1715
+ elsif !(stdin = self.read_stdin).empty?
1716
+ stdin
1717
1717
  elsif append
1718
1718
  editor_input
1719
1719
  else
@@ -2095,16 +2095,17 @@ Bash symbols must be escaped on STDIN passing'
2095
2095
  ar << ']'
2096
2096
  end
2097
2097
 
2098
- def self.create_template_options_used?(options)
2098
+ def self.create_template_options_used?(options, conflicting_opts)
2099
2099
  # Get the template options names as symbols. options hash
2100
2100
  # uses symbols
2101
2101
  template_options=OpenNebulaHelper::TEMPLATE_OPTIONS.map do |o|
2102
2102
  o[:name].to_sym
2103
2103
  end
2104
2104
 
2105
- # Check if one at least one of the template options is
2106
- # in options hash
2107
- (template_options-options.keys)!=template_options
2105
+ # Check if at least one of the template options is in options hash
2106
+ conflicting_opts.replace(options.keys & template_options)
2107
+
2108
+ !conflicting_opts.empty?
2108
2109
  end
2109
2110
 
2110
2111
  def self.sunstone_url
@@ -2660,4 +2661,11 @@ Bash symbols must be escaped on STDIN passing'
2660
2661
  end
2661
2662
  end
2662
2663
 
2664
+ def self.read_stdin
2665
+ if STDIN.wait_readable(0)
2666
+ STDIN.read()
2667
+ else
2668
+ ''
2669
+ end
2670
+ end
2663
2671
  end
@@ -1,6 +1,6 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
- <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"
3
- targetNamespace="http://opennebula.org/XMLSchema" xmlns="http://opennebula.org/XMLSchema">
2
+ <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://opennebula.org/XMLSchema"
3
+ xmlns="http://opennebula.org/XMLSchema">
4
4
  <xs:element name="VM_POOL">
5
5
  <xs:complexType>
6
6
  <xs:sequence>
@@ -60,6 +60,28 @@
60
60
  <xs:element name="USER_TEMPLATE">
61
61
  <xs:complexType>
62
62
  <xs:sequence>
63
+ <xs:element name="LABELS" type="xs:string" minOccurs="0"/>
64
+ <xs:element name="ERROR" type="xs:string" minOccurs="0"/>
65
+ <xs:element name="SCHED_MESSAGE" type="xs:string" minOccurs="0"/>
66
+ <xs:element name="SCHED_RANK" type="xs:string" minOccurs="0"/>
67
+ <xs:element name="SCHED_DS_RANK" type="xs:string" minOccurs="0"/>
68
+ <xs:element name="SCHED_REQUIREMENTS" type="xs:string" minOccurs="0"/>
69
+ <xs:element name="SCHED_DS_REQUIREMENTS" type="xs:string" minOccurs="0"/>
70
+ <xs:element name="USER_PRIORITY" type="xs:string" minOccurs="0"/>
71
+ <xs:element name="PUBLIC_CLOUD" minOccurs="0" maxOccurs="unbounded">
72
+ <xs:complexType>
73
+ <xs:sequence>
74
+ <xs:any processContents="skip"/>
75
+ </xs:sequence>
76
+ </xs:complexType>
77
+ </xs:element>
78
+ <xs:element name="SCHED_ACTION" minOccurs="0" maxOccurs="unbounded">
79
+ <xs:complexType>
80
+ <xs:sequence>
81
+ <xs:any processContents="skip"/>
82
+ </xs:sequence>
83
+ </xs:complexType>
84
+ </xs:element>
63
85
  <xs:any minOccurs="0" maxOccurs="unbounded" processContents="skip"/>
64
86
  </xs:sequence>
65
87
  </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.8.1
4
+ version: 6.8.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - OpenNebula
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-12-16 00:00:00.000000000 Z
11
+ date: 2024-04-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: opennebula
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 6.8.1
19
+ version: 6.8.3
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.8.1
26
+ version: 6.8.3
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: activesupport
29
29
  requirement: !ruby/object:Gem::Requirement