opennebula-cli 6.6.3 → 6.8.0

Sign up to get free protection for your applications and to get access to all the features.
data/lib/one_helper.rb CHANGED
@@ -17,6 +17,8 @@
17
17
  require 'cli_helper'
18
18
  require 'open3'
19
19
  require 'io/console'
20
+ require 'time'
21
+ require 'io/wait'
20
22
 
21
23
  begin
22
24
  require 'opennebula'
@@ -48,6 +50,9 @@ module OpenNebulaHelper
48
50
 
49
51
  EDITOR_PATH='/usr/bin/vi'
50
52
 
53
+ TEMPLATE_INPUT = 'A template can be passed as a file with or the content via STDIN
54
+ Bash symbols must be escaped on STDIN passing'
55
+
51
56
  ########################################################################
52
57
  # Options
53
58
  ########################################################################
@@ -102,6 +107,22 @@ module OpenNebulaHelper
102
107
  :description => 'Append new attributes to the current template'
103
108
  }
104
109
 
110
+ FILE = {
111
+ :name => 'file',
112
+ :short => '-f file',
113
+ :large => '--file file',
114
+ :description => 'Selects the template file',
115
+ :format => String,
116
+ :proc => lambda {|o, options|
117
+ if File.file?(o)
118
+ options[:file] = o
119
+ else
120
+ STDERR.puts "File `#{options[:file]}` doesn't exist"
121
+ exit(-1)
122
+ end
123
+ }
124
+ }
125
+
105
126
  # Command line VM template options
106
127
  TEMPLATE_NAME_VM={
107
128
  :name => 'name',
@@ -418,6 +439,59 @@ module OpenNebulaHelper
418
439
  options[:user_inputs] = o.join("\n")
419
440
  end
420
441
  },
442
+ {
443
+ :name => 'video',
444
+ :large => '--video type',
445
+ :format => String,
446
+ :description => 'Add a custom video device (none, vga, cirrus, virtio)'
447
+ },
448
+ {
449
+ :name => 'video_iommu',
450
+ :large => '--video-iommu',
451
+ :description => 'Enable IOMMU (I/O Memory Management Unit) for the video device'
452
+ },
453
+ {
454
+ :name => 'video_ats',
455
+ :large => '--video-ats',
456
+ :description => 'Enable ATS (Address Translation Services) for the video device'
457
+ },
458
+ {
459
+ :name => 'video_vram',
460
+ :large => '--video-vram vram',
461
+ :description => 'VRAM allocated to the video device. By default the ' +
462
+ "unit is megabytes. To use gigabytes add a 'g', floats " +
463
+ 'can be used: 8g=8192, 0.5g=512',
464
+ :format => String,
465
+ :proc => lambda do |o, _options|
466
+ m=o.strip.match(/^(\d+(?:\.\d+)?)(m|mb|g|gb)?$/i)
467
+
468
+ if !m
469
+ [-1, 'VRAM value malformed']
470
+ else
471
+ multiplier=case m[2]
472
+ when /(g|gb)/i
473
+ 1048576 # = 1024 * 1024
474
+ else
475
+ 1024
476
+ end
477
+
478
+ value=m[1].to_f*multiplier
479
+
480
+ [0, value.floor]
481
+ end
482
+ end
483
+ },
484
+ {
485
+ :name => 'video_resolution',
486
+ :large => '--video-resolution resolution',
487
+ :format => String,
488
+ :description => 'Video resolution, in format like: 1280x720 or 1920x1080',
489
+ :proc => lambda do |_o, _options|
490
+ if !m.match?(/\d{3,4}x\d{3,4}/)
491
+ [-1, 'Video Resolution value malformed']
492
+ end
493
+ end
494
+ },
421
495
  AS_GROUP,
422
496
  AS_USER
423
497
  ]
@@ -440,6 +514,73 @@ module OpenNebulaHelper
440
514
  :description => 'Get decrypted attributes'
441
515
  }
442
516
 
517
+ SCHEDULE_OPTIONS=[
518
+ SCHEDULE = {
519
+ :name => 'schedule',
520
+ :large => '--schedule TIME',
521
+ :description => 'Schedules this action to be executed after' \
522
+ 'the given time. For example: onevm resume 0 --schedule "09/23 14:15"',
523
+ :format => String,
524
+ :proc => lambda {|o, options|
525
+ if o[0] == '+'
526
+ options[:schedule] = o
527
+ elsif o == 'now'
528
+ options[:schedule] = Time.now.to_i
529
+ else
530
+ begin
531
+ options[:schedule] = Time.parse(o).to_i
532
+ rescue StandardError
533
+ STDERR.puts "Error parsing time spec: #{o}"
534
+ exit(-1)
535
+ end
536
+ end
537
+ }
538
+ },
539
+
540
+ WEEKLY = {
541
+ :name => 'weekly',
542
+ :large => '--weekly days',
543
+ :description => 'Repeats the schedule action the days of the week ' \
544
+ 'specified, it can be a number between 0 (Sunday) to 6 (Saturday) ' \
545
+ 'separated with commas. ' \
546
+ 'For example: onevm resume 0 --schedule "09/23 14:15" --weekly 0,2,4',
547
+ :format => String
548
+ },
549
+
550
+ MONTHLY = {
551
+ :name => 'monthly',
552
+ :large => '--monthly days',
553
+ :description => 'Repeats the schedule action the days of the month ' \
554
+ 'specified, it can be a number between 1,31 separated with commas. ' \
555
+ 'For example: onevm resume 0 --schedule "09/23 14:15" --monthly 1,14',
556
+ :format => String
557
+ },
558
+
559
+ YEARLY = {
560
+ :name => 'yearly',
561
+ :large => '--yearly days',
562
+ :description => 'Repeats the schedule action the days of the year ' \
563
+ 'specified, it can be a number between 0,365 separated with commas. ' \
564
+ 'For example: onevm resume 0 --schedule "09/23 14:15" --yearly 30,60',
565
+ :format => String
566
+ },
567
+
568
+ HOURLY = {
569
+ :name => 'hourly',
570
+ :large => '--hourly hour',
571
+ :description => 'Repeats the schedule action with the given hourly frequency. ' \
572
+ 'For example (every 5 hours): onevm resume 0 --schedule "09/23 14:15" --hourly 5',
573
+ :format => Numeric
574
+ },
575
+
576
+ END_TIME = {
577
+ :name => 'end',
578
+ :large => '--end number|TIME',
579
+ :description => '----',
580
+ :format => String
581
+ }
582
+ ]
583
+
443
584
  TEMPLATE_OPTIONS_VM = [TEMPLATE_NAME_VM] + TEMPLATE_OPTIONS + [DRY]
444
585
 
445
586
  CAPACITY_OPTIONS_VM = [TEMPLATE_OPTIONS[0], TEMPLATE_OPTIONS[1],
@@ -546,6 +687,10 @@ module OpenNebulaHelper
546
687
  "The default columns and their layout can be configured in #{conf_file}"
547
688
  end
548
689
 
690
+ def self.template_input_help(object_name)
691
+ "#{TEMPLATE_INPUT}\nWhen using a template add only one #{object_name} instance."
692
+ end
693
+
549
694
  def initialize(_secret = nil, _endpoint = nil)
550
695
  @client=nil
551
696
 
@@ -1260,6 +1405,7 @@ module OpenNebulaHelper
1260
1405
  #
1261
1406
  # @return [Hash] XSD in hash format, nil if not found
1262
1407
  def read_xsd(ename)
1408
+ require 'active_support'
1263
1409
  require 'active_support/core_ext/hash/conversions'
1264
1410
 
1265
1411
  # Try GEM directory
@@ -1556,6 +1702,8 @@ module OpenNebulaHelper
1556
1702
  def self.update_template_helper(append, _id, resource, path, xpath, update = true)
1557
1703
  if path
1558
1704
  File.read(path)
1705
+ elsif STDIN.wait_readable(0)
1706
+ STDIN.read
1559
1707
  elsif append
1560
1708
  editor_input
1561
1709
  else
@@ -1831,6 +1979,15 @@ module OpenNebulaHelper
1831
1979
  template<<' ]' << "\n"
1832
1980
  end
1833
1981
 
1982
+ if options[:video]
1983
+ template<<"VIDEO=[ TYPE=\"#{options[:video]}\""
1984
+ template<<', IOMMU="YES"' if options[:video_iommu]
1985
+ template<<', ATS="YES"' if options[:video_ats]
1986
+ template<<", VRAM=\"#{options[:video_vram]}\"" if options[:video_vram]
1987
+ template<<", RESOLUTION=\"#{options[:video_resolution]}\""
1988
+ template<<' ]' << "\n"
1989
+ end
1990
+
1834
1991
  template<<"VCENTER_VM_FOLDER=#{options[:vcenter_vm_folder]}\n" if options[:vcenter_vm_folder]
1835
1992
 
1836
1993
  context=create_context(options)
@@ -2349,4 +2506,148 @@ module OpenNebulaHelper
2349
2506
  end
2350
2507
  end
2351
2508
 
2509
+ def self.schedule_action_tmpl(options, action, warning = nil)
2510
+ str_periodic = ''
2511
+
2512
+ if options.key?(:weekly)
2513
+ str_periodic << ", REPEAT = 0, DAYS = \"#{options[:weekly]}\""
2514
+ elsif options.key?(:monthly)
2515
+ str_periodic << ", REPEAT = 1, DAYS = \"#{options[:monthly]}\""
2516
+ elsif options.key?(:yearly)
2517
+ str_periodic << ", REPEAT = 2, DAYS = \"#{options[:yearly]}\""
2518
+ elsif options.key?(:hourly)
2519
+ str_periodic << ", REPEAT = 3, DAYS = \"#{options[:hourly]}\""
2520
+ end
2521
+
2522
+ if options.key?(:end)
2523
+ begin
2524
+ end_date = Date.parse(options[:end])
2525
+ str_periodic << ", END_TYPE = 2, END_VALUE = #{end_date.to_time.to_i}"
2526
+ rescue ArgumentError
2527
+ if options[:end].to_i > 0
2528
+ str_periodic << ", END_TYPE = 1, END_VALUE = #{options[:end].to_i}"
2529
+ end
2530
+ end
2531
+ elsif str_periodic != ''
2532
+ str_periodic << ', END_TYPE = 0'
2533
+ end
2534
+
2535
+ tmp_str = 'SCHED_ACTION = ['
2536
+ tmp_str << "ACTION = #{action}, " if action
2537
+ tmp_str << "WARNING = #{warning}," if warning
2538
+ tmp_str << "ARGS = \"#{options[:args]}\"," if options[:args]
2539
+ tmp_str << "TIME = #{options[:schedule]}"
2540
+ tmp_str << str_periodic << ']'
2541
+
2542
+ tmp_str
2543
+ end
2544
+
2545
+ def self.scheduled_action_table(object)
2546
+ CLIHelper::ShowTable.new(nil, object) do
2547
+ column :ID, '', :adjust => true do |d|
2548
+ d['ID']
2549
+ end
2550
+
2551
+ column :ACTION, '', :adjust => true do |d|
2552
+ d['ACTION']
2553
+ end
2554
+
2555
+ column :ARGS, '', :adjust => true do |d|
2556
+ d['ARGS'] && !d['ARGS'].empty? ? d['ARGS'] : '-'
2557
+ end
2558
+
2559
+ column :SCHEDULED, '', :adjust => true do |d|
2560
+ t = d['TIME'].to_i
2561
+
2562
+ # relative action for VMs
2563
+ if d['TIME'] !~ /^[0-9].*/ && !object['STIME'].nil?
2564
+ t += object['STIME'].to_i
2565
+ end
2566
+
2567
+ OpenNebulaHelper.time_to_str(t, false) unless d.nil?
2568
+ end
2569
+
2570
+ column :REPEAT, '', :adjust => true do |d|
2571
+ begin
2572
+ str_rep = ''
2573
+
2574
+ case d['REPEAT']
2575
+ when '0'
2576
+ str_rep << 'Weekly '
2577
+ when '1'
2578
+ str_rep << 'Monthly '
2579
+ when '2'
2580
+ str_rep << 'Yearly '
2581
+ when '3'
2582
+ str_rep << 'Each ' << d['DAYS'] << ' hours'
2583
+ end
2584
+
2585
+ if d['REPEAT'] != '3'
2586
+ str_rep << d['DAYS']
2587
+ end
2588
+
2589
+ str_rep
2590
+ rescue StandardError
2591
+ ''
2592
+ end
2593
+ end
2594
+
2595
+ column :END, '', :adjust => true do |d|
2596
+ begin
2597
+ str_end = ''
2598
+
2599
+ case d['END_TYPE']
2600
+ when '0'
2601
+ str_end << 'None'
2602
+ when '1'
2603
+ str_end << 'After ' << d['END_VALUE'] << ' times'
2604
+ when '2'
2605
+ str_end << 'On ' << \
2606
+ OpenNebulaHelper.time_to_str(d['END_VALUE'], false, false, true)
2607
+ end
2608
+
2609
+ str_end
2610
+ rescue StandardError
2611
+ ''
2612
+ end
2613
+ end
2614
+
2615
+ column :STATUS, '', :left, :size => 50 do |d|
2616
+ begin
2617
+ if d['DONE'].to_i > 0 && d['REPEAT'].to_i < 0
2618
+ "Done on #{OpenNebulaHelper.time_to_str(d['DONE'], false)}"
2619
+ elsif d['MESSAGE'] && !d['MESSAGE'].empty?
2620
+ "Error! #{d['MESSAGE']}"
2621
+ else
2622
+ t1 = Time.now
2623
+ t2 = d['TIME'].to_i
2624
+
2625
+ # relative action for VMs
2626
+ if (d['TIME'] !~ /^[0-9].*/) && !object['STIME'].nil?
2627
+ t2 += object['STIME'].to_i
2628
+ end
2629
+
2630
+ t2 = Time.at(t2)
2631
+
2632
+ days = ((t2 - t1) / (24 * 3600)).round(2)
2633
+ hours = ((t2 - t1) / 3600).round(2)
2634
+ minutes = ((t2 - t1) / 60).round(2)
2635
+
2636
+ if days > 1
2637
+ "Next in #{days} days"
2638
+ elsif days <= 1 && hours > 1
2639
+ "Next in #{hours} hours"
2640
+ elsif minutes > 0
2641
+ "Next in #{minutes} minutes"
2642
+ else
2643
+ 'Overdue!'
2644
+ end
2645
+ end
2646
+ rescue StandardError
2647
+ ''
2648
+ end
2649
+ end
2650
+ end
2651
+ end
2652
+
2352
2653
  end
@@ -124,25 +124,8 @@
124
124
  <xs:element name="STIME" type="xs:integer"/>
125
125
  <xs:element name="ETIME" type="xs:integer"/>
126
126
  <xs:element name="DEPLOY_ID" type="xs:string"/>
127
- <xs:element name="MONITORING">
128
- <!--
129
- <xs:complexType>
130
- <xs:all>
131
- <- Percentage of 1 CPU consumed (two fully consumed cpu is 200) ->
132
- <xs:element name="CPU" type="xs:decimal" minOccurs="0" maxOccurs="1"/>
133
-
134
- <- MEMORY consumption in kilobytes ->
135
- <xs:element name="MEMORY" type="xs:integer" minOccurs="0" maxOccurs="1"/>
136
-
137
- <- NETTX: Sent bytes to the network ->
138
- <xs:element name="NETTX" type="xs:integer" minOccurs="0" maxOccurs="1"/>
139
-
140
- <- NETRX: Received bytes from the network ->
141
- <xs:element name="NETRX" type="xs:integer" minOccurs="0" maxOccurs="1"/>
142
- </xs:all>
143
- </xs:complexType>
144
- -->
145
- </xs:element>
127
+ <xs:element name="MONITORING"/>
128
+ <xs:element name="SCHED_ACTIONS" type="xs:anyType"/>
146
129
  <xs:element name="TEMPLATE" type="xs:anyType"/>
147
130
  <xs:element name="USER_TEMPLATE" type="xs:anyType"/>
148
131
  <xs:element name="HISTORY_RECORDS">
@@ -0,0 +1,42 @@
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">
4
+ <xs:include schemaLocation="shared.xsd"/>
5
+ <xs:element name="BACKUPJOB">
6
+ <xs:complexType>
7
+ <xs:sequence>
8
+ <xs:element name="ID" type="xs:integer"/>
9
+ <xs:element name="UID" type="xs:integer"/>
10
+ <xs:element name="GID" type="xs:integer"/>
11
+ <xs:element name="UNAME" type="xs:string"/>
12
+ <xs:element name="GNAME" type="xs:string"/>
13
+ <xs:element name="NAME" type="xs:string"/>
14
+ <xs:element name="LOCK" type="LOCK" minOccurs="0" maxOccurs="1"/>
15
+ <xs:element name="PERMISSIONS" type="PERMISSIONS"/>
16
+ <xs:element name="PRIORITY" type="xs:integer"/>
17
+ <xs:element name="LAST_BACKUP_TIME" type="xs:integer"/>
18
+ <xs:element name="LAST_BACKUP_DURATION" type="xs:integer"/>
19
+ <xs:element name="SCHED_ACTIONS" type="IDS"/>
20
+ <xs:element name="UPDATED_VMS" type="IDS"/>
21
+ <xs:element name="OUTDATED_VMS" type="IDS"/>
22
+ <xs:element name="BACKING_UP_VMS" type="IDS"/>
23
+ <xs:element name="ERROR_VMS" type="IDS"/>
24
+ <xs:element name="TEMPLATE">
25
+ <xs:complexType>
26
+ <xs:sequence>
27
+ <xs:element name="BACKUP_VMS" type="xs:string"/>
28
+ <xs:element name="BACKUP_VOLATILE" type="xs:string" minOccurs="0" maxOccurs="1"/>
29
+ <xs:element name="DATASTORE_ID" type="xs:string" minOccurs="0" maxOccurs="1"/>
30
+ <xs:element name="EXECUTION" type="xs:string" minOccurs="0" maxOccurs="1"/>
31
+ <xs:element name="FS_FREEZE" type="xs:string" minOccurs="0" maxOccurs="1"/>
32
+ <xs:element name="KEEP_LAST" type="xs:integer" minOccurs="0" maxOccurs="1"/>
33
+ <xs:element name="MODE" type="xs:string" minOccurs="0" maxOccurs="1"/>
34
+ <xs:element name="RESET" type="xs:string" minOccurs="0" maxOccurs="1"/>
35
+ <xs:element name="SCHED_ACTION" type="SCHED_ACTION" minOccurs="0" maxOccurs="unbounded"/>
36
+ </xs:sequence>
37
+ </xs:complexType>
38
+ </xs:element>
39
+ </xs:sequence>
40
+ </xs:complexType>
41
+ </xs:element>
42
+ </xs:schema>
@@ -0,0 +1,12 @@
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">
4
+ <xs:include schemaLocation="backupjob.xsd"/>
5
+ <xs:element name="BACKUPJOB_POOL">
6
+ <xs:complexType>
7
+ <xs:sequence maxOccurs="1" minOccurs="1">
8
+ <xs:element ref="BACKUPJOB" maxOccurs="unbounded" minOccurs="0"/>
9
+ </xs:sequence>
10
+ </xs:complexType>
11
+ </xs:element>
12
+ </xs:schema>
@@ -4,6 +4,8 @@
4
4
  <xs:include schemaLocation="acct.xsd"/>
5
5
  <xs:include schemaLocation="acl_pool.xsd"/>
6
6
  <xs:include schemaLocation="api_info.xsd"/>
7
+ <xs:include schemaLocation="backupjob_pool.xsd"/>
8
+ <xs:include schemaLocation="backupjob.xsd"/>
7
9
  <xs:include schemaLocation="cluster_pool.xsd"/>
8
10
  <xs:include schemaLocation="cluster.xsd"/>
9
11
  <xs:include schemaLocation="datastore_pool.xsd"/>
@@ -28,6 +30,7 @@
28
30
  <xs:include schemaLocation="raftstatus.xsd"/>
29
31
  <xs:include schemaLocation="security_group_pool.xsd"/>
30
32
  <xs:include schemaLocation="security_group.xsd"/>
33
+ <xs:include schemaLocation="shared.xsd"/>
31
34
  <xs:include schemaLocation="showback.xsd"/>
32
35
  <xs:include schemaLocation="user_pool.xsd"/>
33
36
  <xs:include schemaLocation="user.xsd"/>
@@ -244,6 +244,8 @@
244
244
  </xs:complexType>
245
245
  </xs:element>
246
246
 
247
+ <xs:element name="MAX_BACKUPS" type="xs:integer" minOccurs="0" maxOccurs="1"/>
248
+ <xs:element name="MAX_BACKUPS_HOST" type="xs:integer" minOccurs="0" maxOccurs="1"/>
247
249
  <xs:element name="MAX_CONN" type="xs:integer" minOccurs="0" maxOccurs="1"/>
248
250
  <xs:element name="MAX_CONN_BACKLOG" type="xs:integer" minOccurs="0" maxOccurs="1"/>
249
251
  <xs:element name="MESSAGE_SIZE" type="xs:integer" minOccurs="0" maxOccurs="1"/>
@@ -293,6 +295,7 @@
293
295
  <xs:element name="CLONE_TARGET" type="xs:string" minOccurs="0" maxOccurs="1"/>
294
296
  <xs:element name="CLONE_TARGET_SHARED" type="xs:string" minOccurs="0" maxOccurs="1"/>
295
297
  <xs:element name="CLONE_TARGET_SSH" type="xs:string" minOccurs="0" maxOccurs="1"/>
298
+ <xs:element name="DISK_TYPE" type="xs:string" minOccurs="0" maxOccurs="1"/>
296
299
  <xs:element name="DISK_TYPE_SHARED" type="xs:string" minOccurs="0" maxOccurs="1"/>
297
300
  <xs:element name="DISK_TYPE_SSH" type="xs:string" minOccurs="0" maxOccurs="1"/>
298
301
  <xs:element name="DRIVER" type="xs:string" minOccurs="0" maxOccurs="1"/>
@@ -0,0 +1,46 @@
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">
4
+ <xs:complexType name="LOCK">
5
+ <xs:sequence>
6
+ <xs:element name="LOCKED" type="xs:integer"/>
7
+ <xs:element name="OWNER" type="xs:integer"/>
8
+ <xs:element name="TIME" type="xs:integer"/>
9
+ <xs:element name="REQ_ID" type="xs:integer"/>
10
+ </xs:sequence>
11
+ </xs:complexType>
12
+ <xs:complexType name="PERMISSIONS">
13
+ <xs:sequence>
14
+ <xs:element name="OWNER_U" type="xs:integer"/>
15
+ <xs:element name="OWNER_M" type="xs:integer"/>
16
+ <xs:element name="OWNER_A" type="xs:integer"/>
17
+ <xs:element name="GROUP_U" type="xs:integer"/>
18
+ <xs:element name="GROUP_M" type="xs:integer"/>
19
+ <xs:element name="GROUP_A" type="xs:integer"/>
20
+ <xs:element name="OTHER_U" type="xs:integer"/>
21
+ <xs:element name="OTHER_M" type="xs:integer"/>
22
+ <xs:element name="OTHER_A" type="xs:integer"/>
23
+ </xs:sequence>
24
+ </xs:complexType>
25
+ <xs:complexType name="IDS">
26
+ <xs:sequence>
27
+ <xs:element name="ID" type="xs:integer" minOccurs="0" maxOccurs="unbounded"/>
28
+ </xs:sequence>
29
+ </xs:complexType>
30
+ <xs:complexType name="SCHED_ACTION">
31
+ <xs:sequence>
32
+ <xs:element name="ID" type="xs:integer"/>
33
+ <xs:element name="PARENT_ID" type="xs:integer"/>
34
+ <xs:element name="TYPE" type="xs:string"/>
35
+ <xs:element name="ACTION" type="xs:string"/>
36
+ <xs:element name="ARGS" type="xs:string" minOccurs="0" maxOccurs="1"/>
37
+ <xs:element name="TIME" type="xs:string"/>
38
+ <xs:element name="REPEAT" type="xs:integer" minOccurs="0" maxOccurs="1"/>
39
+ <xs:element name="DAYS" type="xs:string" minOccurs="0" maxOccurs="1"/>
40
+ <xs:element name="END_TYPE" type="xs:integer" minOccurs="0" maxOccurs="1"/>
41
+ <xs:element name="END_VALUE" type="xs:integer" minOccurs="0" maxOccurs="1"/>
42
+ <xs:element name="DONE" type="xs:integer" minOccurs="0" maxOccurs="1"/>
43
+ <xs:element name="MESSAGE" type="xs:string" minOccurs="0" maxOccurs="1"/>
44
+ </xs:sequence>
45
+ </xs:complexType>
46
+ </xs:schema>
@@ -1,6 +1,7 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
2
  <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"
3
3
  targetNamespace="http://opennebula.org/XMLSchema" xmlns="http://opennebula.org/XMLSchema">
4
+ <xs:include schemaLocation="shared.xsd"/>
4
5
  <xs:element name="VM">
5
6
  <xs:complexType>
6
7
  <xs:sequence>
@@ -10,21 +11,7 @@
10
11
  <xs:element name="UNAME" type="xs:string"/>
11
12
  <xs:element name="GNAME" type="xs:string"/>
12
13
  <xs:element name="NAME" type="xs:string"/>
13
- <xs:element name="PERMISSIONS" minOccurs="0" maxOccurs="1">
14
- <xs:complexType>
15
- <xs:sequence>
16
- <xs:element name="OWNER_U" type="xs:integer"/>
17
- <xs:element name="OWNER_M" type="xs:integer"/>
18
- <xs:element name="OWNER_A" type="xs:integer"/>
19
- <xs:element name="GROUP_U" type="xs:integer"/>
20
- <xs:element name="GROUP_M" type="xs:integer"/>
21
- <xs:element name="GROUP_A" type="xs:integer"/>
22
- <xs:element name="OTHER_U" type="xs:integer"/>
23
- <xs:element name="OTHER_M" type="xs:integer"/>
24
- <xs:element name="OTHER_A" type="xs:integer"/>
25
- </xs:sequence>
26
- </xs:complexType>
27
- </xs:element>
14
+ <xs:element name="PERMISSIONS" type="PERMISSIONS"/>
28
15
  <xs:element name="LAST_POLL" type="xs:integer"/>
29
16
 
30
17
  <!-- STATE and LCM_STATE values,
@@ -38,16 +25,7 @@
38
25
  <xs:element name="STIME" type="xs:integer"/>
39
26
  <xs:element name="ETIME" type="xs:integer"/>
40
27
  <xs:element name="DEPLOY_ID" type="xs:string"/>
41
- <xs:element name="LOCK" minOccurs="0" maxOccurs="1">
42
- <xs:complexType>
43
- <xs:sequence>
44
- <xs:element name="LOCKED" type="xs:integer"/>
45
- <xs:element name="OWNER" type="xs:integer"/>
46
- <xs:element name="TIME" type="xs:integer"/>
47
- <xs:element name="REQ_ID" type="xs:integer"/>
48
- </xs:sequence>
49
- </xs:complexType>
50
- </xs:element>
28
+ <xs:element name="LOCK" type="LOCK" minOccurs="0" maxOccurs="1"/>
51
29
  <xs:element name="MONITORING">
52
30
  <xs:complexType>
53
31
  <xs:sequence>
@@ -91,6 +69,7 @@
91
69
  </xs:sequence>
92
70
  </xs:complexType>
93
71
  </xs:element>
72
+ <xs:element name="SCHED_ACTIONS" type="IDS"/>
94
73
  <xs:element name="TEMPLATE">
95
74
  <xs:complexType>
96
75
  <xs:sequence>
@@ -116,6 +95,17 @@
116
95
  <xs:element name="FEATURES" minOccurs="0" maxOccurs="1"/>
117
96
  <xs:element name="HYPERV_OPTIONS" minOccurs="0" maxOccurs="1"/>
118
97
  <xs:element name="GRAPHICS" minOccurs="0" maxOccurs="1"/>
98
+ <xs:element name="VIDEO" minOccurs="0" maxOccurs="1">
99
+ <xs:complexType>
100
+ <xs:sequence>
101
+ <xs:element name="TYPE" type="xs:string" minOccurs="0" maxOccurs="1"/>
102
+ <xs:element name="IOMMU" type="xs:string" minOccurs="0" maxOccurs="1"/>
103
+ <xs:element name="ATS" type="xs:string" minOccurs="0" maxOccurs="1"/>
104
+ <xs:element name="VRAM" type="xs:integer" minOccurs="0" maxOccurs="1"/>
105
+ <xs:element name="RESOLUTION" type="xs:string" minOccurs="0" maxOccurs="1"/>
106
+ </xs:sequence>
107
+ </xs:complexType>
108
+ </xs:element>
119
109
  <xs:element name="IMPORTED" type="xs:string" minOccurs="0" maxOccurs="1"/>
120
110
  <xs:element name="INPUT" minOccurs="0" maxOccurs="1"/>
121
111
  <xs:element name="MEMORY" type="xs:string" minOccurs="0" maxOccurs="1"/>
@@ -152,21 +142,6 @@
152
142
  <xs:element name="OS" minOccurs="0" maxOccurs="1"/>
153
143
  <xs:element name="PCI" minOccurs="0" maxOccurs="1"/>
154
144
  <xs:element name="RAW" minOccurs="0" maxOccurs="1"/>
155
- <xs:element name="SCHED_ACTION" minOccurs="0" maxOccurs="unbounded">
156
- <xs:complexType>
157
- <xs:sequence>
158
- <xs:element name="ACTION" type="xs:string"/>
159
- <xs:element name="ARGS" type="xs:string" minOccurs="0" maxOccurs="1"/>
160
- <xs:element name="DAYS" type="xs:string" minOccurs="0" maxOccurs="1"/>
161
- <xs:element name="END_TYPE" type="xs:string" minOccurs="0" maxOccurs="1"/>
162
- <xs:element name="END_VALUE" type="xs:string" minOccurs="0" maxOccurs="1"/>
163
- <xs:element name="ID" type="xs:string"/>
164
- <xs:element name="REPEAT" type="xs:string" minOccurs="0" maxOccurs="1"/>
165
- <xs:element name="TIME" type="xs:string"/>
166
- <xs:element name="WARNING" type="xs:string"/>
167
- </xs:sequence>
168
- </xs:complexType>
169
- </xs:element>
170
145
  <xs:element name="SECURITY_GROUP_RULE" minOccurs="0" maxOccurs="unbounded"/>
171
146
  <xs:element name="SNAPSHOT" minOccurs="0" maxOccurs="unbounded">
172
147
  <xs:complexType>
@@ -193,6 +168,7 @@
193
168
  <xs:element name="VROUTER_ID" type="xs:string" minOccurs="0" maxOccurs="1"/>
194
169
  <xs:element name="VROUTER_KEEPALIVED_ID" type="xs:string" minOccurs="0" maxOccurs="1"/>
195
170
  <xs:element name="VROUTER_KEEPALIVED_PASSWORD" type="xs:string" minOccurs="0" maxOccurs="1"/>
171
+ <xs:element name="SCHED_ACTION" type="SCHED_ACTION" minOccurs="0" maxOccurs="unbounded"/>
196
172
  </xs:sequence>
197
173
  </xs:complexType>
198
174
  </xs:element>
@@ -319,6 +295,7 @@
319
295
  <xs:element name="BACKUP_CONFIG" minOccurs="1" maxOccurs="1">
320
296
  <xs:complexType>
321
297
  <xs:sequence>
298
+ <xs:element name="BACKUP_JOB_ID" type="xs:string" minOccurs="0" maxOccurs="1"/>
322
299
  <xs:element name="BACKUP_VOLATILE" type="xs:string" minOccurs="0" maxOccurs="1"/>
323
300
  <xs:element name="FS_FREEZE" type="xs:string" minOccurs="0" maxOccurs="1"/>
324
301
  <xs:element name="INCREMENTAL_BACKUP_ID" type="xs:string" minOccurs="0" maxOccurs="1"/>
@@ -331,13 +308,7 @@
331
308
  </xs:sequence>
332
309
  </xs:complexType>
333
310
  </xs:element>
334
- <xs:element name="BACKUP_IDS" minOccurs="1" maxOccurs="1">
335
- <xs:complexType>
336
- <xs:sequence>
337
- <xs:element name="ID" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
338
- </xs:sequence>
339
- </xs:complexType>
340
- </xs:element>
311
+ <xs:element name="BACKUP_IDS" type="IDS"/>
341
312
  </xs:sequence>
342
313
  </xs:complexType>
343
314
  </xs:element>